Microarquitectura: cómo se diseña una CPU – Parte 2
Segunda parte de «Cómo se diseña una CPU» de la serie Microarquitectura. La primera parte la podéis ver aquí, por si os la perdisteis. Aquí intentaré describir un poco mejor las etapas de diseño, e introducir una serie de herramientas que se emplean durante el proceso.
A mi es un tema que me apasiona, y no hay demasiada información en blogs sobre este tema, especialmente en los blogs en español. Por eso he querido crear esta serie de artículos, para poner un poco de luz en este tema donde hay bastante desconocimiento por parte de algunos usuarios que no saben realmente lo que hay «dentro» de esas máquinas que usan a diario.
ÍNDICE:
Herramientas para diseñar una CPU
Para el diseño de una CPU, como para cualquier otro CI, es necesario una serie de recursos y herramientas. Algunas de ellas son:
- CAD y CAM: se emplean software para el diseño y la automatización de este tipo, especialmente una variante conocida como entornos EDA (Electronic Design Automation). Con ello se consigue crear el layout del circuito en formato como GDSII o CIF. Ejemplos son KiCAD, gEDA, SPICE, OrCAD, etc. Un EDA incluye todas las herramientas necesarias para el diseño, al igual que el IDE para los desarrolladores de software. Puedes encontrar opciones gratuitas o comerciales de varios tipos:
- Diseño semi/full-custom: Cadence, Mentor Graphics, Alliance,…
- Simulación y síntesis VHDL: Synopsys, OrCAD, VHDL VeriBest,…
- Desarrollo de PLDs y FPGAs: PALASM, Synergy, Warp, ViewSynthesis, Xilinx, Altera,…
- PCBs o PWBs: National Instruments Multisum,…
- Lenguajes HDL: es decir, lenguajes de programación para descripción de hardware, normalmente a nivel de abstracción RTL. Hay varios, pero entre todos destaca Verilog y VHDL. En la página opencores.org tienes diseños de todo tipo de chips escritos en estos lenguajes para poder implementar en un FPGA, modificar, o aprender de ellos.
--Ejemplo de Multiplexor en VHDL --El MUX tendrá tres entradas (a, b, c) y otra adicional para el control --Y una salida --La señal de control tendrá dos bits, por tanto puede estar en 00, 01, 10, y 11 --Según el valor de la señal permitirá que una de las entradas se abra paso a la salida library IEEE; use IEEE.STD_LOGIC_1164.all; ENTITY mux IS PORT(a : IN std_logic_vector(3 DOWNTO 0); b : IN std_logic_vector(3 DOWNTO 0); c : IN std_logic_vector(3 DOWNTO 0); control : IN std_logic_vector(1 DOWNTO 0); salida : OUT std_logic_vector(3 DOWNTO 0)); END mux; ARCHITECTURE synth OF mux IS BEGIN PROCESS (control, a, b, c) IS BEGIN CASE control IS WHEN "00" => salida <= (others => '0'); WHEN "01" => salida <= a; WHEN "10" => salida <= b; WHEN "11" => salida <= c; WHEN OTHERS => salida <= (others => '0'); END CASE; END PROCESS; END synth;
- Otras herramientas: puede que algunos arquitectos e ingenieros necesiten de herramientas adicionales, especialmente si van a realizar pruebas del circuito, como sondas lógicas, etc. También se suele usar sistemas operativos y software para cargarlos sobre el diseño y comprobar que se ejecuta adecuadamente durante la verificación funcional. Por supuesto, como cualquier otro proyecto, también se necesita una buena planificacion suando PERT, CPM, SPC, etc., aunque esto no esté directamente relacionado con el diseño en sí.
Pero no siempre es posible usar este tipo de herramientas y bloques custom-cell y automatizar ciertos aspectos. Por ejemplo, durante el floorplanning, algunos ingenieros deben diseñar partes a mano. Eso se debe a que el camino crítico debe acortarse, de él dependerá en gran medida la frecuencia de reloj máxima a la que vaya a llegar el chip. También es importante recolocar adecuadamente las puertas lógicas, pads, unidades funcionales, líneas de alimentación y masa, árboles de frecuencia, etc.
DEC siempre eran un referente en todo, cuando un nuevo microprocesador Alpha aparecía, todos miraban a él para ver cómo habían atajado los problemas. Por ejemplo, ellos fueron los primeros en usar líneas de reparto de frecuencia en forma de árbol para que la señal clock llegase de forma homogénea por toda la superficie del dado. Por eso AMD hizo un movimiento estratégico contratando a sus mejores ingenieros, dando como resultado el K7 (de hecho compartieron protocolo de comunicación EV6, incialmente diseñado para el Alpha 21264, en el Slot A) y K8, e Intel contrato a otro buen puñado de ellos para su Core.
Pasos del diseño del CI
El diseño de la CPU se puede separar en dos grandes partes, una lógica y otra física:
- Los ingenieros comienzan planteando el problema. Esto desemboca en la exploración de requerimientos. Como ya he comentado, esto pasa por definir también la ISA, diseñar la microarquitectura, describir la máquina de estado algorítmico o FSM. Luego se comienza con el diseño lógico y electrónico.
- Luego se pasarán las funciones o elementos a lenguaje HDL, normalmente a nivel RTL, para poder hacer simulaciones y comprobar que funciona adecudamente. Si algo va mal se volverá a modificar el diseño inicial y se volverá a hacer esta simulación pre-layout.
- Una vez verificada la validez del diseño se usan herramientas para convertir la abstracción RTL a elementos básicos, usando una biblioteca de elementos (celdas prediseñadas) o custom-cell diseñadas desde cero por los ingenieros.
- Durante el floorplaning se genera un mapa para colocar todos los elementos en el lugar más óptimo, no solo para aprovechar al máximo la superficie del futuro dado, sino también para evitar problemas de retrasos en ciertas señales, resistencias y capacidades parásitas, etc. Eso que he comentado antes con el critical path. Se usan herramientas de posicionamiento y conexionado para realizar el ruteo de todos los elementos presentes analizando una netlist. Puede ser a distintos niveles, como dispositivos electrónicos (principalmente transistores), puertas lógicas, o unidades funcionales.
- Ahora se realiza una extracción que deterinará la resistencia y capacidad de interconexiones. Así se observa si se podrían generar problemas (sobrecalentamiento, retardos, consumo,…).
- Se optimiza y se comprueba mediante simulaciones que cumple las expectativas. Si todo está OK se genera el layout o diseño geométrico de los componentes del circuito.
- Finalmente se hace otra simulación post-layout. Tratará de comprobar si con los datos obtenidos se puede llevar a cabo una implementación física del circuito. En esta etap ade back-annotation se anotan los retardos obtenidos en las interconexiones en un fichero llamado SDF y asociará cada interconexión con su retraso mínimo, típico y máximo. En caso de que los valores sean aceptables, se comenzará a crear las fotomáscaras a partir del layout para ir fabricando las capas en la foundry y obtener el chip mediante una serie de procesos fisicoquímicos que se irán repitiendo varias veces, más de 1500 pasos (dependiendo de la cantidad de capas de interconexiones metálicas puede aumentar o disminuir), para crear todas las zonas y capas necesarias en un proceso que puede durar hasta 2 meses …
Cómo se fabrica un chip
Si quieres tener una leve idea de cómo se fabrica un chip, te dejo este vídeo de Lexar y su fábrica de memorias flash para tarjetas SD. El vídeo no es gran cosa, puesto que se salta decenas y decenas de pasos, solo va a algunas etapas concretas, pero bueno… si nunca has visto una sala blanca y cómo se crea un chip, te puede dar una idea.
En mi enciclopedia «El Mundo de Bitman» he dedicado más de 300 páginas solo al proceso de fabricación, y unas 900 a todo lo que tiene que ver con la tecnología de fabricación, y algo más de 600 para entender cuestiones básicas de electrónica y lógica digital…
En el anterior vídeo, se ven algunos procesos, pero si quieres comprender el proceso, en el siguiente vídeo podrás ver interesantes recreaciones en 3D de algunos procesos y una explicación algo más detallada. Es un vídeo de Global Foundries, las antiguas fábricas de AMD:
Aquí tenéis otro en español, aunque simplemente describe el proceso (para fabricar un DSP de TI) y muestra la fab de Texas Instruments por dentro, pero quizás las explicaciones en castellano os puedan ayudar a los que no domináis bien el inglés, además, la parte final donde se muestra cómo se realiza el empaquetado es muy buena (de un IBM PowerPC):
Más filmografía:
Documental muy recomendable para los apasionados de la microelectrónica «La Batalla del Chip«:
Aquí un «viaje» al interior de un chip usando un microscopio de barrido electrónico o SEM:
Y no puede faltar la historia del transistor y desencadenante de lo que hoy es Silicon Valley, el documental que despertó en mi el interés por la electrónica y el que tuvo parte de culpa de que yo hoy esté haciendo esto: