Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Diseño de Chips

Hemos visto cómo los chips se construyen a partir de capas, unas encima de otras. En cada capa hay unas zonas, que tienen un tamaño determinado. En las capa de los conductores se realizan las interconexiones entre todos los elementos. El ingeniero diseñador de los chips es la persona que define la posición de todas las zonas, sus tamaños, y las interconexiones, de manera que el chip tenga la funcionalidad requerida

¿Qué tamaños mínimos podemos usar para las zonas? ¿Cuántos niveles de interconexiones se pueden usar? ¿Qué distancias mínimas tiene que haber entre los diferentes elementos?. Todos los parámetros mínimos que necesita el diseñador para construir el chips están determinados por la tecnología de fabricación, que la proporciona el fabricante. Con unos fabricantes se pueden construir chips con transistores más grandes, mientras que con otros más pequeños (y por tanto caben más)

PDK (Process Design Kit)

Es el fabricante el que proporciona todas las reglas de diseño, tamaños, archivos y modelos necesarios para que un diseñador pueda fabricar su chip. Es lo que se conoce con el nombre de PDK (Process Design Kit), que se puede traducir como Paquete de diseño de proceso

Puedes encontrar más información (en inglés) sobre el concepto de PDK en la web del curso Zero to Asic de Matthew Venn

Por tanto, para fabricar un chip, lo primero es tener acceso al PDK del fabricante. Y aquí es donde surge el problema. El fabricante considera esta información como confidencial y hace firmar un acuerdo de confidencialidad con los usuarios. Además, el PDK incluye librerías softare con licencias privativas. Por ello no es posible compartir los diseños ni distribuir la información…

…¡Hasta que nacieron los PDKs libres!

Skywater 130nm

Las tecnologías de fabricación de chips reciben diferentes nombres, para diferenciarlas y poder ver cómo evolucionan. En los años 2000 exístía la tecnología de 130nm usada por empresas como IBM, Intel, Texas Instrument…

En el 2020 surgió la iniciativa SkyWater 130nm, fomentada por Google, el fabricante de chips Skywater Techonology y el fabricante efabless (que ha sido comprado por Chipfoundry en el 2026). Liberaron el PDK de 130nm, con el nombre de sky130. Se trata del primer PDK Industrial Libre de la historia. Un hito histórico

Gracias a esto, estudiantes, investigadores, ingenieros y cualquier persona interesada tenemos acceso a la tecnología de creación de chips, y podemos diseñar nuestros propios chips!! Y lo más importante, podemos compartirlos con la comunidad para que otros aprendan y construyan chips más avanzados a partir de este conocimiento

Toda la información del PDK sky130 está disponible en estos enlaces:

En esta figura se resumen los parámetros más importantes de Sky130, así como los diferentes niveles de capas y las vías de interconexión entre capas

Diseño a Bajo nivel

¿Cómo se diseña al más bajo nivel? Es decir, ¿cómo se diseñan los chips de la forma más cercana a la realidad? La labor del diseñador es definir los transistores, dimensionando y posicionando sus diferentes zonas, y realizar la interconexión de todos ellos. Esta parte del diseño, que típicamente se hace gráficamente se denomina el Layout. Lo podríamos traducir como el plano del trazado

Este es un ejemplo del layout de un mosfet N, diseñado con Magic

El layout se encuentra en uno o más archivos. El diseñador los crea utilizando herramientas EDA para chips. Una de las más antiguas y conocidas es Magic VLSI. Antiguamente este proceso se creaba mediante dibujos físicos. El diseñador lo dibujaba en papel

A partir del Layout se obtiene el Fichero de fabricación que típicamente está en el formato GDS. Este fichero contiene toda la información necesaria para construir todas las capas del chips. Es el archivo que lee la máquina de construcción de chips

Además, el Layout lo podemos simular para comprobar que funciona adecuadamente, antes de su fabricación, y también lo podemos renderizar en 3D para ver la estructura interna del chip

Este es un pantallazo del renderizado 3D del fichero GDS generado a partir del layout del MOSFET N anterior. Se ha renderizado con la herramienta KLayout

El Layout se diseña con diferentes herramientas. Nosotros vamos a usar 2 diferentes, para tener intuición sobre cómo es el proceso

Layout en Siliwiz

Siliwiz es un programa que corre on-line para aprender los fundamentos del diseño de chips, desarrollado por Matt Venn para su curso Zero to asic

Si tienes curiosidad por cómo se hacen los Layouts de manera genérica, sin aplicar a una tecnología específica para que sea más sencillo, puedes seguir este tutorial

Layout en Magic

Magic es un programa Libre para diseñar y fabricar circuitos integrados utilizando diferentes tecnologías

Si quieres aprender a utilizar un programa que sirve para fabricar chips reales, usando la tecnología Sky130nm, puedes seguir este tutorial:

Visualización en 3D del Layout

El layout se diseña en 2D, mediante rectángulos vistos desde arriva que identifican las diferentes zonas. Estos rectángulos están en capas a diferentes alturas, como ya sabemos

Para evaluar un fichero GDS, y tener intuición sobre cómo es por dentro un chip, así como ver su “cableado”, es muy interesante realizar un renderizado 3D del fichero GDS

En esta sección resumimos las diferentes alternativas para renderizar en 3D los ficheros GDS, y proponemos una de ella, el renderizado online, para utilizar en nuestras pruebas y durante proceso de aprendizaje

Fichero GDS de pruebas

Para probar el funcionamiento de los renderizadores podemos utilizar cualquier fichero gds. Pero como todavía no lo sabemos generar, vamos a utilizar un gds de referencia muy simple. Se corresponde con una puerta not

Klayout

El programa Klayout nos permite visualizar un fichero GDS en 2D y 3D. Es el que hemos utilizado en el tutorial de Magic anterior. Puedes encontrar más información sobre cómo instalarlo y cómo configuarlo en esta sección: Tutorial de Magic: Klayout

Abrimos el fichero test-ref.gds pinchando en la opción File/Open. Se nos renderiza el fichero GDS en 2D en la parte central

En el panel de la derecha podemos ver TODAS las capas que aparecen. En el renderizado sólo se dibujan las capas resaltadas en negrita

Para obtener el renderizado 3D pinchamos en Tools/2.5d View/Edit 2.5 Script

En la nueva ventana que aparece pulsamos en el icono Run current Script

Nos aparece el renderizado 3D, que podemos mover con el ratón

GDS3D

GDS3D es un programa libre para el renderizado 3D de ficheros en formato GDS. El ejecutable para Linux se puede bajar directamente de sourceforge, y así no hay que compilarlo manualmente. Para instalarlo basta con copiar el ejecutable GDS3D a un directorio accesible desde el PATH

Para realizar el renderizado se necesita un archivo adicional, de texto, que indique las capas a renderizar y sus propiedades: colores, alturas, etc…

Este es un ejemplo de ese fichero: sky130.txt

Vamos a renderizar nuestro fichero de referencia. Copiamos los ficheros test-ref.gds y sky130.txt en el mismo directorio, y ejecutamos GDS3D -p sky130.txt -i test-ref.gds

obijuan@JANEL:~/Develop/Learn-open-silicon/src/examples$ ls
sky130.txt  test-ref.gds
obijuan@JANEL:~/Develop/Learn-open-silicon/src/examples$ GDS3D -p sky130.txt -i test-ref.gds
==============================================================================
GDS3D v1.8, Copyright (C) 2013 IC-Design Group, University of Twente
Created by Jasper Velner and Michiel Soer, http://icd.el.utwente.nl
Based on the gds2pov project by Roger Light, http://atchoo.org/gds2pov/
Copyright (C) 2004-2008 by Roger Light
This program comes with ABSOLUTELY NO WARRANTY. You may distribute it freely
as described in the readme.txt distributed with this file.
==============================================================================

Opened process file "sky130.txt"
Warning: Shortkey is larger than 9, ignoring.

Opening GDS file "test-ref.gds"..
[...]

Se nos abre esta ventana. Vemos la vista superior del diseño

Con el ratón cambiamos el punto vista, aunque no es intuitivo. También se puede cambiar con las flechas de los cursores. Pulsando la tecla L se muestra una ventana con las capas del diseño. Pinchando sobre cada una de ellas las podemos visualizar/ocultar

Conversión a STL: gdsiistl

Otra manera de realizar la visualización 3D es manualmente, exportando primero el fichero GDS al formato STL. Esto se puede hacer con el script python gdsiiistl

Para instalarlo hay que crear un entorno virtual de python con las dependencias. En un directorio colocamos el script gdsiistl.py y el fichero test-ref.gds

(test) obijuan@JANEL:~/Develop/Learn-open-silicon/src/examples/gdsiistl$ ls
gdsiistl.py  test-ref.gds
(test) obijuan@JANEL:~/Develop/Learn-open-silicon/src/examples/gdsiistl$ 

Desde ese directorio se ejecuta el comando python3 gdsiistl.py test-ref.gds, y se generan los ficheros STL, uno por cada capa

(test) obijuan@JANEL:~/Develop/Learn-open-silicon/src/examples/gdsiistl$ python3 gdsiistl.py test-ref.gds 
Reading GDSII file test-ref.gds...
Extracting polygons...
Triangulating polygons...
Extruding polygons and writing to files...
    ((np.int64(68), np.int64(20)), met1) to test-ref.gds_met1.stl
    ((np.int64(64), np.int64(20)), nwell) to test-ref.gds_nwell.stl
    ((np.int64(67), np.int64(44)), mcon) to test-ref.gds_mcon.stl
    ((np.int64(65), np.int64(20)), diff) to test-ref.gds_diff.stl
    ((np.int64(66), np.int64(44)), licon) to test-ref.gds_licon.stl
    ((np.int64(66), np.int64(20)), poly) to test-ref.gds_poly.stl
    ((np.int64(67), np.int64(20)), li1) to test-ref.gds_li1.stl
Done.
(test) obijuan@JANEL:~/Develop/Learn-open-silicon/src/examples/gdsiistl$

Estos ficheros STL hay que importarlos en una aplicación capaz de leerlos, como por ejemplo Blender o Freecad

Este fichero ha sido generado con Freecad: test.FCStd. Se han importado todos los STLs, se han cambiao de colores y se han movido para que unos estén encima de otros

Visualización online (Recomendado)

La manera más sencilla de renderizar un gds es utilizando este Visualizador interactivo del proyecto Tiny Tapeout. Las fuentes están en este repositorio de Github: https://github.com/TinyTapeout/tinytapeout_gds_viewer

Esto es lo que aparece cuando entramos en el visualizador

Luego simplemente arrastramos el fichero gds desde el navegador de archivos, y se nos renderiza automáticamente. Inicialmente se muestra la vista superior

Con el ratón camabiamos la vista

Si se aprieta en la opción autoratorio, el modelo empieza a rotar en sentido antihorario, lentamente. En cualquier momento lo podemos parar

En el panel de la derecha están las diferentes capas, que se pueden ocultar/visualizar. Por ejemplo, ocultamos las capas Metal1 y mcon

🚧 TODO 🚧 *

Celda estándar

Ya hemos visto cómo se crea un MOSFET N con la tecnología sky130. También sabemos cómo a partir de estos mosfets podemos crear otros elementos como inversores, puertas NAND, biestables D…

El fabricante es el que construye una biblioteca de componentes asociadas a una tecnología, facilitando la vida al diseñador. Cada uno de estos componentes es lo que se llama una celda estándar

Las celdas están diseñadas no sólo para tener una funcionalidad concreta (una puerta NOT, AND, etc…), sino que tiene unas dimensiones estandarizadas y se definen unas posiciones concretas para las entradas de alimentación y los pines de la celda. El objetivo es que se puedan crear diseños más complejos simplemente mediante la unión de estas celdas

Típicamente la altura de las celdas está fijada, pero no su anchura. De esta forma se van colocando en horizontal, uniendo todas sus alimentaciones mediante unos railes horizontales (que son conexiones en la capa del metal)

Además se colocan otros railes verticales, en otra capa metálica, para unir los railes horizontales

🚧 TODO 🚧

🚧 TODO 🚧

  • https://github.com/google/skywater-pdk-libs-sky130_fd_sc_hd