Determinar el número mínimo de compuertas NAND / NOR requeridas para realizar una expresión booleana

7

¿Hay algún algoritmo para determinar el número mínimo de compuertas NAND o NOR con

  1. número dado de entradas
  2. disponibilidad / indisponibilidad de entrada complementada

requerido para realizar una expresión booleana? Podemos obtener un formulario AND-OR como implicantes principales mediante los mapas de Karnaugh que es mínimo (que yo sepa, el Quine-McCluskey los obtiene de manera determinista). ¿Existe una técnica similar para las implementaciones NAND o NOR, también? Al menos, ¿tal técnica debería determinar el número mínimo requerido de puertas NAND / NOR incluso sin encontrar el diagrama real?

La aplicación de la ley de De Morgan en los implicantes principales no parece determinista,

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

4 respuestas

9

Solo puede encontrar el número mínimo de puertas en una red de múltiples niveles resolviendo un entero problema de programación [o equivalentes, ver más abajo]. Este problema es NP-completo, por lo que solo es práctico para resolver hasta una docena de puertas o algo así.

Existen métodos de aproximación que no le darán el número mínimo, pero son más manejables en términos del tiempo requerido ... Estos son un gran tema en sí mismos, básicamente todo el campo de la optimización multinivel. Puede leer una descripción general [gratuita] aquí .

Para redes pequeñas de NAND (hasta 4 variables), el problema se resolvió completamente mediante enumeración exhaustiva [o métodos equivalentes]. Hay una tesis de doctorado bastante reciente de [Elizabeth], que resume los resultados antiguos y se extiende ellos. Ernst utiliza ramificación y unión, lo que mejora el método exhaustivo en la práctica, pero no asintóticamente. También señala que otros métodos de enumeración implícita, como la programación de enteros o CSP (satisfacción de restricciones, resueltos mediante SAT) se desempeñan peor en la práctica.

Obviamente ella escribió algún software para su método (llamado BESS), pero no estoy seguro si está disponible públicamente en algún lugar. El texto completo de su tesis está disponible gratuitamente en umich . Y de hecho, encontró la expresión mínima para xor de 2 entradas (su segunda, obviamente), la que se resalta a continuación:

Tambiéncomparólosresultadosexactos(paraNAND)conlosproducidosporeloptimizadorheurísticode ABC .

  

ABC pudo producir una red óptima para 340 de las 4,043 funciones en las que se conoce la red óptima. Para aquellas funciones en las que ABC no produjo una red óptima, fue en promedio un 36% más grande que la red óptima [.]

Hay (obviamente) algunas redes [más grandes] para las cuales BESS no terminó, pero permitió que se encontrara un límite superior (en el punto donde se abandonó la búsqueda). Para aquellos, ABC lo hizo bastante bien [bien con respecto a los límites encontrados], como se puede ver en el segundo gráfico a continuación.

    
respondido por el Fizz
1

Probablemente existen mejores técnicas, pero hace mucho tiempo, cuando en la Edad Media, encontré que Karnaugh Maps funcionaba bien bien

    
respondido por el R Drast
1

NAND seguido de NAND es equivalente a AND seguido de OR.

NOR seguido de NOR es equivalente a OR seguido de AND.

NAND seguido de NOR sería equivalente a AND seguido de AND que en realidad no tiene mucho sentido. NOR seguido de NAND sería equivalente a OR seguido de OR.

No creo que, en el caso general, haya una forma viable de encontrar una solución mínima para un problema con un gran número de entradas (obviamente, para los recuentos de entrada pequeños puede fuerza bruta). Quine-McClusky solo analiza las soluciones de dos niveles (la solución mínima de dos niveles a menudo no es la solución mínima general) y puede volverse computacionalmente inviable con tablas de verdad complejas y un gran número de entradas.

    
respondido por el Peter Green
1

El mejor algoritmo es el algoritmo Espresso . Hasta cierto punto, esto se implementa en la síntesis de FPGA

Logic friday es una pieza de software que puede utilizar. NOTA: esto reduce un XOR a 5 puertas NAND.

    
respondido por el JonRB

Lea otras preguntas en las etiquetas