Определение минимального количества вентилей NAND / NOR, необходимых для реализации логического выражения


9

Есть ли алгоритм для определения минимального количества вентилей NAND или NOR с

  1. заданное количество входов
  2. наличие / недоступность дополненного ввода

требуется для реализации логического выражения? Мы можем получить форму И-ИЛИ в качестве простых импликантов с помощью минимальных отображений Карно (насколько я знаю, алгоритм Куайна-МакКласки получает их детерминистически). Существует ли подобный метод для реализаций 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)']

Это для двухэтапной или многоэтапной реализации?
Fizz

@RespawnedFluff Целью многоуровневой реализации является минимизация количества шлюзов, поэтому минимальная реализация NAND / NOR также должна быть многоуровневой.
Самик,

K-карта не дает минимального результата для многоуровневой оптимизации.
Fizz

Ответы:


10

Вы можете найти минимальное количество вентилей в многоуровневой сети только путем решения задачи целочисленного программирования [или ее эквивалентов, см. Ниже]. Эта проблема является NP-полной, так что практично решить только до дюжины ворот или около того.

Существуют методы аппроксимации, которые не дадут вам минимальное количество, но более удобны в плане требуемого времени ... Это большая тема сама по себе, в основном вся область многоуровневой оптимизации. Вы можете прочитать [бесплатный] обзор здесь .

Для небольших сетей NAND (до 4 переменных) проблема была полностью решена исчерпывающим перечислением [или эквивалентными методами]. Есть довольно недавняя [2009] кандидатская диссертация Элизабет Энн Эрнст, которая суммирует древние результаты и расширяет их. Эрнст использует ветвление и ограничение, что улучшает исчерпывающий метод на практике, но не асимптотически. Она также отмечает, что другие методы неявного перечисления, такие как целочисленное программирование или CSP (удовлетворение ограничений, решаемое с помощью SAT), работают хуже на практике.

Она, очевидно, написала какое-то программное обеспечение для своего метода (называемое BESS), но я не уверен, доступно ли оно где-нибудь публично. Полный текст ее диссертации находится в свободном доступе на umich . И действительно, вы нашли минимальное выражение для 2-х входного xor (очевидно, ваше второе), выделенное ниже:

введите описание изображения здесь

Она также сравнила точные результаты (для NAND) с результатами, полученными эвристическим оптимизатором от ABC .

ABC удалось создать оптимальную сеть для 340 из 4043 функций, где оптимальная сеть известна. Для тех функций, где ABC не производила оптимальную сеть, она была в среднем на 36% больше, чем оптимальная сеть [.]

Существуют (очевидно) некоторые [более крупные] сети, для которых BESS не закончил, но позволил найти верхнюю границу (в точке, где поиск был прекращен). Для них ABC довольно хорошо [хорошо с точки зрения найденных границ], как вы можете видеть из 2-го графика ниже.

введите описание изображения здесь


Если вам любопытно, я пробовал ABC по проблеме XOR ... и он дает 5 ворот и, по крайней мере, с помощью resyn2сценария. Так что это не лучше, чем Logic Friday (который использует misII).
Fizz

Существуют сценарии и базы данных для ABC, которые в основном ищут большое количество функций для предварительно вычисленных оптимальных реализаций, например, arxiv.org/pdf/1108.3675.pdf. Я не пробовал этого, но даже если это работает, тяжелая работа была сделано в другом месте.
Fizz

Я просматриваю предоставленные вами материалы, и они выглядят очень интересно, хотя я изо всех сил пытаюсь их понять. Как только я правильно пойму их, я, вероятно, награду награду. В то же время, есть upvote.
Самик

1

Возможно, есть лучшие методы, но в темные времена я обнаружил, что Karnaugh Maps работает очень хорошо


Не могли бы вы пролить свет на эти "темные века" о том, как перейти к минимальной реализации NAND / NOR из реализации AND-OR, полученной из карт Карно?
Самик

1

NAND, сопровождаемый NAND, эквивалентен AND, за которым следует OR.

NOR, за которым следует NOR, эквивалентно ИЛИ, за которым следует AND.

NAND, за которым следует NOR, будет эквивалентен AND, за которым следует AND, что не имеет особого смысла. NOR, за которым следует NAND, аналогичным образом будет эквивалентен OR, за которым следует OR.

Я не верю, что в общем случае существует какой-либо реальный способ найти минимальное решение для задачи с большим количеством входов (очевидно, для небольших входных отсчетов вы можете использовать грубую силу). Куайн-МакКласки рассматривает только двухуровневые решения (минимальное двухуровневое решение часто не является общим минимальным решением) и может стать невозможным в вычислительном отношении со сложными таблицами истинности и большим количеством входных данных.


Так что нет лучшего способа, чем смещение пузырьков?
Самик

1

Лучший алгоритм - алгоритм эспрессо . В некоторой степени это реализовано в синтезе ПЛИС

Логическая пятница - это часть программного обеспечения, которую вы можете использовать. ПРИМЕЧАНИЕ: это уменьшает XOR до 5 ворот NAND.


Но Espresso также дает реализацию AND-OR, не так ли?
Самик

1
Эспрессо является «лучшим» только в том смысле, что оно возможно для больших входов (формул) [в отличие от k-карт], но оно не дает наилучшую / минимальную формулу во всех случаях.
Fizz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.