¿Cómo construir una puerta XOR usando solo 4 puertas NAND?

17

xorpuerta, ahora necesito construir esta puerta usando solo 4 nandpuertas

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

el xor = (a and not b) or (not a and b), que es

A¯B+AB¯

Sé la respuesta, pero ¿cómo obtener el diagrama de compuerta de la fórmula?

xor gate

EDITAR

Quiero decir, intuitivamente, para mí, debería obtener este si lo hago paso a paso seguido de la definición xor = (a and not b) or (not a and b).

A¯B¯AB¯¯¯

y xorse construirá con 5 nandpuertas (primera imagen n. ° 1 a continuación)

xor puerta 2

mi pregunta es más como: imagina que la primera persona en la historia descifra esta fórmula, ¿cómo puede él o ella (el proceso de pensar) obtener las 4 nandsoluciones de esta fórmula, paso a paso.

A¯B+AB¯
Eterno
fuente
Estoy seguro de que sabe cómo tomar un XOR (o cualquier otra función) y convertirlo en un circuito equivalente que solo use NAND (que siempre es posible, ya que NAND está completo ). Sin embargo, si pregunta cómo reducir esta fórmula para usar solo 4 NAND, o en general, menos de NAND, y si es posible obtener un circuito equivalente con k NAND, no estoy seguro de que haya una solución fácil. responde por eso. kk
Ran G.
A continuación hay dos respuestas al problema. El mío es bastante sincero sobre el hecho de que puede diseñar (a posteriori) una forma de encontrar la construcción deseada al conocer de antemano el resultado final, que se dio en la pregunta y está disponible en Internet. Es claramente la forma más simple de hacer las cosas, por absurdo que parezca, sin dar un procedimiento general, que no está respondiendo. Por lo tanto, estoy interesado en saber por qué los votantes prefieren una respuesta sobre la otra, cuando lo hacen ... si se toma el tiempo para un breve comentario. Gracias por adelantado.
babou
Esta pregunta está por cerrarse como poco clara. Creo que podría estar bastante claro lo que está pidiendo el OP, y más interesante, si el OP se molestó en reaccionar ante los diversos usuarios que intentan responderle,
babou
electronics.stackexchange.com/questions/84714/… - esta pregunta es más general, las respuestas dan más información sobre un enfoque general para resolver este problema, y ​​esta respuesta electronics.stackexchange.com/a/84803 muestra cómo derivar NAND representación para el operador XOR
Anton Trunov
Jugué con algunos problemas similares y acabo de escribir un programa que probó todo sistemáticamente ... Bien para hasta cuatro entradas, donde solo hay 65.536 funciones posibles. Para circuitos un poco más complicados, esto también me permitió optimizar los retrasos y encontrar circuitos óptimos si una o dos entradas estuvieran disponibles más tarde que otras. Los circuitos con 5 entradas = 2 ^ 32 funciones posibles probablemente serían factibles utilizando la fuerza bruta.
gnasher729

Respuestas:

13

¿De esa fórmula? Se puede hacer. Pero es más fácil comenzar con este: (usando una notación diferente aquí)

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

Ok, ahora que? Eventualmente deberíamos derivar ~(~(~(a & b) & a) & ~(~(a & b) & b))(que parece que tiene 5 NANDs, pero al igual que el diagrama de circuito tiene una subexpresión que se usa dos veces).

Así que haga algo que se vea ~(a & b) & a(y lo mismo pero con un bfinal) y espere que se quede: (se anddistribuye or)

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

Bastante cerca ahora, solo aplica DeMorgan para convertir ese medio oren un and:

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

Y eso es.

harold
fuente
9

Creo que estás pidiendo esta prueba:

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

Aunque aparentemente hay 5 NANDs usados ​​en la ecuación resultante, pero el duplicado !(AB)se usará solo una vez cuando esté diseñando su circuito.

Muntasir
fuente
Lo siento, pero ¿A ^ B no es A y B? Parece que su intención era probar a XOR qué símbolo debería ser ⊕ o ⊻. Sin embargo, esta prueba fue lo que realmente busqué, ¡gracias!
osiixy
5

Dado que ya tiene la respuesta del diagrama, fácilmente accesible desde wikipedia escribiendo el título de su pregunta en Google, como un diagrama .png idéntico al suyo, debería ser fácil para usted encontrar la fórmula extrayéndola de ese diagrama. Dada la definición NAND como NAND(A,B)=AB¯:

  • La puerta más a la izquierda da ;C=AB¯

  • La puerta superior da ;D1=AC¯

  • La puerta superior da , ya que la NAND se conmuta como la AND;D2=BC¯

  • La puerta de la derecha da .E=D1D2¯

Poniendo todo junto, primero notamos que

C=AB¯=A¯+B¯

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

Del mismo modo: D2¯=BA¯

Así
E=D1D2¯=D1¯+D2¯=AB¯+BA¯

Cuál es precisamente la definición de XOR. Puede revertir todo esto si desea comenzar desde sus datos iniciales, en lugar de simplemente verificar la respuesta.

Encontrar la respuesta sin conocimiento previo

Esto tiene como objetivo responder a la solicitud explícita, agregada como una edición de la pregunta, para encontrar una solución desde cero. Dado que la pregunta es sobre un proceso de pensamiento, estoy dando todos los detalles.

AB

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

Entonces podemos intentar adivinar qué tipo de entrada a esta puerta produciría la salida deseada.

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

Unificando esta última fórmula con el resultado que tenemos que obtener, obtenemos:

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

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

Tenga en cuenta que esta es solo la posibilidad más simple. Hay otros pares de entradas que darían el resultado deseado, porque no nos estamos unificando en un álgebra libre, ya que NAND tiene propiedades equitativas. Pero lo intentamos para empezar.

XYAB

Podríamos intentar repetir el procedimiento de unificación (lo hice), pero esto naturalmente nos llevará a usar cuatro puertas más, por lo tanto, a una solución de 5 puertas.

XYZAB

XYZABAB

AB

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

ZABXY

AB

Es fácil verificar que

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

NAND(Z,B)=Y

Por lo tanto, podemos componer estas cuatro puertas para obtener el resultado deseado, es decir, la función XOR.

babou
fuente
No de manera inversa para demostrar que son iguales. Pero imagina que no conoces el diagrama sino que construyes la puerta usando la puerta mínima de nand.
Atemporal
1
¿Qué esperas como respuesta? Una técnica sistemática para hacer eso. No sé si hay alguno que sea lo suficientemente manejable como para que valga la pena usarlo en casos complejos. Dado que sé la respuesta, puedo mentirte y pretender haber encontrado razonando lo que descubrí al verificar la respuesta. Dicho esto, mirar lo que obtengo con NAND (A, B) es todo lo que parece útil para empezar. Luego, NANDAR el resultado con un argumento A o B, también es una cosa a tener en cuenta, para ver dónde estoy. A partir de ahí, uno está bastante cerca de la respuesta final.
babou
1
@Timeless Otra forma de hacerlo es retroceder desde la respuesta, sabiendo que la respuesta es una puerta NAND. Si supone que la solución es simétrica en A y B, le da una forma probable de las entradas a la última puerta NAND. Hay muchas maneras de hacerlo, ya sea para encontrar la respuesta o para justificar que se encuentre más adelante. Pero una prueba es una prueba, ya sea encontrada por tu ingenio o dada por algún oráculo o un buen amigo. Y en algún momento nadie puede notar la diferencia. En realidad, la prueba de retroceso que doy podría ser la mejor prueba, incluso si la solución se encuentra de otra manera.
babou
En realidad, es bastante común en matemáticas tener una parte de análisis para encontrar una solución, y luego una parte de síntesis donde se demuestra que es la solución. Por lo general, uno da ambos, pero solo la segunda parte es realmente necesaria.
babou
@Timeless Ambas respuestas se basaron en el conocimiento de una fórmula para obtener, deducida del diagrama a obtener. Su edición solicitó un escenario intuitivo plausible para encontrar la respuesta sin ningún conocimiento previo del resultado. Agregué eso a mi respuesta, pero sería bueno saber si se ajusta a lo que esperabas.
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)

hengxina
fuente
0

Hice mi mejor esfuerzo para dar la respuesta usando la fórmula que me pidieron. Espero que lo aprecies.
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) '-> Sugerencia
para que ahora (AB)' pueda atravesar la primera puerta NAND, luego en la segunda y tercera puerta NAND la salida de la primera puerta NAND pasa con la entrada como A y B. Después de esto, necesitamos un complemento más, así que use la cuarta puerta 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

¡Contento!

MANVENDRA SINGH MANOHAR
fuente
0

La fórmula: XOR = (a y no b) o (no a y b).

Eso no es lo que quieres, quieres una fórmula que sea una NAND. Recuerde que no (a o b) = no a y no b, y por lo tanto (a o b) = no (no a y no b). Por lo tanto

(a y no b) o (no a y b) =

no (no (a y no b) y no (no a y b)) =

not ((no aob) y (a o no b)) =

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

Entonces usamos una puerta NAND, y tenemos que calcular (no aob) y (ao no b) usando tres NANDs. Convertimos cada expresión en una NAND:

no aob = no (a y no b) = NAND (a, no b)

a o no b = no (no ayb) = NAND (no a, b)

Ahora observamos que (x e y) = x y (no x o y): Si x es falso, ambos lados son falsos. Si x es verdadero, entonces (no x o y) = (falso o y) = y. Esto es cierto para NAND tal como es cierto para AND. Por lo tanto

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

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

Entonces, primero encontramos mid = NAND (a, b), left = NAND (a, mid) y right = NAND (b, mid), finalmente XOR = NAND (left, right).

gnasher729
fuente
-2

* De izquierda a derecha - D1, D2, D3, D4 ** D1 = (AB) 'OR (A' + B ')

suponer

(AB) '= C

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

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

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} **

Bivash
fuente
2
Me resulta difícil seguir esta respuesta o entender qué proceso está utilizando. ¿Puedes agregar algunas oraciones de texto para explicar el enfoque, por lo que esto no es solo una secuencia de ecuaciones?
DW