[计算机软件及应用]12dsp技术第十二讲指令系统概述

上传人:繁星 文档编号:88333314 上传时间:2019-04-24 格式:PPT 页数:58 大小:1.22MB
返回 下载 相关 举报
[计算机软件及应用]12dsp技术第十二讲指令系统概述_第1页
第1页 / 共58页
[计算机软件及应用]12dsp技术第十二讲指令系统概述_第2页
第2页 / 共58页
[计算机软件及应用]12dsp技术第十二讲指令系统概述_第3页
第3页 / 共58页
[计算机软件及应用]12dsp技术第十二讲指令系统概述_第4页
第4页 / 共58页
[计算机软件及应用]12dsp技术第十二讲指令系统概述_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《[计算机软件及应用]12dsp技术第十二讲指令系统概述》由会员分享,可在线阅读,更多相关《[计算机软件及应用]12dsp技术第十二讲指令系统概述(58页珍藏版)》请在金锄头文库上搜索。

1、TMS320C54x的指令集有近两百条指令,按功能分为如下几类: 算术运算指令 逻辑运算指令 程序控制指令 装入和存储指令,TMS320C54x的指令集,一、算术运算指令,算术运算指令可分为如下几类: 加法指令 减法指令 乘法指令 乘加指令 乘减指令 双数/双精度指令 特殊操作指令,1、加法指令,定点DSP中数据表示方法,当它表示一个整数时,其最低位(D0)表示1,D1位表示2的1次方,次高位(D14)表示2的14方。 如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1表示负数。例如,07FFFH表示最大的正数32767(十进制),而0FFFFH表示最大的负数-1(负数用2的补码

2、方式显示)。 当需要表示小数时,小数点的位置始终在最高为后,而最高位(D15)表示符号位。这样次高位(D14)表示0.5,然后是0.25,最低位(D0)表示。所以04000H表示小数0.5,01000H表示小数0.25,而0001H表示16位定点DSP表示的最小的小数(有符号)0.000030517578125。,实现16位定点加法,C54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于立即数的加法。,使用ADD完成加法,ld temp1,a ;将变量temp1装入寄

3、存器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中寻址方式,ADD Smem ,SH

4、IFT,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 例如: ADD *AR2,*AR3,A,2、减法指令,实现16位定点减法,C54X中提供了多条用于减法的指令,如SUB,SUBB,SUBC和SUBS。其中SUBS用于无符号数的减法运算,SUBB用于带进位的减法运算(如32位扩展精度的减法),而SUBC为移位减,DSP中的除法就是用该指令来实现的。SUB指令与ADD指令一样,有许多的寻址方式,其详细使用说明请参考

5、TMS320C54X使用教程,减法指令使用举例,stm #60h,ar3 ;将变量temp1的地址装入ar3寄存器 stm #61h,ar2 ;将变量temp3的地址装入ar3寄存器 sub *ar2+, *ar3,b ;将变量temp3左移16位同时变量 ; temp2也左移16位,然后相减,结 ; 果放入寄存器B(高16位)中,同 ; 时ar2加1。 sth b,63h ;将相减的结果(高16位)存入变量63h,利用SUBC实现除法,在C54X中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数

6、特别适用。另一种方法是使用SUBC指令,重复16次减法完成除法运算。,利用SUBC完成Temp1/Temp2,ld temp1,B ;将被除数temp1装入B寄存 ;器的低16位 rpt #15 ;重复SUBC指令16次 subc temp2,b ;使用SUBC指令完成除法 stl B,temp3 ;将商(B寄存器的低16位) ;存入变量temp3 sth B,temp4 ;将余数(B寄存器的高16位) ;存入变量temp4 注: 实际上是完成整数除法,实现小数除法,在C54X中实现16位的小数除法与前面的整数除法基本一致,也是使用SUBC指令来完成。但有两点需要注意:第一,小数除法的结果一定

7、是小数(小于1),所以被除数一定小于除数。在执行SUBC指令前,应将被除数装入A或B寄存器的高16位,而不是低16位。其结果的格式与整数除法一样。第二,应考虑符号位对结果小数点的影响。所以应对商右移一位,得到正确的有符号数。,3、乘法指令,实现16定点整数乘法,在C54X中提供了大量的乘法运算指令,其结果都是32位,放在A或B寄存器中。乘数在C54X的乘法指令很灵活,可以是T寄存器、立即数、存贮单元和A或B寄存器的高16位。如果是无符号数乘时,请使用MPYU指令。这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘法。,整数乘法举例,rsbx FRCT ;清FRCT标志,准备整数乘

8、 ld temp1,T ;将变量temp1装入T寄存器 mpy temp2,a ;完成temp2*temp1,结果放 ;入A寄存器(32位),实现小数乘法,在C54X中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积结果左移移位。两个小数(16位)相乘后结果为32位,如果精度允许的话,可以只存高16位,将低16位丢弃,这样仍可得到16位的结果。,小数乘法举例,ssbx FRCT ;FRCT=1,准备小数乘法 ld temp1,16,a ;将变量

9、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 - b,4、乘加和乘减指令,5、双精度/双数操作指令,6、特殊指令,二、逻辑运算指令,逻辑指令包括与、或、异或、移位和测试指令 1、与指令(AND),2、或、异或指令,3、移位和测试指

10、令,三、程序控制指令,程序控制指令包括: 分支指令 调用指令 中断指令 返回指令 重复指令 堆栈操作指令 混合程序控制指令,1、分支指令,2、调用与中断指令,3、返回指令,4、重复指令和堆栈操作指令,5、混合程序控制指令,四、装入和存储指令,装入和存储指令包括: 一般的装入和存储指令 条件存储指令 并行装入和存储指令 并行装入和乘法指令 并行存储和加件乘指令 混合装入和存储指令,1、一般的装入指令,2、存贮指令,3 并行装入和存储指令,4、条件存储指令,5、并行存储和加、减、乘法指令,6、并行装入和乘法指令,7、混合装入和存储指令,注意:同一条指令在不同存储器中可能有不同执行时间,操作数在双寻

11、址空间、单寻址空间和外部 程序代码在双寻址、单寻址和外部空间 操作数和代码在相同存储器块中 数据空间插入了等待周期 程序空间插入了等待周期,FIRS指令使用方法: FIRS *AR2+, *AR3+, COEF,特殊指令使用说明,FIRS指令 FIRS指令用于线性相位滤波器的处理。一个如下图的8阶线性相位滤波器的输出表达式:,FIR滤波的两指令MAC、FIRS,RPTZ A,#(N-1) ;重复MAC指令N次,先将A清零 MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ; 完成滤波计算。注意FIR滤波 ;系数存放在数据存储区,RPTZ B, #(N/2-1) ; 重复F

12、IRS指令N/2次,先将B清零 FIRS *ar2+0%, *ar3+0%,filter_coff+N/2 ;完成滤波计算。注意FIR滤波系数 ;存放在程序存贮filter_coff为 ;系数起始地址,Viterbi译码指令DADST、DSADT、CMPS,在信道均衡和解码中经常会使用到Viterbi算法,C54x为此提供了专门的硬件和指令。根据输入信号确定分支似然概率增加量D1/D2,放在T寄存器中,TRN存储可能信号译码输出。,相关指令应用,最小均方运算LMS,在进行自适应滤波等操作中经常会使用LMS算法,C54x提供的LMS指令方便了编程。如下图所示的自适应滤波器设计中,滤波器系数修正公

13、式为:,其中,e(i) = d(i) - y(i)。 滤波器输出:,基于LMS的自适应滤波编程,数据归一化相关指令EXP、NORM,归一化一个数是先求其指数,然后把它调整到最大精度格式。实现方法如下:,数据块移动MVDD、MVDP、MVPD,在C54x系列DSP,数据与数据存储器、数据与程序存储器之间可以方便的进行数据传输,结合单指令循环可实现数据块移动。如16个系数的移动:,指令效率的提高,C54x中有一些指令功能差不多,但编写出的程序效率不同,应灵活使用,如: MPYR Smem, dst ;T*(Smen)dst MACR Smem, dst ;(Smen)*T+src ( MPYR +

14、ADD) ; src MACD Smen,pmen,src ;pmend PAR (MAC+DELY+LD) ;(Smem)*(pmed) ; +(src) src ;(Smem)T ;(Smem) Smem+1,* * FileName: ex2.asm * * Description: 数据存储器和程序存储器实验 * * .title “ex2“ .global reset,_c_int00 .mmregs .def _c_int00 DAT0 .set 00H DAT1 .set 01H DAT2 .set 02H DAT3 .set 03H DDAT0 .set 2004H DDAT1

15、 .set 2005H DDAT2 .set 2006H DDAT3 .set 2007H PDAT0 .set 1f00H PDAT1 .set 1f01H PDAT2 .set 1f02H PDAT3 .set 1f03H,.sect “.vectors“ ;中断向量表 reset: B _c_int00 ;复位向量 NOP NOP .space 4*126 .text DELAY .macro COUNT STM COUNT,BRC RPTB delay? NOP NOP NOP NOP delay?: NOP .endm _c_int00: LD #40h,DP ;置数据页为2000h207Fh STM #3000h,SP ;置堆栈指针 SSBX INTM ;禁止中断 STM #07FFFh,SWWSR ;置外部等待时间,bk0: SSBX XF ;置XF以实现二极管闪烁 DELAY #0FFFFh RSBX XF DELAY #0FFFFh SSBX XF DELAY #0FFFFh bk1: ST #1234h,DAT0 ;立即数寻址 ST #5678h,*(DDAT1) NOP NOP NOP bk2: MVDK DAT0,DDAT0 ;绝对地址(dmad)寻

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号