2.2 TMS320DM6437 CPU结构
2.2.1 CPU的组成
TMS320DM6437采用TMS320C64x+CPU体系结构,包括8个独立的计算功能单元、2个寄存器组和2条数据通路,如图2-2所示。这2个寄存器组(A和B)都包括32个32位通用寄存器,共64个寄存器。这些通用寄存器既可用于数据,又可用于数据地址指针。数据类型支持封装(Packed)8位数据、封装16位数据、32位数据、40位数据和64位数据,其中大于32位的数据,如40位长或64位长数据被存储到寄存器对(Register Pairs)中,即低32位(LSB)数据放置到偶寄存器(Even Register)中,剩余的高8位或高32位(MSB)放置到紧邻的下一个奇寄存器(Odd Register)中。
图2-2 TMS320DM6437 CPU结构图
这8个功能单元(.M1、.L1、.D1、.S1、.M2、.L2、.D2和.S2)都能够在单个时钟周期内执行一条指令。其中,.M功能单元执行所有的乘法操作,.S和.L单元完成一系列算术、逻辑和分支功能,.D单元主要用于从存储器加载数据到寄存器和将寄存器中的结果保存到存储器中。
每个TMS320C64x+.M功能单元在单个指令周期内能够完成一个32×32位乘法运算,或一个16×32位乘法运算,或2个16×16位乘法运算,或2个16×32位乘法运算,或2个16×16位带加/减功能的乘法运算,或4个8×8位乘法运算,或4个8×8位带加法功能的乘法运算,或4个16×16位带加/减功能的乘法运算。同时,还支持8位和32位数据的有限域(Galois Field,伽罗华域)乘法运算。很多通信算法,如FFT和调制解调都需要作复数乘法(CMPY)运算,复数乘法指令通过接收16位输入,得到包含32位实部和32位虚部的乘法输出。带有舍入功能的复数乘法还可得到一个32位的封装输出,其包含16位实部和16位虚部值。为了满足音频和其他高精度算法的需要,32×32位乘法指令在多种有符号和无符号32位数据类型上提供了扩展精度。
TMS320C64x+中的.L功能单元(算术逻辑单元,ALU)集成了成对通用输入的并行加/减法运算能力,主要用于32位数据或双16位数据的并行加、减法运算,且具有标准的指令格式。
TMS320C64x+内核在多个方面增强了.S功能单元,在TMS320C64x内核中,双16位MIN2和MAX2比较操作仅能在.L单元上执行;而在TMS320C64x+内核中,该操作也可在.S单元上执行,以增强搜索和排序算法的性能。最后,为了增加数据压缩和解压的吞吐率,.S功能单元保证了8位/16位和双16位指令提供的高性能。解压指令为并行16位操作准备8位数据,压缩指令返回并行结果到输出。
2.2.2 CPU数据通路
TMS320DM6437 CPU包含2条数据通路(A和B),如图2-2所示。其组成包括:2个通用寄存器组(A和B)、8个功能单元(.L1、.L2、.S1、.S2、.M1、.M2、.D1和.D2)、2个存储器加载数据通路(L1D和L2D)、2个存储器保存数据通路(ST1和ST2)、2个数据地址通路(DA1和DA2)和2个寄存器数据交叉通路(1X和2X)。其中,在.M单元中dst2为高32位(MBS),dst1为低32位(LBS),src2为64位;在.L和.S单元中,odd dst连接到奇寄存器组(Odd Register Files),even dst连接到偶寄存器组(Even Register Files)。
每个通用寄存器组包含32个32位寄存器(A0~A31为寄存器组A、B0~B31为寄存器组B),如表2-1所示。这些寄存器可用于数据、数据地址指针或状态寄存器。通用寄存器组支持数据范围大小从封装的8位到64位定点,其值大于32位的,如40位和64位,被存储到寄存器对中,即低32位数据存放到偶数序列寄存器中、剩余的高8位或高32位存放到紧邻的下一个奇数序列寄存器中。封装数据类型既可通过4个8位或双16位值存储在单个32位寄存器中,也可通过4个16位值存储在一个64位的寄存器对中。DSP内核中有32个有效寄存器对用于存储40位或64位数据。在汇编语言语法中,寄存器名间的冒号表示寄存器对,奇数序列的寄存器首先被指定。图2-3显示了40位长数据的寄存器存储方法,一个长整型数输入的操作将忽略奇寄存器中的高24位,即奇寄存器中的高24位自动补0,偶寄存器以操作码方式进行编码。
表2-1 40位/64位寄存器组
图2-3 40位数据在寄存器对中的存储方法
在这2条数据通路上,8个功能单元被分成2组,每组4个。在一条数据通路上的每个功能单元等同于另一条数据通路上对应的功能单元,如表2-2所示。TMS320C64x+可以执行TMS320C6x中几乎全部8位到16位指令,如在.M功能单元上,MPYU4单指令可完成4个8×8位无符号乘法运算;在.L功能单元上,ADD4单指令可完成4个8位加法运算。
表2-2 功能单元及操作
大多数数据线支持32位操作数,还有一些支持长整型(40位)和双字(64位)操作数,每个功能单元均有各自的32位写通用寄存器端口,因此,8个功能单元可在每个周期内并行使用。所有以1结束的功能单元(如.L1)将写到寄存器A,以2结束的(如.L2)将写到寄存器B。每个功能单元有2个32位的读端口,用于源操作数src1和src2。4个功能单元内(.L1、.L2、.S1和.S2)有一个附加的8位端口用于40位长整型写操作,以及一个8位输入端口用于40位长整型读操作。由于每个DSP乘法器能够返回高达64位的运算结果,因此,添加了一个从乘法器到寄存器的写端口。
每个功能单元通过其各自的数据通路可直接读/写寄存器组,其中,.L1、.S1、.D1和.M1单元写入寄存器组A,.L2、.S2、.D2和.M2单元写入寄存器组B。寄存器组通过1X和2X交叉数据通路连接到反向寄存器组的功能单元。这些交叉通路允许数据通路上的功能单元来访问其反向寄存器组中对应的32位操作数,即1X交叉通路允许数据通路A上的功能单元从寄存器组B中读取源操作数,2X交叉通路允许数据通路B上的功能单元从寄存器组A中读取源操作数。TMS320C64x+DSP中的8个功能单元都可通过交叉通路访问其反向寄存器组,其中,.M1、.M2、.S1、.S2、.D1和.D2单元中的src2输入可在交叉通路和同侧寄存器组中选择,对于.L1和.L2单元,src1和src2输入都可在交叉通路和同侧寄存器组中选择。
由于TMS320C6000中仅有2条交叉通路(1X和2X),因此,其局限性在于每个周期内仅能从一个数据通路的反向寄存器组中读取源操作数,即每个周期通过交叉通路仅可读取2个源操作数。而同侧的2个单元可同时读取相同的交叉通路源操作数。在TMS320C64x+DSP中,当一个指令尝试通过交叉通路来读寄存器时,将引入一个延迟时钟周期,即产生交叉通路暂停,该暂停由硬件自动插入,不需要NOP指令。值得注意的是,如果正在读取的寄存器是通过LDx指令传送数据的目的寄存器,则不引入该暂停。
此外,TMS320C64x+DSP支持双字加载和保存,有4个32位数据通路用于从存储器加载数据到寄存器组,还有4个32位数据通路用于从每个寄存器组保存寄存器值到存储器。对于寄存器组A,LD1a用于低32位数据的加载通路,LD1b用于高32位数据的加载通路,ST1a用于低32位数据的写通路,ST1b用于高32位数据的写通路。对于寄存器组B,LD2a用于低32位数据的加载通路,LD2b用于高32位数据的加载通路,ST2a用于低32位数据的写通路,ST2b用于高32位数据的写通路。
在2条数据通路中,数据地址通路(DA1和DA2)都与各自的.D功能单元相连。以使任一通路生成的数据地址都可访问寄存器数据。DA1和DA2及其相关的数据通路分别被指定为T1和T2,T1包括DA1地址通路和LD1、ST1数据通路,T2包括DA2地址通路和LD2、ST2数据通路。在DSP中,LD1由LD1a和LD1b组成来支持64位数据加载,ST1由ST1a和ST1b组成来支持64位数据保存。同样,LD2由LD2a和LD2b组成来支持64位数据加载,ST2由ST2a和ST2b组成来支持64位数据保存。
2.2.3 CPU状态控制寄存器
状态控制寄存器(CSR)包含控制位和状态位,如图2-4所示。表2-3详细说明了各状态位的功能,其中,在TMS320C64x+CPU中,PCC和DCC域被忽略。CSR的位15~10为PWRD域,用于节电和唤醒模式,当写CSR时,PWRD域的所有位均应同时配置,逻辑0用于写保留位(位15)。在用户模式(User Mode)下,PWRD、PCC、DCC和PGIE域不能执行写操作,PCC和DCC域只能在管理员模式下被修改。
图2-4 状态控制寄存器(CSR)
表2-3 控制状态寄存器(CSR)域描述