DSP技术课程(第三章)-2.ppt
51页§3-3 TMS320C54x的指的指令集令集‘C54X指令集指令集TMS320C54x的指令集有近两百条指令,的指令集有近两百条指令,按功能分为如下几类:按功能分为如下几类: 算术运算指令算术运算指令 逻辑运算指令逻辑运算指令 程序控制指令程序控制指令 装入和存储指令装入和存储指令一、算术运算指令一、算术运算指令算术运算指令可分为如下几类:算术运算指令可分为如下几类: 加法指令加法指令 减法指令减法指令 乘法指令乘法指令 乘加指令乘加指令 乘减指令乘减指令 双数双数/双精度指令双精度指令 特殊操作指令特殊操作指令1.加法指令加法指令定点定点DSP中数据表示方法中数据表示方法u当它表示一个整数时,其最低位(当它表示一个整数时,其最低位(D0))表示表示1,,D1位表示位表示2的的1次方,次高位次方,次高位((D14))表示表示2的的14方u如果表示一个有符号数时,最高位如果表示一个有符号数时,最高位((D15))为符号位,为符号位,0表示正数,表示正数,1表示负表示负数。
例如,数例如,07FFFH表示最大的正数表示最大的正数32767(十进制),而(十进制),而0FFFFH表示最大表示最大的负数的负数-1(负数用(负数用2的补码方式显示)的补码方式显示)定点定点DSP中数据表示方法中数据表示方法u当需要表示小数时,小数点的位置始终当需要表示小数时,小数点的位置始终在最高为后,而最高位(在最高为后,而最高位(D15))表示符号表示符号位这样次高位(位这样次高位(D14))表示表示0.5,然后,然后是是0.25,最低位(,最低位(D0))表示所以表示所以04000H表示小数表示小数0.5,,01000H表示小数表示小数0.25,而,而0001H表示表示16位定点位定点DSP表示的表示的最小的小数(有符号)最小的小数(有符号)0.000030517578125实现实现16位定点加法位定点加法u‘C54X中提供了多条用于加法的指令,中提供了多条用于加法的指令,如如ADD,,ADDC,,ADDM和和ADDS其其中中ADDS用于无符号数的加法运算,用于无符号数的加法运算,ADDC用于带进位的加法运算(如用于带进位的加法运算(如32位位扩展精度加法),而扩展精度加法),而ADDM专用于立即专用于立即数的加法。
数的加法使用使用ADD完成加法完成加法 ld temp1,a;;将变量将变量temp1装入寄存器装入寄存器A add temp2,a;将变量将变量temp2与寄存器与寄存器A相加相加 ;结果放入结果放入A中中 stl a,temp3;;将结果(低将结果(低16位)存入变量位)存入变量 ;;temp3中中 注意,这里完成计算注意,这里完成计算temp3=temp1+temp2,,我们我们没有特意考虑没有特意考虑temp1和和temp2是整数还是小数,在是整数还是小数,在加法和下面的减法中整数运算和定点的小数运算加法和下面的减法中整数运算和定点的小数运算都是一样的都是一样的利用利用ADDS实现实现32位数据装入位数据装入 ld #0,dp ; 设置数据页指针设置数据页指针 ld 60h,16,a; 将将60H的内容装如的内容装如A的高的高16位位 adds 61h,a; 将将61H的内容加到的内容加到A的低的低16位位 dld 60h,b; 直接装入直接装入32位到位到B寄存器寄存器ADD中寻址方式中寻址方式uADD Smem [,SHIFT],src [,dst] 例如:例如: ADD *AR0,1,A,A ADD 60H,-1,A,A ADD *AR5,1,A,B ADD Xmem, SHFT, src 例如:例如: ADD *AR5,1,A ADD Xmem,Ymem, dst (高高16位加)位加)例如:例如: ADD *AR2,*AR3,A2.减法指令减法指令实现实现16位定点减法位定点减法u‘C54X中提供了多条用于减法的指令,中提供了多条用于减法的指令,如如SUB,,SUBB,,SUBC和和SUBS。
u其中其中SUBS用于无符号数的减法运算,用于无符号数的减法运算,SUBB用于带进位的减法运算(如用于带进位的减法运算(如32位扩位扩展精度的减法),而展精度的减法),而SUBC为移位减,为移位减,DSP中的除法就是用该指令来实现的中的除法就是用该指令来实现的uSUB指令与指令与ADD指令一样,有许多的寻指令一样,有许多的寻址方式,其详细使用说明请参考址方式,其详细使用说明请参考《《TMS320C54X使用教程》使用教程》减法指令使用举例减法指令使用举例 stm#60h,ar3;将变量temp1的地址装入ar3寄存器 stm#61h,ar2;将变量temp3的地址装入ar3寄存器 sub*ar2+, *ar3,b ;将变量temp3左移16位同时变量 ; temp2也左移16位,然后相减,结 ; 果放入寄存器B(高16位)中,同 ; 时ar2加1 sthb,63h;将相减的结果(高16位)存入变量63h 利用利用SUBC实现除法实现除法u在在‘C54X中没有提供专门的除法指令,中没有提供专门的除法指令,一般有两种方法来完成除法。
一般有两种方法来完成除法u一种是用乘法来代替,除以某个数相当一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然于乘以其倒数,所以先求出其倒数,然后相乘这种方法对于除以常数特别适后相乘这种方法对于除以常数特别适用u另一种方法是使用另一种方法是使用SUBC指令,重复指令,重复16次次减法完成除法运算减法完成除法运算利用利用SUBC完成完成Temp1/Temp2 ldtemp1,B;将被除数将被除数temp1装入装入B寄存寄存 ;器的低器的低16位位rpt#15 ;重复重复SUBC指令指令16次次subc temp2,b;使用使用SUBC指令完成除法指令完成除法stlB,temp3;将商(将商(B寄存器的低寄存器的低16位)位) ;存入变量存入变量temp3sthB,temp4;将余数将余数(B寄存器的高寄存器的高16位位) ;存入变量存入变量temp4 注:注: 实际上是完成整数除法实际上是完成整数除法实现小数除法实现小数除法u在在‘C54X中实现中实现16位的小数除法与前面的整数位的小数除法与前面的整数除法基本一致,也是使用除法基本一致,也是使用SUBC指令来完成。
指令来完成u但有两点需要注意:但有两点需要注意:第一,小数除法的结果一第一,小数除法的结果一定是小数(小于定是小数(小于1),所以被除数一定小于除),所以被除数一定小于除数在执行在执行SUBC指令前,应将被除数装入指令前,应将被除数装入A或或B寄存器的高寄存器的高16位,而不是低位,而不是低16位其结果其结果的格式与整数除法一样的格式与整数除法一样u第二,应考虑符号位对结果小数点的影响所第二,应考虑符号位对结果小数点的影响所以应对以应对商右移一位商右移一位,得到正确的有符号数得到正确的有符号数3.乘法指令乘法指令实现实现16定点整数乘法定点整数乘法u在在‘C54X中提供了大量的乘法运算指令,中提供了大量的乘法运算指令,其结果都是其结果都是32位,放在位,放在A或或B寄存器中寄存器中u乘数在乘数在‘C54X的乘法指令很灵活,可以的乘法指令很灵活,可以是是T寄存器、立即数、存贮单元和寄存器、立即数、存贮单元和A或或B寄存器的高寄存器的高16位u如果是无符号数乘时,请使用如果是无符号数乘时,请使用MPYU指指令这是一条专用于无符号数乘法运算令这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘的指令,而其它指令都是有符号数的乘法。
法整数乘法举例整数乘法举例rsbx FRCT;清清FRCT标志,准备整数乘标志,准备整数乘ldtemp1,T;将变量将变量temp1装入装入T寄存器寄存器mpy temp2,a;完成完成temp2*temp1,,结果放结果放 ;入入A寄存器(寄存器(32位位)实现小数乘法实现小数乘法u在在‘C54X中,小数的乘法与整数乘法基本一致,中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果才能得到正确的结果u‘C54X中提供了一个状态位中提供了一个状态位FRCT,,将其设置将其设置为为1时,系统自动将乘积结果左移移位时,系统自动将乘积结果左移移位u两个小数(两个小数(16位)相乘后结果为位)相乘后结果为32位,如果精位,如果精度允许的话,可以只存高度允许的话,可以只存高16位,将低位,将低16位丢弃,位丢弃,这样仍可得到这样仍可得到16位的结果位的结果小数乘法举例小数乘法举例 ssbx FRCT ;FRCT=1,准备小数乘法 ld temp1,16,a ;将变量temp1装入寄存器A的高16位 mpya temp2 ;完成temp2乘寄存器A的高16位,结 ;果在B中,同时将temp2装入T寄存器 sth b,temp3 ;将乘积结果的高16位存入变量temp3如:如:0.1(0x0ccd) x 0.7(0x599a) = 0.06997680664063(0x08f5)注:可以使用注:可以使用MPYR完成四舍五入。
完成四舍五入 比较如下结果比较如下结果 mpyr temp1,b ; T * temp1 -> b4.乘加和乘减指令乘加和乘减指令5、双精度、双精度/双数操作指令双数操作指令6、特殊指令、特殊指令二、逻辑运算指令二、逻辑运算指令逻辑指令有与、或、异或、移位和测试指令逻辑指令有与、或、异或、移位和测试指令1、与指令(、与指令(AND))2、或、异或指令、或、异或指令3、移位和测试指令、移位和测试指令三、程序控制指令三、程序控制指令程序控制指令包括:程序控制指令包括: 分支指令分支指令 调用指令调用指令 中断指令中断指令 返回指令返回指令 重复指令重复指令 堆栈操作指令堆栈操作指令 混合程序控制指令混合程序控制指令1、分支指令、分支指令2、调用与中断指令、调用与中断指令3、返回指令、返回指令4、重复指令和堆栈操作指令、重复指令和堆栈操作指令5、混合程序控制指令、混合程序控制指令四、装入和存储指令四、装入和存储指令装入和存储指令包括:装入和存储指令包括: 一般的装入和存储指令一般的装入和存储指令 条件存储指令条件存储指令 并行装入和存储指令并行装入和存储指令 并行装入和乘法指令并行装入和乘法指令 并行存储和加件乘指令并行存储和加件乘指令 混合装入和存储指令混合装入和存储指令1、一般的装入指令、一般的装入指令一般的装入指令一般的装入指令2、存贮指令、存贮指令3 并行装入和存储指令并行装入和存储指令4、条件存储指令、条件存储指令5、并行存储和加、减、乘法指令、并行存储和加、减、乘法指令6、并行装入和乘法指令、并行装入和乘法指令7、混合装入和存储指令、混合装入和存储指令注意:同一条指令在不同存储注意:同一条指令在不同存储器中可能有不同执行时间器中可能有不同执行时间u操作数在双寻址空间、单寻址空间和外部u程序代码在双寻址、单寻址和外部空间u操作数和代码在相同存储器块中u数据空间插入了等待周期u程序空间插入了等待周期§3-4 特殊指令使用说明特殊指令使用说明FIRS指令FIRS指令指令使用方法:使用方法:FIRS *AR2+,, *AR3+,, COEF FIRS指令用于线性相位滤波器的处理。
一个指令用于线性相位滤波器的处理一个如下图的如下图的8阶线性相位滤波器的输出表达式:阶线性相位滤波器的输出表达式:Viterbi译码指令译码指令DADST、、DSADT、、CMPS在信道均衡和解码中经常会使用到在信道均衡和解码中经常会使用到Viterbi算法,算法,C54x为此提供了专门的硬件和指令根据输入信为此提供了专门的硬件和指令根据输入信号确定分支似然概率增加量号确定分支似然概率增加量D1/D2,,放在放在T寄存器寄存器中,中,TRN存储可能信号译码输出存储可能信号译码输出最小均方运算最小均方运算LMS 在进行自适应滤波等操作中经常会使用在进行自适应滤波等操作中经常会使用LMS算法,算法,C54x提供的提供的LMS指令方便了编程如下图所示的指令方便了编程如下图所示的自适应滤波器设计中,滤波器系数修正公式为自适应滤波器设计中,滤波器系数修正公式为::其中,其中,e(i) = d(i) - y(i)滤波器输出:滤波器输出:数据归一化相关指令数据归一化相关指令EXP、、NORM 归一化一个数是先求其指数,然后把它归一化一个数是先求其指数,然后把它调整到最大精度格式实现方法如下:调整到最大精度格式。
实现方法如下:数据块移动数据块移动MVDD、、MVDP、、MVPD 在在C54x系列系列DSP,,数据与数据存储器、数据与程序存储器之数据与数据存储器、数据与程序存储器之间可以方便的进行数据传输,结合单指令循环可实现数据块间可以方便的进行数据传输,结合单指令循环可实现数据块移动如16个系数的移动:个系数的移动: 本章小结本章小结 本章重点介绍了本章重点介绍了TMS320C54xTMS320C54x的软件体系,的软件体系,并对特殊的寻址方式和特殊指令进行了介并对特殊的寻址方式和特殊指令进行了介绍,对于各指令更详细的了解需同学自己绍,对于各指令更详细的了解需同学自己多看书 制作:DSP实验室 1998.12。





