Détermination du nombre minimum de portes NAND / NOR nécessaires pour réaliser une expression booléenne


9

Existe-t-il un algorithme pour déterminer le nombre minimum de portes NAND ou NOR avec

  1. nombre donné d'entrées
  2. disponibilité / indisponibilité des entrées complétées

requis pour réaliser une expression booléenne? Nous pouvons obtenir une forme ET-OU en tant qu'implicants principaux via les cartes de Karnaugh qui est minime (pour autant que je sache, le Quine-McCluskey algorithme obtient de manière déterministe). Existe-t-il également une technique similaire pour les implémentations NAND ou NOR? Au moins, une telle technique devrait déterminer le nombre minimum requis de portes NAND / NOR même sans trouver le diagramme réel?

L'application de la loi de De Morgan sur les principaux implicants ne semble pas déterministe,

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)']

Est-ce pour une implémentation en deux étapes ou en plusieurs étapes?
Fizz

@RespawnedFluff Le but de l'implémentation à plusieurs niveaux est de minimiser le nombre de portes, donc l'implémentation NAND / NOR minimale devrait également être à plusieurs niveaux.
Samik

K-map ne vous donne pas un résultat minimal pour une optimisation à plusieurs niveaux.
Fizz

Réponses:


10

Vous ne pouvez trouver le nombre minimum de portes dans un réseau à plusieurs niveaux qu'en résolvant un problème de programmation entier [ou des équivalents, voir ci-dessous]. Ce problème est NP-complet, donc seulement pratique pour résoudre jusqu'à une douzaine de portes.

Il existe des méthodes d'approximation qui ne vous donneront pas le nombre minimum mais sont plus maniables en termes de temps requis ... Il s'agit d'un vaste sujet en soi, essentiellement tout le domaine de l'optimisation à plusieurs niveaux. Vous pouvez lire un aperçu [gratuit] ici .

Pour les petits réseaux de NAND (jusqu'à 4 variables), le problème a été complètement résolu par une énumération exhaustive [ou des méthodes équivalentes]. Il existe une thèse de doctorat assez récente [2009] d'Elizabeth Ann Ernst qui résume les résultats anciens et les prolonge. Ernst utilise branch-and-bound, ce qui améliore la méthode exhaustive dans la pratique, mais pas asymptotiquement. Elle note également que d'autres méthodes d'énumération implicites comme la programmation entière ou CSP (satisfaction de contrainte, résolue via SAT) fonctionnent moins bien dans la pratique.

Elle a évidemment écrit un logiciel pour sa méthode (appelé BESS), mais je ne sais pas s'il est accessible au public quelque part. Le texte intégral de sa thèse est disponible gratuitement sur umich . Et en effet, vous avez trouvé l'expression minimale pour xor à 2 entrées (votre 2e évidemment), celle mise en évidence ci-dessous:

entrez la description de l'image ici

Elle a également comparé les résultats exacts (pour les NAND) avec ceux produits par l'optimiseur heuristique d' ABC .

ABC a pu produire un réseau optimal pour 340 des 4 043 fonctions où le réseau optimal est connu. Pour les fonctions où ABC n'a pas produit un réseau optimal, il était en moyenne 36% plus grand que le réseau optimal [.]

Il y a (évidemment) des réseaux [plus grands] pour lesquels BESS n'a pas terminé, mais a permis de trouver une limite supérieure (au point où la recherche a été abandonnée). Pour ceux-là, ABC s'est plutôt bien débrouillé [bien en ce qui concerne les limites trouvées], comme vous pouvez le voir sur le 2ème graphique ci-dessous.

entrez la description de l'image ici


Si vous êtes curieux, j'ai essayé ABC sur le problème xor ... et cela donne 5 portes nand, au moins avec le resyn2script. Ce n'est donc pas mieux que Logic Friday (qui utilise misII).
Fizz

Il existe des scripts et des bases de données pour ABC qui recherchent essentiellement une grande quantité de fonctions pour des implémentations optimales précalculées, par exemple arxiv.org/pdf/1108.3675.pdf Je n'ai pas essayé celle-là, mais même si cela fonctionne, le travail dur a été fait ailleurs.
Fizz

Je passe en revue les documents que vous avez fournis et ils ont l'air très intéressants, j'ai du mal à les comprendre. Une fois que je les comprendrai bien, j'attribuerai probablement la prime. En attendant, ayez un vote positif.
Samik

1

Il y a probablement de meilleures techniques là-bas, mais il y a bien longtemps, dans les âges sombres, Karnaugh Maps fonctionnait très bien.


Pourriez-vous faire la lumière sur ces «âges sombres» sur la façon de procéder à une implémentation NAND / NOR minimale à partir de l'implémentation AND-OR obtenue à partir des cartes de Karnaugh?
Samik

1

NAND suivi de NAND équivaut à AND suivi de OR.

NOR suivi de NOR équivaut à OU suivi de ET.

NAND suivi de NOR équivaudrait à AND suivi de AND qui n'a pas vraiment de sens. NOR suivi de NAND serait également équivalent à OR suivi de OR.

Je ne crois pas qu'il existe dans le cas général un moyen possible de trouver une solution minimale pour un problème avec un grand nombre d'entrées (évidemment pour les petits nombres d'entrées, vous pouvez utiliser la force brute). Quine-McClusky ne regarde que les soloutions à deux niveaux (la soloution minimale à deux niveaux n'est souvent pas la soloution minimale globale) et peut devenir infaisable sur le plan des calculs avec des tables de vérité complexes et un grand nombre d'entrées.


Il n'y a donc pas de meilleur moyen que le déplacement des bulles?
Samik

1

Le meilleur algorithme est l' algorithme Espresso . Dans une certaine mesure, cela est mis en œuvre dans la synthèse FPGA

Logic vendredi est un logiciel que vous pouvez utiliser. REMARQUE: cela réduit un XOR à 5 portes NAND.


Mais Espresso donne également l'implémentation AND-OR, n'est-ce pas?
Samik

1
L'espresso n'est "meilleur" que dans le sens où il est possible pour de grandes entrées (formules) [contrairement aux k-maps], mais il ne donne pas la formule meilleure / minimale dans tous les cas.
Fizz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.