比较器

二进制比较器学习笔记

从 1 位比较器到可级联 4 位比较器的引脚分析

适合用于:课堂笔记 / 实验报告 / 博客文章 / 课件讲解


01|1 位二进制比较器

核心功能:比较两个 1 位二进制输入 AB,并输出三种关系之一:A>BA=BA<B

1 位二进制比较器

图 1:1 位二进制比较器


02|带传播功能的 1 位二进制比较器

这不是普通的 1-bit 比较器,而是一个可以级联的比较单元

多个这样的单元可以组合起来,用于比较多位二进制数,例如 4 位的 AB

带传播功能的 1 位二进制比较器

图 2:带传播功能的 1 位二进制比较器

为什么需要“传播功能”?

在多位比较中,单独比较某一位是不够的。

比较结果通常需要从高位向低位传递:

  • 高位已经能判断大小时,低位结果不再改变最终结论;
  • 高位相等时,才继续由低位决定大小;
  • 因此每一级比较器需要接收来自前一级的比较状态,并继续向后传播。

03|4 位比较器需要多少引脚?

如果把整个 4 位比较器看成一个完整模块,那么它需要统计三类信号:

  1. 两组 4 位输入信号;
  2. 初始传播输入信号;
  3. 最终比较输出信号。

输入引脚统计

输入类别 信号名称 数量
A 组输入 A3A2A1A0 4
B 组输入 B3B2B1B0 4
初始传播输入 I_A>BI_A=BI_A<B 3
输入合计 4 + 4 + 3 11

输出引脚统计

输出类别 信号名称 数量
最终比较输出 O_A>BO_A=BO_A<B 3
输出合计 3

总引脚数计算

输入引脚:4 + 4 + 3 = 11
输出引脚:3
总引脚数:11 + 3 = 14

04|如何比较超过 4 位的二进制字?

核心问题:一个 7485 只能直接比较两个 4 位二进制数。
如果要比较 8 bit12 bit16 bit 甚至更多位,就需要把多个 7485 进行级联。


4.1|7485 是什么?

7485 是一个经典的 4 位二进制大小比较器

一个 7485 可以比较两个 4 位二进制数:

7485 四位二进制大小比较器

图 1:7485 四位二进制大小比较器

但是,一个 7485 只能直接比较 4 bit

如果要比较:

  • 8 bit
  • 12 bit
  • 16 bit
  • 更多位的二进制数

就需要把多个 7485 串联起来。

Mise en cascade des circuits

意思是:

电路级联,也就是把多个电路模块按顺序连接起来,让前一级结果继续影响后一级。


4.2|为什么要从低位接到高位?

比较两个多位二进制数时,高位优先决定大小

例如:

A = 1000 0000
B = 0111 1111

只看最高位就能判断:

A > B

因为最高位已经不同,低位无论是什么,都不会改变最终结果。

但是在 7485 级联时,通常让低位比较器的输出作为高位比较器的传播输入

低 4 位比较结果 -> 中间 4 位比较器 -> 高 4 位比较器 -> 最终输出

这样做的逻辑是:

  • 如果高位不同,高位比较器会直接决定最终大小;
  • 如果高位相等,高位比较器才会参考低位传来的比较结果;
  • 所以最终结果仍然满足“高位优先”。

4.3|第一个 7485 的传播输入应该怎么接?

quelle valeur des entrées de propagation imposer au premier circuit ?

第一个电路的传播输入应该强制设置成什么值?

对于最低位的那个比较器,因为它前面没有更低位了,所以默认:

之前比较的结果是相等。

因此最低位比较器的传播输入应设置为:

传播输入 应接值 含义
I_A>B 0 前面没有比较出 A>B
I_A=B 1 默认前面相等
I_A<B 0 前面没有比较出 A<B

也可以写成:

I_A>B = 0
I_A=B = 1
I_A<B = 0

4.4|级联的缺点:传播延迟会累加

les temps de propagations vont s'additionner sur l'ensemble de la chaîne

传播延迟会在整个级联链中累加。

例如要比较 16 bit,需要 47485

比较器 负责的位段 说明
第 1 个 7485 最低 4 位 先比较低位组
第 2 个 7485 接下来的 4 位 接收前一级传播结果
第 3 个 7485 再高的 4 位 继续向高位传播
第 4 个 7485 最高 4 位 输出最终比较结果

所以:

位数越多 -> 级联越长 -> 传播延迟越大

⚠️ 注意:普通串行级联结构简单、芯片数量少,但速度会受到级联链长度限制。


05|超过 8 位时,如何更快地连接多个 7485?

核心思想:不要让所有 7485 一个等一个地串行传播,而是让多个分组比较器先并行工作,再用最后一级进行汇总。


5.1|7485 本身的限制

7485 是一个 4 位大小比较器。

一个 7485 只能比较:

A3 A2 A1 A0
B3 B2 B1 B0

如果要比较 12 bit16 bit,就必须使用多个 7485


6.2|12 位比较器的优化思路

以下图中的结构以 12 bit 比较器为例:

12 位比较器的并行分组优化接法

图 2:12 位比较器的并行分组优化接法

12 bit 分成三组,每组 4 bit

分组 A 的位段 B 的位段 负责电路
高 4 位 A11~A8 B11~B8 一个 7485
中 4 位 A7~A4 B7~B4 一个 7485
低 4 位 A3~A0 B3~B0 一个 7485

左边的三个 7485 可以同时比较这三组数据。

也就是说:

普通方式:第 1 个等第 2 个,第 2 个等第 3 个……
优化方式:多个分组先同时比较,再统一汇总

这样可以减少等待级联传播的时间。


5.3|优化接法的代价是什么?

代价是:

芯片数量增加。

16 bit 比较为例:

方案 芯片数量 说明
普通级联方式 47485 每 4 位一个,串行级联
优化方式 57485 4 个做分组比较,1 个做最终合成

增加比例为:

(5 - 4) / 4 = 25%

所以可以总结为:

2 fois plus rapide, 25 % plus cher

也就是:

速度大约快 2 倍,但成本贵 25%。


06|用 7485 搭建 24 位比较器的优化接法

目标:比较两个 24 bit 二进制数。

24 位比较器的优化接法

图 3:24 位比较器的优化接法


6.1|普通想法:24 位可以分成 6 个 4 位

因为:

24 bits = 6 × 4 bits

所以普通想法是:

先用 6 个 7485 分别比较 6 组 4 位
再把比较结果汇总

这种想法很直接,但芯片级数和传播路径可能较长。


6.2|图中的实际分组方式

图中的优化接法不是简单地分成 64 bit,而是分成:

5 bits + 5 bits + 5 bits + 5 bits + 4 bits = 24 bits

因此左边第一层实际上是 5 个比较块:

比较块 A 的位段 B 的位段 位数
第 1 块 A23~A19 B23~B19 5 bit
第 2 块 A18~A14 B18~B14 5 bit
第 3 块 A13~A9 B13~B9 5 bit
第 4 块 A8~A4 B8~B4 5 bit
第 5 块 A3~A0 B3~B0 4 bit

6.3|上面的 7485 怎么比较 5 位?

以最上面的 7485 为例。

它正常的 4 位输入接:

A23 A22 A21 A20
B23 B22 B21 B20

然后把第 5 位 A19B19 接到级联输入端,用来“伪装”成前一级比较结果。

接法如下:

7485 级联输入端 实际连接 含义
A' < B' B19 B19=1A19=0 时,表示这一组偏向 A<B
A' = B' 0 不直接使用标准相等输入
A' > B' A19 A19=1B19=0 时,表示这一组偏向 A>B

也可以写成:

A' < B' = B19
A' = B' = 0
A' > B' = A19

正常情况下,7485 的级联输入应该接前一级输出:

A < B
A = B
A > B

但这里没有这样接,而是直接用:

B19, 0, A19

来编码第 5 位的比较结果。


6.4|为什么这样可以?

当高 4 位 A23~A20B23~B20 已经不同,7485 自己就能判断大小。

这时:

第 5 位 A19 / B19 不重要

只有当高 4 位完全相等时,7485 才会参考级联输入。

此时:

A' > B' = A19
A' < B' = B19
A' = B' = 0

如果:

A19 = 1, B19 = 0

那么:

A' > B' = 1
A' < B' = 0

表示这一组:

A > B

如果:

A19 = 0, B19 = 1

那么:

A' > B' = 0
A' < B' = 1

表示这一组:

A < B

如果:

A19 = B19

那么输出可能不是标准的 A=B=1 形式。

但后面只使用这一组输出中的 A>BA<B 两根线作为编码信号,所以仍然可以满足这个优化结构的需求。

⚠️ 注意:这里不是普通级联,而是利用 A>BA<B 输出作为编码信号。它依赖后级的汇总逻辑,不应把这一层直接当作标准 5 位比较器单独使用。


6.5|最下面的 4 位比较器为什么不一样?

最下面那个 7485 比较的是最低 4 位:

A3 A2 A1 A0
B3 B2 B1 B0

它没有第 5 位需要编码,所以它的级联输入正常接成初始相等状态:

A' < B' = 0
A' = B' = 1
A' > B' = 0

也就是:

级联输入 接值
A' < B' 0
A' = B' 1
A' > B' 0

6.6|这张图真正想表达的优化点

这张图的重点不是普通串行级联,而是:

把 24 位拆成 5 位、5 位、5 位、5 位、4 位
第一层比较器并行比较
最后一个 7485 汇总结果

这样做的好处是:

传播延迟大约只经过 2 级 7485。

也就是说,它用更多的连线设计和更巧妙的编码方式,换取了更短的传播路径。


07|奇偶校验码

核心用途:奇偶校验码是一种非常基础的错误检测方法,常用于数据传输或数据存储中。


7.1|什么是奇偶校验?

当我们传输一个二进制数据字时,例如:

A B C D E F G H

如果传输过程中某一位出错,例如:

0 变成 1

接收端不一定能直接知道。

所以我们额外加一位信息,叫做:

parity bit

中文叫:

校验位

它也属于一种:

code redondant

也就是:

冗余码:在有用信息之外,再加一点额外信息,用来检测错误。


7.2|偶校验和奇校验

奇偶校验主要有两种规则:

类型 法语 规则
偶校验 parité paire 整个数据字中 1 的个数必须是偶数
奇校验 parité impaire 整个数据字中 1 的个数必须是奇数

偶校验示例 1

原始数据:

10110010

其中有 41,已经是偶数。

所以校验位可以加:

0

完整数据变成:

10110010 0

总共有 41,仍然是偶数。


偶校验示例 2

原始数据:

10110011

其中有 51,是奇数。

为了让总数变成偶数,校验位要加:

1

完整数据变成:

10110011 1

总共有 61


奇校验示例

原始数据:

10110010

其中有 41,是偶数。

为了让总数变成奇数,校验位要加:

1

完整数据变成:

10110010 1

总共有 51


7.3|74180 是什么?

图中的 74180 是一个:

8 位奇偶校验产生器 / 检查器

法语写作:

Le circuit 74180

74180 八位奇偶校验产生器与检查器

图 4:74180 八位奇偶校验产生器 / 检查器

它可以对 8 个数据输入进行奇偶校验计算:

A B C D E F G H

核心计算可以理解为:

K = A ⊕ B ⊕ C ⊕ D ⊕ E ⊕ F ⊕ G ⊕ H

其中 表示异或运算。

异或有一个非常重要的性质:

输入中 1 的个数 XOR 结果
奇数个 1 1
偶数个 1 0

所以:

K = 1  表示 A~H 中 1 的个数是奇数
K = 0  表示 A~H 中 1 的个数是偶数

8.4|74180 的 Ep 和 Ei

真值表中常见两个输入:

Entrée paire Ep
Entrée impaire Ei

含义如下:

符号 中文含义 作用
Ep 偶校验输入 表示当前传入的是偶状态
Ei 奇校验输入 表示当前传入的是奇状态

它们通常有两个目的:

  1. 选择当前电路按偶校验还是奇校验工作;
  2. 多个 74180 级联时,接收前一级传来的奇偶状态。

对于一个单独的 74180,常见初始化是:

Ep = 1
Ei = 0

这表示:

从“偶状态”开始计算。


7.5|输入少于 8 位怎么办?

Si le mot a moins de 8 bits, il faut mettre les entrées inutilisées à 0.

如果数据字少于 8 位,未使用的输入要接 0

例如只校验 5 位数据:

A B C D E

那么剩下的输入:

F G H

要接:

0 0 0

原因是:

0 不会改变 1 的个数,也不会影响奇偶性。


8.6|输入超过 8 位怎么办?

Si le mot a plus de 8 bits, on utilise plusieurs circuits en cascade.

如果数据字超过 8 位,就把多个 74180 级联使用。

例如要校验 16 bit

A0 ~ A15

可以用两个 74180

电路 负责的数据位 说明
第 1 个 74180 低 8 位 先计算低 8 位奇偶状态
第 2 个 74180 高 8 位 接收前一级输出并继续累积

也就是:

第一个 74180 校验低 8 位
第二个 74180 校验高 8 位
第一个的输出送到第二个的 Ep / Ei 输入
继续累积整体奇偶状态