实时数字信号处理-第2章-计算单元模板课件

上传人:大米 文档编号:567606812 上传时间:2024-07-21 格式:PPT 页数:48 大小:254.50KB
返回 下载 相关 举报
实时数字信号处理-第2章-计算单元模板课件_第1页
第1页 / 共48页
实时数字信号处理-第2章-计算单元模板课件_第2页
第2页 / 共48页
实时数字信号处理-第2章-计算单元模板课件_第3页
第3页 / 共48页
实时数字信号处理-第2章-计算单元模板课件_第4页
第4页 / 共48页
实时数字信号处理-第2章-计算单元模板课件_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《实时数字信号处理-第2章-计算单元模板课件》由会员分享,可在线阅读,更多相关《实时数字信号处理-第2章-计算单元模板课件(48页珍藏版)》请在金锄头文库上搜索。

1、实时数字信号处理第第2章章 计算单元计算单元 概述每个内核都有6个计算单元两个算术/逻辑单元(ALU)两个乘/累加器(乘法器)单元一个移位器一套视频ALU提供定点操作处理不同类型的操作数据移入和移出计算单元是通过数据寄存器文件的数据总线 高级并行机制利用多功能指令 数据地址产生 寄存器文件寄存器文件 3个寄存器组数据寄存器文件为计算单元从数据总线接收操作数并存储计算结果指针寄存器文件含有寻址操作的指针DAG寄存器是专用于管理DSP操作中的零开销循环缓冲的寄存器。 数据地址产生器(DAG)数据寄存器R0R0.HR0.LR1R1.HR1.LR2R2.HR2.LR3R3.HR3.LR4R4.HR4.

2、LR5R5.HR5.LR6R6.HR6.LR7R7.HR7.LA0A0.XA0.WA1A1.XA1.WI0 L0 B0 M0 P0I1 L1 B1 M1 P1I2 L2 B2 M2 P2I3 L3 B3 M3 P3 P4 P5 SP FP数据寄存器文件数据寄存器文件包含8个寄存器每个32位宽一对独立的16位寄存器:低半部分和高半部分3条独立总线连接寄存器文件和L1数据存储器2条读、1条写32位宽每个周期内搬移多达4个16位的有效数据32-bit和16-bit操作R2=R1 + R2; /* 32-bit addition */R2.L=R1.H * R0.L; /* 16-bit multip

3、lication */累加寄存器两个专有的40位的累加寄存器(A0和A1)的访问形式:16位低半部分(An.L)、高半部分(An.H)8位扩展(An.X)低32位寄存器An.W完全的40位结果寄存器(An)指令操作A0=A1; /* 40-bit move */A1.W=R7; /* 32-bit move */A0.H=R5.H; /* 16-bit move */R6.H=A0.X; /* read 8-bit value and sign extend to 16 bits */指针寄存器指针寄存器通用地址指针寄存器,也称之为P寄存器6个P寄存器文件P5:032位宽,主要用于地址计算也可

4、以在一组限定的算术操作集内用于一般的整数算术操作,譬如用作计数器,但不会影响到ASTAT寄存器的状态标志。 1个帧指针(FP)用于指向当前进程的活动记录1个堆栈指针(SP)用来指向运行时堆栈中最近一次使用的位置DAG寄存器组寄存器组DAG寄存器组用于寻址I3:0包含索引地址M3:0包含修改值B3:0包含基地址L3:0包含长度值32位宽I寄存器和B寄存器包含存储器8-bit字节地址I寄存器含有一个有效地址,M寄存器含有用于在I寄存器上进行加或减的偏移值任意的M寄存器可和任意的I寄存器关联,比如,I0可被M3修改B寄存器和L寄存器定义循环缓冲,B寄存器存储缓冲的起始地址,L寄存器存储长度,按字节计

5、。L和B寄存器对是与对应的I寄存器相关联的,例如,L0和B0总是和I0相关联寄存器文件指令汇总寄存器文件指令汇总符号的含义说明如下:Allreg表示:R7:0、P5:0、SP、FP、I3:0、M3:0、B3:0、L3:0、A0.X、A0.W、A1.X、A1.W、ASTAT、RETS、RETI、RETX、RETN、RETE、LC1:0、LT1:0、LB1:0、USP、SEQSTAT、SYSCFG、CYCLES和CYCLES2An表示ALU结果寄存器A0或A1之一Dreg表示任一个数据寄存器文件寄存器Sysreg表示系统寄存器ASTAT、SEQSTAT、SYSCFG、RETI、RETX、RETN、

6、RETE或RETS、LC1:0、LT1:0、LB1:0、CYCLES和CYCLES2Preg表示任一Pointer寄存器、FP或SP寄存器Dreg_even表示R0、R2、R4或R6Dreg_odd表示R1、R3、R5或R7寄存器文件指令汇总寄存器文件指令汇总符号的含义说明如下:DPreg表示任一数据寄存器文件寄存器或任一Pointer寄存器、FP或SP寄存器Dreg_lo表示任一数据寄存器文件寄存器低16位Dreg_hi表示任一数据寄存器文件寄存器高16位An.L表示累加器An.W的低16位An.H表示累加器An.W的高16位Dreg_byte表示每一个数据寄存器的低8位Option (X)

7、表示符号扩展Option (Z)表示零扩展*指示这个标志可以置位或清零、依赖于指令的计算结果*指示这个标志清零指示无作用表2-1 寄存器文件指令汇总表 指令指令ASTAT 状状态标志志AZANAC0AC0_COPYAC1AV0AV0SAV1AV1SCCVV_COPYVSallreg = allreg ; 1An = An ;An = Dreg ;Dreg_even = A0 ;*Dreg_odd = A1 ;*Dreg_even = A0, Dreg_odd = A1 ; *Dreg_odd = A1, Dreg_even = A0 ; *IF CC DPreg = DPreg ;IF ! C

8、C DPreg = DPreg ;Dreg = Dreg_lo (Z) ;*/Dreg = Dreg_lo (X) ;*/表2-1 寄存器文件指令汇总表续指令指令ASTAT 状状态标志志AZANAC0AC0_COPYAC1AV0AV0SAV1AV1SCCVV_COPYVSAn.X = Dreg_lo ;Dreg_lo = An.X ;An.L = Dreg_lo ;An.H = Dreg_hi ;Dreg_lo = A0 ;*Dreg_hi = A1 ;*Dreg_hi = A1 ; Dreg_lo = A0 ;*Dreg_lo = A0 ; Dreg_hi = A1 ;*Dreg = Dre

9、g_byte (Z) ;*/Dreg = Dreg_byte (X) ;*/1 警告:不是所有的寄存器组合都是合法的。详细信息见Blackfin处理器指令集参考中的搬移寄存器指令功能描述。算术状态寄存器(算术状态寄存器(ASTAT)指示了最近的ALU、乘法器或移位器操作的状态Bit31302928272625242322212019 18 17 160000000000000000复位=0x0000 000025:VS(黏性黏性DREG溢出溢出)V的黏性描述。24:V(DREG溢出溢出)0-最近从ALU写入数据寄存器文件的结果没有溢出;1-最近结果有溢出。19:AV1S(黏性黏性A1溢出溢出)

10、AV1的黏性描述。16:AV0(A0溢出溢出)0-最近写入A0的结果没有溢出;1-最近写入A0的结果有溢出。17:AV0S(黏性黏性A0溢出溢出)AV0的黏性描述。18:AV1(A1溢出溢出)0-最近写入A1的结果没有溢出;1-最近写入A1的结果有溢出。算术状态寄存器(算术状态寄存器(ASTAT)Bit1514131211109876543210000000000000000013:AC1(ALU1进位位)0-ALU1里的操作没有产生进位。1-操作产生了进位。12:AC0(ALU0进位位)0-ALU0里的操作没有产生进位。1-操作产生了进位。8:RND_MOD(圆整模式整模式)0-无偏圆整。1

11、-有偏圆整。6:AQ(商)商位0:AZ(零零结果果)0-来自ALU0、ALU1或移位器的最近结果不是零;1-结果是零。1:AN(负数数结果果)0-来自ALU0、ALU1或移位器的最近结果不是负数;1-结果是负数。2:AC0_COPY,与位12一样。3:V_COPY,与位24一样。5:CC(条件条件码)多目的标志,主要用于保存算术比较的判定。也用于一些移位器指令,保留循环移位的比特。数据类型数据类型 Balckfin处理器主要是16位定点处理器大多数操作采用补码数,其它有无符号数或二进制串一些指令支持32位整数算术、支持8位算术和块浮点数据格式的详细情况参阅硬件参考手册附录C“数字格式”在Bla

12、ckfin处理器系列算术中有符号数都是2的补码格式处理器支持32-bit字、16-bit半字和字节32-bit和16-bit字可以是整数或小数,但是字节总是整数整数可以是有符号数或无符号数,但小数总是有符号数小数表示(小数表示(1.15) 对于1.15二进制格式小数算术是优化的表示从-1到0.999969之间的值图2-3给出了1.15数的位权重和例子 1.15 数(16进制)0X00010X7FFF0XFFFF0X8000对应小数0.0000310.999969-0.000031-1.000000202-12-22-32-42-52-62-72-82-92-102-112-122-132-14

13、2-15图2-3 1.15数的位权重 ALU数据类型数据类型除了有符号除法原语(DIVS),每个ALU操作都把操作数和结果当作16-bit或者32-bit二进制串处理ALU结果产生状态信息把结果当作有符号数溢出标志(AV0,AV1)和负数标志(AN)黏性溢出标志AV0S或AV1S一旦置位将保持置位状态直到直接写入而清除V标志的置位或清除取决于从两个累加器到寄存器文件的结果的传送黏性VS位随V位一同置位并保持置位状态直到清零溢出位(V、VS、AV0、AV0S、AV1、AV1S)逻辑都是基于补码算术如果MSB的改变方式不是操作数符号位和操作本身特性所预测的方式,那么一个位或一个组合位都会置位例如两

14、个正数相加,结果也必为正数,符号位的改变表示溢出并使相应的溢出标志AVn置位一个正数和一个负数相加可能产生一个正数或者一个负数,但是不会导致溢出进位(AC0、AC1)逻辑是基于无符号数算术如果是从位16(MSB)产生了进位就会将进位置位,进位对于一个多字操作的低位字部分来说是非常有用的乘法器数据类型乘法器数据类型根据指令本身给定的信息,输入被解释成不同的类型有符号数乘以有符号数、无符号数乘以无符号数、混合类型,或者是一个取整操作32位结果假定是有符号的,也是符号扩展的,充满A0或A1寄存器的整个40-bit的宽度处理器支持两种格式调整模式小数模式,用于小数操作数(1.15格式)两个1.15操作

15、数相乘,结果是一个2.30的数结果传送到乘法器结果累加器(A0,A1)之前左移一位得到1.31格式数,可以圆整为1.15格式数整数模式,用于整型操作数(16.0格式)如果操作数都是16.0格式,乘法结果将是32.0格式。当用乘法器结果更新累加器,或将它们传送到目的寄存器文件寄存器时,将产生状态信息移位器数据类型移位器数据类型移位器中的许多操作是明确地采用有符号(补码)或无符号数逻辑移位采用无符号数或二进制串算术移位采用补码数指数逻辑采用补码数,指数逻辑支持块浮点,这也是基于补码的小数移位器结果产生状态信息 圆整乘法器结果圆整乘法器结果 支持乘法器结果的圆整(RND选项)圆整是降低一个数的精度的

16、一种方式 寄存器ASTAT里的位RND_MOD清0对应无偏圆整,该位置1对应有偏圆整对所有算法,无偏圆整是首先的无偏圆整无偏圆整传统的有偏圆整方法是在加法器的比特位置15上加上一个1,这个方法将引起一个净正偏差,因为中间值(A0.L/A1.L=0x8000)总是向上圆整的当检测到结果是中间点值时,通过强迫结果输出中的比特16为0,累加器可消除这个偏差累加器使用无偏圆整方案无偏圆整使ALU能将40-bit的结果在比特15和比特16边界之间进行圆整,圆整可以指定为指令代码的一个部分,当选择了圆整,输出寄存器就包含了已经圆整的16-bit的结果当原始数刚好位于两个数中间时这个方法返回最接近的偶数,最

17、低有效位是0例如,要圆整一个3-bit的补码小数0.25(二进制0.01)到2-bit的补码小数,其结果将是0.0(二进制0.0),因为是从0.5(二进制0.1)和0.0中选择偶数基于附近的值向上和向下圆整,所以该方法称之为无偏圆整强迫比特16为0有这样的作用:将奇数的A0.L/A1.L值向上圆整,将偶数值向下圆整,得到大样本偏差为0、均匀分布的数值参见图2-4和2-5 累加器内容是从不圆整的特殊的圆整指令特殊的圆整指令提供了这样的能力在不同的比特边界上圆整,这些选项是RND12、RND和RND20,分别从比特12、16和20上提取16位的值,并执行有偏圆整,而不管ASTAT中的RND_MOD

18、位的状态。指令:R3.L=R4 (RND);在比特16上执行有偏圆整,保存结果于一个半字中R3.L=R4+R5 (RND12);执行两个32位数的加法,在比特12上执行有偏圆整,将结果保存到一个半字里R3.L=R4+R5 (RND20);执行两个32位数的加法,在比特20上执行有偏圆整,将结果保存到一个半字里算术逻辑单元(算术逻辑单元(ALU)两个ALU执行定点数的算术和逻辑操作ALU定点指令操作16-bit、32-bit或40-bit的定点操作数,得到16-bit、32-bit或40-bit的定点结果。ALU指令寄存器的定点加减法、立即数的加减法、乘法结果的累加/减、逻辑(与、或、非、异或、

19、按位异或、取反)操作、函数(取绝对值、最大值、最小值、圆整、除法原语)操作ALU操作操作ALU的主要操作是在ALU0中进行的,并行操作是在ALU1中进行的,它执行ALU0操作的一个子集表2-8描述了每个ALU可能的输入和输出联合两个ALU操作,单条指令能得到4个16-bit结果、两个32-bit结果或两个40-bit结果。ALU操作操作单单16-bit操作操作 R3.H=R1.H+R2.L (NS);R1.H加到R2.L上,结果保存到R3.H中,不带饱和选项 双双16-bit操作操作 R3=R1 + | - R2 (S);R2.H加到R1.H上,饱和处理后的结果保存到R3.H里从R1.L中减去

20、了R2.L,饱和处理后的结果保存到R3.L里 4个个16-bit操作操作 R3=R0 +|+ R1,R2=R0 | R1 (S);R1.H加上R0.H,保存结果到R3.H里,带饱和操作。R1.L加上R0.L,保存结果到R3.L里,带饱和操作。R0.H减去R1.H,保存结果到R2.H里,带饱和操作。R0.L减去R1.L,保存结果到R2.L里,带饱和操作。ALU操作操作单单32-bit操作操作 R3=R1 + R2 (NS); 指令中不能混合使用指针寄存器与数据寄存器 双双32-bit操作操作 R3=R1 + R2,R4 = R1 R2 (NS); 提供给ALU0和ALU1的是同样的两个32-bi

21、t输入寄存器 专门形式使用40-bit的ALU结果寄存器作为操作数,得到关于A0和A1寄存器的和与差。例如指令:R3=A0 + A1,R4=A0 A1 (S);将ALU寄存器值进行加减操作,带饱和处理,并将两个32-bit的和与差转输到结果寄存器双双16-bit交叉选项交叉选项 对于双16位操作,结果可能会交叉“交叉结果”改变了计算结果在结果寄存器中的位置。高端结果放置在目的寄存器的低半字里,低端结果放置在目的寄存器的高半字里,参见图2-9在处理复数数学运算和快速傅立叶变换(FFT)的部分操作时有用,交叉选项只适用于ALU031RmRpRn图2-9 双16-bit ALU操作的交叉选项 ALU

22、除法支持与视频操作除法支持与视频操作 ALU支持除法两个专用的除法原语DIVS和DIVQ让程序实施一个不复原的、有条件的(错误检查)加/减/除算法除法可以是有符号的或无符号的,但是被除数和除数必须是同一类型,参见处理器指令集参考处理器具有特殊的SIMD视频ALU操作功能4个8-bit视频ALU使处理器能够高效率地处理视频信息每个视频ALU指令可能需要1至4对8-bit的输入,输出1至4对8-bit的结果输入是用数据寄存器文件按两个32-bit字的形式提交给视频ALU的可能的操作包括4个8-bit数的加法或减法、4个8-bit数的平均、4个8-bit数的打包和解包、4个8-bit数的减-绝对值-

23、累加、字节对齐参见处理器指令集参考ALU指令汇总指令汇总符号的含义说明如下Dreg_lo_hi表示任何数据寄存器文件寄存器里的16-bit寄存器半字。imm7表示有符号的7-bit宽的立即数。DIVS表示除法符号原语。DIVQ表示除法商原语。MAX表示源寄存器里的最大值,或最大的正值。MIN表示源寄存器的最小值。ABS表示一个32-bit寄存器的高或低半字的绝对值。RND表示对一个半字圆整。RND12表示对加法或减法结果饱和处理,并在结果的第12位上进行圆整。RND20表示对加法或减法结果饱和处理,并在结果的第20位上进行圆整。SIGNBITS表示一个数里的符号位的个数减1。EXPADJ表示一

24、个数里次要的符号位的个数减一个数里次要的符号位的个数减1和一个阈值。和一个阈值。d指示AQ包含被除数最高有效位与除数最高有效位的异或。 表2-9 ALU指令汇总表部分指令指令ASTAT 状态标志AZANAC0AC0_COPYAC1AV0AV0SAV1AV1SVV_COPYVSAQDreg = MAX (Dreg, Dreg ) (V) ;*/Dreg = MIN (Dreg, Dreg) (V) ;*/Dreg = ABS Dreg (V) ;*Dreg_lo_hi = Dreg (RND) ;*Dreg_lo_hi = Dreg Dreg (RND12) ;*Dreg_lo_hi = Dre

25、g + Dreg (RND20) ;*Dreg_lo = SIGNBITS Dreg ;Dreg_lo = SIGNBITS Dreg_lo_hi ;Dreg_lo = SIGNBITS An ;Dreg_lo = EXPADJ (Dreg, Dreg_lo ) (V) ; Dreg_lo = EXPADJ (Dreg_lo_hi, Dreg_lo); 本讲作业1理解并整理指令功能(参考ADSP-BF53x/BF56x Blackfin Processor Programming Reference)MAXMINVector SEARCHVector MAXVector MIN乘累加器乘累加器

26、 乘累加器MAC0和MAC1执行定点乘法运算和乘累加操作用于累加或累减定点指令对16-bit数据进行操作,产生32-bit结果,它可被加到40-bit累加器里或从中减去输入小数或整数,无符号或补码数指令乘法、乘累加(带圆整选项)、乘累减(带圆整选项)、同时包含前面两种操作乘法器操作乘法器操作输入数据寄存器文件寄存器 从两个32-bit输入得到两个16-bit操作数输出累加其结果到它的累加器寄存器A1或A0累加器结果可饱和成32或40位或圆整后直接写入16-bit或32-bit目的寄存器数据类型输入都是整数类型或者是小数类型,结果的类型和输入的类型一致对于MAC0,两个输入都被当作无符号或有符号

27、数对于MAC1,有一个混合类型选项若两个输入都是小数形式并是有符号数,将结果左移一位,以消除冗余符号位而对于无符号小数、整数或者混合类型,不执行符号位修正的移位操作乘法指令选项指定了输入数据的格式参见“乘法器指令选项”乘法器操作乘法器操作乘法器结果的圆整或饱和乘法器结果的圆整或饱和乘法结果溢出时的饱和处理乘法结果溢出时的饱和处理乘法器指令汇总(参见整理文稿)乘法器指令汇总(参见整理文稿)乘法器指令选项(参见整理文稿)乘法器指令选项(参见整理文稿)不带累加的乘法不带累加的乘法 乘积结果直接存入一个数据寄存器文件寄存器或累加器寄存器目的寄存器可以是16位的或32位的16-bit目的寄存器,低半字则

28、使用MAC016-bit目的寄存器,高半字则使用MAC132-bit目的寄存器,MAC0和MAC1都可以使用乘法器操作乘法器操作特殊的32-bit整数MAC指令Dreg*=Dreg; 双MAC操作两个16-bit MAC使MAC吞吐率加倍两个32-bit输入寄存器可提供给每一个MAC单元,提供了4种可能组合的16-bit输入操作数。矢量操作存储样点矢量到4个输入操作数,并执行矢量计算。例子A1+=R1.H * R2.L, A0+=R1.L * R2.H; MAC操作中4个可能的组合MAC0MAC0MAC0MAC039A31RmRpA039B31RmRpA039C31RmRpA039D31RmR

29、pA0桶式移位器桶式移位器提供对16-bit、32-bit或40-bit输入的移位功能,产生一个16-bit,32-bit,或40-bit的输出功能算术移位、逻辑移位、循环移位和各种位测试、设置、打包、解包和指数检测移位功能可以组合实现数字格式控制,包括完整的浮点表示移位器操作移位器操作指令,指令表示算术移位LSHIFT、指令表示逻辑移位在16-bit单个或成对的数值上操作的指令都可以采用ASHIFT和LSHIFT指令在许多DSP算法中用到,典型的3操作数指令操作一个32-bit寄存器值并使用两个操作数的指令,可以利用和指令算术移位、逻辑移位和循环指令可从寄存器或直接从指令的立即数中获得移位参

30、数两操作数移位两操作数移位移位一个输入寄存器并将结果存入同一寄存器 立即移位立即移位 R0 contains 0000 B6A3;R0 =0x04;结果:R0 contains 0000 0B6A 寄存器移位寄存器移位R0 contains 0000 B6A3;R2 contains 0000 0004;R00x04;结果:R1 contains 0000 0B6A 寄存器移位寄存器移位 R0 contains 0000 B6A3;R2.L contains 0004;R1=R0 ASHIFT by R2.L;结果:R1 contains 000B 6A30 R0 contains ABCD

31、EF12;R2.L contains 0004;R1=R0 ROT by R2.L; (循环移位,假设条件码位(CC)设置为0 )结果:R1 contains BCDE F125CC位包含在结果中,在第3位 位测试、置位、清零、切换位测试、置位、清零、切换 对一个数据寄存器中的指定位进行测试、置位、清零及切换两个参数源寄存器和位域值不改变源寄存器,结果保存在CC位里例子BITCLR (R0, 6) ;BITSET (R2, 9) ;BITTGL (R3, 2) ;CC=BITTST (R3, 0) ;域抽取和域存储域抽取和域存储可从一个32-bit源域中的任何位置上抽取出一个1-bit到16-

32、bit域可以将1-bit到16-bit长度的源域存储到一个32-bit目的域中的任何位置上使用两个寄存器参数一个包含32-bit目的或32-bit源另一个包含要抽取/存储的值,它的长度和它在源里的位置表表2-12移位器指令汇总表移位器指令汇总表部分指令指令ASTAT 状态标志AZANAC0AC0_COPYAC1AV0AV0SAV1AV1SCCVV_COPYVSDreg = DEPOSIT (Dreg, Dreg) ;*/Dreg = EXTRACT (Dreg, Dreg) ;*/BITMUX (Dreg, Dreg, A0) ;Dreg_lo = ONES Dreg ;Dreg = PACK

33、 (Dreg_lo_hi,Dreg_lo_hi);Dreg = Dreg uimm4 (V) ;*/Dreg = Dreg uimm4 (V) ;*/Dreg = Dreg uimm4 (V) ;Dreg = Dreg uimm4 (V) ;Dreg = Dreg uimm4 (V) ;Dreg = ROT Dreg BY imm6 ;Dreg = ASHIFT Dreg BY Dreg_lo (V) ;Dreg = LSHIFT Dreg BY Dreg_lo (V) ;数据地址产生器数据地址产生器数据地址产生器数据地址产生器(DAG)功能与寄存器功能与寄存器DAG产生数据地址以将数据移到存

34、储器或从中取数程序用DAG寄存器代替绝对地址来间接寻址支持几种功能用于减少数据访问时的开销提供地址:在数据访问期间提供地址提供地址并后修改:在数据转移时提供地址,并为下一次转移自动增/减存储地址提供偏移地址:提供相对于某基地址的偏移址,不增加原始地址指针修改地址:增加或减少存储地址,不执行数据转移位反向进位地址:在数据转移时提供位反向进位地址,而不是反转存储地址DAG子系统两个DAG算术单元、9个指针寄存器、4个索引寄存器、4套相关的变址、基址和长度寄存器DAG的寻址的寻址Blackfin处理器按字节寻址,所有的数据访问必须对齐数据字节大小32-bit取指必须对齐32位,但8位的存储可对齐任意

35、字节指令:R0=P3+;取一个32位字,由P3中的值来指向,并把它放在R0中,然后P3加4以维持32位对齐访问R0.L=WI3+;取一个16位字,由I3中的值来指向,并把它放进目的寄存器低半部分R0.L中,然后I3加2来维持16位对齐访问R0=BP3+(Z);取一个8位字,通过P3中的值来指向,并把它放进目的寄存器R0中,然后P3加1以维持8位对齐访问字节值可以是零扩展或符号扩展到32位数据寄存器DAG的寻址的寻址帧和堆栈指针操作帧和堆栈指针操作位反向地址方式寻址位反向地址方式寻址循环缓冲器的寻址循环缓冲器的寻址使用后修改的寻址方式当第1次后修改访问缓冲器时,DAG在地址总线上输出I寄存器的值

36、,然后加上地址增量来修改这个地址用方程形式,这些修改和回绕操作表示为“I+M”操作如果M是正的:Inew = Iold + M,如果Iold + M 缓冲器基址 + 长度(缓冲器尾地址)Inew = Iold + M L,如果Iold + M 缓冲器基址 + 长度(缓冲器尾地址)如果M是负的:Inew = Iold + M,如果Iold + M 缓冲器基址(缓冲器首地址)Inew = Iold + M + L,如果Iold + M 缓冲器基址(缓冲器首地址)DAG的寻址的寻址索引和指针寄存器的索引寻址索引和指针寄存器的索引寻址使用索引寄存器或指针寄存器中的值作为有效地址加载或保存16-bit或

37、32-bit值,默认的是32-bit转移,16-bit转移用W标识符前缀 自动增加自动增加/减少寻址减少寻址在访问后更新指针和索引寄存器,增量要根据字的大小,32-bit、16-bit、8-bit访问时指针更新量分别为4、2、1预修改堆栈指针寻址预修改堆栈指针寻址SP中的地址先减去4然后作为一个有效地址用于保存指令-SP=R0用于堆栈入栈操作,且仅支持一个32-bit字转移立即数偏移址的索引寻址立即数偏移址的索引寻址允许程序从数据表中获得一个与表的基址有关的数据,并作为一个立即数偏移址修改指针寄存器以产生有效地址指针寄存器的值并不会更新。如果最终地址没有对齐,则会触发一个异常事件后修改寻址后修

38、改寻址R5=P1+P2; 修改修改DAG和指针寄存器和指针寄存器DAG支持修改索引寄存器中的地址值但不输出地址,这种地址修改操作用于维持指针是有用的。 存储器地址对齐存储器地址对齐Blackfin处理器需要正确的存储器对齐来维持所访问数据字节数大小存储器对齐冲突会引起一个对齐异常,除非异常被禁止自动禁止对齐异常的指令一些指令,例如许多视频ALU指令,会自动禁止对齐异常当数据保存在存储器时数据可能不会是对齐的DISALGNEXPT指令与加载/保存操作并行执行,也可禁止对齐异常该指令屏蔽了存储器对齐错误的自动检测但该指令仅会影响到用I寄存器间接寻址的非对齐加载,使用P寄存器的非对齐加载会引起异常的通常存储器系统需要两种地址对齐:32-bit字加载/保存访问于4字节边界:地址两个最低有效位是b#0016-bit字加载/保存访问于2字节边界:地址最低有效位是b#0

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号