4つのNANDゲートのみを使用してXORゲートを構築する方法は?


16

xorゲート、今、私は4つのnandゲートのみを使用してこのゲートを構築する必要があります

a b out
0 0 0
0 1 1
1 0 1
1 1 0

xor = (a and not b) or (not a and b)である、

A¯B+AB¯

私は答えを知っていますが、式からゲート図を取得する方法は?

XORゲート

編集

私が直感的に意味するのは、ステップバイステップで定義を実行した場合、これを取得する必要があることですxor = (a and not b) or (not a and b)

A¯B¯AB¯¯¯

及びxor5つので構成するnandゲート(以下第1位の画像)

XORゲート2

私の質問はもっと似ています:歴史の最初の人がこの式を理解していることを想像してくださいnand

A¯B+AB¯

XOR(または他の関数)を取り、NANDのみを使用する等価回路に変換する方法を知っていると確信しています(NANDは完全なので、常に可能です)。あなたが唯一の4のNANDを使用する、または一般的には、以下よりも、この式を削減する方法を尋ねる場合はのNAND、と等価回路を得ることも可能であるかどうかk個のNAND -私は確かに簡単ではありませんよその答え。kk
ランG.

以下は、問題に対する2つの答えです。私は、質問で与えられ、インターネットで入手可能な最終結果を事前に知ることから、目的の構造を見つける方法を(事後的に)設計できるという事実について非常に率直です。それは明らかに、単純な方法であり、一見不合理に思えますが、一般的な手順を提示する以外には答えがありません。したがって、私は、投票者がそうするとき、投票者が一方の答えを他方より好む理由を知ることに興味があります...あなたが短いコメントのために時間をかけるなら。前もって感謝します。
babou

この質問は、不明確であるとしてクローズされることになっています。私は、OPは彼に答えることをしようと、さまざまなユーザーに反応する気にならば、かなり、OPが求めて、多くのi8nterestingれるものクリアするかもしれないと思う
babou

electronics.stackexchange.com/questions/84714/…-この質問はより一般的であり、回答はこの問題を解決するための一般的なアプローチに関する詳細情報を提供し、この回答はelectronics.stackexchange.com/a/84803がNANDを導出する方法を示していますXOR演算子の表現
アントントルーノフ

私はいくつかの同様の問題をいじり、すべてを体系的に試してみたプログラムを書きました... 65,536個の機能しか持たない最大4つの入力に対しては問題ありません。少し複雑な回路の場合、これにより遅延を最適化し、1つまたは2つの入力が他の入力よりも後で利用できる場合に最適な回路を見つけることができました。5入力= 2 ^ 32の機能を持つ回路は、おそらくブルートフォースを使用して実行可能です。
gnasher729

回答:


12

その式から?できます。しかし、これから始める方が簡単です:(ここで別の表記を使用)

a ^ b = ~(a & b) & (a | b)

OK、今何?最終的に導出する必要があります~(~(~(a & b) & a) & ~(~(a & b) & b))(NANDが5つあるように見えますが、回路図のように、2回使用される部分式があります)。

そのため、次のように見えるもの~(a & b) & a(そして同じものですがb、最後に)を作成し、それがそのまま続くことを期待します:(and配布or

(~(a & b) & a) | (~(a & b) & b)

かなり近いので、DeMorganを適用してその中間orand

~(~(~(a & b) & a) & ~(~(a & b) & b))

以上です。


9

私はあなたがこの証拠を求めていると思う:

A^B = (!A)B + A(!B)
    = !!((!A)B) + !!(A(!B))
    = !(!!A + !B) + !(!A + !!B)
    = !(A + !B) + !(!A + B)
    = !((A + !B)(!A + B))
    = !(A(!A) + AB + (!A)(!B) + B(!B))
    = !(AB + (!A)(!B))
    = !(AB)(!(!A)(!B))
    = !(AB)(!!A + !!B)
    = !(AB)(A+B)
    = !(AB)A + !(AB)B
    = !!(!(AB)A + !(AB)B)
    = !((!(!(AB)A))(!(!(AB)B)))

NAND結果の方程式では明らかに5 が使用されてい!(AB)ますが、回路を設計するときに重複が1回だけ使用されます。


申し訳ありませんが、A ^ BはA AND Bを意味しませんか?あなたの意図は、XORがsymbolまたはsymbolであるべきことを証明することだったようです。しかし、この証拠は私が本当に探していたものでした、ありがとう!
osiixy

5

Googleで質問のタイトルを入力することでウィキペディアから簡単に入手できるダイアグラムの回答がすでにあるので、 あなたと同じ.pngダイアグラムとして、そのダイアグラムから数式を抽出することで簡単に式を見つけることができます。定義NANDを与え NANDAB=AB¯

  • 左端のゲートが得られるC=AB¯

  • トップゲートが得られるD1=AC¯

  • トップゲートが得られる NANDが等commutatveであるように、。D2=BC¯

  • 右端のゲートが得られるE=D1D2¯

すべてをまとめると、まず、

C=AB¯=A¯+B¯

D1¯=AC=A(A¯+B¯)=AA¯+AB¯=0+AB¯=AB¯

同様に:D2¯=BA¯

したがって、
E=D1D2¯=D1¯+D2¯=AB¯+BA¯

これはまさにXORの定義です。答えを確認するだけでなく、初期データから開始する場合は、これをすべて逆にすることができます。

予備知識なしで答えを見つける

これは、ソリューションをゼロから見つける方法のために、質問の編集として追加された明示的な要求に答えることを目的としています。質問は思考プロセスに関するものであるため、すべての詳細を説明します。

私は問題の制約(4つのNANDゲートのみ)とその間の対称性に依存しようとします AB、ソリューションで保持される可能ます。

私が知っていることの一つは、(仮定情報は、当該図のように左から右へ流れる)所望の応答生成右端のNANDゲートが存在しなければならないということである XOR(A,B)=AB¯+BA¯

したがって、このゲートへのどのような入力が目的の出力を生成するかを推測することができます。

NAND(X,Y)=XY¯=X¯+Y¯

統一この最後の式を取得する必要のある結果とと、次のようになります。

  • X¯=AB¯X=AB¯¯=A¯+B

  • Y=A¯B¯=A+B¯

これは最も単純な可能性にすぎないことに注意してください。NANDには等式特性があるため、自由代数で統一されていないため、望ましい結果を与える他の入力ペアがあります。しかし、私たちは最初にそれを試みます。

XYAB

統一手順を繰り返すことはできましたが(私はしました)、これにより、さらに4つのゲートを使用することになり、したがって5つのゲートソリューションになります。

XYZABこれらの2つの中間ゲートに入力を提供するとです。

XYZABABを入力として受け取るます。

AB入力としてを出力として生成します。

Z=NAND(A,B)=AB¯=A¯+B¯

ここで、組み合わせかどうかを確認する必要がありますZABXYます。

NANDゲートを介して値を0または1自体と組み合わせることは、恒等関数または否定のいずれかであることがわかります。残りの候補はのみですABです。

それを確認するのは簡単です

NAND(Z,A)=ZA¯=AB¯A¯=(A¯+B¯)A¯=A¯A+B¯A¯=0+B¯A¯=B¯A¯=AB¯¯=X

NAND(Z,B)=Y

したがって、これら4つのゲートを構成して、目的の結果、つまりXOR関数を取得できます。


それらが等しいことを証明する逆の方法ではありません。しかし、図を知らないが、最小のナンドゲートを使用してゲートを構築するイメージ。
タイムレス

1
答えとして何を期待しますか?それを行うための体系的な手法。複雑なケースで使用する価値があるほど扱いやすいものがあるかどうかはわかりません。私は答えを知っているので、私はあなたに嘘をついて、答えをチェックすることによって私が発見したことを推論することによって見つけたふりをすることができます。これは、NAND(A、B)で得られるものを見るだけで開始に役立つと思われることです。次に、結果を1つの引数AまたはBでNAND演算することも、私がどこにいるかのビューを取得するために見るべき1つの事柄です。そこから、最終的な答えにかなり近づきます。
babou

1
@Timelessこれを実行するもう1つの方法は、答えがNANDゲートの前であることを知って、答えから逆戻りすることです。ソリューションがAとBで対称的であると仮定すると、最後のNANDゲートへの入力の可能性が高い形式を提供します。答えを見つけるため、またはそれを後天的に見つけることを正当化するために、それを実行する多くの方法があります。しかし、証拠は、あなたの創意工夫によって発見されたものであれ、神託や親友によって提供されたものであれ、証拠です。そして、ある時点で誰も違いを見分けることができません。実際、解決策が他の方法で見つかったとしても、私が与える後方証明は最良の証明になる可能性があります。
babou

実際、数学では、解決策を見つけるための分析部分を持ち、それが解決策であることを証明する合成部分を持つことが非常に一般的です。1つは通常両方を提供しますが、実際に必要なのは2番目の部分だけです。
babou

@Timeless両方の答えは、取得するダイアグラムから推測される取得する式の知識に基づいていました。編集者は、結果を事前に知らずに答えを見つけるためのもっともらしい直観的なシナリオを求めました。私はそれを答えに加えましたが、それがあなたが期待したものに合うかどうかを知ることは素晴らしいことです。
babou

0

(0,0)

XORNAND(0,0)=1

  • NANDNAND(1,1)=0

    • NAND(0,1)=1NAND(1,0)=1NAND(0,0)NAND

NAND(0,0)(0,1),(1,0),(1,1)


0

尋ねられた式を使って答えを出すために最善を尽くしました。
Z = AB '+ A'B
Z = AA' + AB '+ BB' + A'B ---> BB '= AA' = 0
Z = A(A '+ B')+ B(B '+ A ')
Z = A(AB)' + B(AB) '->ヒント
(今)(AB)'は1番目のNANDゲートを通過でき、2番目と3番目のNANDゲートでは、1番目のNANDゲートの出力がAとBとしての入力。この後、もう1つの補数が必要なので、4番目のNANDゲートを使用します。
NAND(1st)=(AB) '= A' + B '
NAND(2nd)=(A(AB)') '=(A(A' + B '))' =(AB ')' = A '+ B
NAND(3rd)=(B(AB) ')' =(B(A '+ B')) '=(A'B)' = A + B '
NAND(4th)= [(A' + B) (A + B ')]' = [A'B '+ AB]' =(A + B)(A '+ B')= AB '+ A'B

ハッピー!


0

式:XOR =(bではなくa)または(aおよびbではない)。

それはあなたが望むものではなく、NANDである式が必要です。not(a or b)= not a and not not b、したがって(aまたはb)= not(not a and not b)であることを忘れないでください。だから

(aとbではない)または(aとbではない)=

not(not(a and not b)and not(not a and b))=

not((not a or b)and(a or not b))=

NAND(aまたはbではなく、aまたはnot b)。

したがって、1つのNANDゲートを使用し、3つのNANDを使用して(aまたはbではない)および(aまたはbではない)を計算する必要があります。各式をNANDに変換します。

not aまたはb = not(a and not b)= NAND(a、not b)

a or not b = not(not a and b)= NAND(not a、b)

ここで、(xおよびy)= xおよび(xまたはyではない)を観察します。xがfalseの場合、両側がfalseです。xがtrueの場合、(xまたはyではなく)=(falseまたはy)= yです。これは、ANDにも当てはまるように、NANDにも当てはまります。だから

NAND(a、not b)= NAND(a、not a or not b)= NAND(a、NAND(a、b))

NAND(b、not a)= NAND(b、not bまたはnot a)= NAND(b、NAND(a、b))。

したがって、最初にmid = NAND(a、b)、left = NAND(a、mid)、right = NAND(b、mid)、最後にXOR = NAND(左、右)を見つけます。


-2

*左から右へ-D1、D2、D3、D4 ** D1 =(AB) 'OR(A' + B ')

仮定する

(AB) '= C

D2 =(AC) '= A' + C '

D3 =(BC) '= B' + C 'then

D4 =(D2.D3) '

D4 =((AC) '。(BC)') '

D4 =(AC) '' +(BC) ''

D4 =(AC)+(BC)

D4 = A。(A '+ B')+ B.(A '+ B')

D4 = AB '+ BA' {A.A '= B.B' = 0} **


2
この答えに従うことも、あなたがどのプロセスを使用しているかを理解することも難しいと思います。アプローチを説明するテキスト文を追加できますか?これは単なる方程式のシーケンスではありませんか?
DW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.