Преобразование выражения только с использованием логических элементов 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 было создано с использованием онлайн-инструмента для латекса)

Другие вопросы по тегам