Chapter 2, Slide 1第2章
C6000 硬件结构与指令集
学习的主要内容:
讨论TMS320C6000 CPU 结构 介绍基本指令
讨论C6000存储器的映射
外设的基本组成
Chapter 2, Slide 2一般DSP C6000系统的框图
PER IPHERA LS 内部接口和外设
Central Processing Unit 中央处理单元
Internal Memory 内部存储器
Internal Bus 内部总线
External Memory 外部存储器
下面我们从数字信号处理最基本的运算来研究DSP C6000的最基本的结构,从而了解C6000为什么是采用这样的硬件结构来实现运算的。
数字信号处理最基本的运算是乘加运算。
Chapter 2, Slide 4
执行乘和运算(SOP)
DSP 运算需要的基本运算
DSP 关键算法是SOP
Y =∑a n ×x n
=a1*x1+a2*x2+……an*xn 实现算法操作:(1)乘运算(2)加运算
计算需要两个基本操作指令可以实现,并使用汇编指令实现
Chapter 2, Slide 5
首先是乘运算Multiply (MPY)
Y =∑a n ×x n
=a1*x1+a2*x2+……an*xn 实现算法操作:(1)乘运算MPY a1,x1,Y
这个指令的执行由一个“.M”乘法单元完成
乘法运算单元Multiply (.M unit)
名言有哪些.M
The . M unit performs multiplications in hardware
MPY .M a1, x1, Y
Note: 16-bit ×16-bit =32-bit 结果
32-bit ×32-bit =64-bit 结果
Y =∑a n ×x n
趁机近义词Chapter 2, Slide 7
加如何完成Addition (.?)?
边防学院
.M .?
MPY .M a1, x1, prod ADD .? Y, prod, Y
Y =∑a n ×x n =a 1*x 1+a 2*x 2+……
a n *x n
Chapter 2, Slide 8
采用.L 单元完成加运算Add (.L unit)
C6000 使用寄存器保存操作数,
Y =∑a n ×x n =a 1*x 1+a 2*x 2+……
a n *x n
MPY .M a1, x1, prod ADD .L Y, prod, Y
.M
.L
寄存器文件A Register File –A
Let us correct this by replacing a, x, prod and Y by the
registers as shown above.
Y =∑a n ×x n =a 1*x 1+a 2*x 2+……
a n *x n
MPY .M a1, x1, prod ADD .L Y, prod, Y
.M
.L
a1x1
prod 寄存器文件A 32位A0A1A2
A15
Y
Chapter 2, Slide 10
专用寄存器名字Specifying Register Names
The registers A0, A1, A3 and A4 contain the values to
be ud by the instructions.
Y =∑a n ×x n =a 1*x 1+a 2*x 2+……
a n *x n
MPY .M A0, A1, A3ADD .L A4, A3, A4
.
M
.L
a1x1
prod
寄存器文件A 32位
A0A1A2A3A4
A15
Chapter 2, Slide 11
专用寄存器名字Specifying Register Names
寄存器文件A 包含16个32位寄存器(A0 -A15)。
Y =∑a n ×x n =a 1*x 1+a 2*x 2+……
a n *x n
MPY .M A0, A1, A3ADD .L A4, A3, A4
.M
.L
a1x1
prod
寄存器文件A
32位
A0A1A2A3A4
A15
数据如何加载到寄存器?Data loading
Q: How do we load the
operands into the registers?
我们如何将操作数加载到寄存器
排骨炖豆角土豆.M
.L
a1x1
prod
寄存器文件A
32位
A0A1A2A3A4
A15
Chapter 2, Slide 13
C6000使用加载单元“.D”Load Unit “.D”
A: The operands are loaded into the registers by loading them from the memory using the .D unit.使用.D 单元加载来自数据存储器的数据
重见天日Q: How do we load the
operands into the registers?
.M
.L
a1x1prod
寄存器文件A
32位
数据存储器
.D
这一步值得注意是仅仅通过.D 单元访问存储器
A0
A1
A2A3A4
A15
Chapter 2, Slide 14加载指令Load Instruction
.M
.L
a1x1prod
寄存器文件A
32位
数据存储器
.D
什么样指令可以从存储器加载操作数到寄存器?
A0
A1
A2A3A4
A15
加载指令是(LDB, LDH, LDW, LDDW )
A: The load instructions.
电脑定时关机指令LDB, LDH, LDW, LDDW 以上这些指令可以实现加载操作数从数据存储器到寄存器
Q: Which instruction(s) can be ud for loading operands from the memory to the registers?
.M
.L
八年级上册英语课文翻译
a1
x1
prod
寄存器文件A 32位
数据存储器
.D
A0
A1
A2A3A4
A15Chapter 2, Slide 16
使用加载指令Using the Load Instructions
0000000000000002000000040000000600000008
Data
16-bits
在使用加载单元以
前,我们已经知道是存储器字节可寻址的,是8位;而每个字节对应的地址是唯一的。
DSP 的地址是32位宽,但数据存储的宽度是16位的。
address FFFFFFFF
Chapter 2, Slide 17
具体的加载指令是:
LD *Rn, Rm 这里:
Rn 寄存器中包含地址操作
Rm 是目的寄存器
使用加载指令Using the Load Instructions
0000000000000002000000040000000600000008
Data a1x1
prod
16-bits
Y address FFFFFFFF
现在的问题是:如何将更多字节的数据加载到目的寄存器?
具体的加载指令是:
使用加载指令Using the Load Instructions
0000000000000002000000040000000600000008
Data a1x1prod 16-bits
Y
address FFFFFFFF
答案是与你选择指令有关
•LDB: 加载一个字节(8-bit)•LDH: 加载半个字(16-bit)•LDW: 加载一个字(32-bit)•LDDW: 加载双字(64-bit)注意:LD 指令不存在
LD *Rn, Rm
Chapter 2, Slide 19
使用加载指令Using the Load Instructions
例如:假定A5 = 0x4,那么,表示对应存储器的地址是从0000 0004开始,其内容是01H :
(1) LDB *A5, A7 ; 给A7 = 0x00000001(2) LDH *A5,A7; 给A7 = 0x00000201(3) LDW *A5,A7; 给A7 = 0x04030201(4) LDDW *A5,A7:A6; 给A7:A6 =
0x0807060504030201
具体的加载指令是:
LD *Rn,Rm
0000000000000002000000040000000600000008
Data(Hex)
16-bits
address FFFFFFFF
0B 0A 0D 0C 01020304050607
08
1
Chapter 2, Slide 20
使用加载指令Using the Load Instructions
问题是:如果数据能通过加载指令和.D 单元访问,那么首先Rn 的地址指针是如何加载的?
需要先将一个常数送到Rn ,具体指令如下:
具体的加载指令是:
LD *Rn, Rm
0000000000000002000000040000000600000008
Data(Hex)
16-bits
address FFFFFFFF
0B 0A 0D 0C 01020304050607
08
1
这MVKL 指令容许加载16位常数到寄存
器:子宫出血怎么办
MVKL
.?
a, A5
a 常数或标号,?放在后面讨论,即采用什么寄存器
如何填满32 bits 寄存器?
加载地址指针到Rn (Loading the Pointer Rn)
Chapter 2, Slide 22
解决这个问题的另外一条指令是:
MVKH
加载地址指针到Rn Loading the Pointer Rn
即
MVKH
.?
a, A5
(a 常数或标号)
ah ah
x
al a A5
MVKL a, A5 MVKH
a, A5
最终加载32位地址到寄存器需要如下两条指令实现:
先后
Chapter 2, Slide 23
加载地址指针到Rn (Loading the Pointer Rn)
MVKL 0x1234FABC, A5 A5 = 0xFFFFFABC ; Wrong
MVKH 0x1234FABC, A5 A5 = 0x1234FABC ; OK 例如1 ,A5原来地址是:A5 = 0x87654321
MVKL 0x1234FABC, A5 A5 = 0xFFFFFABC 例2
MVKH 0x1234FABC, A5 A5 = 0x12344321
需要先使用MVKL ,然后使用MVKH, 看如下例子:
正确操作
错误操作
使用LDH, MVKL 和MVKH 指令
pt1 and pt2 point to some locations in the data memory.
MVKL pt1, A5MVKH pt1, A5 MVKL pt2, A6MVKH pt2, A6
LDH .D *A5, A0LDH .D *A6, A1MPY .M A0, A1, A3ADD .L A4, A3, A4
.M
.L
a1x1
prod
寄存器文件A 32位
A0A1A2
A15
.D
数据存储器
Chapter 2, Slide 25建立循环,完成全部运算Creating a loop
MVKL pt1, A5MVKH pt1, A5 MVKL pt2, A6MVKH pt2, A6LDH .D *A5, A0LDH .D *A6, A1MPY .M A0, A1, A3ADD
.L
A4, A3, A4
到目前为止仅仅讨论一步SOP 运算:
Y= a 1*x 1
所以建立循环可以实现N 次SOP 运算
Chapter 2, Slide 26建立循环,完成全部运算Creating a loop
到目前为止仅仅讨论一步SOP 运算:
Y= a 1*x 1
所以建立循环可以实现N 次SOP 运算对于C6000系列处理器没有专门的块循环指令,而是使用B 指令建立循环。
建立一个循环的5个步骤
1. 建立一个标号到分支。
2. 加分支指令B 。
3.建立一个循环计算器。
4. 加一个递减指令到循环计算器。
5.标识这分支条件,是基于循环计算器的数值。
Chapter 2, Slide 28
1. 建立一个标号到分支
建立循环:第1步
建立一个标识到分支循环位置
MVKL pt1, A5MVKH pt1, A5 MVKL pt2, A6MVKH pt2, A6LDH
.D *A5, A0LDH .D *A6, A1MPY .M A0, A1, A3ADD
.L
A4, A3, A4
loop Chapter 2, Slide 29
2.加分支指令B.
第2步:加一个分
支指令B
loop MVKL pt1, A5MVKH pt1, A5 MVKL pt2, A6MVKH
pt2, A6
LDH .D *A5, A0
LDH .D *A6, A1MPY .M A0, A1, A3ADD .L A4, A3, A4B .? loop
什么样的单元被使用于B 指令?
.M
.L
a1x1
prod
寄存器文件A 32位
A0A1A2
A15.D
数据存储器
.S loop MVKL
pt1, A5MVKH pt1, A5 MVKL pt2, A6MVKH pt2, A6
LDH .D
*A5, A0LDH .D *A6, A1MPY .M A0, A1, A3ADD .L A4, A3, A4B .? loop