
实时数字信号处理-第2章-计算单元模板课件.ppt
48页实时数字信号处理第2章 计算单元 概述 每个内核都有6个计算单元 两个算术/逻辑单元(ALU) 两个乘/累加器(乘法器)单元 一个移位器 一套视频ALU 提供定点操作 处理不同类型的操作 数据移入和移出计算单元是通过数据寄存器文件的 数据总线 高级并行机制利用多功能指令 数据地址产生 寄存器文件 3个寄存器组数据寄存器文件为计算单元从数据总线接收操作数并存储计算结果指针寄存器文件含有寻址操作的指针DAG寄存器是专用于管理DSP操作中的零开销循环缓冲的寄存器 数据地址产生器(DAG)数据寄存器R0R0.HR0.LR1R1.HR1.LR2R2.HR2.LR3R3.HR3.LR4R4.HR4.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 multiplication */累加寄存器 两个专有的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:0 32位宽,主要用于地址计算 也可以在一组限定的算术操作集内用于一般的整数算术操作,譬如用作计数器,但不会影响到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寄存器存储长度,按字节计 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和CYCLES2 An表示ALU结果寄存器A0或A1之一 Dreg表示任一个数据寄存器文件寄存器 Sysreg表示系统寄存器ASTAT、SEQSTAT、SYSCFG、RETI、RETX、RETN、RETE或RETS、LC1:0、LT1:0、LB1:0、CYCLES和CYCLES2 Preg表示任一Pointer寄存器、FP或SP寄存器 Dreg_even表示R0、R2、R4或R6 Dreg_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)表示符号扩展 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 ! CC 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 = Dreg_byte (Z) ;*/Dreg = Dreg_byte (X) ;*/1 警告:不是所有的寄存器组合都是合法的。
详细 信息见Blackfin处理器指令集参考中的搬移寄存器指令功能描述算术状态寄存器(ASTAT) 指示了最近的ALU、乘法器或移位器操作的状态Bit31302928272625242322212019 18 17 160000000000000000复位=0 x0000 000025:VS(黏性DREG溢出)V的黏性描述24:V(DREG溢出)0-最近从ALU写入数据寄存器文件的结果没有溢出;1-最近结果有溢出19:AV1S(黏性A1溢出)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-有偏圆整。
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“数字格式” 在Blackfin处理器系列算术中有符号数都是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-142-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的改变方式不是操作数符号位和操作本身特性所预测的方式,那么一个位或一个组合位都会置位 例如两个正数相加,结果也必为正数,符号位的改变表示溢出并使相应的溢出标志AVn置位 一个正数和一个负数相加可能产生一个正数或者一个负数,但是不会导致溢出进位(AC0、AC1)逻辑是基于无符号数算术 如果是从位16(MSB)产生了进位就会将进位置位,进位对于一个多字操作的低位字部分来说是非常有用的乘法器数据类型 根据指令本身给定的信息,输入被解释成不同的类型 有符号数乘以有符号数、无符号数乘以无符号数、混合类型,或者是一个取整操作 32位结果假定是有符号的,也是符号扩展的,充满A0或A1寄存器的整个40-bit的宽度 处理器支持两种格式调整模式 小数模式,用于小数操作数(1.15格式) 两个1.15操作数相乘,结果是一个2.30的数 结果传送到乘法器结果累加器(A0,A1)之前左移一位得到1.31格式数,可以圆整为1.15格式数 整数模式,用于整型操作数(16.0格式) 如果操作数都是16.0格式,乘法结果将是32.0格式。
当用乘法器结果更新累加器,或将它们传送到目的寄存器文件寄存器时,将产生状态信息移位器数据类型 移位器中的许多操作是明确地采用有符号(补码)或无符号数 逻辑移位采用无符号数或二进制串 算术移位采用补码数 指数逻辑采用补码数,指数逻辑支持块浮点,这也是基于补码的小数 移位器结果产生状态信息 圆整乘法器结果 支持乘法器结果的圆整(RND选项) 圆整是降低一个数的精度的一种方式 寄存器ASTAT里的位RND_MOD 清0对应无偏圆整,该位置1对应有偏圆整 对所有算法,无偏圆整是首先的无偏圆整传统的有偏圆整方法是在加法器的比特位置15上加上一个1,这个方法将引起一个净正偏差,因为中间值(A0.L/A1.L=0 x8000)总是向上圆整的当检测到结果是中间点值时,通过强迫结果输出中的比特16为0,累加器可消除这个偏差累加器使用无偏圆整方案 无偏圆整使ALU能将40-bit的结果在比特15和比特16边界之间进行圆整,圆整可以指定为指令代码的一个部分,当选择了圆整,输出寄存器就包含了已经圆整的16-bit的结果 当原始数刚好位于两个数中间时这个方法返回最接近的偶数,最低有效位是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 累加器内容是从不圆整的特殊的圆整指令 提供了这样的。












