TI-DM642优化相关
DM642上5-3提升小波的优化

DM642上5/3提升小波的优化在新的图像压缩标准JPEG2000 中,采用9/7、5/3 提升小波变换作为编码算法,其中5/3 小波变换是一种可逆的整数变换,可以实现无损或有损的图像压缩。
在通用的DSP 芯片上实现该算法具有很好的可扩展性、可升级性与易维护性。
用这种方式灵活性强,完全能满足各种处理需求。
1 提升算法提升算法[1]是由Sweldens 等在Mallat 算法的基础上提出的,也称为第二代小波变换。
与Mallat 算法相比,提升算法不依赖傅立叶变换,降低了计算量和复杂度,运行效率相应提高。
由于具有整数变换及耗费存储单元少的特点,提升算法很适合于在定点DSP 上实现。
小波提升算法的基本思想是通过基本小波逐步构建出一个具有更加良好性质的新小波。
其实现步骤为分解(split)、预测(predict)和更新(update)。
首先按照对原信号进行对称延拓得到新的x(n)。
分解是将数据分为偶数序列x(2n)和奇数序列x(2n+1)二个部分;预测是用分解的偶数序列预测奇数序列,得到的预测误差为变换的高频分量:H(n)=x(2n+1)-{[x(2n)+x(2n+2)]1} 更新是由预测误差更新偶数序列,得到变换的低频分量:L(n)=x(2n)+{[H(n) +H(n-1)+2]2}计算过程如图1 所示。
在这种方法中,SDRAM 中的一个数据块首先传输到L2 中,然后取到L1D 中进行水平方向的提升,再对该块进行垂直方向的提升。
这样,由于垂直提升所需的数据都在L1D 中,避免了此处数据缓存缺失的产生,使总的缺失数大大降低。
2.3 数据传输(1)SDRAM 与L2 间的数据传输由于EDMA[6][7]数据传输与CPU 运行相互独立,因此在L2 中开辟两块缓存:EDMA 在CPU 处理InBuffA 的同时将下一块数据传输到InBuffB,解决了CPU 读取低速设备SDRAM 引起的时延,如图3 所示。
边界延拓主要是用于计算高频系数。
h.264视频编码技术分析与在dm642上的移植与优化

3.4实验分析实验以H.264的标准化程序JM86为测试平台,编译器使用MicrosoitVisualStudio.NET2003。
硬件环境为IntelPentium㈣.D2.66GHz处理器、L1Cache16KB、L2Cache1M,操作系统为MicrosoRW'mdowsXP。
图像评价环境为Matlab图像处理工具箱。
3.4.1实验过程实验选取两个视频序列进行测试,评测编码器的性能。
这两个图像序列分别代表了不同复杂度的标准测试图像,图像序列Claire和Foreman进行比较,Claire是简单的头肩像,如图3-4所示。
Foreman是前景和背景都有运动的复杂图像。
如图3.5所示。
实验中选取每个序列50帧(QCIF格式,176X144,Y.U:v=4:2:O)作为数据源。
图3-4Claire图像序列图3.5Foreman图像序列JM86编码器可以有很多的设置,不同的设置代表使用不同工具的组合。
图3.6是编码器的输出显示,其中列出了在测试中使用的设置。
数据源设置选项编码器性能FrameBit/picQPSnrYSnrUSnrVTime(ms)MET(r∞)Frm/FldRef17624688451210004904111242.36742.11242.09941.40941.3602501723592353900FRM162FRM1i88FRM096FRM1188FRM070197l§”"卯够"拍弱"曲LO267扭∞扎“¨”拍拍弘%勰朋如拍{;;琳科剐郫剐002143黜黜潞块的率失真优化代价函数RD—Cost的调用次数可以看出,使用改进算法比基本算法减少了函数的调用次数。
优化算法输出图像如图3.8所示。
图3-8优化算法输出图像图像效果从主观来看,局部点出现了方格现象(图中箭头所指范围),经观察,这些方格点多出现在图像内容突变的位置,这是由于所有的预测都不能跨边界预测,因此每个宏块在边界上需要进行边界滤波。
基于 DM642 的视频监控系统硬件设计.

基于DM642的视频监控系统硬件设计随着人们生活水平的提高和对工作、生活环境中安全防卫需求的增长,视频监控系统近年来得到了迅速的发展。
引言传统的基于PC机的视频监控系统多存在着诸如安装携带不便、不能在恶劣环境下使用等一些缺点,这就亟待一种全新的视频监控系统的出现。
随着近年来超大规模集成电路和嵌入式软硬件技术的迅猛发展,特别是DSP、PowerPC等嵌入式芯片的出现,将嵌入式处理器应用到视频监控系统中不仅克服了上述基于PC机系统的一些缺点,而且其强大的功能加上丰富的外设接口和高度的可编程性使得视频监控的硬件和软件都更窬易实现。
正是由于越来越高的性价比加上体积小、成本低等独特优势,使得嵌入式芯片在视频监控领域也渐渐拥有了一席之地。
1 系统概述文中设计的通用视频监控系统,采用TI公司2002年生产的专用多媒体芯片TMS320DM642(简称“DM642”)作为处理器,能够实现4路音视频同时采集,并支持复杂的音频视频压缩算法(如MPEG 4标准),可以24小时不间断地进行有声视频的采集、回放与存储。
系统的工作过程如下:系统上电或复位后,从Flash加载程序,完成对芯片的初始化和外围硬件的配置等工作,之后便开始进行图像采集。
DM642通过I2C口对系统中的其他芯片进行控制,从摄像头采集到的模拟视频信号经过视频解码器转换为数字视频信号,送入DM642的视频通道(VP端口);同步采集到的模拟音频信号经过音频编解码器模/数转换后,送入DM642的音频通道(McASP端口)。
DM642将接收到的数字视频信号和数字音频信号用MPEG4标准编码压缩,再通过DM642扩展出来的ATA接口将数据以文件的格式存储到本地硬盘,供日后调用。
本系统主要由以下几个模块组成:DM642模块、存储模块、视频和音频模块、电源模块等,系统结构如图1所示。
2 DM642模块DM642基于C64x内核,并在其基础上增加了很多外围设备和接口,因而在实际工程中的应用更为广泛和简便。
基于DM642的H.264编码算法优化与实现的开题报告

基于DM642的H.264编码算法优化与实现的开题报告一、选题的背景随着高清视频流媒体技术的迅速发展,视频编码的技术需求也越来越迫切。
目前,H.264编码技术作为高清视频编码中的先进技术,已经成为了许多媒体应用的核心。
因此,对于H.264编码算法的优化及其在DM642平台上的实现显得十分重要和有必要。
二、选题的意义及研究内容本次选题旨在探究基于DM642的H.264编码算法的优化与实现,主要研究内容包括:1. H.264编码算法的优化:根据H.264编码算法的特点和功能,对算法进行优化,提升编码效率和运算速度。
2. 构建H.264编码实验平台:在DM642平台上构建H.264编码实验平台,方便对编码算法进行实验和性能测试。
3. 实现H.264编码算法:在DM642平台上实现经过优化后的H.264编码算法,验证优化效果和性能。
三、选题的关键技术难点1. H.264编码算法的理解和掌握:H.264编码算法是一种复杂的视频编码标准,需要对其进行深入的理解和掌握。
2. DM642平台的应用和开发:需要对DM642平台进行了解和掌握,包括硬件资源、编程语言、操作系统等。
3. H.264编码算法的优化:需要对H.264编码算法进行深入的优化,包括预测、变换、量化等方面的优化。
四、预期成果通过本项目的研究,我们期望可以:1. 对H.264编码算法进行深入的理解和掌握,提高算法的编码效率和运算速度。
2. 建立基于DM642平台的H.264编码实验平台,便于实验和性能测试。
3. 在DM642平台上实现优化后的H.264编码算法,验证优化效果和性能。
五、研究方法与进度安排本项目的研究方法主要采用文献调研法和实验方法相结合的方式,具体分为以下几个步骤:1. 对H.264编码算法进行深入的理解和掌握,查阅相关文献,了解其原理和优化方法。
2. 在DM642平台上构建H.264编码实验平台,包括硬件资源的配置和软件开发环境的搭建。
基于TMS320DM642的H.264编解码器的实现与优化

基于TMS320DM642的H.264编解码器的实现与优化H.264/MPEG-4 AVC视频压缩标准与其它视频压缩标准相比具有显著的优势。
就编码效率而言,新标准的压缩性能至少是其它标准的2倍。
在图像的感官质量上,H.264也比MPEG-2和MPEG-4要好得多。
但与此同时,H.264性能上的改进也带来了复杂度的明显提升。
人们普遍认为,H.264编解码器比其它标准需要更多的运算量和存储空间。
其中由于解码器需要具备处理所有“合法”码流的能力,也就是必须能处理最坏的情况,因此在嵌入式环境中开发解码器就十分复杂。
而且如何合理利用嵌入式环境中十分有限的存储资源也是一个极具挑战性的工作。
TMS320DM642数字媒体处理器(DM642)是德州仪器目前性能最高的定点DSP。
此款DSP的核处理器拥有64个通用32位寄存器和8个带有VelociTI.2扩展功能的独立功能单元――2个乘法单元和6个算数逻辑单元(ALUs)。
8个功能单元的VelociTI.2扩展功能包括一些新的指令,这些指令可以提升视频和图像设备的性能,增强VelociTI结构的并行度。
DM642还采用了两级cache结构并拥有多种强大的外设。
本论文主要介绍的是在基于TI TMS320DM642数字媒体处理器的硬件平台上开发和优化H.264“baseline”编解码器。
具备600Mhz处理能力的TMS320DM642代表着未来更高处理能力DSP的发展方向,非常适合于承担H.264编解码器这样高运算量和复杂度的工作。
我们所做的工作包括:改善算法和提高指令的并行度;充分发掘DSP强大指令集及EDMA控制器等处理器自身的能力;利用一系列DSP开发软件来完成代码分段、减少代码长度等工作。
最终我们设计出了一个较低复杂度的方案来完成H.264编解码这个大运算量的工作。
目前,我们的H.264解码器每秒钟可以解码100至120帧QCIF图像;或20至30帧CIF图像。
多媒体处理器DM642及其在视频监控中的应用

引言视频监控系统的设计方案有很多种,但是市场产品的主流一般选择两种方案:一是基于CPU和专用的视频编解码ASIC芯片。
该方案选择以ARM为核心的CPU和专用媒体处理芯片搭建。
优点是开发时间相对较短,但由于采用ASIC,灵活性较差,产品一旦定型,很难更改。
二是采用面向媒体处理的专用DSP。
其开发时间不长,优点是由于算法是软件代码,所以可以不断对产品性能进行升级,重复开发成本较低。
由全球最大的DSP制造商德州仪器(TI)推出的TMS320DM642(以下简称DM642)作为一款高性价比、专用于多媒体应用的DSP,已被国内外视频应用从业者广泛接受和采用。
本文较详细地介绍DM642的主要特性和系统应用开发技术,并给出基于DM642的视频监控应用实例。
DM642多媒体处理器DM642是TI 公司专门为多媒体应用而开发的DSP,采用TI 的第二代高级超长指令字结构(VelociTI),使得在一个指令周期能够并行处理多条指令。
它可在600MHz时钟频率下工作,每个指令周期可并行8条32bit指令,因此,可达到4800MIPS的峰值计算速度。
DM642采用两级缓存结构:第一级包括相互独立的LIP(16kB)和LID (16kB),只能作为高速缓存使用;第二级L2(256kB)是一个统一的程序/数据空间,可整体作为SRAM映射到存储空间,也可整体作为第二级Cache,或是二者按比例的一种组合来使用。
DM642具有64个独立通道的EDMA(扩展的直接存储器访问)控制器,负责片内L2与其他外设之间的数据传输。
容量较大的两级缓存和EDMA 通道是DM642高性能的体现之一,若能合理使用和管理,将能大幅度提高程序的运行性能。
其结构如图1所示。
此外DM642具有丰富的外围设备接口,包括3个可配置的双通道视频端口video port,其中每个videoport又分成A和B两个通道,A/B通道可分别处理一路视频采集,因此DM642最多可以处理6路视频采集数据(不带音频)。
基于DM642的视频处理系统硬件设计分析

基于DM642的视频处理系统硬件设计分析杨兴泉摘㊀要:随着现代经济的飞速发展,互联网技术㊁计算机技术也进入人们的视野,视频处理系统在人们的日常生活中的应用也逐渐多元化,并且逐渐走进军事㊁医疗㊁科研等诸多领域㊂近几年来,基于DM642的视频处理系统逐渐成为人们研究的重点㊂在视频处理系统中,编解码的硬件是实现视频处理的重要前提,只有通过该视频处理硬件,才能实现是数字视频的处理和网络传输,具有非常重要的研究意义㊂关键词:TMS320;视频处理;视频接口一㊁引言随着视频处理系统的迅速发展,视频处理系统也逐渐进入人们的视野㊂同时,随着对视频技术的研究的逐渐深入,在此基础上出现了很多的新的技术和研究方向,拓宽了它在其他领域的应用,比如医疗设备中的机器影像,交通路口㊁小区的监控装置,军事武器装备中的成像技术等㊂所以,设计一种视频处理系统对于人民和社会有着重要意义㊂二㊁基于TMS320的视频处理系统硬件设计在TI公司推出的C64系列中,TMS320DM642是专用视频接口的高性能定点DSP㊂性能方面,最大具有4800MIPS的数字处理能力;配置方面,具有二级缓存结构,3个视频接口,64位扩展内存接口(EMIF)(可扩展存储空间),64独立通道EDMA控制器,可(实现片内/外的数据传送和复制)㊂(一)系统的硬件结构视频处理系统的硬件设计的核心装置是DM642,相较于市面上普通的视频处理系统,它具有高性能和高运算速度,可以满足对于视频处理所需的大部分复杂算法的处理要求㊂在视频信号的采集方面,可以使用较为获得的CCD摄像头进行采集㊂当视频信号被采集完以后,系统利用解码芯片将模拟信号进行转换,使其变为数字信号,再传递给DSP进行运算处理㊂在DM642的3个视频接口中,VP0和VP1可以用于视频输入和音频输入,而VP2口分为两路视频输入㊂因此,这一硬件结构的工作就是,经CCD采集视频信号后,通过DM642的VP0口输入,解码芯片将模拟信号进行转换㊂此后,数字视频信号再经过DM642的软件编码器,被其编码压缩处理,并将生成的视频码流数据进行打包整理,再经过RJ-45接口利用太网传送到上位机,因此上位机就可以作为该系统的监控装置㊂此外,DM642的EMIF接口连接SDRAM和Flash存储器㊂系统内的DSP仅仅几乎不能满足系统的要求,因此当系统需要对视频进行实时处理时,必须在系统中配置高性能SDRAM㊂当它在运行程序和进行数据处理,可以减少数据流动过程中的时间消耗,在一定程度上提高了视频处理系统的所需的处理时间;Flash可以用来存放系统软件,也可以配置参数㊂(二)存储器模块设计在视频处理系统系统的数据处理模块中,存储器的核心模块电路芯片包括DSP芯片㊁SDRAM芯片和Flash芯片㊂存储器模块,顾名思义,它可以程序存储器的程序读写㊂此外,它还可以实现内部数据与外部数据存储器的数据传输㊂在仿真调试阶段,它可以与仿真器相连,与主机进行数据交换,进行仿真调试㊂(三)JTAG接口设计在进行调试时,JTAG接口也是必不可少的设计㊂它可以连接目标板,方便开发者对目标板的开发,并且开发者在修改的同时不用改变其系统结构,在一定程度上减轻了开发和测试系统的难度㊂此外,在连接调试设备时,JTAG接口将XDS510仿真器与系统板和电脑相连,方便开发者在统一的公司集成化开发环境中进行调试,极大限度的减轻了调试难度,避免了系统不匹配的问题㊂(四)电源模块的设计电源模块是给系统提供动力的模块㊂在一般的视频处理系统中,系统内的不同模块会利用不同的电压,所以在电源模块中必须设计电源管理芯片,其作用是进行电压变换,将相应的电阻和电容值进行修改,满足各部分模块所需的电压,如3.3V㊁1.8V及1.4V等不同大小的电压㊂在本系统设计中,为了减少在调试过程中的麻烦,决定采用TPS54310,它也是属于TI公司生产产品,属于电源调节芯片㊂需要说明的是,它虽然能够实现低电压输入和高电流输出,但是其调节范围是有限的,一般的调节范围为输入电压为3 6V,输出电压为0.9 3.3V之间㊂不同的电压用于不同的模块,例如3.3V的电源可以用于核心芯片如视频解码芯片㊁视频编码芯片㊁SDRAM芯片等的供给电源㊂三㊁系统调试由于系统的复杂性,为了尽量减少系统调试的难度,用到的系统模块多为TI公司的生产产品,在一定程度上提高了系统的可靠性㊂此外,为了避免单个模块出现问题的情况,决定对各个模块分别调试,后将各模块进行联调,最后整体调试系统的性能,缩短了调试时间㊂在调试中尽量选择最优的方案进行调试,方便系统工作时处于最佳状态㊂四㊁结语文章基于DM642这一核心装置,通过对系统硬件机构的选择,了解其不同的功能和用途,后文经过存储器模块㊁JTAG接口和电源模块的不同设计,最终进行系统调试,在理论和选材上完成了对DM642视频处理系统的设计㊂下一步研究的方向应该是对不同模块设计具体的程序,对其中的不同的模块设计电路图,进行组装,并对最后的系统进行进一步的完善㊂最后,可以在此系统上研究不同的算法,方便他用于不同的场景,比如通过研发新的视频压缩算法,方便它应用于军事㊁医疗㊁教育等诸多领域㊂参考文献:[1]刘丹,孙丽云,胡伟,等.基于DM642的视频处理系统设计[J].微计算机信息,2007,23(17):157-159.[2]圣冬冬.基于DM642的视频处理系统硬件设计[J].电子设计工程,2019,19(2):168-173.[3]刘琼,安涛,金钢,等.基于DM642视频采集处理系统硬件设计[J].微计算机信息,2007,23(32):180-182.作者简介:杨兴泉,南京优视互联科技有限公司㊂681。
基于DM642的MPEG4算法的移植和优化的开题报告

基于DM642的MPEG4算法的移植和优化的开题报告一、选题背景随着数字图像处理技术的不断发展,高清晰度的视频编解码已经成为了一个热门的研究领域,MPEG4作为一种全新的压缩标准,可以达到更高的压缩比和更好的视频质量,正逐渐成为主流的视频格式。
同时,实现高效的MPEG4编解码也成为了许多视频设备的关键技术,如IP摄像机、数字电视和移动终端等。
基于此,本文选取基于DM642的MPEG4算法的移植和优化作为论文研究方向。
二、选题意义基于DM642的MPEG4算法的移植和优化对于数字视频领域的发展意义重大。
首先,该研究将有助于提高MPEG4编解码的效率和精度。
其次,基于DM642系统的开发具有广泛的应用前景。
最后,将采用通用的硬件平台,该算法可以应用于各种数字视频设备中,有助于提高数字视频设备的性能和降低成本。
三、研究内容论文的研究内容主要包括以下几个方面:1.梳理MPEG4标准的基本原理和编解码流程,理解MPEG4编解码算法的数学原理和实现方式,研究MPEG4编解码算法的性能和优化技术。
2.基于DM642系统,移植和优化MPEG4编解码算法,深入了解CPU架构与系统性能,并使用各种技术手段(如SIMD指令、循环展开、缓存优化等)实现算法的优化,提高系统的效率和性能。
3.设计并实现测试系统,评估优化后的算法的效果,分析系统的性能和各种因素的影响,以便优化系统性能。
4.应用优化后的算法到实际的数字视频设备中,例如IP摄像机和数字电视,验证优化后的算法的有效性和应用性能。
四、研究贡献本文的研究将有以下方面的贡献:1.深入理解MPEG4编解码算法的数学原理和实现方式。
2.对基于DM642的MPEG4编解码算法实现进行优化,提高系统的效率和性能。
3.设计并实现测试系统,评估优化后的算法的效果,以便在实践中应用该算法。
4.应用优化后的算法到实际的数字视频设备中,验证优化后的算法的有效性和应用性能。
5.论文的研究结果将对数字视频领域技术的发展做出贡献,推动数字视频设备的发展。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十一、copy程序的优化1、源代码:Word16 i;for (i = 0; i < L; i++){y[i] = x[i];}2、改编代码:(1)要求数组长度能被2整除Word32 i;Word32 temp;int *p1 = (int *)&x[0];int *q1 = (int *)&y[0];for (i = 0; i < L/2; i++){temp = *p1++;*q1++ = temp;}(2)要求数组长度能被4整除Word32 i;Word32 temp1, temp2;Word32 *pin1, *pin2, *pout1, *pout2;pin1 = (Word32 *)&x[0];pin2 = (Word32 *)&x[2];pout1= (Word32 *)&y[0];pout2= (Word32 *)&y[2];for (i = 0; i < L/4; i++){temp1 = *pin1;temp2 = *pin2;pin1+=2;pin2+=2;*pout1= temp1;*pout2= temp2;pout1+=2;pout2+=2;}3、优化方法说明:把一次循环拷贝一个word16的数改为一次循环拷贝2个word16或4个word16的数。
4、技巧:充分利用c6xx一次读取32位数的特性,并利用一个指令周期能读取两个数据的特点。
十二、set_zero程序的优化1、源代码:Word16 i;for (i = 0; i < L; i++){x[i] = 0;}2、改编代码:(1)数组长度能被2整除Word32 i;int *x1 = (int *)&x[0];for (i = 0; i < L/2; i++){*x1++ = 0;}(2)数组长度能被4整除Word32 i;int *x1 = (int *)&x[0];int *x2 = (int *)&x[2];for (i = 0; i < L/4; i++){*x1 = 0;*x2 = 0;x1++;x2++;x1++;x2++;}3、优化方法说明:把一次循环为一个word16的数赋值改为一次为2个或4个word16的数赋值。
4、技巧:充分利用C6XX一次读取32位数的特点,并利用一个指令周期能读取两个数据的特点。
十三、32bit数与16bit数相乘1、源代码:L_tmp0 = Mac_32_16(L_32, hi1, lo1, lo2);2、改编代码:L_tmp0=_sadd(_sadd(_smpyhl(hl32, lo2),(_mpyus(hl32, lo2)>>16)<<1), L_32);3、优化方法说明:hl32是32bit的数,hi1和lo1是16bit的数,且hl32 = hi 1<<16 + lo1 << 1 ,即hi1和lo1分别是hl32的高16位数和低16位数。
函数Mac_32_16(L_32, hi1, lo1, lo2)实现L_32 = L_32 + (hi1*lo2)<<1 + ((lo1*lo2)>>15)<<1源代码是把一个32位的数拆成两个16位的数与一个16位的数相乘,优化后的代码不拆开32位的数,直接用32位的数与16位的数相乘。
运用这种方法必须保证hl32的最低一位数必须为0,否则应用指令_clr(hl32, 0, 0)把最低位清零。
4、技巧:源代码中的低16位数lo1是hl32的低16位右移一位得到的(留出一位符号位)。
在与lo2相乘时又右移了15位,所以在改编代码中右移16位,并且是以无符号数与lo2相乘。
十四、32bit数与32bit数相乘1、源代码:L_tmp = Mac_32 (L_32, hi1, lo1, hi2, lo2);2、改编代码:L_tmp = _sadd(_sadd(_smpyh(hl1_32, hl2_32),((_mpyhslu(hl1_32, hl2_32)>>16)<<1)+((_mpyhslu(hl2_32, hl1_32)>>16)<<1)), L_32);3、优化方法说明:两个32位的数相乘,不必分成四个16位的数相乘,直接用32位相乘。
其中:hl1_32 = hi1<<16 + lo1<<1, hl2_32 = hi2 <<16 + lo2 <<1 。
源代码实现:L_32 = L_32 + (hi1*hi2)<<1 + ( (hi1*lo2)>>15 + (lo1*hi2)>>15 )<<14、技巧:低16位与高16位相乘时,低16位使用的是无符号数。
十五、16位除法的优化1、源代码:Word16 div_s (Word16 var1, Word16 var2) //实现var1/var2{Word16 var_out = 0;Word16 iteration;Word32 L_num = (Word32)var1;Word32 L_denom = (Word32)var2;for (iteration = 0; iteration < 15; iteration++){var_out <<= 1;L_num <<= 1;if (L_num >= L_denom){L_num = L_sub (L_num, L_denom);var_out = add (var_out, 1);}}return (var_out);}2、改编代码:Word16 div_s1 (Word16 var1, Word16 var2){Word32 var1int;Word32 var2int;var1int = var1 << 16;var2int = var2 << 15;var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);var1int = _subc(var1int,var2int);return (var1int & 0xffff);}3、优化方法说明:实现16位的除法,要求被除数var1和除数var2都是整数,且var1<=var2。
利用C6XX特有的指令subc,实现除法的循环移位相减操作。
4、技巧:把被除数和除数都转换成32位数来操作,返回时取低16位数。
十六、C6X优化inline举例:1、原程序:for (i = LO_CHAN; i <= HI_CHAN; i++){norm_shift = norm_l(st->ch_noise[i]);Ltmp = L_shl(st->ch_noise[i], norm_shift);norm_shift1 = norm_l(st->ch_enrg[i]);Ltmp3 = L_shl1(st->ch_enrg[i], norm_shift1 - 1);Ltmp2 = L_divide(Ltmp3, Ltmp);Ltmp2 = L_shr(Ltmp2, 27 - 1 + norm_shift1 - norm_shift); // * scaled as 27,4 *if (Ltmp2 == 0)Ltmp2 = 1;Ltmp1 = fnLog10(Ltmp2);Ltmp3 = L_add(Ltmp1, LOG_OFFSET - 80807124); // * -round(log10(2^4)*2^26 *Ltmp2 = L_mult(TEN_S5_10, extract_h(Ltmp3));if (Ltmp2 < 0)Ltmp2 = 0;// * 0.1875 scaled as 10,21 *Ltmp1 = L_add(Ltmp2, CONST_0_1875_S10_21);// * tmp / 0.375 2.667 scaled as 5,10, Ltmp is scaled 15,16 *Ltmp = L_mult(extract_h(Ltmp1), CONST_2_667_S5_10);ch_snr[i] = extract_h(Ltmp);}*/2、优化后程序://因循环体太大,拆成两个循环并把相应的函数内嵌以使程序能pipeline,//用L_div_tmp[]保存因拆分而产生的中间变量。
for (i = LO_CHAN; i <= HI_CHAN; i++){//norm_shift = norm_l(st->ch_noise[i]);norm_shift = _norm(st->ch_noise[i]);Ltmp = _sshl(st->ch_noise[i], norm_shift);//norm_shift1 = norm_l(st->ch_enrg[i]);norm_shift1 = _norm(st->ch_enrg[i]);//Ltmp3 = L_shl1(st->ch_enrg[i], norm_shift1 - 1);LLtmp1 = st->ch_enrg[i];LLtmp1 = LLtmp1 << (norm_shift1 + 7);Ltmp3 = (Word32)(LLtmp1 >> 8);Ltmp2 = IL_divide(Ltmp3, Ltmp);//Ltmp2 = L_shr(Ltmp2, 27 - 1 + norm_shift1 - norm_shift);Ltmp2 = (Ltmp2 >> (27 - 1 + norm_shift1 - norm_shift));if (Ltmp2 == 0)Ltmp2 = 1;L_div_tmp[i] = Ltmp2;}for (i = LO_CHAN; i <= HI_CHAN; i++){Ltmp2 = L_div_tmp[i];Ltmp1 = IfnLog10(Ltmp2);//Ltmp3 = L_add(Ltmp1, LOG_OFFSET - 80807124);Ltmp3 = _sadd(Ltmp1, LOG_OFFSET - 80807124);//Ltmp2 = L_mult(TEN_S5_10, extract_h(Ltmp3));Ltmp2 = _smpy(TEN_S5_10, (Ltmp3 >> 16));if (Ltmp2 < 0)Ltmp2 = 0;Ltmp1 = _sadd(Ltmp2, CONST_0_1875_S10_21);//Ltmp = L_mult(extract_h(Ltmp1), CONST_2_667_S5_10);Ltmp = _smpy((Ltmp1 >> 16), CONST_2_667_S5_10);//ch_snr[i] = extract_h(Ltmp);ch_snr[i] = (Ltmp >> 16);}3、优化说明观察上面这个循环,循环体本身比较大,且含有两个函数L_divide()和fnLog10(),而C62内部只有32个寄存器,且有些寄存器是系统用的,如B14、B15这样循环体太大将会导致寄存器不够分配,从而导致系统编译器无法实现循环的pipeline。