Як побудувати ворота XOR, використовуючи лише 4 NAND ворота?


17

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 gate

EDIT

Я маю на увазі інтуїтивно, для мене я повинен отримати цю, якщо я це роблю поетапно, а за цим визначенням xor = (a and not b) or (not a and b).

A¯B¯AB¯¯¯

і xorбуде побудовано з 5 nandворіт (перший №1 зображення нижче)

xor gate 2

моє запитання більше схоже: уявіть, що перша людина в історії nandз'ясує цю формулу, як він / вона (процес мислення) можуть отримати 4 рішення з цієї формули, крок за кроком.

A¯B+AB¯

Я впевнений, що ви знаєте, як прийняти XOR (або будь-яку іншу функцію) та перетворити її в еквівалентну схему, яка використовує лише NAND (що завжди можливо, оскільки NAND є повним ). Однак , якщо ви запитаєте , як зменшити цю формулу , використовуючи тільки 4 NANDs, або в загальному, менше , ніж NANDs, і чи є це навіть можливо отримати еквівалентну схему з K NANDs - Я не впевнений , що є простий відповідь за це. kk
Ран Г.

Нижче наведено дві відповіді на проблему. Шахта досить відверта щодо того, що ви можете спроектувати (a posteriori) спосіб знайти бажану конструкцію, знаючи заздалегідь знаючи кінцевий результат, який був заданий у запитанні та доступний в Інтернеті. Очевидно, що простіший спосіб робити щось, абсурдне, як може здатися, не передбачає загальної процедури, на яку жодна відповідь не робить. Отже, мені цікаво дізнатися, чому виборці віддають перевагу одній відповіді над іншою, коли це роблять ... якщо ви знайдете час для короткого коментаря. Заздалегідь спасибі.
бабу

Це питання готове до закриття як неясного. Я думаю, що може бути досить зрозуміло, що просить ОП, і ще більше цікаво, якби ОП намагалася реагувати на різних користувачів, які намагаються відповісти на нього,
babou

electronics.stackexchange.com/questions/84714/… - це питання більш загальний, відповіді дають більше інформації про загальний підхід до вирішення цієї проблеми, і ця відповідь electronics.stackexchange.com/a/84803 показує, як отримати NAND представництво для оператора XOR
Антон Трунов

Я розігрувався з деякими подібними проблемами і просто написав програму, яка пробувала все систематично ... Штраф до чотирьох входів, де є лише 65 536 можливих функцій. Для дещо складніших схем це також дозволило мені оптимізувати затримки і знайти оптимальні схеми, якщо один або два входи були доступні пізніше інших. Схеми з 5 входами = 2 ^ 32 можливих функцій, ймовірно, можна виконати, використовуючи грубу силу.
gnasher729

Відповіді:


13

З тієї формули? Це можна зробити. Але легше почати з цього: (тут використовується інша позначення)

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

Гаразд, що тепер? Врешті-решт, нам слід вивести ~(~(~(a & b) & a) & ~(~(a & b) & b))(схоже, що у нього 5 НАНД, але так само, як у схеми, він має підвираз, який використовується двічі).

Тож зробіть щось схоже ~(a & b) & a(і те саме, але в bкінці) і сподівайтеся, що воно буде триматися навколо: ( andпоширює or)

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

Зараз досить близько, просто застосуйте DeMorgan, щоб перетворити цю середину orна and:

~(~(~(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 s, але дублікат !(AB)буде використаний лише один раз, коли ви проектуєте його контур.


Мені шкода, але хіба A ^ B означає A І B? Здається, ваш намір полягав у тому, щоб довести XOR, яким символом має бути ⊕ чи ⊻. Однак я справді шукав цей доказ, дякую!
osiixy

5

NAND(A,B)=AB¯:

  • C=AB¯

  • D1=AC¯

  • 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. Ви можете просто змінити все це, якщо хочете почати з початкових даних, а не просто перевірити відповідь.

Пошук відповіді без попередніх знань

Це призначено для відповіді на явний запит, доданий як редагування до питання, для способу пошуку рішення з нуля. З огляду на те, що питання стосується продуманого процесу, я наводжу всі деталі.

AB

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

Тож ми можемо спробувати здогадатися, який саме вхід до цього ворота дасть бажаний вихід.

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

Поєднавши цю останню формулу з результатом, який ми маємо отримати, ми отримуємо:

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

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

Зауважте, що це лише найпростіша можливість. Є й інші пари входів, які дали б бажаний результат, оскільки ми не об'єднуємось у вільну алгебру, оскільки NAND має рівнянні властивості. Але ми спробуємо це для початку.

XYAB

Ми могли б спробувати повторити процедуру об'єднання (я це зробив), але це, природно, призведе нас до використання ще чотирьох воріт, отже, до рішення 5 воріт.

XYZAB

XYZABAB

AB

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

ZABXY

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

Отже, ми можемо скласти ці чотири ворота, щоб отримати бажаний результат, тобто функцію XOR.


Не зворотним способом доводити, що вони рівні. Але зображення, на якому ви не знаєте діаграми, але побудувати ворота, використовуючи мінімальний нан-двер.
позачасовий

1
Що ви очікуєте як відповідь? Систематичний прийом для цього. Я не знаю, що є щось, що є достатньо простежуваним, щоб його варто було використовувати в складних випадках. З огляду на те, що я знаю відповідь, я можу вам просто збрехати і зробити вигляд, що знайшов, обґрунтувавши те, що я виявив, перевіривши відповідь. Це сказав, дивлячись на те, що я отримую з NAND (A, B) - це все, що здається корисним для початку. Тоді НАДАННЯ результату одним аргументом А або В - це теж одне, що потрібно подивитися, щоб отримати уявлення про те, де я. Звідти одна досить близька до остаточної відповіді.
бабу

1
@Timeless Ще один спосіб подолати це назад від відповіді, знаючи, що відповідь знаходиться через ворота NAND. Якщо ви припускаєте, що рішення симетричне в A і B, воно дає вам ймовірну форму входів до останнього воріт NAND. Існує багато способів піти з цим, або знайти відповідь, або обґрунтувати пошук її після них. Але доказ - це доказ, знайдений вашою винахідливістю, чи подарований якимсь оракулом чи добрим другом. І в якийсь момент ніхто не може сказати різниці. Насправді, зворотний доказ, який я даю, може бути найкращим доказом, навіть якщо рішення було знайдено іншим способом.
бабу

Насправді в математиці досить часто зустрічається частина аналізу, щоб знайти рішення, то частина синтезу, де ви докажете, що це рішення. Одне зазвичай дає обидва, але насправді необхідна лише друга частина.
бабу

@Timeless Обидві відповіді ґрунтувалися на знанні формули, яку слід отримати, виведеної із отриманої діаграми. Ваша редакція попросила правдоподібний інтуїтивний сценарій, щоб знайти відповідь без попереднього знання результату. Я це додав до своєї відповіді, але було б непогано знати, чи відповідає вона тому, що ви очікували.
бабу

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-й та третій NAND-ворота вихід 1-го NAND-шлюзу пройде через один з вхід як A і B. Після цього нам потрібно ще одне доповнення, тому використовуйте четвертий NAND-шлюз.
NAND (1-й) = (AB) '= A' + B '
NAND (2-й) = (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

Щасливі!


0

Формула: XOR = (a і не b) або (не a і b).

Це не те, що ви хочете, ви хочете формулу, яка є NAND. Пам’ятайте, що не (a або b) = не a і не b, і тому (a або b) = не (не a і не b). Тому

(а і не b) або (не a і b) =

не (не (а і не b) і не (не a і b)) =

не ((не a чи b) і (a чи не b)) =

NAND (не a чи b, a чи b).

Таким чином, ми використовували один NAND-шлюз і повинні обчислити (не a чи b) і (a чи b), використовуючи три NAND. Перетворюємо кожен вираз у NAND:

не a або b = not (a і не b) = NAND (a, не b)

а чи ні b = не (не a і b) = NAND (не a, b)

Тепер ми спостерігаємо, що (x і y) = x і (не x або y): Якщо x хибно, то обидві сторони помилкові. Якщо x істинне, то (не x або y) = (false або y) = y. Це справедливо для NAND так само, як це стосується AND. Тому

NAND (a, не b) = NAND (a, не a або not b) = NAND (a, NAND (a, b))

NAND (b, не a) = NAND (b, не b або не a) = NAND (b, NAND (a, b)).

Отже, ми спочатку знаходимо середину = NAND (a, b), зліва = NAND (a, середина) і справа = NAND (b, середина), нарешті XOR = NAND (зліва, справа).


-2

* Зліва направо - D1, D2, D3, D4 ** D1 = (AB) 'АБО (A' + B ')

припустимо

(AB) '= C

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

D3 = (BC) '= B' + C ', то

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.