比较器
二进制比较器学习笔记
从 1 位比较器到可级联 4 位比较器的引脚分析
适合用于:课堂笔记 / 实验报告 / 博客文章 / 课件讲解
01|1 位二进制比较器
核心功能:比较两个 1 位二进制输入
A与B,并输出三种关系之一:A>B、A=B、A<B。

图 1:1 位二进制比较器
02|带传播功能的 1 位二进制比较器
这不是普通的
1-bit比较器,而是一个可以级联的比较单元。多个这样的单元可以组合起来,用于比较多位二进制数,例如 4 位的
A和B。

图 2:带传播功能的 1 位二进制比较器
为什么需要“传播功能”?
在多位比较中,单独比较某一位是不够的。
比较结果通常需要从高位向低位传递:
- 高位已经能判断大小时,低位结果不再改变最终结论;
- 高位相等时,才继续由低位决定大小;
- 因此每一级比较器需要接收来自前一级的比较状态,并继续向后传播。
03|4 位比较器需要多少引脚?
如果把整个 4 位比较器看成一个完整模块,那么它需要统计三类信号:
- 两组 4 位输入信号;
- 初始传播输入信号;
- 最终比较输出信号。
输入引脚统计
| 输入类别 | 信号名称 | 数量 |
|---|---|---|
| A 组输入 | A3、A2、A1、A0 |
4 |
| B 组输入 | B3、B2、B1、B0 |
4 |
| 初始传播输入 | I_A>B、I_A=B、I_A<B |
3 |
| 输入合计 | 4 + 4 + 3 |
11 |
输出引脚统计
| 输出类别 | 信号名称 | 数量 |
|---|---|---|
| 最终比较输出 | O_A>B、O_A=B、O_A<B |
3 |
| 输出合计 | — | 3 |
总引脚数计算
输入引脚:4 + 4 + 3 = 11
输出引脚:3
总引脚数:11 + 3 = 14
04|如何比较超过 4 位的二进制字?
核心问题:一个
7485只能直接比较两个 4 位二进制数。
如果要比较8 bit、12 bit、16 bit甚至更多位,就需要把多个7485进行级联。
4.1|7485 是什么?
7485 是一个经典的 4 位二进制大小比较器。
一个 7485 可以比较两个 4 位二进制数:

图 1:7485 四位二进制大小比较器
但是,一个 7485 只能直接比较 4 bit。
如果要比较:
8 bit12 bit16 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,需要 4 个 7485:
| 比较器 | 负责的位段 | 说明 |
|---|---|---|
第 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 bit 或 16 bit,就必须使用多个 7485。
6.2|12 位比较器的优化思路
以下图中的结构以 12 bit 比较器为例:

图 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 比较为例:
| 方案 | 芯片数量 | 说明 |
|---|---|---|
| 普通级联方式 | 4 个 7485 |
每 4 位一个,串行级联 |
| 优化方式 | 5 个 7485 |
4 个做分组比较,1 个做最终合成 |
增加比例为:
(5 - 4) / 4 = 25%
所以可以总结为:
2 fois plus rapide, 25 % plus cher
也就是:
✅ 速度大约快 2 倍,但成本贵 25%。
06|用 7485 搭建 24 位比较器的优化接法
目标:比较两个
24 bit二进制数。

图 3:24 位比较器的优化接法
6.1|普通想法:24 位可以分成 6 个 4 位
因为:
24 bits = 6 × 4 bits
所以普通想法是:
先用 6 个 7485 分别比较 6 组 4 位
再把比较结果汇总
这种想法很直接,但芯片级数和传播路径可能较长。
6.2|图中的实际分组方式
图中的优化接法不是简单地分成 6 组 4 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 位 A19 和 B19 接到级联输入端,用来“伪装”成前一级比较结果。
接法如下:
| 7485 级联输入端 | 实际连接 | 含义 |
|---|---|---|
A' < B' |
B19 |
当 B19=1 且 A19=0 时,表示这一组偏向 A<B |
A' = B' |
0 |
不直接使用标准相等输入 |
A' > B' |
A19 |
当 A19=1 且 B19=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~A20 和 B23~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>B 和 A<B 两根线作为编码信号,所以仍然可以满足这个优化结构的需求。
⚠️ 注意:这里不是普通级联,而是利用
A>B和A<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
其中有 4 个 1,已经是偶数。
所以校验位可以加:
0
完整数据变成:
10110010 0
总共有 4 个 1,仍然是偶数。
偶校验示例 2
原始数据:
10110011
其中有 5 个 1,是奇数。
为了让总数变成偶数,校验位要加:
1
完整数据变成:
10110011 1
总共有 6 个 1。
奇校验示例
原始数据:
10110010
其中有 4 个 1,是偶数。
为了让总数变成奇数,校验位要加:
1
完整数据变成:
10110010 1
总共有 5 个 1。
7.3|74180 是什么?
图中的 74180 是一个:
8 位奇偶校验产生器 / 检查器
法语写作:
Le circuit 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 |
奇校验输入 | 表示当前传入的是奇状态 |
它们通常有两个目的:
- 选择当前电路按偶校验还是奇校验工作;
- 多个
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 输入
继续累积整体奇偶状态
发表回复