跳到正文
芯片启蒙

真值表:把所有情况列完

10 分钟

规则写成一句话以后,怎样证明没有漏掉情况?数字电路有一个朴素又可靠的办法:真值表。它把所有输入组合逐行列出来,再写每一种情况下的输出。

自动夜灯有两个只有 0 和 1 的输入:天黑 D、有人 P。两个输入一共有 种组合:

D 天黑 P 有人 L 灯亮
0 0 0
0 1 0
1 0 0
1 1 1

最后一行才亮,正好对应「天黑并且有人」。如果规则改成「天黑或者有人就亮」,后三行都会亮,那是另一张表、另一种电路。

为什么要笨笨地列完

人很容易只想到正常情况。例如测试密码门时,只试「密码对了能开」,却忘了试「密码错了不能开」。真值表逼着我们把每个组合都面对一次。输入有三个时是 8 行,四个时是 16 行;每增加一个二进制输入,组合数就翻倍。

表就是电路的说明书

同一张真值表可以用逻辑门搭出来,也可以写成程序,还可以交给芯片设计软件转换成晶体管网络。实现方式不同,行为应该相同。工程师讨论系统时先对表达成一致,就不会陷入「你想的是这种开灯,我想的是另一种」的争论。

别把未知硬塞成 0

真实传感器可能断线,此时不是亮也不是暗,而是「不知道」。成熟系统会给未知和故障留位置,例如检测到断线就报警,而不是默默当成 0。二进制规则清晰,但现实进入二进制之前还需要检查。

练一练:给「门关好并且按下启动键,机器才运行」画一张四行真值表,并圈出唯一输出为 1 的那一行。

小纸条

两个二进制输入有几种组合?三个输入呢?