En ingeniería informática , la síntesis lógica es un proceso mediante el cual una especificación abstracta del comportamiento deseado del circuito , normalmente a nivel de transferencia de registros (RTL), se convierte en una implementación de diseño en términos de puertas lógicas , normalmente mediante un programa informático llamado herramienta de síntesis . Los ejemplos comunes de este proceso incluyen la síntesis de diseños especificados en lenguajes de descripción de hardware , incluidos VHDL y Verilog . [1] Algunas herramientas de síntesis generan flujos de bits para dispositivos lógicos programables como PAL o FPGA , mientras que otras apuntan a la creación de ASIC . La síntesis lógica es un paso en el diseño de circuitos en la automatización del diseño electrónico , los otros son lugar y ruta y verificación y validación .
Las raíces de la síntesis lógica se remontan al tratamiento de la lógica por parte de George Boole (1815 a 1864), en lo que ahora se denomina álgebra de Boole . En 1938, Claude Shannon demostró que el álgebra de Boole de dos valores puede describir el funcionamiento de los circuitos de conmutación. En los primeros tiempos, el diseño lógico implicaba manipular las representaciones de la tabla de verdad como mapas de Karnaugh . La minimización de la lógica basada en mapas de Karnaugh está guiada por un conjunto de reglas sobre cómo se pueden combinar las entradas en los mapas. Un diseñador humano normalmente solo puede trabajar con mapas de Karnaugh que contengan hasta cuatro a seis variables.
El primer paso hacia la automatización de la minimización lógica fue la introducción del algoritmo Quine-McCluskey que podía implementarse en una computadora. Esta técnica de minimización exacta presentó la noción de implicantes primos y coberturas de costos mínimos que se convertirían en la piedra angular de la minimización de dos niveles . Hoy en día, el minimizador lógico heurístico Espresso mucho más eficiente se ha convertido en la herramienta estándar para esta operación. [ necesita actualización ] Otra área de investigación temprana fue la minimización de estados y la codificación de máquinas de estados finitos (FSM), una tarea que era la pesadilla de los diseñadores. Las aplicaciones para la síntesis lógica se encontraban principalmente en el diseño de computadoras digitales. Por lo tanto, IBM y Bell Labs desempeñaron un papel fundamental en la automatización temprana de la síntesis lógica. La evolución de los componentes lógicos discretos a las matrices lógicas programables (PLA) aceleró la necesidad de una minimización eficiente de dos niveles, ya que minimizar los términos en una representación de dos niveles reduce el área en una PLA.
Los circuitos lógicos de dos niveles tienen una importancia limitada en un diseño de integración a muy gran escala (VLSI); la mayoría de los diseños utilizan múltiples niveles de lógica. Casi cualquier representación de circuito en RTL o Behavioural Description es una representación multinivel. Un sistema temprano que se utilizó para diseñar circuitos multinivel fue LSS de IBM. Utilizaba transformaciones locales para simplificar la lógica. El trabajo en LSS y el compilador de silicio de Yorktown estimuló un rápido progreso de la investigación en síntesis lógica en la década de 1980. Varias universidades contribuyeron poniendo su investigación a disposición del público, más notablemente SIS de la Universidad de California, Berkeley , RASP de la Universidad de California, Los Ángeles y BOLD de la Universidad de Colorado, Boulder . En una década, la tecnología migró a los productos comerciales de síntesis lógica ofrecidos por empresas de automatización de diseño electrónico.
Los principales desarrolladores y proveedores de paquetes de software de síntesis lógica son Synopsys , Cadence y Siemens . Sus herramientas de síntesis son Synopsys Design Compiler, Cadence First Encounter y Siemens Precision RTL.
El diseño lógico es un paso en el ciclo de diseño estándar en el que el diseño funcional de un circuito electrónico se convierte en la representación que captura las operaciones lógicas , las operaciones aritméticas , el flujo de control , etc. Un resultado común de este paso es la descripción RTL . El diseño lógico suele ir seguido del paso de diseño del circuito . En la automatización del diseño electrónico moderno , partes del diseño lógico pueden automatizarse utilizando herramientas de síntesis de alto nivel basadas en la descripción del comportamiento del circuito. [2]
Las operaciones lógicas suelen consistir en operaciones booleanas AND, OR, XOR y NAND, y son las formas más básicas de operaciones en un circuito electrónico. Las operaciones aritméticas suelen implementarse con el uso de operadores lógicos.
Con el objetivo de aumentar la productividad de los diseñadores, los esfuerzos de investigación en la síntesis de circuitos especificados a nivel de comportamiento han llevado a la aparición de soluciones comerciales en 2004 [3] , que se utilizan para el diseño complejo de ASIC y FPGA. Estas herramientas sintetizan automáticamente circuitos especificados utilizando lenguajes de alto nivel, como ANSI C/C++ o SystemC, a una especificación de nivel de transferencia de registros (RTL), que se puede utilizar como entrada para un flujo de síntesis lógica a nivel de compuerta [3] . Utilizando la síntesis de alto nivel, también conocida como síntesis ESL, la asignación de trabajo a ciclos de reloj y entre componentes estructurales, como las ALU de punto flotante, la realiza el compilador utilizando un procedimiento de optimización, mientras que con la síntesis lógica RTL (incluso desde Verilog conductual o VHDL, donde un hilo de ejecución puede realizar múltiples lecturas y escrituras a una variable dentro de un ciclo de reloj) esas decisiones de asignación ya se han tomado.
Las implementaciones prácticas típicas de una función lógica utilizan una red multinivel de elementos lógicos. A partir de una descripción RTL de un diseño, la herramienta de síntesis construye una red booleana multinivel correspondiente .
A continuación, se optimiza esta red utilizando varias técnicas independientes de la tecnología antes de realizar optimizaciones dependientes de la tecnología. La función de costo típica durante las optimizaciones independientes de la tecnología es el recuento literal total de la representación factorizada de la función lógica (que se correlaciona bastante bien con el área del circuito).
Finalmente, la optimización dependiente de la tecnología transforma el circuito independiente de la tecnología en una red de puertas en una tecnología dada. Las estimaciones de costos simples se reemplazan por estimaciones más concretas, impulsadas por la implementación, durante y después del mapeo de la tecnología. El mapeo está limitado por factores como las puertas disponibles (funciones lógicas) en la biblioteca de tecnología, los tamaños de unidad para cada puerta y las características de retardo, potencia y área de cada puerta.