112
第第第 DSP 第第第 第第第 第第第第第第 第第第 第第第第第第第第第第第第 第第第 第第第 第第第 第第第 第第

第三章 DSP 指令系统与特点

  • Upload
    edana

  • View
    87

  • Download
    0

Embed Size (px)

DESCRIPTION

第三章 DSP 指令系统与特点 . 第一节 数据寻址方式. 第二节 程序存储器地址的生成方式. 第三节 流水线. 第四节 指令系统概述. 第一节 TMS320C54x 的数据寻址方式. Smem : 16 位单寻址操作数。 Xmem : 16 位双寻址操作数,从 DB 数据总线上读出。 Ymem : 16 位双寻址操作数,从 CB 数据总线上读出。 dmad : 16 位立即数,数据存储器地址。 pmad : 16 位立即数,程序存储器地址。 PA : 16 位立即数, I/O 口地址。 src : 源累加器( A 或 B )。 - PowerPoint PPT Presentation

Citation preview

Page 1: 第三章   DSP 指令系统与特点

第三章 DSP 指令系统与特点 第一节 数据寻址方式第二节 程序存储器地址的生成方式第三节 流水线第四节 指令系统概述

Page 2: 第三章   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的数据寻址方式

Page 3: 第三章   DSP 指令系统与特点

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

寻址分类

Page 4: 第三章   DSP 指令系统与特点

1 .立即数寻址

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

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

注意LD #93h , A LD 93h ,A

举例

Page 5: 第三章   DSP 指令系统与特点

2 .绝对地址寻址

特点在指令中包含有所要寻址的存储单元的 16位地址。这个 16位的地址可以用其所在单元的地址标号或者 16位符号常数来表示。 ( 1)数据存储器地址( damd)寻址

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

方法 MVKD SAMPLE , *AR3

举例

Page 6: 第三章   DSP 指令系统与特点

用一个符号或一个具体的数来确定程序存储器中的一个地址

2 .绝对地址寻址( 2)程序存储器地址( pmad)寻址

方法 MVPD TABLE, *AR4

举例

Page 7: 第三章   DSP 指令系统与特点

用一个符号或一个常数来确定外部 I/O 口地址

2 .绝对地址寻址( 3) PA 寻址 端口( PA)

方法

PORTR FIFO, *AR5

举例

Page 8: 第三章   DSP 指令系统与特点

用一个符号或一个常数来确定数据存储器中的一个地址

2 .绝对地址寻址( 4) *( lk)寻址 方法

LD *( BUFFER),A

举例 特点

允许所有使用 Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针( DP)的值,也不用对 ARx进行初始化

Page 9: 第三章   DSP 指令系统与特点

用累加器中的数值作为地址来读写程序存储器。

方法

READA Smem WRITA Smem

举例特点

可用来完成程序存储器单元的数据与数据存储器单元的数据进行交换

3 .累加器寻址

Page 10: 第三章   DSP 指令系统与特点

可以在不改变 DP或 SP的情况下,随机地寻址128个存储单元中的任何一个单元。

用一个符号或一个常数来确定 7位偏移值,与 DP或 SP共同形成 16位的数据存储器实际地址。

4 .直接寻址 方法

LD #x,DP

LD @u, A ADD @v,

A =======

====SSBX CPL LD @X1,

A ADD

@Y2, A

举例特点

Page 11: 第三章   DSP 指令系统与特点

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 个可访问的单元。

Page 12: 第三章   DSP 指令系统与特点

5 .间接寻址 方法 特点

( AR0~AR7 )→ARAU0/ARAU1 →16位无符号算术运算→寻址范围为 64K

能在一个指令中访问两个数据存储器单元

两个独立的存储器单元读数据读一个、写另一个存储器单元 读写两个连续的存储器单元

Page 13: 第三章   DSP 指令系统与特点

5 .间接寻址 ( 1 )单操作数寻址

LD *AR1,B

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

Page 14: 第三章   DSP 指令系统与特点

MOD 域 操作码语法 功 能 说 明0000 *ARx addr=ARx ARx 包含了数据存储器地址0001 *ARx- addr=ARx

ARx=ARx-1 访问后, ARx 中的地址减 1②

0010 *ARx+ addr=ARxARx=ARx+1 访问后, ARx 中的地址加 1①

0011 *+ARx addr=ARx+1ARx=ARx+1 在寻址前, ARx 中的地址加 1 ,然后再寻址①②③

0100 *ARx-0B addr=ARxARx=B ( ARx-AR0 ) 访问后,从 ARx 中以位倒序进位的方式减去 AR0

0101 *ARx-0 addr=ARxARx=ARx-AR0 访问后,从 ARx 中减去 AR0

0110 *ARx+0 addr=ARxARx=ARx+AR0 访问后,把 AR0 加到 ARx 中去

0111 *ARx+0B addr=ARxARx=B ( ARx+AR0 ) 访问后,把 AR0 以位倒序进位的方式加到 ARx 中

1000 *ARx-% addr=ARxARx=circ ( ARx-1 ) 访问后, ARx 中的地址以循环寻址的方式减 1①

1001 *ARx-0%addr=ARxARx=circ ( ARx-AR0) 访问后,从 ARx 中以循环寻址的方式减去 AR0

1010 *ARx+% addr=ARxARx=circ ( ARx+1 ) 访问后, ARx 中的地址以循环寻址的方式加 1①

1011 *ARx+0%addr=ARxARx=circ ( ARx+AR0) 访问后,把 AR0 以循环寻址的方式加到 ARx 中

1100 *ARx ( lk ) addr=ARx+lkARx=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 )用来作为数据存储器的绝对地址。(也属绝对寻址)③

单数据存储器操作数间接寻址类型

Page 15: 第三章   DSP 指令系统与特点

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 #1k , BK如果 R=32 ,则最小的 N 值为 6 ,循环缓冲区的起始地址必须有 6 个最低有效位为 0 ,即 ×××× ×××× ××00 00002 。

Page 16: 第三章   DSP 指令系统与特点

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输出整结果

Page 17: 第三章   DSP 指令系统与特点

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 变换结果的序号调整

Page 18: 第三章   DSP 指令系统与特点

0 页寻址。不影响当前 DP 或SP 值 。用于直接寻址和间接寻址

用来修改存储器映象寄存器

6 .存储器映象寄存器寻址

功能

LDM PRD,A

举例 特点方法高 9 位数据存储器地址被置 0 ,利用指令中的低7位地址访问 MMR 。

Page 19: 第三章   DSP 指令系统与特点

7 .堆栈寻址

从高地址向低地址方向生长,SP )来管理堆栈, SP 始终指向堆栈中所存放的最后一个数据,即 SP 指针始终指向栈顶。在压入操作时,先减小 SP 的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加 SP 的值。

用来在中断和子程序调用时自动保存程序计数器( PC)中的数值,也能用来保护现场或传送参数

功能 特点PSHD *AR2 POPD *AR3

Page 20: 第三章   DSP 指令系统与特点

第二节 程序存储器地址的生成程序地址生成器( PAGEN)构成

程序计数器( PC)重复计数器( RC)块重复计数器( BRC)块重复起始地址寄存器( RSA)块重复结束地址寄存器( REA)核心16位程序计数器( PC)内中保存某个内部或外部程序存储器的地址。

地址内容为: 即将取指的某条指令; 某个 16位立即操作数; 系数表。在程序存储器中的地址

Page 21: 第三章   DSP 指令系统与特点

操作 加载到 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 ,继续执行被中断了的子程序。

将程序存储器地址加载到程序计数器的途径

Page 22: 第三章   DSP 指令系统与特点

1 .分支转移操作

通过分支转移指令改写 PC ,可以改变程序的流向。而子程序调用指令则通过将一个返回地址压入堆栈,执行返回时恢复原地址。

可执行 :分支转移循环控制子程序操作

功能 方法

Page 23: 第三章   DSP 指令系统与特点

条件分支转移无条件分支转移 B[D]用指令中所给出的地址加载 PCBACC[D] 用所指定的累加器的低 16位作为地址加载 PC。

带延迟不带延迟操作

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

BANZ loop,*AR2-B nextBACC A

Page 24: 第三章   DSP 指令系统与特点

2 .调用和返回

转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至 PC,使被中断了的原程序能继续执行。

当采用调用指令进行子程序或函数调用时, DSP中断当前运行的程序,转移到程序存储器的其它地址继续运行。

功能 方法无条件调用与返回有条件调用与返回 带延迟不带延迟 CALL[d] lop

RET main

Page 25: 第三章   DSP 指令系统与特点

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

Page 26: 第三章   DSP 指令系统与特点

多重条件判断 BC pmad , cond[, cond[, cond]]相与关系

相或关系 BC pmad , condBC pmad , cond第 1组 第 2组

A 类 B 类 A 类 B 类 C 类EQ OV TC C BIO

NEQ NOV NTC NC NBIOLT        

LEQ        

GT        

GEQ        

Page 27: 第三章   DSP 指令系统与特点

第 1组

例如

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

Page 28: 第三章   DSP 指令系统与特点

第 2组

例如

可以在 A 、 B 、 C 三类中各选择一个条件,但不能从同一类中选择两个条 件

可以在 A、 B、 C三类中各选择一个条件,但不能从同一类中选择两个条件

Page 29: 第三章   DSP 指令系统与特点

特例

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

Page 30: 第三章   DSP 指令系统与特点

特点 2特点 1

4 .单条指令的重复操作

重复执行( RC) +1次。RC内容不能编程设置,只能由重复指令( RPT和 RPTZ )中的操作数加载。操作数 n 的最大值为 65 535,最大重复执行次数为 65 535+1 。

一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包 括 ,但不包括

)均不响应。

功能 重复执行下一条指令

NMI

RS

Page 31: 第三章   DSP 指令系统与特点

重复过程当 RPT指令执行时:①首先把循环的次数装入循环计数器( RC),②其循环次数 n由一个 16位单数据存储器操

作数 Smem或一个 8位或 16位常数 k或 lk给定。 这样,

紧接着的下一条指令会循环执行 n+1次。③循环, RC在执行减 1操作时不能被访问。注意:该循环内不能套用循环。 当 RPTZ指令执行时:对目的累加器 dst清 0, 循环执行下一条指令 n+1次。

Page 32: 第三章   DSP 指令系统与特点

特点

5 .块重复操作

利用 C54x 内部的块重复计数器( BRC ,加载值可为 0~ 65 535 )、块重复起始地址寄存器( RSA )、块重复结束地址寄存器( REA )与程序块重复指令 RPTB ,可对紧随 RPTB 、由若干条指令构成的程序块进行重复操作。

功能 将重复操作的范围扩大到任意长度的循环回路

注意1.RPT指令一旦执行,不会停止操作,即使有中断请求也不响应;2.RPTB指令可以响应中断;

Page 33: 第三章   DSP 指令系统与特点

例 3-6 对数据组 x[5]中的每个元素加 1 。    .bss x,5   ;为数组 x 分配 5 个存储单元begin: LD #1,16,B ;将 1左移 16 位放入 B 的          ;高端字的最低位    STM #4,BRC ; 4→BRC ,( PC) +2 →RSA     STM #x,AR4  ;将 x 的首地址赋给 AR4     RPTB next-1  ;将 NEXT-1 →REA     ADD *AR4,16,B,A ; x 地址的内容左移 16位加 ; B 的高端字,结果放 A    STH A,*AR4+ ;将 A 的高端字存入 x 单元, ;完成加 1 操作next: LD #0,B ;对 B清零   …      ;必需 next-1作为结束地址

Page 34: 第三章   DSP 指令系统与特点

对寄存器的占用

6 .循环的嵌套

执行 RPT 指令时占用 RPTC 寄存器(重复计数器);执行 RPTB指令时要用到 BRC、 RSA和 RSE寄存器。只有一套块重复寄存器,故块重复操作不能嵌套。 由于 RPT 与 RPTB两者用了不同的寄存器,因此RPT指令可以嵌套在 RPTB指令中,实现循环的嵌套。执行 BANZ指令只占用辅助寄存器 ARx。不会与RPT RPTB指令相冲突。

嵌套原则 参与嵌套循环的寄存器不能重复使用

Page 35: 第三章   DSP 指令系统与特点

图 3-3 一个三重循环嵌套结构

Page 36: 第三章   DSP 指令系统与特点

第三节 流水线 流水线操作 在执行多条指令时,将每条指令的预取指、取指、译码、寻址、读取操作数、执行等阶段,相差一个阶段地重叠地执行。流水线操作的优点

一条 k段流水能在 k+( n-1)个周期内处理 n条指令。其前 k个周期用于完成第一条指令,其余 n-1条指令的执行需要 n-1个周期。而非流水处理器上执行 n条指令则需要nk 个周期。当指令条数 n较大时,可认为每个周期内执行的最大指令个数为 k 。

Page 37: 第三章   DSP 指令系统与特点

预取指 P取指 F译码 D寻址 A读取操作数R执行 X

流水线操作 在第一个机器周期用 PC 中的内容加载 PAB

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

第三个周期用 PB的内容加载指令寄存器 IR,对 IR内的指令进行译码,产生执行指令所需要的一系列控制信 号。

Page 38: 第三章   DSP 指令系统与特点

预取指 P取指 F译码 D寻址 A读取操作数R执行 X

流水线操作 用数据 1 读地址加载DAB ,或用数据2读地址加载 CAB ,修正辅助寄存器和堆栈指针。

读数据 1 加载 DB ,或读数据 2 加载 CB ;用数据 3写地址加载到 EAB ,以便在流水线的最后一级将数据送到数据存储空间。 执行指令,或用写数据加载 EB 。

Page 39: 第三章   DSP 指令系统与特点

空转浪费周期1 .延迟分支转移的流水线图

无延迟流水线分支转移的问题

地址 指令a1 , a2   B b1 这是一个四周期、二字分支指令a3   i3 这是任意的一周期、一字指令a4   i4 这是任意的一周期、一字指令... ...b1 j1

例 3-7

Page 40: 第三章   DSP 指令系统与特点

分支转移指令流水线图

用分支转移指令的地址a1 加载 PAB。

取得双字分支转移指令取得双字分支转移指令

Page 41: 第三章   DSP 指令系统与特点

分支转移指令流水线图

i3和 i4指令取指。由于这两条指令处在分支转移指令的后面,虽然已经取指,但不能进入译码级,且最终被丢弃。

分支转移指令进入译码级

用新的值 b1 加载 PAB

Page 42: 第三章   DSP 指令系统与特点

分支转移指令流水线图

j1 指令取指

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

执行 j1指令

双字分支转移指令进入流水线的执行级 由于 i3 和 i4指 令 是 不允许执 行 的 , 所 以这两个周期均花在 分支转移指令的执行上。

Page 43: 第三章   DSP 指令系统与特点

允许跟在延迟分支转移指令之后的两条单字或一条双字指令可以被执行 延迟分支转移

注意1. 延迟操作指令后面只有两个字的空 隙,因此不能在此空隙中安排任何 一类分支转移指令或重复指令;2.在 CALLD 或 RETD 的空隙中还不能安 排 PUSH和 POP 指令。3.延迟操作指令比它们的非延迟型 指令要快,在调试延迟型指令时, 直观性稍差一些,因此希望在大多 数情况下还是采用非延迟型指令。

Page 44: 第三章   DSP 指令系统与特点

例 3-8 在完成 R= ( x+y) *z操作后转至next 。  可以分别编出如下两段程序:利用普通分支转移指令 B  利用延迟分支转移指令 BD   LD @x , A LD @x , A   ADD @y, A ADD @y, A   STL A , @s STL A , @s   LD @s , T LD @s , T   MPY @z, A BD next    STL A , @r MPY @z, A    B next STL A , @r(共 8 个字, 10 个 T ) (共 8 个字, 8 个 T )在空闲的随后两周期中执行下两条指令

Page 45: 第三章   DSP 指令系统与特点

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

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

有下列程序:地址 指令a1 i1a2 i2a3 i3a4 XC 2 , conda5 i5a6 i6

Page 46: 第三章   DSP 指令系统与特点

条件执行指令流水线图

XC 指令的地址 a4加载到PAB 取 XC 指令的操作码

求解 XC 指令所规定的条件。如果条件满足,则后面指令 i5 和 i6 进入译码级并执行;否则不对 i5 和 i6 指令译码。

Page 47: 第三章   DSP 指令系统与特点

1. XC 是一条单字单周期指令,与条件跳 转指令相比,具有快速选择其后 1或 2 条指令是否执行的优点;2. XC指令在执行前 2个周期就已经求出 条件,如果在这之后到执行前改变条 件(如发生中断),将会造成无期望 的结果 。3. 要尽力避免在 XC指令执行前 2个周

期 改变所规定的条件。4. 并没有规定 XC指令后的一条或两条指 令必须是单周期指令。

注意

Page 48: 第三章   DSP 指令系统与特点

CPU 在单个周期内两次访问双寻址存储器

3 .双寻址存储器的流水线冲突 流水线冲突原因

不会产生流水线冲突的情况( 1 )在单周期内允许同时访问 DARAM 的不同块。( 2 )当流水线中的一条指令访问某一存储器块时, 允许流水线中处于同一级的另一条指令访问 另一个存储器块。( 3)允许处于流水线不同级上的两条指令同时访 问同一个存储器块。

Page 49: 第三章   DSP 指令系统与特点

是利用一次访问中对前、后半个周期分时进行访问的缘故。CPU能够在单周期内对 DARAM进行两次访问而不冲突 对 PAB/PB取指 利用前半周期对 DAB/DB 读取第一个数据 利用前半周期对 CAB/CB 读取第二个数据 利用后半周期对 EAB/EB将数据写存储器 利用后半周期

Page 50: 第三章   DSP 指令系统与特点

(1) 同时从同一存储器块中取指和取操作数(都在前半个周期); 2.同时对同一存储器块进行写操作和读(第二个数)操作(都在后半周期)。解决冲突办法

人为合理安排指令,错开访问时序

CPU通过写操作延迟一个周期,或者通过插入一个空周期的办法,自动地解 决

CPU同时访问 DARAM的同一存储器块就会发生时序上的冲突。

Page 51: 第三章   DSP 指令系统与特点

从 DARAM块中同时取指和取操作数

冲突 延迟一个周期

Page 52: 第三章   DSP 指令系统与特点

4 .解决流水线冲突的方法 ( 1)可能发生流水线冲突的情况

1) 辅助寄存器( AR0~ AR7 )。2) 重复块长度寄存器( BK )。3) 堆栈指针。4) 暂存器( T )。5) 处理器工作方式状态寄存器( PMST )。6) 状态寄存器( ST0 和 ST1 )。7 )块重复计数器( BRC )。8 )存储器映象累加器( AG、 AH、 AL 、 BG、 BH、BL )。

Page 53: 第三章   DSP 指令系统与特点

流水线冲突情况分析

Page 54: 第三章   DSP 指令系统与特点

发生流水线冲突的例子

在流水线的执行 阶段进行写操作在流水线的寻址阶段生成地址

冲突

无等待周期问题

解决

数据未准备好

Page 55: 第三章   DSP 指令系统与特点

发生流水线冲突的例子 在流水线的执行阶段进 行写操作

读数阶段将常数 10写到 AR1

冲突同时利用 E总线 CPU 自动地将 STM的写操作延迟一个 周期在流水线的寻址阶段生成地址

新冲突数据未准备好

解决

Page 56: 第三章   DSP 指令系统与特点

发生流水线冲突的例子 STLM 指 令后面插入一条 NOP 指令

在流水线的执行阶段进行写操作读数阶段将常数 10写到 AR1

在流水线的寻址阶段生成地址

E总线错开解决数据准备好解决

Page 57: 第三章   DSP 指令系统与特点

4 .解决流水线冲突的方法 ( 2)用等待周期表解决流水线冲突

等待周期表给出了对存储器映象寄存器以及 ST0、 ST1、 PMST的控制字段进行写操作的各种指令所需插入的等待周期。对双字或三字指令,都会提供隐含的保护周期。利用这些指令提供的隐含的保护周期,有时可以不插 NOP指令。

Page 58: 第三章   DSP 指令系统与特点

控制字段 不插入 插入 1 个 插入 2 个

TSTM #1k , TMVDK Smem , TLD Smem , TLD Smem , T‖ST

所有其它存储指令包括 EXP  

ASM LD #k5 , ASMLD Smem , ASM 所有其它存储指令  

DPCPL=0

LD #k9 , DPLD Smem , DP  STM # lk , ST0ST # lk , ST0所有其它存储指令插入3 个

SXM C16FRCT OVM

  所有存储指令包括 SSXM 和 RSXM 

A 或 B   修改累加器然后读MMR  

在 RPTB[D]前读 BRCSTM # lk , BRCST # lk , BRCMVDK Smem , BRCMVMD MMR , BRC

所有其它存储指令 SRCCD(在循环中) 见说明 4

等待周期表 1

Page 59: 第三章   DSP 指令系统与特点

例 3-11 利用表 3-8等待周期表 1选择插入的 NOP数。SSBX SXMNOPLD @x , B 由于 LD @ x , B 是一条单字指令,不提供隐含的保护周期。根据表 3-8 的等待周期表 1 ,应当在 SSBX SXM 指令后插入一条 NOP 指令。而SSBX SXMLD * ( x ), B由于 LD * ( x ), B 是一条双字的绝对寻址指令,它隐含一个等待周期,故 SSBX 指令就不要再插 NOP 指令了。

ST1 第 8 位SXM= 0禁止符号位扩展SXM= 1允许符号位扩展

Page 60: 第三章   DSP 指令系统与特点

例 3-12 利用隐含等待周期解决流水线冲突。LD @GAIN , TSTM #input , AR1MPY *AR1+, A例 3-13 利用表 3-8等待周期表 3插入 NOP周期解决流水线冲突。STLM B , AR2NOPSTM #input , AR3MPY AR2+, *AR3+, A

LD 中写 T 和 STM 中写 AR1要用到 E 总线,由于 STM 是一条双字指令,隐含一个等待周期,故对于 AR1 来说,等待周期为 0 。STM 中写 AR3 要用到 E 总线,会与 STLM 中写 AR2 用E 总线相冲突,查表 3-8 等待周期表 3 的控制字段为 AR3 , STLM 指令后应插入 2个 NOP ,但由于下条指令 STM 隐含 1 个等待周期,故只需要插入一条 NOP 指令。

Page 61: 第三章   DSP 指令系统与特点

第四节 指令系统概述TMS320C54x 是 TMS320 系列中的一种定点数字信号处理器,它的指令系统分助记符形式和代数式形式两种。共有指令 129条,由于操作数的寻址方式不同,派生至 205条。

Page 62: 第三章   DSP 指令系统与特点

1.可同时读入 2 或 3 个操作数;2. 支持双精度运算的 32 位长操作数指令;3.可进行单条指令重复和块指令重复操作;4.有块存储器传送指令和并行操作(如并行存储和加载、并行存储和加 / 减法、并行存储和乘法、并行加载和乘法)指令;5.设有条件存储指令及延迟操作指令、有从中断快速返回指令;6.有为特殊用途设计的指令(如支持 FIR滤波、最小均方算法 LSM 、多项式计算以及浮点运算);7.有为省电安排的空转指令。

TMS320C54x 指令系统的主要特点

Page 63: 第三章   DSP 指令系统与特点

TMS320C54x 的指令集有近两百条指令,按功能分为如下几类: 算术运算指令

逻辑运算指令 程序控制指令 装入和存储指令

Page 64: 第三章   DSP 指令系统与特点

一、算术运算指令算术运算指令可分为如下几类: 加法指令 减法指令 乘法指令 乘加指令 乘减指令

双数 / 双精度指令 特殊操作指令

Page 65: 第三章   DSP 指令系统与特点

1 、加法指令

Page 66: 第三章   DSP 指令系统与特点

定点 DSP 中数据表示方法 当它表示一个整数时,其最低位( D0 )表示 1 , D1位表示 2 的 1 次方,次高位( D14 )表示 2 的 14 方。 如果表示一个有符号数时,最高位( D15 )为符号位,0 表示正数, 1 表示负数。例如, 07FFFH 表示最大的正数 32767 (十进制),而 0FFFFH 表示最大的负数 -1 (负数用 2 的补码方式显示)。 当需要表示小数时,小数点的位置始终在最高为后,而最高位( D15 )表示符号位。这样次高位( D14 )表示 0.5 ,然后是 0.25 ,最低位( D0 )表示。所以 4000H 表示小数 0.5 , 2000H 表示小数 0.25 ,而 0001H表示 16 位定点 DSP 表示的最小的小数(有符号) 0.000030517578125 。

Page 67: 第三章   DSP 指令系统与特点

实现 16 位定点加法 ‘C54X 中提供了多条用于加法的指令,如 ADD , ADDC , ADDM 和 ADDS 。其中 ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如 32 位扩展精度加法),而 ADDM 专用于立即数的加法。

Page 68: 第三章   DSP 指令系统与特点

使用 ADD 完成加法 ld temp1,a ;将变量 temp1 装入寄存器 A add temp2,a ;将变量 temp2 与寄存器 A 相加 ;结果放入 A 中 stl a,temp3 ;将结果(低 16 位)存入变量 ; temp3 中。 注意,这里完成计算 temp3=temp1+temp2 ,我们没有特意考虑 temp1 和 temp2 是整数还是小数,在加法和下面的减法中整数运算和定点的小数运算都是一样的。

Page 69: 第三章   DSP 指令系统与特点

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

Page 70: 第三章   DSP 指令系统与特点

2 、减法指令

Page 71: 第三章   DSP 指令系统与特点

实现 16 位定点减法 ‘C54X 中提供了多条用于减法的指令,如SUB , SUBB , SUBC 和 SUBS 。其中 SUBS 用于无符号数的减法运算, SUBB 用于带进位的减法运算(如 32 位扩展精度的减法),而 SUBC 为移位减, DSP 中的除法就是用该指令来实现的。

Page 72: 第三章   DSP 指令系统与特点

减法指令使用举例 stm temp1,ar3 ;将变量 temp1 的地址装入 ar3 寄存器 stm temp3,ar2 ;将变量 temp3 的地址装入 ar2 寄存器 sub *ar2+, *ar3,b ;相减,结果放入寄存器 B (高 16 位)中, ; 同时 ar2 加 1 。 sth b,63h ;将相减的结果(高 16 位)存入变量 63h

Page 73: 第三章   DSP 指令系统与特点

利用 SUBC实现除法 在‘ C54X 中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用 SUBC 指令,重复 16 次减法完成除法运算。

Page 74: 第三章   DSP 指令系统与特点

利用 SUBC 完成除法运算ld temp1,B ;将被除数 temp1 装入 B 寄存 ;器的低 16 位rpt #15 ;重复 SUBC 指令 16 次subc temp2,b ;使用 SUBC 指令完成除法stl B,temp3 ;将商( B 寄存器的低 16 位) ;存入变量 temp3sth B,temp4 ;将余数( B 寄存器的高 16 位) ;存入变量 temp4

注: 实际上是完成整数除法

Page 75: 第三章   DSP 指令系统与特点

实现小数除法 在‘ C54X 中实现 16 位的小数除法与前面的整数除法基本一致,也是使用 SUBC 指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于 1 ),所以被除数一定小于除数。在执行 SUBC 指令前,应将被除数装入 A或 B 寄存器的高 16 位,而不是低 16 位。其结果的格式与整数除法一样。第二,应考虑符号位对结果小数点的影响。所以应对商右移一位,得到正确的有符号数。

Page 76: 第三章   DSP 指令系统与特点

3 、乘法指令

Page 77: 第三章   DSP 指令系统与特点

实现 16 定点整数乘法 在‘ C54X 中提供了大量的乘法运算指令,其结果都是 32 位,放在 A 或 B 寄存器中。乘数在‘ C54X 的乘法指令很灵活,可以是 T 寄存器、立即数、存贮单元和A 或 B 寄存器的高 16 位。如果是无符号数乘时,请使用 MPYU 指令。这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘法。

Page 78: 第三章   DSP 指令系统与特点
Page 79: 第三章   DSP 指令系统与特点

整数乘法举例rsbx FRCT ;清 FRCT 标志,准备整数乘ld temp1,T ;将变量 temp1 装入 T寄存器mpy temp2,a ;完成 temp2*temp1 ,结果放 ;入 A 寄存器( 32 位)

Page 80: 第三章   DSP 指令系统与特点

实现小数乘法 在‘ C54X 中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。‘ C54X 中提供了一个状态位 FRCT ,将其设置为1 时,系统自动将乘积结果左移移位。两个小数( 16 位)相乘后结果为 32 位,如果精度允许的话,可以只存高 16 位,将低 16 位丢弃,这样仍可得到 16 位的结果。

Page 81: 第三章   DSP 指令系统与特点

小数乘法举例 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

Page 82: 第三章   DSP 指令系统与特点

4 、乘加和乘减指令

Page 83: 第三章   DSP 指令系统与特点
Page 84: 第三章   DSP 指令系统与特点

5 、双精度/双数操作指令

Page 85: 第三章   DSP 指令系统与特点

6 、特殊指令

Page 86: 第三章   DSP 指令系统与特点

二、逻辑运算指令逻辑指令包括与、或、异或、移位和测试指令

1 、与指令( AND )

Page 87: 第三章   DSP 指令系统与特点

2 、或、异或指令

Page 88: 第三章   DSP 指令系统与特点

3 、移位和测试指令

Page 89: 第三章   DSP 指令系统与特点

三、程序控制指令程序控制指令包括:

分支指令调用指令中断指令返回指令重复指令堆栈操作指令混合程序控制指令

Page 90: 第三章   DSP 指令系统与特点

1 、分支指令

Page 91: 第三章   DSP 指令系统与特点

2 、调用与中断指令

Page 92: 第三章   DSP 指令系统与特点

3 、返回指令

Page 93: 第三章   DSP 指令系统与特点

4 、重复指令和堆栈操作指令

Page 94: 第三章   DSP 指令系统与特点

5 、混合程序控制指令

Page 95: 第三章   DSP 指令系统与特点

四、装入和存储指令装入和存储指令包括:

一般的装入和存储指令条件存储指令并行装入和存储指令并行装入和乘法指令并行存储和加件乘指令混合装入和存储指令

Page 96: 第三章   DSP 指令系统与特点

1 、一般的装入指令

Page 97: 第三章   DSP 指令系统与特点
Page 98: 第三章   DSP 指令系统与特点

2 、存贮指令

Page 99: 第三章   DSP 指令系统与特点

3 并行装入和存储指令

4 、条件存储指令

Page 100: 第三章   DSP 指令系统与特点

5 、并行存储和加、减、乘法指令

Page 101: 第三章   DSP 指令系统与特点

6 、并行装入和乘法指令

Page 102: 第三章   DSP 指令系统与特点

7 、混合装入和存储指令

Page 103: 第三章   DSP 指令系统与特点

注意:同一条指令在不同存储器中可能有不同执行时间 操作数在双寻址空间、单寻址空间和外部 程序代码在双寻址、单寻址和外部空间 操作数和代码在相同存储器块中 数据空间插入了等待周期 程序空间插入了等待周期

Page 104: 第三章   DSP 指令系统与特点

FIRS 指令使用方法:FIRS *AR2+ , *AR3+ , COEF

特殊指令使用说明特殊指令使用说明FIRS 指令

FIRS 指令用于线性相位滤波器的处理。一个如下图的 8阶线性相位滤波器的输出表达式:

Page 105: 第三章   DSP 指令系统与特点

FIR滤波的两指令 MAC 、 FIRSRPTZ A,#(N-1) ;重复 MAC 指令 N 次 , 先将 A 清零MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ; 完成滤波计算。注意 FIR滤波 ;系数存放在数据存储区 RPTZ B, #(N/2-1) ; 重复 FIRS 指令 N/2 次 , 先将 B 清零 FIRS *ar2+0%, *ar3+0%,filter_coff+N/2 ;完成滤波计算。注意 FIR滤波系数 ;存放在程序存贮 filter_coff为 ;系数起始地址

Page 106: 第三章   DSP 指令系统与特点

Viterbi译码指令 DADST 、 DSADT 、 CMPS在信道均衡和解码中经常会使用到 Viterbi 算法, C54x 为此提供了专门的硬件和指令。根据输入信号确定分支似然概率增加量 D1/D2 ,放在 T 寄存器中, TRN 存储可能信号译码输出。

Page 107: 第三章   DSP 指令系统与特点

相关指令应用

Page 108: 第三章   DSP 指令系统与特点

最小均方运算 LMS 在进行自适应滤波等操作中经常会使用 LMS算法, C54x提供的 LMS 指令方便了编程。如下图所示的自适应滤波器设计中,滤波器系数修正公式为:

其中, e(i) = d(i) - y(i) 。滤波器输出:)()(

1

0kixwiy

N

kk

Page 109: 第三章   DSP 指令系统与特点

基于 LMS 的自适应滤波编程

Page 110: 第三章   DSP 指令系统与特点

数据归一化相关指令 EXP 、 NORM

归一化一个数是先求其指数,然后把它调整到最大精度格式。实现方法如下:

Page 111: 第三章   DSP 指令系统与特点

数据块移动MVDD 、 MVDP 、 MVPD 在 C54x 系列 DSP ,数据与数据存储器、数据与程序存储器之间可以方便的进行数据传输,结合单指令循环可实现数据块移动。如 16 个系数的移动:

Page 112: 第三章   DSP 指令系统与特点

指令效率的提高 C54x 中有一些指令功能差不多,但编写出的程序效率不同,应灵活使用,如:

MPY[R] Smem , dst ; T* ( Smen) dstMAC[R] Smem , dst ;( Smen) *T+src( MPY[R] +ADD ) ; srcMACD Smen, pmen, src ; pmend PAR

( MAC+DELY+LD ) ;( Smem ) * ( pmed ); +( src ) src;( Smem ) T;( Smem ) Smem+1