常见复杂逻辑门
复习
- 第七章:认识了与、或、非三个基本逻辑门
- 第八章:学会了从真值表写表达式、再拼接成逻辑门
TL;DR
- 把常用的逻辑功能预先做成“复杂逻辑门“,搭建电路就像用预制件,省事很多
- 最常见的是异或门、同或门和多路选择器
- 它们都能用与或非三门搭出来,但直接用一个“复杂门“更清爽
正文
引言
上一章我们学会了“从需求到电路“的通用方法。但每次都从与或非开始搭,就像每次都从烧砖开始盖房子——能用,太累。
所以,人们把一些常用功能预先做成“预制件“,也就是复杂逻辑门。它们由基本门组合而成,但对外只暴露输入和输出,用起来和基本门一样方便。
这就是“加一层“的好处:在计算机科学里,没有什么问题是加一层解决不了的。
异或门与同或门
**异或门(XOR)**的特点:两个输入不同时输出 1,相同时输出 0。可以理解为“不同则真“。
- 楼梯的双控开关:楼上楼下两个开关状态不同时灯亮,相同时灯灭
- 红绿灯:行人和车辆不能同时通行,必须一方通行时另一方等待
**同或门(XNOR)**则相反:两个输入相同时输出 1,不同时输出 0。它适合用来“检查是否相同“。
真值表:
| 输入 A | 输入 B | XOR 输出 | XNOR 输出 |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
还记得第八章那个“不同则真“的例子吗?它的表达式 Y = A̅B + AB̅,正是异或门。也就是说,异或门就是这张真值表被封装成了一个预制件。
多路选择器
**多路选择器(MUX,Multiplexer)**像一个数字版的“多选一“开关:有多个数据输入端、一个选择输入端、一个输出端。选择信号决定把哪一路数据送到输出。
- 在多个数据里挑一个输出
- 在数据总线、地址总线上选择输入端的数据
最简单的二选一多路选择器有三根输入:选择信号 S、数据 A、数据 B。它的行为其实一句话就能说清:
- S = 0 时,输出 A
- S = 1 时,输出 B
画成真值表(因为 S 定了以后,输出就等于被选中的那一路):
| 选择信号 S | 输入 A | 输入 B | 输出 |
|---|---|---|---|
| 0 | 0 | X | 0 |
| 0 | 1 | X | 1 |
| 1 | X | 0 | 0 |
| 1 | X | 1 | 1 |
(X 表示“这一路无所谓“,因为没被选中。)
用第八章的方法,可以推出它的表达式为 Y = S̅A + SB。你看,读起来正是“S 为 0 时选 A、S 为 1 时选 B“,和直觉完全一致。
其他常见的复杂门
除了上面三个,还有很多“预制件“,同样能用与或非搭出来,这里只报个名字:
- 移位器:把一串二进制位整体左移或右移
- 译码器:把一串二进制码翻译成“选中其中一根线“的信号(第十五章造 ALU 时会用到)
- 比较器:判断两个数是否相等、谁大谁小
- 奇偶校验器:数一数输入里 1 的个数是奇数还是偶数,用于查错
它们的内部构造都用得上第八章的方法,读者可以自己试着推一推。
补充:异或门的几种搭法
异或门可以用基础三门搭,也可以用 nand 或 nor 搭,方案不止一种。
一般来说,用的门越少,开销越小、效率越高。回顾第七章的晶体管补充:and 在晶体管层面其实是 nand + not。所以同样一个异或门,不同搭法在晶体管数量上可能差不少。下面两种方案里,第一种就明显更划算:
思考题
多路选择器有“多选一“,那有没有反过来的“一拆多“,也就是把一个输入按选择信号送到多个输出中的某一个?它大概长什么样?
小结
知识点
- 复杂逻辑门是基本门的“预制件“
- 异或门与同或门
- 多路选择器
- 移位器、译码器、比较器等常见复杂门
- 异或门的多种搭法与开销
参考资料
- Wikipedia(zh):异或门:异或门的详细介绍
- Wikipedia(zh):多路复用器:多路选择器的工作原理
思考题答案(仅供参考)
有,叫解复用器(DEMUX)。它的输入是一路数据加一个选择信号,输出是多路,选择信号决定数据从哪一路出去。它和多路选择器的关系,就像“多选一“和“一选多“,常用于把一路信号分发到不同部件。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪