版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、三、TMS320C54X的指令系统,TMS320C5000指令系统,C54x寻址方式 C54x特殊寻址 方式说明 C54x指令集 C54x特殊指令 使用说明,TMS320C54x的寻址方式,立即数寻址: 指令中嵌有一个固定的数 绝对地址寻址: 指令中有一个固定的地址 累加器寻址: 按累加器内的地址去访问程序存储器中的一个单元 直接寻址: 指令中的7bits是一个数据页内的偏移地址,而所在的数据页由数据页指针DP或SP决定。该偏移加上DP和SP的值决定了在数据存储器中的实际地址。 间接寻址: 按照辅助寄存器中的地址访问存储器。 存储器映射寄存器寻址: 修改存储器映射寄存器中的值,而不影响当前DP
2、或SP的值。 堆栈寻址: 把数据压入和弹出系统堆栈。,在立即数寻址中,指令里包括了立即操作数。在一条指令中可对两种立即数编码。一种是短立即数(3、5、8或9bits),另一种是16bits的长立即数。立即数可包含在单字或双字指令中。3-,5-,8-或9-bit值在单字指令中,16-bit值在双字指令中。,1 . 立即数寻址,立即数寻址的其他例子: LD #0,ARP ;ARP=2(#k3) LD #3,ASM ;ASM=3(#k5) LD #50,DP ;DP=50(#k9) LD #1234,A ;A=1234(#k) STM #FFFFh,IMR ;IMR=FFFFh(#lk),短立即数R
3、PT,长立即数RPT,2. 直接寻址,在直接寻址中,指令代码包含了数据存储器地址的低七位。这7-bit dma作为偏移地址与数据页指针(DP)或堆栈指针(SP)相结合共同形成16-bit的数据存储器实际地址。如右图所示。,CPL=0:dma与9-bit的DP相结合形成数据存储器地址。,以DP为基准的直接寻址,DP 9-bit,9-bit的DP指向数据存储空间的512个数据页中的一页,0,1,2,510,511,编程举例:,编程举例:,直接寻址编程: .mmregs .bss x, 4, 1 a0.word 012h a1.word 3211h a2.word fe11h a3.word ff0
4、3h .sect “program” LD #0, A LD #X, DP LD #a0, T,MAC x,A LD #a1,T MAC X+1,A LD #a2,T MAC X+2,A .,以SP为基准的直接寻址,CPL=1:dma加上SP基地址形成数据存储器地址。(st1中),使用以SP为基址的直接寻址: AND sample, A LD sample, A ADD sample, B ;.,3. 间接寻址,在间接寻址中,64K数据空间任意单元都可通过一个辅助寄存器中的16-bit地址进行访问。C54x有8个16-bit辅助寄存器(AR0-AR7)。两个辅助寄存器算术单元(ARAU0和AR
5、AU1),根据辅助寄存器的内容进行操作,完成无符号的16-bit算术运算。间接寻址很灵活,不仅能从存储器中读或写一个单16-bit数据操作数,而且能在一条指令中访问两个数据存储器单元(即从两个独立的存储器单元读数据,或读一个存储器单元同时写另一个存储器单元,或读写两个连续的存储器单元)。,单操作数寻址,单操作数间接寻址方框图,单操作数间接寻址类型: *Arx: ARx包含了数据存储器地址 *ARx-/ *ARx+ : 访问后, ARx中的地址减1/加1 *+ARx: 在寻址之前,ARx中的地址加1 *ARx-0B/ *ARx+0B :访问后,从ARx中以位倒序进位的 方式减去/加上AR0 *A
6、Rx-0/ *ARx+0 : 访问后,从ARx中减去/加上AR0 *ARx-%/ *ARx+% : 访问后,ARx中的地址以循环寻址 的方式减1/加1 *ARx-0%/ *ARx+0% :访问后,从ARx中以循环寻址的方 式减去/加上AR0 *ARx(lk): ARx和16-bit的长偏移(lk) 的和用来 作为数据存储器地址。ARx本身不 被修改,*+ARx(lk): 在寻址之前,把一个带符号的16-bit的长偏移 (lk)加到ARx中,然后用新的ARx的值作为 数据存储器的地址 *+ARx(lk)%:在寻址之前,把一个带符号的16-bit的长偏移 以循环寻址的方式加到ARx中,然后再用新
7、的ARx的值作为数据存储器的地址,编程举例:,编程举例:,间接寻址编程: .mmregs .bss x, 4, 1 a.word 1, 2, 3, 4 .sect “program” STM #a, AR1 STM #x, AR2 LD #0, A LD *AR1+,T MAC *AR2+,A LD *AR1+,T,MAC *AR2+,A LD *AR1+,T MAC *AR2+,A LD *AR1,T MAC *AR2,A .,双操作数寻址方式,双数据存储器操作数间接寻址类型 *Arx: ARx是数据存储器地址 *ARx-/ *ARx+: 访问后,ARx中的地址减1/加1 *ARx+0%:
8、访问后,AR0以循环寻址的方式加 到ARx中。 例如: MPY *AR2,*AR3,A FIRS *AR2,*AR3,coef,双数据存储器操作数间接寻址方框图,4. 绝对地址寻址 有个别指令可以使用16bits的绝对地址寻址: 数据存储器地址(dmad)寻址: MVDK Smem, dmad MVDM dmad, MMR MVKD dmad, Smem MVMD pmad, Smem 程序存储器地址(pmad)寻址: FIRS Xmem, Ymem, pmad MACD Smem, pmad, src MACP Smem, pmad, src MVPD pmad, Smem 端口地址(PA)
9、寻址 PORTR PA, Smem PORTW Smem, PA *(lk)寻址适用于支持单数据存储器操作数的指令,5. 累加器寻址 累加器寻址是用累加器中的数作为一个地址。这种寻址方式可用来对存放数据的程序存储器寻址。共有两条指令可以采用累加器寻址: READA Smem WRITA Smem READA是把累加器A所确定的程序存储器单元中的一个字,传送到单数据存储器(Smem)操作数所确定的数据存储器单元中。WRITA是把Smem操作数所确定的数据单元中的一个字,传送到累加器A确定的程序存储器单元中去。,只有8条指令能使用存储器映射寄存器寻址: LDM MMR, dst MVDM dmad
10、, MMR MVMD MMR, dmad MVMM MMRx, MMRy POPM MMR PSHM MMR STLM src, MMR STM #lk, MMR,6. 存储器映射寄存器寻址 存储器映射寄存器寻址用来修改存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值。存储器映射寄存器寻址既可以在直接寻址中使用,又可以在间接寻址中使用。,7. 堆栈寻址 系统堆栈用来在中断和子程序期间自动存放程序计数器。它也能用来存放额外的数据项或传递数据值。处理器使用一个16-bit的存储器映射寄存器堆栈指针来对堆栈寻址,它总是指向存放在堆栈中的最后一个元素。 共有四条使用堆栈寻址方式访问
11、堆栈的指令: PSHD 把一个数据存储器的值压入堆栈。 PSHM 把一个存储器映射寄存器的值压入堆栈。POPD 把一个数据存储器的值弹出堆栈。 POPM 把一个存储器映射寄存器的值弹出堆栈。,特殊寻址方式说明,本小节重点介绍两种广泛应用的特殊寻址方式循环寻址和位倒序寻址。 位倒序寻址,位倒序寻址提高了执行速度和在FFT算法的程序中使用存储器的效率。在这种寻址方式中,AR0存放的整数N是FFT点数的一半。一个辅助寄存器指向一数据存放的物理单元。当使用位倒序寻址把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是从右向左。间接寻址中*Arn+0B/-0B表示位倒序寻址。,8
12、点的FFT蝶型结运算,0000 0100 0010 0110 0001 0101 0011 0111,FFT中混序就是位倒序,FFT运算时输出/输入序列中必有其一要混序。,位倒序寻址的执行 设FFT长度N=16,则AR0赋值为8,位倒序方式读入数据情况如下:,循环寻址: 许多算法,如卷积,相关和FIR滤波等,都需要在存储器中实现一个循环缓冲器。在这些算法中,一个循环缓冲器就是一个包含了最近的数据的滑动窗口。当新的数据来到时,缓冲器就会覆盖最早的数据。循环缓冲器实现的关键是循环寻址的实现。C54x间接寻址中提供了循环寻址的方式,以%表示。,循环寻址图示,循环寻址的有效地址计算,定义循环缓冲器大小
13、寄存器(BK)来确定了循环缓冲器的大小。大小为R的循环缓冲器必须从一个N-bit边界开始。循环缓冲器的有效基地址(EFB)就是用户选定的辅助寄存器(ARx)的低N位置 0后所得到的值。 满足条件: 循环缓冲器的尾地址(EOB)是通过用BK的低N位代替ARx的低N位得到。循环缓冲器的INDEX就是ARx的低N位,step就是加到辅助寄存器,或从辅助寄存器中减去的值。循环寻址的算法如下:,if 0 index+step BK: index = index + stepelse if index + step BK: index = index + step - BKelse if index +
14、step 0 index = index + step + BK,如何确定循环缓冲的起始地址?,R(BK)=32 - 二进制 100000 - N=6,R(BK)=31 - 二进制 011111 - N=5,应用举例: 计算16阶的FIR滤波器输出256个点,.sect “fir-prog” STM #255, BRC ; Repeat 256 times RPTBD fir_filter_loop STM #16, BK ; FIR circular buffer size LD *AR7+, A ; load the input value STL A, *AR4+% ; replace
15、oldest sample with ; newest sample RPTZ A, #16 MAC *AR4+0%, *AR3+0%, A ; filtering STH A, *AR5+ ; replace the oldest buffer value fir_filter_loop,TMS320C54x的指令集有近两百条指令,按功能分为如下几类: 算术运算指令 逻辑运算指令 程序控制指令 装入和存储指令,TMS320C54x的指令集,一、算术运算指令,算术运算指令可分为如下几类: 加法指令 减法指令 乘法指令 乘加指令 乘减指令 双数/双精度指令 特殊操作指令,1、加法指令,定点DSP
16、中数据表示方法,当它表示一个整数时,其最低位(D0)表示1,D1位表示2的1次方,次高位(D14)表示2的14方。 如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1表示负数。例如,07FFFH表示最大的正数32767(十进制),而0FFFFH表示最大的负数-1(负数用2的补码方式显示)。 当需要表示小数时,小数点的位置始终在最高为后,而最高位(D15)表示符号位。这样次高位(D14)表示0.5,然后是0.25,最低位(D0)表示。所以04000H表示小数0.5,01000H表示小数0.25,而0001H表示16位定点DSP表示的最小的小数(有符号)0.0000305175781
17、25。,实现16位定点加法,C54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于立即数的加法。,使用ADD完成加法,ld temp1,a;将变量temp1装入寄存器A add temp2,a;将变量temp2与寄存器A相加 ;结果放入A中 stla,temp3;将结果(低16位)存入变量 ;temp3中。 注意,这里完成计算temp3=temp1+temp2,我们没有特意考虑temp1和temp2是整数还是小数,在加法和下面的减法中整数运算和定点的小数运算都是一样的
18、。,利用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 ,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 例如: ADD *AR2,*AR3,A,2、减法指令,实现16位定点减法,C54X中提
19、供了多条用于减法的指令,如SUB,SUBB,SUBC和SUBS。其中SUBS用于无符号数的减法运算,SUBB用于带进位的减法运算(如32位扩展精度的减法),而SUBC为移位减,DSP中的除法就是用该指令来实现的。SUB指令与ADD指令一样,有许多的寻址方式,其详细使用说明请参考TMS320C54X使用教程,减法指令使用举例,stm#60h,ar3;将变量temp1的地址装入ar3寄存器 stm#61h,ar2;将变量temp3的地址装入ar3寄存器 sub*ar2+, *ar3,b;将变量temp3左移16位同时变量 ; temp2也左移16位,然后相减,结 ; 果放入寄存器B(高16位)中,
20、同 ; 时ar2加1。 sthb,63h;将相减的结果(高16位)存入变量63h,利用SUBC实现除法,在C54X中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用SUBC指令,重复16次减法完成除法运算。,利用SUBC完成Temp1/Temp2,ldtemp1,B;将被除数temp1装入B寄存 ;器的低16位 rpt#15 ;重复SUBC指令16次 subctemp2,b;使用SUBC指令完成除法 stlB,temp3;将商(B寄存器的低16位) ;存入变量temp3
21、sthB,temp4;将余数(B寄存器的高16位) ;存入变量temp4 注: 实际上是完成整数除法,实现小数除法,在C54X中实现16位的小数除法与前面的整数除法基本一致,也是使用SUBC指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1),所以被除数一定小于除数。在执行SUBC指令前,应将被除数装入A或B寄存器的高16位,而不是低16位。其结果的格式与整数除法一样。第二,应考虑符号位对结果小数点的影响。所以应对商右移一位,得到正确的有符号数。,3、乘法指令,实现16定点整数乘法,在C54X中提供了大量的乘法运算指令,其结果都是32位,放在A或B寄存器中。乘数在C54X的乘
22、法指令很灵活,可以是T寄存器、立即数、存贮单元和A或B寄存器的高16位。如果是无符号数乘时,请使用MPYU指令。这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘法。,整数乘法举例,rsbxFRCT;清FRCT标志,准备整数乘 ldtemp1,T;将变量temp1装入T寄存器 mpytemp2,a;完成temp2*temp1,结果放 ;入A寄存器(32位),实现小数乘法,在C54X中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积
23、结果左移移位。两个小数(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(0 x0ccd) x 0.7(0 x599a) = 0.06997680664063(0 x08f5) 注:可以使用MPYR完成四舍五入。 比较如下结
24、果 mpyr temp1,b ; T * temp1 - b,4、乘加和乘减指令,5、双精度/双数操作指令,6、特殊指令,二、逻辑运算指令,逻辑指令包括与、或、异或、移位和测试指令 1、与指令(AND),2、或、异或指令,3、移位和测试指令,三、程序控制指令,程序控制指令包括: 分支指令 调用指令 中断指令 返回指令 重复指令 堆栈操作指令 混合程序控制指令,1、分支指令,2、调用与中断指令,3、返回指令,4、重复指令和堆栈操作指令,5、混合程序控制指令,四、装入和存储指令,装入和存储指令包括: 一般的装入和存储指令 条件存储指令 并行装入和存储指令 并行装入和乘法指令 并行存储和加件乘指令
25、混合装入和存储指令,1、一般的装入指令,2、存贮指令,3 并行装入和存储指令,4、条件存储指令,5、并行存储和加、减、乘法指令,6、并行装入和乘法指令,7、混合装入和存储指令,注意:同一条指令在不同存储器中可能有不同执行时间,操作数在双寻址空间、单寻址空间和外部 程序代码在双寻址、单寻址和外部空间 操作数和代码在相同存储器块中 数据空间插入了等待周期 程序空间插入了等待周期,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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026卫生高级职称考试(病理学)历年参考题库含答案详解
- 2026卫生检验与检疫期末复习-毒理学基础(卫生检验与检疫)历年题库含答案详解
- 2026卫生专业技术资格考试(耳鼻咽喉科学·主治医师-基础知识)历年参考题库含答案详解
- 2026卫生专业技术资格考试(推拿(按摩)学-基础知识·主治医师)历年参考题库含答案详解
- 2026卫生专业技术资格考试(临床医学检验技术-专业知识·初级师)历年参考题库含答案详解
- 2026第三方物流服务模式创新及市场竞争与投资价值研究报告
- 2026数据中心市场发展分析及节能趋势与REITs融资研究报告
- 2026中国直升机救援装备适航认证与应急响应能力报告
- 2026汽车零部件行业前景聚焦分析共商发展策略研究报告
- 2026饮用水市场渠道优化分析及销售效率提升与投资潜力研究报告
- 供应商入驻管理规定
- 新星石油公司新疆库车绿氢示范项目环评报告
- 语文试卷答题卡模板(高中语文考试答题卡模板)
- CJ/T 94-2005饮用净水水质标准
- 湖北省高速公路智慧梁厂标准化指南(试行)2025
- 骨折包扎操作流程
- 科研项目保密协议承诺书
- 《服务业员工情绪劳对工作倦怠的影响实证探究(含问卷)》11000字(论文)
- 预应力混凝土管桩(L21G404)
- 奥派直播电商仿真实训软件操作手册
- 《菩萨蛮》温庭筠课件
评论
0/150
提交评论