DSP指令系统及特点_第1页
DSP指令系统及特点_第2页
DSP指令系统及特点_第3页
DSP指令系统及特点_第4页
DSP指令系统及特点_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1DSP指令系统及特点第三章DSP指令系统与特点第一节寻址方式第二节程序地址的生成第三节流水线操作技术(了解)第四节指令系统概述第1页/共62页Smem:16位单寻址操作数。Xmem:16位双寻址操作数,从DB数据总线上读出。Ymem:16位双寻址操作数,从CB数据总线上读出。dmad:16位立即数,数据存储器地址。pmad:16位立即数,程序存储器地址。PA:16位立即数,I/O口地址。src:源累加器(A或B)。dst:目的累加器(A或B)。lk:16位长立即数。第一节TMS320C54x的寻址方式

第2页/共62页1.立即数寻址2.绝对地址寻址3.累加器寻址4.直接寻址5.间接寻址6.存储器映象寄存器寻址7.堆栈寻址寻址分类第3页/共62页

1.立即数寻址

在操作数前面需要加#字号来说明该操作数为立即数。否则会把该操作数误认为是一个地址,从而把立即数寻址变成绝对地址寻址。

特点指令中包含有执行指令所需要的操作数。立即数分为3、5、8或9位的短立即数和16位的长立即数两种。短立即数可包含在单字或双字指令中,长立即数在双字指令中。

注意LD#93h,A

LD93h,A举例第4页/共62页

2.绝对地址寻址特点在指令中包含有所要寻址的存储单元的16位地址。这个16位的地址可以用其所在单元的地址标号或者16位符号常数来表示。

(1)数据存储器地址(damd)寻址

用一个符号或一个数来确定数据空间的一个地址。

方法MVKDSAMPLE,*AR3

举例第5页/共62页用一个符号或一个具体的数来确定程序存储器中的一个地址

(2)程序存储器地址(pmad)寻址方法MVPDTABLE,*AR4

举例第6页/共62页用一个符号或一个常数来确定外部I/O口地址

(3)PA寻址端口(PA)方法PORTRFIFO,*AR5举例第7页/共62页用一个符号或一个常数来确定数据存储器中的一个地址

(4)*(lk)寻址方法LD*(BUFFER),A举例特点允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对ARx进行初始化

第8页/共62页用累加器中的数值作为地址来读写程序存储器。方法READASmemWRITASmem举例特点可用来完成程序存储器单元的数据与数据存储器单元的数据进行交换

3.累加器寻址第9页/共62页可以在不改变DP或SP的情况下,随机地寻址128个存储单元中的任何一个单元。

用一个符号或一个常数来确定7位偏移值,与DP或SP共同形成16位的数据存储器实际地址。4.直接寻址方法LD#x,DPLD@u,AADD@v,A===========SSBXCPLLD@X1,AADD@Y2,A举例特点第10页/共62页CPL=07位dma域与9bit的DP相结合形成16位的数据存储器地址。CPL=17位dma域加上(正偏移)SP的值形成16位的数据存储器地址。

DP值是从0~511(29-1),以DP为基准的直接寻址把存储器分成512页,7位的dma范围从0~127,每页有128个可访问的单元。

第11页/共62页5.间接寻址方法特点(AR0~AR7)→ARAU0/ARAU1→16位无符号算术运算→寻址范围为64K

能在一个指令中访问两个数据存储器单元两个独立的存储器单元读数据读一个、写另一个存储器单元读写两个连续的存储器单元

第12页/共62页5.间接寻址(1)单操作数寻址定义间接寻址的类型定义寻址所使用的辅助寄存器ST1CMPT=0标准方式

ARF确定辅助寄存器,ST0中ARP=0

CMPT=1兼容方式如ARF=0,用ARP选择辅助寄存器,否则,用ARF来确定辅助寄存器。ARF的值装入ARP。LD*AR1,B第13页/共62页单操作数间接寻址的硬件框图第14页/共62页MOD域操作码语法功能说明0000*ARxaddr=ARxARx包含了数据存储器地址0001*ARx-addr=ARxARx=ARx-1访问后,ARx中的地址减1②0010*ARx+addr=ARxARx=ARx+1访问后,ARx中的地址加1①0011*+ARxaddr=ARx+1ARx=ARx+1在寻址前,ARx中的地址加1,然后再寻址①②③0100*ARx-0Baddr=ARxARx=B(ARx-AR0)访问后,从ARx中以位倒序进位的方式减去AR00101*ARx-0addr=ARxARx=ARx-AR0访问后,从ARx中减去AR00110*ARx+0addr=ARxARx=ARx+AR0访问后,把AR0加到ARx中去0111*ARx+0Baddr=ARxARx=B(ARx+AR0)访问后,把AR0以位倒序进位的方式加到ARx中1000*ARx-%addr=ARxARx=circ(ARx-1)访问后,ARx中的地址以循环寻址的方式减1①1001*ARx-0%addr=ARxARx=circ(ARx-AR0)访问后,从ARx中以循环寻址的方式减去AR01010*ARx+%addr=ARxARx=circ(ARx+1)访问后,ARx中的地址以循环寻址的方式加1①1011*ARx+0%addr=ARxARx=circ(ARx+AR0)访问后,把AR0以循环寻址的方式加到ARx中1100*ARx(lk)addr=ARx+lkARx=ARxARx和16位的长偏移(lk)的和用来作为数据存储器地址。ARx本身不被修改1101*+ARx(lk)addr=ARx+lkARx=ARx+lk在寻址前,把一个带符号的16位的长偏移(lk)加到ARx中,然后用新的ARx的值作为数据存储器的地址③1110*+ARx(lk)%addr=circ(ARx+lk)ARx=circ(ARx+lk)在寻址前,把一个带符号的16位的长偏移以循环寻址的方式加到ARx中,然后再用新的ARx的值作为数据存储器的地址③1111*(lk)addr=lk一个无符号的16位的长偏移(lk)用来作为数据存储器的绝对地址。(也属绝对寻址)③单数据存储器操作数间接寻址类型

第15页/共62页1)循环寻址循环缓冲区的长度值存放在循环缓冲区长度寄存器BK中,BK中的数值由指令设定。长度为R的循环缓冲器必须从一个N位地址的边界开始,即循环缓冲器基地址的最低N位必须为0。N是满足2N>R的最小整数。R的值必须装入BK。例如,含有31个字的循环缓冲器必须从最低5位为0的地址开始,即xxxxxxxxxxx000002,N=5,2N=25>R=31,且31必须装入BK。如:STM#1k,BK如果R=32,则最小的N值为6,循环缓冲区的起始地址必须有6个最低有效位为0,即××××××××××0000002。第16页/共62页2)位倒序寻址在这种寻址方式中,用AR0存放FFT点数的一半整数N,用另一辅助寄存器指向一数据存放的物理单元。当使用位倒序寻址把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是从右向左进位。例如:01101000+00001000

01100100以8位辅助寄存器为例,AR1表示了在存储器中数据的基地址(01100000)2,AR0的值为(00001000)2。利用以下两条语句可以向外设口(口地址为PA)输出整序后的FFT变换结果:RPT#15重复执行下条指令15+1次PORTW*AR1+0B,PA向外设口PA输出整结果第17页/共62页AR1修改循环值存储单元地址整序前FFT变换结果位倒序AR1更新的地址值AR0=000010002整序后PA输出的FFT变换结果00000X(0)000001100000X(0)10001X(8)100001101000X(1)20010X(4)010001100100X(2)30011X(12)110001101100X(3)40100X(2)001001100010X(4)50101X(10)101001101010X(5)60110X(6)011001100110X(6)70111X(14)111001101110X(7)81000X(1)000101100001X(8)91001X(9)100101101001X(9)101010X(5)010101100101X(10)111011X(13)110101101101X(11)121100X(3)001101100011X(12)131101X(11)101101101011X(13)141110X(7)011101100111X(14)151111X(15)111101101111X(15)位倒序对FFT变换结果的序号调整

第18页/共62页5.间接寻址(2)双操作数寻址方式确定包含Xmem地址的辅助寄存器

确定包含Ymem地址的辅助寄存器定义用于访问Ymem操作数的间接寻址方式的类型定义用于访问Xmem操作数的间接寻址方式的类型MPY*AR2,*AR3,A第19页/共62页Xar或Yar辅助寄存器

00AR2

01AR3

10AR4

11AR5

辅助寄存器选择Xmod或Ymod操作码语法功能说明00*ARxaddr=ARxARx是数据存储器地址01*ARx-addr=ARxARx=ARx-1访问后,ARx中的地址减110*ARx+addr=ARxARx=ARx+1访问后,ARx中的地址加111*ARx+0%addr=ARxARx=circ(ARx+AR0)访问后,AR0以循环寻址的方式加到ARx中双数据存储器操作数寻址的类型第20页/共62页0页寻址。不影响当前DP或SP值。用于直接寻址和间接寻址用来修改存储器映象寄存器

6.存储器映象寄存器寻址功能LDMPRD,A举例特点方法高9位数据存储器地址被置0,利用指令中的低7位地址访问MMR。第21页/共62页7.堆栈寻址从高地址向低地址方向生长,SP)来管理堆栈,SP始终指向堆栈中所存放的最后一个数据,即SP指针始终指向栈顶。在压入操作时,先减小SP的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加SP的值。用来在中断和子程序调用时自动保存程序计数器(PC)中的数值,也能用来保护现场或传送参数功能特点PSHD*AR2

POPD*AR3第22页/共62页第二节程序地址的生成程序地址生成器(PAGEN)构成程序计数器(PC)重复计数器(RC)块重复计数器(BRC)块重复起始地址寄存器(RSA)块重复结束地址寄存器(REA)核心16位程序计数器(PC)内中保存某个内部或外部程序存储器的地址。地址内容为:

即将取指的某条指令;

某个16位立即操作数;

系数表。在程序存储器中的地址第23页/共62页操作加载到PC的地址复位PC=FF80h。顺序执行指令PC=PC+1。分支转移用紧跟在分支转移指令后面的16位立即数加载PC。由累加器分支转移用累加器A或B的低16位立即数加载PC。块重复循环假如ST1中的块重复有效位BRAF=1,当PC+1等于块重复结束地址(REA)+1,将块重复起始地址(RSA)加载PC。子程序调用将PC+2压入堆栈,并用紧跟在调用指令后面的16位立即数加载PC。返回指令将栈顶弹出至PC,回到原先的程序处继续执行。从累加器调用子程序将PC+1压入椎栈,用累加器A或B的低16位加载PC。返回指令将栈顶弹出至PC,回到原先的程序处继续执行。硬件中断或软件中断将PC压入堆栈,用适当的中断向量地址加载PC。中断返回时,将栈顶弹出至PC,继续执行被中断了的子程序。将程序存储器地址加载到程序计数器的途径第24页/共62页1.分支转移操作通过分支转移指令改写PC,可以改变程序的流向。而子程序调用指令则通过将一个返回地址压入堆栈,执行返回时恢复原地址。可执行:分支转移循环控制子程序操作功能方法第25页/共62页条件分支转移无条件分支转移

B[D]用指令中所给出的地址加载PCBACC[D]用所指定的累加器的低16位作为地址加载PC。

带延迟不带延迟操作转移种类BC[D]如果指令中所规定的条件得到满足,就用指令中所给出的地址加载PC;BANZ[D]如果当前辅助寄存器不等于0,就用指令中所规定的地址加载PC。BCnew,AOV

BANZloop,*AR2-BnextBACCA第26页/共62页2.调用和返回转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至PC,使被中断了的原程序能继续执行。

当采用调用指令进行子程序或函数调用时,DSP中断当前运行的程序,转移到程序存储器的其它地址继续运行。功能方法无条件调用与返回有条件调用与返回带延迟不带延迟CALL[d]lopRETmain第27页/共62页3.条件指令中的条件判断第28页/共62页多重条件判断

第1组第2组A类B类A类B类C类EQOVTCCBIONEQNOVNTCNCNBIOLT

LEQ

GT

GEQ

第29页/共62页第1组

例如

可以从A类中选一个条件,同时可以从B类中选择一个条件。但是不能从同一类中选择两个条件。另外,两种条件测试的累加器必须是同一个。可以同时测试AGT和AOV,但不能同时测试AGT和BGT。第30页/共62页第2组

例如

可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件第31页/共62页特例如果条件分支转移出去的地方只有1~2字的程序段,则可以用一条单周期条件执行指令(XC)来代替分支转移指令:XCn,cond[,cond[,cond]]当n=1,且条件得到满足,就执行紧随此条件指令后的1个字指令。当n=2,且条件得到满足,就执行紧随此指令后的1个双字指令或者2条单字指令。当条件不满足,就依n的值执行1条或2条NOP指令。第32页/共62页例3-3

编写计算的主要程序部分。

.bssx,4;为X建立4个单元,;放置X1、X2、X3、X4

.bssy,1;为Y建立1个单元,放置Y

STM#x,AR1;将X1的地址传给AR1

STM#3,AR2;将循环次数3传给AR2

LD#0,A;对A清零loop:ADD*AR1+,A;对X1、X2、X3、X4循环累;加,结果放A中

BANZloop,*AR2-;检查循环是否应结束

STLA,y;将累加结果存入Y中第33页/共62页特点2特点14.单条指令的重复操作重复执行(RC)+1次。RC内容不能编程设置,只能由重复指令(RPT和RPTZ)中的操作数加载。操作数n的最大值为65535,最大重复执行次数为65535+1。

一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包括,但不包括)均不响应。功能重复执行下一条指令第34页/共62页重复过程当RPT指令执行时:①首先把循环的次数装入循环计数器(RC),②其循环次数n由一个16位单数据存储器操作数

Smem或一个8位或16位常数k或lk给定。这样,紧接着的下一条指令会循环执行n+1次。③循环,RC在执行减1操作时不能被访问。注意:该循环内不能套用循环。当RPTZ指令执行时:对目的累加器dst清0,循环执行下一条指令n+1次。

第35页/共62页例3-5利用单条指令的重复操作对数组x[5]={0,0,0,0,0}进行初始化。.bssx,5;为数组x分配5个存储单元STM#x,AR1;将x的首地址赋给AR1LD#0,A;对A清零RPT#4;设置重复执行下条指令5次STLA,*AR1+;对x[5]各单元清零或者.bssx,5STM#x,AR1RPTZA,#4;对A清零并设置重复执行下条指令5次STLA,*AR1+第36页/共62页特点5.块重复操作利用C54x内部的块重复计数器(BRC,加载值可为0~65535)、块重复起始地址寄存器(RSA)、块重复结束地址寄存器(REA)与程序块重复指令RPTB,可对紧随RPTB、由若干条指令构成的程序块进行重复操作。功能将重复操作的范围扩大到任意长度的循环回路注意1.RPT指令一旦执行,不会停止操作,即使有中断请求也不响应;2.RPTB指令可以响应中断;第37页/共62页例3-6

对数据组x[5]中的每个元素加1。

.bssx,5;为数组x分配5个存储单元begin:LD#1,16,B;将1左移16位放入B的;高端字的最低位

STM#4,BRC;4→BRC,(PC)+2→RSA

STM#x,AR4;将x的首地址赋给AR4

RPTBnext-1;将NEXT-1→REA

ADD*AR4,16,B,A;x地址的内容左移16位加;B的高端字,结果放A

STHA,*AR4+;将A的高端字存入x单元,;完成加1操作next:LD#0,B;对B清零

…;必需next-1作为结束地址第38页/共62页对寄存器的占用6.循环的嵌套执行RPT指令时占用RPTC寄存器(重复计数器);执行RPTB指令时要用到BRC、RSA和RSE寄存器。只有一套块重复寄存器,故块重复操作不能嵌套。由于RPT与RPTB两者用了不同的寄存器,因此RPT指令可以嵌套在RPTB指令中,实现循环的嵌套。执行BANZ指令只占用辅助寄存器ARx。不会与RPTRPTB指令相冲突。嵌套原则参与嵌套循环的寄存器不能重复使用

第39页/共62页图3-3一个三重循环嵌套结构第40页/共62页第三节流水线操作技术

流水线操作在执行多条指令时,将每条指令的预取指、取指、译码、寻址、读取操作数、执行等阶段,相差一个阶段地重叠地执行。流水线操作的优点一条k段流水能在k+(n-1)个周期内处理n条指令。其前k个周期用于完成第一条指令,其余n-1条指令的执行需要n-1个周期。而非流水处理器上执行n条指令则需要nk

个周期。当指令条数n较大时,可认为每个周期内执行的最大指令个数为k。第41页/共62页预取指P取指F译码D寻址A读取操作数R执行X流水线操作

在第一个机器周期用PC中的内容加载PAB

在第二个机器周期用读取到的指令字加载PB。

第三个周期用PB的内容加载指令寄存器IR,对IR内的指令进行译码,产生执行指令所需要的一系列控制信号。第42页/共62页预取指P取指F译码D寻址A读取操作数R执行X流水线操作

用数据1读地址加载DAB,或用数据2读地址加载CAB,修正辅助寄存器和堆栈指针。读数据1加载DB,或读数据2加载CB;用数据3写地址加载到EAB,以便在流水线的最后一级将数据送到数据存储空间。

执行指令,或用写数据加载EB。第43页/共62页空转浪费周期1.延迟分支转移的流水线图无延迟流水线分支转移的问题地址指令a1,a2

Bb1这是一个四周期、二字分支指令a3

i3这是任意的一周期、一字指令a4

i4这是任意的一周期、一字指令......b1j1例3-7第44页/共62页分支转移指令流水线图用分支转移指令的地址a1加载PAB。

取得双字分支转移指令取得双字分支转移指令第45页/共62页分支转移指令流水线图i3和i4指令取指。由于这两条指令处在分支转移指令的后面,虽然已经取指,但不能进入译码级,且最终被丢弃。分支转移指令进入译码级用新的值b1加载PAB第46页/共62页分支转移指令流水线图j1指令取指双字分支转移指令进入流水线的执行级

执行j1指令

双字分支转移指令进入流水线的执行级

由于i3和i4指令是不允许执行的,所以这两个周期均花在分支转移指令的执行上。第47页/共62页允许跟在延迟分支转移指令之后的两条单字或一条双字指令可以被执行

延迟分支转移注意1.延迟操作指令后面只有两个字的空隙,因此不能在此空隙中安排任何一类分支转移指令或重复指令;2.在CALLD或RETD的空隙中还不能安排PUSH和POP指令。3.延迟操作指令比它们的非延迟型指令要快,在调试延迟型指令时,直观性稍差一些,因此希望在大多数情况下还是采用非延迟型指令。第48页/共62页例3-8在完成R=(x+y)*z操作后转至next。可以分别编出如下两段程序:利用普通分支转移指令B利用延迟分支转移指令BD

LD@x,ALD@x,A

ADD@y,AADD@y,A

STLA,@sSTLA,@s

LD@s,TLD@s,T

MPY@z,ABDnext

STLA,@rMPY@z,A

BnextSTLA,@r(共8个字,10个T)(共8个字,8个T)在空闲的随后两周期中执行下两条指令

第49页/共62页XCn,cnd[,cnd[,cnd]

如果条件满足,则执行下面n(n=1或2)条指令,否则下面n条指令改为执行n条NOP指令。

2.条件执行指令的流水线图条件执行指令XC

有下列程序:地址指令a1i1a2i2a3i3a4XC2,conda5i5a6i6第50页/共62页条件执行指令流水线图XC指令的地址a4加载到PAB取XC指令的操作码求解XC指令所规定的条件。如果条件满足,则后面指令i5和i6进入译码级并执行;否则不对i5和i6指令译码。第51页/共62页1.XC是一条单字单周期指令,与条件跳转指令相比,具有快速选择其后1或2

条指令是否执行的优点;2.XC指令在执行前2个周期就已经求出条件,如果在这之后到执行前改变条件(如发生中断),将会造成无期望的结果。3.要尽力避免在XC指令执行前2个周期改变所规定的条件。4.并没有规定XC指令后的一条或两条指令必须是单周期指令。注意第52页/共62页CPU在单个周期内两次访问双寻址存储器3.双寻址存储器的流水线冲突流水线冲突原因不会产生流水线冲突的情况

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论