Como construir uma porta XOR usando apenas 4 portas NAND?

16

xorportão, agora preciso construir este portão usando apenas quatro nandportão

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

o xor = (a and not b) or (not a and b), que é

A¯B+AB¯

Eu sei a resposta, mas como obter o diagrama da porta da fórmula?

xor gate

EDITAR

Quero dizer intuitivamente, para mim, eu deveria pegar esse aqui se eu fizer isso passo a passo seguido pela definição xor = (a and not b) or (not a and b).

A¯B¯AB¯¯¯

e xorserá construído com 5 nandportões (primeira imagem nº 1 abaixo)

xor gate 2

minha pergunta é mais ou menos assim: imagine a primeira pessoa na história a descobrir essa fórmula, como ele (ela) (o processo do pensamento) obtém a nandsolução 4 dessa fórmula, passo a passo.

A¯B+AB¯
Eterno
fonte
Tenho certeza que você sabe como pegar um XOR (ou qualquer outra função) e convertê-lo em um circuito equivalente que usa apenas NAND (o que é sempre possível, pois o NAND está completo ). No entanto, se você perguntar como reduzir essa fórmula usando apenas 4 NANDs, ou em geral, menos de NANDs, e se é possível obter um circuito equivalente com NANDs - não tenho certeza de que exista um resposta fácil para isso. kkk
Ran G.
Abaixo estão duas respostas para o problema. A minha é bastante sincera quanto ao fato de que você pode projetar (a posteriori) uma maneira de encontrar a construção desejada a partir do conhecimento prévio do resultado final, que foi dado na pergunta e está disponível na Internet. É claramente a maneira mais simples de fazer as coisas, por mais absurdo que possa parecer, sem dar um procedimento geral, que nenhuma resposta está fazendo. Por isso, estou interessado em saber por que os eleitores preferem uma resposta em relação à outra, quando o fazem ... se você reservar algum tempo para um breve comentário. Desde já, obrigado.
babou
Esta questão pode ser encerrada por não ser clara. Eu acho que poderia ser bastante claro o que o OP está pedindo, e mais i8nteresting, se o OP incomodado para reagir aos vários usuários que tentam responder-lhe,
babou
electronics.stackexchange.com/questions/84714/… - essa pergunta é mais geral, as respostas fornecem mais informações sobre uma abordagem geral para resolver esse problema e essa resposta electronics.stackexchange.com/a/84803 mostra como obter NAND representação para o operador XOR
Anton Trunov
Eu brinquei com alguns problemas semelhantes e acabei de escrever um programa que tentava tudo sistematicamente ... Ótimo para até quatro entradas, onde existem apenas 65.536 funções possíveis. Para circuitos um pouco mais complicados, isso também me permitiu otimizar atrasos e encontrar circuitos ideais se uma ou duas entradas estivessem disponíveis mais tarde que outras. Circuitos com 5 entradas = 2 ^ 32 funções possíveis provavelmente seriam possíveis usando força bruta.
precisa saber é o seguinte

Respostas:

12

A partir dessa fórmula? Pode ser feito. Mas é mais fácil começar com este: (usando uma notação diferente aqui)

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

Ok, e agora? Eventualmente, devemos derivar ~(~(~(a & b) & a) & ~(~(a & b) & b))(que parece ter 5 NANDs, mas assim como o diagrama de circuitos, ele tem uma subexpressão que é usada duas vezes).

Então, faça algo parecido ~(a & b) & a(e a mesma coisa, mas com um bno final) e espere que ele permaneça: ( anddistribui mais or)

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

Agora, basta aplicar o DeMorgan para transformar esse meio orem um and:

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

E é isso.

harold
fonte
9

Eu acho que você está pedindo esta 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)))

Embora aparentemente haja 5 NANDs usados ​​na equação resultante, o duplicado !(AB)será usado apenas uma vez quando você estiver projetando seu circuito.

Muntasir
fonte
Sinto muito, mas A ^ B não significa A e B? Parece que sua intenção era provar ao XOR qual símbolo deveria ser ⊕ ou ⊻. No entanto, essa prova foi o que eu realmente procurei, obrigado!
osiixy
5

Como você já tem a resposta do diagrama, disponível facilmente na wikipedia , digitando o título da sua pergunta no Google, como um diagrama .png idêntico ao seu, deve ser fácil encontrar a fórmula extraindo-a desse diagrama. Dada a definição NAND como NAND(A,B)=AB¯:

  • O portão mais à esquerda indica ;C=AB¯

  • A porta superior dá ;D1=AC¯

  • O portão superior fornece , pois o NAND é comutado como o AND;D2=BC¯

  • O portão mais à direita indica .E=D1D2¯

Juntando tudo, primeiro notamos que

C=AB¯=A¯+B¯

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

Da mesma forma: D2¯=BA¯

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

Qual é precisamente a definição de XOR. Você pode simplesmente reverter tudo isso se quiser começar com seus dados iniciais, em vez de apenas verificar a resposta.

Encontrar a resposta sem conhecimento prévio

Pretende-se responder à solicitação explícita, adicionada como uma edição da pergunta, para encontrar uma solução do zero. Dado que a pergunta é sobre um processo de pensamento, estou fornecendo todos os detalhes.

AB

XOR(UMA,B)=UMAB¯+BUMA¯.

Portanto, podemos tentar adivinhar que tipo de entrada para esse gate produziria a saída desejada.

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

Unificando esta última fórmula com o resultado que temos para obter, obtemos:

  • X¯=UMAB¯X=UMAB¯¯=UMA¯+B.

  • Y=UMA¯B¯=UMA+B¯.

Observe que essa é apenas a possibilidade mais simples. Existem outros pares de entradas que dariam o resultado desejado, porque não estamos unificando uma álgebra livre, pois o NAND tem propriedades equacionais. Mas tentamos isso para começar.

XYUMAB

Poderíamos tentar repetir o procedimento de unificação (eu fiz), mas isso naturalmente nos levará a usar mais quatro portões, daí uma solução para 5 portões.

XYZUMAB

XYZUMABUMAB

UMAB

Z=NAND(UMA,B)=UMAB¯=UMA¯+B¯

ZUMABXY

UMAB

É fácil verificar se

NAND(Z,UMA)=ZUMA¯=UMAB¯UMA¯=(UMA¯+B¯)UMA¯=UMA¯UMA+B¯UMA¯=0 0+B¯UMA¯=B¯UMA¯=UMAB¯¯=X

similarmente NAND(Z,B)=Y

Portanto, podemos compor esses quatro portões para obter o resultado desejado, ou seja, a função XOR.

babou
fonte
Não de maneira inversa para provar que são iguais. Mas imagine que você não conhece o diagrama, mas construa o portão usando o mínimo de portão nand.
Timeless
1
O que você espera como resposta? Uma técnica sistemática para fazer isso. Não sei se existe algo que seja tratável o suficiente para valer a pena usar em casos complexos. Dado que conheço a resposta, posso mentir para você e fingir que encontrei raciocinando o que descobri verificando a resposta. Dito isto, olhar para o que recebo com NAND (A, B) é tudo o que parece útil para começar. Então, NANDing o resultado com um argumento A ou B, também é uma coisa a se olhar, para obter uma visão de onde estou. A partir daí, um está bem próximo da resposta final.
babou
1
@ Timeless Outra maneira de fazer isso é retroceder da resposta, sabendo que a resposta é de um portão NAND. Se você assumir que a solução é simétrica em A e B, ela fornecerá uma forma provável das entradas para o último gate NAND. Há muitas maneiras de fazê-lo, seja para encontrar a resposta ou para justificá-la posteriormente. Mas uma prova é uma prova, seja encontrada por sua ingenuidade, seja dada por algum oráculo ou um bom amigo. E em algum momento ninguém pode dizer a diferença. Na verdade, a prova que eu dou para trás poderia ser a melhor prova, mesmo que a solução fosse encontrada de outra maneira.
babou
Na verdade, é bastante comum em matemática ter uma parte de análise para encontrar uma solução, depois uma parte de síntese em que você prova que é a solução. Geralmente, dá-se os dois, mas apenas a segunda parte é realmente necessária.
babou
@ Timeless Ambas as respostas foram baseadas no conhecimento de uma fórmula a ser obtida, deduzida do diagrama a ser obtido. Sua edição solicitou um cenário intuitivo plausível para encontrar a resposta sem nenhum conhecimento prévio do resultado. Acrescentei isso à minha resposta, mas seria bom saber se ele se encaixa no que você esperava.
babou
0

Eu pego a entrada (0 0,0 0) como um exemplo.

Para XOR, a saída desejada é 0. No entanto, NAND(0 0,0 0)=1.

  • Porque a única maneira de obter um 0 usando NAND é (na última camada) NAND(1,1)=0 0, você deve primeiro produzir dois 1s.

    • De acordo com NAND(0 0,1)=1 ou NAND(1,0 0)=1, você produz 1 usando um NAND(0 0,0 0) na primeira camada e alimente-a, juntamente com uma entrada 0, em uma segunda camada NAND.

Apenas quatro NANDs estão envolvidos. Mas é correto apenas para a entrada(0 0,0 0)tão longe. Então você precisa verificar outras entradas(0 0,1),(1,0 0), e (1,1)contra a solução e descubra que simplesmente funciona. Por sorte.

hengxin
fonte
0

Eu tentei o meu melhor para dar a resposta usando a fórmula conforme solicitado.
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) '-> Dica
agora (AB)' pode passar pela 1ª porta NAND, então, na 2ª e na terceira porta NAND, a saída da 1ª porta NAND passa com uma das seguintes a entrada como A e B. Depois disso, precisamos de mais um complemento; portanto, use o quarto gate NAND.
NAND (1st) = (AB) '= A' + B '
NAND (2nd) = (A (AB)') '= (A (A' + B '))' = (AB ')' = A '+ B
NAND (3º) = (B (AB) ')' = (B (A '+ B')) '= (A'B)' = A + B '
NAND (4º) = [(A' + B) (A + B ')]' = [A'B '+ AB]' = (A + B) (A '+ B') = AB '+ A'B

Feliz!

MANVENDRA SINGH MANOHAR
fonte
0

A fórmula: XOR = (a e não b) ou (não a e b).

Isso não é o que você quer, você quer uma fórmula que seja um NAND. Lembre-se de que não (a ou b) = não a e não b e, portanto, (a ou b) = não (não a e não b). Portanto

(a e não b) ou (não a e b) =

not (not (a e não b) e not (not aeb)) =

not ((não a ou b) e (a ou não b)) =

NAND (não a ou b, a ou não b).

Então, usamos um gate NAND e precisamos calcular (não a ou b) e (a ou não b) usando três NANDs. Transformamos cada expressão em um NAND:

not a ou b = not (a e não b) = NAND (a, não b)

a ou não b = não (não a e b) = NAND (não a, b)

Agora observamos que (x e y) = x e (não x ou y): Se x é falso, então ambos os lados são falsos. Se x é verdadeiro, então (não x ou y) = (falso ou y) = y. Isso vale para NAND, assim como para AND. Portanto

NAND (a, não b) = NAND (a, não a ou não b) = NAND (a, NAND (a, b))

NAND (b, não a) = NAND (b, não b ou não a) = NAND (b, NAND (a, b)).

Então, primeiro encontramos meio = NAND (a, b), esquerda = NAND (a, meio) e direita = NAND (b, meio), finalmente XOR = NAND (esquerda, direita).

gnasher729
fonte
-2

* Da esquerda para a direita - D1, D2, D3, D4 ** D1 = (AB) 'OR (A' + B ')

supor

(AB) '= C

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

D3 = (BC) '= B' + C 'então

D4 = (D2.D3) '

D4 = ((CA) '. (BC)') '

D4 = (CA) '' + (BC) ''

D4 = (CA) + (BC)

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

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

Bivash
fonte
2
Acho difícil seguir esta resposta ou entender qual processo você está usando. Você pode adicionar algumas frases de texto para explicar a abordagem, para que isso não seja apenas uma sequência de equações?
DW