Come costruire un gate XOR usando solo 4 gate NAND?


17

xorgate, ora devo costruire questo gate usando solo 4 nandgate

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

il xor = (a and not b) or (not a and b), che è

A¯B+AB¯

Conosco la risposta ma come ottenere lo schema del gate dalla formula?

xor gate

MODIFICARE

Intendo intuitivamente, per me, dovrei ottenere questo se lo faccio passo dopo passo seguito dalla definizione xor = (a and not b) or (not a and b).

A¯B¯AB¯¯¯

e xorsarà costruito con 5 nandporte (prima immagine n. 1 in basso)

xor gate 2

la mia domanda è più simile: immagina la prima persona nella storia a capire questa formula, come può lui (lei il processo di pensiero) ottenere la 4 nandsoltuion da questa formula, passo dopo passo.

A¯B+AB¯

Sono sicuro che sai come prendere un XOR (o qualsiasi altra funzione) e convertirlo in un circuito equivalente che utilizza solo NAND (che è sempre possibile, poiché NAND è completa ). Tuttavia, se chiedi come ridurre questa formula per usare solo 4 NAND, o in generale, meno di NAND, e se è persino possibile ottenere un circuito equivalente con k NAND - Non sono sicuro che ci sia un facile rispondere per quello. kk
Ran G.

Di seguito sono riportate due risposte al problema. Il mio è abbastanza sincero sul fatto che puoi progettare (a posteriori) un modo per trovare la costruzione desiderata conoscendo in anticipo il risultato finale, che è stato dato nella domanda ed è disponibile su Internet. È chiaramente il modo più semplice di fare le cose, per quanto assurdo possa sembrare, a parte dare una procedura generale, che nessuna risposta sta facendo. Quindi, sono interessato a sapere perché gli elettori preferiscono una risposta all'altra, quando lo fanno ... se ti prendi il tempo per un breve commento. Grazie in anticipo.
babou,

Questa domanda è chiusa perché poco chiara. Penso che potrebbe essere abbastanza chiaro ciò che l'OP sta chiedendo, e più interessante, se l'OP si è preoccupato di reagire ai vari utenti che provano a rispondergli,
babou

electronics.stackexchange.com/questions/84714/… - questa domanda è più generale, le risposte forniscono ulteriori informazioni su un approccio generale per risolvere questo problema e questa risposta electronics.stackexchange.com/a/84803 mostra come derivare la NAND rappresentazione per l'operatore XOR
Anton Trunov,

Ho giocato con alcuni problemi simili e ho appena scritto un programma che ha provato tutto sistematicamente ... Va bene per un massimo di quattro ingressi, dove ci sono solo 65.536 funzioni possibili. Per i circuiti leggermente più complicati ciò mi ha anche permesso di ottimizzare i ritardi e di trovare circuiti ottimali se uno o due ingressi fossero disponibili più tardi degli altri. I circuiti con 5 ingressi = 2 ^ 32 possibili funzioni sarebbero probabilmente fattibili usando la forza bruta.
gnasher729,

Risposte:


13

Da quella formula? Si può fare. Ma è più facile iniziare con questo: (usando una notazione diversa qui)

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

Ok, adesso cosa? Alla fine dovremmo derivare ~(~(~(a & b) & a) & ~(~(a & b) & b))(che sembra avere 5 NAND, ma proprio come lo schema circuitale ha una sottoespressione che viene usata due volte).

Quindi crea qualcosa che assomigli ~(a & b) & a(e la stessa cosa ma con un balla fine) e spera che rimanga: ( anddistribuisce sopra or)

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

Abbastanza vicino ora, basta applicare DeMorgan per trasformare quel mezzo orin un and:

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

E questo è tutto.


9

Penso che tu stia chiedendo questa prova:

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)))

Sebbene apparentemente ci siano 5 NANDs usati nell'equazione risultante, ma il duplicato !(AB)verrà usato solo una volta quando si progetta il suo circuito.


Mi dispiace, ma A ^ B non significa A AND B? Sembra che la tua intenzione fosse quella di provare a XOR quale simbolo dovrebbe essere ⊕ o ⊻. Comunque questa prova è stata quella che ho davvero cercato, grazie!
osiixy,

5

Dato che hai già la risposta del diagramma, facilmente disponibile da Wikipedia digitando il titolo della domanda in Google, come un diagramma .png identico al tuo, dovrebbe essere facile per te trovare la formula estraendola da quel diagramma. Data la definizione NAND come NAND(A,B)=AB¯:

  • La porta più a sinistra dà ;C=AB¯

  • La porta superiore dà ;D1=AC¯

  • La porta superiore dà , poiché la NAND è commutata come AND;D2=BC¯

  • La porta più a destra indica .E=D1D2¯

Mettendo tutto insieme lo notiamo per primo

C=AB¯=A¯+B¯

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

Allo stesso modo: D2¯=BA¯

Quindi
E=D1D2¯=D1¯+D2¯=AB¯+BA¯

Qual è precisamente la definizione di XOR. Puoi semplicemente annullare tutto questo se vuoi iniziare dai tuoi dati iniziali, piuttosto che controllare la risposta.

Trovare la risposta senza alcuna conoscenza preliminare

Questo ha lo scopo di rispondere alla richiesta esplicita, aggiunta come modifica alla domanda, per un modo di trovare la soluzione da zero. Dato che la domanda riguarda un processo di pensiero, sto fornendo tutti i dettagli.

UNB

XOR(A,B)=AB¯+BA¯.

Quindi possiamo provare a indovinare quale tipo di input per questo gate produrrebbe l'output desiderato.

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

Unendo quest'ultima formula con il risultato che dobbiamo ottenere, otteniamo:

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

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

Nota che questa è solo la possibilità più semplice. Ci sono altre coppie di input che darebbero il risultato desiderato, perché non ci stiamo unificando in un'algebra libera, poiché la NAND ha proprietà equazionali. Ma ci proviamo per cominciare.

XYAB

Potremmo provare a ripetere la procedura di unificazione (l'ho fatto), ma questo naturalmente ci condurrà all'utilizzo di altre quattro porte, quindi a una soluzione a 5 porte.

XYZAB

XYZABAB

UNB

Z=NAND(UN,B)=UNB¯=UN¯+B¯

Ora, dobbiamo verificare se la combinazione Z con se stesso, UN, B, 0 o 1 attraverso un gate NAND possono produrre X, e anche Y.

We know that combining a value with itself, 0 or 1 through a NAND gate is either the identity function or the negation. So the only remaining candidates are A and B.

It is easy to check that

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

Similarly NAND(Z,B)=Y

Hence we can compose these four gates to get the desired result, i.e., the XOR function.


Not in a reverse way to prove that they are equal. But image that you don't know the diagram but to construct the gate using minimum nand gate.
Timeless

1
What do you expect as an answer? A systematic technique for doing that. I do not know that there is any that is tractable enough to be worth using in complex cases. Given that I know the answer I can just lie to you and pretend to have found by reasonning what I discovered by checking the answer. This said, looking at what I get with NAND(A,B) is all that seems useful for a start. Then NANDing the result with one argument A or B, is also one thing to look at, to get a view of where I am. From there, one is pretty close to the final answer.
babou

1
@Timeless Another way to go about it is backward from the answer, knowing that the answer is fron a NAND gate. If you assume that the solution is symmetrical in A and B, it gives you a likely form of the inputs to the last NAND gate. There are many way to go about it, either to find the answer, or to justify finding it a posteriory. But a proof is a proof, whether found by your ingenuity, or given by some oracle or a good friend. And at some point no one can tell the difference. Actually, the backward proof I give could be the best proof, even if the solution was found some other way.
babou

Actually, it is quite common in math to have an analysis part to find a solution, then a synthesis part where you prove it is the solution. One usually gives both, but only the second part is really necessary.
babou

@Timeless Both answers were based on the knowledge of a formula to obtain, deduced from the diagram to be obtained. Your edit asked for a plausible intuitive scenario to find the answer without any prior knowledge of the result. I did add that to my answer, but it would be nice to know whether it fits what you expected.
babou

0

I take the input (0,0) as an example.

For XOR, the desired output is 0. However, NAND(0,0)=1.

  • Because the only way to get a 0 using NAND is (at the last layer) NAND(1,1)=0, you should first produce two 1's.

    • According to NAND(0,1)=1 or NAND(1,0)=1, you produce a 1 using one NAND(0,0) at the first layer and feed it, along with one input 0, into a second layer NAND.

Only four NANDs are involved. But it is only correct for the input (0,0) so far. So you need to check other inputs (0,1),(1,0), and (1,1) against the solution and find that it just works. Lucky.


0

I tried my best to give the answer using formula as asked.Hope you appreciate it.
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)' --> Hint
so now (AB)' can get through 1st NAND gate,then in 2nd and third NAND gate the output of 1st NAND gate pass through with one of the input as A and B.After this we need one more complement so use fourth NAND gate.
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

Happy!


0

La formula: XOR = (a e non b) o (non a e b).

Non è quello che vuoi, vuoi una formula che sia una NAND. Ricorda che not (a o b) = non a e non b, e quindi (a o b) = not (non a e non b). Perciò

(a e non b) o (non a e b) =

not (non (a e non b) e non (non a e b)) =

not ((non a o b) e (a o non b)) =

NAND (non a o b, a o non b).

Quindi abbiamo usato un gate NAND e dobbiamo calcolare (non a o b) e (a o non b) usando tre NAND. Trasformiamo ogni espressione in una NAND:

not a o b = not (a e non b) = NAND (a, non b)

a o no b = not (non aeb) = NAND (non a, b)

Ora osserviamo che (xey) = x e (non x o y): se x è falso, allora entrambi i lati sono falsi. Se x è vero, allora (non x o y) = (false o y) = y. Questo è vero per NAND come è vero per AND. Perciò

NAND (a, non b) = NAND (a, non a o non b) = NAND (a, NAND (a, b))

NAND (b, non a) = NAND (b, non b o non a) = NAND (b, NAND (a, b)).

Quindi troviamo prima mid = NAND (a, b), left = NAND (a, mid) e right = NAND (b, mid), infine XOR = NAND (left, right).


-2

* Da sinistra a destra - D1, D2, D3, D4 ** D1 = (AB) 'OR (A' + B ')

supporre

(AB) '= C

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

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

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
Trovo difficile seguire questa risposta o capire quale processo stai utilizzando. Puoi aggiungere alcune frasi di testo per spiegare l'approccio, quindi questa non è solo una sequenza di equazioni?
DW
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.