En el proyecto DRAC estamos diseñando SoCs (del inglés System-on-Chip) que incluyen procesadores basados en la arquitectura RISC-V, diferentes aceleradores y un conjunto de bloques analógicos como son un PLL, un SerDes, un ADC y SPADs (del inglés, Phase-Locked Loop, Serializer Deserializer, Analog to Digital Converter y Single Photon Avalanche Diode, respectivamente). De estos bloques analógicos, el PLL y el SerDes permiten aumentar el número de instrucciones ejecutadas por el procesador; el PLL permite aumentar la frecuencia de trabajo mientras que el SerDes habilita comunicaciones más rápidas con las memorias externas. Por otra parte, el ADC permite interactuar con sensores analógicos y los SPADs son una herramienta para poder habilitar la criptografía cuántica.
A la hora de planificar la estrategia de integración de los diferentes elementos del SoC, debe considerarse que trabajaremos con un diseño de señal mixta. Sin embargo, como los circuitos que ocupan más área y los más complejos son los digitales, la estrategia elegida es la DoT (del inglés, Digital On Top). Esto significa que empezaremos a trabajar como si el SoC fuera puramente digital, y a medio camino añadiremos la información de los bloques analógicos que se han diseñado por separado.
Cada bloque analógico se diseña siguiendo el flujo analógico, utilizando la herramienta "virtuoso" de Cadence®. En cambio, los diseños digitales como el procesador o los aceleradores se codifican con lenguaje RTL (del inglés, Register-Transfer Level), que nos permite describir el comportamiento del circuito que queremos diseñar y verificarlo con simulaciones. Una vez estamos seguros de que el circuito diseñado tiene el comportamiento esperado, se necesita traducir el comportamiento descrito en un conjunto de puertas lógicas que realizan la misma función. Este paso se llama síntesis lógica, y para realizarla son necesarias la descripción de nuestro circuito, la información de puertas disponibles de la tecnología que usamos e incluir las limitaciones del circuito (figura 1).
Fig.1: Ejemplo esquemático del proceso en una síntesis lógica
Una vez finalizada la síntesis, obtenemos un fichero, llamado "netlist", donde encontraremos el circuito digital que hemos diseñado expresado en puertas lógicas disponibles en la tecnología elegida. El siguiente paso consiste en distribuir las celdas lógicas, bloques analógicos, GPIOs y memorias en un área determinada y, además, realizar las conexiones entre ellos. Este paso se llama síntesis física, y se puede resumir, muy brevemente, en 5 etapas: Floorplan, Placement, Clock tree synthesis (CTS), Routing y Signoff o Final Verification (ver figura 2, del paso 6 al 10).
En la etapa Floorplan hacemos la distribución de nuestro SoC, el área que ocuparán los circuitos digitales, donde pondremos las memorias y GPIOs, donde pondremos los bloques analógicos y cómo alimentaremos los circuitos. En la etapa Placement, se realiza una primera disposición de las puertas lógicas para comprobar que el diseño realmente se puede realizar, considerando el espacio disponible y las limitaciones temporales que queremos conseguir. En la etapa CTS, se realiza la distribución de la red de los relojes del sistema. En la etapa Routing, se realiza la conexión física, a través de líneas de metal, de las puertas lógicas. Finalmente, la etapa Signoff sirve para cerrar el chip; aquí se ejecutan comprobaciones temporales y tecnológicas para saber si el chip cumple las limitaciones temporales que deseamos y, también, si el chip puede ser fabricado. Esta última etapa finaliza generando un archivo GDS II que, en resumen, es lo que necesita la fundición de semiconductores para fabricar el chip.
Fig.2: Flujo esquemático de los pasos necesarios para diseñar un chip, desde la idea inicial en el archivo que se envía a la fábrica de semiconductores. Resaltar que, los pasos contenidos entre la etapa 6 y la etapa 10 es lo que llamamos síntesis física. Imagen extraída de: https://www.einfochips.com/blog/asic-design-flow-in-vlsi-engineering-services-a-quick-guide/