1 / 88

DSP 技术 及应用

DSP 技术 及应用. D igital S ignal P rocessor 数字信号处理器. 第三章 DSP 指令系统与特点. 第一节 寻址方式. 第二节 程序地址的生成. 第三节 流水线操作技术. 第四节 指令系统概述. ’C54x 的助记符指令是由操作码和操作数两部分组成。在进行汇编以前,操作码和操作数都是用助记符表示。. 例如: LD #0FFh , A ; 将立即数 0FF 传送至 A. 目的操作数. 操作码. 源操作数. 注 释. 第一节 TMS320C54x 的寻址方式.

kuniko
Download Presentation

DSP 技术 及应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DSP技术及应用 Digital Signal Processor 数字信号处理器

  2. 第三章 DSP指令系统与特点 第一节 寻址方式 第二节 程序地址的生成 第三节 流水线操作技术 第四节 指令系统概述

  3. ’C54x的助记符指令是由操作码和操作数两部分组成。在进行汇编以前,操作码和操作数都是用助记符表示。’C54x的助记符指令是由操作码和操作数两部分组成。在进行汇编以前,操作码和操作数都是用助记符表示。 例如: LD #0FFh, A ;将立即数0FF传送至A 目的操作数 操作码 源操作数 注释

  4. 第一节 TMS320C54x的寻址方式 Smem:16位单寻址操作数。 Xmem:16位双寻址操作数,从DB数据总线上读出。 Ymem:16位双寻址操作数,从CB数据总线上读出。 dmad:16位立即数,数据存储器地址。 pmad:16位立即数,程序存储器地址。 PA: 16位立即数,I/O口地址。 src: 源累加器(A或B)。 dst: 目的累加器(A或B)。 lk: 16位长立即数。

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

  6. ’C54x有7种基本的数据寻址方式: 立即寻址 绝对寻址 累加器寻址 直接寻址 间接寻址 存储器映像 寄存器寻址 堆栈寻址 :由指令提供一个操作数 :由指令提供一个操作数地址 :以累加器的内容为地址访问程序空间某单元 :寻址地址为DP或SP的值加上指令提供的偏移量 :利用辅助寄存器访问存储器 :用来改变映像寄存器,但不影响DP或SP的值 :用来管理系统堆栈中的操作

  7. C54x寻址存储器有两种基本的数据形式:16位和32位数。C54x寻址存储器有两种基本的数据形式:16位和32位数。 大多数指令能够寻址16位数,只有双精度和长字指令才能寻址32位数。 在32位数寻址时,先处理高有效字,再处理低有效字。 如果寻址的第一个字处于偶地址,那么第二个字就处于下一个(较高的)地址;如果第一个字处在奇地址,那么第二个字就处在前一个(较低的)地址。

  8. 1.立即数寻址 指令中包含有执行指令所需要的操作数。 立即数分为3、5、8或9位的短立即数和16位的长立即数两种。 短立即数可包含在单字或双字指令中,长立即数在双字指令中。 特 点  在操作数前面需要加#字号来说明该操作数为立即数。否则会把该操作数误认为是一个地址,从而把立即数寻址变成绝对地址寻址。 注 意 LD #93h,A LD 93h,A 举例

  9. LD #93h,A; • 把立即数93h送入累加器A • LD 93h,A • 把地址为93h单元中的数装到累加器A,而不是把93h送入累加器A

  10. 2.绝对地址寻址 在指令中包含有所要寻址的存储单元的16位地址。这个16位的地址可以用其所在单元的地址标号或者16位符号常数来表示。 特 点 方法 (1)数据存储器地址(dmad)寻址 MVKD SAMPLE,*AR3 用一个符号或一个数来确定数据空间的一个地址。 举例:把SAMPLE标注的数据空间的地址里的数复制到由AR3所指定的数据存储单元中去;

  11. 2.绝对地址寻址 (2)程序存储器地址(pmad)寻址 方法 用一个符号或一个具体的数来确定程序存储器中的一个地址 MVPD TABLE,*AR4 举例:把TABLE标注的程序存储器单元地址中的一个字复制到由AR4所指定的数据存储单元中去;

  12. 2.绝对地址寻址 (3)PA寻址 端口(PA) 方法 举例:把一个数从端口地址为FIFO的I/O口中的一个字复制到AR5指定的数据存储器单元; 用一个符号或一个常数来确定外部I/O口地址 PORTR FIFO,*AR5

  13. 允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对ARx进行初始化允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对ARx进行初始化 2.绝对地址寻址 (4)*(lk)寻址 方法 特点 用一个符号或一个常数来确定数据存储器中的一个地址 举例:把地址为BUFFER的数据单元中的数装到累加器A LD *(BUFFER),A

  14. 3.累加器寻址 方法 特点 举例 用累加器中的数值作为地址来读写程序存储器。 可用来完成程序存储器单元的数据与数据存储器单元的数据进行交换 READA Smem WRITA Smem

  15. READA Smem • 把累加器A中的数作为地址,从程序存储器单元中读入一个字的数据,并传送到由单数据存储器(Smem)操作数所指定的数据存储器单元中。 • WRITA Smem • 把单数据存储器(Smem)操作数所指定的数据存储器单元中的一个字,传送到累加器A指定的程序存储器中。 • (这两条指令在重复方式下执行,能够对累加器自动增量)

  16. 4.直接寻址 方法 特点 举例 用一个符号或一个常数来确定7位偏移值,与DP或SP共同形成16位的数据存储器实际地址。 LD #x,DP LD @u,A ADD @v,A =========== SSBX CPL LD @X1,A ADD @Y2,A 可以在不改变DP或SP的情况下,随机地寻址128个存储单元中的任何一个单元。

  17. 所要寻址的数据存储器16位地址是由基地址和偏移地址构成。所要寻址的数据存储器16位地址是由基地址和偏移地址构成。 ①数据页指针DP(9位); ② 堆栈指针SP。 基地址:

  18. 9位数据页指针DP dmad 地址形成过程: 当CPL=0时, 16位数据 存储器地址 高9位 低7位

  19. 16位SP+dmad 16位堆栈指针SP 堆栈指针SP dmad 地址形成过程: 当CPL=1时, SP+dmad 16位数据 存储器地址 高9位 低7位

  20. LD #x,DP;把立即数x送入状态寄存器ST0的DP位 • LD @u,A ;把x页u存储器单元中的内容装入到累加器A中去 • ADD @v,A ;把x页v存储器单元中的内容与累加器A中的内容相加 • =========== • SSBX CPL;对状态寄存器ST1的CPL置位,CPL=1 • LD @X1,A ;SP指针加X1所形成的地址中的内容送累加器A • ADD @Y2,A;SP指针加Y2所形成的地址中的内容与累加器A的值相加

  21. CPL=0 7位dma域与9bit的DP相结合形成16位的数据存储器地址。 CPL=1 7位dma域加上(正偏移)SP相结合形成16位的数据存储器地址。 DP值是从0~511(29-1),以DP为基准的直接寻址把存储器分成512页,7位的dma范围从0~127,每页有128个可访问的单元。

  22. 5.间接寻址 方法 特点 能在一个指令中访问两个数据存储器单元 (AR0~AR7)→ ARAU0/ARAU1 → 16位无符号算术运算→ 寻址范围为64K 1.两个独立的存储器单元读数据 2.读一个、写另一个存储器单元 3.读写两个连续的存储器单元

  23. 5.间接寻址 LD *AR1,B (1)单操作数寻址 定义间接寻址的类型 定义寻址所使用的辅助寄存器 ST1 CMPT=0 标准方式 ARF确定辅助寄存器,ST0中ARP=0 CMPT=1 兼容方式 如ARF=0,用ARP选择辅助寄存器,    否则,用ARF来确定辅助寄存器。 ARF的值装入ARP。

  24. MOD域 操作码语法 功 能 说 明 单数据存储器操作数间接寻址类型 0000 *ARx addr=ARx ARx包含了数据存储器地址 0001 *ARx- addr=ARx ARx=ARx-1 访问后,ARx中的地址减1② 0010 *ARx+ addr=ARx ARx=ARx+1 访问后,ARx中的地址加1① 0011 *+ARx addr=ARx+1 ARx=ARx+1 在寻址前,ARx中的地址加1,然后再寻址①②③ 0100 *ARx-0B addr=ARx ARx=B(ARx-AR0) 访问后,从ARx中以位倒序进位的方式减去AR0 0101 *ARx-0 addr=ARx ARx=ARx-AR0 访问后,从ARx中减去AR0 0110 *ARx+0 addr=ARx ARx=ARx+AR0 访问后,把AR0加到ARx中去 0111 *ARx+0B addr=ARx ARx=B(ARx+AR0) 访问后,把AR0以位倒序进位的方式加到ARx中 1000 *ARx-% addr=ARx ARx=circ(ARx-1) 访问后,ARx中的地址以循环寻址的方式减1① 1001 *ARx-0% addr=ARx ARx=circ(ARx-AR0) 访问后,从ARx中以循环寻址的方式减去AR0 1010 *ARx+% addr=ARx ARx=circ(ARx+1) 访问后,ARx中的地址以循环寻址的方式加1① 1011 *ARx+0% addr=ARx ARx=circ(ARx+AR0) 访问后,把AR0以循环寻址的方式加到ARx中 1100 *ARx(lk) addr=ARx+lk ARx=ARx ARx和16位的长偏移(lk)的和用来作为数据存储器地址。ARx本身不被修改 1101 *+ARx(lk) addr=ARx+lk ARx=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)用来作为数据存储器的绝对地址。(也属绝对寻址)③

  25. 单操作数间接寻址的硬件框图

  26. 1) 循环寻址 循环缓冲区的长度值存放在循环缓冲区长度寄存器BK中,BK中的数值由指令设定。长度为R的循环缓冲器必须从一个N位地址的边界开始,即循环缓冲器基地址的最低N位必须为0。N是满足2N>R的最小整数。R的值必须装入BK。 例如,含有31个字的循环缓冲器必须从最低5位为0的地址开始,即xxxx xxxx xxx0 00002,N=5,2N=25>R=31,且31必须装入BK。如: STM #1F,BK 如果R=32,则最小的N值为6,循环缓冲区的起始地址必须有6个最低有效位为0,即×××× ×××× ××00 00002。

  27. 2) 位倒序寻址 在这种寻址方式中,用AR0存放FFT点数的一半整数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输出整结果

  28. AR1修改循环值 存储单 元地址 整序前FFT 变换结果 位倒序 AR1更新的地址值AR0=0000 10002 整序后PA输出的FFT变换结果 0 0000 X(0) 0000 0110 0000 X(0) 1 0001 X(8) 1000 0110 1000 X(1) 2 0010 X(4) 0100 0110 0100 X(2) 3 0011 X(12) 1100 0110 1100 X(3) 4 0100 X(2) 0010 0110 0010 X(4) 5 0101 X(10) 1010 0110 1010 X(5) 6 0110 X(6) 0110 0110 0110 X(6) 7 0111 X(14) 1110 0110 1110 X(7) 8 1000 X(1) 0001 0110 0001 X(8) 9 1001 X(9) 1001 0110 1001 X(9) 10 1010 X(5) 0101 0110 0101 X(10) 11 1011 X(13) 1101 0110 1101 X(11) 12 1100 X(3) 0011 0110 0011 X(12) 13 1101 X(11) 1011 0110 1011 X(13) 14 1110 X(7) 0111 0110 0111 X(14) 15 1111 X(15) 1111 0110 1111 X(15) 位倒序对FFT变换结果的序号调整

  29. 利用位倒序对FFT变换结果的序号调 整,调整过程中,通过对位倒序的地址计 算,AR1从不连续的地址取得FFT变换结 果的值,并在输出口得到连续的顺序排号 的信号值。

  30. 5.间接寻址 (2)双操作数寻址方式 MPY *AR2,*AR3,A 定义用于访问Xmem操作数的间接寻址方式的类型 定义用于访问Ymem操作数的间接寻址方式的类型 确定包含Xmem地址的辅助寄存器 确定包含Ymem地址的辅助寄存器

  31. Xmod或Ymod 操作码语法 功 能 说 明 00 *ARx addr=ARx ARx是数据存储器地址 01 *ARx- addr=ARx ARx=ARx-1 访问后,ARx中的地址减1 10 *ARx+ addr=ARx ARx=ARx+1 访问后,ARx中的地址加1 11 *ARx+0% addr=ARx ARx=circ(ARx+AR0) 访问后,AR0以循环寻址的方式加到ARx中 Xar或Yar 辅助寄存器 00 AR2 01 AR3 10 AR4 11 AR5 辅助 寄存器 选择 双数据存储器操作数寻址的类型

  32. 6.存储器映象寄存器寻址 功能 方法 举例 特点 高9位数据存储器地址被置0,利用指令中的低7位地址访问MMR。 用来修改存储器映象寄存器 0页寻址。 不影响当前DP或SP值 。用于直接寻址和间接寻 址 LDM PRD,A

  33. 例如:用AR1来指向一个存储器映像寄存器。 若AR1的值为FF25H,其低7位是25H。 而地址为25H的单元是用作定时器周期计数器 PRD,故AR1指向了定时器周期寄存器。 使用存储器映像寄存器寻址的指令共有8条: LDM MMR,dst;将MMR加载到累加器 MVDM damd,MMR;数据存储器向MMR传送数据 MVMM MMRx,MMRy;MMRx向MMRy传送数据 POPM MMR;将数据从栈顶弹出至MMR PSHM MMR;将MMR压入堆栈 STLM src,MMR;累加器低位存到MMR STM #lk,MMR;长立即数存到MMR

  34. PSHD *AR2 POPD *AR3 PSHM MMR POPM MMR 7.堆栈寻址 特点 功能 用来在中断和子程序调用时自动保存程序计数器(PC)中的数值,也能用来保护现场或传送参数 从高地址向低地址方向生长,SP)来管理堆栈,SP始终指向堆栈中所存放的最后一个数据,即SP指针始终指向栈顶。在压入操作时,先减小SP的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加SP的值。

  35. 堆栈:当发生中断或子程序调用时,用来自动保存PC内容以及保护现场或传送参数。堆栈:当发生中断或子程序调用时,用来自动保存PC内容以及保护现场或传送参数。 堆栈寻址 ’C54x的堆栈是向低地址生长,并由16位堆栈指针SP管理。SP总是指向栈顶。 堆栈寻址:利用SP指针,按照先进后出的原则进行寻址。 当进栈操作时,SP先减小,然后数据进入堆栈; 当出栈操作时,数据先出栈,然后SP增加。

  36. 采用堆栈寻址的指令: PSHD Smem ;将Smem中的数据压入堆栈 PSHM MMR ;将MMR中的数据压入堆栈 POPD Smem ;将数据从栈顶弹至Smem中 POPM MMR ;将数据从栈顶弹至MMR中

  37. 第二节 程序地址的生成 程序计数器(PC) 重复计数器(RC) 块重复计数器(BRC) 块重复起始地址寄存器(RSA) 块重复结束地址寄存器(REA) 程序地址生成器(PAGEN) 构成 核心 地址内容为: 1.即将取指的某条指令 2.某个16位立即操作数 3.系数表在程序存储器中的地址 16位程序计数器(PC)内中保存某个内部或外部程序存储器的地址。

  38. 操作 加载到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,继续执行被中断了的子程序。 将程序存储器地址加载到程序计数器的途径

  39. 1.分支转移操作 功能 方法 通过分支转移指令改写PC,可以改变程序的流向。而子程序调用指令则通过将一个返回地址压入堆栈,执行返回时恢复原地址。 可执行: 1.分支转移 2.循环控制 3.子程序操作

  40. BC[D]如果指令中所规定的条件得到满足,就用指令中所给出的地址加载PC;BC[D]如果指令中所规定的条件得到满足,就用指令中所给出的地址加载PC; BANZ[D]如果当前辅助寄存器不等于0,就用指令中所规定的地址加载PC。 转移种类 B[D]用指令中所给出的地址加载PC BACC[D]用所指定的累加器的低16位作为地址加载PC。 条件分支转移 无条件分支转移 带延迟 不带延迟操作 B next BACC A BC new,AOV BANZ loop,*AR2-

  41. 由于DSP采用多级流水线操作,当分支转移指令到达流水线的执行阶段时,其后面的两个指令字已经被取指。由于DSP采用多级流水线操作,当分支转移指令到达流水线的执行阶段时,其后面的两个指令字已经被取指。 • 对这两个指令: • 如果是在带延迟的分支转移后面,这一条双字指令或两条单字指令被执行后再进行分支转移; • 如果是在不带延迟的分支转移后面,就将已被读入的一条双字指令或两条单字指令从流水线中清除,不予执行,立即进行分支转移。

  42. CALL[d] lop CALA[d] lop RET main RETE main RETF main 2.调用和返回 无条件调用与返回 有条件调用与返回 带延迟 不带延迟 功能 方法 当采用调用指令进行子程序或函数调用时,DSP中断当前运行的程序,转移到程序存储器的其它地址继续运行。 转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至PC,使被中断了的原程序能继续执行。

  43. 无条件调用与返回指令: CALL[d] lop:将返回地址压入堆栈,用指令所规定的地 址加载PC; CALA[d] A:将返回地址压入堆栈,用指定累加器的低 16位地址加载PC; RET main:用栈顶的返回地址加载PC; RETE main:用栈顶的返回地址加载PC,并开放中断; RETF main:用快速返回寄存器RTN中的返回地址加载 PC,并开放中断; 条件调用与返回指令: CC[D]:如果指令中所规定的条件得到满足,则先将返回 地址压入堆栈,然后用所指定的地址加载PC; RC[D]:如果指令中所规定的条件得到满足,则将堆栈顶 部的返回地址加载PC;

  44. 3.条件指令中的条件判断

  45. 第1组 第2组 A 类 B 类 A 类 B 类 C 类 EQ OV TC C BIO NEQ NOV NTC NC NBIO LT LEQ GT GEQ 多重条件判断 相与关系 BC pmad,cond[,cond[,cond]] 相或关系 BC pmad,cond BC pmad,cond

  46. 可以从A类中选一个条件,同时可以从B类中选择一个条件。但是不能从同一类中选择两个条件。可以从A类中选一个条件,同时可以从B类中选择一个条件。但是不能从同一类中选择两个条件。 另外,两种条件测试的累加器必须是同一个。 第1组 可以同时测试AGT和AOV,但不能同时测试AGT和BGT。 例如

  47. 可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件 第2组 可以同时测试TC、C和BIO,但不能同时测试NTC、C和NC 例如

  48. 如果条件分支转移出去的地方只有1~2字的程序段,则可以用一条单周期条件执行指令(XC)来代替分支转移指令:如果条件分支转移出去的地方只有1~2字的程序段,则可以用一条单周期条件执行指令(XC)来代替分支转移指令: XC n,cond[,cond[,cond]] 当n=1,且条件得到满足,就执行紧随此     条件指令后的1个字指令。 当n=2,且条件得到满足,就执行紧随此     指令后的1个双字指令或者2条单     字指令。 当条件不满足,就依n的值执行1     条或2条NOP指令。 特 例

More Related