3 votes

Comment convertir (abc) en une porte NAND ?

En utilisant DeMorgans, j'obtiens :

~~(abc)  // ~ is the not.

Mon problème est que lorsque j'essaie de construire le circuit, la porte NAND ne prend que 2 entrées. Alors comment la diviser pour en avoir 3 ? Si c'était une porte ET, je n'en utiliserais que deux et l'équation serait la suivante :

(a AND b) AND c

Cependant, cela ne fonctionnera pas avec ma carte NAND, car

~((a NAND b) NAND c) != (abc)

1voto

BBerry Points 451

Je suggère d'utiliser les grilles de Rott . La grille de Rott est une application graphique des lois de Morgan et elle est particulièrement utile pour résoudre des problèmes comme le vôtre. Certaines portes logiques nécessitent plus de transistors que d'autres. La nécessité de réduire les retards potentiels au niveau des portes logiques peut motiver l'optimisation de la conception en utilisant des portes NOR ou NAND. La recherche d'une fonction correspondante - avec les portes logiques dont vous avez besoin - peut se faire très rapidement à l'aide des grilles de Rott :

Chaque grille de Rott est créée selon ces trois principes :

  • les lois de Morgan sont respectées en passant du ⋅ (la conjonction) au + (la disjonction) et en les séparant par des traits horizontaux (les négations),
  • les lignes verticales séparent les différentes entrées, ce qui modifie le nombre d'entrées des portes logiques,
  • sur la dernière ligne sont placées les variables d'entrée, soit sous leur forme première, soit sous leur forme annulée - ce qui est déterminé individuellement par le nombre de lignes horizontales au-dessus d'elles.

Les cinq grilles suivantes sont toutes des représentations différentes de la fonction donnée :

 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

Equivalent boolean expressions to the given function

La première grille n'est pas vraiment utile, il s'agit simplement de la fonction originale implémentée par un ET à 3 entrées :

f = a ⋅ b ⋅ c

La deuxième grille de Rott est mise en œuvre en utilisant uniquement des NAND à 2 entrées. Vous pouvez utiliser soit deux NAND à 2 entrées et deux inverseurs, soit quatre NAND à 2 entrées - dont deux à la place des inverseurs, car un NAND à 2 entrées ayant la même entrée sur les deux broches inverse le signal.

f = ¬(nand(a,¬(nand(b,c))))

La troisième grille de Rott n'est qu'une variante de la première.

f = ¬(nand(¬(nand(a,b)),c))

La quatrième grille de Rott peut être réalisée en utilisant deux NOR à 2 entrées et quatre onduleurs. Les inverseurs peuvent être remplacés par des NOR à 2 entrées ou des NAND à 2 entrées.

f = nor(¬a,¬(nor(¬b,¬c))))

La cinquième grille de Rott peut être réalisée en combinant un NOR à 2 entrées, un NAND à 2 entrées et un inverseur.

f = nor(not(a),nand(b,c))

(L'image a été générée à l'aide de outil latex en ligne .)

0voto

amarunowski Points 93

Si tout ce que vous voulez, c'est un circuit qui produit 0 lorsque toutes les entrées sont à 1...

Il suffit de vérifier si l'un d'entre eux est égal à 0, puis de l'annuler.

Vous avez déjà donné la réponse : Les lois de Morgan. Il suffit de les appliquer : ~(a^b^c) = ~a ou ~b ou ~c

Mais j'ai peut-être raté quelque chose. Y a-t-il d'autres restrictions que je n'aurais pas remarquées ?

0voto

PhoenixWing156 Points 384

Les 2 ~ signifient-ils que vous voulez NOTer la sortie deux fois ? Si c'est le cas, ~~(abc) = (abc), (les deux NOT s'annulent) et vous pouvez donc simplement faire (a ET b) ET c.

Si vous voulez simplement prendre le NOT de (abc) une fois, vous pouvez d'abord faire (a ET b) ET c, puis vous pouvez faire passer cette sortie par un inverseur. Vous aurez besoin de deux puces au lieu d'une.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X