4.4.1原码一位乘法
一、原理说明
原码一位乘法基于绝对值相乘-符号位异或的原则,通过 移位加法迭代 实现。具体规则如下:
- 符号位处理:乘积符号位 = 两个操作数符号位异或(1⊕0=1或0⊕1=1表示负号)
- 数值位处理:取被乘数 |x| 和乘数 |y| 进行无符号乘法计算
二、硬件寄存器配置
完成一次乘法需3个关键寄存器:
- 被乘数寄存器X:存放 |x|
- 乘数寄存器Y:存放 |y|,运算结束后保存积的低位
- 部分积寄存器P:初始为0,运算结束后保存积的高位
三、运算步骤(以0.1101×0.1011为例)
部分积§ | 乘数(Y) | 操作 |
---|---|---|
0.0000 | 1011 | 初始状态 |
+0.1101 | Y最低位=1 ⇒ P += | |
0.1101→ | 0.0110 | 右移得到新P,最低位移入Y高位 |
+0.1101 | 1101 | Y最低位=1 ⇒ 再次加 |
1.0011→ | 0.1001 | 右移,Y进位更新 |
+0.0000 | 1110 | Y最低位=0 ⇒ 不加 |
0.1001→ | 0.0100 | 右移更新 |
+0.1101 | 1111 | Y最低位=1 ⇒ 加 |
1.0001→ | 0.1000 | 最后一次右移 |
乘积数值部分:0.10001111
符号位:0⊕1=1 ⇒ -0.10001111
四、关键设计要点
-
控制逻辑
- 每一循环检测Y最低位(决定是否加|x|)
- 移位采用逻辑右移(高位补0)
-
硬件架构
- ALU执行加法
- 计数器控制循环次数(等于位数n)
- 移位器同步右移P和Y
五、应用特点
- 优点:规则简单,符号位独立处理
- 缺点:需将补码转原码后再计算,效率低于补码乘法
4.4.2补码一位乘法
补码一位乘法(Booth算法)是用于有符号数相乘的高效算法,其核心思想是通过相邻两位判断加减操作,符号位全程参与运算,避免单独校正。
补码一位乘法(Booth算法)
算法思想
- 符号位参与运算,无需单独处理符号。
- 通过乘数当前位和右侧附加位(初始为0)确定操作:
- 00或11:不操作。
- 01:加被乘数的补码。
- 10:减被乘数的补码(即加被乘数相反数的补码)。
- 算术右移保持符号位不变,重复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 Q−1=0
【步骤】:
- 循环判断乘数当前位
Y
i
Y_i
Yi 和附加位
Q
−
1
Q_{-1}
Q−1:
- Y i Q − 1 = 01 ⇒ P = P + [ X ] 补 Y_iQ_{-1} = 01 \Rightarrow P = P + [X]_补 YiQ−1=01⇒P=P+[X]补
- Y i Q − 1 = 10 ⇒ P = P + [ − X ] 补 Y_iQ_{-1} = 10 \Rightarrow P = P + [-X]_补 YiQ−1=10⇒P=P+[−X]补
- 算术右移部分积和乘数,最后一位移出。
- 重复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 Q−1=0
步骤 | 操作说明 | 部分积 § | 乘数 (Y) & Q_{-1} | 附加位 |
---|---|---|---|---|
初始 | 初始化 | 0000 | 0101 0 | 0 |
1 | Y0-Q_{-1}=0-0,不移加 | 0000 | 0101 0 | |
右移 | 0000 | 0010 1 | 1 | |
2 | Y0-Q_{-1}=1-1,不移加 | 0000 | 0010 1 | |
右移 | 0000 | 0001 0 | 0 | |
3 | Y0-Q_{-1}=0-0,不移加 | 0000 | 0001 0 | |
右移 | 0000 | 0000 1 | 1 | |
4 | Y0-Q_{-1}=1-1,不移加 | 0000 | 0000 1 | |
结果 | 组合部分积和乘数 | 1111111 | 1001 | - |
最终结果: 补码 = 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=0∑n−1(Yk−Yk+1)×2−k)
两位处理时,每轮操作的权重扩展为加减0/1X、2X,实现更高效的运算。
二、完整计算示例
题目:计算 ( − 7 ) × 3 (-7) × 3 (−7)×3,假设字长5位(含符号位)。
步骤演示:
-
补码转换
- [ − 7 ] 补 = 1.1001 [-7]_{补} = 1.1001 [−7]补=1.1001
- [ 3 ] 补 = 0.0011 [3]_{补} = 0.0011 [3]补=0.0011
-
初始化
- 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.1001 | A=11.1001 | 右移2位 → 11.1110 01 |
001 | +无操作 | A=11.1110 01 | 右移2位 → 11.1111 1001 |
-
结果
- 最终乘积: 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
ai⋅bj (
0
≤
i
,
j
<
n
0 \leq i,j < n
0≤i,j<n) ,使用加法器阵列逐位叠加完成进位传播。
2. 核心组件
- 部分积生成器:每个单元实现
AND
操作,生成 a i ⋅ b j a_i \cdot b_j ai⋅bj。 - 行波进位加法器(RCA)阵列:处理部分积累加。
3. 特色
- 并行计算:所有部分积同时生成。
- 结构化布局:加法器按网格排列,便于实现流水线。
二、硬件结构示例(4×4 阵列乘法器)
说明:
- 信号流向:从左上到右下,每个加法器(FA)处理当前位部分积和前级的进位。
- 输出节点:最终乘积为逐位累加结果(如 P 0 ∼ P 7 P_0 \sim P_7 P0∼P7)。
三、运算过程示意(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
加法步骤:
- 所有部分积对齐相加。
- 每列通过全加器计算当前位和进位。
- 各级加法器组合结果形成最终乘积。
四、关键优化技术
-
进位保存技术(CSA)
每层加法器将进位直接传递至下一级而非累加,减少延迟。
公式: C i + 1 = CarryOut , S i = Sum C_{i+1} = \text{CarryOut}, \ S_i = \text{Sum} Ci+1=CarryOut, Si=Sum -
Wallace树结构
通过树形压缩部分积数量,缩短关键路径,提高速度(适用于大位宽设计)。
五、性能与优缺点
指标 | 阵列乘法器 | Booth算法 |
---|---|---|
速度 | 快(O(n) ) | 中(O(n log n)) |
硬件复杂度 | 高(需n²个加法器单元) | 低(线性复杂度) |
面积功耗 | 大 | 小 |
应用场景 | 高性能CPU、DSP | 通用处理器 |
六、应用实例:32位阵列乘法器设计
采用行波进位阵列与CSA混合结构:
- 关键路径优化:层间插入流水寄存器,提升主频。
- 异或门替代:采用Sum-XOR提高关键路径速度。
通过阵列乘法器的并行结构,可在硬件层面显著加速乘法运算,尽管牺牲了部分面积和功耗,但在对性能要求极高的场景中具有不可替代性。