将以下表达式转换为仅使用 NAND 门

Convert the following expression to use only NAND gates

我有以下表达式('表示NOT)...

e'(a+b)

首先我展开...

e'a + e'b

德摩根定律...

(e'a +e'b)'
((e'a)'(e'b)')'

现在我卡住了。我使用的每个 NAND 门最多只能接受 2 个输入。我可以使用任意多的 NAND 门,但我应该尝试想出一个使用最少门的表达式。

我走在正确的轨道上吗?我该如何继续?

看起来不对。

你原来的表达式只有三个运算:NOT (e'), OR (a+b), AND (在我给出的最后两个表达式之间)。您应该弄清楚如何执行这三个操作中的每一个,然后将它们组合成一个整体结构。在这类问题中,知道如何做这些是至关重要的。

这是第一个方法:NOT x 等同于 x NAND x,因此 e' 等同于 e NAND e。从这里继续。

首先,我建议采取这个:

e'(a+b)

并使用更详细的符号编写它,使转换更容易识别为已正确完成:

(not e) and (a or b)

正如 Rory Daulton 所建议的,第一步是了解如何使用 nand 呈现基本逻辑操作。

  1. 注意 e 可以证明等同于 e 和 e,正如 Rory 指出的那样。
  2. 根据nand的定义可以证明a and b等价于not(a nand b)。使用以上结果,我们仅使用与非门就可以恢复等效表达式 (a nand b) nand (a nand b)。
  3. 你可以证明 a 或 b 等价于 De Morgan 的 not((not a) and (not b)),因此根据 nand 的定义,(not a) nand (not b)。我们可以使用以上结果仅使用与非门来导出等效表达式 (a nand a) nand (b nand b)。

回到我们的表达:

(not e) and (a or b)

我有点喜欢从外向内工作,所以我们从最外层的操作开始,然后使用上面2的规则得到:

(not e) and (a or b)
2=> ((not e) nand (a or b)) nand ((not e) nand (a or b))

现在我们在同一级别有四个子表达式,我们可以从左开始,向右工作:

(not e) and (a or b)
2=> ((not e) nand (a or b)) nand ((not e) nand (a or b))
1=> ((e nand e) nand (a or b)) nand ((not e) nand (a or b))
3=> ((e nand e) nand ((a nand a) nand (b nand b))) nand ((not e) nand (a or b))
1=> ((e nand e) nand ((a nand a) nand (b nand b))) nand ((e nand e) nand (a or b))
3=> ((e nand e) nand ((a nand a) nand (b nand b))) nand ((e nand e) nand ((a nand a) nand (b nand b)))

此电路可能如下所示:

e--+---|\   e'
   |   > >o----------------------|\  (e'(a+b))'
   +---|/                        > >o--------+---|\
                             +---|/          |   > >o--e'(a+b)
a--+---|\   a'               |               +---|/
   |   > >o--------|\        |
   +---|/          > >o------+
               +---|/   a+b
b--+---|\      |
   |   > >o----+
   +---|/   b'