Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

常见复杂逻辑门

复习

  • 小数与浮点数:二进制小数可用定点或浮点表示,浮点数范围大但精度有限
  • 简单逻辑门:与、或、非是处理二进制信号的基本逻辑门
  • 从真值表到逻辑表达式:能从真值表写出逻辑表达式,再据此搭出电路

TL;DR

  • 常用的逻辑功可以预先做成“复杂逻辑门”
  • 最常见的是异或门、同或门和多路选择器
  • 它们都能用与或非三门搭出来,但比起直接用与或非三门,搭建电路用预制复杂元件,不仅更直观,而且更清晰

正文

引言

  上一章我们学会了“从需求到电路”的通用方法。但每次都从与或非开始搭,脑子容易乱,元件一多也不直观,对于复杂电路来说,对创造者、维护者、测试者来说都很麻烦。

  所以,人们把一些常用功能预先做成“预制件”,也就是 复杂逻辑门。它们由基本门组合而成,但对外只暴露输入和输出,用起来感觉上就和基本逻辑门一样。

  这就是“加一层”的好处:在计算机科学里,没有什么问题是加一层解决不了的。

异或门与同或门

  异或门(XOR) 的特点:两个输入不同时输出 1,相同时输出 0。可以理解为“不同则真”。

  • 楼梯的双控开关:楼上楼下两个开关状态不同时灯亮,相同时灯灭
  • 红绿灯:行人和车辆不能同时通行,必须一方通行时另一方等待

  同或门(XNOR) 则相反:两个输入相同时输出 1,不同时输出 0。它适合用来“检查是否相同”。

  真值表:

输入 A输入 BXOR 输出XNOR 输出
0001
0110
1010
1101

  还记得前面那个“不同则真”的例子吗?它的表达式 Y = A̅B + AB̅,正是异或门。也就是说,异或门被封装成了一个预制件。

多路选择器

  多路选择器(MUX,Multiplexer) 像一个数字版的“多选一”开关:有多个数据输入端、一个选择输入端、一个输出端。选择信号决定把哪一路数据送到输出。

  • 在多个数据里挑一个输出
  • 具体用法:在数据总线、地址总线上选择输入端的数据

  最简单的二选一多路选择器有三根输入:选择信号 S、数据 A、数据 B。具体行为如下:

  • S = 0 时,输出 A
  • S = 1 时,输出 B

  画成真值表(因为 S 定了以后,输出就等于被选中的那一路):

选择信号 S输入 A输入 B输出
00X0
01X1
1X00
1X11

  (X 表示“这一路无所谓”,因为没被选中。)

  用前面学的方法,可以推出它的表达式为 Y = S̅A + SB:S 为 0 时选中 A、S 为 1 时选中 B。

其他常见的复杂门

  除了上面三个,还有很多“预制件”,同样能用与或非搭出来,这里就不给出电路图了,只给出名字。按照我们之前的方法,画出真值表,写出表达式,根据表达式搭元件就能搭出来。

  • 移位器:把一串二进制位整体左移或右移
  • 译码器:把一串二进制码翻译成“选中其中一根线”的信号(后面造 ALU 时会用到)
  • 比较器:判断两个数是否相等、谁大谁小
  • 奇偶校验器:数一数输入里 1 的个数是奇数还是偶数,用于查错

补充:异或门的几种搭法

  异或门可以用基础三门搭,也可以用 nand 或 nor 搭,方案不止一种。

  实现成本需要具体比较门的数量、门类型和晶体管开销。回顾讲简单逻辑门时的晶体管补充:and 在晶体管层面其实是 nand + not。所以同样一个异或门,不同搭法在晶体管数量上可能差不少:

思考题

  多路选择器有“多选一”,那有没有反过来的“一拆多”,也就是把一个输入按选择信号送到多个输出中的某一个?它大概长什么样?

小结

知识点

  • 复杂逻辑门是基本门的“预制件”
  • 异或门与同或门
  • 多路选择器
  • 移位器、译码器、比较器等常见复杂门
  • 异或门的多种搭法与开销

参考资料

  1. Wikipedia(zh):异或门:异或门的详细介绍
  2. Wikipedia(zh):多路复用器:多路选择器的工作原理

思考题答案(仅供参考)

  有,叫 解复用器(DEMUX)。它的输入是一路数据加一个选择信号,输出是多路,选择信号决定数据从哪一路出去。它和多路选择器的关系,就像“多选一”和“一发多”,常用于把一路信号分发到不同部件。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪