首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DSP 学习资料 六

DSP 学习资料 六

六  TMS320C2X/C5X 软件应用 这里介绍 TMS320C2X/C5X 若干软件编程技巧问题及一些典型的应用程序。 3.1软件编程技巧: A.充分利用片内RAM TMS320C2X大部分指令的执行时间是一个指令周期,但是在实际实现时由于采用的程序存储器和数据存储器是片内还是片外,实际执行的时间是不相同的。按照指令在内部存储器和外部存储器以及数据在内部存储器和外部存储器,可以分为四种情况,即:(1)指令在内部存器、数据在内部存储器(PU/DI);(2)指令在内部存储器、数据在外部存储器(PI/DE);(3)指令在外部存储器、数据在内部存储器(PE/DI);(4)指令在外部存储器、数据在外部存储器(PE/DE)。设P表示外部程序存储器所需的等待状态数,d表示外部数据存榜器所需的等待状态数,则执行LAC指令在四种情况下所需的周期数如表2.1所示。 表2.1 LAC指令周期数 PI/DI PI/DE PE/DI PE/DE 1 2+d 1+p 2+P+d 显然,即使外部的存储器是高速存储器不需要等待态,在PI/DE和PE/DE两种情况下,执行LAC所需的时间是两个指令周期,而不是一个指令周期。PI/DI和PE/DI两种情况是一个指令周期。因此,在程序在外部存储器中运行的情况下,应尽量使用片内RAM存储器存储数据。虽然一条指令只相差一个周期,但当指令在多级嵌套循环内部时就相当可观了。 B,利用单指令重复指令。 TMS320C2x提供了重复指令RPT和RPTK,这两条指令可以使下一条指令重复执行指定的次数而不增加额外的执行时间。TMS320C2X的重复计数器为8位,因此最大值为255,即最多可以便下一条指令执行256次。 RPT和RPTK与TBLR/TBLW、BLKD/BLKP、IN/OUT及MAC、MACD等指令结合使用可以提高程序运行的效率。例如下面的一段程序将存放在外部数据存储器地址400H开始的256个数据搬移至片内的Bl块。 LARP AR1 LRLK AR1,300H RPTK 255 BLKD 400H,* + C.利用高效指令和特殊寻址方式、 TMS320C2X的指令集中提供了一些高效的指令。如乘累加并移位的MACD指令、平方并累加或减指令SQRS以及LACT、LTA、LTD、SPAC、APAC等。除了常用的寻址方式外,还提供了用于FFT的比特反转寻址方式。灵活使用这些指令和寻址方式可以提高程序的效率。 3.2提高TMS320C5x软件效率 TMSS320C5X是TMS320C2X的增强型DSP芯片,其增强的并行结构使得TMS320C5X的速度是TMS320C25的二倍以上。TMS320C2X的汇编语言在源代码级与TMS320C5X向上兼容, TMS320C2X的汇编程序稍作修改并用TMS320C5X的汇编器重新汇编后就可以在TMS320C5X 上运行。TMS320C5X的指令集是TMSS320C25指令集的超集,它在TMS320C2X的基础上作了改进并增加了一些功能更强的指令,充分利用这些增强特性可大大提高TMS320C5X的程序效率。 A.利用片内存储器的双映射特性 TMS320C5X具有1O56字的片内双存取存储器,比TMS320C25多5l2字。虽然使用这种类型存储器的效率很高,但同时成本也较高。TMS320C5X内部另一种存储器是单存取存储器,TMS320C53和C5l分别具有3K和IK字的单存取存储器,而C50具有8K字。这种存储器块的一个特点是同时可以映射至程序和数据空间。这种双映射的特点对于实现诸如自适应FIR滤波器(如横向滤波器)非常有用。乘/加循环要求F1R滤波器的系数在程序空间中,但同时相同的系数表需在数据空间中被更新。将这个系数表存放于片内的单存取存储器中并利用其双映射特点可使横向滤波器实现的效率更高。’ B.利用无开销循环。 在TMS320C25中,只提供了用于单指令重复的RPR/RPTK指令,要实现多于一条指令的循环必须来用寄存器不为零跳转的BANZ指令,这样每次循环实际上增加了3个指令周期。 TMS320C5X不仅提供了单指令重复指令RPT,而且提供了块指令重复指令RPTB,因此, TMS320C5X可以实现块指令的无开销循环。例如。 LACL #99 SAMM BRCR ;循环100次 RPTB LOOP-1 LAC *,16,AR1 MPYA *,+AR2 SACH *0- LOOP: C.嵌套循环的商效编程 在许多DSP应用程序中需要用到嵌套循环。如求10阶自相关需要用到二级嵌套循环,内循环计算每个自相关系数,外循环进行计数。如果内循环可以用RPT实现,则外循环可以用RPTB指令实现。如果内循环不能用一个RPT实现循环,也可以用延迟跳转循环来实现(如AR不为零延迟跳转BANZD)。最多可以有8个这佯的BANZD循环嵌套,每个循环用一个辅助寄存器作循环计数器。 D.使用CRGT和CRLT搜索最大/最小值 TMS320C5X提供了用于高效搜索最大和最小值的特殊指令CRGT和CRLT,这两个指令比较累加器ACC和累加器缓冲器ACCB之间的大小,比较之后将最大或最小值存放于ACCB中。例如下面一段程序用于在300H至309H存储单元中搜浆最大值并得到其地址。 MAXADR .set 60H MAXVAL .set 61Hu .TEXT LDP #0 ;DP=0 LAR AR0,0300H SETC SXM LACC #0800H ;装人-个是小值 ;(如果找最小值则装入7FFFH) SACB ;送至ACCB SPLK #9,BRCR ;重复10次。。 RPTB endb-1 LACC * ;取数至ACC CRGT ;比较(如果找到最小值CRGT指令) SACL MAXVAL ;保存具大值 XC #1.c SAR AR0,MAXADR ;保存地址 MAR *+ Endb: RET。 E.利用循环寻址方式 TMS320C5X提供了循环寻址方式,这种寻址方式在实现F1R滤波器时非常有用。一般实现自适应FIR滤波器采用具有数据移动操作的乘/加指令MACD,在C5X中,可以用循环寻址方式代替数据移动操作来更新滤波器的铀头系数。如果滤波器的抽头在片内的单存取存储器,则这种方式的运行速度更快。 F.利用延迟跳转和条件运行 TMS320C2x具有3级深度的流水线,而C5X具有4级深度的流水线。C5X 4级深度的流水线使芯片的并行性能更强。然而,流水线越深,清空流水线的周期越长。正常眺转时,由于需要清空流水线,因此需要4个周期才能实现。相比而言,C2X仅需3个周期。但是,对C5X而言,所有需要清空流水线的指令都支持延迟执行功能,使运行开销降低至2个周期。此外果是仅跳转一个或两个指令这种特殊情况,可以使用速度更快的条件运行指令XC,此时仅一个周期。 G.并行进辑单元 TMS320C5X的比特操作单元与算术逻辑单元是独立运行的。这可使C5X在没有ACC或 ACCB参与的倩说下对片内或片外存储器单元(包括存储器陕射的寄存器)进行进辑操作。例如: SMMR DRR, #DRR_DATA LMMR DXR, #DXR_DATA 0PL #RXDATA, SP_FLG APL #TXDATA, SP_FLG H,增强的移位功能 TMS320C2X具有较强的移位功能,如取操作数至ACC时带0--16位左移、存ACC时带0-- 7位左移、根据TREG1寄存器进行左移的取数指令LACT、ACC左移一位ROL和ACC右移一位ROR等。TMS320C5X在此基础上增加了ACC右移1--16位的指令BSAR和根据TREGl寄存 器值进行16位右移指令SATH及0--15位右移指令SATL。例如: BASR 7 ;ACC=ACC >> 7 LMMR TREG1,1BH SATH ;ACC=ACC >> 16,因为TREG1.4=1 SATL ;ACCC=ACCD >> ll 此外,C5X还具有对ACC、ACCB和进位位组成的65位数据进行移位的指令。 I.存储器映射寄存器 TMS320C5X提供了累加器与寄存器之间的直接通路,这是将寄存器映射至数据存储器而实现的。同时,TMS320C5X也支持存储器和寄存器之间的直接数据交换。例如: SPLK #l6, INDX SAMM PRD L.系数表的动态寻址 在用乘/加指令实现F1R滤波器时,TMS320C2X/C5X从数据存储器取输入样值,而从程序空间取滤波器系数。由于同时从存储器中取两个操作数,使乘/加操作得以在一个周期内完成。在C25中,系数表的地址只能用直接寻址方式指定,这可满足大部分的应用。但是如果系数表的地址事先不能确定,而需在程序运行过程中确定时,C25实现就比较困难。对这种情况,C5X提供了一个称为块移动地址寄存器(BMAR)的专用寄存器,使乘/加操作可以用间接方式寻址,BMAR指向程序存储器中的系数表地址。例如 LACL table_add SAMM BMAR ;更新系数表的地址 LAC ONE, 14 ZPR REG=0 RPT num_a-1 ;重复 MADD * - ;乘/加 APAC ;加最后一个乘积 SACH result,1 ;保存结果 3.3 软件应用 A.压缩与扩张程序。 与PCM Codec接口时,由于Codec输出和输入的数据均采用8位压缩格式,因此DSP处理前和处理后的数据均需进行变换。从Cedec来的压缩数据先要进行扩张变换为线性数据才能进行处理,同样,在送给Cedec前也需将线性数据变换为压缩数据。下面我们分别给出相应的应用程序。 (1)扩张程序 由于8位数据只有256个数值,因此扩张变换一般可以采用查表法实现,表的大小为256, 根据给出的V律扩张的数据表。TMs320c25的查表程序如下。 ULOT: LAC IN ANDK #OFFH ADLK _ulawtab TBLR OUT RET 上述程序中,待扩张的数据在IN中,扩张后的数据在OUT中,,ulawtab为256点数据表的起始地址。
返回列表