ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:96.17KB ,
资源ID:17064055      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17064055.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MotionJPEG实验讲义Word文档下载推荐.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MotionJPEG实验讲义Word文档下载推荐.docx

1、实验环境:Ubuntu 9.04注:其他Linux操作系统也可,但Windows操作系统不可使用实验平台:实验平台下载地址:libtool-1.5下载地址:实验平台安装与测试:1 对压缩包libtool-1.5解压缩,然后安装libtool2 对压缩包projet_soc解压缩,得到文件夹projet_soc3 设置环境变量SOCLIB_DIR=projet_soc文件夹所在的路径4 在主目录/home下创建一个工程目录,如/home/soclib_exp5 将文件夹projet/TP/TP0/HW复制到所创建的工程目录(注:该文件夹中包含了如图2所示的基于SoCLib构建的单核SoC ESL

2、高层次抽象模型,即硬件部分)6 将文件夹projet/TP/TP0/SW/hello_world复制到所创建的工程目录(注:该文件夹中包含了在单核SoC上需要运行的helloworld测试程序,即软件部分)7 打开Shell控制台,进入projet/TP文件夹,输入source install_env.sh设置系统环境变量8 进入/home/soclib_exp/hello_world文件夹,输入source install.sh configurations/mips运行脚本,然后输入make对软件部分进行编译9 进入/home/soclib_exp/HW文件夹,输入make对硬件部分进行编

3、译10在HW文件夹下,输入ln -s ./hello_world/APP.x11输入./simulation.x -1,若出现如图1所示情况,则表示实验平台安装测试成功每次重新启动一次Shell控制台,均要重新运行一下步骤7中的脚本“install_env.sh”。图1 实验平台测试结果实验平台目录结构: 本实验平台projet_soc的目录结构如图2所示。图2 实验平台projet_soc目录结构实验平台projet_soc包含两个子文件夹:PLATFORM和TP。其中PLATFORM为实验平台,TP为4个实验内容。PLATFORM文件夹包含两个子文件夹: HW_PLATFORM:实验平台的

4、硬件部分,又包含两个子文件夹,SoCLib和utils。SoCLib为本次实验所依赖的SoCLib ESL建模与仿真环境。utils包括了实验所需的工具,如仿真内核Systemcass、调试工具CDB。 SW_PLATFORM:实验平台的软件部分,又包含两个子文件夹,APES和Toolchains。APES包括了本次实验所使用的嵌入式操作系统DNA。Toolchains包括了实验所需的MIPS处理器交叉编译链。TP文件夹包含五个子文件夹和一个脚本文件: TP0TP2:分别对应了实验一、二、三的相关文件和说明。 vci_idct:对应实验四所需添加的idct模块的程序代码。 docs:包含了实现

5、所需的文档,如CDB文档,VCI协议文档。 install_env.sh:设置各种环境变量的脚本。SoCLib ESL仿真平台及MJPEG解码流程的介绍1 SoCLib平台 SoCLib是一个由法国TIMA Lab、Lip6等研究机构与STMicrelectronics等知名企业联合开发的,用于多核SoC系统架构设计的ESL建模仿真平台。 SoCLib平台提供了用于SoC开发所需的丰富硬件IP模块的高抽象层次模型库,包括:ARM、MIPS、Nios等嵌入式微处理器、总线及片上网络、Cache、主存、各种外设等。所有的硬件IP模块均采用C+以及SystemC进行建模。此外SoCLib平台还提供了

6、多个嵌入式操作系统和用于进行系统调试、监控、设计空间探测的工具。 SoCLib平台所提供的硬件IP模块均具有两种抽象层次模型,分别是:CABA(Cycle Accurate Bit Accurate)模型和TLM-DT(Transaction Level Modeling with Distributed Time)模型。 SoCLib平台所提供的各种IP模块的高抽象层次模型均采用VISA组织(Virtual Socket Interface Alliance)的IP标准化接口VCI(Virtual Component Interface)进行封装,大大增加了IP模块的可复用性,可与任意的总线

7、及片上网络协议进行互连。 SoCLib平台所提供的所有模型以及工具均遵循LGPL开源协议,设计者可免费获取并根据设计需求对其进行修改、裁剪与扩充。更多关于SoCLib的细节,可浏览SoCLib主页进行了解与学习。主页地址:www. soclib.fr2 Motion-JPEG解码流程Motion-JPEG是一种视频压缩编码格式,由一组连续的采用JPEG标准进行压缩的图像组成。由于相比其他视频格式占用相对较少的存储空间,因此MJPEG目前已被数码照相机、便携式摄像机广泛采用,用于视频短片的编码。在MJPEG中,每幅视频帧被单独捕获,并采用JPEG算法进行压缩。JPEG是由联合图像专家组(Join

8、t Photographic Experts Group)提出的有损图像压缩算法2,使用有损压缩算法压缩所得图像质量将低于原始图像质量。但采用JPEG算法压缩的图像,其质量损失使用肉眼几乎无法识别,并能获得较高压缩比。JPEG压缩算法将图像分割为以88个像素为单位的像素块,然后将每个像素块从时域转换到频域之上,采用滤波器去除高频分量,最后使用哈夫曼编码方法将像素块编码二进制码流。每个88的像素块称为宏块单元(MacroBlock Unit,MCU)。压缩的码流由一系列原始二进制数串组成,并使用标记进行分割。MJPEG的解码流程如图3所示。这个解码流程分为:哈夫曼解码(Huffman Decod

9、ing)、反锯齿扫描(Inverse Zigzag Scan)、反量化(Inverse Quantification)、块重排(Block Reordering)、反离散余弦变换(Inverse Discrete Cosine Transform,IDCT)五部分。图3 MJPEG解码流程实验一 构建基于SoCLib的单核SoC实验目的与内容:1 了解SoCLib平台工作原理。2 掌握如何利用SoCLib定义一个单核SoC硬件平台,如何在该SoC平台之上添加其他硬件设备。3 学习如何编写简单C程序以控制各种硬件设备。4 在所定义的单核SoC上运行串行的Motion-JPEG程序。5 分析MJP

10、EG解码每部分在单核上运行所需要的时间,思考对该算法进行并行化。实验步骤:1 首先,利用实验平台所提供的一个最基本的单核SoC熟悉SoCLib的工作原理。如图4所示,该单核SoC硬件平台由一个MIPS R3000处理器,一个存储器以及一个显示终端TTY组成。这些硬件设备通过片上网络Generic Micronetwork(GMN)进行互连。图4 基本单核SoC硬件平台2 该基本单核SoC基于SoCLib实现的顶层文件top.cpp位于/projet_soc/TP/TP0/HW下。建议学生仔细阅读该顶层文件,了解如何通过该文件利用SoCLib所提供的各种ESL模型组件搭建SoC验证平台,如何定义

11、声明各种设备模块以及各设备模块之间如何连接。3 在熟悉SoCLib工作原理和顶层文件top.cpp的组织形式后,在图5所示的单核SoC平台之上添加定时器VCI_TIMER、文件系统VCI_FDACCESS、帧缓存VCI_FRAMEBUFFER以及同步锁VCI_LOCKS等设备模块,修改后的单核SoC平台如图3所示。图5 修改后的单核SoC硬件平台 基于SoCLib添加各个设备模块时,应重点检查以下几个方面: 设备模块与各种信号的声明是否正确? 设备模块的初始化及各种参数的设置是否正确? 各设备模块与互连网络及模块间信号的连接是否正确? 各设备模块的内存映射(Memory Mapping)地址的

12、设置是否正确? 与互连网络连接的主设备、从设备数目设置是否正确?注意:使用SoCLib,每添加一个设备模块都会遇到上述问题,因此应该特别注意。4 编写简单的C程序,控制所添加的各种设备模块的功能,以验证SoC系统各设备工作的正确性。如何添加各设备模块以及如何使用请参见SoCLib主页中的相关信息:VCI_TIMER:VCI_FDACCESS:VCI_FRAMEBUFFER:VCI_LOCKS:5 对位于/projet_soc/TP/TP0/SW/mjpeg_seq文件夹下的MJPEG串行程序使用MIPS交叉编译器进行编译,移植到图3所示的单核SoCLib平台之上。6 熟悉MJEPG的算法流程,

13、思考该算法任务的并行性,通过仿真统计各子程序所用的时间,考虑如何进行架构改进及软/硬件划分。建议利用TIMER模块,统计MJPEG串行程序每部分在MIPS3000上运行所需要的时间。文件project_soc/TP/TP0_CORRECTION是第一个实验的正确结果,可参考。下面是如何在TP0框架上添加TIMER、FDACCESS、LOCKS、FRAMEBUFFER四个模块的例子,供参考。(一) 硬件部分(In your working directory:/projet_soc/TP/TP0/HW)1. top.cpp1)添加头文件:#include vci_locks.hvci_timer

14、.hvci_fd_access.hvci_framebuffer.h2)设置宏定义,关于fbuffer的:#define FBUFFER_WIDTH 256 #define FBUFFER_HEIGHT 1443)修改Mapping table:可将reset excep text data 段最后一个参数改为true,将提高速度。maptab.add(Segment(reset, RESET_BASE, RESET_SIZE, IntTab(1), true); maptab.add(Segment(excep, EXCEP_BASE, EXCEP_SIZE, IntTab(1), true

15、);text , TEXT_BASE , TEXT_SIZE , IntTab(1), true);data , DATA_BASE , DATA_SIZE , IntTab(1), true);并添加到Mapping table中,下面参数的意义分别是:名称,基地址,大小,索引,是否可缓存。semlocks_seg, SEMLOCKS_BASE, SEMLOCKS_SIZE, IntTab(3), false); maptab.add(Segment(timer, TIMER_BASE, TIMER_SIZE, IntTab(4), false);fd_access, FD_ACCESS_B

16、ASE, FD_ACCESS_SIZE, IntTab(5), false);frame_buffer, FBUFFER_BASE, FBUFFER_SIZE, IntTab(6), false);4)添加Components,修改参数:soclib:caba:VciVgmn vgmn(vgmn,maptab, 3, 7, 2, 8); 其中3和7与总线上挂的设备有关。各个函数参数个数及意义不同,须参照函数定义,中有具体定义。VciLocks semlocks(semlocks, IntTab(3), maptab); soclib:VciTimer timer(, IntTab(4), ma

17、ptab, 1);VciFdAccess fd_access(fdaccess, maptab, IntTab(2), IntTab(5);VciFrameBuffer fbuffer(fbuffer, IntTab(6), maptab, FBUFFER_WIDTH, FBUFFER_HEIGHT);5)声明Signals添加:sc_signal signal_mips0_it0(signal_mips0_it0);程序漏掉了。locks: VciSignalssignal_vci_semlocks(signal_vci_semlocks/声明连接lock的target端口信号timer:s

18、ignal_vci_timer(signal_vci_timer/声明timer的target端口信号 signal_timer_it(signal_timer_it/声明timer中断端口信号fd_access:signal_vci_fd_access(signal_vci_fd_access;/声明连接fd_access的target端口信号signal_vci_inv_fd_access(signal_vci_inv_fd_access/声明连接fd_access的initiator端口信号 signal_fd_access_it(signal_fd_access_it/声明连接fd_a

19、ccess中断端口信号fbuffer:signal_vci_fbuffer(signal_vci_fbuffer/声明fbuffer的target端口信号6)添加Net-List,实现四个组件的相关连接连接总线:vgmn.p_to_initiator2(signal_vci_inv_fd_access);/fd_access是一个控制模块,将其initiator信号一端与总线相连vgmn.p_to_target3(signal_vci_semlocks);/将lock的target信号一端与总线相连vgmn.p_to_target4(signal_vci_timer); /将timer的tar

20、get信号一端与总线相连vgmn.p_to_target5(signal_vci_fd_access); /fd_access也是一个target模块,将fd_access的target信号一端与总线相连vgmn.p_to_target6(signal_vci_fbuffer); /将fbuffer的target信号一端与总线相连 semlocks.p_clk(signal_clk);/连接时钟信号 semlocks.p_resetn(signal_resetn);/连接复位信号semlocks.p_vci(signal_vci_semlocks);/ 将lock的target信号另一端与lo

21、ck模块相连 timer.p_clk(signal_clk); /连接时钟信号 timer.p_resetn(signal_resetn); /连接复位信号timer.p_vci(signal_vci_timer);/ 将timer的target信号另一端与timer模块相连timer.p_irq0(signal_timer_it);/将timer的中断信号一端与timer模块相连,另一端是挂起的,在此实验中未用到 fd_access.p_clk(signal_clk); fd_access.p_resetn(signal_resetn);fd_access.p_vci_target(sign

22、al_vci_fd_access); / 将fd_access的target信号另一端与fd_access模块相连fd_access.p_vci_initiator(signal_vci_inv_fd_access);/ 将fd_access的initiator信号另一端与fd_access模块相连fd_access.p_irq(signal_fd_access_it); /将fd_access的中断信号一端与fd_access模块相连,另一端是挂起的,在此实验中未用到 fbuffer.p_clk(signal_clk); fbuffer.p_resetn(signal_resetn);fbu

23、ffer.p_vci(signal_vci_fbuffer);/ 将fbuffer的target信号另一端与fbuffer模块相连(注:原文件中有错误,请将mips0.p_irq0(signal_tty_it)换为:mips0.p_irq0(signal_mips0_it0); )2. segmentation.h将#define DATA_BASE 0x20000000修改为修改segmentation.h文件,添加四个组件的段地址和大小:#define SEMLOCKS_BASE 0xC1000000#define SEMLOCKS_SIZE 0x00000400 / 256 locks#

24、define TIMER_BASE 0xC2000000#define TIMER_SIZE 0x00000100 / 1 seul timer#define FD_ACCESS_BASE 0xC3000000 #define FD_ACCESS_SIZE 0x00001000#define FBUFFER_BASE 0xC4000000#define FBUFFER_SIZE 0x010000003.platform_desc修改platform_desc文件,注册要用到的模块添加下面四行: Uses(vci_timer),vci_fd_accessvci_framebuffervci_lo

25、cks(二) 软件部分(In your working directory:/projet_soc/TP/TP0/SW) 1)将movie = fopen (/fd/ - TODO YOUR PATH TO THE IMMAGE - /ice_age_256x144_444.mjpeg, r路径修改为:movie = fopen ( / fd / home / vlsi / Programfiles / projet_soc / TP / TP0 /SW/mjpeg_seq/images/ice_age_256x144_444.mjpeg2.dispath.c(/SW/mjpeg_seg/so

26、urces/dispatch.h)1) 修改timer首地址:将修改为:volatile unsigned long int * timer = (unsigned long int *)0xC2000000;(因为在segmentation.h中我们定义了timer新的首地址,首地址中存放了记录的数据)。2) 修改memcpy中的首地址:将memcpy ( - TODO HARDWARE ADDRESS OF FRAMEBUFFER -, picture, SOF_section . width * SOF_section . height * 2);修改为:memcpy (void *) 0xC400

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1