常见复杂逻辑门
复习
- 小数与浮点数:二进制小数可用定点或浮点表示,浮点数范围大但精度有限
- 简单逻辑门:与、或、非是处理二进制信号的基本逻辑门
- 从真值表到逻辑表达式:能从真值表写出逻辑表达式,再据此搭出电路
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 国际许可协议进行许可。
封面图
设计师 | 南国微雪