Existe-t-il un algorithme pour déterminer le nombre minimum de portes NAND ou NOR avec
- nombre donné d'entrées
- 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)']
Réponses:
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:
Elle a également comparé les résultats exacts (pour les NAND) avec ceux produits par l'optimiseur heuristique d' ABC .
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.
la source
resyn2
script. Ce n'est donc pas mieux que Logic Friday (qui utilise misII).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.
la source
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.
la source
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.
la source