第2讲TS系列DSP内核结构_第1页
第2讲TS系列DSP内核结构_第2页
第2讲TS系列DSP内核结构_第3页
第2讲TS系列DSP内核结构_第4页
第2讲TS系列DSP内核结构_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2讲TS系列DSP内核结构

主讲秦国栋1ComputeBlockRegisters第2讲内容提示2.1概述2.2运算模块2.3IALU

2.4TS101程序控制器2.5TS20x程序控制器2ComputeBlockRegisters2.1概述TigerSHARC系列TS101的内核结构计算块寄存器ALU程序控制器:指令对齐缓冲(IAB),分支目标缓冲(BTB)三套128位总线3ComputeBlockRegistersADSPTS101原理框图4ComputeBlockRegistersTS101的内核结构M0M1M2Sequencer128-entryBTB128bJ-RFJALU031128b128bK-RFKALU031128bProcElYRF031ALUMultShiftALUProcElXRF031ALUMultShiftExternalPortDMAPeripherals两个计算模块程序控制器内部储存器3套内部总线2个IALU5ComputeBlockRegistersADSPTS201原理框图6ComputeBlockRegistersTS201S与TS101S内核结构区别时钟频率:TS201S达到600MHz,指令周期为1.67ns;而TS101S的最高内核时钟频率是300MHz,相应的指令周期为3.33ns。内部存储器容量:TS201S为24Mbits,存储器类型为EDRAM(嵌入式DRAM);而TS101S6Mbits,存储器类型为SRAM。TS201S的内部存储器被划分为6个存储块,每个块4Mbits;TS101S的内部存储器被划分为3个存储块,每个块2Mbits。TS201S内部有4套相互独立的128位宽度的数据总线,每条总线分别连接六个4Mbit内部存储器块(Bank)中的一个,提供4字的数据、指令及I/O访问和33.6GB/s的内部存储器带宽。而TS101S的内部只有3套128位宽度的总线。数据总线:TS201S内部有4套相互独立的128位宽度的数据总线,每条总线分别连接六个4Mbit内部存储器块(Bank)中的一个,提供4字的数据、指令及I/O访问和33.6GB/s的内部存储器带宽。而TS101S的内部只有3套128位宽度的总线。7ComputeBlockRegistersCLU

:TS201S内核中改进和增强了通信逻辑处理单元(CLU)功能,支持Viterbi和Turbo解码、CDMA通信中的复数相关应用等。TS201S的CLU成为运算模块中与ALU、乘法器和移位器并列的专门处理单元。指令流水:TS201S的指令流水增加了2级,为10级指令流水。在TS101S的8级指令流水的基础上,指令预取由3级变为4级,又增加了1级指令预译码级流水,共同构成了10级指令流水。链路口:TS201S的链路口的接口标准改为了LVDS标准电平,提高了数据传输率和可靠性,当单个链路口工作在500MHz时,数据传输率为每秒1000MB。TS101S的链路口的接口标准为LVTTL标准电平,其数据传输率低于TS201S,当单个链路口工作在125MHz时,数据传输率为每秒250MB。8ComputeBlockRegisters2.2处理器运算模块9ComputeBlockRegisters2.2.1核寄存器

计算块–3种运算单元核处理器–寄存器组计算块–寄存器存储器映射寄存器非储存器映射的寄存器数据类型&数据大小操作数大小寄存器命名

指令语法

10ComputeBlockRegisters核处理器–三种运算单元

MultALUShifterCtrl&DependencyCheckUnitRegisterFile32x32DABInternalBuses128x36464128128ALU、乘法器、移位器11ComputeBlockRegistersComputationblockXRegFile031ALUMultShiftUnmapped存储器映射-通用寄存器组(RF).32x32

可以被以下访问: -处理器核

-外部总线设备非储存器映射寄存器–对于全局状态(XSTAT/YSTAT)专门用于:-ALU-乘法器-移位器

CompblockXALUMultShiftRegFile计算块–寄存器计算块X&Y都包含两种类型的寄存器:存储器映射的寄存器非储存器映射的寄存器12ComputeBlockRegistersXR31XR0Xcomputationblock....YR31YR0Ycomputationblock....存储器映射寄存器寄存器组特征:32个寄存器,每个32位宽硬件互锁可以被所有的转移指令访问访问寄存器组–用于正常字,长字,或者四字。32-bits32-bits13ComputeBlockRegistersALUComputationblockXRegisterFile0STATUSALUMultShiftPRMRBFOTMP32非储存器映射寄存器非储存器映射寄存器是:全局状态寄存器(XSTAT/YSTAT)ALU(PRx)寄存器乘法器(MRx)寄存器移位器(BFOTMP)寄存器14ComputeBlockRegisters数据类型和数据字长

处理器支持的数据格式:定点/浮点整数/小数有符号数/无符号数复数处理器支持的数据字长:8位–字节16位–短字32位–正常字64位–长字,

双字,四字

15ComputeBlockRegisters数据字宽/操作数长度

处理器的基本单位是32位(寄存器宽度)少于32-位的数据类型打包成一个32位进入寄存器多个寄存器组合到一起支持大于32位的数据类型举例:-64位输出(双寄存器)-操作把数据看作4个16位的操作数-结果是4个16位的值。

短字指令6304个16位的操作数4个16位的操作数4个16位结果630操作数字长

+/-+/-+/-+/-16ComputeBlockRegisters寄存器–寄存器名称使用规则通用寄存器命名约定{X|Y|XY}[letter][#]或者{X|Y|XY}[letter][#]:[#]单寄存器R1 XR14 YR23双寄存器(两个寄存器中标号最小的标号能被2整除)R1:0XR13:12XYR25:24四寄存器(四个寄存器中标号最小的标号能被4整除)R3:0YR19:16R31:2817ComputeBlockRegisters操作数字长在指令中定点数据(操作数大小)可以按照下面的方法表示:8位数据(字节)-用B表示 BR1,BR1:0,BR3:016位数据(短字)–用S表示 SR1,SR1:0,SR3:032位数据(正常字)-(无字母)R0R1:0,R3:064位数据(长字)–用L表示 LR1:0浮点数据32位数据–用F表示 FR340位数据–用F表示 FR1:018ComputeBlockRegisters31242316158703116150310计算块X中的寄存器–8位数据计算块X中的寄存器–16位数据计算块X中的寄存器–32位数据XBR3

(B=Byte)XSR3(S=Short=16bit)XR3(Noletter=Normal=32-bit)8-bits8-bits8-bits8-bits16-bits16-bits32-bits寄存器–名称与字长举例

(I)19ComputeBlockRegisters寄存器–名称与字长举例

(II)63565548474039323124231615870寄存器R3寄存器R28-bits8-bits8-bits8-bits8-bits8-bits8-bits8-bitsXBR3:263484732311615016-bits16-bits16-bits16-bits633231032-bits63064-bitsXSR3:2XR3:2XLR3:232-bits20ComputeBlockRegisters寄存器–指令语法举例:定点ALU指令:{L|S|B}Rsd=Rmd+|-Rnd{({S|SU})}s,mn是寄存器的个数d表示双寄存器R1:0=R3:2+R5:4;; /*数据被看作2个32-位的值*/BR1:0=R3:2+R5:4;; /*数据被看作8个8-位的值*/xBR1:0=R3:2+R5:4;; /*与上面相同的指令,只在CBX中执 行*/xySR1:0=R3:2+R5:4;; /*数据被看作4个16-位的值*/yLR1:0=R3:2+R5:4;; /*数据被看作1个64-位的值*/21ComputeBlockRegisters2.2.2处理器核-寄存器组有8个寄存器组:计算块数据和状态寄存器整数ALU寄存器DMA寄存器控制寄存器链路口寄存器中断和程序控制寄存器调试逻辑寄存器分支目标缓冲寄存器(BTB)22ComputeBlockRegisters2.3ALU概述定点指令浮点指令特殊指令-PR寄存器特殊指令-VMAX和VMIN指令选项状态标志和条件条件指令23ComputeBlockRegistersCompblockXALUMultShiftRegFileALU–概述(I)计算块的ALU单元支持:逻辑运算(AND,OR,XOR,NOT)算术运算(加,减,递增,递减,sideways加法)MIN,MAX,比较VMIN/VMAX数据转换

*扩展

*压缩

*合并24ComputeBlockRegistersCompblockXALUShiftALU–概述

(II)ALU执行:定点数和浮点数的算术操作

定点数的逻辑操作ALU定点指令支持的操作:8-位(字节)输入操作数

16-位(短字)输入操作数

32-位(正常字)输入操作数

64-位(长字)输入操作数

128-位(四字)输入操作数

输出32-,64-,或者128-位结果.ALU浮点指令支持的操作:32-或者40-位浮点操作数

输出32-或者40-位结果.25ComputeBlockRegistersALU指令举例LR5:4=R11:10+R1:0;; //64-位加,在CBX和CBY中执行ySR1:0=R31:30+R25:24;;//四个短字操作数同时相加,存储 //到两个寄存器对中,仅在CBY中 //执行 xR3=R5ANDR7;; //CBX中的逻辑AND操作yR4=SUMSR3:2;; //R4中短字与yR3:2中的内容相加

//把和放到R4中R9=R4+R8,R2=R4-R8;; //同时加/减, //在CBX和CBY中执行26ComputeBlockRegistersALU–指令选项

(I)大部分ALU指令都有选项选项修改了指令的执行细节选项是针对一组指令有效(不是所有的选项都适用于所有的指令)27ComputeBlockRegistersALU–指令选项

(II)定点选项-符号有下面的意义:X,Y,YX 作为前缀–在X,Y或者两个计算块中执行B,S,L 作为前缀–字节,短字(16)长字(64)

作为前缀

隐含一个正常(32-bit)字X 扩展的范围(仅ABS指令中使用)S 饱和U 无符号T 截断Z 返回零(仅在MIN/MAX指令中使用)I 整型数例如:YBR9=R2+R8(S);; 28ComputeBlockRegistersALU–特殊指令-PR(I)ALU寄存器PR0和PR1用于特殊的ALU指令:SUMABSVMAX/VMIN若访问PR0和PR1寄存器,必须使用下面的指令:PR1:0=RmdRsd=PR1:0注意:即使你只想使用PR0或者PR1,这些指令也必须在双寄存器中操作。29ComputeBlockRegistersR5PR0output3103109=ALU–特殊指令-PR(II)PR0+=SUMSRmd SUMsideways求和

SR16位短字

d

双寄存器->64位这条指令执行四个16位的加操作,并把结果与PR0寄存器当前的内容相加。PR0+=SUMSR5:4;;

R40504AssumingthatpreviousvalueofPR0is030ComputeBlockRegistersSR1:0PR0result3103103107-352SR3:23103105679ABS(5-7)ABS(6-(-3))ABS(7-5)ABS(9-2)++150150150150+ALU–特殊指令-PR(III)PR0+=ABS(SRmd-SRnd)(U)xPR0+=ABS(SR3:2-SR1:0);;20AssumingthatpreviousvalueofPR0is031ComputeBlockRegistersALU–特殊指令-VMAX/VMINVMAX和VMIN指令执行Viterbi运算法则时使用4条指令8或者16位操作数选择步骤取两个寄存器对的最大值或者最小值-4种可能性:SRsd=VMAX(Rmd,Rnd);;SRsd=VMIN(Rmd,Rnd);;BRsd=VMAX(Rmd,Rnd);;BRsd=VMIN(Rmd,Rnd);;32ComputeBlockRegistersR1:0

3103107865R3:213103109223SR9:83103109865864X16bitcomparators0x8000310310PR1:0BitsshiftedintoPR1:0fromtheMSBALU–特殊指令-VMAX/VMINSRsd=VMAX(Rmd,Rnd);;SR9:8=VMAX(R3:2,R1:0);;950x00000x00000x0000AssumingthatpreviousvalueofPR0is033ComputeBlockRegisters310310PR1:01111从MSB移位下一个VMAX/VMIN将使这些4位右移4位。如果指令循环执行,这些位将继续移到PR1:0寄存器中

第一个字的结果比较ALU–特殊指令-VMAX/VMIN在执行完SRsd=VMAX指令后,

如果RmRn,则PR1:0→1;否则PR1:0→0;PR1:0寄存器将保持:34ComputeBlockRegistersALU–状态标志位和条件与ALU有关的有9个状态标志位5常规标志4sticky标志非映射寄存器XSTAT和YSTAT中的状态标志位状态标志位控制指令条件的执行在指令执行完时设置状态标志位Sticky位保持置位状态,直到被清零35ComputeBlockRegisters在一个并行指令中,状态标志是所有操作结果的或。

Ex:假设YR0=0x00050003和YR1=0x00040008,

执行完指令ySR2=R0-R1;;之后,结果是:

由于两个数的减法产生了负值,设置yAN标志位。

YR131048YR031053YR23101-5ALU–并行指令中的状态标志位36ComputeBlockRegisters常规状态标志位

通过以下更新AZ Fxd为0,FP下溢

所有的ALU操作AN 负数

所有的ALU操作AV 溢出

所有的算术操作AC 进位

仅定点操作AI FP无效操作

浮点数操作Sticky状态标志AUS StickyFP下溢

仅浮点(FP)操作AVS StickyFP溢出

仅浮点(FP)操作AOS StickyFxdP下溢

仅定点操作AIS StickyFP无效操作

仅浮点(FP)操作

ALU–状态标志位37ComputeBlockRegistersALU–条件ALU条件是:

条件

描述

设置标志AEQ ALU等于零 AZALT ALU小于零 ANandAZALE ALU小于或者等于零 ANorAZNAEQ NOT(ALU等于零) AZ NALT NOT(ALU小于零) ANandAZ NALE NOT(ALU小于或者等于零) ANorAZ38ComputeBlockRegistersALU–条件指令(单个计算块)IFcond;DO<instruction>;;IFxALT;DO,R3=R1+R2;;//CBX和CBY都以xALT为条件执行。IFyAEQ;do,xR0=R1+R2;;//CBX指令以yAEQ为条件执行。IFxALE,jumplabel;;//根据xALE条转。39ComputeBlockRegistersALU–条件指令(SIMD)IFALE;do,R0=R1+R2;;//如果CBX中的条件为真,执行CBX中的加操作,//如果CBY中的条件为真,执行CBY加操作。IFALE;do,xR0=R1+R2;; //CBX中的指令根据xALE的值执行。IFALE,jumplabel;; //xALE和yALE或的结果决定是否条转。IFALE;do,R0=[j0+j1];; //xALE和yALE的逻辑或决定是否加载。

40ComputeBlockRegistersRs=SUMS|BRmRs=SUMS|BRmdRs=ONESRm|RmdRsd=BFOINCRmdPR0|PR1+=ABS(SRmd-SRnd)PR0|PR1+=ABS(BRmd-BRnd)PR0|PR1+=SUMSRmPR0|PR1+=SUMSRmdPR0|PR1+=SUMBRmPR0|PR1+=SUMBRmdRsd=PR1:0PR1:0=Rsd注意X,Y,和XY对于所有的指令都是有效的选项ALU–定点指令

(I)Rsd=EXPANDSRm+|-SRnRsq=EXPANDSRmd+|-SRndSRsd=EXPANDBRm+|-BRnSRsq=EXPANDBRmd+|-BRndRsd=EXPANDSRmRsq=EXPANDSRmdSRsd=EXPANDBRmSRsq=EXPANDBRmdSRs=COMPACTRmd+|-RndBRs=COMPACTSRmd+|-SRndSRs=COMPACTRmdBRs=COMPACTSRmdBRsd=MERGERm,RnBRsq=MERGERmd,RndSRsd=MERGERm,RnSRsq=MERGERmd,Rnd41ComputeBlockRegistersALU–定点指令

(II)Rs=Rm+|-RnRsd=Rmd+|-RndRs=ABS(Rm+Rn)Rsd=ABS(Rmd+Rnd)Rs=ABS(Rm-Rn)Rsd=ABS(Rmd-Rnd)Rs=(Rm+|-Rn)/2Rsd=(Rmd+|-Rnd)/2Rs=MIN|MAX(Rm,Rn)Rsd=MIN|MAX(Rmd,Rnd)Rs=INC|DECRmRsd=INC|DECRmdRs=Rm+Rn+CIRsd=Rmd+Rnd+CIRs=Rm-Rn+CI-1Rsd=Rmd-Rnd+CI-1COMP(Rm,Rn)COMP(Rnd,Rnd)Rs=CLIPRmBYRnRsd=CLIPRmdBYRndRs=ABS|-RmRsd=ABS|-RmdRs=PASS|NOTRmLRsd=PASS|NOTRmdRs=RmAND|OR|XOR|ANDNOTRnLRsd=RmdAND|OR|XOR|ANDNOTRndRs=Rm+CI|CI-1LRsd=Rmd+CI|CI-1Rs=Rm+Rn,Ra=Rm-RnRsd=Rmd+Rnd,Rad=Rmd-RndBRSd=VMAX(Rmd,Rnd)SRSD=VMIN(Rmd,Rnd)42ComputeBlockRegistersALU–浮点指令FRs=Rm+|-RnFRsd=Rmd+|-RndFRs=(Rm+|-Rn)/2FRsd=(Rmd+|-Rnd)/2FRs=MAX|MIN(Rm+|-Rn)FRsd=MAX|MIN(Rmd+|-Rnd)FRs=ABS(Rm+|-Rn)FRsd=ABS(Rmd+|-Rnd)FCOMP(Rm,Rn)FCOMP(Rmd,Rnd)FRs|FRsd=FLOATRmBYRnFRs|FRsd=FLOATRmRs=FIXFRm|FRmdBYRnRs=FIXFRm|FRmdFRs=CLIPRmBYRnFRsd=CLIPRmdBYRndFRs=RmCOPYSIGNRnFRsd=RmdCOPYSIGNRndFRs=SCALBFRmBYRnFRsd=SCALBFRmdBYRnFRs=ABS|-|PASS|RECIPS|RSQRTSRmFRsd=ABS|-|PASS|RECIPS|RSQRTSRmdRs=MANTFRm|FRmdRs=LOGBFRm|FRmdFRsd=EXTDRmFRs=SNGLRmdFRs=Rm+Rn,FRa=Rm-Rn (dualinst.)FRsd=Rmd+Rnd,FRad=Rmd-Rnd (dualinst.)43ComputeBlockRegisters2.4乘-累加器概述指令概述指令选项截取,饱和,共轭定点乘法复数乘法浮点指令MR4寄存器状态和条件44ComputeBlockRegistersCompblockXALUMultShiftRegFile乘法器–概述乘法器执行:定点或者浮点乘法带累积加/减的定点乘法和累加

。乘法器浮点指令对以下进行操作:32或者40位操作数

输出32或者40位结果。乘法器定点指令4个16位MACs-或者1个32位MAC输出16位,32位或者64位结果输出20位,40位,或者80位累加(MAC)结果45ComputeBlockRegisters乘法器–乘法的类型三种类型的定点操作单32位MAC四字16位MAC单16位复数MAC

乘和累加称为MAC转移和MAC在执行MAC之前,把内部乘法器寄存器中的内容转移到寄存器组中。复数乘法和MAC用法:

实部为16位

虚部为16位46ComputeBlockRegisters32-bitwordinst.31032operandRm32x32MULT32operandRn32or64resultRsldualaccum(64or80)MR乘法器–32位乘法指令32位乘举例:

XYRs=Rm*Rn XYR4=R6*R832位MAC举例MR3:2+=R11*R12(MR1:0或者MR3:2是累加器)47ComputeBlockRegisters16-bitshortwordinst.630quad16operandRmlquad16operandquad16/32resultRnl630Rsl16x16MULT16x16MULT16x16MULT16x16MULTquadaccum(16/20or32/40)MRMAC是寄存器Rmd和Rnd中4个16-位字(短字)的乘法运算,乘积的结果可以作为字的结果与MR3:0当前的内容相加,也可以作为16-位短字的结果与双寄存器MR3:2中的内容相加。溢出位放到寄存器MR4中。累加器––4个16位乘法指令4个16位乘举例XRsd=Rmd*RndXR11:10=R9:8*R7:6

4个16位MAC举例MR3:0+=Rmd*Rnd; ORMR3:2+=Rmd*Rnd; 48ComputeBlockRegistersMAC是Rm和Rn中的复数值相乘,乘积的结果与MR3:2的当前内容相加。溢出位放入寄存器MR4中。乘法器–16位复数乘法指令(I)16位复数乘法举例

MRa=Rm**RnMR3:2=R9**R716位复数MAC举例MR3:2+=Rm**Rn;注意;MR4提供了额外16位实部和16位虚部16-bitcomplexwordinst.310imag1dual32/40result630MR16x16MULT16x16MULT16x16MULT16x16MULTreal1imag2real2+/+-/+49ComputeBlockRegisters乘法器–16位复数乘法指令(II)复数乘法器用一个32位正常字中的两个短字表示复数。

位15:0表示复数的实部位31:16表示虚部.乘法器把复数乘法的结果存储到一对MR寄存器中。复数乘和累加定义为(汇编语言语法表示为**):{}和[]分别表示复数中的实部和虚部{Result}={Rm}*{Rn}-[Rm]*[Rn][Result]={Rm}*[Rn]+[Rm]*{Rn}50ComputeBlockRegisters乘法器–16位复数乘法指令(III)没有共轭选项设置:{Result}={Rm}*{Rn}-[Rm]*[Rn][Result]={Rm}*[Rn]+[Rm]*{Rn}有共轭选项设置:{Result}={Rm}*{Rn}+[Rm]*[Rn][Result]={-Rm}*[Rn]+[Rm]*{Rn}51ComputeBlockRegistersSinglePrecisionFlt.310exp(8)mantissa(24)32-bitresult24x24MULTexp(8)mantissa(24)adderexp(8)mantissa(24)32/40-位浮点乘法两个乘法器都可以执行单精度(32-bit)浮点乘法

扩展精度(40-bit)浮点乘法

ExtendedPrecisionFlt.630exp(8)32x32MULT32-bitmantissaexp(8)Fmlmantissa(32)Fnlmantissa(32)exp(8)40-bitresultadder52ComputeBlockRegistersSinglePrecisionFloatingpt.310exp(8)mantissa(24)32-bitresult24x24MULTexp(8)mantissa(24)adderexp(8)mantissa(24)32-位浮点乘法单精度举例FRs=Rm*Rn(T)FR20=R22*R23(T)53ComputeBlockRegistersExtendedPrecisionFloatingPt.630exp(8)32x32MULT40-bitresultRslFmlmantissa(32)Fnlmantissa(32)exp(8)32-bitmantissaadder8-bitexponent40-位浮点乘法扩展精度举例FRsd=Rmd*RndFR25:24=R27:26*R30:29(T)

扩展精度为尾数提供额外的8位:24+8=32位尾数8位指数54ComputeBlockRegisters大部分的乘法器选项都可以独立操作,提高了乘法器的灵活性和功能性。

选项

选项代码

默认

有符号/无符号数 U 有符号整数/小数 I 小数清零 C 未清零截断/截尾 T 截断清零和截断 CR 未清零/截断饱和 S 未饱和共轭 J 非共轭

乘法器–指令选项概述55ComputeBlockRegisters乘法器–可组合的指令选项

选项组合的例子SU 饱和的无符号数nU 一个操作数有符号,一个无符号

I 整数IU 无符号整数IS 饱和的整数ISU 饱和的无符号整数56ComputeBlockRegisters乘法器–指令选项有符号/无符号数选项应用于所有的定点操作。()= 两个输入操作数都是有符号的(U)= 两个输入操作数都是无符号的(nU)= Rm是有符号的;Rn是无符号的有符号数用2的补码表示整数/小数选项应用于所有的定点操作.()= 小数(I)= 整数57ComputeBlockRegistersSignbit2632622612602423222120

Bit63Bit0二进制小数点UnsignedintegerUnsignedFractionalSignbit2-12-22-32-42-622-632-64

Bit63Bit0BinarypointWeight-2632622612602423222120

Bit63Bit0二进制小数点SignedintegerWeight.........SignedFractional-2-02-12-22-32-612-622-63

Bit63Bit0Binarypoint...WeightWeight乘法器–整数/小数定点格式58ComputeBlockRegisters乘法器–截断截断选项截断适用于所有的定点和浮点操作。

()= 截取最接近的整数(T)= 截断浮点数->截取接近零方向定点数->截取接近无穷方向注意默认值截取最近整数59ComputeBlockRegisters乘法器–清除/截断清零和截取选项仅仅适用于32位小数和四字16位小数的MAC操作。

()= 禁止选项MR寄存器在进行MAC之前不清零(C)= 清零在进行MAC之前清零MR寄存器(CR)= 清零和截取在执行MAC操作之前清零指定的MR寄存器并设置截取位。60ComputeBlockRegisters乘法器–饱和饱和选项处理器执行饱和和定点操作,如果:饱和选项使能(S)结果溢出,超出目的格式的范围。适用于任何可能溢出的定点乘法操作。

()= 未饱和(S)= 饱和MAC操作没有饱和选项。当累加超过20/40/80位时,乘法器总是使MAC的结果饱和。带饱和设置的基于乘法操作的寄存器组使整数饱和到最大可以表示的数使小数饱和乘-1,-1为0x7F…F61ComputeBlockRegisters乘法器–共轭共轭选项仅适用于复数MAC操作。

当使能时,Rm操作数与Rn操作数的复共轭相乘;也就是Rn的虚部取反。()= 非共轭(J)= 复数乘共轭62ComputeBlockRegistersMR4寄存器保留MAC操作的溢出位,寄存器域按照所使用的寄存器和结果的长短变化:80-位累加的长字结果

40-位累加的正常字结果

20-位累加的短字操作

乘法器-MR4寄存器组

(I)MR1:0MR3:216MR4310MR0MR316MR4310824MR2MR1MR0MR316MR4310824MR2MR14122028MR0MR2MR1MR3[H][L][H][L][H][L][H][L][L]=lowshortfield[H]=highshortfield63ComputeBlockRegisters乘法器-MR4寄存器域

(II)乘法器使用MR4溢出位作为MAC操作的累加步骤当清除相应的MRx寄存器时清除这些位。

当存储时,乘法器使用这些位作为饱和位。

这些位允许MAC序列的超出最终结果表示的范围。

64ComputeBlockRegisters乘法器–状态标志位乘法器更新X-stat和Y-stat寄存器中的9个状态标志位

状态标志MZ 乘法器为零MN 乘法器为负MV 乘法器上溢MU 乘法器下溢MI 乘法器浮点无效操作粘连标志MUS 乘法器定点数粘连下溢MVS 乘法器浮点数粘连上溢MOS 乘法器定点数粘连上溢MIS 乘法器浮点数粘连无效操作状态和粘连状态标志保存在X/YSTAT寄存器中。65ComputeBlockRegisters乘法器–条件

(I)乘法器条件是:

条件 描述

标志设置MEQ 乘积等于零 MZMLT 乘积小于零 MN和MZMLE 乘积小于或等于零 MN或者MZ

NMEQ 乘积不等于零 MZNMLT 乘积不小于零 MN和MZNMLE 乘积不小于或者等于零 MN或者MZ 66ComputeBlockRegisters乘法器–条件

(II)条件指令可以为以下条件

XSTAT寄存器中一个条件YSTAT寄存器中一个条件XSTAT或者YSTAT的一个条件例子ifXMEQ,JumpLabel_10;; /*如果X乘法器设置了零标志

执行跳转*/ifNYMLT;doYR2=R0+R1;; /*如果Y乘法器条件不是MLT

执行加操作*/ ifMEQ,JumpLabel_13;; /*如果XORY乘法器设置MZ

执行跳转*/67ComputeBlockRegisters乘法器–指令集

(I)单个32位定点乘指令{X|Y|XY}Rs=Rm*Rn {({U|nU}{I}{T}{S})}{X|Y|XY}Rsd=Rm*Rn {({U|nU}{I})}{X|Y|XY}Rs|Rsd=MRa,MRa+=Rm*Rn{({U}{I}{C}{S})}{X|Y|XY}MRa+|-=Rm*Rn {({U}{I}{S}{C|CR})} Mra是MR1:0或者MR3:2之一。四个16位定点乘指令{X|Y|XY}Rsd=Rmd*Rnd {({U}{I}{T}{S})}{X|Y|XY}Rsq=Rmd*Rnd {({U}{I})}{X|Y|XY}Rsd=MRb,MRb+=Rmd*Rnd{({U}{I}{C})}{X|Y|XY}MRb+=Rmd*Rnd {({U}{I}{C|CR})}MRb是MR1:0或者MR3:2或者MR3:0之一68ComputeBlockRegisters乘法器–指令集

(II)复数16-位定点乘指令{X|Y|XY}MRa+=Rm**Rn {({U}{I}{C|CR}{J})}{X|Y|XY}Rs|Rsd=MRa,MRa+=Rm**Rn {({U}{I}{C}{J})}Mra是MR1:0或者MR3:2之一。通用乘法器指令{X|Y|XY}MRa=Rmd{X|Y|XY}{S}Rsd=MRa {({S}{U})}{X|Y|XY}Rsq=MR3:0 {({S}{U})}{X|Y|XY}Rs=MR4{X|Y|XY}Rs=COMPACTMRa {({I}{T}{S}{U})}{X|Y|XY}SRsd=COMPACTMR3:0 {({I}{T}{S}{C}{U})}69ComputeBlockRegisters乘法器–指令集(III)浮点指令{X|Y|XY}FRs=Rm*Rn {(T)}{X|Y|XY}FRsd=Rmd*Rnd {(T)}70ComputeBlockRegisters2.5移位器综述指令概述移位器操作移位–循环位处理位段处理位流处理变换状态和条件71ComputeBlockRegistersCompblockXALUMultShiftRegFile移位器-综述移位器操作:移位和循环,左移,右移位处理;位设置,清除,触发和测试位段处理;段抽取和存贮转换16位块浮点数缩放比例因数指数抽取抽取前面的1或者0定点数的移位器操作。对于输入:一个64位操作数一个或者两个32位操作数两个或者四个16位操作数四个或者八个8位操作数72ComputeBlockRegisters移位器–操作数

操作数–语法约定Rn操作数是移位器进行操作的数据。

Rm操作数指明移位大小,位域长度,或者位置。Rs操作数读-修改-写(RMW)数据,是被操作和更新的数据。

注意:仅有一个选项可用于移位器:指令–符号扩展-(SE)

73ComputeBlockRegisters移位器操作-移位/循环

(I)移位和循环:ASHIFT 执行算术移位。LSHIFT 执行逻辑移位。ROT 执行循环移位.所有移位和循环值都是2-补码有符号数。

对于Rm->LEFT移位和循环是一个正值对于Rm->RIGHT移位和循环是一个负值移位器利用Rm中的LSB的立即数计算所得的移位数。74ComputeBlockRegisters000100100011010001010110111011110000000100100011010001010110111000100011010001010110111011110000xxxxxxxxxxxxxxxxxxxxxxxxxxxx0100RmShiftmagnitude=4RnRsRsShiftleftby4bitsShiftrightby4bitsZerofillbitsinMSBsZerofillbitsinLSBs0x123456EF0x0123456E0x000000040x23456EF0移位器操作-移位/循环

(II)逻辑移位举例。Rs=LSHIFTRnBYRmRn中的内容移位Rm(4)指定的位数,结果放入Rs中。注意Rm=-4是右移Rm=+4是左移75ComputeBlockRegisters10010010001101000101011011101111xxxxxxxxxxxxxxxxxxxxxxxxx1111000RmRnRsShiftrightby8bitsSignextendedMSBs1111111110010010001101000101011011101111deletedLSBsArithmeticleftshiftisidenticaltoLogicalleftshift0x923456EF0xFFFFFFF80xFF923456Shiftvalue=-8移位器操作-算术移位举例右移8位算术移位举例。Rm包含右移的位数(-8)Rs=ASHIFTRnBYRm76ComputeBlockRegisters寄存器操作数的移位的位数由寄存器Rm的LSB位指定。Rm所用位数取决于数据的长度:长字 8bits正常字 7bits短字 6bits字节 5bits对于立即数的操作,需要的位数是:长字 7bits正常字 6bits短字 5bits字节 4bits移位器操作-移位/循环

(II)移位和循环移位和循环只移位只移位77ComputeBlockRegisters移位器操作-位处理位处理操作是:BCLR 清零一位。BSET 设置一位。BTGL Toggles(与1XOR)abit.BITEST 测试一位举例:Rs=BCLRRnByRmRsd=BSETRndByRm78ComputeBlockRegisters00010010001101000101011111101111xxxxxxxxxxxxxxxxxxxxxxxxxx001000RmRnRs00010010001101000101011011101111EighthbitinRnclearedValue=80x000000080x123456EF0x123457EF31031318thbit移位器操作-位处理:位清零位处理BCLR举例。寄存器Rn清零第八位(由Rm指定)并把结果放入Rs中。Rs=BCLRRnByRm;79ComputeBlockRegisters移位器操作-位段处理

(I)位段处理操作是:FEXT 按照另一个寄存器指定的长度和位置从寄存器中抽 取一段。FDEP 按照另一个寄存器中指定的位置和长度从右端放入 到一个寄存器中。MASK 通过屏蔽复制一个32-或者64-位段。XYSTAT 加载和存储所有位或者仅是X/YSTAT寄存器的14 位LSBs。

对于抽取和存放操作,Rm操作数包含两个字段中的控制信息:<len7>和<pos8>。

这些字段的位置取决于Rm是一个单字-或者双字-寄存器。80ComputeBlockRegisters63320<pos8><len7>RmdRm3115860<pos8><len7>Len指定抽取的位数Pos指定Rn中的起始位置抽取位存储在Rs的右端移位器操作-位段操作

(II)FEXT按照另一个寄存器指定的长度和位置从寄存器中抽取一个字段。Rm操作包含两段中的控制信息:<len7>and<pos8>.段的位置取决于Rm是一个单字-或者双字寄存器。81ComputeBlockRegistersRm311580xxxxxxxxxxxxxxxx00000101x0001000Length8bitsStartatbit50x0000050831150xxxxxxxxxxxxxxxx000100100011010031150xxxxxxxxxxxxxxxxxxxxxxxx10010001RnRs0x000012340x00000091bit5移位器操作-位段处理

(III)从Rn中抽取一个8位字段(FEXT),从6th

位复制并放在Rs中的LSBs。Rs=FEXTRnByRm;82ComputeBlockRegisters移位器操作-转换操作浮点转换支持的操作如下:BKFPT 决定16-位块浮点中缩放比例因数。EXP 抽取指数。LDx 抽取前面的零(0)或者一(1)83ComputeBlockRegisters移位器–状态标志

移位器在每次操作结尾更新XSTAT和YSTAT状态寄存器中的两个标志位。标志如下:BF 块浮点标志。仅更新BKFPT指令。SN 移位器结果为负。SZ 移位器结果为零。

SF0和SF1是计算块静态标志0和1的条件。84ComputeBlockRegisters移位器–条件移位器条件条件

描述

标志设置SEQ 等于零 SZSLT 小于零 SNandSZNSEQ 不等于零 SZNSLT 不小于零 SNandSZ

举例ifXSLT,JumpLabel_10;;

ifNYSLT,JumpLabel_12;;

ifNSLT;DOR3=R5+R6;;85ComputeBlockRegisters移位器操作-位流处理

(I)位流处理操作数是:GETBITS

从一个位流中抽取位。PUTBITS 把位放入一个位流中。BFOTMP 从GETBITS和PUTBITS指令暂存或者返 回溢出位。位流处理操作,与ALUBFOINC指令结合,执行FIFO操作修改一个临近位流中的位。对于位流抽取和存放操作,Rmd操作数包含两段控制信息:<BFP6>and<len6>。

这两个段形成一个寄存器对Rmd86ComputeBlockRegisters310310BFP6Len6RmdRbRbBFP-6-位段

当前的位FIFO指针,指向Rnq中位流的位置,在开始此处抽取/插入。

Len-6-位段-指定抽取的位数

注意:位

FIFO指针必须利用BFOINCALU指令进行增操作移位器操作-位流处理(II)GETBITS–从一个位流中抽取位。Rsd=GETBITSRnqBYRmd

双Rmd包含GETBITS/PUTBITS操作的控制信息。87ComputeBlockRegisters移位器把抽取的位放到Rsd中,其右端从零开始。

SE选项–符号扩展–用与抽取数据的MSB相同的数填充。310RnqRfBFP6Len6RsReRdRcRkRh移位器操作-位流处理(III)Rsd=GETBITSRnqBYRmd 四个寄存器Rnq是源寄存器,Rs是目的寄存器。88ComputeBlockRegisters移位器-指令汇集(I)移位指令

{X|Y|XY}{S|B} Rs=LSHIFT|ASHIFTRnBYRm|<imm>{X|Y|XY}{L|S|B} Rsd=LSHIFT|ASHIFTRndBYRm|<imm>{X|Y|XY} Rs=ROTRnBYRm|<imm>{X|Y|XY}{L} Rsd=ROTRndBYRmd|<imm>{X|Y|XY} Rs=FEXTRnBYRm|Rnd{(SE)}{X|Y|XY} LRsd=FEXTRndBYRm|Rnd{(SE)}{X|Y|XY} Rs+=FDEPRnBYRm|Rnd{(SE)}{X|Y|XY} LRsd+=FDEPRndBYRm|Rnd{(SE)}89ComputeBlockRegisters移位器–指令汇集

(II){X|Y|XY}Rs+=MASKRnBYRm{X|Y|XY}LRsd+=MASKRndBYRmd{X|Y|XY}Rsd=GETBITSRnqBYRmd{(SE)}{X|Y|XY}Rsd+=PUTBITSRndBYRmd{(SE)}{X|Y|XY}BITESTRnBYRm|<imm>{X|Y|XY}BITESTRndBYRmd|<imm>{X|Y|XY}Rs=BCLR|BSET|BTGLRnBYRm|<imm>{X|Y|XY}Rsd=BCLR|BSET|BTGLRndBYRm|<imm>{X|Y|XY}Rs=LD0|LD1|EXPRm|Rmd90ComputeBlockRegisters移位器–指令汇集(III){X|Y|XY}STAT=Rm{X|Y|XY}STAT[13:0]=Rm{X|Y|XY}Rm=STAT{X|Y|XY}BKFPTRmd,Rnd{X|Y|XY}Rsd=BFOTMP{X|Y|XY}BFOTMP=Rmd在移位器中立即字段的宽度是7,6,5,还是4-位取决于操作数的大小。91ComputeBlockRegisters2.6整型ALU(IALU)综述指令概述IALU寄存器寻址操作循环缓冲位反序整数操作状态和条件92ComputeBlo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论