C54x第二章 指令系统(1)
- 格式:pps
- 大小:1.09 MB
- 文档页数:49
TMS320C54xDSP CPU外设第一章综述1 总线结构C54x包括8条16比特宽度的总线,其中:●一条程序总线(PB)●三条数据总线(CB、DB、EB)●四条地址总线(PAB、CAB、DAB、EAB)2CPUC54x的CPU结构包括:●40比特的ALU,其输入来自16比特立即数、16比特来自数据存储器的数据、暂时存储器、T中的16比特数、数据存储器中两个16比特字、数据存储器中32比特字、累加器中40比特字。
●2个40比特的累加器,分为三个部分,保护位(39-32比特)、高位字(31-16比特)、低位字(15-0比特)。
●桶型移位器,可产生0到31比特的左移或0到16比特的右移。
●17×17比特的乘法器●40比特的加法器●比较选择和存储单元CSSU●数据地址产生器DAGEN●程序地址产生器PAGEN3外设C54x包括:●通用I/O引脚,XF和BIO●定时器●PLL时钟产生器●HPI口,8比特或16比特●同步串口●带缓存串口,BSP●多路带缓存串口,McBSP●时分复用串口,TDM●可编程等待状态产生器●可编程bank-switching模块●外部总线接口●IEEE1149.1标准JTAG口第二章 存储器一般而言,C54x 的存储空间可达192K16比特字,64K 程序空间,64K 数据空间,64KI/O 空间。
依赖其并行的工艺特性和片上RAM 双向访问的性能,在一个机器周期内,C54x 可以执行4条并行并行存储器操作:取指令,两操作数读,一操作数写。
使用片内存储器有三个优点:高速执行(不需要等待),低开销,低功耗。
1 存储空间分配图(以C549为例)复位后,中断矢量表位于程序区FF80H 位置,可重新定位于程序空间任何一个128字的页面(其地址高9比特即页号由PMST 中IPTR 确定)。
2 程序存储区C54x 有片内ROM 、DARAM 、SARAM ,这些区域可以通过软件配置到程序空间。
第一章绪论1.1 DSP的基本原理数字信号处理(简称DSP)是一门涉及多门学科并广泛应用于很多科学和工程领域的新兴学科。
数字信号处理是利用计算机或专用处理设备,以数字的形式对信号进行分析、采集、合成、变换、滤波、估算、压缩、识别等加工处理,以便提取有用的信息并进行有效的传输与应用。
数字信号处理是以众多学科为理论基础,它所涉及的范围极其广泛。
如数学领域中的微积分、概率统计、随机过程、数字分析等都是数字信号处理的基础工具。
它与网络理论、信号与系统、控制理论、通信理论、故障诊断等密切相关。
DSP可以代表数字信号处理技术(Digital SignalProcessing),也可以代表数字信号处理器(Digital Signal Processor)。
前者是理论和计算方法上的技术,后者是指实现这些技术的通用或专用可编程微处理器芯片。
数字信号处理包括两个方面的内容:1.法的研究 2.数字信号处理的实现数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。
数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。
数字信号处理在理论上的发展推动了数字信号处理应用的发展。
反过来,数字信号处理的应用又促进了数字信号处理理论的提高。
而数字信号处理的实现则是理论和应用之间的桥梁。
数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
指令系统TMS320C54x指令系统共有指令130条,由于操作数的寻址方式不同,派生至205条。
按指令的功能,可以将C54x指令系统分成4类:算术运算指令、逻辑运算指令、程序控制指令、加载和存储指令。
下面分别对各类指令进行介绍。
Ⅰ、算术运算指令算术运算指令分为加法指令(ADD),减法指令(SUB),乘法指令(MPY),乘加指令(MAC),乘减指令(MAS),双数/双精度指令(DADD,DSUB)和特殊操作指令(ABDST,SQDST)。
1.加法指令加法指令共有13条,如表1.1.1所示。
表1.1.1 加法指令整数分有符号数和无符号数两种格式,表示有符号数时,其最高位表示符号,最高位为0表示其为正数,1表示为负数;无符号数其最高位仍做为数值位计算。
例如,有符号数能够表示的最大的正数为07FFFh,等于32767,而0FFFFH表示最大的负数–1;无符号数不能表示负数,它能够表示的最大的数为0FFFFh,等于十进制数的65535。
小数符号和上面整数的表示一样,但必须注意如何安排小数点的位置。
2.减法指令减法指令共有13条,见表1.1.2所示。
表1.1.2 减法指令3.乘法指令乘法指令共有10条,见表1.1.3。
表1.1.3乘法指令续表4.乘加和乘减指令乘加和乘减指令共有22条,见表1.1.4所示。
表1.1.4 乘加和乘减指令续表5.双操作数指令双操作数指令共有6条,见表1.1.5所示。
表1.1.5双操作数指令续表6.特殊应用指令特殊应用指令共有15条,见表1.1.6所示。
表1.1.6 特殊应用指令续表Ⅱ、逻辑运算指令逻辑运算指令包括与指令(AND),或指令(OR),异或指令(XOR),移位指令(ROL)和测试指令(BITF)。
1.与指令与指令共5条,见表2.2.1。
表2.2.1与指令2.或指令或指令共5条,见表2.2.2。
表2.2.2 或指令3.异或指令异或指令共5条,见表2.2.3。
表2.2.3 异或指令4.移位指令移位指令共6条,见表2.2.4。
指令系统TMS320C54x指令系统共有指令130条,由于操作数的寻址方式不同,派生至205条。
按指令的功能,可以将C54x指令系统分成4类:算术运算指令、逻辑运算指令、程序控制指令、加载和存储指令。
下面分别对各类指令进行介绍。
Ⅰ、算术运算指令算术运算指令分为加法指令(ADD),减法指令(SUB),乘法指令(MPY),乘加指令(MAC),乘减指令(MAS),双数/双精度指令(DADD,DSUB)和特殊操作指令(ABDST,SQDST)。
1.加法指令加法指令共有13条,如表1.1.1所示。
表1.1.1 加法指令整数分有符号数和无符号数两种格式,表示有符号数时,其最高位表示符号,最高位为0表示其为正数,1表示为负数;无符号数其最高位仍做为数值位计算。
例如,有符号数能够表示的最大的正数为07FFFh,等于32767,而0FFFFH表示最大的负数–1;无符号数不能表示负数,它能够表示的最大的数为0FFFFh,等于十进制数的65535。
小数符号和上面整数的表示一样,但必须注意如何安排小数点的位置。
2.减法指令减法指令共有13条,见表1.1.2所示。
表1.1.2 减法指令3.乘法指令乘法指令共有10条,见表1.1.3。
表1.1.3乘法指令续表4.乘加和乘减指令乘加和乘减指令共有22条,见表1.1.4所示。
表1.1.4 乘加和乘减指令续表5.双操作数指令双操作数指令共有6条,见表1.1.5所示。
表1.1.5双操作数指令续表6.特殊应用指令特殊应用指令共有15条,见表1.1.6所示。
表1.1.6 特殊应用指令续表Ⅱ、逻辑运算指令逻辑运算指令包括与指令(AND),或指令(OR),异或指令(XOR),移位指令(ROL)和测试指令(BITF)。
1.与指令与指令共5条,见表2.2.1。
表2.2.1与指令2.或指令或指令共5条,见表2.2.2。
表2.2.2 或指令3.异或指令异或指令共5条,见表2.2.3。
表2.2.3 异或指令4.移位指令移位指令共6条,见表2.2.4。
第二章指令系统
本章要求:
1、要求看到陌生指令能够通过查指令表,既通过助记符及操作数来找到该指令原型,根据指令说明读懂该指令。
2、根据指令表中的指令原型,通过阅读指令说明,能够选择合适的寻址方式,使用该指令。
举例说明:ADD *ar2,A; 查找指令原形,P313
ADD *ar3+,16,A,B ;查找指令原形P313
STL A , @x ; 查找指令原形P326
MPY Smem,dst;P337读懂表达式,使用MPY *ar2,A MPY Xmem,Ymem,dst ;P338读懂含义,
使用MPY*ar2+,*ar3+,A; A=(*ar2)*(*ar3)
ST #lk,Smem ;P341,读懂指令含义,使用ST #1000h,@a 指令系统中使用的符号及缩略语,详细表格见教材P130
第二章指令系统
以下为一些常用指令,希望大家对各指令有所了解。
TMS320C54x的指令集有近两百条指令,按功能分为如下几类:
•算术运算指令
•逻辑运算指令
•程序控制指令
•装入和存储指令
一、算术运算指令
算术运算指令可分为如下几类:
•加法指令
•减法指令
•乘法指令
•乘加指令
•乘减指令
•双数/双精度指令
•特殊操作指令
1、加法指令
定点DSP中数据表示方法
•当它表示一个整数时,其最低位(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.000030517578125。
实现16位定点加法
•‘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中寻址方式
•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中提供了多条用于减法的指令,如SUB,SUBB,SUBC和SUBS。
其中SUBS 用于无符号数的减法运算,SUBB用于带进位的减法运算(如32位扩展精度的减法),而SUBC为移位减,DSP中的除法就是用该指令来实现的。
SUB指令与ADD 指令一样,有许多的寻址方式。
减法指令使用举例
.bss a,1;定义变量a
.bss b,1;定义变量b
stm#a,ar2;将变量a的地址装入ar2寄存器
stm#b,ar3;将变量b的地址装入ar3寄存器
sub*ar2+,*ar3,b;将变量a左移16位同时变量
;b也左移16位,然后相减,结
;果放入累加器B(高16位)中,寻
;址后ar2加1。
sth b,@63h;将相减的结果(高16位)存入变量63h
利用SUBC实现除法
•在‘C54X中没有提供专门的除法指令,一般有两种方法来完成除法。
一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。
这种方法对于除以常数特别适用。
另一种方法是使用SUBC指令,重复16次减法完成除法运算。
利用SUBC完成Temp1/Temp2 temp1.word100;定义常量temp1
temp2.word30;
.bss temp3,1;定义常量temp3
.bss temp4,1
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指令来完成。
但有两点需要注意:第一,小数除法的结果一定是小数(小于1),所以被除数一定小于除数。
在执行SUBC指令前,应将被除数装入A
或B寄存器的高16位,而不是低16位。
其结果的格式与整数除法一样。
第二,应考虑符号位对结果小数点的影响。
所以应对商右移一位,得到正确的有符号数。
3、乘法指令
实现16定点整数乘法
•在‘C54X中提供了大量的乘法运算指令,其结果都是32位,放在A或B寄存器中。
乘数在‘C54X的乘法指令很灵活,可以是T寄存器、立即数、存贮单元和A或B寄存器的高16位。
如果是无符号数乘时,请使用MPYU指令。
这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘法。
整数乘法举例
rsbx FRCT;清FRCT标志,准备整数乘ld temp1,T;将变量temp1装入T寄存器mpy temp2,a;完成temp2*temp1,结果放
;入累加器A(32位)
实现小数乘法
•在‘C54X中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。
‘C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积结果左移1位。
两个小数(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 --> b
4、乘加和乘减指令
5、双精度/
双数操作指令
6、特殊指令
二、逻辑运算指令
逻辑指令包括与、或、异或、移位和测试指令1、与指令(AND)
2、或、异或指令
3、移位和测试指令
三、程序控制指令
程序控制指令包括:分支指令
调用指令
中断指令
返回指令
重复指令
堆栈操作指令
混合程序控制指令
1、分支指令
2、调用与中断指令
3、返回指令
4、重复指令和堆栈操作指令
5、混合程序控制指令
四、装入和存储指令装入和存储指令包括:
一般的装入和存储指令
条件存储指令
并行装入和存储指令
并行装入和乘法指令
并行存储和加件乘指令
混合装入和存储指令
1、一般的装入指令
2、存贮指令
3 并行装入和存储指令
4、条件存储指令
5、并行存储和加、减、乘法指令
6、并行装入和乘法指令
7、混合装入和存储指令。