与非门 作为基础门电路
与门, 或门 和 非门 这三种门电路是最基础的门电路, 从这三种基本的门电路出发, 通过各种组合手段, 已经得到了诸如 与非门, 或非门等组合门电路.
比如 与非门 就是 与门 与 非门 的结合. 但如果说, 也可以把 与非门 视作为一种最基础的门电路, 通过它也可以组合出 与门, 或门, 非门, 以及进一步组成 或非门等, 你觉得可能吗?
构建 非门
先来看最简单的 非门, 通过 与非门 要怎么去构建它呢? 首先不难注意到的一点是, 非门只有一个输入端, 而 与非门 有两个输入端, 那么很容易猜到, 这一个的外部输入得同时作用于 与非门 的两个输入端, 也即如下:
然后经过验证, 不难发现, 这样连接之后的行为逻辑正好符合 非门 的要求:
由 与非门 构成的 非门 两种情况 在线可互动操作示例
其实如果去看下 与非门 真值表:
A | B | Y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
把 A 不等于 B 的中间两条去掉:
A | B | Y |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
剩下两条因为 A = B, 所以可以把 B 去掉:
A | Y |
---|---|
0 | 1 |
1 | 0 |
而这个最终的结果不就是 非门 的真值表吗? 所以, 非门 的真值表其实是 与非门 的一个子集:
可以认为 非门 的内部实现就是一个 与非门, 如下:
构建 与门
前面已经构建了 非门, 而我们知道, 与门 与 与非门 之间就是简单的取反关系.
与门 接一个 非门 就构成了 与非门; 而如果 与非门 再接一个 非门, 两次取反, 就如同 负负得正 那般, 就又相当于是 与门:
所以要想从 与非门 得到 与门, 就为它再接一个 非门即可:
注: 因为前面已经构建了 非门, 这里就把它当做基本器件用了.
当然, 不用 非门 也行, 那就整两个 与非门, 然后把后者接成 非门 的形式:
primary::全部由 与非门 构成的 与门 在线可互动操作示例
构建 或门
要构建 或门 需要知道一点 布尔代数(也即逻辑代数) 方面的知识. 在布尔代数中, 有这样一个定律:
!(A | B) = !A & !B
上述表达式中, 其具体符号含义前面也已说过:
|
表示 或;&
表示 与;!
表示 非, 也叫 取反.
注:
!
取反的优先级最高, 除非有括号改变优先级.
上述表达式的意思是: 对 (A 或 B) 的结果 取反, 相当于分别先对 A 和 B 取反 然后再对两者 取与.
在逻辑代数(布尔代数)中, 这个称为
德·摩根定律(De Morgan's Law)
, 属于反演律
的一个特例.
如果不太理解为什么这样, 可以简单通过列出真值表验证:
A | B | Y=(A | B) | !Y | !A | !B | (!A & !B) = !Y | !(!A & !B) = !(!Y) = Y |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
对于像布尔代数这种简单的二值逻辑, 有时也没什么好证明的, 只需简单把所有的情况枚举出来, 就能得出结论了.
因此, 要把 或逻辑 通过 与逻辑 和 非逻辑 表达出来, 可以这样去推演:
A | B = !!(A | B) // 两次取反, 结果不变
= !(!(A | B))
= !(!A & !B) // 德摩根定律
最终, 或门 可以用 非门 和 与门 构建.
另: 上述最后整个的表达式, 括号内是 取与, 括号外是 取非, 因此可以看作是对 !A
和 !B
取与非, 因为恰好是 取与 后再 取非, 合起来正好是 与非, 可以直接用一个 与非门 表达.
所以, 也可以说, 或门 可以用 非门 和 与非门 直接构建.
如果你用 非门 和 与门 去弄, 因为 与门 也不过就是 与非门 再取反, 取反后又取反, 正好抵消, 因此两次取反可以去掉, 最终殊途同归.
这也说明了, 虽然前面说 与门, 或门 和 非门 是最基本的, 但 或门 其实可以由 与门 和 非门 表达出来. 之所以把它单独列出, 是因为 或门 是一个非常常见的逻辑.
全部由 与非门 构成的 或门示意图如下:
全部由 与非门 构成的 或门 在线可互动操作示例
构建 或非门
现在, 或门 也通过 与非门 构建出来了, 或非门 不过是在 或门 的基础上取反, 将前述结果再取反即可:
全部由 与非门 构成的 或非门 在线可互动操作示例
综上, 可以看到, 把 与非门 视作一种基础构件是可行的.
至于为什么这样, 是由于某些类型晶体管的简单组合就天然地具备 与非门 的特性, 或者说其从生产工艺或是生产成本上看是最简单最划算的, 因此在最底层就把它作为最基本的元件.
当然了, 设计的时候还是可以在 与门, 或门 和 非门 的基础上去做, 无非后续再做些转换. 但如果你习惯全部用 与非门 去设计, 那也是可以的.