版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章CPU结构与指令集第二章CPU结构与指令集2.1CPU结构2.2存储器映射2.3汇编指令集
2.4流水线
2.5中断
2.1.1中央处理单元(CPU)结构程序取指单元指令分配单元指令译码单元程序执行机构程序总线读取与存储数据总线CPU包括哈佛结构,程序总线与数据总线分开程序存储器与数据存储器分开
取指包的宽度?定长指令集,指令的宽度是固定的除读取、存储、跳转指令外,其他指令均以通用寄存器为源操作数和目的操作数,使程序能够高速运行?2.1.2CPU数据通道与控制2个通用寄存器组(A和B),每组包括32个寄存器8个功能单元(.L1、.L2、.S1、.S2、.M1、.M2、.D1、.D2)
2个数据读取通路(LD1和LD2),每侧有2个32位读取总线2个数据存储通路(ST1和ST2),每侧有1个32位存储总线2个寄存器组交叉通路(1x和2x)2个数据寻址通路(DA1和DA2)1.通用寄存器组功能
存放数据,作为指令的源操作数和目的操作数。注意传送方向和数据字长作为间接寻址的地址指针,寄存器A4~A7和B4~B7还能够以循环寻址方式工作
A1、A2、B0、B1和B2可用做条件寄存器A1:A0A3:A2…A29:A28A31:A30oddeven:32840-bitRegB1:B0B3:B2…B29:B28B31:B30oddeven:32840-bitReg寄存器对配对规则Theregistersmustbefromthesameside.Thefirstregistermustbeevenandthesecondodd.Theregistersmustbeconsecutive.40位数据在寄存器对中的存储方式2.功能单元功能单元定点操作浮点操作.L单元32/40位算术和比较操作32-位最左边1或0的位数计数32位和40位归一化操作32位逻辑操作算术操作数据类型转换操作DP→SPINT→DP,INT→SP.S单元32位算术操作32/40位移位和32位位域操作32位逻辑操作转移常数产生寄存器与控制器数据传递(仅.S2)比较倒数和倒数平方根操作绝对值操作SP→DP数据类型转换.M单元16×16位乘法操作32×32乘法操作浮点乘法操作.D单元32-位加、减、线性及循环寻址计算带5位常数偏移量的字读取与存储带15位常数偏移量的字读取与存储(仅.D2)带5位常数偏移量的双字读取3.寄存器组交叉通路.L1、.S1、.D1和.M1可以直接读写寄存器组A
.L2、.S2、.D2和.M2可以直接读写寄存器组B
1x交叉通路允许数据通道A的功能单元从寄存器组B读它的源操作数
2x交叉通路允许数据通道B的功能单元从寄存器组A读它的源操作数4.数据存储器及读取存储通路(Load指令)寄存器组A的读入通路为LD1(2个32位)
寄存器组B的读入通路为LD2(2个32位)
LDDW指令一次可读取64位数据到A或B寄存器
(Store指令)寄存器组A的写数据通路为ST1寄存器组B的写数据通路为ST25.数据地址通路数据地址通路DA1和DA2来自.D功能单元
数据通道以T1、T2表示
LDW.D1T2*A0[3],B1D1产生地址,用LD2数据通道读入数据到B1寄存器6.控制寄存器组缩写寄存器名描述AMR寻址模式寄存器指定是否使用线性或循环寻址。如果是循环寻址,还包括循环寻址的尺寸CSR控制状态寄存器包括全局中断使能位,高速缓冲存储器控制位和其他各种控制和状态位FADCR浮点加法配置寄存器指定.L单元的溢出方式,舍入方式,记录NaN及其他异常FAUCR浮点辅助配置寄存器记录.S单元NaN及其他异常FMCR浮点乘法配置寄存器指定.M单元的溢出方式,舍入方式,记录NaN及其他异常ICR中断清除寄存器允许软件清除挂起的中断IER中断使能寄存器允许使能/禁止个别中断IFR中断标志寄存器显示中断状态IRP中断返回指针保存从可屏蔽中断返回时的地址ISR中断设置寄存器允许软件控制设置中断ISTP中断服务表指针指向中断服务表的起始地址NRP不可能屏蔽中断返回指针保存从不可屏蔽中断返回时的地址PCE1程序计数器保存处于流水线E1节拍的取指包地址寻址模式寄存器(AMR)模式描述00线性寻址(复位后默认值)01循环寻址使用BK0字段10循环寻址使用BK1字段11保留位字段名功能15−10PWRD控制低功耗模式,该值读时总为零9SAT饱和位。任一功能单元执行一个饱和操作时被置1,饱和位只能用MVC指令清零,被功能单元饱和操作置位。当清除和置位在同一周期内发生时,功能单元对它的置位优先。饱和位在饱和发生后一个周期被置位8EN端结方式:1=小端终结,0=大端终结7−5PCCPCC程序高速缓冲存储器控制模式4−2DCC数据高速缓冲存储器控制模式1PGIE当一个中断发生时,保存以前的全局中断使能位GIE0GIE全局中断使能位,它控制除复位和不可屏蔽中断之外的所有可屏蔽中断使能:GIE=1时,可屏蔽中断使能:GIE=0时,可屏蔽中断禁止控制状态寄存器(CSR)2.2存储器映射(统一编址)描述区域大小(字节)起始地址终止地址内部RAM(L2)192K0x000000000x0002FFFF内部RAM/Cache64K0x000300000x0003FFFFEMIF寄存器256K0x018000000x0183FFFFL2寄存器128K0x018400000x0185FFFFHPI寄存器256K0x018800000x018BFFFFMcBSP0寄存器256K0x018C00000x018FFFFFMcBSP1寄存器256K0x019000000x0193FFFFTimer0寄存器256K0x019400000x0197FFFFTimer1寄存器256K0x019800000x019BFFFF中断选择寄存器5120x019C00000x019C01FF设备配置寄存器40x019C02000x019C0203EDMARAMandEDMA寄存器256K0x01A000000x01A3FFFFGPIO寄存器16K0x01B000000x01B03FFFI2C0寄存器16K0x01B400000x01B43FFFI2C1寄存器16K0x01B440000x01B47FFFMcASP0寄存器16K0x01B4C0000x01B4FFFFPLL寄存器8K0x01B7C0000x01B7DFFFQDMA寄存器520x020000000x02000033McBSP0数据端口64M0x300000000x33FFFFFFEMIFCE0(SDRAM空间)256M0x800000000x8FFFFFFFEMIFCE1(Flash空间)256M0x900000000x9FFFFFFFEMIFCE2256M0xA00000000xAFFFFFFFEMIFCE3256M0xB00000000xBFFFFFFF0000000000000004000000080000000C00000010AddressFFFFFFFFData32-bits029009413210019011A0001467A1038C6F5832-bits存储器结构2.3汇编指令集2.2.1指令集概述
1.指令和功能单元之间的映射
指令功能单元
乘法相关的指令都是在.M单元执行
产生数据存储器地址的指令在.D功能单元
算术逻辑运算大多在.L与.S单元执行2.延迟间隙指令的执行速度可以用延迟间隙来说明,延迟间隙在数量上等于从指令的源操作数被读取直到执行的结果可以被访问所需要的指令周期数。指令类型延迟间隙功能单元等待时间读周期写周期单周期01ii2周期DP11ii,i+1DP比较12i,i+11+14周期31ii+3INT到DP转换41ii+3,i+4读取Load41ii,i+4MPYSP2DP42ii+3,i+4ADDDP/SUBDP62i,i+1i+5,i+6MPYSPDP63i,i+1i+5,i+6MPYI84i,i+1,1+2,i+3i+8MPYID94i,i+1,1+2,i+3i+8,i+9MPYDP94i,i+1,1+2,i+3i+8,i+93.指令操作码映射图代码段说明creg指定条件寄存器的代码z指定条件src,dst分别指定源及目的操作数代码x指定源操作数2是否使用交叉通道op指令操作代码s选择寄存器组A或B作为目的操作数p指定是否并行执行CPU运行时,总是一次取8条指令,组成一个取指包(256位边界定位),所有并行执行的指令组成一个执行包
周期/执行包指令1A2B3CDE4FGH4.并行操作跳转指令EP可能的3种形式:完全串行、完全并行、部分串行4.并行操作
3位操作码字段creg指定条件寄存器
1位字段z指定是零测试还是非零测试
z=1,进行零测试,即条件寄存器的内容为0是真
z=0,进行非零测试,即条件寄存器的内容非0是真
creg=0,z=0,则指令将无条件地执行
条件寄存器:A1、A2、B0、B1和B2[B0]ADD.L1A1,A2,A3||[!B0]ADD.L2B1,B2,B3以上2条指令相互排斥,只有一条指令被执行
5.条件操作6.地址边界调整(alignment)及终结方式(Endian)半字边界:16位数的存放地址必须从偶数开始,地址最低位为0字边界:32位数的存放地址必须从偶数开始,地址最低位为00C6000以半字或字的最低位地址代表存储单元地址在开辟数据或变量存储区时,需根据数据类型调整地址起始点,称为地址边界调整Endian是指多字节数据内部高低有效位的存放次序,分为:Little-Endian,Big-EndianLittle-Endian:数据的高字节存放在高地址数存 数据的低字节存放在低地址数存Big-Endian:数据的低字节存放在高地址数存 数据的高字节存放在低地址数存大小端位由DSP的LENDIAN管脚设置BAh98h76h54h54h76h98hBAh 地址 1000h 1001h 1002h 1003hBigLittle指令地址最低位D1D0Big时寄存器结果Little时寄存器结果LDW00BA987654hBA987654hLDH00FFFFBA98h00007654hLDHU000000BA98h00007654hLDH1000007654hFFFFBA98hEndian对数据读取、存放的影响设:(DM1000h)=BA987654h不同Endiand下的数据存放如右图不同Endiand下执行Load指令后寄存器的内容如下图Endian对数据读取、存放的影响设:(DM1000h)=01121970h (GR)=BA987654h不同Endian下的DM数据存放如右图不同Endian下执行Store指令后数据存储器的内容如下图
01h12h19h70h70h19h12h01h 地址 1000h 1001h 1002h 1003hBigLittle指令地址最低位D1D0Big时寄存器结果Little时寄存器结果STW00BA987654hBA987654hSTH0076541970h01127654hSTH1001127654h76541970h2.2.2寻址方式寻址方式指CPU如何访问数存空间C6000全部采用间接寻址,分为: 线性寻址linearaddressing
循环寻址circularaddressingAllregisterscanperformlinearaddressingOnlyeightregisterscanperformcircularaddressing:A4–A7areusedbythe.D1unitandB4–B7areusedbythe.D2unit.由寻址模式寄存器AMR控制地址修改方式2.2.2寻址方式
所有寄存器都可以做线性寻址的地址指针
循环寻址的地址指针:A4-A7,B4-B7
由AMR控制地址修改方式:线性方式或循环方式
BK0、BK1各5-bit用于计算循环寻址时循环块的尺寸.循环块尺寸(inbytes)=2N+1N是BK0或BK1内的5-bit值例如:N的二进制数为10000,等于十进制16,则块尺寸=2(16+1)=131072字节C6000DSP汇编指令分类读取/存储类指令 算术运算类指令逻辑与位操作类指令搬移类指令程序转移类指令
空操作类指令浮点操作类指令2.2.3读取/存储类指令读取指令:LDB/LDBU/LDH/LDHU/LDW/LDDW
(DM)→通用寄存器
存储指令:STB/STH/STW通用寄存器→(DM)
两种寻址方式:线性或循环仅通过.D进行
有符号/无符号(U),符号位的扩展不同
地址偏移修正因子:LDB(U)/LDH(U)/LDW指令分别读入字节/半字/字,要乘以相应的比例因子1、2、4
2.2.3读取/存储类指令例2-1线性寻址下的变址计算
LDW.D1*++A4[1],A6
此例为先修改地址,地址偏移量按1×4计算,计算结果如下图所示:示例02012.2.3读取/存储类指令例2-2循环寻址方式下的地址计算
LDW.D1*++A4[9],A1
此处假设寻址模式寄存器AMR=0x00030001,A4已被设定为循环寻址方式,块字节尺寸为24=16=10h(N=3)。因为是以字为单位读取,变址偏移量为9×4=36=24h。线件寻址时地址应为00000124h;循外寻址时,24h对低4位(第0-3位)地址10h取模,余数为4,故实际寻址地址为00000104h。
示例02022.2.4算术运算类指令加/减运算指令
ADD/SUB:不带饱和的有符号的整型(32位)或长整形(40位)加法/减法
ADDU/SUBU:不带饱和的无符号的整型加法/减法
SADD/SSUB:带饱和的有符号的整型加法/减法
ADDK:与16位常数相加
ADD2/SUB2:同时进行2个16位补码数加/减
ADDAB/ADDAH/ADDAW/SUBAB/SUBAH/SUBAW:使用寻址方式的整型加/减溢出问题如果运算结果超出目的操作数字长所能表示的范围,造成运算结果的高位丢失,使保存的运算结果不正确,称为溢出。通常有3种办法解决溢出问题(1)用较长的字长来存放运算结果:1632可行,3240耗时(2)用带饱和的加减运算指令做补码数加减运算:保证符号不变,并且给出提示位(3)对整个系统乘一个小于1的比例因子:实际中最常用2.2.4算术运算类指令2.2.4算术运算类指令例2-3减法运算举例SSUB.L2B1,B2,B3
SUB.L2B1,B2,B3SUB.L2B1,B2,B5:B4示例0203溢出了!符号位在这里无溢出!0x5A2E51A3-0x802A3FA2=0xDA0412012.2.4算术运算类指令例2-4计算累加和的程序,用40位长型数存放求和结果,有8位保护位,示例0204Loop:LDW.D1*A4++,A0NOP4ADD.L1A3:A2,A0,A3:A2SUB.L2B1,1,B1[B1]B.S1LoopNOP5
2.2.4算术运算类指令例2-5按寻址方式的加法运算指令
ADDAH.D1A4,A2,A4B×2=16h对8取余得6示例02052.2.4算术运算类指令例2-6按寻址方式的减法运算指令
SUBAB.D1A5,A0,A5-4×1=-4h对10h取余得C示例02052.2.4算术运算类指令乘法类:全部在.M中完成MPY 有符号16×有符号16=32位有符号MPYU 无符号16×无符号16=32位无符号MPYUS 无符号16×有符号16=32位有符号MPYSU 有符号16×无符号16=32位有符号MPYHL 有符号高16×有符号低16=32位有符号MPYHLU 无符号高16×无符号低16=32位无符号MPYHULS 无符号高16×有符号低16=32位有符号MPYHSLU 有符号高16×无符号低16=32位有符号MPYLH 有符号低16×有符号高16=32位有符号MPYLHU 无符号低16×无符号高16=32位无符号MPYLUHS 无符号低16×有符号高16=32位有符号MPYLSHU 有符号低16×无符号高16=32位有符号SMPY SMPYHL 带饱和乘积处理的乘法SMPYLHSMPYH以16×16位的硬件乘法器为基础,整数乘法的2个源操作数都是16位字长,目的操作数为32的寄存器,不存在溢出问题。以MPY为首字母的22条指令适宜于整数乘法
适宜于Q格式数相乘2.2.4算术运算类指令例2-7整数乘法运算
(1)MPYH.M1A1,A2,A3
(2)MPYHU.M1A1,A2,A3
示例0207符号位扩展无符号数定点数及定标计算机有两种主要的数据表示方法:
定点数表示法浮点数表示法定点数就是小数点位置固定的数。数据的表示形式是:
符号位整数部分.小数部分浮点数就是用科学计数法表示一个数据,是小数点的位置可按数值大小自动变化的数据。定标CPU在执行指令时,并不知道处理的数据是整数还是小数,也不能指出小数点的位置。在编程时必须由程序员指出一个数的小数点处于哪一位,这就是定标的概念。
常用的定标方法是Q表示法,Q表示法用Q0、Q1、…Qi、…、Q15分别表示小数点在D0位之后、D1位之后、…Di位之后、…D15位之后。
如何定标对于16位DSP来说,可以把小数点固定在D0~D15的任一位之后:若固定在最高位D15之后,则该数值是有符号小数;若小数点固定在最低位D0后,则该数值是有符号整数;若小数点放在位D1~D14的任意一位之后,则该数值就是有符号混合小数,它可含有i个整数位和15–i个小数位。若对于32位DSP来说,可以把小数点固定在D0~D31中的任一位之后,这就是数的定标。定标格式定标分为Q表示法和S表示法两种,形式不同,实质相同。QX的x值表示小数点在位Dx之后,即16位中有x个小数位和(15x)个整数位,x值还决定了所表示数的精度为2-x。同样一个16位数,因为小数点的设定位置不同,它所表示的数就不同。例如:在Q15中:1080H=0.001000010000000=2-3+2-8=0.12890625(10)在Q0中:1080H=0001000010000000.=212+27=4224(10)
在Q7中:1080H=000100001.0000000=25+20=33(10)x值不同,则16位数的表示范围和精度也就不同。x值越大,数值范围越小,但精度越高;相反,x值越小,则数值范围越大,但精度越低。数值范围与精度是一对矛盾,一个变量要想能表示较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。为了防止异常或溢出,应该将Q值取低,即将数据格式放大。Q定标QX值的确定例如:已知变量绝对值的最大值=129.65,∵27<129.65<28,n=8∴x=15-8=7,取QX=Q7变量绝对值的最大值|max|的确定为了确定一个合适的QX值,必须确定变量的最大值。通常,确定的方法有两个:理论分析法和条件分析法。所谓理论分析法是指有些变量的动态范围可以通过理论分析来确定,如三角函数Y=sinX和Y=cosX的函数值≤1;8位A/D转换的结果总是≤FFH。对于理论上无法确定范围的变量,应采用统计分析法来确定其动态范围,即用足够多的输入信号样值来确定程序中变量的动态范围,尽可能的包含各种情况和状态。统计分析法也不可能涉及所有可能发生的情况,因此,在定点运算的过程中必须采取一些判断和保护措施。浮点数与定点数的转换关系DSP定点算术运算一般情况下,应尽量采用纯整数运算或纯小数运算,即全部变量都用Q0格式表示,或全部变量都用Q15格式表示
DSP定点加法: Q0+Q0=Q0, Q15+Q15=Q15
Qm+Qn=Qm,必须m=nDSP定点乘法: Q0×Q0=Q0 Q15×Q15=Q30
Qm×Qn=Qm+n基本算术运算的定点实现—C语言(1)加法/减法运算的C语言定点实现(Qm=Qm
±Qm)浮点数的加法和减法运算的C语言实现为:voidfloat_add(floatx,floaty)
{
floatz;
z=x+y;
}voidfloat_sub(floatx,floaty)
{
floatz;
z=x-y;
}将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标值一样。若两者不一样,则在做加法/减法运算前先进行小数点的调整。为保证运算精度,需使Q值小的数调整为与另一个数的Q值一样大。在做加法/减法运算时,必须注意结果可能会超过16位表示,即发生溢出。如果加法/减法的结果超出16位的表示范围,则必须保留32位结果,以保证运算的精度。当结果不超过16位表示范围时:设x的Q值为Qx,y的Q值为Qy,且Qx>Qy,加法/减法结果z的定标值为Qz,则z=x+y
用定点数实现浮点数加法的C语言实现为:voidfixed_add(intx,inty)
{
longtemp;//临时变量
intz;//intz=x+y
temp=y<<(Qx-Qy);
temp+=x;
if(Qx>=Qz)//若Qx≥Qz{
z=temp>>(Qx-Qz);
}
else//若Qx≤Qz
{
z=temp<<(Qz-Qx);
}}用定点数实现浮点数减法的C语言实现为:voidfixed_sub(intx,inty)
{
longtemp;//临时变量
intz;//intz=x-y
temp=y<<(Qx-Qy);
temp=x-temp;//注意,此处与定点加法不同
if(Qx>=Qz)//若Qx≥Qz
{
z=temp>>(Qx-Qz);
}
else//若Qx≤Qz
{
z=temp<<(Qz-Qx);
}}例:定点加法设x=1.25,y=8.13,则浮点运算结果为z=x+y=1.25+8.13=9.38;Qx=14,Qy=11,Qz=11,则定点加法为:x=20480;y=16650;temp=16650<<3=133201;temp=x+temp=20480+133201=153681;z=(int)(153681L>>3)=19210;因为z的Q值为11,所以定点值z=19210即为浮点值z=19210/2048=9.38。例:定点减法设x=0.85,y=3.1,则浮点运算结果为z=x-y=0.85-3.1=-2.25;Qx=15,Qy=13,Qz=13,则定点减法为:x=27852;y=25395;temp=25395<<2=101580;temp=x-temp=27852-101580=-73728;因为Qx>Qz,故z=(int)(-73728>>2)=-18432。由于z的Q值为13,所以定点值z=-18432即为浮点值z=-18432/8192-2.25。当结果超过16位表示范围时设x的Q值为Qx,y的Q值为Qy,且Qx>Qy,加法结果z的定标值为Qz,则定点加法为:voidfixed_add(intx,inty)
{
longtemp;//临时变量
longz;//因为Z的值要超过16位数表示范围,因此使用long型
temp=y<<(Qx-Qy);
temp+=x;
if(Qx>=Qz)//若Qx≥Qz{
z=temp>>(Qx-Qz);
}
else//若Qx≤Qz
{
z=temp<<(Qz-Qx);
}}结果超过16位的定点加法:设x=15000,y=20000,则浮点运算值为z=x+y=35000,显然z>32767,Qx=1,Qy=0,Qz=0,则定点加法为:x=30000;y=20000;(分别进行Q1、Q0定标之后的值)temp=20000<<1=40000;temp=temp+x=40000+30000=70000;z=70000L>>1=35000;因为z的Q值为0,所以定点值z=35000就是浮点值,这里z是一个长整型数。当加法或加法的结果超过16位表示范围时,并且需要保证运算精度时,则必须保持32位结果。如果程序中是按照16位数进行运算的,则超过16位实际上就是出现了溢出。如果不采取适当的措施,则数据溢出会导致运算精度的严重恶化。一般的定点DSP芯片都设有溢出保护功能。
(2)乘法运算的C语言定点实现(Qm+n=QmQn)浮点数完成的乘法运算为:voidfloat_mul(floatx,floaty)
{
floatz;
z=x*y;
}假设经过统计后x的定标值为Qx,y的定标值为Qy,乘积z的定标值为Qz,则z=xy
用定点数实现浮点数乘法的C语言实现为::voidfixed_mul(intx,inty)
{
longtemp;
intz;
temp=(long)x;
z=(temp*y)>>(Qx+Qy-Qz);}例定点乘法设x=21.6,y=6.8,则浮点运算值为z=21.6×6.8=146.88;根据Q定标的原则,Qx=10,Qy=12,Qz=7,所以x=22118;y=27852;temp=22118L;z=(22118L*27852)>>(10+12-7)=616030536L>>15=18800;因为z的定标值为7,故定点z=18800即为浮点的z=18800/27=146.88。(3)除法运算的C语言定点实现(Qm-n=Qm/Qn)浮点完成的除法运算为:voidfloat_div(floatx,floaty)
{
floatz;
z=x/y;
}假设经过统计后被除数x的定标值为Qx,除数y的定标值为Qy,商z的定标值为Qz,则z=x/y用定点数实现浮点数除法的C语言实现为::voidfixed_div(intx,inty){longtemp;intz;temp=(long)x;z=(temp<<(Qz-Qx+Qy))/y;}例:定点除法设x=2.41,y=7.23,浮点运算值为z=x/y=2.41/7.23=0.33;根据上节,得Qx=13,Qy=12,Qz=15;所以有x=19742,y=29614;temp=(long)19742;z=(19742L<<(15-13+12))/29614=323452928L/29614=10922;因为商z的定标值为15,所以定点z=10922即为浮点z=10922/215=0.33。IEEE标准的浮点数表示法s代表数的符号,0为正,1为负
e是指数阶码,视做无符号数(0<e<255)
f是尾数的分数部分floatdouble32位单精度浮点数格式数的格式符号位(s)指数阶码(e)尾数的分数(f)代表的数值规格化数x0<e<255x(-1)s×2(e-127)×1.f非规格化数x0非零(-1)s×2(-126)×0.f无穷大数02550+无穷大12550−无穷大无效数x255非零NaN(Not-a-Number)x2551xx..xQnaN(QuietNaN)x2550xx..x和非零SnaN(SignalNaN)符号十六进制值十进制值备注NaN_out0x7FFFFFFFQnaN(QuietNaN)00x000000000.0-00x80000000-0.010x3F8000001.020x400000002.0LFPN0x7F7FFFFF3.40282347e+38单精度规格化浮点数最大值SFPN0x008000001.17549435e-38单精度规格化浮点数正最小值LDFPN0x0007FFFF1.17549421e-38单精度非规格化浮点数最大值SDFPN0x000000011.40129846e-45单精度非规格化浮点数正最小值一些特殊数的单精度浮点数的符号1+2-1+2-2+…+2-23=1+=1+1-2-23=1.99999988079071044921875×2127=3.40282346638528860e+3864位双精度浮点数格式数的格式符号位(s)指数阶码(e)尾数的分数(f)代表的数值规格化数x0<e<2047x(-1)s×2(e-1023)×1.f非规格化数x0非零(-1)s×2(-1022)×0.f无穷大数020470+无穷大120470−无穷大无效数x2047非零NaN(Not-a-Number)x20471xx..xQnaN(QuietNaN)x20470xx..x和非零SnaN(SignalNaN)一些特殊数的单精度浮点数的符号符号十六进制值十进制值备注NaN_out0x7FFFFFFFFFFFFFFFQnaN(QuietNaN)00x00000000000000000.0-00x8000000000000000-0.010x3F800000000000001.020x40000000000000002.0LFPN0x7F7FFFFFFFFFFFFF1.7976931348623157e+308单精度规格化浮点数最大值SFPN0x00800000000000002.2250738585072014e−308单精度规格化浮点数正最小值LDFPN0x0007FFFFFFFFFFFF2.2250738585072009e−308单精度非规格化浮点数最大值SDFPN0x00000000000000014.9406564584124654e−324单精度非规格化浮点数正最小值2.2.5逻辑及位域操作指令3.逻辑操作类:在.L中完成 AND与 OR或 XOR异或 NOT取反 NEG求补码4.移位:在.S中完成 SHL算术左移 SHR算术右移 SHRU逻辑右移 SSHL带饱和的算术左移5.比较类:在.L中完成 CMPEQ,CMPGT,CMPGTU,CMPLT,CMPLTU 比较两有符号/无符号数的大小2.2.5逻辑及位域操作指令7.位操作 位清0/置1CLR/SET 带符号扩展与无符号扩展的位域提取EXT/EXTU 检测冗余符号位 NORMMV:
通用寄存器之间传送数据MVC:
用于在通用寄存器与控制寄存器之间传送数据,使用.S2功能单元。MVK:
用于把16位常数送入通用寄存器MVKH/MVKLH
完成32位常量的赋值2.2.6搬移类指令MVKL 0x1234FABC,A5A5=0xFFFFFABC;WrongExample1A5=0x87654321MVKL 0x1234FABC,A5A5=0xFFFFFABC(signextension)MVKH 0x1234FABC,A5A5=0x1234FABC;OKExample2
MVKH 0x1234FABC,A5A5=0x12344321AlwaysuseMVKLthenMVKH,lookatthefollowingexamples:
2.2.6搬移类指令用标号label表示目标地址的转移指令B(.unit)label;.unit=.S1or.S2用寄存器表示目标地址的转移指令B(.unit)src2;.unit=.S2从可屏蔽中断寄存器取目标地址的转移指令B(.unit)IRP;.unit=.S2从不可屏蔽中断寄存器取目标地址的转移指令B(.unit)NRP;.unit=.S2转移指令有5个指令周期的延迟间隙。转移指令后的5个指令执行包全部进入CPU流水线,并相继执行。
2.2.7
程序转移类指令2.2.8浮点运算指令(1)浮点加减法指令
ADDSP/ADDDP/SUBSP/SUBDP
(2)数据类型转换指令10条
INTSP(U)/INTDP(U)/SPINT/DPINT/SPDP/SPTRUNC/DPSP/DPTRUNC
(3)浮点乘法及32位整数乘法指令6条
MPYSP/MPYSPDP/MPYSP2DP/MPYDP/MPYI/MPYID
(4)特殊的浮点运算指令6条
ABSSP/ABSDP/RCPSP/RCPDP(倒数)/RSQRSP/RSQRDP(平方根倒数)
(5)单/双精度浮点数的比较判决指令6条
CMPLTSP/CMPLTDP/CMPGTSP/CMPGTDP/CMPEQSP/CMPEQDP
(6)双精度数据的读取/存储指令
LDDW/STDW
2.C672x的浮点运算控制寄存器作用:
(1)为.L、.S和.M单元的运算设置浮点舍入方式;
(2)包括一些字段用来记录指令执行中遇到的问题,以便检查,包括:
源操作数src1和src2是否是无效数NaN或非规格化数;
结果是否上溢、下溢、不准确、无穷大或者无效;
是否执行了除以零的操作;
是否用了NaN源操作数作比较等。FADCR2.C672x的浮点运算控制寄存器NOP指令
NOP空操作,不使用功能单元,单周期
NOPn,空跳n次,n周期
NOP与其它指令并行使用,将给其它指令增加额外的延迟间隙跳转指令可影响多周期NOP的执行EP1中含单NOP指令,各指令的结果在适当周期可用,NOP对EP无影响EP2中含5周期NOP指令,在NOP5完成之前,任何其它指令不能使用执行结果
EP1EP2NOP指令当一个跳转指令的5个延迟间隙结束时,不管NOPn结束否,这时跳转目标都进入执行操作,废弃多周期NOP跳转指令影响多周期NOP的执行资源限制在同一EP中,任两条指令不能使用相同的功能单元例1:
ADD.S1A0,A1,A2||SHR.S1A3,A5,A4;S1被两条指令同时使用可改为:
ADD.L1A0,A1,A2||SHR.S1A3,A5,A4;使用两个不同的功能单元资源限制使用同一条交叉通路的两条指令不能安排在同一EP中(只有1条交叉通路)
例2
ADD.L1XA0,B1,A1||MPY.M1XA4,B4,A5;1X被两条指令同时使用可改为:
ADD.L1XA0,B1,A1||MPY.M2XA4,B4,A5;使用了不同路径数据读/写的限制(1)使用相同寄存器组作为目的地址/源地址的两条读/写指令不能安排在同一EP中。数据读写所用的地址寄存器必须与所用的功能单元处于同一数据通道例3
LDW.D1*A0,A1||LDW
.D2*A1,B2
;.D2必须使用B组寄存器改为:
LDW.D1*A0,A1||LDW
.D2*B0,B2
;
寄存器所在组正确数据读/写的限制(2)将数据读入到(或储存自)相同寄存器组的两条读(或写)指令不能安排在同一EP中;将数据读入到和储存自相同寄存器组的两条指令不能安排在同一EP中例4 LDW.D1*A4,A5||STW.D2
A6,*B4
;读入到、储存自同组寄存器改为:
LDW.D1
*A4,B5||STW.D2
A6,*B4
;
寄存器所在组正确使用长定点类型(40位)数据的限制(1)因为.S和.L单元共用一套为长定点型的源操作数准备的读寄存器通路和为长定点型的结果准备的写寄存器通路,所以每一个执行包只容许每一寄存器组处理一个长定点类型数据例5
ADD.L1A5:A4,A1,A3:A2||SHL.S1A8,A9,A7:A6 ;两个长数据写入同一组 改为:
ADD.L1A5:A4,A1,A3:A2||SHL.S2B8,B9,B7:B6 ;每组一个长数据使用长定点类型(40位)数据的限制(2)因为.S和.L单元的一个长数据读通路和写通路共用,所以同一S单元或L单元的长数据读操作和存储操作不能安排在同一执行包中例6
ADD.L1A5:A4,A1,A3:A2||STW.D1A8,*A9 ;长数据读操作与存储操作冲突 改为:
ADD.L1A4,A1,A3:A2||STW.D1A8,*A9 ;去掉长数据读操作存储器读取的限制对同一寄存器在一个指令周期读取多于4次是不允许的,条件寄存器不在此限制之列例7
MPY.M1A1,A1,A4||ADD.L1A1,A1,A5||SUB.D1A1,A2,A3;对A1进行5次读写
MPY.M1A1,A1,A4||ADD.L1A0,A1,A5||SUB.D1A1,A2,A3;只对A1进行4次读写存储器存储的限制在同一指令周期内不能同时存在两条指令写入同一寄存器。具有同一目的地址的两条指令可以安排并行,只要向该目的寄存器的写操作不在同一指令周期发生例8
MPY.M1A0,A1,A2 ADD.L1A4,A5,A2;写A2在同一周期发生!
ADD.L1A4,A5,A2|| MPY.M1A0,A1,A2;不存在问题!例程:0201-0207CCS软件演示ImplementationofSumofProducts(SOP)汇编程序综合示例ImplementationofSumofProducts(SOP)SOPisthekeyelementformostDSPalgorithms.Solet’swritethecodeforthisalgorithmandatthesametimelearntheC6000architecture.Twobasicoperationsarerequiredforthisalgorithm.(1)Multiplication(2)AdditionThereforetwobasicinstructionsarerequiredY=N
an
xnn=1*=a1
*x1+a2*x2
+...+aN*
xNMultiply(MPY)Themultiplicationofa1byx1isdoneinassemblybythefollowinginstruction:MPY a1,x1,YThisinstructionisperformedbyamultiplierunitthatiscalled“.M”Y=N
an
xnn=1*=a1
*x1+a2*x2
+...+aN*
xNTheimplementationinthismodulewillbedoneinassembly.Multiply(.Munit).MY=40
an
xnn=1*The.MunitperformsmultiplicationsinhardwareMPY .M a1,x1,Y
Note:16-bitby16-bitmultiplierprovidesa32-bitresult. 32-bitby32-bitmultiplierprovidesa64-bitresult.Addition(.?).M.?Y=40
an
xnn=1*
MPY .M a1,x1,prod
ADD .? Y,prod,Y
Add(.Lunit).M.LY=40
an
xnn=1*
MPY .M a1,x1,prod
ADD .L Y,prod,Y
RISCprocessorssuchastheC6000useregisterstoholdtheoperands,soletschangethiscode.RegisterFile-AY=40
an
xnn=1*
MPY .M a1,x1,prod ADD .L Y,prod,Y
.M.LA0A1A2A3A4A15RegisterFileA.
.
.a1x1prod32-bitsYLetuscorrectthisbyreplacinga,x,prodandYbytheregistersasshownabove.SpecifyingRegisterNamesY=40
an
xnn=1*
MPY .M A0,A1,A3 ADD .L A4,A3,A4
TheregistersA0,A1,A3andA4containthevaluestobeusedbytheinstructions..M.LA0A1A2A3A4A15RegisterFileA.
.
.a1x1prod32-bitsYY=40
an
xnn=1*
MPY .M A0,A1,A3 ADD .L A4,A3,A4
RegisterFileAcontains16registers(A0-A15)whichare32-bitswide..M.LA0A1A2A3A4A15RegisterFileA.
.
.a1x1prod32-bitsYSpecifyingRegisterNamesA:Theoperandsareloadedintotheregistersbyloadingthemfromthememoryusingthe.Dunit..M.LA0A1A2A3A15RegisterFileA.
.
.a1x1prod32-bitsY.DDataMemoryQ:Howdoweloadtheoperandsintotheregisters?DataloadingA:Theloadinstructions..M.LA0A1A2A3A15RegisterFileA.
.
.a1x1prod32-bitsY.DDataMemoryQ:Whichinstruction(s)canbeusedforloadingoperandsfromthememorytotheregisters?LoadInstructions(LDB,LDH,LDW,LDDW)0000000000000004000000080000000C00000010Data32-bitsBeforeusingtheloadunityouhavetobeawarethatthisprocessorisbyteaddressable,whichmeansthateachbyteisrepresentedbyauniqueaddress.Alsotheaddressesare32-bitwide.addressFFFFFFFFLoadInstructions(LDB,LDH,LDW,LDDW)Thesyntaxfortheloadinstructionis:Where:Rnisaregisterthatcontainstheaddressoftheoperandtobeloadedand
Rmisthedestinationregister.0000000000000004000000080000000C00000010Dataa1x1prod32-bitsYaddressFFFFFFFFLDx*Rn,RmLoadInstructions(LDB,LDH,LDW,LDDW)Thesyntaxfortheloadinstructionis:Thequestionnowishowmanybytesaregoingtobeloadedintothedestinationregister?0000000000000004000000080000000C00000010Dataa1x1prod32-bitsYaddressFFFFFFFFLoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,RmThesyntaxfortheloadinstructionis:0000000000000004000000080000000C00000010Dataa1x1prod32-bitsYaddressFFFFFFFFTheanswer,isthatitdependsontheinstructionyouchoose: LDB:loadsonebyte(8-bit) LDH:loadshalfword(16-bit) LDW:loadsaword(32-bit) LDDW:loadsadoubleword(64-bit)Note:LDonitsowndoesnotexist.LoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,Rm0000000000000004000000080000000C00000010Data32-bitsaddressFFFFFFFFDCBAExample:IfweassumethatA5=0x4then:(1) LDB*A5,A7;givesA7=0x00000001(2) LDH*A5,A7;givesA7=0x00000201(3) LDW*A5,A7;givesA7=0x04030201(4) LDDW*A5,A7:A6;
givesA7:A6=0x0807060504030201Thesyntaxfortheloadinstructionis:01LoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,Rm43218765FE90Question:Ifdatacanonlybeaccessedbytheloadinstructionandthe.Dunit,howcanweloadtheregisterpointerRninthefirstplace?Thesyntaxfortheloadinstructionis:LoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,Rm0000000000000004000000080000000C00000010Data32-bitsaddressFFFFFFFFDCBA0143218765FE90TheinstructionMVKLwillallowamoveofa16-bitconstantintoaregisterasshownbelow: MVKL.?a,A5 (‘a’isaconstantorlabel)Howmanybitsrepresentafulladdress?32bitsSowhydoestheinstructionnotallowa32-bitmove? Allinstructionsare32-bitwide(seeinstructionopcode).LoadingthePointerRnTosolvethisproblemanotherinstructionisavailable:
MVKH.?a,A5Finally,tomovethe32-bitaddresstoaregisterwecanuse:MVKL a,A5MVKH a,A5LoadingthePointerRnMVKL 0x1234FABC,A5A5=0xFFFFFABC;WrongExample1A5=0x87654321MVKL 0x1234FABC,A5A5=0xFFFFFABC(signextension)MVKH 0x1234FABC,A5A5=0x1234FABC;OKExample2
MVKH 0x1234FABC,A5A5=0x12344321AlwaysuseMVKLthenMVKH,lookatthefollowingexamples:
LoadingthePointerRnLDH,MVKLandMVKH.M.LA0A1A2A3A15RegisterFileA.
.
.axprod32-bitsY.DDataMemory
MVKL pt1,A5MVKH pt1,A5MVKL pt2,A6MVKH pt2,A6LDH .D *A5,A0LDH .D *A6,A1
MPY .M A0,A1,A3ADD .L A4,A3,A4
CreatingaloopWiththeC6000processorstherearenodedicatedinstructionssuchasblockrepeat.TheloopiscreatedusingtheBinstruction.
SofarwehaveonlyimplementedtheSOPforonetaponly,i.e.Y=a1
*x1Solet’screatealoopsothatwecanimplementtheSOPforNTaps.Whatarethestepsforcreatingaloop1. Createalabeltobranchto.2. Addabranchinstruction,B.3. Createaloopcounter.4. Addaninstructiontodecrementtheloopcounter.5. Makethebranchconditionalbasedonthevalueintheloopcounter.1.Createalabeltobranchto
MVKL pt1,A5 MVKH pt1,A5 MVKL pt2,A6 MVKH pt2,A6loop LDH .D *A5,A0 LDH .D *A6,A1
MPY .M A0,A1,A3 ADD .L A4,A3,A4
MVKL pt1,A5 MVKH pt1,A5 MVKL pt2,A6 MVKH pt2,A6loop LDH .D *A5,A0 LDH .D *A6,A1
MPY .M A0,A1,A3 ADD .L A4,A3,A4 B .? loop
2.Addabranchinstruction,B.DataMemoryWhichunitisusedbytheBinstruction?.M.LA0A1A2A3A15RegisterFileA.
.
.axprod32-bitsY.D.M.LA0A1A2A3A15RegisterFileA.
.
.axprod32-bitsY.D.S
MVKL .S pt1,A5 MVKH .S pt1,A5 MVKL .S pt2,A6 MVKH .S pt2,A6loop
LDH .D *A5,A0 LDH .D *A6,A1
MPY .M A0,A1,A3 ADD .L A4,A3,A4 B .S loop
DataMemory3.Createaloopcounter..M.LA0A1A2A3A15RegisterFileA.
.
.axprod32-bitsY.D.M.LA0A1A2A3A15RegisterFileA.
.
.axprod32-bitsY.D.S
MVKL .S pt1,A5 MVKH .S pt1,A5 MVKL .S pt2,A6 MVKH .S pt2,A6 MVKL .S count,B0loop
LDH .D *A5,A0 LDH .D *A6,A1
MPY .M A0,A1,A3 ADD .L A4,A3,A4 B .S loop
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年跨境电商进口商品购销合同规范文本3篇
- 2024版昆山租房合同范本
- 2024水泵采购合同范本及注意事项
- 2024建设项目钢筋工劳务输出协议版B版
- 2024年特定零星工程修建协议样本版B版
- 2024版建筑工程班组人力贡献协议版
- 2024年版:植筋工程专项分包协议3篇
- 2022年中考化学模拟卷4(人教版)(解析版)
- 2023-2024年护师类之护师初级基础试题库和答案要点
- 2023-2024年报检员之报检员资格考试题库练习A卷(附答案)
- 2024午托承包合同-校园内学生午休服务协议3篇
- 马克思主义基本原理+2024秋+试题 答案 国开
- 苏州大学《线性代数与解析几何》2023-2024学年第一学期期末试卷
- 《地震灾害及其防治》课件
- 2024年版电商平台入驻商家服务与销售分成合同
- 蜜雪冰城合同范例
- 小红书种草营销师(初级)认证考试真题试题库(含答案)
- LPG液化气充装站介质分析操作规程 202412
- 养老院环境卫生保洁方案
- 中学学校装修改造工程施工组织设计方案
- 2024年WPS计算机二级考试题库350题(含答案)
评论
0/150
提交评论