1
信息工程学通信工程系
DSP技术 及应用
Digital Signal Processor
数字信号处理器
陈金鹰 副教授
2
第三章 DSP指令系统与特点
第一节 寻址方式
第二节 程序地址的生成
第三节 流水线操作技
术第四节 指令系统概述
3
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的寻址方式
4
1.立即数寻址
2.绝对地址寻址
3.累加器寻址
4.直接寻址
5.间接寻址
6.存储器映象寄存器寻址
7.堆栈寻址
寻址分类
5
1.立即数寻址
在操作数前面需要加#字号来说明该操作数
为立即数。否则会把该操作数误认为是一个地
址,从而把立即数寻址变成绝对地址寻址。


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


LD #93h,A
LD 93h,A 举例
6
2.绝对地址寻址


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

用一个符号或一
个数来确定数据
空间的一个地址。
方法 MVKD SAMPLE,*AR3
举例
7
用一个符号或一
个具体的数来确
定程序存储器中
的一个地址
2.绝对地址寻址
( 2)程序存储器地址( pmad)寻

方法 MVPD TABLE,*AR4
举例
8
用一个符
号或一个
常数来确
定外部
I/O口地

2.绝对地址寻址
( 3) PA寻址 端口( PA)
方法
PORTR FIFO,*AR5
举例
9
用一个符号
或一个常数
来确定数据
存储器中的
一个地址
2.绝对地址寻址
( 4) *( lk)寻址
方法
LD *( BUFFER),A
举例 特点
允许所有使
用 Smem寻址
的指令去访
问数据空间
的任意单元
而不改变数
据页指针
( DP)的值,
也不用对 ARx
进行初始化
10
用累加
器中的
数值作
为地址
来读写
程序存
储器。
方法
READA Smem
WRITA Smem
举例
特点
可用来 完成
程序存储器
单元的数据
与 数据存储
器单元的数
据 进行交换
3.累加器寻址
11
可以在不改
变 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
举例特点
12
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个可访问的单元。
13
5.间接寻址
方法 特点
( AR0~AR7) →
ARAU0/ARAU1 →
16位无符号算术运
算 →
寻址范围为 64K
能在一个指令中访问
两个数据存储器单元
两个独立的存储器单元读数据
读一个, 写另一个存储器单元
读写两个连续的存储器单元
14
5.间接寻址
( 1)单操作数寻址
定义间接寻
址的类型
定义寻址所使用
的辅助寄存器ST1
CMPT=0 标准方式 ARF确定辅助寄存器, ST0中 ARP= 0
CMPT=1 兼容方式 如 ARF=0,用 ARP选择辅助寄存器,
否则,用 ARF来确定辅助寄存器。 ARF的值装入 ARP。
LD *AR1,B
15单操作数间接寻址的硬件框图
16
MOD域 操作码语法 功 能 说 明
0000 *ARx addr=ARx ARx包含了数据存储器地址
0001 *ARx- addr=ARxARx=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+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) 用来作为数据存储器的绝对地址 。 ( 也属绝对寻址 ) ③
单数据存储器操作数间接寻址类型
17
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。
18
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输出整结果
19
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变换结果的序号调整
20
5.间接寻址
( 2)双操作数寻址方式
确定
包含
Xmem
地址
的辅
助寄
存器
确定
包含
Ymem
地址
的辅
助寄
存 器
定义用于
访问 Ymem
操作数的
间接寻址
方式的类

定义用于
访问 Xmem
操作数的
间接寻址
方式的类

MPY *AR2,*AR3,A
21
Xar或 Yar 辅助寄存器
00 AR2
01 AR3
10 AR4
11 AR5
辅助
寄存器
选择
Xmod或
Ymod
操作码语
法 功 能 说 明
00 *ARx addr=ARx ARx是数据存储器地址
01 *ARx- addr=ARxARx=ARx-1 访问后,ARx中的地址减 1
10 *ARx+ addr=ARxARx=ARx+1 访问后,ARx中的地址加 1
11 *ARx+0%
addr=ARx
ARx=circ(
ARx+AR0)
访问后,AR0以循环寻址的
方式加到 ARx中
双数据存储器操作数寻址的类型
22
0页寻址。
不影响
当前 DP
或 SP值 。
用于直
接寻址
和间接
寻址
用来修
改存储
器映象
寄存器
6.存储器映象寄存器寻址
功能
LDM PRD,A
举例 特点方法
高 9位数据
存储器地址
被置 0,利
用指令中的
低7位地址
访问 MMR。
23
7,堆栈寻址
从高地址向低地址方向生长,
SP) 来管理堆栈, SP始终指
向堆栈中所存放的最后一个
数据, 即 SP指针始终指向栈
顶 。 在压入操作时, 先减小
SP的值, 再将数据压入堆栈;
在弹出操作时, 先从堆栈弹
出数据, 再增加 SP的值 。
用来在中断
和子程序调
用时自动保
存程序计数
器( PC)中
的数值, 也
能用来保护
现场或传送
参数
功能 特点
PSHD *AR2
POPD *AR3
24
第二节 程序地址的生成
程序地址
生成器
( PAGEN)
构成
程序计数器 ( PC)
重复计数器 ( RC)
块重复计数器 ( BRC)
块重复起始地址寄存器 ( RSA)
块重复结束地址寄存器 ( REA)核心
16位程序计数器( PC)
内中保存某个内部或外
部程序存储器的地址 。
地址 内容为:
即将取指的某条指令 ;
某个 16位立即操作数 ;
系数表 。
在程序存储器中的地址
25
操作 加载到 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,继续执行被中断了的子程序 。
将程序存储器地址加载到程序计数器的途径
26
1,分支转移操作
通过分支转移指令改写 PC,可
以改变程序的流向 。 而子程序
调用指令则通过将一个返回地
址压入堆栈, 执行返回时恢复
原地址 。
可执行,
分支转移
循环控制
子程序操

功能 方法
27
条件 分支转移
无条件分支转移
B[D]用指令
中所给出的
地址加载 PC
BACC[D] 用
所指定的累
加器的低 16
位作为地址
加载 PC。
带延迟
不带延迟
操作
转移种类
BC[D]如果指令
中所规定的条
件得到满足,
就用指令中所
给出的地址加
载 PC;
BANZ[D]如果当
前辅助寄存器
不等于 0,就用
指令中所规定
的地址加载 PC。BC new,AOV
BANZ loop,*AR2-
B next
BACC A
28
2,调用和返回
转移前, 原程序的
下条指令的地址被
压入堆栈, 而在返
回时则将这个地址
弹出至 PC,使被中
断了的原程序能继
续执行 。
当采用调用指令进
行子程序或函数调
用时,DSP中断当前
运行的程序,转移
到程序存储器的其
它地 址 继续运行。
功能 方法
无条件调用与返回
有条件调用与返回
带延迟
不带延迟
CALL[d] lop
RET main
29
3,条件指令中的条件判断
30
多重条件判断
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 NBIO
LT
LEQ
GT
GEQ
31
第 1组
例如
可以从 A类中选一个条件, 同
时可以从 B类中选择一个条件 。
但是不能从同一类中选择两
个条件 。
另外, 两种条件测试的累加
器必须是同一个 。
可以同时测试 AGT和 AOV,但
不能同时测试 AGT和 BGT。
32
第 2组
例如
可以在 A,B,C三类中各
选择一个条件, 但不能从
同一类中选择两个条件
可以在 A,B,C三类中各选
择一个条件,但不能从同
一类中选择两个条件
33


如果条件分支转移出去的地方只有 1~ 2字的
程序段, 则可以用一条单周期条件执行指令
( XC) 来代替分支转移指令:
XC n,cond[,cond[,cond]]
当 n=1,且条件得到满足, 就执行紧随此
条件指令后的1个字指令 。
当 n=2,且条件得到满足, 就执行紧随此
指 令 后 的 1 个 双 字 指 令 或 者 2 条单
字指令 。
当条件不满足, 就依 n的值执行 1
条或 2条 NOP指令 。
34
例 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中
?
?
?
4
1i
ixy
35
特点 2特点 1
4,单条指令的重复操作
重复执行 ( RC) +1次 。
RC内容不能编程设置,
只能由重复指令 ( RPT和
RPTZ) 中的操作数加载 。
操作数 n的最大值为 65
535,最大重复执行次数
为 65 535+1。
一旦重复指令被取
指、译码,直到重
复循环完成以前,
对所有的中断(包
括,但不包
括 )均不响应。
功能 重复执行下一条指令
NMI
RS
36
重复过程
当 RPT指令执行时,
①首先把循环的次数装入循环计数器( RC),
②其循环次数 n由一个 16位单数据存储器操作数
Smem或一个 8位或 16位常数 k或 lk给定。这样,
紧接着的下一条指令会循环执行 n+1次。
③循环,RC在执行减 1操作时不能被访问。
注意,该循环内不能套用循环。
当 RPTZ指令执行时, 对目的累加器 dst清 0,
循环执行下一条指令 n+1次。
37
例 3-5 利用单条指令的重复操作对数组 x[5]={0,0,
0,0,0}进行初始化 。
.bss x,5 ;为数组 x分配 5个存储单元
STM #x,AR1 ;将 x的首地址赋给 AR1
LD #0,A ;对 A清零
RPT #4 ;设置重复执行下条指令 5次
STL A,*AR1+;对 x[5]各单元清零
或者
.bss x,5
STM #x,AR1
RPTZ A,#4;对 A清零并设置重复执行下条指令 5次
STL A,*AR1+
38
特点
5,块重复操作
利用 C54x内部的块重复计数器 ( BRC,加载值
可为 0~ 65 535), 块重复起始地址寄存器
( RSA), 块重复结束地址寄存器 ( REA) 与程
序块重复指令 RPTB,可对紧随 RPTB,由若干条
指令构成的程序块进行重复操作 。
功能 将重复操作的范围扩大到任意长度的循环回路
注意
1.RPT指令一旦执行,不会停止
操作,即使有中断请求也不响应;
2.RPTB指令可以响应中断;
39
例 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作为结束地址
40
对寄存器的占用
6,循环的嵌套
执行 RPT指令时 占用 RPTC寄存器 ( 重复计数器 ) ;
执行 RPTB指令时要用到 BRC,RSA和 RSE寄存器 。 只有
一套块重复寄存器, 故 块重复操作不能嵌套 。
由于 RPT与 RPTB两者用了不同的寄存器, 因此 RPT指
令可以嵌套在 RPTB指令中, 实现循环的嵌套 。
执行 BANZ指令 只占用辅助寄存器 ARx。 不会与 RPT
RPTB指令 相冲突 。
嵌套原则 参与嵌套循环的寄存器不能重复使用
41图 3-3 一个三重循环嵌套结构
42
第三节 流水线操作技术
流水线
操作
在执行多条指令时, 将每条指令的
预取指, 取指, 译码, 寻址, 读取
操作数, 执行等阶段, 相差一个阶
段 地 重叠 地执行 。
流水
线操
作 的
优点
一条 k段流水能在 k+( n-1)个周期内处理 n
条指令。其前 k个周期用于完成第一条指令
,其余 n-1条指令的执行需要 n-1个周期。而
非流水处理器上执行 n条指令则需要 nk 个周
期。当指令条数 n较大时,可认为每个周期
内执行的最大指令个数为 k。
43
预取指 P
取指 F
译码 D
寻址 A
读取操作数 R
执行 X
流水线操作
在第一个机
器周期用 PC
中的内容加
载 PAB
在第二个机器周
期用读取到的指
令字加载 PB。
第三个周期用 PB的内容加载指令寄存器
IR,对 IR内的指令进行译码, 产生执行
指令所需要的一系列控制信号 。
44
预取指 P
取指 F
译码 D
寻址 A
读取操作数 R
执行 X
流水线操作
用数据 1读地址加 载
DAB,或用数据2读地
址加载 CAB,修正辅助
寄存器和堆栈指针 。
读数据 1加载 DB,或读数
据 2加载 CB;用数据 3写
地址加载到 EAB,以便在
流水线的最后一级将数
据送到数据存储空间 。执行指令, 或用
写数据加载 EB。
45
空转浪费周期
1,延迟分支转移的流水线图
无延迟流水线分支转移的问题
地址 指令
a1,a2 B b1 这是一个四周期, 二字分支指令
a3 i3 这是任意的一周期, 一字指令
a4 i4 这是任意的一周期, 一字指令
...,..
b1 j1
例 3-7
46
分支转移指令流水线图
用分支转移
指令的地址
a1 加载 PAB。
取得双字分
支转移指令
取得双字分
支转移指令
47
分支转移指令流水线图
i3和 i4指令取
指 。 由于这两
条指令处在分
支转移指令的
后面, 虽然已
经取指, 但不
能进入译码级,
且最终被丢弃 。
分支转移指令
进入译码级
用新的值 b1加载 PAB
48
分支转移指令流水线图
j1指令取指
双字分支转移
指令进入流水
线的执行级
执行 j1指令
双字分支转移
指令进入流水
由于 i3和 i4指
令是不允许执
行的, 所以这
两个周期均花
在分支转移指
令的执行上 。
49
允许跟在延迟分支
转移指令之后的两
条单字 或一条双字
指令可以被执行
延迟分支转移
注意
1.延迟操作指令后面只有两个字的空
隙,因此不能在此空隙中安排任何
一类分支转移指令或重复指令;
2.在 CALLD或 RETD的空隙中还不能安
排 PUSH和 POP指令。
3.延迟操作指令比它们的非延迟型
指令要快,在调试延迟型指令时,
直观性稍差一些,因此希望在大多
数情况下还是采用非延迟型指令。
50
例 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)
在空闲的随后两周期中执行下两条指令
51
XC n,cnd[,cnd[,cnd]
如果条件满足,则执
行下面 n( n=1或 2)条指令,
否则下面 n条指令改为执行
n条 NOP指令。
2,条件执行指令的流水线图
条件执行指令 XC
有下列程序:
地址 指令
a1 i1
a2 i2
a3 i3
a4 XC 2,cond
a5 i5
a6 i6
52
条件执行指令流水线图
XC指令的地址
a4加载到 PAB
取 XC 指令
的操作码
求解 XC指令所规定的条件 。 如果条件满
足, 则后面指令 i5和 i6进入译码级并执
行;否则不对 i5和 i6指令译码 。
53
1,XC是一条单字单周期指令,与条件跳
转指令相比,具有快速选择其后 1或 2
条指令是否执行的优点 ;
2,XC指令在执行前 2个周期就已经求出
条件,如果在这之后到执行前改变条
件(如发生中断),将会造成无期望
的结果 。
3,要尽力避免在 XC指令执行前 2个周期
改变所规定的条件 。
4,并没有规定 XC指令 后的一条或两条指
令必须是单周期指令。


54
CPU在单个周期内两次
访问双寻址存储器
3,双寻址存储器的流水线冲突
流水线冲突原因
不会产生流水线冲突的情况
( 1)在单周期内允许同时访问 DARAM的不同块。
( 2)当流水线中的一条指令访问某一存储器块时,
允许流水线中处于同一级的另一条指令访问
另一个存储器块。
( 3)允许处于流水线不同级上的两条指令同时访
问同一个存储器块。
55
是利用一次访问中对
前, 后半个周期分时
进行访问的缘故 。
CPU能够在单周期
内对 DARAM进行
两次访问 而不冲突
对 PAB/PB取指 利用前半周期
对 DAB/DB读取第一个数据 利用前半周期
对 CAB/CB读取第二个数据 利用后半周期
对 EAB/EB将数据写存储器 利用后半周期
56
(1) 同时从同一存储器块中取指和
取操作数(都在前半个周期); 2.同时对
同一存储器块进行写操作和读(第二个数)
操作(都在后半周期)。
解决
冲突
办法
人为合理安排指令,
错开访问时序
CPU通过写操作延迟一个周
期, 或者通过插入一个空周
期的办法, 自动地解决
CPU同时访问 DARAM的同一存储器块就会
发生时序上的冲突 。
57
从 DARAM块中同时取指和取操作数
冲突 延迟一个周期
58
4,解决流水线冲突的方法
( 1)可能发生流水线冲突的情况
1) 辅助寄存器 ( AR0~ AR7) 。
2) 重复块长度寄存器 ( BK) 。
3) 堆栈指针 。
4) 暂存器 ( T) 。
5) 处理器工作方式状态寄存器 ( PMST) 。
6) 状态寄存器 ( ST0和 ST1) 。
7) 块重复计数器 ( BRC) 。
8) 存储器映象累加器 ( AG,AH,AL,BG,BH,BL) 。
59
流水线冲突情况分析
60
发生流水线冲突的 例子
在流水线的执行
阶段进行写操作在流水线的寻址阶段生成地址
冲突
无等待周期问题
解决
数据未准备好
61
发生流水线冲突的 例子
在 流 水 线 的
执 行 阶 段 进
行写操作
读数阶段
将常数 10
写到 AR1
冲突
同时利用 E总线
CPU自动地
将 STM的写
操 作延 迟
一个周期
在流水线的寻址
阶段生成地址
新冲突
数据未准备好
解决
62
发生流水线冲突的 例子
STLM 指 令 后
面 插 入 一 条
NOP指令
在流水线的
执行阶段进
行写操作
读 数 阶 段
将常数 10
写到 AR1
在流水线的寻址
阶段生成地址
E总线 错开
解决
数据准备好
解决
63
4,解决流水线冲突的方法
( 2)用等待周期表解决流水线冲突
等待周期表给出了对存储器映象寄存器以及 ST0,ST1、
PMST的 控制字段进行写操作的各种指令所需插入的等
待周期 。
对双字或三字指令, 都会提供隐含的保护周期 。 利用
这些指令提供的隐含的保护周期, 有时可以不插 NOP指
令 。
64
控制字段 不插入 插入 1个 插入 2个
T
STM #1k,T
MVDK Smem,T
LD Smem,T
LD Smem,T‖ST
所有其它存储指令
包括 EXP
ASM LD #k5,ASMLD Smem,ASM
所有其它存储指

DP
CPL=0
LD #k9,DP
LD Smem,DP
STM # lk,ST0
ST # lk,ST0
所有其它存储指令插入
3个
SXM C16
FRCT OVM
所有存储指令
包括 SSXM和 RSXM
A 或 B 修改累加器然后读MMR
在 RPTB[D]
前读 BRC
STM # lk,BRC
ST # lk,BRC
MVDK Smem,BRC
MVMD MMR,BRC
所有其它存储指

SRCCD
( 在循环中 )
见说明 4
等待周期表 1
65
例 3-11 利用表 3-8等待周期表 1选择插入的 NOP数 。
SSBX SXM
NOP
LD @x,B
由于 LD @ x,B是一条单字指令, 不提供隐含的
保护周期 。 根据表 3-8的等待周期表 1,应当在 SSBX
SXM 指令后插入一条 NOP指令 。 而
SSBX SXM
LD *( x), B
由于 LD *( x), B是一条双字的绝对寻址指令,
它隐含一个等待周期, 故 SSBX指令就不要再插 NOP指
令了 。
ST1第 8位
SXM= 0禁止符号位扩展
SXM= 1允许符号位扩展
66
例 3-12 利用隐含等待周期解决流水线冲突 。
LD @GAIN, T
STM #input,AR1
MPY *AR1+,A
例 3-13 利用表 3-8等待周期表 3插入 NOP周期解决
流水线冲突 。
STLM B,AR2
NOP
STM #input,AR3
MPY 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指令 。
67
第四节 指令系统概述
TMS320C54x是 TMS320系列中的一种定点
数字信号处理器, 它的指令系统分助记符形
式和代数式形式两种 。
共有指令 129条, 由于操作数的寻址方式
不同, 派生至 205条 。
68
可同时读入 2或 3个操作数;
支持双精度运算的 32位长操作数指令;
可进行单条指令重复和块指令重复操作;
有块存储器传送指令和并行操作 ( 如并行存储和加载
,并行存储和加 /减法, 并行存储和乘法, 并行加载和
乘法 ) 指令;
设有条件存储指令及延迟操作指令, 有从中断快速返
回指令;
有为特殊用途设计的指令 ( 如支持 FIR滤波, 最小均方
算法 LSM,多项式计算以及浮点运算 ) ;
有为省电安排的空转指令 。
TMS320C54x指令系统的主要特点
69