Registros del procesador Intel 8086: del chip a los transistores

El Intel 8086 es uno de los chips de computadora más influyentes jamás fabricados. Creó la arquitectura x86 que domina las computadoras de escritorio y servidores modernas. He realizado ingeniería inversa en un 8086 basado en imágenes de cristales, y en este artículo describiré la implementación de un archivo de registro (conjunto de registros).





Crystal 8086. La ubicación de almacenamiento de los registros está marcada. Los registros superiores son utilizados por el bloque de interfaz de bus para el acceso a la memoria, mientras que los registros inferiores de propósito general son utilizados por el bloque de ejecución. El búfer de comando es una cola de 6 bytes de comandos solicitados previamente.



La foto muestra una imagen del procesador 8086 bajo un microscopio. Se ve una capa de metal en la parte superior del chip, debajo de la cual se oculta el silicio. Ubicado en el borde exterior de los cables de conexión, conecta las almohadillas del chip a las 40 clavijas exteriores del chip.



Se enmarcan quince registros 8086 de 16 bits y seis bytes de la cola de solicitud previa de comandos ( captación previa de código ). Los registros ocupan una parte importante del cristal, aunque en total se escribirán en solo 36 bytes. Debido a las limitaciones de espacio, los primeros microprocesadores tenían relativamente pocos registros. En comparación, los chips de procesador modernos tienen kilobytes de registros y megabytes de cachés.



El 8086 fue uno de los primeros microprocesadores en implementar la captación previa de código, pero el Motorola 68000 (1979) tenía un búfer de captación previa de 4 bytes un poco antes. En los mainframes, la captación previa estaba disponible con IBM Stretch (1961), CDC 6600 (1964) e IBM System / 360 Model 91 (1966).



El número de registros en un procesador moderno es difícil de calcular. El único número exacto que encontré fue en el libro Anatomía de un microprocesador de alta velocidad"(1997), que describe en detalle el procesador AMD K6. Debido al cambio de nombre de los registros, los procesadores modernos tienen muchos más registros físicos que arquitectónicos (los que son visibles para el programador), y la cantidad de registros físicos no está indicada en la documentación. K6 tiene, excepto ocho registros x86 propósito general, había 16 registros de trabajo de microarquitectura para



renombrar. Los procesadores con soporte AVX-512 tienen 32 registros de 512 bits, es decir, 2 KB de registros están reservados para esta función. En tales casos, el tamaño de los registros es aún más difícil de calcular. En cuanto al tamaño de la caché, luego, en procesadores avanzados, su volumen alcanza los 77 MB .



Cómo se implementan los registros en silicio



Comenzaré describiendo cómo se construye el 8086 a partir de transistores N-MOS. Luego explicaré cómo se hace un inversor, cómo se almacenan bits individuales con los inversores y cómo se hace un registro.



El 8086, como otros chips de la época, se basó en transistores N-MOS. Estos chips consistían en un sustrato de silicio, en el que se difundían impurezas de arsénico o boro para formar transistores. Por encima del silicio, los conductores de polisilicio formaban las puertas de los transistores y conectaban todos los componentes entre sí. La capa de metal ubicada aún más arriba contenía conductores adicionales. En comparación, los procesadores modernos usan tecnología CMOS , que combina transistores N-MOS y P-MOS, y contiene muchas capas de metal.



El siguiente diagrama muestra un inversorque consta de un transistor N-MOS y una resistencia. Cuando el voltaje de entrada es bajo, el transistor está apagado, por lo que la resistencia pull-up eleva la salida. Cuando el voltaje de entrada es alto, el transistor se enciende, conecta la tierra y la salida, bajando la salida. Por tanto, la señal entrante se invierte.



De hecho, la resistencia pull-up en una válvula N-MOS es un tipo especial de transistor. Un transistor agotado se comporta como una resistencia mientras es más compacto y eficiente.





El diagrama muestra cómo está hecho un inversor a partir de un transistor y una resistencia. La foto muestra la implementación en el chip. La capa de metal se ha eliminado para exponer el silicio y el polisilicio.



La foto de arriba muestra cómo está hecho físicamente el inversor 8086. Las áreas rosadas son de silicio con impurezas que lo hacen conductor, y las líneas de color cobre son de polisilicio en la parte superior. El transistor aparece donde el polisilicio se cruza con el silicio. El polisilicio forma la puerta del transistor y las secciones de silicio en ambos lados proporcionan una fuente y un drenaje. Un gran rectángulo de polisilicio forma una resistencia pull-up entre +5 V y la salida. Entonces, el circuito del chip es el mismo que el del inversor. Los circuitos como estos pueden verse bajo un microscopio y someterse a ingeniería inversa.



El bloque de construcción del registro son dos inversores en el circuito de retroalimentación que almacenan un bit (ver más abajo). Si el conductor superior es 0, el inversor derecho emitirá 1 al conductor inferior. El inversor izquierdo luego emitirá 0 al conductor superior, completando el ciclo. Por lo tanto, el circuito es estable y "recuerda" 0. Y viceversa, si el conductor superior es 1, cambiará a 0 en el conductor inferior y volverá a 1 en el superior. Como resultado, la cadena puede almacenar 0 o 1, formando una memoria de un bit.





El 8086 tiene dos inversores emparejados que almacenan un bit en un registro. El circuito está establemente en el estado 0 o 1.



Se agregan tres transistores al par de inversores para crear una celda de registro utilizable. Un transistor selecciona una celda para leer, el segundo selecciona una celda para escribir y el tercero amplifica la señal al leer. En el centro del circuito de abajo, dos inversores almacenan el bit. Para leer el bit, la corriente se aplica al bus rojo. Esto conecta la salida del inversor a la línea de bits a través de un transistor amplificador. Para escribir un bit, se aplica corriente a la línea roja que conecta la línea de bit a los inversores. Al aplicar señales de alta corriente de 0 o 1 a la línea de bits (y, en consecuencia, al bit almacenado), obligamos a los inversores a cambiar al valor deseado. Tenga en cuenta que la línea de bits se utiliza tanto para lectura como para escritura.



Otros procesadores utilizan ubicaciones de registro ligeramente diferentes. El 6502 usa un transistor adicional en el circuito de retroalimentación del inversor para interrumpir el circuito cuando se escribe un nuevo valor. El Z80 escribe en ambos inversores al mismo tiempo, lo que "facilita" el cambio, pero requiere dos cables para escribir. El 8086 tiene un transistor de ganancia en cada ubicación de registro para lectura, mientras que otros procesadores leen la salida de ambos inversores y usan un amplificador diferencial externo para amplificar la señal. La celda base del registro 8086 consta de 7 transistores (7T), que es más que una celda de RAM estática típica que usa 6 o 4 transistores, pero usa solo una línea de bits, no dos diferentes. La memoria dinámica (DRAM) es mucho más eficiente y utiliza un solo transistor y condensador,sin embargo, sin actualizar los datos, se perderán.





Diagrama esquemático de una celda de registro que almacena un bit. El archivo de registro se crea a partir de una matriz de dichas celdas.



El archivo de registro consta de una matriz de celdas de registro similar a la descrita anteriormente. La matriz tiene 16 celdas de ancho porque los registros almacenan valores de 16 bits. Cada registro está ubicado horizontalmente, por lo que el bus de lectura o escritura selecciona todas las celdas de un registro en particular. Las 16 líneas de bits verticales forman un solo bus, por lo que los 16 bits del registro seleccionado se leen y escriben en paralelo.



La foto siguiente muestra un archivo de registro general 8086 ampliado que muestra una matriz de celdas de registro: 16 columnas y 8 filas, 8 registros de 16 bits. Luego se da el incremento de una ubicación de registro en el archivo. Explicaré cómo se implementa esta celda.





8086 ( 16- ), . , .



El 8086 está hecho de conductores de polisilicio y silicio dopado con conductores de metal en la parte superior. La foto de la izquierda a continuación muestra los conductores metálicos verticales de la celda de registro. Los cables de tierra, alimentación y bus de bits están marcados (el cable restante cruza el archivo de registro, pero no lo contacta). En la foto de la derecha, la capa de metal se disuelve para que se puedan ver el polisilicio y el silicio. Los buses de lectura y escritura son conductores horizontales de polisilicio. Dado que el chip tiene una sola capa de metal, se usa metal en los registros para los buses verticales y polisilicio para los horizontales para que no se crucen entre sí). El metal y el silicio a través de las juntas aparecen como círculos más brillantes en la foto de metal y como círculos en la foto de silicio.





Registrar la ubicación de almacenamiento. La foto de la izquierda muestra la capa de metal y, a la derecha, las capas correspondientes de polisilicio y silicio.



El siguiente diagrama muestra la correspondencia del esquema físico de la celda de registro con el principal. Los inversores constan de transistor A y B y registros. Los transistores C, D y E están formados por piezas de polisilicio marcadas. La línea de bits no es visible porque está ubicada en la capa de metal. Tenga en cuenta que el diseño de la celda de memoria está muy optimizado para minimizar el tamaño. También tenga en cuenta que el transistor A es mucho más pequeño que los demás. El inversor A tiene una corriente de salida bastante baja, por lo que la línea de bits puede superarla al escribir.





Registrar celda de 8086 con el circuito correspondiente



Soporte para registros de 8 bits



Si observa de cerca el cristal, puede ver que algunas de las celdas de registro tienen una estructura ligeramente diferente. A la izquierda está la ubicación del registro que ya hemos discutido, y a la derecha hay un par de ubicaciones de registro con dos buses de escritura en lugar de uno. En la foto de la izquierda, el bus de escritura cruza el silicio en ambas celdas de registro. En la foto de la derecha, el bus de "escritura derecha" cruza el silicio de la derecha, pero corre entre el silicio de la izquierda. Por el contrario, la línea de escritura izquierda cruza el silicio en el lado izquierdo y corre entre las regiones de silicio en el lado derecho. Por tanto, un bus controla la escritura del bit derecho, mientras que el otro controla la escritura del izquierdo. En un registro de 16 bits, las partes intercaladas de 8 bits se pueden escribir por separado de esta manera.



La celda de registro en el cristal no se repite de manera uniforme; cada segunda celda es una imagen especular de la anterior. Esto aumenta la densidad de la celda de registro: el riel de alimentación que corre entre las dos celdas reflejadas puede alimentar a ambas (lo mismo ocurre con la tierra). Las repeticiones reflejadas reducen a la mitad el número de rieles de potencia y de tierra necesarios.



Aunque los diagramas de bloques suelen mostrar cómo los registros de 16 bits se dividen en mitades izquierda y derecha, en el mundo real los bits de cada lado se intercalan en lugar de mantener siempre la primera parte de 8 bits a la izquierda y la segunda a la derecha. Esta implementación simplifica la tarea que a veces surge de intercambiar dos mitades de una palabra de 16 bits. Uno de esos casos es leer o escribir en la memoria sin alineación. Otra es una operación ALU que usa la parte superior del registro, por ejemplo, AH. Intercambiar los bits entre las mitades derecha e izquierda requeriría tirar cables largos entre todos los bits de las mitades de la palabra. Sin embargo, en una disposición alterna, para intercambiar dos mitades de una palabra, es necesario intercambiar cada par de bits adyacentes, lo que no requiere cables largos. En otras palabras,El registro intercalado del 8086 facilita la disposición de los conductores para intercambiar las dos mitades de una palabra.





Dos pares de celdas de memoria con diferentes circuitos. Las celdas de la izquierda tienen un bus de escritura y las de la derecha tienen buses de escritura separados para los bits izquierdo y derecho.



¿Por qué algunos registros tienen dos buses de escritura y otros uno? La razón es que el 8086 tiene registros de 16 bits, pero se puede acceder a cuatro de ellos como 8 bits como se muestra a continuación. Por ejemplo, se puede acceder al acumulador A de 16 bits como registros AH (parte de orden superior del acumulador) de 8 bits y AL (parte de orden inferior) de 8 bits. La implementación de registros con dos buses de control de escritura permite escribir en cada mitad del registro por separado.



Si el archivo de registro solo admite registros de 16 bits en lugar de 8 bits, el procesador podría funcionar, pero de manera menos eficiente. Las escrituras en las mitades de 8 bits se realizarían leyendo los 16 bits, cambiando la mitad de 8 bits y escribiendo los 16 bits. Como resultado, en lugar de acceder a un registro, la llamada iría a tres. En este caso, no es necesario que el archivo de registro admita de alguna manera la lectura de 8 bits, ya que la mitad innecesaria puede simplemente ignorarse.





Registros de propósito general en el 8086. Los registros A, B, C y D se pueden dividir en dos mitades de 8 bits.



Registros multipuerto



Hasta ahora hemos cubierto ocho “registros inferiores” de propósito general. El 8086 también tiene siete "registros superiores" que se utilizan para el acceso a la memoria, incluidos los infames registros de segmento . Estos registros tienen un esquema de operación multipuerto más complejo, lo que permite realizar varios procesos de lectura y escritura simultáneamente. Por ejemplo, un archivo de registro multipuerto le permite leer un contador de programa, un registro de segmento y escribir otro registro de segmento, todo al mismo tiempo.



El siguiente diagrama de bloques es diferente de la mayoría de los diagramas de bloques.para 8086, porque muestra la implementación física real del procesador, y no lo que imagina el programador. En particular, el diagrama muestra dos "registros de comunicación interna" entre los registros del módulo de interfaz de bus (derecha), junto con registros de segmento que coinciden con los 7 registros que se pueden ver en el chip. Los registros temporales que se muestran a continuación son físicamente parte de la ALU, por lo que no los cubriré en este artículo.







El libro " Designing Modern Processors " analiza los sistemas de registro complejos en un procesador desde la década de 2000. Dice que la complejidad de los circuitos va rápidamente más allá de los tres puertos, y algunos procesadores avanzados tienen archivos de registro con 20 o más puertos.



La celda de registro multipuerto a continuación se basa en el mismo circuito de dos inversores, sin embargo, tiene tres líneas de bits (no una como en el caso anterior) y cinco líneas de control (en lugar de dos). Tres buses de lectura le permiten leer el contenido de una celda de registro en cualquiera de las tres líneas de bits, y dos buses de escritura permiten que el bit A o C escriba en una celda de registro.





Celda de registro multipuerto en procesador 8086



A primera vista, el archivo de registro 8086 parece un conjunto homogéneo de registros, pero una mirada más cercana revela que cada registro está optimizado dependiendo de su función. Algunos de ellos son registros simples de 16 bits y están ubicados de manera más compacta. Se puede acceder a los otros registros de 16 bits como dos registros de 8 bits, lo que requiere otro bus de control. Los registros más complejos tienen dos o tres puertos para leer y uno o dos para escribir. En cada caso, la implementación física de la celda de registro está cuidadosamente diseñada para ocupar el menor espacio posible y, por lo tanto, la forma de los transistores suele ser compleja. Los ingenieros de Intel ajustaron el diseño de los registros lo más estrictamente posible para que quepan todos en el espacio disponible para ellos.



Los registros superiores tienen un número diferente de puertos para lectura y escritura: dos registros con 3 buses de lectura y 2 de escritura, un registro con 2 buses de lectura y 2 de escritura, cuatro registros con 2 buses de lectura y 1 de escritura. Los primeros tres registros son probablemente el contador de programa, un registro temporal indirecto y un registro de operando temporal. Los últimos cuatro son probablemente los registros de segmento SS, DS, SS y ES. También hay tres registros de búfer de captación previa de instrucciones, cada uno con un bus de lectura y otro de escritura.



El procesador 8088 utilizado en las PC IBM originales era prácticamente idéntico al 8086, excepto que tenía un bus externo de 8 bits en lugar de uno de 16 bits, por lo que el sistema era menos costoso. El tamaño del búfer de captación previa del 8088 era de 4 bytes en lugar de 6, probablemente porque 4 bytes eran suficientes para el bus de memoria más lento del 8088.



A diferencia del 8086, los registros de captación previa del 8088 admiten la escritura independiente en mitades de 8 bits (similar a los registros A, B, C y D del 8088, solo que estas celdas se ven diferentes). Esto se debe a que el 8088 solicitó los comandos un byte a la vez, y no una palabra a la vez, debido al bus estrecho. Por lo tanto, los registros de captación previa deben admitir la escritura de bytes, mientras que el 8086 admite la captación previa de palabras.





Archivo de registro superior que consta de diez registros de 16 bits. La foto muestra silicio y polisilicio. Líneas rojas verticales: restos de la capa de metal eliminada. Clickable.



Conclusión



Aunque el procesador 8086 tiene 42 años, todavía tiene un impacto significativo en las computadoras modernas, ya que la arquitectura x86 todavía se usa con mucha frecuencia en la actualidad. Los registros 8086 todavía existen en los ordenadores x86 modernos, aunque hoy ya tienen 64 bits de longitud, y además de estos registros hay muchos otros.



El cristal 8086 es muy interesante de estudiar porque sus transistores se pueden ver bajo un microscopio. En un momento fue un procesador complejo, con 29,000 transistores, pero lo suficientemente simple como para rastrear todos los circuitos y comprender cómo funcionan.



Ver también:






All Articles