版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DSP技术及应用和方法Digital Signal Processor数字信号处理器1第三章 DSP指令系统与特点 第一节 寻址方式第二节 程序地址的生成第三节 流水线操作技术(了解)第四节 指令系统概述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的寻址方式 1立即数寻址2绝对地
2、址寻址3累加器寻址4直接寻址5间接寻址6存储器映象寄存器寻址7堆栈寻址寻址分类 1立即数寻址 在操作数前面需要加字号来说明该操作数为立即数。否则会把该操作数误认为是一个地址,从而把立即数寻址变成绝对地址寻址。 特点指令中包含有执行指令所需要的操作数。立即数分为3、5、8或9位的短立即数和16位的长立即数两种。短立即数可包含在单字或双字指令中,长立即数在双字指令中。 注意LD #93h,A LD 93h,A 举例 2绝对地址寻址特点在指令中包含有所要寻址的存储单元的16位地址。这个16位的地址可以用其所在单元的地址标号或者16位符号常数来表示。 (1)数据存储器地址(damd)寻址 用一个符号或
3、一个数来确定数据空间的一个地址。 方法MVKD SAMPLE,*AR3 举例用一个符号或一个具体的数来确定程序存储器中的一个地址 (2)程序存储器地址(pmad)寻址 方法MVPD TABLE,*AR4 举例用一个符号或一个常数来确定外部I/O口地址 (3)PA寻址 端口(PA) 方法PORTR FIFO,*AR5 举例用一个符号或一个常数来确定数据存储器中的一个地址 (4)*(lk)寻址 方法LD *(BUFFER),A 举例特点允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对ARx进行初始化 用累加器中的数值作为地址来读写程序存储器。 方法RE
4、ADA Smem WRITA Smem 举例特点可用来完成程序存储器单元的数据与数据存储器单元的数据进行交换 3累加器寻址可以在不改变DP或SP的情况下,随机地寻址128个存储单元中的任何一个单元。 用一个符号或一个常数来确定7位偏移值,与DP或SP共同形成16位的数据存储器实际地址。4直接寻址 方法LD #x,DPLD u,A ADD v,A =SSBX CPL LD X1,A ADD Y2,A 举例特点CPL=0 7位dma域与9bit的DP相结合形成16位的数据存储器地址。CPL=1 7位dma域加上(正偏移)SP的值形成16位的数据存储器地址。 DP值是从0511(29-1),以DP为
5、基准的直接寻址把存储器分成512页,7位的dma范围从0127,每页有128个可访问的单元。 5间接寻址 方法特点(AR0AR7)ARAU0/ARAU1 16位无符号算术运算寻址范围为64K 能在一个指令中访问两个数据存储器单元两个独立的存储器单元读数据读一个、写另一个存储器单元读写两个连续的存储器单元 5间接寻址 (1)单操作数寻址 定义间接寻址的类型定义寻址所使用的辅助寄存器 ST1CMPT=0 标准方式ARF确定辅助寄存器,ST0中ARP0 CMPT=1 兼容方式如ARF=0,用ARP选择辅助寄存器,否则,用ARF来确定辅助寄存器。ARF的值装入ARP。LD *AR1,B单操作数间接寻址
6、的硬件框图MOD域操作码语法功 能说 明0000*ARxaddr=ARxARx包含了数据存储器地址0001*ARx-addr=ARxARx=ARx-1访问后,ARx中的地址减10010*ARx+addr=ARxARx=ARx+1访问后,ARx中的地址加10011*+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+
7、AR0访问后,把AR0加到ARx中去0111*ARx+0Baddr=ARxARx=B(ARx+AR0)访问后,把AR0以位倒序进位的方式加到ARx中1000*ARx-%addr=ARxARx=circ(ARx-1)访问后,ARx中的地址以循环寻址的方式减11001*ARx-0%addr=ARxARx=circ(ARx-AR0)访问后,从ARx中以循环寻址的方式减去AR01010*ARx+%addr=ARxARx=circ(ARx+1)访问后,ARx中的地址以循环寻址的方式加11011*ARx+0%addr=ARxARx=circ(ARx+AR0)访问后,把AR0以循环寻址的方式加到ARx中11
8、00*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)用来作为数据存储器的绝对地址。
9、(也属绝对寻址)单数据存储器操作数间接寻址类型 1) 循环寻址 循环缓冲区的长度值存放在循环缓冲区长度寄存器BK中,BK中的数值由指令设定。长度为R的循环缓冲器必须从一个N位地址的边界开始,即循环缓冲器基地址的最低N位必须为0。N是满足2NR的最小整数。R的值必须装入BK。例如,含有31个字的循环缓冲器必须从最低5位为0的地址开始,即xxxx xxxx xxx0 00002,N=5,2N=25R=31,且31必须装入BK。如:STM #1k,BK如果R=32,则最小的N值为6,循环缓冲区的起始地址必须有6个最低有效位为0,即 00 00002。2) 位倒序寻址 在这种寻址方式中,用AR0存放F
10、FT点数的一半整数N,用另一辅助寄存器指向一数据存放的物理单元。当使用位倒序寻址把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是从右向左进位。 例如: 0110 1000 + 0000 1000 0110 0100以8位辅助寄存器为例,AR1表示了在存储器中数据的基地址(0110 0000)2,AR0的值为(0000 1000)2。利用以下两条语句可以向外设口(口地址为PA)输出整序后的FFT变换结果:RPT #15 重复执行下条指令15+1次PORTW *AR1+0B,PA 向外设口PA输出整结果AR1修改循环值存储单元地址整序前FFT 变换结果位倒序AR1更新的
11、地址值AR0=0000 10002整序后PA输出的FFT变换结果00000X(0)00000110 0000X(0)10001X(8)10000110 1000X(1)20010X(4)01000110 0100X(2)30011X(12)11000110 1100X(3)40100X(2)00100110 0010X(4)50101X(10)10100110 1010X(5)60110X(6)01100110 0110X(6)70111X(14)11100110 1110X(7)81000X(1)00010110 0001X(8)91001X(9)10010110 1001X(9)10101
12、0X(5)01010110 0101X(10)111011X(13)11010110 1101X(11)121100X(3)00110110 0011X(12)131101X(11)10110110 1011X(13)141110X(7)01110110 0111X(14)151111X(15)11110110 1111X(15)位倒序对FFT变换结果的序号调整 5间接寻址 (2)双操作数寻址方式 确定包含Xmem地址的辅助寄存器 确定包含Ymem地址的辅助寄存器定义用于访问Ymem操作数的间接寻址方式的类型 定义用于访问Xmem操作数的间接寻址方式的类型 MPY *AR2,*AR3,AXar
13、或Yar 辅助寄存器00 AR201 AR310 AR411 AR5辅助寄存器选择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中双数据存储器操作数寻址的类型0页寻址。不影响当前DP或SP值 。用于直接寻址和间接寻址用来修改存储器映象寄存器 6存储器映象寄存器寻址功能LDM PRD,A举例特点方法高
14、9位数据存储器地址被置0,利用指令中的低位地址访问MMR。7堆栈寻址 从高地址向低地址方向生长,SP)来管理堆栈,SP始终指向堆栈中所存放的最后一个数据,即SP指针始终指向栈顶。在压入操作时,先减小SP的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加SP的值。用来在中断和子程序调用时自动保存程序计数器(PC)中的数值,也能用来保护现场或传送参数 功能特点PSHD *AR2 POPD *AR3第二节 程序地址的生成程序地址生成器(PAGEN)构成程序计数器(PC)重复计数器(RC)块重复计数器(BRC)块重复起始地址寄存器(RSA)块重复结束地址寄存器(REA)核心16位程序计数器
15、(PC)内中保存某个内部或外部程序存储器的地址。地址内容为:即将取指的某条指令;某个16位立即操作数;系数表。在程序存储器中的地址操作加载到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压
16、入椎栈,用累加器A或B的低16位加载PC。返回指令将栈顶弹出至PC,回到原先的程序处继续执行。硬件中断或软件中断将PC压入堆栈,用适当的中断向量地址加载PC。中断返回时,将栈顶弹出至PC,继续执行被中断了的子程序。将程序存储器地址加载到程序计数器的途径1分支转移操作 通过分支转移指令改写PC,可以改变程序的流向。而子程序调用指令则通过将一个返回地址压入堆栈,执行返回时恢复原地址。可执行:分支转移循环控制子程序操作 功能方法条件分支转移无条件分支转移 BD用指令中所给出的地址加载PCBACCD用所指定的累加器的低16位作为地址加载PC。 带延迟不带延迟操作转移种类BCD如果指令中所规定的条件得到
17、满足,就用指令中所给出的地址加载PC;BANZD如果当前辅助寄存器不等于0,就用指令中所规定的地址加载PC。 BC new,AOV BANZ loop,*AR2-B nextBACC A2调用和返回 转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至PC,使被中断了的原程序能继续执行。 当采用调用指令进行子程序或函数调用时,DSP中断当前运行的程序,转移到程序存储器的其它地址继续运行。功能方法无条件调用与返回有条件调用与返回带延迟不带延迟CALLd lopRET main3条件指令中的条件判断多重条件判断 第1组第2组A 类B 类A 类B 类C 类EQOVTCCBIONEQ
18、NOVNTCNCNBIOLTLEQGTGEQ第1组 例如 可以从A类中选一个条件,同时可以从B类中选择一个条件。但是不能从同一类中选择两个条件。另外,两种条件测试的累加器必须是同一个。可以同时测试AGT和AOV,但不能同时测试AGT和BGT。 第2组 例如 可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件 可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件 特例如果条件分支转移出去的地方只有12字的程序段,则可以用一条单周期条件执行指令(XC)来代替分支转移指令:XC n,cond,cond,cond当n=1,且条件得到满足,就执行紧随此条件指令后的个字指令。
19、当n=2,且条件得到满足,就执行紧随此指令后的1个双字指令或者2条单字指令。当条件不满足,就依n的值执行1条或2条NOP指令。例3-3 编写计算 的主要程序部分。 .bss x,4 ;为X建立4个单元, ;放置X1、X2、X3、X4 .bss y,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中 BANZ loop,*AR2- ;检查循环是否应结束 STL A,y ;将累加结果存入Y中特点2特点14单条指令
20、的重复操作 重复执行(RC)+1次。RC内容不能编程设置,只能由重复指令(RPT和RPTZ)中的操作数加载。操作数n的最大值为65 535,最大重复执行次数为65 535+1。 一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包括 ,但不包括 )均不响应。 功能重复执行下一条指令 重复过程当RPT指令执行时:首先把循环的次数装入循环计数器(RC),其循环次数n由一个16位单数据存储器操作数 Smem或一个8位或16位常数k或lk给定。这样, 紧接着的下一条指令会循环执行n+1次。循环,RC在执行减1操作时不能被访问。注意:该循环内不能套用循环。 当RPTZ指令执行时:对目的累加器
21、dst清0, 循环执行下一条指令n+1次。 例3-5 利用单条指令的重复操作对数组x5=0,0,0,0,0进行初始化。.bss x,5 ;为数组x分配5个存储单元STM #x,AR1 ;将x的首地址赋给AR1LD #0,A ;对A清零RPT #4 ;设置重复执行下条指令5次STL A,*AR1+;对x5各单元清零或者.bss x,5STM #x,AR1RPTZ A,#4;对A清零并设置重复执行下条指令5次STL A,*AR1+特点5块重复操作 利用C54x内部的块重复计数器(BRC,加载值可为065 535)、块重复起始地址寄存器(RSA)、块重复结束地址寄存器(REA)与程序块重复指令RPT
22、B,可对紧随RPTB、由若干条指令构成的程序块进行重复操作。功能将重复操作的范围扩大到任意长度的循环回路 注意指令一旦执行,不会停止操作,即使有中断请求也不响应;指令可以响应中断;例3-6 对数据组x5中的每个元素加1。.bss x,5 ;为数组x分配5个存储单元begin: LD #1,16,B ;将1左移16位放入B的 ;高端字的最低位STM #4,BRC ; 4BRC,(PC)+2 RSA STM #x,AR4;将x的首地址赋给AR4 RPTB next-1;将NEXT-1 REA ADD *AR4,16,B,A ;x地址的内容左移16位加 ; B的高端字,结果放ASTH A,*AR4+
23、 ;将A的高端字存入x单元, ;完成加1操作next: LD #0,B ;对B清零 ;必需next-1作为结束地址对寄存器的占用6循环的嵌套 执行RPT指令时占用RPTC寄存器(重复计数器);执行RPTB指令时要用到BRC、RSA和RSE寄存器。只有一套块重复寄存器,故块重复操作不能嵌套。 由于RPT与RPTB两者用了不同的寄存器,因此RPT指令可以嵌套在RPTB指令中,实现循环的嵌套。执行BANZ指令只占用辅助寄存器ARx。不会与RPT RPTB指令相冲突。嵌套原则参与嵌套循环的寄存器不能重复使用 图3-3 一个三重循环嵌套结构第三节 流水线操作技术 流水线操作在执行多条指令时,将每条指令的
24、预取指、取指、译码、寻址、读取操作数、执行等阶段,相差一个阶段地重叠地执行。流水线操作的优点一条k段流水能在k+(n-1)个周期内处理n条指令。其前k个周期用于完成第一条指令,其余n-1条指令的执行需要n-1个周期。而非流水处理器上执行n条指令则需要nk 个周期。当指令条数n较大时,可认为每个周期内执行的最大指令个数为k。 预取指P取指F译码D寻址A读取操作数R执行X流水线操作 在第一个机器周期用PC中的内容加载PAB 在第二个机器周期用读取到的指令字加载PB。 第三个周期用PB的内容加载指令寄存器IR,对IR内的指令进行译码,产生执行指令所需要的一系列控制信号。 预取指P取指F译码D寻址A读
25、取操作数R执行X流水线操作 用数据1读地址加载DAB,或用数据读地址加载CAB,修正辅助寄存器和堆栈指针。读数据1加载DB,或读数据2加载CB;用数据3写地址加载到EAB,以便在流水线的最后一级将数据送到数据存储空间。 执行指令,或用写数据加载EB。 空转浪费周期1延迟分支转移的流水线图 无延迟流水线分支转移的问题地址 指令a1,a2 B b1 这是一个四周期、二字分支指令a3 i3 这是任意的一周期、一字指令a4 i4 这是任意的一周期、一字指令. .b1 j1例3-7分支转移指令流水线图用分支转移指令的地址a1加载PAB。 取得双字分支转移指令取得双字分支转移指令分支转移指令流水线图i3和
26、i4指令取指。由于这两条指令处在分支转移指令的后面,虽然已经取指,但不能进入译码级,且最终被丢弃。 分支转移指令进入译码级用新的值b1加载PAB分支转移指令流水线图j1指令取指 双字分支转移指令进入流水线的执行级 执行j1指令 双字分支转移指令进入流水线的执行级 由于i3和i4指令是不允许执行的,所以这两个周期均花在分支转移指令的执行上。允许跟在延迟分支转移指令之后的两条单字或一条双字指令可以被执行 延迟分支转移注意1.延迟操作指令后面只有两个字的空 隙,因此不能在此空隙中安排任何 一类分支转移指令或重复指令;2.在CALLD或RETD的空隙中还不能安 排PUSH和POP指令。3.延迟操作指令
27、比它们的非延迟型 指令要快,在调试延迟型指令时, 直观性稍差一些,因此希望在大多 数情况下还是采用非延迟型指令。 例3-8 在完成R=(x+y)*z操作后转至next。可以分别编出如下两段程序:利用普通分支转移指令B 利用延迟分支转移指令BDLD x,A LD x,AADD y,A ADD y,ASTL A, s STL A, sLD s,T LD s,TMPY z,A BD next STL A, r MPY z,A B next STL A, r(共8个字,10个T) (共8个字,8个T)在空闲的随后两周期中执行下两条指令 XC n,cnd,cnd,cnd如果条件满足,则执行下面n(n=1
28、或2)条指令,否则下面n条指令改为执行n条NOP指令。 2条件执行指令的流水线图 条件执行指令XC 有下列程序:地址 指令a1 i1a2 i2a3 i3a4 XC 2, conda5 i5a6 i6 条件执行指令流水线图XC指令的地址a4加载到PAB 取XC指令的操作码 求解XC指令所规定的条件。如果条件满足,则后面指令i5和i6进入译码级并执行;否则不对i5和i6指令译码。1. XC是一条单字单周期指令,与条件跳 转指令相比,具有快速选择其后1或2 条指令是否执行的优点 ;2. XC指令在执行前2个周期就已经求出 条件,如果在这之后到执行前改变条 件(如发生中断),将会造成无期望 的结果 。3. 要尽力避免在XC指令执行前2个周期 改变所规定的条件 。 4. 并没有规定XC指令后的一条或两条指 令必须是单周期指令。注意CPU在单个周期内两次访问双寻址存储器3双寻址存储器的流水线冲突 流水线冲突原因不会产生流水线冲突的情况(1)在单周期内允许同时访问DARAM的不同块。(2)当流水线中的一条指令访问某一存储器块时, 允许流水线中处于同一级的另一条指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年医疗信息化系统建设合同
- 2024年SET协议智能交通系统集成与实施合同
- 2024年商标许可合同:知名品牌商标的使用许可
- 2024全新艺人经纪合同(艺人管理、演出、代言详述)
- 2(2024版)国际金融衍生品交易平台建设合同
- 2024年专利许可使用合同标的详细约定
- 2024年企业人力资源外包管理合同
- 健身中心趣味运动会活动方案
- 2024年债权转让合同违约金责任分析
- 紧急医疗技术应用管理制度
- 课堂教学观察量表—教师课堂教学行为观察量表
- 子儿吐吐(绘本) (2)
- 王浦劬《政治学基础》笔记详细版
- 信息资产管理制度管理办法
- 家长学校课程安排
- 厦门宏发继电器基础知识(课堂PPT)
- 储罐大修施工方案
- 2022年住宅室内装饰装修管理办法全文
- 经纬度数转换工具
- 监理质量管理体系
- 消弧线圈基础施工方案
评论
0/150
提交评论