第 8 讲:加法器、编码器与数值比较器

这几类器件把常用 Boolean 功能封装成可复用模块。理解输入输出关系后,应学会级联、扩展和用它们实现更复杂函数。

半加器与全加器

半加器只加两个一位数:

S=A⊕B,C=AB.S=A\oplus B,\qquad C=AB.

全加器还考虑低位进位 CinC_{in}:

S=A⊕B⊕Cin,S=A\oplus B\oplus C_{in}, Cout=AB+ACin+BCin=AB+(A⊕B)Cin.C_{out}=AB+AC_{in}+BC_{in} =AB+(A\oplus B)C_{in}.

两个半加器加一个 OR 门即可构成全加器。

多位加法

把每一位全加器的 CoutC_{out} 接到高一位 CinC_{in},得到串行进位加法器。结构简单,但最高位必须等待进位逐级传播,延迟约随位数增加。

定义产生与传递:

Gi=AiBi,Pi=Ai⊕Bi,G_i=A_iB_i,\qquad P_i=A_i\oplus B_i,

则

Ci+1=Gi+PiCi.C_{i+1}=G_i+P_iC_i.

展开可并行计算进位,得到超前进位加法器,以更多逻辑换速度。

减法可用补码:对 BB 各位异或控制信号 MM,并令最低位进位 C0=MC_0=M。M=0M=0 做 A+BA+B,M=1M=1 做 A+Bˉ+1=A−BA+\bar B+1=A-B。

编码器

2n2^n–nn 编码器把某一个有效输入的位置编码成 nn 位代码。普通编码器假设同一时刻只有一路有效;若多路同时有效,输出会歧义。

优先编码器规定优先级,只编码最高优先的有效输入,并常提供:

  • 有效输出标志,区分“没有输入”与编码恰好为 0;
  • 级联输入/输出,用于扩展输入路数;
  • 低有效输入和低有效输出。

分析 74 系列优先编码器时必须按真值表有效电平,而不是仅凭器件名称推断。

数值比较器

一位比较:

A>B=ABˉ,A<B=AˉB,A=B=A⊙B.A>B=A\bar B,\qquad A<B=\bar AB,\qquad A=B=A\odot B.

多位比较从最高位开始。若最高位不同,结果已确定;只有高位相等才比较下一位。

对两位数,可写

A>B=A1Bˉ1+(A1⊙B1)A0Bˉ0.A>B=A_1\bar B_1 +(A_1\odot B_1)A_0\bar B_0.

集成比较器通常有级联输入 I>,I=,I<I_{>},I_{=},I_{<},最低一组应初始化为“等于有效、其余无效”;高位组的输出最终决定整体关系。具体级联方向按器件说明。

模块复用

  • 全加器进位函数就是三输入多数表决;
  • 比较器的相等输出可用于地址匹配;
  • 加法器加常数可实现码制转换或地址偏移;
  • 优先编码器可实现中断优先级选择。

检查

  • 加法器最低位进位是否设对;
  • 有符号溢出与无符号进位是否分开;
  • 普通编码器是否满足单输入有效前提;
  • 优先级方向和有效电平是否确认;
  • 比较器从最高位而不是最低位开始;
  • 级联输入是否给了正确初值。

评论