Normalmente, el diseño ASIC es un esfuerzo en equipo debido a la complejidad y cantidad de trabajo. Daré un orden aproximado de los pasos, aunque algunos pasos se pueden completar en paralelo o fuera de orden. Listaré las herramientas que he utilizado para cada tarea, pero no será una lista enciclopédica.
-
Construir una biblioteca de celdas. (Alternativamente, la mayoría de los procesos tienen bibliotecas de compuertas disponibles comercialmente. Recomendaría esto a menos que sepas que necesitas algo que no está disponible). Esto implica diseñar múltiples compuertas de diferentes fuerzas de impulsión para todas las funciones lógicas necesarias, diseñar controladores/receptores de pads, y cualquier macro como un multiplicador de arreglos o memoria. Una vez que se diseña y verifica el esquemático para cada celda, se debe diseñar el diseño físico. He utilizado Cadence Virtuoso para este proceso, junto con simuladores de circuitos analógicos como Spectre y HSPICE.
-
Caracterizar la biblioteca de celdas. (Si tienes una biblioteca de compuertas de terceros, esto suele hacerse por ti). Cada celda en tu biblioteca debe ser simulada para generar tablas de temporización para el Análisis de Temporalidad Estática (STA). Esto implica tomar la celda terminada, extraer los parásitos de diseño utilizando Assura, Diva o Calibre, y simular el circuito bajo diferentes condiciones de entrada y cargas de salida. Esto construye un modelo de temporización para cada compuerta que sea compatible con tu paquete de STA. Los modelos de temporización suelen estar en el formato de archivo Liberty. He utilizado Silicon Smart y Liberty-NCX para simular todas las condiciones necesarias. Ten en cuenta que probablemente necesitarás modelos de temporización en "caso peor", "nominal" y "mejor caso" para que la mayoría de los software funcionen correctamente.
-
Sintetizar tu diseño. No tengo experiencia con compiladores de alto nivel, pero al final del día, el compilador o cadena de compiladores debe tomar tu diseño de alto nivel y generar un netlist a nivel de compuerta. El resultado de la síntesis es la primera vista que tienes del rendimiento teórico del sistema, y donde se abordan por primera vez los problemas de fuerza de impulsión. He utilizado Design Compiler para código RTL.
-
Colocar y enrutar tu diseño. Esto toma el netlist a nivel de compuerta del sintetizador y lo convierte en un diseño físico. Idealmente esto genera un diseño de pad a pad listo para la fabricación. Es muy fácil configurar tu software de P&R para hacer automáticamente miles de errores de DRC, por lo que tampoco todo es diversión y juegos en este paso. La mayoría del software gestionará problemas de fuerza de impulsión y generará árboles de reloj según se indique. Algunos paquetes de software incluyen Astro, IC Compiler, Silicon Encounter, y Silicon Ensemble. El resultado final de la colocación y el enrutamiento es el netlist final, el diseño final, y los parásitos de diseño extraídos.
-
Análisis de Temporalidad Estática Poscolocación. El objetivo aquí es verificar que tu diseño cumple con tu especificación de temporización, y no tiene problemas de configuración, mantenimiento o de bloqueo. Si los requisitos de tu diseño son estrictos, es posible que pases mucho tiempo aquí corrigiendo errores y actualizando las correcciones en tu herramienta de P&R. La herramienta final de STA que utilizamos fue PrimeTime.
-
Verificación Física del Diseño. Una vez que una disposición ha sido generada por la herramienta P&R, necesitas verificar que el diseño cumpla con las reglas de diseño del proceso (Revisión de Reglas de Diseño / DRC) y que la disposición coincida con el esquemático (Comparación de Diseño con Esquemático / LVS). Estos pasos deben seguirse para asegurarse de que la disposición esté cableada correctamente y sea fabricable. Nuevamente, algunas herramientas de verificación física son Assura, Diva o Calibre.
-
Simulación del diseño final. Dependiendo de la complejidad, puedes hacer una simulación a nivel de transistor utilizando Spectre o HSPICE, una simulación de "spice rápido" utilizando HSIM, o una simulación completamente digital usando ModelSim o VCS. Deberías ser capaz de generar una simulación con retardos realistas con la ayuda de tu herramienta de STA o P&R.
Empezar con una biblioteca de compuertas existente es un gran ahorro de tiempo, al igual que usar cualquier macro que beneficie tu diseño, como memoria, un microcontrolador, o bloques de procesamiento alternativos. Gestionar la complejidad del diseño es también una gran parte - un diseño de reloj único será más fácil de verificar que un circuito con múltiples dominios de reloj.