Ahora que sabemos cómo funcionan los procesadores a un alto nivel, es hora de profundizar en el proceso de diseño de sus componentes internos. Este es el segundo artículo de una serie sobre desarrollo de procesadores. Te recomiendo que estudies la primera parte primero, para que entiendas los conceptos que se detallan a continuación.
Parte 1: Conceptos básicos de arquitectura informática (arquitecturas de conjuntos de instrucciones, almacenamiento en caché, canalizaciones, hyperthreading)
Parte 2: proceso de diseño de la CPU (circuitos eléctricos, transistores, elementos lógicos, sincronización)
Parte 3: Diseño y fabricación física del chip (VLSI y fabricación de silicio)
Parte 4: Tendencias actuales e importantes direcciones futuras en la arquitectura de computadoras (mar de aceleradores, integración tridimensional, FPGA, Near Memory Computing)
Como ya sabrá, los procesadores y la mayoría de los otros dispositivos digitales están formados por transistores. La forma más fácil de percibir el transistor como un interruptor controlado con tres contactos. Cuando se enciende el obturador, la corriente eléctrica puede fluir a través del transistor. Cuando el obturador está apagado, la corriente no puede fluir. El obturador es como un interruptor de luz en una habitación, solo que es mucho más pequeño, más rápido y puede controlarse eléctricamente.
Hay dos tipos principales de transistores utilizados en los procesadores modernos: pMOS (PMOS) y nMOS (NMOS). El transistor nMOS pasa corriente cuando la puerta está cargada o tiene un voltaje alto, y el transistor pMOS pasa corriente cuando la puerta está descargada o tiene un voltaje bajo. Al combinar estos tipos de transistores de forma complementaria, podemos crear elementos lógicos CMOS. En este artículo, no analizaremos en detalle las características del funcionamiento de los transistores, pero tocaremos esto en la tercera parte de la serie.
Un elemento lógico es un dispositivo simple que recibe señales de entrada, realiza una operación y genera un resultado. Por ejemplo, el elemento AND (AND) activa su señal de salida si y solo si todas las entradas de compuerta están activadas. El inversor, o el elemento NOT (NOT), activa su salida si la entrada está desactivada. Puede combinar estos dos obturadores y obtener un elemento NAND que active la salida, si y solo si ninguna de las entradas está activada. Hay otros elementos con su funcionalidad lógica, por ejemplo, OR (OR), OR-NOT (NOR), OR exclusivo (XOR) y OR exclusivo con inversión (XNOR).
A continuación se muestra cómo se ensamblan dos elementos simples a partir de transistores: un inversor y NAND. En el inversor, el transistor pMOS (arriba) está conectado a la alimentación y el transistor nMOS (abajo) está conectado a tierra. En la designación de los transistores pMOS hay un pequeño círculo conectado a la puerta. Dijimos que los dispositivos pMOS pasan corriente cuando la entrada está apagada, y los dispositivos nMOS pasan corriente cuando la entrada está encendida, por lo que es fácil ver que la señal de salida (Out) siempre será la opuesta a la señal de entrada (In). Mirando el elemento NAND, vemos que requiere cuatro transistores, y que la salida siempre estará deshabilitada si al menos una de las entradas está apagada. Conectar transistores de esta manera para formar redes simples es el mismo proceso que se utiliza para diseñar elementos lógicos más complejos y otros circuitos dentro de los procesadores.

Los bloques de construcción en forma de elementos lógicos son tan simples que es difícil entender cómo se convierten en una computadora que funciona. El proceso de diseño consiste en combinar varios elementos para crear un dispositivo pequeño que pueda realizar una función simple. Luego puede combinar muchos de estos dispositivos para crear algo que realice una función más compleja. El proceso de combinar componentes individuales para crear una estructura de trabajo es exactamente el proceso que se usa hoy para crear chips modernos. La única diferencia es que un chip moderno consta de
miles de millones de transistores.
Como un pequeño ejemplo, tomemos un sumador simple: un sumador completo de 1 bit. Recibe tres señales de entrada: A, B y Carry-In (señal de entrada de transferencia), y crea dos señales de salida: Sum (sum) y Carry-Out (señal de salida de transferencia). El circuito más simple utiliza cinco elementos lógicos, y pueden conectarse entre sí para crear un sumador de cualquier tamaño. En los esquemas modernos, este proceso se mejora optimizando parte de la lógica y las señales de transferencia, pero los principios fundamentales siguen siendo los mismos.
La salida de Sum es A o B, pero nunca a ambos, o hay una señal de entrada de entrada, y luego A y B se activan o ambos se desactivan. La salida de transferencia es un poco más complicada. Está activo cuando A y B están encendidos al mismo tiempo, o hay un Carry-in y uno de A o B está encendido. Para conectar varios sumadores de 1 bit para crear un sumador más amplio, solo necesitamos conectar la ejecución del bit anterior a la transferencia del bit actual. Cuanto más complicado es el circuito, más confusa es la lógica, pero esta es la forma más fácil de sumar dos números. Los procesadores modernos usan sumadores más sofisticados, pero sus circuitos son demasiado complicados para tal revisión. Además de los sumadores, los procesadores también contienen dispositivos para dividir, multiplicar y versiones de todas estas operaciones de punto flotante.
Tal combinación de secuencias de elementos para realizar una función en las señales de entrada se denomina
lógica combinatoria . Sin embargo, este no es el único tipo de lógica utilizada en las computadoras. No será de mucha utilidad si no podemos almacenar datos o rastrear el estado. Para poder guardar datos, necesitamos lógica secuencial.
La lógica secuencial se construye conectando perfectamente los inversores y otros elementos lógicos para que sus salidas transmitan señales de retroalimentación a la entrada de los elementos. Dichos bucles de retroalimentación se utilizan para almacenar un bit de datos y se denominan
RAM estática o SRAM. Esta memoria se llama RAM estática en oposición a la RAM dinámica (DRAM) porque los datos almacenados siempre están conectados directamente a voltaje positivo o tierra.
La forma estándar de implementar un bit SRAM es con el circuito de 6 transistores que se muestra a continuación. La señal superior marcada como WL (
línea de palabras ) es la dirección, y cuando se enciende, los datos almacenados en esta celda de 1 bit se transfieren a la
línea de bits marcada como BL. La salida BLB se llama
Bit Line Bar ; este es solo el valor invertido de la línea de bits. Debe reconocer los dos tipos de transistores y comprender que M3 con M1, como M4 con M2, forman un inversor.
SRAM se utiliza para construir cachés y registros ultrarrápidos dentro de procesadores. Esta memoria es muy estable, pero requiere de seis a ocho transistores para almacenar cada bit de datos. Por lo tanto, en comparación con DRAM, es extremadamente costoso en términos de costo, complejidad y área en el chip. La RAM dinámica, por otro lado, almacena datos en un pequeño condensador, en lugar de usar puertas lógicas. Se llama dinámico, porque el voltaje en el condensador puede variar significativamente, ya que no está conectado a la alimentación ni a tierra. Solo se utiliza un transistor para acceder a los datos almacenados en el condensador.
Dado que la DRAM requiere solo un transistor por bit y es altamente escalable, puede empaquetarse densamente y de forma económica. La desventaja de la DRAM es que la carga en el condensador es tan pequeña que debe actualizarse constantemente. Es por eso que después de apagar la computadora, todos los condensadores se descargan y se pierden los datos en la RAM.
Empresas como Intel, AMD y Nvidia no publican diagramas de circuitos de sus procesadores, por lo que es imposible mostrar circuitos eléctricos tan completos para los procesadores modernos. Sin embargo, este simple sumador le permite tener la idea de que incluso las partes más complejas del procesador se pueden dividir en elementos lógicos y de memoria, y luego en transistores.
Ahora que sabemos cómo se fabrican algunos componentes del procesador, necesitamos descubrir cómo armar todo y sincronizarlo. Todos los componentes clave del procesador están conectados a una
señal de reloj . Alternativamente tiene alto y bajo voltaje, cambiándolo con un intervalo dado, llamado
frecuencia . La lógica dentro del procesador generalmente cambia los valores y realiza los cálculos cuando la señal del reloj cambia el voltaje de bajo a alto. Al sincronizar todas las partes, podemos garantizar que los datos siempre lleguen en el momento adecuado para que no haya fallas en el procesador.
Es posible que haya escuchado que puede aumentar la velocidad del reloj para aumentar el rendimiento del procesador. Este aumento de rendimiento se debe al hecho de que los transistores de conmutación y la lógica dentro del procesador comienzan a ocurrir con más frecuencia de lo previsto. Como hay más ciclos por segundo, se puede hacer más trabajo y el procesador tendrá un rendimiento mejorado. Sin embargo, esto es cierto hasta cierto punto. Los procesadores modernos generalmente operan a frecuencias de 3.0 GHz a 4.5 GHz, y este valor no ha cambiado mucho en los últimos diez años. Así como una cadena de metal no es más fuerte que su eslabón más débil, un procesador no puede funcionar más rápido que su parte más lenta. Al final de cada ciclo de reloj, cada elemento del procesador debe completar su trabajo. Si algunas partes aún no lo han completado, entonces la señal del reloj es demasiado rápida y el procesador no funcionará. Los diseñadores llaman a esta parte más lenta el
Camino Crítico, y es él quien determina la frecuencia máxima con la que el procesador puede trabajar. Por encima de cierta frecuencia, los transistores simplemente no tienen tiempo para cambiar lo suficientemente rápido y comenzar a fallar o producir valores de salida incorrectos.
Al aumentar el voltaje del procesador, podemos acelerar la conmutación de los transistores, pero esto también funciona hasta cierto límite. Si se aplica demasiado voltaje, corremos el riesgo de quemar el procesador. Cuando aumentamos la frecuencia o el voltaje del procesador, siempre comienza a irradiar más calor y consume más energía. Esto se debe a que la potencia del procesador es directamente proporcional a la frecuencia y proporcional al cuadrado del voltaje. Para determinar el consumo de energía del procesador, consideramos cada transistor como un pequeño condensador que necesita cargarse o descargarse cuando cambia su valor.
La fuente de alimentación es una parte tan importante del procesador que, en algunos casos, hasta la mitad de los contactos físicos del chip solo se pueden usar para alimentación o conexión a tierra. Algunos chips a plena carga pueden consumir más de 150 amperios, y con toda esta corriente necesita ser controlado con mucho cuidado. A modo de comparación: el procesador central genera más calor por unidad de área que un reactor nuclear.
La señal de reloj en los procesadores modernos toma alrededor del 30-40% de su potencia total, porque es muy compleja y debe administrar muchos dispositivos diferentes. Para conservar energía, la mayoría de los procesadores de baja potencia desactivan partes del chip cuando no están en uso. Esto se puede hacer apagando el reloj (este método se llama Clock Gating) o apagando la energía (Power Gating).
Las señales de reloj crean otra dificultad en el diseño del procesador: dado que sus frecuencias crecen constantemente, las leyes de la física comienzan a influir en el trabajo. A pesar de la velocidad extremadamente alta de la luz, no es lo suficientemente grande para los procesadores de alto rendimiento. Si conecta una señal de reloj a un extremo del chip, cuando la señal llegue al otro extremo, no estará sincronizada en una cantidad significativa. Para sincronizar todas las partes del chip, la señal del reloj se distribuye utilizando el llamado H-Tree. Esta es una estructura que garantiza que todos los puntos finales estén exactamente a la misma distancia del centro.

Puede parecer que el diseño de cada transistor individual, señal de reloj y contacto de potencia en el chip es una tarea extremadamente monótona y difícil, y esto es realmente así. Aunque miles de ingenieros trabajan para compañías como Intel, Qualcomm y AMD, no podrían diseñar manualmente todos los aspectos del chip. Para diseñar chips de esta escala, utilizan muchas herramientas sofisticadas que generan automáticamente diseños y circuitos eléctricos. Dichas herramientas generalmente obtienen una descripción de alto nivel de lo que debe hacer el componente y determinan la mejor configuración de hardware que cumpla con estos requisitos. Recientemente, ha surgido una dirección de desarrollo llamada
Síntesis de alto nivel , que permite a los desarrolladores especificar la funcionalidad necesaria en el código, después de lo cual las computadoras determinan la mejor manera de lograrlo en el equipo.
De la misma manera que puede describir los programas de computadora a través del código, los diseñadores pueden describir los dispositivos de hardware con código. Idiomas como Verilog y VHDL permiten a los diseñadores de equipos expresar la funcionalidad de cualquier circuito que creen. Después de realizar simulaciones y verificar dichos proyectos, se pueden sintetizar en transistores específicos, de los cuales consistirá el circuito eléctrico. Aunque la fase de verificación puede no parecer tan emocionante como diseñar un nuevo caché o kernel, es mucho más importante que ellos. Por cada ingeniero de diseño contratado por una empresa, puede haber cinco o más ingenieros de verificación.
La verificación de un nuevo proyecto a menudo requiere más tiempo y dinero que crear el chip en sí. Las empresas gastan tanto tiempo y dinero en la verificación, porque después de enviar el chip a producción, no se puede arreglar. En caso de error en el software, puede liberar el parche, pero el equipo funciona de manera diferente. Por ejemplo, Intel descubrió un
error en el módulo de división de coma flotante de algunos chips Pentium y, como resultado, resultó en pérdidas equivalentes a los actuales $ 2 mil millones.
Es difícil comprender que puede haber varios billones de transistores en un chip y comprender lo que hacen todos. Si divide el chip en sus componentes internos individuales, se vuelve un poco más fácil. Los elementos lógicos están compuestos por transistores, los elementos lógicos se combinan en módulos funcionales que realizan una tarea específica, y estos módulos funcionales están conectados entre sí para formar la arquitectura de la computadora que discutimos en la primera parte de la serie.
La mayor parte del trabajo de diseño está automatizado, pero lo anterior nos permite darnos cuenta de lo compleja que es la nueva CPU que acabamos de comprar.
En la segunda parte de la serie, hablé sobre el proceso de diseño de la CPU. Hablamos de transistores, puertas lógicas, señales de potencia y reloj, síntesis de diseño y verificación. En la tercera parte, descubriremos qué se requiere para la producción física del chip. A todas las empresas les encanta alardear de lo moderno que es su proceso de fabricación (Intel 10nm, Apple y AMD 7nm, etc.), pero ¿qué significan realmente estos números? Hablaremos de esto en la próxima parte.
Lectura recomendada