DSP原理与应用CPU结构与指令集_第1页
DSP原理与应用CPU结构与指令集_第2页
DSP原理与应用CPU结构与指令集_第3页
DSP原理与应用CPU结构与指令集_第4页
DSP原理与应用CPU结构与指令集_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

会计学1DSP原理与应用CPU结构与指令集DSP的一般结构2.1CPU结构外设CPU内部存储器内部总线外部存储器数据寄存器处理单元片内存储器片外存储器存储器的层次第1页/共128页2.1.1CPU结构框图程序取指指令分配指令译码程序执行机构程序总线数据总线第2页/共128页存储器映射(统一编址)描述起始地址终止地址单字节或四字节寻址内部ROM页0(256KBytes)0x000000000x0003FFFF单字节或四字节内部ROM页1(128KBytes)0x000400000x0005FFFF单字节或四字节内部RAM页0(256KBytes)0x100000000x1003FFFF单字节或四字节存储器和缓存控制寄存器0x200000000x2000001F单字节器件配置寄存器0x400000000x40000083单字节PLL控制寄存器0x410000000x4100015F单字节定时器(RTI)控制寄存器0x420000000x420000A3单字节通用主机接口(UHPI)寄存器0x430000000x43000043单字节McASP0控制寄存器0x440000000x440002BF单字节SPI0控制寄存器0x470000000x4700007F单字节I2C0控制寄存器0x490000000x4900007F单字节I2C1控制寄存器0x4A0000000x4A00007F单字节McASP0DMA端口(此范围内的任何地址)0x540000000x54FFFFFF单字节dMAX控制寄存器0x600000000x6000008F单字节dMAX0(HiMAX)事件入口表0x610080000x6100807F单字节或四字节dMAX0(HiMAX)传输入口表0x610080A00x610081FF单字节或四字节通过EMIF访问的外部SDRAM空间0x800000000x8FFFFFFF单字节或四字节通过EMIF访问的外部异步器件/Flash空间0x900000000x9FFFFFFF单字节或四字节EMIF控制寄存器0xF00000000xF00000BF单字节第3页/共128页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)第4页/共128页1.通用寄存器组功能(1)存放数据,作为指令的源操作数和目的操作数。注意传送方向和数据字长(2)作为间接寻址的地址指针,寄存器A4~A7和B4~B7还能够以循环寻址方式工作(3)A1、A2、B0、B1和B2可用做条件寄存器第5页/共128页A1:A0A3:A2…A29:A28A31:A30oddeven:32840-bitRegB1:B0B3:B2…B29:B28B31:B30oddeven:32840-bitReg40位/64位寄存器对

Allcombinationsof40-bitregistersareshownbelow:Theregistersmustbefromthesameside.Thefirstregistermustbeevenandthesecondodd.Theregistersmustbeconsecutive.第6页/共128页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位常数偏移量的双字读取第7页/共128页3.寄存器组交叉通路.L1、.S1、.D1和.M1可以直接读写寄存器组A

.L2、.S2、.D2和.M2可以直接读写寄存器组B

1x交叉通路允许数据通道A的功能单元从寄存器组B读它的源操作数

2x交叉通路允许数据通道B的功能单元从寄存器组A读它的源操作数第8页/共128页4.数据存储器及读取存储通路(Load指令)寄存器组A的读入通路为LD1(2个32位)

寄存器组B的读入通路为LD2(2个32位)

LDDW指令一次可读取64位数据到A或B寄存器

(Store指令)寄存器组A的写数据通路为ST1寄存器组B的写数据通路为ST2第9页/共128页5.数据地址通路数据地址通路DA1和DA2来自.D功能单元

数据通道以T1、T2表示

LDW.D1T2*A0[3],B1D1产生地址,用LD2数据通道读入数据到B1寄存器第10页/共128页6.控制寄存器组缩写寄存器名描述AMR寻址模式寄存器指定是否使用线性或循环寻址。如果是循环寻址,还包括循环寻址的尺寸CSR控制状态寄存器包括全局中断使能位,高速缓冲存储器控制位和其他各种控制和状态位FADCR浮点加法配置寄存器指定.L单元的溢出方式,舍入方式,记录NaN及其他异常FAUCR浮点辅助配置寄存器记录.S单元NaN及其他异常FMCR浮点乘法配置寄存器指定.M单元的溢出方式,舍入方式,记录NaN及其他异常ICR中断清除寄存器允许软件清除挂起的中断IER中断使能寄存器允许使能/禁止个别中断IFR中断标志寄存器显示中断状态IRP中断返回指针保存从可屏蔽中断返回时的地址ISR中断设置寄存器允许软件控制设置中断ISTP中断服务表指针指向中断服务表的起始地址NRP不可能屏蔽中断返回指针保存从不可屏蔽中断返回时的地址PCE1程序计数器保存处于流水线E1节拍的取指包地址第11页/共128页6.控制寄存器组模式描述00线性寻址(复位后默认值)01循环寻址使用BK0字段10循环寻址使用BK1字段11保留寻址模式寄存器(AMR)

第12页/共128页控制状态寄存器(CSR)位字段名功能15−10PWRD控制低功耗模式,该值读时总为零9SAT饱和位。任一功能单元执行一个饱和操作时被置1,饱和位只能有MVC指令清零,被功能单元饱和操作置位。当清除和置位在同一周期内发生时,功能单元对它的置位优先。饱和位在饱和发生后一个周期被置位8EN端结方式:1=小端终结,0=大端终结7−5PCCPCC程序高速缓冲存储器控制模式4−2DCC数据高速缓冲存储器控制模式1PGIE当一个中断发生时,保存以前的全局中断使能位GIE0GIE全局中断使能位,它控制除复位和不可屏蔽中断之外的所有可屏蔽中断使能:GIE=1时,可屏蔽中断使能:GIE=0时,可屏蔽中断禁止6.控制寄存器组第13页/共128页2.2.1指令集概述1.指令和功能单元之间的映射

指令功能单元

乘法相关的指令都是在.M单元执行

产生数据存储器地址的指令在.D功能单元

算术逻辑运算大多在.L与.S单元执行

第14页/共128页2.延迟间隙延迟间隙在数量上等于从指令的源操作数被读取直到执行的结果可以被访问所需要的指令周期数。指令类型延迟间隙功能单元等待时间读周期写周期单周期01ii2周期DP11ii,i+1DP比较12i,i+11+14周期31ii+3INT到DP转换41ii+3,i+4Load41ii,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+9第15页/共128页3.指令操作码映射图代码段说明creg指定条件寄存器的代码z指定条件src,dst分别指定源及目的操作数代码x指定源操作数2是否使用交叉通道op指令操作代码s选择寄存器组A或B作为目的操作数p指定是否并行执行第16页/共128页CPU运行时,总是一次取

8条指令,组成一个取指包

所有并行执行的指令组成一个执行包

周期/执行包指令1A2B3CDE4FGH4.并行操作第17页/共128页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.条件操作第18页/共128页6.寻址方式全部采用间接寻址

所有寄存器都可以做线性寻址的地址指针

循环寻址的地址指针:A4-A7,B4-B7

由AMR控制地址修改方式:线件方式或循环方式

循环寻址循环块的尺寸与BK0/BK1内5位数值N的关系为块尺寸=2(N+1)字节例如N的二进制数为10000,等于十进制16,则块尺寸=2(16+1)=131072字节第19页/共128页寻址方式不修改地址寄存器先修改地址寄存器后修改地址寄存器寄存器间接寻址*R*++R*--R*R++*R--寄存器相对寻址*+R[ucst5]*-R[ucst5]*++R[ucst5]*--R[ucst5]*R++[ucst5]*R--[ucst5]基地址+变址*+R[offseR]*-R[offseR]*++R[offseR]*--R[offseR]*R++[offseR]*R--[offseR]带15位常数偏移量的寄存器相对寻址*+B14/B15[ucst15]6.寻址方式读取/存储类指令访问数据存储器地址的汇编语法格式

ucst5-----无符号二进制5位常数偏移量ucst15---无符号二进制15位常数偏移量第20页/共128页Little-endianordering,inwhichbytesareorderedfromrighttoleft,themostsignificantbytehavingthehighestaddressBig-endianordering,inwhich

bytes

areorderedfromlefttoright,themostsignificantbytehavingthelowestaddress大小端位由DSP的LENDIAN管脚设置终结方式(大小端位)第21页/共128页BA987654h11,10,01,00BA987654h00,01,10,11终结方式(大小端位)第22页/共128页C6000DSP汇编指令分类读取/存储类指令 算术运算类指令逻辑与位操作类指令搬移类指令程序转移类指令

空操作类指令浮点操作类指令第23页/共128页2.2.2读取/存储类指令读取指令:LDB/LDBU/LDH/LDHU/LDW/LDDW

存储指令:STB/STH/STW

单字节(Byte)、双字节(半字HalfWord)和四字节(字Word)位数不同有符号/无符号(U),符号位的扩展不同地址偏移修正因子:LDB(U)/LDH(U)/LDW指令分别读入字节/半字/字,要乘以相应的比例因子1、2、4

第24页/共128页2.2.2读取/存储类指令例2-1线性寻址下的变址计算

LDW.D1*++A4[1],A6

此例为先修改地址,地址偏移量按1×4计算,计算结果如下所示:示例0201第25页/共128页2.2.2读取/存储类指令例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。

示例0202第26页/共128页2.2.3算术运算类指令1.加减运算指令

(1)ADD/ADDU/SUB/SUBU

操作数为整型(32位)或长整型(40位)的指令(2)ADD2/SUB2

操作数为半字(16位)的指令,ADD2/SUB2指令的特点是同时进行2个16位补码数的加减运算,高半字与低半字之间没有进/借位,各自独立进行(3)SADD/SSUB

带饱和的有符号数加减运算指令,操作数为32位或40位有符号数(4)ADDK

与16位常数进行加法操作的指令(5)ADDAB/ADDAH/ADDAW/ADDAD,SUBAB/SUBAH/SUBAW

按寻址方式的加减运算类指令第27页/共128页溢出问题如果运算结果超出目的操作数字长所能表示的范围,造成运算结果的高位丢失,使保存的运算结果不正确,称为溢出。通常有3种办法解决溢出问题(1)用较长的字长来存放运算结果:1632可行,3240耗时(2)用带饱和的加减运算指令做补码数加减运算:保证符号不变,并且给出提示位(3)对整个系统乘一个小于1的比例因子:实际中最常用2.2.3算术运算类指令第28页/共128页2.2.3算术运算类指令例2-3减法运算举例SSUB.L2B1,B2,B3

SUB.L2B1,B2,B3SUB.L2B1,B2,B5:B4示例0203溢出了!符号位在这里无溢出!第29页/共128页2.2.3算术运算类指令例2-4计算累加和的程序,用长型数存放和数,有8位保护位,示例0204Loop:LDW.D1*A4++,A0NOP4ADD.L1A3:A2,A0,A3:A2SUB.L2B1,1,B1[B1]B.S1LoopNOP5

第30页/共128页2.2.3算术运算类指令例2-5按寻址方式的加法运算指令

ADDAH.D1A4,A2,A4B×2=16h对8取余得6示例0205第31页/共128页2.2.3算术运算类指令例2-6按寻址方式的减法运算指令

SUBAB.D1A5,A0,A5-4×1=-4h对10h取余得C示例0205第32页/共128页2.2.3算术运算类指令2.乘法运算指令

(1)适宜于整数乘法的指令

以MPY为首字母的22条指令

(2)适宜于Q格式数相乘的3条指令

SMPY/SMPYLH/SMPYHL

以16×16位的硬件乘法器为基础,整数乘法的2个源操作数都是16位字长,目的操作数为32的寄存器,不存在溢出问题。

第33页/共128页所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数。Q格式:小数点位于第n位之右侧,称为Qn格式

定点小数是纯小数,约定的小数点位置在符号位之后、有效数值部分最高位之前。若数据

x的形式为

x=x0.x1x2…xn(其中x0为符号位,x1~xn是数值的有效部分,也称为尾数,x1为最高有效位),则在计算机中的表示形式为:Q格式定点数2-n

≤|x|≤1-2-nQ0格式数第34页/共128页定点整数是纯整数,约定的小数点位置在有效数值部分最低位之后。若数据

x的形式为

x=x0x1x2…xn(其中x0为符号位,x1~xn

是尾数,xn

为最低有效位),则在计算机中的表示形式为:Q格式定点数1≤|x|≤2n-1

Q15格式数第35页/共128页2.2.3算术运算类指令例2-7整数乘法运算

(1)MPYH.M1A1,A2,A3

(2)MPYHU.M1A1,A2,A3

示例0207符号位扩展无符号数第36页/共128页1.逻辑运算指令:

AND、OR、XOR、NEG(求补码)2.移位指令:

算术左移指令SHL、算术右移指令SHR、逻辑右移(无符号扩展右移)指令SHRU、带饱和的算术左移指令SSHL。

SHRsrc2,src1,dst

(src1的低6位指定右移位数)

3.位操作指令:寄存器控制中常用

位域清零/置位指令CLR/SET;

带符号扩展与无符号扩展的位域提取指令EXT/EXTU

LMBD指令,寻找src2中与src1最低位(LSB)相同的最高位位置

NORM指令,检测有多少个冗余的符号位4.比较及判别类指令:循环条件判断时用

CMPEQ/CMPGT(U)/CMPLT(U)指令用于比较两个有/无符号数的相等、大于、小于,若为真,则目的寄存器置1;反之,目的寄存器置0。

2.2.4逻辑及位域操作指令第37页/共128页MV:

通用寄存器之间传送数据MVC:

用于在通用寄存器与控制寄存器之间传送数据,此条指令只能使用.S2功能单元MVK:

用于把16位常数送入通用寄存器MVKH/MVKLH

MVKL

结合生成32位常量2.2.5搬移类指令第38页/共128页用标号label表示目标地址的转移指令B(.S)label用寄存器表示目标地址的转移指令B.S2src2从可屏蔽中断寄存器取目标地址的转移指令B.S2IRP从不可屏蔽中断寄存器取目标地址的转移指令B.S2NRP转移指令有5个指令周期的延迟间隙。转移指令后的5个指令执行包全部进入CPU流水线,并相继执行。2.2.6

程序转移类指令第39页/共128页2.2.7浮点运算指令(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

第40页/共128页1.IEEE标准的浮点数表示法s代表数的符号,0为正,1为负

e是指数阶码,视做无符号数(0<e<255)

f是尾数的分数部分floatdouble第41页/共128页32位单精度浮点数格式数的格式符号位(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)第42页/共128页符号十六进制值十进制值备注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+38第43页/共128页64位双精度浮点数格式数的格式符号位(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)第44页/共128页一些特殊数的单精度浮点数的符号符号十六进制值十进制值备注NaN_out0x7FFFFFFFFFFFFFFFQnaN(QuietNaN)00x00000000000000000.0-00x8000000000000000-0.010x3F800000000000001.020x40000000000000002.0LFPN0x7F7FFFFFFFFFFFFF1.7976931348623157e+308单精度规格化浮点数最大值SFPN0x00800000000000002.2250738585072014e−308单精度规格化浮点数正最小值LDFPN0x0007FFFFFFFFFFFF2.2250738585072009e−308单精度非规格化浮点数最大值SDFPN0x00000000000000014.9406564584124654e−324单精度非规格化浮点数正最小值第45页/共128页2.C672x的浮点运算控制寄存器作用:

(1)为.L、.S和.M单元的运算设置浮点舍入方式;

(2)包括一些字段用来记录指令执行中遇到的问题,以便检查,包括:

源操作数src1和src2是否是无效数NaN或非规格化数;

结果是否上溢、下溢、不准确、无穷大或者无效;

是否执行了除以零的操作;

是否用了NaN源操作数作比较等。第46页/共128页FADCR2.C672x的浮点运算控制寄存器第47页/共128页ImplementationofSumofProducts(SOP)第48页/共128页ImplementationofSumofProducts(SOP)SOPisthekeyelementformostDSPalgorithms.Solet’swritethecodeforthisalgorithmandatthesametimelearntheC6000architecture.Twobasicoperationsarerequiredforthisalgorithm.(1)Multiplication(2)AdditionThereforetwobasicinstructionsarerequiredY=Nan

xnn=1*=a1

*x1+a2*x2

+...+aN*

xN第49页/共128页Multiply(MPY)Themultiplicationofa1byx1isdoneinassemblybythefollowinginstruction:MPY a1,x1,YThisinstructionisperformedbyamultiplierunitthatiscalled“.M”Y=Nan

xnn=1*=a1

*x1+a2*x2

+...+aN*

xNTheimplementationinthismodulewillbedoneinassembly.第50页/共128页Multiply(.Munit).MY=40anxnn=1*The.MunitperformsmultiplicationsinhardwareMPY .M a1,x1,Y

Note:16-bitby16-bitmultiplierprovidesa32-bitresult. 32-bitby32-bitmultiplierprovidesa64-bitresult.第51页/共128页Addition(.?).M.?Y=40anxnn=1*

MPY .M a1,x1,prod

ADD .? Y,prod,Y

第52页/共128页Add(.Lunit).M.LY=40anxnn=1*

MPY .M a1,x1,prod

ADD .L Y,prod,Y

RISCprocessorssuchastheC6000useregisterstoholdtheoperands,soletschangethiscode.第53页/共128页RegisterFile-AY=40anxnn=1*

MPY .M a1,x1,prod ADD .L Y,prod,Y

.M.LA0A1A2A3A4A15RegisterFileA.

.

.a1x1prod32-bitsYLetuscorrectthisbyreplacinga,x,prodandYbytheregistersasshownabove.第54页/共128页SpecifyingRegisterNamesY=40anxnn=1*

MPY .M A0,A1,A3 ADD .L A4,A3,A4

TheregistersA0,A1,A3andA4containthevaluestobeusedbytheinstructions..M.LA0A1A2A3A4A15RegisterFileA.

.

.a1x1prod32-bitsY第55页/共128页Y=40anxnn=1*

MPY .M A0,A1,A3 ADD .L A4,A3,A4

RegisterFileAcontains16registers(A0-A15)whichare32-bitswide..M.LA0A1A2A3A4A15RegisterFileA.

.

.a1x1prod32-bitsYSpecifyingRegisterNames第56页/共128页A:Theoperandsareloadedintotheregistersbyloadingthemfromthememoryusingthe.Dunit..M.LA0A1A2A3A15RegisterFileA.

.

.a1x1prod32-bitsY.DDataMemoryQ:Howdoweloadtheoperandsintotheregisters?Dataloading第57页/共128页A:Theloadinstructions..M.LA0A1A2A3A15RegisterFileA.

.

.a1x1prod32-bitsY.DDataMemoryQ:Whichinstruction(s)canbeusedforloadingoperandsfromthememorytotheregisters?LoadInstructions(LDB,LDH,LDW,LDDW)第58页/共128页0000000000000004000000080000000C00000010Data32-bitsBeforeusingtheloadunityouhavetobeawarethatthisprocessorisbyteaddressable,whichmeansthateachbyteisrepresentedbyauniqueaddress.Alsotheaddressesare32-bitwide.addressFFFFFFFFLoadInstructions(LDB,LDH,LDW,LDDW)第59页/共128页Thesyntaxfortheloadinstructionis:Where:Rnisaregisterthatcontainstheaddressoftheoperandtobeloadedand

Rmisthedestinationregister.0000000000000004000000080000000C00000010Dataa1x1prod32-bitsYaddressFFFFFFFFLDx*Rn,RmLoadInstructions(LDB,LDH,LDW,LDDW)第60页/共128页Thesyntaxfortheloadinstructionis:Thequestionnowishowmanybytesaregoingtobeloadedintothedestinationregister?0000000000000004000000080000000C00000010Dataa1x1prod32-bitsYaddressFFFFFFFFLoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,Rm第61页/共128页Thesyntaxfortheloadinstructionis: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,Rm第62页/共128页0000000000000004000000080000000C00000010Data32-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,Rm43218765FE90第63页/共128页Question:Ifdatacanonlybeaccessedbytheloadinstructionandthe.Dunit,howcanweloadtheregisterpointerRninthefirstplace?Thesyntaxfortheloadinstructionis:LoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,Rm0000000000000004000000080000000C00000010Data32-bitsaddressFFFFFFFFDCBA0143218765FE90第64页/共128页TheinstructionMVKLwillallowamoveofa16-bitconstantintoaregisterasshownbelow: MVKL.?a,A5 (‘a’isaconstantorlabel)Howmanybitsrepresentafulladdress?32bitsSowhydoestheinstructionnotallowa32-bitmove? Allinstructionsare32-bitwide(seeinstructionopcode).LoadingthePointerRn第65页/共128页Tosolvethisproblemanotherinstructionisavailable:

MVKH.?a,A5Finally,tomovethe32-bitaddresstoaregisterwecanuse:MVKL a,A5MVKH a,A5LoadingthePointerRn第66页/共128页MVKL 0x1234FABC,A5A5=0xFFFFFABC;WrongExample1A5=0x87654321MVKL 0x1234FABC,A5A5=0xFFFFFABC(signextension)MVKH 0x1234FABC,A5A5=0x1234FABC;OKExample2

MVKH 0x1234FABC,A5A5=0x12344321AlwaysuseMVKLthenMVKH,lookatthefollowingexamples:

LoadingthePointerRn第67页/共128页LDH,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

第68页/共128页CreatingaloopWiththeC6000processorstherearenodedicatedinstructionssuchasblockrepeat.TheloopiscreatedusingtheBinstruction.

SofarwehaveonlyimplementedtheSOPforonetaponly,i.e.Y=a1

*x1Solet’screatealoopsothatwecanimplementtheSOPforNTaps.第69页/共128页Whatarethestepsforcreatingaloop1. Createalabeltobranchto.2. Addabranchinstruction,B.3. Createaloopcounter.4. Addaninstructiontodecrementtheloopcounter.5. Makethebranchconditionalbasedonthevalueintheloopcounter.第70页/共128页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

第71页/共128页

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.第72页/共128页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

第73页/共128页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

Bregisterswillbeintroducedlater第74页/共128页4.Decrementtheloopcounter.M.LA0A1A2A3A15RegisterFileA.

.

.axprod32-bitsY.DDataMemory.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

SUB .S B0,1,B0 B .S loop

第75页/共128页Whatisthesyntaxformakinginstructionconditional? [condition] Instruction Label e.g. [B0] B loop (1) Theconditioncanbeoneofthefollowingregisters:A1,A2,B0,B1,B2.(2) Anyinstructioncanbeconditional.5.Makethebranchconditional第76页/共128页Theconditioncanbeinvertedbyaddingtheexclamationsymbol“!”asfollows: [!condition] Instruction Label e.g. [!B0] B loop;branchifB0=0 [B0] B loop ;branchifB0!=05.Makethebranchconditional第77页/共128页DataMemory.M.LA0A1A2A3A15RegisterFileA.

.

.axprod32-bitsY.D.M.LA0A1A2A3A15RegisterFileA.

.

.axprod32-bitsY.D.S

MVKL .S2 pt1,A5 MVKH .S2 pt1,A5 MVKL .S2 pt2,A6 MVKH .S2 pt2,A6

MVKL .S2 count,B0loop

LDH .D *A5,A0 LDH .D *A6,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 SUB .S B0,1,B0

[B0] B .S loop

5.Makethebranchconditional第78页/共128页Case1: B.S1 label

Relativebranch.Labellimitedto+/-220offset.

MoreontheBranchInstruction(1)Withthisprocessoralltheinstructionsareencodedina32-bit.Thereforethelabelmusthaveadynamicrangeoflessthan32-bitastheinstructionBhastobecoded.21-bitrelativeaddressB32-bit第79页/共128页MoreontheBranchInstruction(2)Byspecifyingaregisterasanoperandinsteadofalabel,itispossibletohaveanabsolutebranch.Thiswillallowadynamicrangeof232.Case2: B.S2

registerAbsolutebranch.Operateson.S2ONLY!5-bitregistercodeB32-bit第80页/共128页TestingthecodeThiscodeperformsthefollowingoperations:a0*x0+a0*x0+a0*x0+…+a0*x0However,wewouldliketoperform:a0*x0+a1*x1+a2*x2+…+aN*xN

MVKL .S2 pt1,A5 MVKH .S2 pt1,A5 MVKL .S2 pt2,A6 MVKH .S2 pt2,A6

MVKL .S2 count,B0loop

LDH .D *A5,A0 LDH .D *A6,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 SUB .S B0,1,B0[B0] B .S loop

第81页/共128页ModifyingthepointersThesolutionistomodifythepointersA5andA6.

MVKL .S2 pt1,A5 MVKH .S2 pt1,A5 MVKL .S2 pt2,A6 MVKH .S2 pt2,A6

MVKL .S2 count,B0loop

LDH .D *A5,A0 LDH .D *A6,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 SUB .S B0,1,B0[B0] B .S loop

第82页/共128页IndexingPointersDescriptionPointerSyntaxPointer

Modified*RNoRcanbeanyregisterInthiscasethepointersareusedbutnotmodified.第83页/共128页IndexingPointersDescriptionPointer+Pre-offset-Pre-offsetSyntaxPointer

Modified*R*+R[disp]*-R[disp]NoNoNo[ disp]specifiesthenumberofelementssizeinDW(64-bit),W(32-bit),H(16-bit),orB(8-bit).disp=Ror5-bitconstant.Rcanbeanyregister.InthiscasethepointersaremodifiedBEFOREbeingusedandRESTOREDtotheirpreviousvalues.第84页/共128页IndexingPointersDescriptionPointer+Pre-offset-Pre-offsetPre-incrementPre-decrementSyntaxPointer

Modified*R*+R[disp]*-R[disp]*++R[disp]*--R[disp]NoNoNoYesYesInthiscasethepointersaremodifiedBEFOREbeingusedandNOTRESTOREDtotheirPreviousValues.第85页/共128页IndexingPointersDescriptionPointer+Pre-offset-Pre-offsetPre-incrementPre-decrementPost-incrementPost-decrementSyntaxPointer

Modified*R*+R[disp]*-R[disp]*++R[disp]*--R[disp]*R++[disp]*R--[disp]NoNoNoYesYesYesYesInthiscasethepointersaremodifiedAFTERbeingusedandNOTRESTOREDtotheirPreviousValues.第86页/共128页DescriptionPointer+Pre-offset-Pre-offsetPre-incrementPre-decrementPost-incrementPost-decrementSyntaxPointer

Modified*R*+R[disp]*-R[disp]*++R[disp]*--R[disp]*R++[disp]*R--[disp]NoNoNoYesYesYesYes[disp]specifies#elements-sizeinDW,W,H,orB.disp=Ror5-bitconstant.Rcanbeanyregister.IndexingPointers第87页/共128页ModifyandtestingthecodeThiscodenowperformsthefollowingoperations:a0*x0+a1*x1+a2*x2+...+aN*xN

MVKL .S2 pt1,A5 MVKH .S2 pt1,A5 MVKL .S2 pt2,A6 MVKH .S2 pt2,A6

MVKL .S2 count,B0loop

LDH .D *A5++,A0 LDH .D *A6++,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 SUB .S B0,1,B0[B0] B .S loop

第88页/共128页ThePointerA7isnowinitialised.

MVKL .S2 pt1,A5 MVKH .S2 pt1,A5 MVKL .S2 pt2,A6 MVKH .S2 pt2,A6

MVKL .S2 pt3,A7 MVKH .S2 pt3,A7

MVKL .S2 count,B0loop LDH .D *A5++,A0 LDH .D *A6++,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 SUB .S B0,1,B0[B0] B .S loop

STH .D A4,*A7

Storethefinalresult第89页/共128页WhatistheinitialvalueofA4?A4isusedasanaccumulator,soitneedstoberesettozero.

MVKL .S2 pt1,A5 MVKH .S2 pt1,A5 MVKL .S2 pt2,A6 MVKH .S2 pt2,A6 MVKL .S2 pt3,A7 MVKH .S2 pt3,A7

MVKL .S2 count,B0

ZERO .L A4loop LDH .D *A5++,A0 LDH .D *A6++,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 SUB .S B0,1,B0[B0] B .S loop

STH .D A4,*A7

第90页/共128页Howcanweaddmoreprocessingpowertothisprocessor?.S1.M1.L1.D1A0A1A2A3A4RegisterFileA.

.

.DataMemoryA1532-bitsIncreasingtheprocessingpower!第91页/共128页(1) Increasetheclockfrequency.(2) IncreasethenumberofProcessingunits..S1.M1.L1.D1A0A1A2A3A4RegisterFileA.

.

.DataMemory32-bitsA15Increasingtheprocessingpower!第92页/共128页TwosideProcessingunits(AandB)DataMemory.S1.M1.L1.D1A0A1A2A3A4RegisterFileA.

.

.A1532-bits.S2.M2.L2.D2B0B1B2B3B4RegisterFileB.

.

.B1532-

温馨提示

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

评论

0/150

提交评论