1、,DSP54.21,DSP54.22,2。 TMS320C54x 结构概述 TMS320C54x 内部硬件结构图(1)总线结构 4组8条16bit总线程序 PB-PAB 数据读 数据写 EB-EAB 程序总线的改进功能例:MACP Smem, pmad, src ; (Smem)(pmad)+(src) srcMVDP Smem, pmad ; (Smem) (pmad)MVPD pmad, SmemREADA Smem ; A PAR , (PAR) SmemFIRS Xmem, Ymem, pmad ;,DSP54.23,DSP54.24, 片内外设通过一组双向寻址总线进行 表 1-3 各
2、种读 / 写方法用到的总线 (2)片内存储器 分类:程序空间、 数据空间、 I/O空间 类型: 功能:ROM-一般配置成程序存储空间RAM-一般配置成数据存储空间(根据PMST 的有关状态位可以互相复用) C5402 存储器结构图-讲义图23 C5402存储器配置 扩展程序存储器空间-讲义图24 I/O存储器:片外64K字寻址空间(用PORTW和PORTR进行寻址),DSP54.25,(3)中央处理单元(CPU) CPU 的基本组成 (教材P.19)1。 ALU算术逻辑运算单元主要由40位ALU和两个40位累加器(ACCA和ACCB)组成,如讲义图25所示 输入源 输出图选项说明:1)SXM:
3、来自16bit数据存储器数时,DSP54.26,OVM: 溢出方式控制正向溢出饱和:007FFFFFFF0负向溢出饱和:FF80000000 0 3) C : 进位位 进位置1;相减借位置0; 作为条件操作数,进行分支转移,调用或返回;例:BC 1000h, C;if (C=1) , then pmad PC4) 双16bit 长字运算 C16=1,ALU工作在双 16bit方式指令,见教材表18(p.26); 双精度运算(32-bit)举例及高(16-bit)和低(16-bit)位在存储器中的排 列问题,参见 教材p.150,DSP54.27,要点:指令中给出的地址,存取的总是高16bit
4、地址操作数;* AR3指向偶地址:偶地址放在高位奇地址(偶地址+1)放在低位*AR3指向奇地址:奇地址放在高位偶地址(奇地址-1)放在低位2。累加器A和B1)功能: 作为乘/加或ALU的目的寄存器(dst)MAC *AR2+, *AR3+, A, B; (Xmem)(Ymem)+(src) dst 进行并行操作 LD *AR2+,A ;dst=Xmem16| MAC *AR3+,B ; | dst_=dst_+Ymem T,DSP54.28, 用作 MIN 和 MAX 指令操作MAX dst ;dst=max(A,B)MIN dst ;dst=min(A,B)例: max : RPTBD do
5、ne-1LD *AR1+, A ; 执行循环前,对A,B加载LD *AR1+, B ; (1w/1c)MAX B ; 最大值放在BLD *AR1+, A done : 1628 AR12397567-2345 ,DSP54.29,2) 组成: 累加器A:3932(保护位) 3116(高位) 150(低位)累加器B:3932(保护位) 3116(高位) 150(低位) 它们都是mmregs (见讲义p.1-9); A和B的区别:累加器A的(32 16bit)(hi(A) 可以作为乘/加单元的乘法器输入;3)保存累加器内容的指令:STH STL STLM SACCD(见教材 p.21),AG AH
6、 AL,BG BH BL,DSP54.210,条件:AEG, BEG : =0 ANEG, BNEG : 0AGT, BGT : 0 AGEQ, BGEQ : 0ALT, BLT : 0 ALEQ, BLEQ : 0,SACCD src, Xmem, cond,if (cond.) then (src)(ASM-16) Xmem else (Xmem) (Xmem),DSP54.211,例:STH A, 8, TEMP ; (A)=FF 4321 1234h; (TEMP)=2112hSACCD A, *AR3+, ALT ; 条件存储例子(A)=FF FE00 4321 (A)=FF FE0
7、0 4321(ASM)= 01 (ASM)= 01AR3= 0202 AR3= 0203(0202h)= 0101 (0202h)= FC00,DSP54.212,4) 累加器的移位(Shift)和循环移位(Rotate)操作 算术移位: SFTA src, shift ,dst ; -16 shift 15C 39-32 31-0 0 左移 SX 39-32 31-0 C 右移受SXM影响例: SFTA A,-5,B(A)=FF 8765 0055 (A)= FF 8765 0055 (B)=00 4321 1234 (B)= FF FC3B 2802 (C)=0 (C)=1SXM=1 SX
8、M=1,DSP54.213, 逻辑移位: SFTL src, shift ,dst ; -16 shift 15C 0 0 31-0 0 左移 0 0 0 31-0 C 右移 * 保护位清零,不受SXM影响 例: SFTL A,-5,B(A)=FF 8765 0055 (A)= FF 8765 0055 (B)=00 4321 1234 (B)= 00 043B 2802 (C)=0 (C)=1,DSP54.214, 累加器循环左移: ROL src C 0 0 31-0 左移 累加器循环右移: ROR src C 0 0 31-0 右移,DSP54.215, 条件移位: SFTC src ;
9、 if src(31)=src(30) then src=src1*通常用来对累加器32位数归一化,以消去多余的符号位,同时使 (TC)=1;累加器带TC位循环左移: ROLTC srcC 0 0 31-0 TC,DSP54.216,5) 饱和时累加器值的存储: SAT src ; PMST(0)=SST=1按指令要求对累加器40-bit值进行移位;40-bit值经移位操作限制到 32-bit: 若 SXM=0 (A) 7FFF FFFFh则以 7FFF FFFFh 处理 若 SXM=1 (A) 7FFF FFFFh则以 7FFF FFFFh 处理 若 (A) 8000 0000h则以 800
10、0 0000h 处理按指令要求存储数据;*参看教材p.31续表1-11 PMST(0)=SST的说明,DSP54.217,例 (A)=7F FFFF 0000h AR1= 100h STH A, -4, *AR1+; (100)=7FFFh(100)=5555h SXM=1 STL A, -4, *AR1+; (100)=FFFFhSST=1 说明:A移-4位后为:(A)=07 FFFF F000h 7FFF FFFFh ,饱和处理: (A)=7FFF FFFFh,DSP54.218,6)累加器专用指令:FIRS Xmem, Ymem, pmad; B=B+Apmad, A=(Xmem+Yme
11、m)16LMS Xmem, Ymem; B=B+Xmem Ymem, A=(A+Xmem16)+215SQDST Xmem, Ymem; B=B+A(32-16) A(32-16) ,A=(Xmem-Ymem)163。 桶形移位器 (Barrel shift) 作用:将输入数据左移031或右移016, 经常用作数据定标,位提取,扩展算术和溢出保护等操作; 输入:DB(16-bit), DB和CB(32-bit) A和B(40-bit),DSP54.219, 输出:ALU,经MSW/LSW写选择,送到写总线EB; 移位位数:用2的补码表示,正值左移(0 31),负值右移(0 -16) 立即数:-
12、1615 ST1中的ASM(4 0): -1615 T寄存器中的低6位: -1631乘法器/加法器单元1)作用:完成(17-bit 17-bit)乘法运算, 输出耦合到40-bit相加器,MAC 指令在流水情况下做到1个指令周期,DSP54.220,2) 乘法器输入的选择:,DSP54.221,3)乘法类型: (unsignedunsigned): 对16-bit操作数,第17位填零;MPYU Smem, dst ; dst=uns(T) uns(Smem) (unsignedsigned): 一个第17位填零,另一个符号扩展; (signedsigned): 两者用符号扩展成17-bit数;
13、 若设置为小数模式:SSBX FRCT乘法结果左移一位,消去多余的符号位,DSP54.222,4) T寄存器提供一个操作数 可以用支持mmreg寻址的指令装入LD Smem, T 有时在乘法操作后,自动隐含装入例: MAC Xmem, Ymem, src ,dst; dst=src+Xmemymem , T=Xmem 5) 乘法累加指令 :MAC=MPY+ADD 6) MAC和MAS 中相乘时饱和的处理:当 OVM=1 和 FRCT=1 时 若 PMST(1)=SMUL=1,则对乘法结果作饱和处理后再相加; 若 PMST(1)=SMUL=0,则对乘法相加后最终结果作饱和处理;,DSP54.22
14、3,5。比较、选择和存储单元 (CSSU)1) 功能: 利用优化的片内硬件资源完成数据通信、模式识别等领域中的维特比(Viterbi)蝶形运算; 完成累加器的高位字(3116)和低位字(150)的最大值比较;2) Viterbi运算原理:AH,AL J 2*J old state new state 2*J+1 BH,BL J+8,DSP54.224,D-cod: LD *AR2, T T=M DADST *AR5, A AH=(2*J) M, AL=(2*J+1) MDSADT *AR5+, B BH=(2*J) M, BL=(2*J+1) MCMPS A, *AR4 (J)=max(AH,
15、AL), etc.CMPS B, *AR3 (J+8)=max(BH,BL), etc.,AR5 AR4AR3,Metrics J,Metrics J+8,Metrics2*J & 2*J+1,0Old state 15,16 24 New state 31,DSP54.225,说明: 相加操作是由ALU完成,此时ALU配置成双16-bit模式(C16=1),DADST指令把两数和(Lmem(3116)+(T) dst(3916)两数差(Lmem(150)-(T) dst(150)在一个机器周期内完成两次16-bit数的相加; 利用CMPS指令和比较器、过渡寄存器完成比较选择,状态转移寄存器T
16、RN自动记录比较的结果;CMPS A,*AR4 ; if A(3116) A(150) then A(3116) *AR4 else A(150) *AR4 (TRN1)+ 0 TRN (TRN1)+ 1TRN0 TC 1TC,DSP54.226,6. 指数编码器:1) 功能: 支持单周期指令EXP的专用硬件, 求得的累加器中的指数值以二进制补码形式存储在T寄存器的(50)位;*指数范围:-831(即TS移位值) ;2) C54x中定点数的指数表示:定点数=尾数2指数 (尾数与指数用补码表示)例:定点数 0x2000=(0.25)10=0.52 1 则:尾数=0x4000, 指数=1,DSP5
17、4.227,3) 指数值计算:EXP src ; if (src)=0 then 0T; else (src冗余符号位8) T 累加器的指数值=冗余符号位8 冗余符号位数是对整个累加器40bit而言,即包括8位保护位,这也就是( 8 )的原因; 当累加器的值超过32位,指数值为负值;4) 指数运算举例:(参考教材p.157)例1:EXP A; A=FF FFFF FFCB A=FF FFFF FFCB (-53)10T= 0000 T= 0019 (25)10,DSP54.228,例2:EXP A; A=07 8543 2105 A=07 8543 2105T= 0007 T= FFFC (-
18、4)105) 常用程序:EXP AST T , *AR2NORM A ; 这条指令不能紧跟在EXP指令后面,因为EXP指令还没有将指数值送至T,NORM指令只能按原来的T值移位,造成规格化错误。,DSP54.229,4. CPU状态寄存器和控制寄存器 C54x共有3个16位状态和控制寄存器(PMST、ST0、 ST1)它们都是存储器映象寄存器,可以方便地写入数据,或由数据存储器对它们加载。(1) PMST(Processor Mode Status)寄存器 用于设定并控制处理器的工作方式,反应处理器的工作状态。 复位值为FF80H。157 6 5 4 3 2 1 0IPTR OVLY AVIS
19、 DROM CLKOFF SMUL SST各状态位功能详见教材p.30,表1-11,DSP54.230,(2) 状态寄存器ST0:反应寻址要求和计算的中间运行状态。复位值为1800H。1513 12 11 10 9 80ARP TC C OVA OVB DP各状态位功能详见教材p.27,表19(3) 状态寄存器ST1:反应寻址要求、计算的初始状态设置、I/O及中断控制。复位值为2900H。15 14 13 12 11 10 9 8 7 6 5 40BRAF CPL XF HM INTM 0 OVM SXM C16 FRCT CMPT ASM各状态位功能详见教材pp.2730,表110,DSP54.231,