DSP技术与应用实例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 中央处理器

TMS320C54x的中央处理器(CPU)由运算部件和控制部件组成,包括:

● 一个40位的算术逻辑单元(ALU);

● 两个40位的累加器(ACCA和ACCB);

● 一个桶形移位器;

● 17×17位乘法器;

● 40位加法器;

● 比较、选择和存储单元(CSSU);

● 指数编码器;

● 各种CPU寄存器(CPU寄存器是存储器映射的,能够快速恢复和保存)。

2.3.1 运算部件

1.算术逻辑单元(ALU)

TMS320C54x使用一个40位的算术逻辑单元(ALU)和两个40位的累加器(ACCA和ACCB)来完成二进制补码的算术运算。同时,ALU也能完成布尔运算,如图2-2所示。

图2-2 ALU功能框图

ALU的X输入端的数据为以下两个数据中的任意一个:

① 移位寄存器的输出(32位或16位数据存储器操作数及累加器中的数值,经移位寄存器移位后输出);

② 来自数据总线DB的数据存储器操作数。

ALU的Y输入端的数据为以下4个数据中的任意一个:

① 累加器A中的数据;

② 累加器B中的数据;

③ 暂存器T中的数据;

④ 来自数据总线CB的数据存储器操作数。

ALU能起两个16位ALU的作用,且在状态寄存器ST1中的C16位置位(1)时,可以同时完成两个16位运算。

ALU的输出为40位,被送往累加器A或B。

2.累加器

累加器A和B中存放从ALU或乘法器/加法器单元输出的数据,累加器也能输出到ALU或乘法器/加法器中。累加器A和B都可分成3个部分,如图2-3所示。

其中,保护位作为计算时的数据位余量,防止在迭代运算(如自相关)中产生的溢出。

累加器在CPU中的表示如图2-4所示。AG,BG,AH,BH,AL和BL都是存储器映射寄存器,由特定的指令将其内容存放到数据存储器中,以及从存储器中读出或写入32位累加器值。同时,任何一个累加器都可作为暂存器使用。累加器A和B的差别仅在于累加器A的31~16位可以用做乘法器的一个输入。

图2-3 累加器A和B

利用STH、STL、STLM和SACCD等指令或并行存储指令,将累加器的内容存放到数据存储器中。在存储前,有时需要对累加器的内容进行移位操作。右移时,AG和BG中的各数据位分别移至AH和BH;左移时,AL和BL中的各数据位分别移至AH和BH,低位填0。

图2-4 累加器在CPU中的表示

【例2-1】假设累加器A=FF1234 5678h,执行带移位的STH和STL指令后,数据存储单元T中的结果如下:

            STH  A,8,T        ;T=3456 H  (累加器A左移8位后,高位存放在存储单元T中)
            STH  A,-8,T       ;T=FF12 H  (累加器A右移8位后,高位存放在存储单元T中)
            STL  A,8,T        ;T=7800 H  (累加器A左移8位后,低位存放在存储单元T中)
            STL  A,-8,T       ;T=3456 H  (累加器A右移8位后,低位存放在存储单元T中)

3.桶形移位器

桶形移位器的功能框图如图2-5所示。

图2-5 桶形移位器的功能框图

40位的桶形移位器的输入端接至:

① DB,取得16位输入数据;

② DB和CB,取得32位输入数据;

③40位累加器A或B。

桶形移位器的输出端接至:

① ALU的一个输入端;

② 经过MSW/LSW(最高有效字/最低有效字)写选择单元至EB总线。

桶形移位器能把输入的数据进行0~31位的左移和0~16位的右移,所移的位数由ST1中的移位数域(ASM)或被指定作为移位数寄存器的暂存器(TREG)决定。桶形移位器和指数译码器可把累加器中的值在一个周期中进行归一化,移位输出的最低位填0,最高位可以填0或进行符号扩展,这由ST1中的符号扩展方式位(SXM)决定。这种外加的移位能力能使处理器完成数字定标、位提取、扩展算术和溢出保护等操作。

指令中的移位数就是移位的位数。移位数都用2的补码表示,正值表示左移,负值表示右移。移位数可用以下3种方式来定义:

① 一个立即数(-16~15);

② 状态寄存器ST1的累加器移位方式(ASM)位(共5位,移位数为-16~15);

③ T寄存器中最低6位的数值(移位数为-16~15)。

【例2-2】对累加器A执行不同的移位操作。

            ADD  A,-4,B                ;累加器A右移4位后加到累加器B中
            ADD  A,ASM,B               ;累加器A按ASM规定的移位数移位后加到累加器B中
            NORM A                       ;按T寄存器中的数值对累加器进行归一化

最后一条指令对累加器中的数进行归一化是很有用的。假设40位的累加器A中的定点数为FFFFFFF001H,先用EXP A指令,求得它的指数为13H,放在T寄存器中;再执行NORM A指令,就可以在单个周期内将原来的定点数分成尾数FF80080000H和指数13H两部分了。

4.乘法器/加法器单元

乘法器/加法器和一个40位的累加器在一个单指令周期内完成17×17位的二进制补码运算。乘法器/加法器单元由以下部分组成:乘法器、加法器、带符号/无符号输入控制、小数控制、零检测器、舍入器(二进制补码)、溢出/饱和逻辑和暂存器(TREG)。图2-6所示是它的功能框图。

图2-6 乘法器/加法器的功能框图

乘法器有两个输入:

① 从TREG(T)、数据存储器操作数(D)或一个累加器(A)中选择;

② 从程序存储器(P)、数据存储器(D)、一个累加器(A)或立即数(C)中选择。

快速的片内乘法器能使 TMS320C54x有效地完成卷积、相关和滤波等运算。另外,乘法器和ALU在一个指令周期内共同执行乘/累加(MAC)运算且并行ALU运算。这个功能可以用来确定欧几里得距离,以及完成复杂的DSP算法所需的LMS滤波。

乘法器的输出加到加法器的输入端,累加器A或B则是加法器的另一个输入,最后结果送往目的累加器A或B。

5.比较、选择和存储单元

比较、选择和存储单元(CSSU)完成累加器的高位字和低位字之间的最大值比较,即选择累加器中较大的字并存储在数据存储器中,不改变状态寄存器ST0中的测试/控制位和传送寄存器(TRN)的值。图2-7所示是CSSU的功能框图。

图2-7 CSSU的功能框图

CSSU与ALU配合,可以实现数据通信与模式识别领域常用的快速加法/比较/选择ACS(Add,Compare,Select)运算,如Viterbi型蝶形算法等。

6.指数编码器

指数编码器是用于支持单周期指令EXP的专用硬件。在EXP指令中,累加器中的指数值能以二进制补码的形式存储在T寄存器中,范围为8~31位。指数值定义为前面的冗余位数减8的差值,即累加器中为消除非有效符号位所需移动的位数。当累加器中的值超过32位时,该操作将产生负值。

有了指数编码器,就可以用EXP和NORM指令对累加器的内容进行归一化了。

【例2-3】

            EXP      A                  ;(冗余符号位-8)→T寄存器
            ST       T,EXPONET         ;将指数值存到数据存储器中
            NORM     A                  ;对累加器进行归一化(累加器按T中值移位)

2.3.2 控制部件

控制部件是TMS320C54x芯片的中枢神经,由各种控制寄存器及流水线指令操作控制逻辑组成,用以设定以时钟频率为基准(机器周期)的整个芯片的运行状态。控制器控制CPU的时序,并按时间序列发出一系列控制命令,完成指令的预取、取指令、译码、取操作数及执行等操作,各部分硬件电路组成一个高效的整体。

TMS320C54x共有3个16位寄存器作为状态和控制寄存器。它们都是存储器映像寄存器,可以方便地写入数据,或者由数据存储器对它们进行加载。

1.处理器工作方式控制及寄存器PMST

PMST(processor mode status)主要设定并控制处理器的工作方式,反映处理器的工作状态,其各位的定义如图2-8所示。

图2-8 PMST各位的定义

IPTR(interrupt vector pointer):中断向量指针。IPTR的9位字段(15~7)中断向量驻留的128字的程序存储区地址。自举加载时,可将中断向量重新映射至RAM。复位时,这9位全置成1。复位向量总是驻留在程序存储空间的地址FF80H。RESET复位指令不影响这个字段的内容。

MP/MC(micro process/micro computer):微处理器或微计算机工作方式选择。这一位的信息可由硬件连接方式决定,也可以由软件置位(1)或清零(0)选择,但复位时由硬件引脚连接方式决定。芯片复位时,CPU采样此引脚MP/MC的电平,当电平为高时,芯片工作于微处理器状态,不能寻址片内的程序存储器(片内 ROM);当电平为低时,芯片工作于微计算机状态,可以寻址片内的程序存储器。

OVLY(overlay):RAM重复占位标志。若此位置位,OVLY=1,则允许片内双寻址数据RAM块映射到程序空间,即将片上RAM作为程序空间寻址。数据0页(0~7FH)为特殊寄存器空间,不能映射。若此位清零,OVLY=0,则片上RAM只能作为数据空间寻址。

AVIS(address visibility):地址可见控制位。若此位置位,AVIS=1,则允许在地址引脚上看到内部程序空间的地址内容,且当中断向量驻留在片内存储器时,可以连同IACK与地址译码器一起对中断向量译码。若此位清零,AVIS=0,则外部地址线上的信号不能随内部程序地址一起变化,控制线和数据线不受影响,地址总线为总线上的最后一个地址。

DROM(data ROM):数据ROM位,用来控制片内ROM是否映射到数据空间。DROM=0,片内ROM不能映射到数据空间;DROM=l,片内ROM可以映射到数据空间。

CLKOFF(clock off):时钟关断位。CLKOFF=1,CLKOUT引脚禁止输出,保持为高电平;CLKOFF=0,CLKOUT输出时钟脉冲。

SMUL(saturation on multiplication):乘法饱和方式位。SMUL=1,使用多项式加MAC或多项式减MAS指令进行累加时,对乘法结果进行饱和处理,而且,只有当OVM=1,FRCT=1时,SMUL位才起作用。只有LP器件有此状态位,其他器件此位均为保留位。饱和处理的方式为:当执行MAC或MAS时,进行多项式加或减之前,小数模式的8000H×8000H饱和处理成为7FFF FFFFH。此时,MAC指令等同于OVM=1时的多项式乘MPY+加法ADD。如果不设定小数模式,且OVM=1,在完成加或减之前,乘法结果不进行饱和处理,只对MAC或MAS执行的结果进行饱和处理。

SST(saturation on store):存储饱和位。SST=1,对存储前的累加器进行饱和处理。饱和处理是在移位操作执行完成之后进行的。执行下列指令可以进行数据存储前的饱和处理:STH,STL,STLM,DST,ST||ADD,ST||LT,ST||MACR[R],ST||MAS[R],ST||MPY,ST||SUB。数据存储前的饱和处理步骤如下。

● 根据指令要求对累加器的40位数据进行移位。

● 将40位数据饱和处理成32位数据,饱和处理与SXM位有关。如果SXM=0,数据为正,如果数值大于7FFF FFFFH,则饱和处理的结果为7FFF FFFFH;如果SXM=1,若移位后,数值大于7FFF FFFFH,则饱和处理的结果为7FFF FFFFH;若移位后数值小于8000 0000H,则生成8000 0000H。

● 按指令要求操作数据。

● 在指令执行期间,累加器的内容不变。

2.状态寄存器ST0

ST0(Status 0)反映寻址要求和计算的中间运行状态,其各位的定义如图2-9所示。

图2-9 ST0各位的定义

ARP(assistant register pointer):辅助寄存器指针,用于间接寻址单操作数的辅助寄存器的选择。当DSP处于标准运行方式时(CMPT=0),ARP=0。

TC(test control signal):测试/控制标志。用来保存ALU的测试位操作结果。同时,可由TC的状态(0或1)控制条件分支的转移和子程序调用,并判断返回是否执行。

C(carry):进位标志。加法进位时,置位。减法借位时,清零。在加法无进位或减法无借位的情况下,完成一次加法,此标志位清零;完成一次减法,此标志位置位。带16位移位操作的加法只能对它置位,而减法只能清零。此时,加减操作不影响进位标志。

OVA(overflow of A):累加器A的溢出标志。当ALU运算结果送入累加器A且溢出时,OVA置位。运算时一旦发生溢出,OVA将一直保持置位状态,直到硬件复位或软件复位后,方可解除此状态。

OVB(overflow of B):累加器B的溢出标志。当ALU运算结果送入累加器B且溢出时,OVB置位。运算时一旦发生溢出,OVB将一直保持置位状态,直到硬件复位或软件复位后方可解除此状态。

DP(data memory page pointer):数据存储器页指针。将DP的9位数作为高位与指令中的低7位作为低位结合,形成16位直接寻址方式下的数据存储器地址。这种寻址方式要求ST1中的编译方式位CPL=0,DP字段可用LD指令加载一个短立即数或从数据存储器加载。

3.状态寄存器ST1

ST1(status1)反映寻址要求,计算的初始状态设置,I/O及中断控制,其各位的定义如图2-10所示。

图2-10 ST1各位的定义

BRAF(block repeat action flag):块重复操作标志。此标志置位,表示正在执行块重复操作指令;此位清零,表示没有进行块操作。

CPL(compiler mode):直接寻址编辑方式标志位,标志直接寻址选用何种指针。此位置位,CPL=1,表示选用堆栈指针(SP)的直接寻址方式;此位清零,CPL=0,表示选用页指针(DP)的直接寻址方式。

XF(external flag):XF引脚状态控制位,控制XF通用外部I/O引脚输出状态。可以通过软件置位或清零控制XF引脚输出电平。

HM(hold mode):芯片响应HOLD信号时,CPU保持工作方式标志。此位置位,表示CPU暂停内部操作;此位清零,标志CPU从内部处理器取指令继续执行内部操作,外部地址、数据线挂起,呈高阻态。

INTM(interrupt mode):中断方式控制位。此位置位(INTM=1,由SSBX指令控制),关闭所有可屏蔽中断;此位清零(=0,由RSBX指令控制),开放所有可屏蔽中断。此位不影响不可屏蔽中断RS。NMI不能用存储器操作设置。

O:保留。

OVM(overflow mode):溢出方式控制位。此位确定溢出时累加器内容的加载方式。此位置位,若ALU运算发生正数溢出,则目的累加器置成正的最大值(007FFFF FFFH);若发生负数溢出,则置成负的最大值(FF80000000H)。此位清零,直接加载实际运算结果。此位可由指令SSBX和RSBX置位或清零。

SXM(sign-extension mode):符号位扩展方式控制位,用以确定符号位是否扩展。此位置位,SXM=l,表明数据进入ALU之前进行符号位扩展;此位清零,SXM=0,表示数据进入ALU之前符号位禁止扩展。此位可由指令SSBX和RSBX置位或清零。

C16(double-precision arithmetic mode):双16位/双精度算术运算方式控制位。此位置位,C16=1,表示ALU工作于双16位算术运算方式;此位清零,C16=0,表示ALU工作于双精度算术运算方式。

FRCT(fraction mode):小数方式控制位。此位置位,FRCT=1,乘法器输出自动左移1位,消去多余的符号位。

CMPT(compatibility mode):间接寻址辅助寄存器修正方式控制位。此位置位,CMPT=1,除AR0外,当间接寻址单个数据存储器操作数时,可以通过修正ARP内容改变辅助寄存器AR1~AR7的值来实现;此位清零,CMPT=0,ARP必须清零,且不能修正。

ASM(accumulate shift mode):累加器移位方式控制位。5位字段的ASM规定从-16~15的位移位(2的补码),可以用数据存储器或使用LD指令(短立即数)对ASM加载。