第2章CPU 2.5 算术逻辑单元(ALU) dsPI1C30FALU为16位宽,能进行加、减、单位移位和逻辑运算。除非特别指明,算术运算一 般是以2的补码(2's Complement)的方式进行的。根据不同的操作,ALU可能会影响SR寄 存器中的进位标志位(C)、全零标志位(Z)、负标志位(N)、溢出标志位(OV)和辅助进 位标志位(DC)的值。在减法操作中,C和DC位分别作为借位和辅助借位位。 根据所使用的指令模式,ALU可以执行8位或16位操作。根据指令的寻址模式,ALU操作的数 据可以来自W寄存器阵列或数据存储器。同样,ALU的输出数据可以被写入W寄存器阵列或数 据存储单元。 有关受到指令、寻址模式和8位/16位指令模式影响的SR位的信息可以参见dsPIC30F Programmer's Reference Manual (DS70030). 注1:字节操作使用16位ALU,并可以产生再加8位的结果。但是,如果要保持和PC 2 器件的向后兼容性,所有字节操作的ALU结果必须被回写为一个字节(即,不修 改MSByte),且只根据结果LSByte的状态更新SR寄存器。 2:字节模式中执行的所有寄存器指令只会影响W寄存器的LSByte。可以使用访问W 寄存器的存储器映射内容的文件寄存器指令修改任何W寄存器的MSByte。 2.5.1 字节到字的转变 超 dsPIC30F有两条指令有助于混合8位和16位ALU操作。符号扩展(SE)指令获取W寄存器 或数据存储器的一个字节值并创建存储在W寄存器中的符号扩展字值。零扩展(zE)指令清零 W寄存器或数据存储器中字值的8MSb并将结果放在目标W寄存器中。 2005 Microchip Technology Inc. DS70049CCN第2-17页
© 2005 Microchip Technology Inc. DS70049C_CN 第 2-17 页 第 2 章 CPU CPU 2 2.5 算术逻辑单元 (ALU) dsPIC30F ALU 为 16 位宽,能进行加、减、单位移位和逻辑运算。除非特别指明,算术运算一 般是以 2 的补码 (2’s Complement)的方式进行的。根据不同的操作, ALU 可能会影响 SR 寄 存器中的进位标志位 (C)、全零标志位 (Z)、负标志位 (N)、溢出标志位 (OV)和辅助进 位标志位 (DC)的值。在减法操作中, C 和 DC 位分别作为借位和辅助借位位。 根据所使用的指令模式,ALU 可以执行 8 位或 16 位操作。根据指令的寻址模式,ALU 操作的数 据可以来自 W 寄存器阵列或数据存储器。同样,ALU 的输出数据可以被写入 W 寄存器阵列或数 据存储单元。 有关受到指令、寻址模式和 8 位 /16 位指令模式影响的 SR 位的信息可以参见 dsPIC30F Programmer's Reference Manual (DS70030)。 2.5.1 字节到字的转变 dsPIC30F 有两条指令有助于混合 8 位和 16 位 ALU 操作。符号扩展 (SE)指令获取 W 寄存器 或数据存储器的一个字节值并创建存储在 W 寄存器中的符号扩展字值。零扩展 (ZE)指令清零 W 寄存器或数据存储器中字值的 8 MSb 并将结果放在目标 W 寄存器中。 注 1:字节操作使用 16 位 ALU,并可以产生再加 8 位的结果。但是,如果要保持和 PIC 器件的向后兼容性,所有字节操作的 ALU 结果必须被回写为一个字节 (即,不修 改 MSByte),且只根据结果 LSByte 的状态更新 SR 寄存器。 2:字节模式中执行的所有寄存器指令只会影响 W 寄存器的 LSByte。可以使用访问 W 寄存器的存储器映射内容的文件寄存器指令修改任何 W 寄存器的 MSByte
dsPIC30F系列参考手册 2.6 DSP引擎 DSP引擎是一个硬件模块,它从W寄存器阵列装入数据,但它有自己专门的结果寄存器。DSP 引擎由与MCU ALU相同的指令译码器驱动。此外,W寄存器阵列中还产生所有操作数有效地址 (EA)。虽然MCU ALU和DSP引擎资源都可以通过指令集中的所有指令共享,但是DSP不能 与MCU指令流同时操作。 DSP引擎由以下组件组成: ·高速17位×17位乘法器 ·桶形移位寄存器 ·40位加法器/减法器 ·两个目标累加寄存器 ·带可选模式的舍入逻辑 ·带可选模式的饱和逻辑 DSP引擎的数据输入来自以下资源: 1.直接来自双源操作数DSP指令的W阵列(寄存器W4、W5、W6或W7)。通过X和Y 存储器数据总线预取W4、W5、W6和W7寄存器的数据值。 2.来自所有其他DSP指令的X存储器数据总线。 从DSP引擎输出的数据被写入以下日标之一: 1.由执行的DSP指令定义的目标累加器。 2.到数据存储器地址空间中任何单元的X存储器数据总线。 DSP引擎能够执行固有的“累加器到累加器”的操作,而无需额外数据。 MCU移位和乘法指令使用DSP引擎硬件获得结果。在这些操作中使用X存储器数据总线进行数 据读写。 图2-8所示为DSP引擎的框图。 注: 详细代码示例和与本节相关的指令语法,请参见dsPIC:30 F Programmer's Reference Manual (DS70030) DS70049CCN第2-18页 2005 Microchip Technology Inc
dsPIC30F 系列参考手册 DS70049C_CN 第 2-18 页 © 2005 Microchip Technology Inc. 2.6 DSP 引擎 DSP 引擎是一个硬件模块,它从 W 寄存器阵列装入数据,但它有自己专门的结果寄存器。 DSP 引擎由与 MCU ALU 相同的指令译码器驱动。此外,W 寄存器阵列中还产生所有操作数有效地址 (EA)。虽然 MCU ALU 和 DSP 引擎资源都可以通过指令集中的所有指令共享,但是 DSP 不能 与 MCU 指令流同时操作。 DSP 引擎由以下组件组成: • 高速 17 位 × 17 位乘法器 • 桶形移位寄存器 • 40 位加法器 / 减法器 • 两个目标累加寄存器 • 带可选模式的舍入逻辑 • 带可选模式的饱和逻辑 DSP 引擎的数据输入来自以下资源: 1. 直接来自双源操作数 DSP 指令的 W 阵列(寄存器 W4、W5、W6 或 W7)。通过 X 和 Y 存储器数据总线预取 W4、 W5、 W6 和 W7 寄存器的数据值。 2. 来自所有其他 DSP 指令的 X 存储器数据总线。 从 DSP 引擎输出的数据被写入以下目标之一: 1. 由执行的 DSP 指令定义的目标累加器。 2. 到数据存储器地址空间中任何单元的 X 存储器数据总线。 DSP 引擎能够执行固有的 “累加器到累加器”的操作,而无需额外数据。 MCU 移位和乘法指令使用 DSP 引擎硬件获得结果。在这些操作中使用 X 存储器数据总线进行数 据读写。 图 2-8 所示为 DSP 引擎的框图。 注: 详细代码示例和与本节相关的指令语法,请参见 dsPIC30F Programmer's Reference Manual (DS70030)
第2章CPU 图2-8: DSP引率框图 40 40位累加器A 40 6 40位累加器B 饱和控制 加法器 取补 2 40 40 40 桶形 移位器 16 40 符号扩展 32 16 补零 32 32 17位×17位 乘法器/小数调整器 16位到17位 转换 16 16 1到1从W阵列 L 2005 Microchip Technology Inc DS70049CCN第2-19页
© 2005 Microchip Technology Inc. DS70049C_CN 第 2-19 页 第 2 章 CPU CPU 2 图 2-8: DSP 引擎框图 我是补零 我 e 符号扩展 g 桶形 移位器 中新 40 位累加器 A 中心 40 位累加器 B 我 e 舍入逻辑 X 数据总线 到 / 从 W 阵列 e 加法器 饱和控制 中取补 32 32 32 16 16 16 16 40 40 40 40 Y 数据总线 40 16 40 乘法器 / 小数调整器 17 位× 17 位 16 位到 17 位 转换 e 我饱和逻辑
dsPIC30F系列参考手册 2.6.1 数据累加器 共有两个40位数据累加器ACCA和ACCB,它们是表2-3所列DSP指令的结果寄存器。每个累 加器经存储器映射到以下三个寄存器,其中“x”表示特定的累加器: ·ACCxL:ACCx<15:0> ·ACCxH:ACCx<31:16> ·ACCxU:ACCx<39:32> 对于使用累加器的小数操作,小数点位于bt31的右侧。存储在每个累加器中的小数值范围为 -256.0到(256.0-231)。对于使用累加器的整数操作,小数点位于bit0的右侧。可存储在每 个累加器中的整数值范围为-549,755,813,888到(549,755,813,887)。 2.6.2 乘法器 dsPIC30F具备一个由MCU ALU和DSP引擎共享的17位×17位的乘法器。此乘法器可以进行 有符号或无符号的运算,而且支持1.31小数(Q.31)或32位整数结果。 此乘法器取16位输入数据并将其转换为17位数据。进入乘法器的有符号操作数将进行符号扩 展。无符号的输入操作数将进行零扩展。17位转换逻辑对于用户是透明的,并允许乘法器支持有 符号和无符号混合/无符号的乘法运算。 IF控制位(CORCON<0>)确定表2-3所列指令的整数/小数操作。F位不会影响表2-4所列的 MCU指令,因为这些MCU总是进行整数操作。对于小数操作,乘法器将乘积左移1位来进行小 数调整。结果的LSbt总是保持清零。在器件复位时,默认乘法器为DSP操作的小数模式。 硬件中,每个模式的数据表示方式如下: ·整数数据固有表示为带符号的2的补码值,其中MSbit被定义为符号位。一般来说,N 位2的补码整数的范围为2N-1到2N-1-1 ·小数数据表示为一个2的补码小数,其中MSit被定义为符号位,并暗示小数点就在 符号位之后(QX格式)。带这种暗示小数点的N位2的补码小数的范围为-1.0到 (1-21-). 图2-9和图2-10说明了乘法器硬件如何处理整数和小数模式的数据。整数和小数模式的数据范 围如表2-2所列。 DS70049CCN第2-20页 2005 Microchip Technology Inc
dsPIC30F 系列参考手册 DS70049C_CN 第 2-20 页 © 2005 Microchip Technology Inc. 2.6.1 数据累加器 共有两个 40 位数据累加器 ACCA 和 ACCB,它们是表 2-3 所列 DSP 指令的结果寄存器。每个累 加器经存储器映射到以下三个寄存器,其中 “x”表示特定的累加器: • ACCxL:ACCx<15:0> • ACCxH:ACCx<31:16> • ACCxU:ACCx<39:32> 对于使用累加器的小数操作,小数点位于 bit 31 的右侧。存储在每个累加器中的小数值范围为 -256.0 到 (256.0– 2-31)。对于使用累加器的整数操作,小数点位于 bit 0 的右侧。可存储在每 个累加器中的整数值范围为 -549,755,813,888 到 (549,755,813,887)。 2.6.2 乘法器 dsPIC30F 具备一个由 MCU ALU 和 DSP 引擎共享的 17 位× 17 位的乘法器。此乘法器可以进行 有符号或无符号的运算,而且支持 1.31 小数 (Q.31)或 32 位整数结果。 此乘法器取 16 位输入数据并将其转换为 17 位数据。进入乘法器的有符号操作数将进行符号扩 展。无符号的输入操作数将进行零扩展。 17 位转换逻辑对于用户是透明的,并允许乘法器支持有 符号和无符号混合 / 无符号的乘法运算。 IF 控制位(CORCON<0>)确定表 2-3 所列指令的整数 / 小数操作。 IF 位不会影响表 2-4 所列的 MCU 指令,因为这些 MCU 总是进行整数操作。对于小数操作,乘法器将乘积左移 1 位来进行小 数调整。结果的 LSbit 总是保持清零。在器件复位时,默认乘法器为 DSP 操作的小数模式。 硬件中,每个模式的数据表示方式如下: • 整数数据固有表示为带符号的 2 的补码值,其中 MSbit 被定义为符号位。一般来说, N 位 2 的补码整数的范围为 2N-1 到 2N-1 - 1 • 小数数据表示为一个 2 的补码小数,其中 MSbit 被定义为符号位,并暗示小数点就在 符号位之后 (Q.X 格式)。带这种暗示小数点的 N 位 2 的补码小数的范围为 -1.0 到 (1 - 21-N)。 图 2-9 和图 2-10 说明了乘法器硬件如何处理整数和小数模式的数据。整数和小数模式的数据范 围如表 2-2 所列
第2章CPU 图2-9: 0x4001的整数和小数表示 0x4001的不同表示 整数 0100 000000000001 -215214213212 44。 0x4001=214+20=16385 1.15小数 2 0100000000000001 -20.212223 215 暗示小数点 x4001=21+215=.500030518 图2-10: 0xC002的整数和小数表示 0xc002的不同表示 整数 110000000000001 -215 214213212 20 0xC002=-215+214+20=-32768+16384+2=-16382 1.15小数 1100000000000010 -20.212223 215 暗示小数点 0xc002=-20+21+214=-1+0.5+0.000061035=-0.499938965 2005 Microchip Technology Inc. DS70049CCN第2-21页
© 2005 Microchip Technology Inc. DS70049C_CN 第 2-21 页 第 2 章 CPU CPU 2 图 2-9: 0x4001 的整数和小数表示 图 2-10: 0xC002 的整数和小数表示 0x4001 的不同表示 整数: -215 214 213 212 . . . . 0x4001 = 214 + 20 = 16385 1.15 小数: 2-15 0 2-1 2-2 2-3 -2 . . . 0 20 x4001 = 2-1 + 2-15 = .500030518 暗示小数点 . 1 0000000000000 1 0 1 0000000000000 1 0xC002 的不同表示 整数: -215 214 213 212 . . . . 0xC002 = -215 + 214 + 20 = -32768 + 16384 + 2 = -16382 1.15 小数: 2-15 . 2-1 2-2 2-3 -2 . . . 0 20 0xC002 = -20 + 2-1 + 2-14 = -1 + 0.5 + 0.000061035 = -0.499938965 暗示小数点 1 1 0000000000001 0 1 1 0000000000001 0