¿Cómo y quién diseña una CPU o microprocesador?
En los artículos sobre el diseño de la microarquitectura parte 1 y parte 2 ya comenté sobre el diseño de una CPU o microprocesador. Sin embargo, me quedaron algunas cosas en el tintero que ahora me gustaría explicar en este otro artículo sobre el diseño de estos circuitos tan fascinantes.
Esta vez me gustaría describir el proceso el diseño etapa a etapa, pero desde una perspectiva más relacionada con la implicación de las personas que intervienen en el proceso y sus roles. Además, también haré una introducción sobre algunos nombres importantes en la historia del diseño de estos chips.
ÍNDICE:
Etapas del diseño de una CPU
El flujo de trabajo para el diseño de un ASIC tradicional básicamente consta de las siguientes etapas:
- Definir las especificaciones de la arquitectura y diseñarla. Esta es la etapa donde realmente se innova. El resto, un gran porcentaje de los recursos implicados simplemente tratan de probar que funciona como se espera.
- Crear una descripción de las especificaciones usando lenguajes HDL.
- Compilar el código (p.e.: en RTL) y verificar si funciona mediante simulación.
- Sintetizar el código y aplicar el área y tiempo apropiado para que funcione y generar la netlist de puertas.
- Hacer la comprobación entre el modelo de puertas generado y el modelo RTL.
- Diseñar el plano usando herramientas propias o comerciales.
- Después viene la etapa de place and route, que también se puede hacer con herramientas propias o de terceros.
- Verificación física usando LVS (Layout versus Schematic, DRC (Design Rule Checking) y ERC (Electrical Rule Checking) en la base de datos del layout.
- Extracción de «parásitos».
- Extracción de la netlist a nivel de puertas y verificar si funciona usando simulación.
- Hacer la comprobación equivalente entre la netlist a nivel de puerta y el comportamiento RTL.
- Ejecutar análisis de timing estáticos para comprobar los tiempos máximos y mínimos de los caminos. Si algo va mal habría que volver al diseño RTL para solucionar el problema o remodelar el layout si eso puede solucionar algo.
- A partir de aquí, se enviaría el diseño para su fabricación…
Cuando se diseña una microarquitectura, ésta puede estar basada en una previa, lo que reduce el tiempo y recursos necesarios. En otros casos, puede ser totalmente nueva, pero también se pueden aprovechar algunas unidades de trabajos previos. No siempre hay que empezar de cero.
Para el caso concreto de una CPU:
- En caso de que sea una ISA nueva, se determinarán las capacidades de la máquina para poder ajustar mejor el diseño. También se diseña el datapath de la arquitectura y se crea la ISA.
- Se comienza por definir las especificaciones también, lo que implica definir el rendimiento, frecuencia, pin count, tipo de empaquetado, tipo de procesador, consumo de energía, tamaño, etc.
- Luego se definirá las especificaciones de la microarquitectura, como las etapas de pipeline, niveles de caché, unidades funcionales, si será fuera de orden o no, superescalar o no, SMT o no, etc.
- Se desarrolla un modelo de rendimiento de alto nivel y se prueba en varias benchmarks para ver si se podrían conseguir los objetivos definidos al comienzo.
- Ahora hay que dividir el procesador en varios bloques para poder distribuir el trabajo entre todos los miembros del equipo implicado.
- Definir los detalles arquitectónicos de cada una de las partes o bloques.
- Analizar los caminos dentro de cada bloque para asegurarse de que el timing es correcto.
- Desarrollar un modelo de comportamiento, como un modelo RTL para cada uno de los sub-bloques.
- Generalmente cada bloque es verificado. Además, el Control y Datapath se analizan por separado. Lo mismo ocurriría con las megacells.
- Se realia el floorplan y se seguirá probando. Una vez se está satisfecho con el resultado se puede enviar para su fabricación masiva…
Arquitectos de CPUs y responsabilidades
¿Cuánto tiempo dura el proceso?
Cuando se diseña una CPU, el proceso para una nueva microarquitectura puede durar algunos años. Es decir, los proyectos de los microprocesadores que se están comercializando ahora fueron iniciados hace de 3 a 5 años atrás (para microarquitecturas completamente nuevas, si son evoluciones se tarda menos). Incluso, en empresas grandes, existen equipos dedicados a ir planificando las CPUs que saldrán a 10 años vista.
Actualmente es relativamente sencillo diseñar una CPU simple, similar a las de los años 70. Incluso muchos estudiantes lo hacen. Sin embargo, lo diseños avanzados y de alto rendimiento son mucho más sofisticados y necesitan más tiempo.
Cuando se inicia un diseño de CPU, aproximadamente a los 2 años desde el comienzo se debería ya contar con el diseño avanzado en manos del equipo de diseñadores. Es el momento de comenzar con el microcódigo, las pruebas, y comenzar a convencer a los potenciales clientes de que adopten el chip cuando salga.
Un año más tarde, es decir, a los 3 del inicio, el chip debería estar en las etapas de validación y el software debería estar en un estado funcional. En este punto los problemas de tiempo y las limitaciones crecen y, en ocasiones, se necesitan hacer algunos ajustes o algunas concesiones.
6 meses más tarde ya tendrías un engineering sample, es decir, una prueba del chip fabricada para comenzar a probar. Con suerte, el chip funcionará y arrancará el software, pero siempre suelen surgir algunos problemas que se deben solucionar antes de que se envíe para su fabricación en masa.
En caso de que no funcione o haya problemas serios en cuanto a las pruebas de rendimiento con respecto al objetivo marcado, se deberá volver atrás en las etapas de diseño para identificar qué es lo que está mal y poder solucionarlo. Esto retrasaría la salida y tendría un impacto importante, ya que cuando salga es probable que la competencia ya tenga algo mejor.
Una vez se solucionan los problemas se continúa con el trabajo para seguir mejorando el chip. Por ejemplo, se pueden hacer algunas modificaciones leves. También se pueden hacer evoluciones de la microarquitectura, adaptarlo a un nodo de fabricación mejor, etc., para próximos lanzamientos derivados.
¿Cuántas personas se ven implicadas?
Mientras que en los primeros microprocesadores tan solo se necesitaban unas cuantas personas, los complejos diseños actuales implican el trabajo de unas 100 personas. Cada una tiene su papel y se dedica a una función. Hay un grupo trabajando en la memoria caché, otros grupos cada uno dedicado a otras unidades funcionales, otros para la verificación, simulación, etc.
Algunas empresas, como AMD, pueden tener de 500 ingenieros a 2400 trabajando en los distintos proyectos que tienen en desarrollo. En Intel hay unas 10.000 personas trabajando en 60 o 70 proyectos en paralelo.
Las supercomputadoras y la IA cada vez tienen un papel más importante en el diseño de los nuevos chips. Este tipo de técnicas están restando trabajo a los ingenieros de carne y hueso.
Generalmente, en cada equipo suele haber uno o dos arquitectos principales o ingenieros principales. Y es muy importante la coordinación de todo ese numeroso grupo de personas, de lo contrario la gestión será un desastre y el resultado también. El responsable no solo debe saber lidiar con el equipo, también debe tener profundos sobre la tecnología para poder guiar al equipo según las necesidades.
En otro artículo me gustaría también hacer una introducción sobre la gestión de los recursos (tiempo, dinero, material necesario, recursos humanos,…) para el diseño de una CPU, que es también muy interesante…
Esto es solo en el caso del diseño, luego habría más encargados de los desarrollos para la tecnología de fabricación en caso de ser un IDM…
La tarea más difícil
La junta directiva de la empresa y los accionistas han cobrado relevancia a la hora de tomar decisiones en muchas grandes empresas. Y esto es uno de los males que están haciendo que algunas importantes empresas tomen malas decisiones o que sus productos no alcancen lo que se espera de ellos.
Una empresa tecnológica, para gozar de buena salud, debería tener a directivos que comprendan las necesidades del mercado tecnológico y no coharten las decisiones de los ingenieros. Una de las tareas más difíciles en la etapa de diseño es ser el líder de un proyecto y tener que lidiar con la gerencia.
El vicepresidente ejecutivo es el que está en lo alto, y con capacidad de toma de decisiones ejecutivas en la empresa. Bajo él está el Senior VP, que a su vez es el que está por encima de otros vicepresidentes en la jerarquía de las empresas de Silicon Valley. El vicepresidente del departamento concreto es el que debe lidiar con él y como mediador del Chief Architect, o arquitecto, que está justo por debajo liderando el diseño de un proyecto. Por debajo de ellos están el resto de ingenieros y responsables de cada uno de los equipos centrados en las diferentes partes.
Los vicepresidentes en EE.UU. no tienen un rol tan importante como el puesto de vicepresidente tal como se entiende en Europa. Por eso, en una empresa americana puede haber muchos VPs, que son como gerentes.
En cuanto a la jerarquía de la empresa, se puede tener algo similar a este esquema (de abajo a arriba):
- Desarrolladores e ingenieros.
- Technical Lead o líder de cada grupo de trabajo.
- Arquitecto principal al frente del proyecto.
- Manager o gestor, Senior Manager, Assistant Manager, Director y Senior Director.
- VP, Assistan VP, y Senior VP.
- Corporate VP.
- COO/CFO/CSO/CHRO…
- CEO/Chairman o Presidente
A veces, algunos ocupan varios cargos o roles dentro de la estructura. Y, por supuesto, también existen otros muchos cargos, como el Foundry Manager que se encarga de las relaciones de la fabless con la fábrica, el Customer Srv, Recursos Humanos, Marketing, QA (control de calidad), Finanzas, Operaciones, etc. Aunque todos estos son menos relevantes en cuanto al diseño y el rumbo de la compañía, y generalmente actúan en etapas posteriores…
Es vital agilizar al máximo la estructura de una empresa. La complejidad y burocracia de algunas grandes corporaciones hacen más complicado tener cierta agilidad a la hora de tomar decisiones por los distintos estamentos.
La historia también muestra que es vital mantener una estabilidad y que los trabajadores se sientan cómodos con lo que hacen. Eso no solo implica obtener mayor productividad de ellos, sino también menor presión durante el trabajo y mejores resultados. Que rueden cabezas y despidos fáciles cuando algo sale mal no es la mejor política…
¿Gardening Leave?
Por otro lado, no me gustaría olvidar lo que se conoce como Garden Leave., algo muy popular en Fórmula 1 y también muy frecuente en las empresas de tecnología avanzada, especialmente las más grandes.
Es un término que hace referencia una práctica en la cual un empleado que va a abandonar la empresa (sea por cumplimiento de trabajo, renuncia,…), se mantiene durante el último periodo de estancia alejado de la información sensible, realizando otras tareas dentro de la empresa mientras mantiene su sueldo.
De este modo, si es contratado por otra empresa que sea competencia de la anterior, no podrá revelar demasiados detalles de los últimos proyectos, ya que lo han mantenido a un margen. Es algo muy importante también para evitar fugas de información sensible.
Cuando se producen los contratos en empresas punteras también suele haber cláusulas de confidencialidad y no competencia en los contratos. Incumplir éstas podría suponer serios problemas legales.
En EE.UU. es típico que un empleado importante se mantenga como consultor de la empresa, o asesor especial, durante el resto del tiempo que dure su contrato. Una vez expira será liberado y tiene vía libre para ser contratado por otra compañía. Aunque dependerá de la relevancia del empleado y del contrato…
¿Recultar equipo o remodelar?
Cuando se comienza desde cero una compañía o un diseño en el que no se tenía experiencia, lo primero es recultar al personal necesario. Generalmente, el arquitecto jefe es el que suele elegir a su personal. En ocasiones, si ya cuentan con experiencia en otras empresas, suelen pedir a rrhh que contraten a conocidos con los que ya han trabajado.
Sin embargo, cuando se está en una gran corporación, ya hay cientos o miles de empleados cualificados y con experiencia con los que contar para el nuevo proyecto. En estos casos, la labor del principal, es simplemente agruparlos y reorganizarlos de la mejor forma posible para conseguir el mejor resultado. Cada uno debe hubicarse en el puesto que mejor sabe desempeñar.
En ocasiones, trabajar con un mismo equipo durante mucho tiempo, pese a lo que se pueda pensar, no es la mejor opción. Puede que se arrastren problemas del pasado y se podría estar renunciando a gente muy inteligente que puede aportar cosas nuevas o cambiar la forma de pensar positivamente (o diferentes enfoques o formas de atajar los problemas). Eso resulta nutritivo.
¿Dónde se diseña?
Muchas personas creen que hay una oficina o un edificio donde se diseña todo el proyecto. Esto es así en las startups o pequeñas empresas. Sin embargo, grandes corporaciones como NVIDIA, Intel, AMD, Qualcomm, etc., tienen diferentes cuarteles generales repartidos por diferentes partes del mundo. En cada uno de ellos se está trabajando en una parte del proyecto y se deben coordinar entre sí.
Por ejemplo, en el caso de AMD Zen, había une quipo de metodología repartido por todo el mundo. El equipo de SoC estaba en parte en Austin y en parte en India. El de caché de coma flotante en Colorado, el front-end de ejecución del núcleo estaba en Austin. Por otro lado estaban los del front-end del proyecto K12 (ARM) en Sunnyvale. Además, en aquel momento se trasladó a un equipo que trabajaba paralelamente en la microarquitectura Excavator en Boston, donde se encargaron de finalizarla.
Esto agrega un plus de dificultad, ya que es un equipo distribuido. Ahora, con el fomento del teletrabajo, esto puede estar aún más fragmentado.
¿Cuál es la responsabilidad de un arquitecto?
Las responsabilidades del arquitecto de una CPU se pueden resumir en (suponiendo que se parte de la premisa de que la ISA ya está lista):
- Investigar el mercado para determinar las necesidades del procesador que necesita diseñar y definir el segmento (bajo consumo, alto rendimiento,…).
- Comienzan a realizarse preguntas sobre el diseño. Por ejemplo si será CMP o no, si tendrá SMT o Vertical Threading, si será una microarquitectura en orden o fuera de orden, superescalar o no, pipeline (número de etapas), cuál será el objetivo de frecuencia de reloj, si debe soportar predicción de saltos estática o dinámica, sobre la caché (número de niveles, tipo o política, tamaño,…), tamaño de la memoria principal que debería soportar, si se va a diseñar para sistemas SMP o monoprocesador, si se integra el controlador de memoria (cuántas MMUs debe integrar) o no, ancho de banda que admitirá, las especificaciones de potencia del chip, RAS (Reliability, Availability and Serviceability), tipo de bus, etc.
- Se debe crear un modelo de rendimiento de alto nivel (p.e. en C) para probar el chip y verificar si cumple con las especificaciones definidas o el objetivo marcado.
- Se divide el chip en varios bloques principales y se obtienen documentos de cada una de las partes en las que se deben definir su funcionalidad, número de etapas dentro de ella, etc. Estos documentos deben estar en manos del equipo de microarquitectos (RTL/diseñadores lógicos) para que comiencen a diseñarlas.
- Es importante conseguir retroalimentación constante de los arquitectos implicados con respecto a las rutas críticas dentro de los bloques e intentar si se puede hacer algo a nivel arquitectónico para resolver los problemas sin comprometer el rendimiento (bajar la frecuencia, aumentar las etapas de la pipeline,…).
- Obtener comentarios constantes de los diseñadores de circuitos y el personal de integración con respecto a la información a la potencia disipada y el área ocupada del chip. Si los números obtenidos quedan fuera de los límites establecidos en un comienzo, se deberá comprobar si se puede hacer algo para corregir la desviación sin comprometer demasiado el rendimiento (p.e.: reducir la caché,…).
- Trabajar con la gente del sistema para solventar cualquier problema a nivel más genérico.
- Crear un manual de referencia para el programador.
- Presentar las especificaciones en algunas conferencias para lograr atención y atraer a potenciales clientes.
- Patentar todas las ideas arquitectónicas novedosas que formaron parte del diseño del chip.
Algunos nombres históricos…
Por último, me gustaría recordar a algunos diseñadores principales históricos que han intervenido en algunos diseños de CPU y/o ISAs muy conocidas:
El nombre que aparece primero es el arquitecto principal. Los siguientes son los co-diseñadores o que participaron en el diseño como ingenieros destacados.
- DEC PDP-11/44, PDP-11/70, VAX 780, VAX 8800: no son procesadores, pero sí que contaron con algunos de los arquitectos más reputados de la época, como Bob Stewart. También había otros destacados como Butler Lampson, Chuck Thacker, Neil Wilhelm, o Nancy Kronenberg.
- MP944: Steve Geller y Ray Holt.
- Intel 4004: diseño de Ted Hoff, Federico Faggin, Masatoshi Shima, jefe de proyecto James S. Miller y los encargados de portar el diseño al floorplan para el silicio Jennifer S. Hernández y Jim Bergman.
- TI TMS0100: Gay Boone.
- Intel 8008: Mazor, Hoff y Hal Feeney.
- Zilog Z80: Federico Faggin y Ralph Ungermann.
- Motorola 6800: Tom Bennett, Jeff LaVell, Chuck Peddle, John Buchanan, Bill Lattin, Bill Mensch, así como otros como Link Young, Mike Wiles, Gene Schriber y Doug Powell.
- MOS Technology 6502: Chuck Peddle y Bill Mensch.
- Motorola 68000: Edward P. Stritter.
- Zilog Z8000: Bernard Peuto y Masatoshi Shima.
- DEC VAX: Richard Sites, Rich Witek.
- DEC Alpha 21064: Rich Witek y Dirk Meyer como co-arquitecto.
- DEC Alpha 21164: John Edmondson, JIm Keller y Pete Bannon.
- DEC Alpha 21264: Jim Keller y Dirk Meyer como co-arquitecto.
- IBM Cell: Peter Hofstee.
- HP PA-RISC v1.0: Michael Mahon y Bill Worley.
- HP PA-RISC v2.0: Jerry Hauck y Michael Mahon.
- IBM ACS: John Cocke, Herb Schorr, Frances Elizabeth Allen, Gene Amdahl, Brian Randell, Lynn Conway, Brian Randell, Herbert Schorr y Edward H. Sussenguth.
- IBM PowerPC ISA: Rich Oehler (IBM), Keith Diefendorff (Motorola), Ron Hochsprung (Apple), y John Sell (Apple).
- IBM POWER: Greg Grohoski y Rich Oehler.
- IBM RIOS: Greg Grohoski.
- IBM POWER 2: Greg GRohoski.
- IBM PowerPC 601: Charles Moore y John Munich.
- IBM PowerPC 603: Brad Burgess, Russ Reininger y Jim Kahle.
- IBM PowerPC 604: Mike Johnson.
- IBM PowerPC 750 (G3): Brad Burgess.
- IBM PowerPC 7400 (G4), 7460 (G4+): Brad Burgess y Mike Snyder.
- IBM PowerPC 620: Don Waldecker, Chin Ching Kau y Dave Levitan.
- IBM POWER 4: Jim Kahle y Chuck Moore, así como Frank Soltis.
- IBM POWER5: Frank Soltis.
- IBM PowerPC 970 (G5): Peter Sandon.
- SPARC v8 ISA: Robert Garner.
- TI SuperSPARC: Greg Blanck (Sun) y Steve Krueger (Texas Instruments).
- Ross HyperSPARC: Raju Vegesna y Jim Monaco.
- SPARC v9 ISA: Dave Ditzel, Joel Boney, Steve Chessin, Bill Joy, Steve Kleiman, Steve Kruger, Dave Weaver, Winfried Wilcke y Robert Yung.
- Hal SPARC64: Hisashige Ando, Winfried Wilcke y Mike Shebanow.
- UltraSPARC-I: Les Khon, Marc Tremblay, Guillermo Matarana y Robert Yung.
- UltraSPARC-III: Gray Lauterbach.
- INMOS Transputer: David May.
- Intel i960 y i960 CA: Glen Myers, Glenn Hinton y Frank Smith.
- Intel IA-64 (x86-32): John Crawford y Patrick Gelsinger.
- Intel Pentium I: Don Alpert, Jack Mills, Bob Dreyer, Ed Grochowski y Uri Weiser.
- Cyrix 6×86 (M1): Mark Bluhm y Ty Garibay.
- IDT/Centaur Winchip: Glenn Henry.
- NexGen Nx586: Mack McFarland, Greg Favor, Dave Stiles y Korbin Van Dyke.
- WinChip: Glenn Henry.
- AMD K5: Mike Johnson.
- AMD K6: Greg Favor.
- AMD K7 (Athlon): Dirk Meyer y Fred Weber.
- Intel P6 (Pentium Pro, Pentium II y Pentium III): Robert «Bob» Colwell como principal, Glenn Hinton y Dave Papworth, así como Andy Glew y Michael Fetterman. En el Pentium III (Katmai) también participó François Piednoel.
- Intel Pentium 4: Glen Hinton.
- Intel Pentium 4 Extreme Edition: François Piednöel.
- Intel Pentium M: Simcha Gochman.
- ISA AMD64 o x86-64 (Intel la llama EM64T): Kevin McGrath y Dave Christie.
- AMD K8 (Opteron y Athlon64): Jim Keller y Fred Weber adaptando el diseño del K8 para el Athlon64 y derivados. Dirk Meyer también colaboraría.
- AMD Excavator: Harry Fair, y su equipo, se encargaron de finalizarlo.
- Elbrus: Sergei Alekseyevich Lébedev, Burtsev Vsevolod Sergeevich y Boris Artashesovich Babayan.
- VDragon: Bong-Foo.
- ZISC36: Guy Paillet y el Dr. Pascal Tannhof.
- ISA MIPS: John Hennessy. Con diseños como:
- MIPS-I y II de Craig Hansen.
- MIPS-III de Earl Killian.
- MIPS-IV de Peter Hsu.
- MIPS-V de Earl Killian con ayuda de Bill Huffman y Peter Hsu.
- R4000 de Peter Davies, Earl Killian y Tom Riordan.
- R8000 de Peter Hsu.
- R10000 de Chris Rowen y Ken Yeager.
- R5000 y RM7000 de Earl Killian y Tom Riordan.
- RISC ISA: David Patterson (de la que deriva RISC-V).
- Motorola 88110: Keith Diefendorff, Willie Anderson, y Bill Moyer.
- Motorola 68060: Joe Circello.
- Apple A4: Jim Keller.
- Apple A5X, A7, A9, A11, A12 y A12X: Manu Gulati (ex de AMD, Broadcom, y responsable de los SoCs de Google y fundador de NUVIA).
- AMD Zen (Ryzen y EPYC): Jim Keller lideró el proyecto y solo tomó algunas decisiones técnicas, pero no diseñó diagramas de bloques, ni escribió nada en RTL. De la parte técnica se ocuparon decenas de ingenieros, destacando personas muy relevantes como Mike Clark , Leslie Barnes, Jay Fleischman, Steve Hale y Suzanne Plummer (estos dos encargados del front-end), etc. Algunas de ellas han estado en esta empresa durante 25 a 30 años, por lo que cuentan con una gran experiencia.
- AMD K12 (ARM): Jim Keller.
- AMD Zen+, Zen 2 y Zen 3: Mike Clark y Sam Naffziger. A pesar de que Jim Keller ya no estaba en la empresa, estos productos también eran «rescrituras» y fruto de parte de su reorganización y hoja de ruta. A partir de Zen 4 será otra cosa…
- Intel Skulltrail, Prescott, Penryn, Nehalem, Sandy Bridge, Ivy Bridge, Haswell, Broadwell, Skylake y Kaby Lake: François Piednöel.
- ARM ISA: Sophie Wilson y Steve Furber.
- ARM Cortex-A8: Gerard Williams III (también responsable de los Apple A7 a los A12X, así como el TI TMS470, y co-fundador de NUVIA junto con su compañero Gulati).
- RISC-V ISA: Universidad de Berkeley (CA), y de código abierto.
- AMD Zen 5 (Ryzen 8000 Series y EPYC): Michael Clarck, como arquitecto principal, y David Suggs como arquitecto jefe.