La simulación lógica es el uso de software de simulación para predecir el comportamiento de circuitos digitales y lenguajes de descripción de hardware . [1] [2] La simulación se puede realizar en distintos grados de abstracción física , como a nivel de transistor , nivel de compuerta , nivel de transferencia de registro (RTL), nivel de sistema electrónico (ESL) o nivel de comportamiento.
La simulación lógica se puede utilizar como parte del proceso de verificación en el diseño de hardware. [3]
Las simulaciones tienen la ventaja de ofrecer una apariencia y una sensación familiares al usuario, ya que están construidas con el mismo lenguaje y los mismos símbolos que se utilizan en el diseño. Al permitir que el usuario interactúe directamente con el diseño, la simulación es una forma natural para que el diseñador obtenga comentarios sobre su diseño.
El nivel de esfuerzo necesario para depurar y verificar el diseño es proporcional a la madurez del diseño. Es decir, en las primeras etapas de la vida del diseño, los errores y el comportamiento incorrecto suelen detectarse rápidamente. A medida que el diseño madura, la simulación requerirá más tiempo y recursos para ejecutarse, y los errores tardarán cada vez más en detectarse. Esto es particularmente problemático cuando se simulan componentes para sistemas modernos; cada componente que cambia de estado en un solo ciclo de reloj en la simulación requerirá varios ciclos de reloj para simularse.
Una solución sencilla a este problema puede ser emular el circuito en una matriz de puertas programables en campo . También se puede explorar la verificación formal como alternativa a la simulación, aunque una prueba formal no siempre es posible o conveniente.
Una forma prospectiva de acelerar la simulación lógica es utilizando cálculos distribuidos y paralelos . [4]
Para ayudar a evaluar la minuciosidad de una simulación, existen herramientas para evaluar la cobertura del código , [5] la cobertura funcional, la cobertura de la máquina de estados finitos (FSM) y muchas otras métricas. [6]
La simulación de eventos permite que el diseño contenga información de tiempo simple: el retraso necesario para que una señal viaje de un lugar a otro. Durante la simulación, los cambios de señal se rastrean en forma de eventos. Un cambio en un momento determinado desencadena un evento después de un cierto retraso. Los eventos se ordenan por el momento en que ocurrirán y, cuando se han manejado todos los eventos para un momento determinado, el tiempo simulado avanza al momento del próximo evento programado. La velocidad de ejecución de una simulación de eventos depende de la cantidad de eventos que se procesarán (la cantidad de actividad en el modelo). [7]
Si bien la simulación de eventos puede proporcionar cierta retroalimentación sobre la sincronización de la señal, no reemplaza el análisis de sincronización estático .
En la simulación de ciclos, no es posible especificar demoras. Se utiliza un modelo preciso para cada ciclo y se evalúa cada compuerta en cada ciclo. Por lo tanto, la simulación de ciclos se ejecuta a una velocidad constante, independientemente de la actividad en el modelo. Las implementaciones optimizadas pueden aprovechar la baja actividad del modelo para acelerar la simulación al omitir la evaluación de las compuertas cuyas entradas no cambiaron. En comparación con la simulación de eventos, la simulación de ciclos tiende a ser más rápida, a escalar mejor y a ser más adecuada para la aceleración/emulación de hardware.
Sin embargo, las tendencias de diseño de chips apuntan a que la simulación de eventos gana rendimiento relativo debido a la reducción del factor de actividad en el circuito (debido a técnicas como el control de reloj y el control de potencia , que se están utilizando mucho más comúnmente en un esfuerzo por reducir la disipación de potencia). En estos casos, dado que la simulación de eventos solo simula eventos necesarios, el rendimiento puede no ser ya una desventaja sobre la simulación de ciclos. La simulación de eventos también tiene la ventaja de una mayor flexibilidad, manejando características de diseño difíciles de manejar con la simulación de ciclos, como la lógica asincrónica y los relojes inconmensurables. Debido a estas consideraciones, casi todos los simuladores lógicos comerciales tienen una capacidad basada en eventos, incluso si se basan principalmente en técnicas basadas en ciclos. [8]
{{cite conference}}
: CS1 maint: varios nombres: lista de autores ( enlace ){{cite conference}}
: CS1 maint: varios nombres: lista de autores ( enlace )