计算机组成原理笔记(十九)——4.4定点乘法运算

4.4.1原码一位乘法

一、原理说明

原码一位乘法基于绝对值相乘-符号位异或的原则,通过 移位加法迭代 实现。具体规则如下:

  • 符号位处理:乘积符号位 = 两个操作数符号位异或(1⊕0=1或0⊕1=1表示负号)
  • 数值位处理:取被乘数 |x| 和乘数 |y| 进行无符号乘法计算

二、硬件寄存器配置

完成一次乘法需3个关键寄存器:

  1. 被乘数寄存器X:存放 |x|
  2. 乘数寄存器Y:存放 |y|,运算结束后保存积的低位
  3. 部分积寄存器P:初始为0,运算结束后保存积的高位
    在这里插入图片描述

三、运算步骤(以0.1101×0.1011为例)

部分积§乘数(Y)操作
0.00001011初始状态
+0.1101Y最低位=1 ⇒ P +=
0.1101→0.0110右移得到新P,最低位移入Y高位
+0.11011101Y最低位=1 ⇒ 再次加
1.0011→0.1001右移,Y进位更新
+0.00001110Y最低位=0 ⇒ 不加
0.1001→0.0100右移更新
+0.11011111Y最低位=1 ⇒ 加
1.0001→0.1000最后一次右移

乘积数值部分:0.10001111
符号位:0⊕1=1 ⇒ -0.10001111

四、关键设计要点

  1. 控制逻辑

    • 每一循环检测Y最低位(决定是否加|x|)
    • 移位采用逻辑右移(高位补0)
  2. 硬件架构

    • ALU执行加法
    • 计数器控制循环次数(等于位数n)
    • 移位器同步右移P和Y

五、应用特点

  • 优点:规则简单,符号位独立处理
  • 缺点:需将补码转原码后再计算,效率低于补码乘法

4.4.2补码一位乘法

补码一位乘法(Booth算法)是用于有符号数相乘的高效算法,其核心思想是通过相邻两位判断加减操作,符号位全程参与运算,避免单独校正。

补码一位乘法(Booth算法)

算法思想
  1. 符号位参与运算,无需单独处理符号。
  2. 通过乘数当前位和右侧附加位(初始为0)确定操作:
    • 00或11:不操作。
    • 01:加被乘数的补码。
    • 10:减被乘数的补码(即加被乘数相反数的补码)。
  3. 算术右移保持符号位不变,重复n次后完成操作。

运算流程

设:

  • 被乘数 X X X的补码为 [ X ] 补 [X]_补 [X]
  • 乘数 Y Y Y的补码为 [ Y ] 补 [Y]_补 [Y]
  • 初始部分积 P = 0 P = 0 P=0
  • 附加位初始为 Q − 1 = 0 Q_{-1} = 0 Q1=0

【步骤】:

  1. 循环判断乘数当前位 Y i Y_i Yi 和附加位 Q − 1 Q_{-1} Q1
    • Y i Q − 1 = 01 ⇒ P = P + [ X ] 补 Y_iQ_{-1} = 01 \Rightarrow P = P + [X]_补 YiQ1=01P=P+[X]
    • Y i Q − 1 = 10 ⇒ P = P + [ − X ] 补 Y_iQ_{-1} = 10 \Rightarrow P = P + [-X]_补 YiQ1=10P=P+[X]
  2. 算术右移部分积和乘数,最后一位移出。
  3. 重复n次后补加最后一次处理。

示例演练

X = − 3 X = -3 X=3 Y = 5 Y = 5 Y=5(4位补码)为例:

  • [ X ] 补 = 1101 [X]_补 = 1101 [X]=1101, [ Y ] 补 = 0101 [Y]_补 = 0101 [Y]=0101
  • 附加位 Q − 1 = 0 Q_{-1} = 0 Q1=0
步骤操作说明部分积 §乘数 (Y) & Q_{-1}附加位
初始初始化00000101 00
1Y0-Q_{-1}=0-0,不移加00000101 0
右移00000010 11
2Y0-Q_{-1}=1-1,不移加00000010 1
右移00000001 00
3Y0-Q_{-1}=0-0,不移加00000001 0
右移00000000 11
4Y0-Q_{-1}=1-1,不移加00000000 1
结果组合部分积和乘数11111111001-

最终结果: 补码 = 11111001 ⇒ 十进制 − 7 × 16 + 9 = − 103 \text{补码} = 11111001 \Rightarrow 十进制 -7 \times 16 + 9 = -103 补码=11111001十进制7×16+9=103

硬件实现

  • 主要部件
    • 被乘数寄存器(存储 [ X ] 补 [X]_补 [X]
    • 累加器(存储部分积和最终结果)
    • 乘数寄存器(存储 Y Y Y及附加位移位)
    • 控制逻辑(判定加减操作)

在这里插入图片描述

Booth算法通过动态调整加减操作和符号位处理,高效实现了补码乘法,解决了传统方法对负数校正的复杂性。

4.4.3补码两位乘法

一、基本原理与算法思想

补码两位乘法是对Booth算法的改进,通过每次处理2位乘数,减少乘法所需的迭代次数(效率提升50%)**。其核心规则可视为Booth算法的扩展形式:

基本公式推导:
[ X × Y ] 补 = X 补 × ( − Y n + ∑ k = 0 n − 1 ( Y k − Y k + 1 ) × 2 − k ) [X×Y]_{补} = X_{补} × \left( -Y_{n} + \sum_{k=0}^{n-1}(Y_k - Y_{k+1})×2^{-k} \right) [X×Y]=X×(Yn+k=0n1(YkYk+1)×2k)
两位处理时,每轮操作的权重扩展为加减0/1X、2X,实现更高效的运算。

二、完整计算示例

题目:计算 ( − 7 ) × 3 (-7) × 3 (7)×3,假设字长5位(含符号位)。

步骤演示:

  1. 补码转换

    • [ − 7 ] 补 = 1.1001 [-7]_{补} = 1.1001 [7]=1.1001
    • [ 3 ] 补 = 0.0011 [3]_{补} = 0.0011 [3]=0.0011
  2. 初始化

    • A = 00.0000 A = 00.0000 A=00.0000
    • Y = 0011 Y = 0011 Y=0011(附加位=0)
    • [ − X ] 补 = 00.0111 [-X]_{补} = 00.0111 [X]=00.0111
      3.迭代过程
当前位组合操作移位前部分积移位后部分积
110+[X]补=1.1001A=11.1001右移2位 → 11.1110 01
001+无操作A=11.1110 01右移2位 → 11.1111 1001
  1. 结果

    • 最终乘积: Y = 11.11111001 = − 2 1 10 Y = 11.1111 1001 = -21_{10} Y=11.11111001=2110

三、关键点总结

  • 符号位处理:部分积使用双符号位,确保运算正确性
  • 移位的性质:算术右移(保持符号位一致)
  • 溢出判断:通过双符号位检测,若高位两位不同则溢出
  • 效率提升:两位处理将迭代次数减少一半,适合高速运算需求

4.4.4阵列乘法器

阵列乘法器是一种硬件并行乘法器,通过多级加法器的组合结构实现高速乘法运算。其设计核心在于并行计算所有部分积并逐层叠加进位,适合需要高性能的场合,但硬件复杂度较高。

一、基本结构与原理

1. 设计思想
对于 n × n n \times n n×n 位的乘法,通过生成所有部分积 a i ⋅ b j a_i \cdot b_j aibj ( 0 ≤ i , j < n 0 \leq i,j < n 0i,j<n) ,使用加法器阵列逐位叠加完成进位传播。

2. 核心组件

  • 部分积生成器:每个单元实现AND操作,生成 a i ⋅ b j a_i \cdot b_j aibj
  • 行波进位加法器(RCA)阵列:处理部分积累加。

3. 特色

  • 并行计算:所有部分积同时生成。
  • 结构化布局:加法器按网格排列,便于实现流水线。

二、硬件结构示例(4×4 阵列乘法器)

在这里插入图片描述

说明

  • 信号流向:从左上到右下,每个加法器(FA)处理当前位部分积和前级的进位。
  • 输出节点:最终乘积为逐位累加结果(如 P 0 ∼ P 7 P_0 \sim P_7 P0P7)。

三、运算过程示意(3位乘3位为例)

输入: a = 10 1 2 a=101_2 a=1012, b = 11 1 2 b=111_2 b=1112
部分积矩阵:

  1 0 1
×1 1 1
-------
  1 0 1
1 0 1
1 0 1 (移位后)
-------
1 0 0 0 1 1

加法步骤

  1. 所有部分积对齐相加。
  2. 每列通过全加器计算当前位和进位。
  3. 各级加法器组合结果形成最终乘积。

四、关键优化技术

  1. 进位保存技术(CSA)
    每层加法器将进位直接传递至下一级而非累加,减少延迟。
    公式 C i + 1 = CarryOut ,   S i = Sum C_{i+1} = \text{CarryOut}, \ S_i = \text{Sum} Ci+1=CarryOut, Si=Sum

  2. Wallace树结构
    通过树形压缩部分积数量,缩短关键路径,提高速度(适用于大位宽设计)。

五、性能与优缺点

指标阵列乘法器Booth算法
速度快(O(n) )中(O(n log n))
硬件复杂度高(需n²个加法器单元)低(线性复杂度)
面积功耗
应用场景高性能CPU、DSP通用处理器

六、应用实例:32位阵列乘法器设计

采用行波进位阵列与CSA混合结构

  • 关键路径优化:层间插入流水寄存器,提升主频。
  • 异或门替代:采用Sum-XOR提高关键路径速度。

在这里插入图片描述

通过阵列乘法器的并行结构,可在硬件层面显著加速乘法运算,尽管牺牲了部分面积和功耗,但在对性能要求极高的场景中具有不可替代性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao--xin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值