首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将(abc)转换为NAND门?

如何将(abc)转换为NAND门?
EN

Stack Overflow用户
提问于 2013-02-14 10:15:49
回答 3查看 4.8K关注 0票数 3

使用DeMorgans我得到:

代码语言:javascript
复制
~~(abc)  // ~ is the not.

我的问题是,当我试图构建电路时,NAND门只需要2个输入。那我怎么把它分成三份呢?如果它是一个AND门,我将只使用2,等式将是:

代码语言:javascript
复制
(a AND b) AND c

但是,这不适用于我的NAND,因为

代码语言:javascript
复制
~((a NAND b) NAND c) != (abc)
EN

回答 3

Stack Overflow用户

发布于 2016-03-10 18:12:49

我建议使用Rott's grids。Rott's网格是德摩根定律的图形化应用程序,对于解决像您这样的问题特别有用。一些逻辑门比其他逻辑门需要更多的晶体管。减少逻辑门的潜在延迟的需要可能是使用门NOR或NAND优化设计的动机。使用Rott的网格可以非常快速地找到相应的函数-使用您需要的逻辑门:

每个Rott的网格都是根据这三个原则创建的:

通过在合取(

  • )和+(析取)之间切换并将它们与水平线(负)相除来遵守德摩根定律,
  • 垂直线分隔单独的输入,改变逻辑门输入的数量,最后一行上的
  • 将输入变量置于质数或求反形式-这是由它们上面的水平线的数量单独确定的。

以下五个网格都是给定函数的不同表示形式:

代码语言:javascript
复制
 a ⋅ b ⋅ c      a ⋅ b ⋅ c      a ⋅ b ⋅ c      a ⋅ b ⋅ c      a ⋅ b ⋅ c 
   |   |       -----------    -----------    -----------    -----------
 a | b | c        +   +          +   +          +   +          +   + 
               -----------    -----------       | ------       | ------
                  ⋅   ⋅          ⋅   ⋅          |   ⋅          |   ⋅
                  | ------    ------ |          | ------       |   |
                  |   +          +   |          |   +       ¬a | b | c
                  | ------    ------ |          |   |
                  |   ⋅          ⋅   |       ¬a | ¬b|¬c
                  |   |          |   |
                a | b | c      a | b | c

第一个网格并不真正有用,它只是一个由3-input实现的原始函数,并且:

代码语言:javascript
复制
f = a ⋅ b ⋅ c

第二个Rott网格仅使用两个输入NAND实现。您可以使用两个双输入NAND和两个反相器,也可以使用四个双输入NAND-其中两个在反相器的位置,因为两个引脚上具有相同输入的双输入NAND会反转信号。

代码语言:javascript
复制
f = ¬(nand(a,¬(nand(b,c))))

第三个Rott网格只是第一个网格的变体。

代码语言:javascript
复制
f = ¬(nand(¬(nand(a,b)),c))

第四个Rott网格可以通过使用两个2输入NORs和四个反相器来实现。反相器可以由2输入NORs或2输入NAND代替。

代码语言:javascript
复制
f = nor(¬a,¬(nor(¬b,¬c))))

第五个Rott网格可以通过一个2输入NOR,一个2输入NAND和一个反相器的组合来实现。

代码语言:javascript
复制
f = nor(not(a),nand(b,c))

(图片是使用online latex tool生成的。)

票数 1
EN

Stack Overflow用户

发布于 2013-02-14 10:25:50

如果你想要的是一个当所有输入都是1时输出为0的电路...

您可以简单地检查它们中的任何一个是否为0,然后将其否定。

你已经说过答案了:德摩根定律。只需应用它们:~(a^b^c) = ~a或~b或~c

不过,也许我漏掉了什么。有没有其他我可能没有注意到的限制?

票数 0
EN

Stack Overflow用户

发布于 2013-02-14 10:31:57

2~是否意味着你不想输出两次?如果是这样,~~(abc) = (abc),(这两个不是互相抵消的),所以你可以只做(a,b)和c。

如果你只想取(abc)的NOT一次,你可以先做(a和b)和c,然后你可以通过一个反相器来传递输出。你需要两个芯片而不是一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14866770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档