实时数字信号处理 计算单元
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[16]:AV0(A0溢出) 0-最近写入A0的结果没有溢出;1-最近写入A0的 结果有溢出。 [17]:AV0S(黏性A0溢出) AV0的黏性描述。
[18]:AV1(A1溢出) 0-最近写入A1的结果没有溢出;1-最近写入A1的 结果有溢出。
算术状态寄存器(ASTAT)
Bit 15 14 0 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 1 0 0 0 0 [13]: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(条件码) 多目的标志,主要用于保存算术比较的判 定。也用于一些移位器指令,保留循环 移位的比特。
算术状态寄存器(ASTAT)
• 指示了最近的ALU、乘法器或移位器操作的状态
Bit 31 0 30 29 28 27 26 25 24 23 22 0 0 0 0 0 0 0 0 0 21 0 20 19 18 17 16 0 0 0 0 0 复位=0x0000 0000
[25]:VS(黏性DREG溢出) V的黏性描述。 [24]:V(DREG溢出) 0-最近从ALU写入数据寄存器 文件的结果没有溢出;1-最 近结果有溢出。 [19]:AV1S(黏性A1溢出) AV1的黏性描述。
• 进位(AC0、AC1)逻辑是基于无符号数算术
– 如果是从位16(MSB)产生了进位就会将进位置位,进位对于一个多字 操作的低位字部分来说是非常有用的
乘法器数据类型
• 根据指令本身给定的信息,输入被解释成不同的类型
– 有符号数乘以有符号数、无符号数乘以无符号数、混合类型,或 者是一个取整操作
• 32位结果假定是有符号的,也是符号扩展的,充满A0或 A1寄存器的整个40-bit的宽度 • 处理器支持两种格式调整模式
• 指令操作
指针寄存器
• 通用地址指针寄存器,也称之为P寄存器
– 6个P寄存器文件P[5:0]
• 32位宽,主要用于地址计算 • 也可以在一组限定的算术操作集内用于一般的整数 算术操作,譬如用作计数器,但不会影响到ASTAT 寄存器的状态标志。
– 1个帧指针(FP)用于指向当前进程的活动记 录 – 1个堆栈指针(SP)用来指向运行时堆栈中最 近一次使用的位置
表2-1 寄存器文件指令汇总表[续]
ASTAT 状态标志 AC0 V 指令 AV0 AV1 AZ AN AC0_COPY CC V_COPY AV0S AV1S AC1 VS An.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处理器指令集参考中的搬移 寄存器指令功能描述。
图2-3 1.15数的位权重
ALU数据类型
• 除了有符号除法原语(DIVS),每个ALU操作都把操作数和结果当作 16-bit或者32-bit二进制串处理
– ALU结果产生状态信息
• 把结果当作有符号数 • 溢出标志(AV0,AV1)和负数标志(AN)
– 黏性溢出标志AV0S或AV1S一旦置位将保持置位状态直到直接写入而清除
• 任意的M寄存器可和任意的I寄存器关联,比如,I0可被M3修改
– B寄存器和L寄存器定义循环缓冲,B寄存器存储缓冲的起始地址, L寄存器存储长度,按字节计。
• L和B寄存器对是与对应的I寄存器相关联的,例如,L0和B0总是和I0 相关联
寄存器文件指令汇总
• 符号的含义说明如下:
– Allreg表示:R[7:0]、P[5:0]、SP、FP、I[3:0]、M[3:0]、B[3:0]、 L[3:0]、A0.X、A0.W、A1.X、A1.W、ASTAT、RETS、RETI、 RETX、RETN、RETE、LC[1:0]、LT[1:0]、LB[1:0]、USP、 SEQSTAT、SYSCFG、CYCLES和CYCLES2 – An表示ALU结果寄存器A0或A1之一 – Dreg表示任一个数据寄存器文件寄存器 – Sysreg表示系统寄存器ASTAT、SEQSTAT、SYSCFG、RETI、 RETX、RETN、RETE或RETS、LC[1:0]、LT[1:0]、LB[1:0]、 CYCLES和CYCLES2 – Preg表示任一Pointer寄存器、FP或SP寄存器 – Dreg_even表示R0、R2、R4或R6 – Dreg_odd表示R1、R3、R5或R7
• 32-bit和16-bit字可以是整数或小数,但是字节总是整数 • 整数可以是有符号数或无符号数,但小数总是有符号数
小数表示(1.15)
• 对于1.15二进制格式小数算术是优化的
– 表示从-1到0.999969之间的值 – 图2-3给出了1.15数的位权重和例子
1.15 数(16进制) 0X0001 0X7FFF 0XFFFF 0X8000 20 2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 对应小数 0.000031 0.999969 -0.000031 -1.000000 2-10 2-11 2-12 2-13 2-14 2-15
寄存器文件
• 3个寄存器组
– – – 数据寄存器文件为计算单元从数据总线接收操作数并存储计算结果 指针寄存器文件含有寻址操作的指针 DAG寄存器是专用于管理DSP操作中的零开销循环缓冲的寄存器。
数据寄存器
R0 R1 R2 R3 R4 R5 R6 R7 A0 A1 R0.H R1.H R2.H R3.H R4.H R5.H R6.H R7.H A0.X A1.X R0.L R1.L R2.L R3.L R4.L R5.L R6.L R7.L A0.W A1.W
寄存器文件指令汇总
• 符号的含义说明如下:
– 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)表示零扩展 – *指示这个标志可以置位或清零、依赖于指令的计算结果 – **指示这个标志清零 – –指示无作用
– 小数模式,用于小数操作数(1.15格式)
• 两个1.15操作数相乘,结果是一个2.30的数 • 结果传送到乘法器结果累加器(A0,A1)之前左移一位得到1.31格 式数,可以圆整为1.15格式数
– 整数模式,用于整型操作数(16.0格式)
DAG寄存器组
• DAG寄存器组用于寻址
– – – – – – – I[3:0]包含索引地址 M[3:0]包含修改值 B[3:0]包含基地址 L[3:0]包含长度值 32位宽 I寄存器和B寄存器包含存储器8-bit字节地址 I寄存器含有一个有效地址,M寄存器含有用于在I寄存器上进行加 或减的偏移值
• V标志的置位或清除取决于从两个累加器到寄存器文件的结果的传送
– 黏性VS位随V位一同置位并保持置位状态直到清零
• 溢出位(V、VS、AV0、AV0S、AV1、AV1S)逻辑都是基于补码算术
• 如果MSB的改变方式不是操作数符号位和操作本身特性所预测的方式, 那么一个位或一个组合位都会置位
– 例如两个正数相加,结果也必为正数,符号位的改变表示溢出并使相应 的溢出标志AVn置位 – 一个正数和一个负数相加可能产生一个正数或者一个负数,但是不会导 致溢出
实时数字信号处理
第2章 计算单元
概述
• 每个内核都有6个计算单元
– – – – 两个算术/逻辑单元(ALU) 两个乘/累加器(乘法器)单元 一个移位器 一套视频ALU
• • • • • •
提供定点操作 处理不同类型的操作 数据移入和移出计算单元是通过数据寄存器文件的 数据总线 高级并行机制利用多功能指令 数据地址产生
– – – – – – – – 16位低半部分(An.L)、高半部分(An.H) 8位扩展(An.X) 低32位寄存器An.W 完全的40位结果寄存器(An) A0=A1; A1.W=R7; A0.H=R5.H; R6.H=A0.X; 16 bits */ /* 40-bit move */ /* 32-bit move */ /* 16-bit move */ /* read 8-bit value and sign extend to
数据地址产生器(DAG)
I0 I1 I2 I3 L0 L1 L2 L3 B0 B1 B2 B3 M0 M1 M2 M3 P0 P1 P2 P3 P4 P5
SP
FP
数据寄存器文件
• 包含8个寄存器
– 每个32位宽 – 一对独立的16位寄存器:低半部分和高半部分
• 3条独立总线连接寄存器文件和L1数据存储器
数据类型
• Balckfin处理器主要是16位定点处理器
– 大多数操作采用补码数,其它有无符号数或二进制串 – 一些指令支持32位整数算术、支持8位算术和块浮点 – 数据格式的详细情况参阅硬件参考手册附录C―数字格 式” – 在Blackfin处理器系列算术中有符号数都是2的补码格 式 – 处理器支持32-bit字、16-bit半字和字节
* * – – ** * – – – – ** ** – – – – – – – – – – – –
ห้องสมุดไป่ตู้V CC V_COPY VS – – – – – – * – * – – – – – – – * * – – **/– **/–
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条写 – 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)的访问 形式:
表2-1 寄存器文件指令汇总表
指令 AZ
allreg = allreg ; 1 An = An ; An = Dreg ; Dreg_even = A0 ; Dreg_odd = A1 ;
– – – * *
ASTAT 状态标志 AC0 AV0 AV1 AN AC0_COPY AV0S AV1S AC1 – – – – – – – – – – – – * – – – * – – –