Есть ли алгоритм для определения минимального количества вентилей NAND или NOR с
- заданное количество входов
- наличие / недоступность дополненного ввода
требуется для реализации логического выражения? Мы можем получить форму И-ИЛИ в качестве простых импликантов с помощью минимальных отображений Карно (насколько я знаю, алгоритм Куайна-МакКласки получает их детерминистически). Существует ли подобный метод для реализаций NAND или NOR? По крайней мере, такой метод должен определять требуемое минимальное количество вентилей NAND / NOR, даже не находя фактическую диаграмму?
Применение закона Де Моргана к основным импликантам не кажется детерминированным,
A ⊕ B = A'B + AB' = ((A'B)'(AB')')' [5 NAND gates]
A ⊕ B = (AB + A'B')' = ((ABAB+ABB') + (A'AB+A'B'))' = (AB(AB+B') + A'(AB+B'))' = ((AB+A')(AB+B'))' = (((AB)'A)'((AB)'B)')' [4 NAND gates by reusing (AB)']
Ответы:
Вы можете найти минимальное количество вентилей в многоуровневой сети только путем решения задачи целочисленного программирования [или ее эквивалентов, см. Ниже]. Эта проблема является NP-полной, так что практично решить только до дюжины ворот или около того.
Существуют методы аппроксимации, которые не дадут вам минимальное количество, но более удобны в плане требуемого времени ... Это большая тема сама по себе, в основном вся область многоуровневой оптимизации. Вы можете прочитать [бесплатный] обзор здесь .
Для небольших сетей NAND (до 4 переменных) проблема была полностью решена исчерпывающим перечислением [или эквивалентными методами]. Есть довольно недавняя [2009] кандидатская диссертация Элизабет Энн Эрнст, которая суммирует древние результаты и расширяет их. Эрнст использует ветвление и ограничение, что улучшает исчерпывающий метод на практике, но не асимптотически. Она также отмечает, что другие методы неявного перечисления, такие как целочисленное программирование или CSP (удовлетворение ограничений, решаемое с помощью SAT), работают хуже на практике.
Она, очевидно, написала какое-то программное обеспечение для своего метода (называемое BESS), но я не уверен, доступно ли оно где-нибудь публично. Полный текст ее диссертации находится в свободном доступе на umich . И действительно, вы нашли минимальное выражение для 2-х входного xor (очевидно, ваше второе), выделенное ниже:
Она также сравнила точные результаты (для NAND) с результатами, полученными эвристическим оптимизатором от ABC .
Существуют (очевидно) некоторые [более крупные] сети, для которых BESS не закончил, но позволил найти верхнюю границу (в точке, где поиск был прекращен). Для них ABC довольно хорошо [хорошо с точки зрения найденных границ], как вы можете видеть из 2-го графика ниже.
источник
resyn2
сценария. Так что это не лучше, чем Logic Friday (который использует misII).Возможно, есть лучшие методы, но в темные времена я обнаружил, что Karnaugh Maps работает очень хорошо
источник
NAND, сопровождаемый NAND, эквивалентен AND, за которым следует OR.
NOR, за которым следует NOR, эквивалентно ИЛИ, за которым следует AND.
NAND, за которым следует NOR, будет эквивалентен AND, за которым следует AND, что не имеет особого смысла. NOR, за которым следует NAND, аналогичным образом будет эквивалентен OR, за которым следует OR.
Я не верю, что в общем случае существует какой-либо реальный способ найти минимальное решение для задачи с большим количеством входов (очевидно, для небольших входных отсчетов вы можете использовать грубую силу). Куайн-МакКласки рассматривает только двухуровневые решения (минимальное двухуровневое решение часто не является общим минимальным решением) и может стать невозможным в вычислительном отношении со сложными таблицами истинности и большим количеством входных данных.
источник
Лучший алгоритм - алгоритм эспрессо . В некоторой степени это реализовано в синтезе ПЛИС
Логическая пятница - это часть программного обеспечения, которую вы можете использовать. ПРИМЕЧАНИЕ: это уменьшает XOR до 5 ворот NAND.
источник