Преобразование выражения только с использованием логических элементов NAND
Как мне преобразовать это выражение НЕ (а) ИЛИ НЕ (б) И НЕ (в), используя только вентили NAND?? Я пытался это сделать, но не нашел правильного ответа.
3 ответа
Во-первых, все логические уравнения могут быть представлены вентилями NAND. Рассмотрим НЕ.... Просто свяжите два входа NAND вместе, и вы получите НЕ! NOT NAND - это AND, а OR - это два НЕ ворот, управляющих NAND! Это все довольно круто... Проведите небольшое исследование по математической логике, и вы должны найти детали различных методов преобразования.
Вы можете применять следующие формулы шаг за шагом:
NOT(A) OR NOT(B) = A NAND B
A AND B = NOT(A NAND B)
NOT(A) = A NAND A
Я бы предложил использовать сетки Ротта. Это графическое приложение законов Де Моргана, и оно полезно для оптимизации дизайна, используя только комбинации ворот NOR и NAND. Обычно это можно сделать очень быстро, не беспокоясь об ошибке.
Сетка каждого Ротта создается в соответствии с этими тремя принципами:
- законы де Моргана соблюдаются путем переключения между ⋅ (конъюнкция) и + (дизъюнкция) и деления их на горизонтальные линии (отрицания),
- вертикальные линии отделяют отдельные входы, изменяя количество входов логических вентилей,
- в последней строке размещаются входные переменные либо в их простом, либо в отрицательном виде - это определяется индивидуально количеством горизонтальных линий над ними (начальная ¬ также считается).
Это заданное выражение в соответствующей сетке Ротта:
f = ¬a + ¬b ⋅ ¬c
--------------
⋅ +
| --------
| ⋅
| |
a | ¬b | ¬c
Как видите, исходное выражение было преобразовано в эквивалент, то есть с использованием только двух 2-входных вентилей NAND (и некоторых инверторов, которые также могут быть заменены вентилями NAND). Сетка - это просто графическое представление применения законов Де Моргана к исходному выражению:
f = (¬a + (¬b ⋅ ¬c))
= ¬(¬(¬a + (¬b ⋅ ¬c))) //double negation law: ¬(¬x) = x
= ¬(¬¬a ⋅ ¬(¬b ⋅ ¬c)) //De Morgan's law
= ¬(a ⋅ ¬(¬b ⋅ ¬c)) //double negation law: ¬¬a = a
f = nand(a, nand(not(b), not(c)))
(Изображение.gif было создано с использованием онлайн-инструмента для латекса)