# 定点加减法运算
# 补码加减法运算方法
# 补码加法
即,在以 为模时,两数补码的和等于两数和的补码
# 补码减法
对于定点小数 ,对于定点整数 ( 不含符号位的位数)
只需证明 即可
证明:
# 溢出及检测
# 溢出的概念
因为计算机的字长是有限的,因此所能表达的数据范围也是有限的
当运算结果超出所能表示的数据范围时,就会出现溢出;溢出会导致运算结果错误
# 溢出检测
方法一:根据操作数和运算结果的符号位是否一致进行检测
证明
假设机器字长为 位
因此补码所能表示的范围是
当真值 和 同为负数时:
可能负溢
当真值 和 同为正数时:
可能正溢
方法二:
根据运算过程中最高数值位的进位与符号位的进位是否一致进行判断。不同可判定为产生溢出,相同可判定为没有产生溢出
方法三:
利用变形补码(具有 2 位符号位的补码)的符号位进行判断
- 双符号位为 00 时,表示正数
- 双符号位为 11 时,表示负数
- 双符号位为 01 时,表示正溢出
- 双符号位为 10 时,表示负溢出
# 加减法的逻辑实现
# 全加器
假设所有与门和或门的传播时间延迟是 ,异或门的传播时间延迟为

# 多位串行加法器
# 可控加减法电路
当 时:
- 会与 异或,相当于对 取反
- 同时会让 ,相当于末尾加
# 先行进位加法器
因为每一个全加器的进位都需要 的时延,所以如果都采用串联的方式,时延会很大
化简使得 后面加法器的进位不需要依赖于之前的加法器:
先行进位电路的时延是 :

可以得到 位快速加法器的时延:

可以得到 位快速加法器的时延:
为了进一步提升性能,我们将组间也使用并联进位加法器:
# 74181ALU 和 74182CLA
32 位全先行进位 ALU
-
设计思路:
- 每 位 用 片 处理
- 每 片 (16 位)用 片 实现组间先行进位
- 对于 位,需要 两级 实现全先行进位(即组内和组间均并行进位)
-
计算:
-
74181 数量:
-
74182 数量:
- 第一级:每 片 配 片 → 片(覆盖 片 )
- 第二级:用 片 汇总前两级 的进位 → 片
- 总计:
-
64 位全先行进位 ALU
-
设计思路:
- 类似 32 位,但扩展到 64 位,需要 三级 74182 实现全先行进位。
-
计算:
-
74181 数量:
-
74182 数量:
- 第一级:每 片 配 片 → 片
- 第二级:每 片第一级 配 片第二级 → 片
- 第三级: 片 汇总第二级进位 → 片
- 总计:
-
64 位组内先行进位、组间串行进位 ALU
-
设计思路:
- 组内:每组 4 位用 74181 + 74182 实现先行进位
- 组间:组与组之间的进位直接串行传递(不额外使用 74182)
-
计算:
-
74181 数量:
-
74182 数量:
- 每 片 配 片 (仅组内优化)→ 片
- 组间无额外 74182,进位直接串行传递
-
64 位片间串行进位 ALU
-
设计思路:
- 完全放弃先行进位,所有 74181 的进位直接串行传递
- 无需 74182
-
计算:
-
74181 数量:
-
74182 数量:0 片
-
# 定点乘法运算
# 无符号数乘法运算的硬件逻辑实现
# 原码一位乘法
与上述无符号数乘法运算类似,只需要添加符号位的操作即可

# 补码一位乘法–Booth 算法
显然我们可以将二者统一成
# 阵列乘法器
