您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于TIDSP的视频处理应用系统开发
基于DSP的应用系统开发2020/1/4PAGE|2DSP应用系统的设计1.DSP应用系统的软件设计*2.DSP应用系统的硬件设计a.硬件方案设计;(如有开发板可以先做实验,以验证设计需求能被满足)b.DSP及周边器件选型;c.原理图设计;d.PCB设计及仿真;e.硬件调试等。2020/1/4PAGE|3DSP应用系统的软件设计步骤:a.软件需求分析b.概要设计和详细设计(可能要借助一些软件建模工具,如rationalrose)c.C/C++程序设计与优化(算法的实现可以先利用MATLAB语言来进行验证)c.C/C++程序针对目标DSP的优化(VC环境下)*d.程序移植到CCS下*e.CCS下程序的优化与软件仿真(Simulator)*f.CCS下程序的硬件仿真测试(Emulator)*g.应用程序的FLASH烧写及测试。*2020/1/4PAGE|4C/C++程序针对目标DSP的优化1.变量定义方法尽量使用全局变量(global)和静态变量(static);寄存器变量(register)适合定义重复访问的变量。2.数据结构与数据类型对于对象的定义,尽量不要使用继承和模板;函数定义不要使用重载(overloading);能用byte类型的变量尽量不要用int类型;不要使用long类型;尽量使用const关键词;循环计数器应使用int类型。3.使用内联函数(inline)2020/1/4PAGE|5C/C++程序针对目标DSP的优化4.数值运算尽量使用逻辑运算代替乘除运算;(移位)尽量使用增量和减量操作符;(++、--)5.循环拆解及数组转化为了充分利用DSP的并行处理能力,对多重循环语句进行拆解,变换为单重循环。见下例:2020/1/4PAGE|6C/C++程序针对目标DSP的优化for(yy=0;yy8;yy++){for(j=0;j8;j++)tmp[j]=curr_blk[yy][j];//DownleftButterflyb[0]=((tmp[4]-tmp[7])1)+tmp[4];b[1]=((tmp[5]+tmp[6])1)+tmp[5];b[2]=((tmp[5]-tmp[6])1)-tmp[6];b[3]=((tmp[4]+tmp[7])1)+tmp[7];。。。curr_blk[yy][0]=b[0]+b[4];curr_blk[yy][1]=b[1]+b[5];curr_blk[yy][2]=b[2]+b[6];curr_blk[yy][3]=b[3]+b[7];curr_blk[yy][7]=b[0]-b[4];curr_blk[yy][6]=b[1]-b[5];curr_blk[yy][5]=b[2]-b[6];curr_blk[yy][4]=b[3]-b[7];}2020/1/4PAGE|7C/C++程序针对目标DSP的优化拆解后:for(yy=0;yy8;yy++){tmp0=curr_blk[yy][0];tmp1=curr_blk[yy][4];tmp2=curr_blk[yy][2];tmp3=curr_blk[yy][6];tmp4=curr_blk[yy][1];tmp5=curr_blk[yy][3];tmp6=curr_blk[yy][5];tmp7=curr_blk[yy][7];b0=((tmp[4]-tmp[7])1)+tmp[4];b1=((tmp[5]+tmp[6])1)+tmp[5];。。。curr_blk[yy][0]=b0+b4;curr_blk[yy][1]=b1+b5;。。。}2020/1/4PAGE|8程序移植到CCS下步骤:1.CCS运行环境设置首先要设置CCS中编译选项(buildoption)里的一些关键选项。比如目标版本;调入文件的目录和文件的输出目录等。其次要设置预处理(Preprocessor)里的包含搜索路径一栏。2.“重复定义”(multipledefinition)问题。在C/C++程序里,重复地定义变量和结构是允许的,但是在CCS里这是不被认可的。可以通过在变量前添加extern关键词来解决。3.DSP-CMD文件CMD文件指明程序和数据的存放位置。一般的开发套件有具体的实例可以参考。2020/1/4PAGE|9CCS下程序的优化与软件仿真(Simulator)1.利用编译选项-mt:表示在程序中没有使用alaising技术,这使得编译器可以进行比较好的优化。因为在程序中,若有超过一种以上的方式访问同一个对象,就会产生混迭。编译器为了防止混迭,将极大地限制其做优化工作。在源程序中未使用混迭技术的场合,通过设置-mt参数将较大地提高编译器的优化性能。-o3:对文件级别进行最强的优化,一般在编译时应该使用这个选项。但是在个别情况下使用这个选项优化程序可能会出现错误。(-o2有相同现象,-o0和-o1不会出现错误)。可能是在优化循环,组织流水线的时候发生错误。如果有这种现象出现可以同时使用-g选项,程序优化就不会出现错误,但是优化效果会下降。另外可以调整程序的表达方式,可能会避免编译器发生错误。2020/1/4PAGE|10CCS下程序的优化与软件仿真(Simulator)-pm:在程序级别进行优化。可以将所有文件联合在一起进行优化,主要是去掉没有被调用的函数、总是常数的变量以及没有使用的函数返回值。建议由自己进行这种优化工作。通过参数-pm的设置,将容许编译器对整个项目的所有源程序作联合观测,这有利于提高程序运行速度,同时也有利于代码尺寸的优化。-ms0:不使用冗余循环进行优化,减小程序的大小。一般情况下这个选项对程序大小的优化作用不明显。编译选项的更多内容可以参看SPRU187-TMS320C6000OptimizingCompilerUser'sGuide2020/1/4PAGE|11CCS下程序的优化与软件仿真(Simulator)2.尽量使用DSPLIB提供的函数DSP函数库提供了很多高优化的函数,比如FFT运算,数学运算、矩阵运算等。详细可以参阅:SPRU565-TMS320C64xDSPLibraryProgrammer'sReference3.尽量使用DSP的图像处理库DSP的图像处理库提供了很多图像处理的函数。详细可以参阅:SPRUce023-TMS320C64xImage/VideoProcessingLibraryProgrammerReference4.线性汇编当程序经优化后依然无法满足实时处理的要求时,对程序的关键部分,主要是循环结构的代码进行线性汇编。2020/1/4PAGE|12CCS下程序的优化与软件仿真(Simulator)5.Cache的使用对Cache进行的优化主要是从提高Cache的命中率的角度来进行的,如果Cache中的数据能被多次重复利用,即DSP的运算单元可直接从高速Cache中访问数据,而不需要访问慢速的存储器,避免了DSP的数据访问等待时间。对Cache大小进行配置的总原则是将尽量多的关键数据分配到片内存储器。详细参阅:SPRU862-TMS320C64x+DSPCacheUser‘sGuide6.EDMA的使用使用EDMA方式进行数据搬移,这在CPU频繁访问外部存储器数据时能大大节省CPU资源。其主要可实现下列数据的传输:视频数据从片外存储器传人片内Cache中;处理之后的数据从片内传输到片外保存;详细参阅:SPRU234-TMS320C6000DSPEnhancedDirectMemoryAccess(EDMA)ControllerReferenceGuide2020/1/4PAGE|13CCS下程序的硬件仿真测试(Emulator)安装驱动后,通过仿真器把PC机和开发板连接起来,打开开发板电源,即可开始测试。具体需要添加一些驱动程序,可以参考开发套件的相应说明书。2020/1/4PAGE|14应用程序的FLASH烧写及测试一般的,现在厂商提供的开发套件中包含了数据转换程序和FLASH烧写程序,使得此过程较为简单。
本文标题:基于TIDSP的视频处理应用系统开发
链接地址:https://www.777doc.com/doc-2572404 .html