Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

常见复杂逻辑门

复习

  1. 第七章:认识了与、或、非三个基本逻辑门
  2. 第八章:学会了从真值表写表达式、再拼接成逻辑门

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 国际许可协议进行许可。

封面图

设计师 | 南国微雪