De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

El microcódigo es una técnica de diseño de procesador que interpone una capa de organización de la computadora entre el hardware de la CPU y la arquitectura del conjunto de instrucciones visible del programador de la computadora. [1] Como tal, el microcódigo es una capa de instrucciones a nivel de hardware que implementan instrucciones de código de máquina de nivel superior o secuenciación de máquina de estado interna en muchos elementos de procesamiento digital . El microcódigo se usa en unidades de procesamiento central de propósito general , aunque en las CPU de escritorio actuales, es solo una ruta de respaldo para los casos que la unidad de control cableada más rápida no puede manejar. [2]

El microcódigo normalmente reside en una memoria especial de alta velocidad y traduce las instrucciones de la máquina, los datos de la máquina de estado u otra entrada en secuencias de operaciones detalladas a nivel de circuito. Separa las instrucciones de la máquina de la electrónica subyacente para que las instrucciones se puedan diseñar y modificar con mayor libertad. También facilita la construcción de instrucciones complejas de varios pasos, al tiempo que reduce la complejidad de los circuitos de la computadora. La escritura de microcódigo a menudo se denomina microprogramación y el microcódigo en una implementación de procesador particular a veces se denomina microprograma .

Más extensa microcoding permite a las pequeñas y simples microarquitectura a emular arquitecturas más potentes con mayor longitud de la palabra , más unidades de ejecución y así sucesivamente, que es una forma relativamente sencilla de lograr la compatibilidad de software entre los diferentes productos en una familia de procesadores.

Algunos proveedores de hardware, especialmente IBM , utilizan el término microcódigo como sinónimo de firmware . De esa manera, todo el código dentro de un dispositivo se denomina microcódigo independientemente de que sea un microcódigo o un código de máquina ; por ejemplo, se dice que las unidades de disco duro tienen su microcódigo actualizado, aunque normalmente contienen tanto microcódigo como firmware. [3]

Resumen [ editar ]

La capa más baja en la pila de software de una computadora es tradicionalmente instrucciones de código de máquina sin procesar para el procesador. El hardware del procesador y, en los procesadores microcodificados, el microcódigo busca y ejecuta esas instrucciones. Para evitar confusiones, cada elemento relacionado con el microprograma se diferencia por el prefijo micro : microinstrucción, microensamblador, microprogramador, microarquitectura , etc.

Los ingenieros normalmente escriben el microcódigo durante la fase de diseño de un procesador, almacenándolo en una estructura de memoria de solo lectura (ROM) o matriz lógica programable (PLA) [4] , o en una combinación de ambas. [5] Sin embargo, también existen máquinas que tienen algunos o todos los microcódigos almacenados en SRAM o memoria flash . Esto se denota tradicionalmente como almacén de control grabable en el contexto de las computadoras, que puede ser memoria de solo lectura o de lectura y escritura.. En el último caso, el proceso de inicialización de la CPU carga el microcódigo en el almacén de control desde otro medio de almacenamiento, con la posibilidad de alterar el microcódigo para corregir errores en el conjunto de instrucciones o para implementar nuevas instrucciones de máquina.

Los procesadores digitales complejos también pueden emplear más de una unidad de control (posiblemente basada en microcódigo) para delegar subtareas que deben realizarse esencialmente de forma asíncrona en paralelo. Un programador de alto nivel, o incluso un programador ensamblador , normalmente no ve ni cambia el microcódigo. A diferencia del código de máquina, que a menudo conserva cierta compatibilidad con versiones anteriores entre los diferentes procesadores de una familia, el microcódigo solo se ejecuta en el circuito electrónico exacto para el que está diseñado, ya que constituye una parte inherente del diseño particular del procesador en sí.

Los microprogramas consisten en una serie de microinstrucciones que controlan la CPU a un nivel muy fundamental de los circuitos de hardware. Por ejemplo, una sola microinstrucción horizontal típica podría especificar las siguientes operaciones:

  • Conecte el registro 1 al lado A de la ALU
  • Conecte el registro 7 al lado B de la ALU
  • Establecer la ALU para realizar en complemento a dos adición
  • Establezca la entrada de acarreo de la ALU en cero
  • Almacene el valor del resultado en el registro 8
  • Actualice los códigos de condición de las banderas de estado de ALU ( negativo , cero , desbordamiento y acarreo )
  • Microjump a micro PC nnn para la siguiente microinstrucción

Para controlar simultáneamente todas las funciones del procesador en un ciclo, la microinstrucción suele tener más de 50 bits; por ejemplo, 128 bits en un 360/85 con una función de emulador. Los microprogramas están cuidadosamente diseñados y optimizados para la ejecución más rápida posible, ya que un microprograma lento daría como resultado una instrucción de máquina lenta y un rendimiento degradado para los programas de aplicación relacionados que usan tales instrucciones.

Justificación [ editar ]

El microcódigo se desarrolló originalmente como un método más simple de desarrollar la lógica de control para una computadora. Inicialmente, los conjuntos de instrucciones de la CPU estaban cableados . Cada paso necesario para obtener, decodificar y ejecutar las instrucciones de la máquina (incluidos los cálculos, lecturas y escrituras de direcciones de operandos) se controlaba directamente mediante lógica combinacional y circuitos de máquina de estado secuenciales bastante mínimos . Si bien estos procesadores cableados eran muy eficientes, la necesidad de conjuntos de instrucciones potentes con direccionamiento de varios pasos y operaciones complejas ( ver más abajo ) los hacía difíciles de diseñar y depurar; Las instrucciones altamente codificadas y de longitud variada también pueden contribuir a esto, especialmente cuando se utilizan codificaciones muy irregulares.

El microcódigo simplificó el trabajo al permitir que gran parte del comportamiento del procesador y el modelo de programación se definieran mediante rutinas de microprogramas en lugar de mediante circuitos dedicados. Incluso al final del proceso de diseño, el microcódigo se podía cambiar fácilmente, mientras que los diseños de CPU cableados eran muy engorrosos de cambiar. Por lo tanto, este diseño de CPU facilitó enormemente.

Desde la década de 1940 hasta finales de la de 1970, una gran parte de la programación se realizó en lenguaje ensamblador ; Las instrucciones de nivel superior significan una mayor productividad del programador, por lo que una ventaja importante del microcódigo fue la relativa facilidad con la que se pueden definir poderosas instrucciones de máquina. La máxima extensión de esto son los diseños de "Lenguaje de alto nivel ejecutable directamente", en los que cada declaración de un lenguaje de alto nivel como PL / I se ejecuta completa y directamente mediante microcódigo, sin compilación. El proyecto IBM Future Systems y Data General Fountainhead Processor son ejemplos de esto. Durante la década de 1970, las velocidades de la CPU crecieron más rápidamente que las velocidades de la memoria y numerosas técnicas como la transferencia de bloques de memoria ,Se utilizaron memorias caché de recuperación previa y de varios niveles para aliviar este problema. Las instrucciones de máquina de alto nivel, hechas posibles por microcódigo, ayudaron aún más, ya que menos instrucciones de máquina más complejas requieren menos ancho de banda de memoria. Por ejemplo, una operación en una cadena de caracteres se puede realizar como una sola instrucción de máquina, evitando así la obtención de múltiples instrucciones.

Las arquitecturas con conjuntos de instrucciones implementadas por microprogramas complejos incluían IBM System / 360 y Digital Equipment Corporation VAX . El enfoque de conjuntos de instrucciones implementados por microcódigo cada vez más complejos se denominó más tarde CISC . Un enfoque alternativo, utilizado en muchos microprocesadores , es usar PLA o ROM (en lugar de lógica combinacional) principalmente para decodificar instrucciones, y dejar que una máquina de estado simple (sin mucho o ningún microcódigo) haga la mayor parte de la secuenciación. La tecnología MOS 6502 es un ejemplo de un microprocesador que utiliza un PLA para la decodificación y secuenciación de instrucciones. El PLA es visible en microfotografías del chip,[6] y su funcionamiento se puede ver en la simulación a nivel de transistor.

La microprogramación todavía se utiliza en los diseños de CPU modernos. En algunos casos, después de depurar el microcódigo en la simulación, las funciones lógicas se sustituyen por el almacén de control. [ cita requerida ] Las funciones lógicas son a menudo más rápidas y menos costosas que la memoria de microprograma equivalente.

Beneficios [ editar ]

Los microprogramas de un procesador operan en una arquitectura más primitiva, totalmente diferente y mucho más orientada al hardware que las instrucciones de ensamblaje visibles para los programadores normales. En coordinación con el hardware, el microcódigo implementa la arquitectura visible para el programador. El hardware subyacente no necesita tener una relación fija con la arquitectura visible. Esto facilita la implementación de una arquitectura de conjunto de instrucciones determinada en una amplia variedad de microarquitecturas de hardware subyacentes.

IBM System / 360 tiene una arquitectura de 32 bits con 16 registros de propósito general, pero la mayoría de las implementaciones de System / 360 en realidad usan hardware que implementó una microarquitectura subyacente mucho más simple; Por ejemplo, el System / 360 Model 30 tiene rutas de datos de 8 bits a la unidad aritmética lógica (ALU) y la memoria principal e implementó los registros de propósito general en una unidad especial de memoria central de mayor velocidad , y el System / 360 Model 40 tiene rutas de datos de 8 bits a la ALU y rutas de datos de 16 bits a la memoria principal y también implementó los registros de propósito general en una unidad especial de memoria central de mayor velocidad. El Modelo 50 tiene rutas de datos completas de 32 bits e implementa los registros de propósito general en una unidad especial de memoria central de mayor velocidad.[7] El modelo 65 al modelo 195 tienen rutas de datos más grandes e implementan los registros de propósito general en circuitos de transistores más rápidos. [ cita requerida ] De esta manera, la microprogramación permitió a IBM diseñar muchos modelos System / 360 con hardware sustancialmente diferente y abarcando una amplia gama de costos y rendimiento, al tiempo que los hacía todos compatibles arquitectónicamente. Esto reduce drásticamente la cantidad de programas de software de sistema únicos que deben escribirse para cada modelo.

Digital Equipment Corporation (DEC) utilizó un enfoque similar en su familia de computadoras VAX. Como resultado, los diferentes procesadores VAX utilizan diferentes microarquitecturas, pero la arquitectura visible para el programador no cambia.

La microprogramación también reduce el costo de los cambios de campo para corregir defectos ( errores ) en el procesador; A menudo, un error se puede solucionar reemplazando una parte del microprograma en lugar de realizar cambios en la lógica y el cableado del hardware .

Historia [ editar ]

En 1947, el diseño del MIT Whirlwind introdujo el concepto de una tienda de control como una forma de simplificar el diseño de la computadora y avanzar más allá de los métodos ad hoc . El almacén de control es una matriz de diodos : una red bidimensional, donde una dimensión acepta "pulsos de tiempo de control" del reloj interno de la CPU, y la otra se conecta a señales de control en puertas y otros circuitos. Un "distribuidor de pulsos" toma los pulsos generados por el reloj de la CPU y los divide en ocho pulsos de tiempo separados, cada uno de los cuales activa una fila diferente de la red. Cuando la fila está activada, activa las señales de control conectadas a ella. [8]

Descrito de otra manera, las señales transmitidas por la tienda de control se reproducen de forma muy parecida a la de un piano roll. Es decir, están controlados por una secuencia de palabras muy amplias construidas con bits y se "reproducen" secuencialmente. En una tienda de control, sin embargo, la "canción" es corta y se repite continuamente.

En 1951, Maurice Wilkes mejoró este concepto al agregar la ejecución condicional , un concepto similar al condicional en el software de computadora. Su implementación inicial consistía en un par de matrices: la primera generaba señales a la manera del almacén de control Whirlwind, mientras que la segunda matriz seleccionaba qué fila de señales (la palabra de instrucción del microprograma, por así decirlo) invocar en el siguiente ciclo. Los condicionales se implementaron proporcionando una forma en que una sola línea en el almacén de control podría elegir entre las alternativas en la segunda matriz. Esto condicionó las señales de control a la señal interna detectada. Wilkes acuñó el término microprogramación para describir esta característica y distinguirla de una simple tienda de control.

Ejemplos [ editar ]

  • El EMIDEC 1100 [9] supuestamente utiliza un almacén de control cableado que consta de cables enhebrados a través de núcleos de ferrita, conocidos como "los cordones".
  • La mayoría de los modelos de la serie IBM System / 360 están microprogramados:
    • El modelo 25 es único entre los modelos System / 360 en el uso de los 16 K bytes superiores de almacenamiento central para mantener el almacenamiento de control para el microprograma. El 2025 utiliza una microarquitectura de 16 bits con siete palabras de control (o microinstrucciones). Después del mantenimiento del sistema o al cambiar el modo de funcionamiento, el microcódigo se carga desde el lector de tarjetas, la cinta u otro dispositivo. [10] La emulación IBM 1410 para este modelo se carga de esta manera.
    • El Modelo 30 utiliza una microarquitectura de 8 bits con solo unos pocos registros de hardware; todo lo que vio el programador es emulado por el microprograma. El microcódigo para este modelo también se guarda en tarjetas perforadas especiales, que se almacenan dentro de la máquina en un lector dedicado por tarjeta, llamado unidades "CROS" (almacenamiento de solo lectura de capacitores). [11] : 2–5 Se agrega una unidad CROS adicional para las máquinas solicitadas con la emulación 1401/1440/1460 [11] : 4–29 y para las máquinas solicitadas con la emulación 1620. [11] : 4–75
    • El Modelo 40 utiliza palabras de control de 56 bits. La caja 2040 implementa tanto el procesador principal System / 360 como el canal multiplex (el procesador de E / S). Este modelo utiliza lectores dedicados "TROS" similares a las unidades "CROS", pero con una captación inductiva (Transformer Read-only Store).
    • El Modelo 50 tiene dos rutas de datos internas que operan en paralelo: una ruta de datos de 32 bits utilizada para operaciones aritméticas y una ruta de datos de 8 bits utilizada en algunas operaciones lógicas. El almacén de control utiliza microinstrucciones de 90 bits.
    • El modelo 85 tiene una búsqueda de instrucciones (unidad I) y una ejecución (unidad E) separadas para proporcionar un alto rendimiento. La unidad I está controlada por hardware. La unidad E está microprogramada; las palabras de control tienen 108 bits de ancho en un 360/85 básico y más anchas si se instala una función de emulador.
  • El NCR 315 está microprogramado con núcleos de ferrita cableados a mano (una ROM ) pulsados ​​por un secuenciador con ejecución condicional. Los cables enrutados a través de los núcleos están habilitados para varios datos y elementos lógicos en el procesador.
  • Los procesadores PDP-11 de Digital Equipment Corporation , con la excepción del PDP-11/20, están microprogramados. [12]
  • La mayoría de las miniordenadores Data General Eclipse están microprogramadas. La tarea de escribir microcódigo para el Eclipse MV / 8000 se detalla en el libro ganador del Premio Pulitzer titulado El alma de una nueva máquina .
  • Muchos sistemas de Burroughs están microprogramados:
  • El "microprocesador" B700 ejecuta códigos de operación a nivel de aplicación utilizando secuencias de microinstrucciones de 16 bits almacenadas en la memoria principal; cada uno de ellos es una operación de carga de registro o está mapeado a una única instrucción de "nanocódigo" de 56 bits almacenada en la memoria de sólo lectura. Esto permite que un hardware relativamente simple actúe como un controlador periférico de mainframe o se empaquete como una computadora independiente.
  • El B1700 se implementa con hardware radicalmente diferente, incluida la memoria principal direccionable por bits, pero tiene una organización multicapa similar. El sistema operativo carga previamente el intérprete para cualquier idioma que se requiera. Estos intérpretes presentan diferentes máquinas virtuales para COBOL , Fortran , etc.
  • Los microdatos produjeron ordenadores en los que el usuario puede acceder al microcódigo; esto permite la creación de instrucciones personalizadas a nivel de ensamblador. El diseño del sistema operativo Reality de Microdata hace un uso extensivo de esta capacidad.
  • La estación de trabajo Xerox Alto utilizó un diseño microcodificado pero, a diferencia de muchas computadoras, el motor de microcódigo no está oculto al programador en un diseño en capas. Las aplicaciones aprovechan esto para acelerar el rendimiento.
  • El Nintendo 64 's Reality Coprocesador (RCP), que sirve como de la consola unidad de procesamiento gráfico y el procesador de audio, utiliza microcódigo; es posible implementar nuevos efectos o ajustar el procesador para lograr la salida deseada. Algunos ejemplos notables de microcódigo RCP personalizados incluyen los gráficos de alta resolución, motores de partículas, y las distancias de sorteo que se encuentran en un número ilimitado de Factor 5 's de Indiana Jones y la máquina infernal , Star Wars: Rogue Squadron , y Star Wars: Battle for Naboo ; [13] [14] y la reproducción de video en movimiento completo que se encuentra en Resident Evil 2 de Angel Studios .[15]
  • Las unidades vectoriales VU0 y VU1 de Sony PlayStation 2 son microprogramables; de hecho, solo se puede acceder a VU1 mediante microcódigo durante las primeras generaciones del SDK.
  • Los MicroCore Labs MCL86 , MCL51 y MCL65 son ejemplos de implementaciones de microsecuenciadores "verticales" altamente codificados de Intel 8086/8088, 8051 y MOS 6502.
  • El sistema informático Meta 4 Series 16 de Digital Scientific Corp. fue un sistema microprogramable por el usuario disponible por primera vez en 1970. El microcódigo tenía un estilo principalmente vertical con microinstrucciones de 32 bits. [16] Las instrucciones se almacenaron en placas de programa reemplazables con una cuadrícula de posiciones de bits. Un (1) bit estaba representado por pequeños cuadrados de metal que fueron detectados por amplificadores, cero (0) bits por la ausencia de los cuadrados. [17] El sistema se puede configurar con hasta 4K palabras de 16 bits de microstore. Uno de los productos de Digital Scientific fue un emulador para IBM 1130 . [18] [19]
  • Los procesadores x86 anteriores están completamente microcodificados; a partir del Intel 80486 , las instrucciones menos complicadas se implementan directamente en el hardware. Los procesadores x86 implementaron microcódigo parcheable (parche por BIOS o sistema operativo ) desde la microarquitectura Intel P6 y la microarquitectura AMD K7 .
  • Algunas tarjetas de video , controladores de interfaz de red inalámbrica implementaron un microcódigo parcheable (parche por sistema operativo).

Implementación [ editar ]

Cada microinstrucción en un microprograma proporciona los bits que controlan los elementos funcionales que componen internamente una CPU. La ventaja sobre una CPU cableada es que el control interno de la CPU se convierte en una forma especializada de un programa informático. El microcódigo transforma así un complejo desafío de diseño electrónico (el control de una CPU) en un desafío de programación menos complejo. Para aprovechar esto, una CPU se divide en varias partes:

  • Un I-unidad puede decodificar instrucciones de hardware y determinar la dirección de microcódigo para el procesamiento de la instrucción en paralelo con el E-unidad .
  • Un microsecuenciador elige la siguiente palabra del almacén de control. Un secuenciador es principalmente un contador, pero generalmente también tiene alguna forma de saltar a una parte diferente del almacén de control dependiendo de algunos datos, generalmente datos del registro de instrucciones y siempre alguna parte del almacén de control. El secuenciador más simple es solo un registro cargado desde unos pocos bits del almacén de control.
  • Un conjunto de registros es una memoria rápida que contiene los datos de la unidad central de procesamiento. Puede incluir el contador de programa y el puntero de pila , y también puede incluir otros registros que no son fácilmente accesibles para el programador de la aplicación. A menudo, el conjunto de registros es un archivo de registro de triple puerto ; es decir, se pueden leer dos registros y escribir un tercero al mismo tiempo.
  • Una unidad aritmética y lógica realiza cálculos, generalmente suma, negación lógica, desplazamiento a la derecha y Y lógico. A menudo también realiza otras funciones.

También puede haber un registro de direcciones de memoria y un registro de datos de memoria , que se utilizan para acceder al almacenamiento principal de la computadora . Juntos, estos elementos forman una " unidad de ejecución ". La mayoría de las CPU modernas tienen varias unidades de ejecución. Incluso las computadoras simples suelen tener una unidad para leer y escribir en la memoria y otra para ejecutar el código de usuario. Estos elementos a menudo se pueden unir como un solo chip. Este chip viene en un ancho fijo que formaría un "corte" a través de la unidad de ejecución. Estos se conocen como chips de " rebanada de bits ". El AMD Am2900family es uno de los ejemplos más conocidos de elementos de segmento de bits. Las partes de las unidades de ejecución y las propias unidades de ejecución están interconectadas por un haz de cables llamado bus .

Los programadores desarrollan microprogramas utilizando herramientas de software básicas. Un microensamblador permite a un programador definir la tabla de bits de forma simbólica. Debido a su estrecha relación con la arquitectura subyacente, "el microcódigo tiene varias propiedades que dificultan la generación mediante un compilador". [1] Un programa simulador está diseñado para ejecutar los bits de la misma manera que la electrónica y permite mucha más libertad para depurar el microprograma. Una vez finalizado el microprograma y probado exhaustivamente, a veces se utiliza como entrada a un programa de computadora que construye lógica para producir los mismos datos. [ cita requerida ] Este programa es similar a los que se utilizan para optimizar una matriz lógica programable. Incluso sin una lógica totalmente óptima, la lógica optimizada heurísticamente puede reducir enormemente la cantidad de transistores del número requerido para un almacén de control de ROM. Esto reduce el costo de producción y la electricidad consumida por una CPU.

El microcódigo se puede caracterizar como horizontal o vertical , refiriéndose principalmente a si cada microinstrucción controla los elementos de la CPU con poca o ninguna decodificación (microcódigo horizontal) [a] o requiere una decodificación extensa por lógica combinatoria antes de hacerlo (microcódigo vertical). En consecuencia, cada microinstrucción horizontal es más ancha (contiene más bits) y ocupa más espacio de almacenamiento que una microinstrucción vertical.

Microcódigo horizontal [ editar ]

"El microcódigo horizontal tiene varias microoperaciones discretas que se combinan en una sola microinstrucción para una operación simultánea". [1] El microcódigo horizontal suele estar contenido en un almacén de control bastante amplio; no es raro que cada palabra tenga 108 bits o más. En cada tic de un reloj secuenciador, se lee, decodifica y utiliza una palabra de microcódigo para controlar los elementos funcionales que componen la CPU.

En una implementación típica, una palabra de microprograma horizontal comprende grupos de bits bastante definidos. Por ejemplo, un arreglo simple podría ser:

Para que este tipo de micromáquina implemente una instrucción JUMP con la dirección que sigue al código de operación, el microcódigo puede requerir dos tics de reloj. El ingeniero que lo diseñaba escribiría el código fuente del microensamblador con un aspecto parecido a esto:

 # Cualquier línea que comience con un signo de número es un comentario # Esto es solo una etiqueta, la forma ordinaria en que los ensambladores representan simbólicamente un  # dirección de memoria.Instrucción SALTO: # Para prepararse para la siguiente instrucción, el microcódigo de decodificación de instrucciones ya # movió el contador de programa al registro de direcciones de memoria. Esta instrucción busca # la dirección de destino de la instrucción de salto de la palabra de memoria que sigue al # saltar código de operación, copiando del registro de datos de memoria al registro de dirección de memoria. # Esto le da al sistema de memoria dos tics de reloj para buscar el siguiente  # instrucción al registro de datos de memoria para su uso por la decodificación de instrucciones. # La instrucción del secuenciador "siguiente" significa simplemente agregar 1 a la dirección de la palabra de control. MDR, NINGUNO, MAR, COPIA, SIGUIENTE, NINGUNO # Esto coloca la dirección de la siguiente instrucción en la PC. # Esto le da al sistema de memoria un tic del reloj para finalizar la búsqueda iniciada en el # microinstrucción previa. # La instrucción del secuenciador es saltar al inicio de la decodificación de la instrucción. MAR, 1, PC, ADD, JMP, InstructionDecode # No se muestra la instrucción decodificar, porque suele ser un lío, muy particular # al procesador exacto que se está emulando. Incluso este ejemplo está simplificado. # Muchas CPU tienen varias formas de calcular la dirección, en lugar de solo obtener # de la palabra que sigue al código de operación. Por lo tanto, en lugar de solo uno # instrucción de salto, esas CPU tienen una familia de instrucciones de salto relacionadas.

Para cada tick, es común encontrar que solo se usan algunas partes de la CPU, y los grupos restantes de bits en la microinstrucción son no operativos. Con un diseño cuidadoso de hardware y microcódigo, esta propiedad puede explotarse para paralelizar operaciones que utilizan diferentes áreas de la CPU; por ejemplo, en el caso anterior, la ALU no se requiere durante el primer tick, por lo que podría usarse para completar una instrucción aritmética anterior.

Microcódigo vertical [ editar ]

En el microcódigo vertical, cada microinstrucción está codificada de manera significativa, es decir, los campos de bits generalmente pasan a través de una lógica combinatoria intermedia que, a su vez, genera las señales de control y secuenciación reales para los elementos internos de la CPU (ALU, registros, etc.). Esto contrasta con el microcódigo horizontal, en el que los propios campos de bits producen directamente las señales de control y secuenciación o solo se codifican mínimamente. En consecuencia, el microcódigo vertical requiere longitudes de instrucción más pequeñas y menos almacenamiento, pero requiere más tiempo para decodificar, lo que resulta en un reloj de CPU más lento. [20]

Algún microcódigo vertical es solo el lenguaje ensamblador de una computadora convencional simple que está emulando una computadora más compleja. Algunos procesadores, como los procesadores DEC Alpha y los microprocesadores CMOS en mainframes IBM System / 390 posteriores y mainframes z / Architecture , usan código de máquina, ejecutándose en un modo especial que le da acceso a instrucciones especiales, registros especiales y otros recursos de hardware que no disponible para el código de máquina normal, para implementar algunas instrucciones y otras funciones, [21] [22] tales como recorridos de tablas de páginas en procesadores Alpha. [23] Esto se llama PALcode en procesadores Alpha y milicode en procesadores de mainframe IBM.

Otra forma de microcódigo vertical tiene dos campos:

El campo de selección selecciona qué parte de la CPU será controlada por esta palabra del almacén de control. El valor del campo realmente controla esa parte de la CPU. Con este tipo de microcódigo, un diseñador elige explícitamente hacer una CPU más lenta para ahorrar dinero al reducir los bits no utilizados en el almacén de control; sin embargo, la complejidad reducida puede aumentar la frecuencia de reloj de la CPU, lo que disminuye el efecto de un mayor número de ciclos por instrucción.

A medida que los transistores se volvieron más baratos, el microcódigo horizontal llegó a dominar el diseño de las CPU que utilizan microcódigo, y el microcódigo vertical se usa con menos frecuencia.

Cuando se utilizan tanto microcódigo vertical como horizontal, el microcódigo horizontal puede denominarse nanocódigo o picocódigo . [24]

Tienda de control de escritura [ editar ]

Algunas computadoras se construyeron usando "microcódigo escribible". En este diseño, en lugar de almacenar el microcódigo en ROM o lógica cableada, el microcódigo se almacena en una RAM llamada almacenamiento de control de escritura o WCS . Este tipo de computadora a veces se denomina computadora de conjunto de instrucciones de escritura o WISC . [25]

Muchas computadoras prototipo experimentales utilizan almacenes de control de escritura; También hay máquinas comerciales que utilizan microcódigo grabable, como Burroughs Small Systems , las primeras estaciones de trabajo Xerox , la familia DEC VAX 8800 ("Nautilus"), las máquinas Symbolics L y G, una serie de IBM System / 360 y System. / 370 , algunas máquinas DEC PDP-10 , [26] y el Data General Eclipse MV / 8000 . [27]

Muchos más máquinas ofrecen tiendas de control de escritura programables por el usuario como una opción, incluyendo la HP 2100 , DEC PDP-11/60 y Varian Data Máquinas V-70 de la serie miniordenadores . IBM System / 370 incluye una función denominada Carga inicial de microprograma ( IML o IMPL ) [28] que puede invocarse desde la consola, como parte del reinicio de encendido ( POR ) o desde otro procesador en un complejo multiprocesador estrechamente acoplado .

Algunas máquinas comerciales, por ejemplo IBM 360/85, [29] [30] tienen un almacenamiento de solo lectura y un almacenamiento de control de escritura para microcódigo.

WCS ofrece varias ventajas, incluida la facilidad de parchear el microprograma y, para ciertas generaciones de hardware, un acceso más rápido que el que pueden proporcionar las ROM. El WCS programable por el usuario permite al usuario optimizar la máquina para fines específicos.

A partir del Pentium Pro en 1995, varias CPU x86 tienen microcódigo Intel grabable . [31] [32] Esto, por ejemplo, ha permitido que los errores en los microcódigos Intel Core 2 e Intel Xeon se corrijan parcheando sus microprogramas, en lugar de requerir que se reemplacen todos los chips. Un segundo ejemplo destacado es el conjunto de parches de microcódigo que Intel ofreció para algunas de sus arquitecturas de procesadores de hasta 10 años de antigüedad, en un intento por contrarrestar las vulnerabilidades de seguridad descubiertas en sus diseños, Spectre y Meltdown , que se hicieron públicas al principio. de 2018. [33] [34]Linux, [35] FreeBSD , [36] Microsoft Windows, [37] o el BIOS de la placa base pueden instalar una actualización de microcódigo . [38]

Comparación con VLIW y RISC [ editar ]

La tendencia de diseño hacia procesadores altamente microcodificados con instrucciones complejas comenzó a principios de la década de 1960 y continuó hasta aproximadamente mediados de la década de 1980. En ese momento, la filosofía de diseño de RISC comenzó a ser más prominente.

Una CPU que usa microcódigo generalmente necesita varios ciclos de reloj para ejecutar una sola instrucción, un ciclo de reloj por cada paso en el microprograma para esa instrucción. Algunos procesadores CISC incluyen instrucciones que pueden tardar mucho en ejecutarse. Tales variaciones interfieren tanto con la latencia de interrupción como, lo que es mucho más importante en los sistemas modernos, con la canalización .

Al diseñar un nuevo procesador, un RISC de control cableado tiene las siguientes ventajas sobre el CISC microcodificado:

  • La programación se ha alejado en gran medida del nivel de ensamblaje, por lo que ya no vale la pena proporcionar instrucciones complejas por razones de productividad.
  • Los conjuntos de instrucciones más simples permiten la ejecución directa por hardware, evitando la penalización del rendimiento de la ejecución microcodificada.
  • El análisis muestra que las instrucciones complejas rara vez se utilizan, por lo que los recursos de la máquina dedicados a ellas se desperdician en gran medida.
  • Los recursos de la máquina dedicados a instrucciones complejas que rara vez se utilizan se utilizan mejor para acelerar la ejecución de instrucciones más sencillas y de uso común.
  • Las instrucciones microcodificadas complejas pueden requerir muchos ciclos de reloj que varían y son difíciles de canalizar para un mayor rendimiento.

También hay contrapuntos:

  • Es posible que las complejas instrucciones de las implementaciones muy microcodificadas no requieran muchos recursos adicionales de la máquina, a excepción del espacio del microcódigo. Por ejemplo, la misma ALU se usa a menudo para calcular una dirección efectiva, así como para calcular el resultado de los operandos reales (por ejemplo, el Z80 original , 8086 y otros).
  • Los compiladores modernos utilizan con frecuencia las instrucciones más simples que no son RISC (es decir, que involucran operandos de memoria directa ). Incluso se emplean comúnmente operaciones aritméticas inmediatas a apilar (es decir, resultado de memoria). Aunque tales operaciones de memoria, a menudo con codificaciones de longitud variable, son más difíciles de canalizar, aún es completamente factible hacerlo, ejemplificado claramente por i486 , AMD K5 , Cyrix 6x86 , Motorola 68040 , etc.
  • Las instrucciones que no son RISC realizan de forma inherente más trabajo por instrucción (en promedio) y normalmente también están altamente codificadas, por lo que permiten un tamaño general más pequeño del mismo programa y, por lo tanto, un mejor uso de las memorias caché limitadas.

Muchos procesadores RISC y VLIW están diseñados para ejecutar todas las instrucciones (siempre que estén en la caché) en un solo ciclo. Esto es muy similar a la forma en que las CPU con microcódigo ejecutan una microinstrucción por ciclo. Los procesadores VLIW tienen instrucciones que se comportan de manera similar a un microcódigo horizontal muy amplio, aunque normalmente sin un control tan detallado sobre el hardware como lo proporciona el microcódigo. Las instrucciones RISC a veces son similares al microcódigo vertical estrecho.

La microcodificación ha sido popular en procesadores de aplicaciones específicas como procesadores de red , microcontroladores , procesadores de señales digitales , controladores de canal , controladores de disco , controladores de interfaz de red , unidades de procesamiento de gráficos y en otro hardware.

Micro operaciones [ editar ]

Las implementaciones modernas de CISC, como la familia x86 , decodifican instrucciones en microoperaciones almacenadas dinámicamente ("μops") con una codificación de instrucciones similar a RISC o microcódigo tradicional. Una unidad de decodificación de instrucciones cableada emite directamente μops para instrucciones x86 comunes, pero recurre a una ROM de microcódigo más tradicional para instrucciones más complejas o poco utilizadas. [2]

Por ejemplo, un x86 puede buscar μops del microcódigo para manejar operaciones complejas de varios pasos como instrucciones de cadena o bucle, funciones trascendentales de unidad de punto flotante o valores inusuales como números desnormales e instrucciones de propósito especial como CPUID .

Ver también [ editar ]

  • Unidad de generación de direcciones (AGU)
  • Diseño de CPU
  • Máquina de estados finitos (FSM)
  • Firmware
  • Unidad de coma flotante (FPU)
  • Error de Pentium FDIV
  • Canalización de instrucciones
  • Microsecuenciador
  • MikroSim
  • Millicode
  • Superescalar

Notas [ editar ]

  1. ^ Los procesadores microcodificados horizontalmente de IBM tenían múltiples microordenes y registraban campos selectos que requerían decodificación.

Referencias [ editar ]

  1. ^ a b c Kent, Allen; Williams, James G. (5 de abril de 1993). Enciclopedia de Ciencias de la Computación y Tecnología: Volumen 28 - Suplemento 13 . Nueva York: Marcel Dekker, Inc. ISBN 0-8247-2281-7. Archivado desde el original el 20 de noviembre de 2016 . Consultado el 17 de enero de 2016 .
  2. ↑ a b Fog, Agner (2 de mayo de 2017). "La microarquitectura de las CPUs Intel, AMD y VIA" (PDF) . Universidad Técnica de Dinamarca. Archivado (PDF) desde el original el 28 de marzo de 2017 . Consultado el 8 de abril de 2018 .
  3. ^ "Servidores IBM pSeries - Actualización de microcódigo para Ultrastar 73LZX (US73) 18/36 GB" . ibm.com . Archivado desde el original el 19 de abril de 2019 . Consultado el 22 de enero de 2015 .
  4. ^ Manning, BM; Mitby, JS; Nicholson, JO (noviembre de 1979). "Procesador microprogramado con almacenamiento de control PLA" . Boletín de divulgación técnica de IBM . 22 (6). Archivado desde el original el 1 de octubre de 2012 . Consultado el 10 de julio de 2011 .
  5. ^ A menudo denotado un almacén de control ROM / PLA en el contexto de uso en una CPU; "J-11: cuarto y último diseño de microprocesador PDP-11 de DEC ... características ... almacenamiento de control ROM / PLA" . Archivado desde el original el 9 de julio de 2011 . Consultado el 10 de julio de 2011 .
  6. ^ "6502 imágenes" . Archivado desde el original el 4 de marzo de 2016 . Consultado el 22 de enero de 2015 .
  7. ^ Características funcionales del IBM System / 360 Model 50 (PDF) . IBM . 1967. p. 7. Archivado (PDF) desde el original el 5 de septiembre de 2011 . Consultado el 20 de septiembre de 2011 .
  8. ^ Everett, RR y Swain, FE (1947). "Diagramas de bloques de computadora Torbellino I" (PDF) . Informe R-127. Laboratorio de Servomecanismos del MIT. Archivado desde el original (PDF) el 17 de junio de 2012 . Consultado el 21 de junio de 2006 . Cite journal requiere |journal=( ayuda )
  9. ^ "Computadora EMIDEC 1100" . Emidec.org.uk. Archivado desde el original el 12 de junio de 2010 . Consultado el 26 de abril de 2010 .
  10. ^ Características funcionales IBM System / 360 Model 25 (PDF) . IBM. Enero de 1968. p. 22. Archivado (PDF) desde el original el 2 de diciembre de 2019 . Consultado el 9 de noviembre de 2019 .
  11. ^ a b c Teoría de funcionamiento de la ingeniería de campo, Unidad de procesamiento 2030, System / 360 Model 30 (PDF) (Primera edición). IBM. Junio ​​de 1967. Y24-3360-1. Archivado (PDF) desde el original el 1 de abril de 2020 . Consultado el 9 de noviembre de 2019 .
  12. ^ Edward A. Snow; Daniel P. Siewiorek (1982). "Implementación y Evaluación de Desempeño de la Familia PDP-11" . En Daniel P. Siewiorek ; C. Gordon Bell ; Allen Newell (eds.). Estructuras informáticas: principios y ejemplos . Nueva York, NY : McGraw-Hill Book Company . pag. 671 . ISBN 0-07-057302-6.
  13. ^ "Entrevista: luchando contra la N64 (Naboo)" . IGN64. 10 de noviembre de 2000. Archivado desde el original el 13 de septiembre de 2007 . Consultado el 27 de marzo de 2008 .
  14. ^ "Indiana Jones y la máquina infernal" . IGN . 12 de diciembre de 2000. Archivado desde el original el 27 de septiembre de 2013 . Consultado el 24 de septiembre de 2013 .
  15. ^ Meynink, Todd (28 de julio de 2000). "Postmortem: Resident Evil 2 de Angel Studios (versión N64)" . Gamasutra . United Business Media LLC . Archivado desde el original el 24 de junio de 2013 . Consultado el 18 de octubre de 2010 .
  16. ^ Manual de referencia del sistema informático Digital Scientific Meta 4 Series 16 (PDF) . Corporación Científica Digital. Mayo de 1971. 7032MO. Archivado (PDF) desde el original el 14 de enero de 2020 . Consultado el 14 de enero de 2020 .
  17. ^ Manual de referencia de memoria de solo lectura (ROM) del sistema informático Digital Scientific Meta 4 (PDF) . Corporación Científica Digital. Marzo de 1970. 7024MO. Archivado (PDF) desde el original el 23 de septiembre de 2019 . Consultado el 14 de enero de 2020 .
  18. ^ El manual del sistema preliminar del sistema informático Digital Scientific Meta 4 Series 16 (PDF) . Corporación Científica Digital. Junio ​​de 1970. 7006MO. Archivado (PDF) desde el original el 23 de septiembre de 2019 . Consultado el 14 de enero de 2020 .
  19. ^ Listado de patrones ROM típicos del sistema informático Digital Scientific Meta 4 y programa para simular el conjunto de instrucciones IBM 1130 (PDF) . Corporación Científica Digital. Enero de 1970. M4 / 005P-170. Archivado (PDF) desde el original el 24 de marzo de 2020 . Consultado el 14 de enero de 2020 .
  20. ^ Neal Harman; Andy Gimblett (12 de octubre de 2009). "CS-323: Microprocesadores de alto rendimiento - Capítulo 1. Microprogramación" . mat.uson.mx . Archivado desde el original el 19 de abril de 2015 . Consultado el 8 de agosto de 2015 .
  21. ^ Robert Vaupel (2013). Alta disponibilidad y escalabilidad de entornos de mainframe utilizando System zyz / OS como ejemplo . pag. 26. ISBN 978-3-7315-0022-3.
  22. ^ Rogers, Bob (septiembre-octubre de 2012). "El qué y el por qué de zEnterprise Millicode" . Revista IBM Systems . Archivado desde el original el 16 de octubre de 2013 . Consultado el 7 de noviembre de 2013 .
  23. ^ "PALcode para la guía de diseño del sistema de microprocesadores Alpha" (PDF) . Corporación de Equipos Digitales . Mayo de 1996. Archivado (PDF) desde el original el 15 de agosto de 2011 . Consultado el 7 de noviembre de 2013 .
  24. ^ Spruth, Wilhelm (diciembre de 2012). El diseño de un microprocesador . Springer Science & Business Media. pag. 31. ISBN 978-3-642-74916-2. Archivado desde el original el 20 de noviembre de 2016 . Consultado el 18 de enero de 2015 .
  25. ^ Philip Koopman Jr. (1987). "Conjunto de instrucciones grabables, computadoras orientadas a la pila: el concepto WISC" (PDF) . The Journal of Forth Application and Research : 49–71. Archivado (PDF) desde el original el 11 de mayo de 2008.
  26. ^ Eric Smith (3 de septiembre de 2002). "Re: ¿Cuál era el tamaño del microcódigo en varias máquinas? " " . Grupo de noticiasalt.folklore.computers . Usenet: [email protected] . Archivado desde el original el 26 de enero de 2009. Consultado el 18 de diciembre de 2008 . 
  27. ^ Mark Smotherman. "CPSC 330 / El alma de una nueva máquina" . Archivado desde el original el 5 de junio de 2011 . Consultado el 10 de julio de 2011 . Almacenamiento de control de escritura SRAM de 4096 x 75 bits: microinstrucción de 74 bits con 1 bit de paridad (18 campos)
  28. ^ IBM System / 370 Principios de funcionamiento (PDF) . Cuarta edición. IBM. Septiembre de 1974. págs. 98, 245. GA22-7000-4. Archivado (PDF) desde el original el 29 de febrero de 2012 . Consultado el 27 de agosto de 2012 .
  29. ^ Características funcionales IBM System / 360 Model 85 (PDF) . SEGUNDA EDICION. IBM. Junio ​​de 1968. A22-6916-1. Archivado (PDF) desde el original el 7 de septiembre de 2011 . Consultado el 26 de agosto de 2012 .
  30. ^ IBM System / 360 Descripción de funciones especiales 709/7090/7094 Función de compatibilidad para IBM System / 360 Modelo 85 . Primera edición. IBM. Marzo de 1969. GA27-2733-0.
  31. ^ Stiller, Andreas; Paul, Matthias R. (12 de mayo de 1996). "Prozessorgeflüster" . c't - magazin für computertechnik . Tendencias y noticias (en alemán). Heise Verlag . Archivado desde el original el 28 de agosto de 2017 . Consultado el 28 de agosto de 2017 .
  32. ^ "9.11: instalaciones de actualización de microcódigo". Manual del desarrollador de software de arquitecturas Intel (R) 64 e IA-32, Volumen 3A: Guía de programación del sistema, Parte 1 (PDF) . Intel . Septiembre de 2016.
  33. ^ Intel parchea todas las CPU recientes, promete correcciones de hardware para los próximos chips de octava generación por Paul Alcorn el 15 de marzo de 2018
  34. ^ "Descargar archivo de datos de microcódigo del procesador Linux *" . Archivado desde el original el 19 de marzo de 2018 . Consultado el 21 de marzo de 2018 .
  35. ^ "Utilidad de actualización de microcódigo Intel para Linux" . Archivado desde el original el 26 de febrero de 2012.
  36. ^ "[puertos] Índice de / head / sysutils / cpupdate" . Freebsd.org. Archivado desde el original el 1 de abril de 2020 . Consultado el 16 de enero de 2020 .
  37. ^ " " Hay disponible una actualización de confiabilidad de microcódigo que mejora la confiabilidad de los sistemas que usan procesadores Intel " " . Archivado desde el original el 23 de febrero de 2008 . Consultado el 25 de febrero de 2008 .
  38. ^ "Productos de servidor: se requiere actualización del BIOS cuando se ve el mensaje Falta el microcódigo durante la POST" . Intel . 24 de enero de 2013. Archivado desde el original el 1 de septiembre de 2014.

Lectura adicional [ editar ]

  • Smith, Richard E. (1988). "Una descripción histórica de la arquitectura de la computadora" . Anales de la Historia de la Computación . 10 (4): 277-303. doi : 10.1109 / MAHC.1988.10039 . S2CID  16405547 . Consultado el 21 de junio de 2006 .
  • Smotherman, Mark (2005). "Una breve historia de la microprogramación" . Consultado el 30 de julio de 2006 . Cite journal requiere |journal=( ayuda )
  • Wilkes, MV (1986). "La génesis de la microprogramación" . Anales de la Historia de la Computación . 8 (2): 116–126. doi : 10.1109 / MAHC.1986.10035 . S2CID  1978847 . Consultado el 7 de agosto de 2006 .
  • Wilkes, MV y Stringer, JB (abril de 1953). "Microprogramación y diseño de los circuitos de control en una computadora electrónica digital" . Actas de la Sociedad Filosófica de Cambridge . 49 (pt. 2): 230–238. Código Bibliográfico : 1953PCPS ... 49..230W . doi : 10.1017 / S0305004100028322 . Consultado el 23 de agosto de 2006 .CS1 maint: varios nombres: lista de autores ( enlace )
  • Husson, SS (1970). Principios y prácticas de microprogramación . Prentice Hall. ISBN 0-13-581454-5.
  • Tucker, SG (1967). "Control por microprograma para SYSTEM / 360" . Revista de sistemas de IBM . 6 (4): 222–241. doi : 10.1147 / sj.64.0222 .

Enlaces externos [ editar ]

  • Ordenador de conjunto de instrucciones grabables
  • Tienda de condensadores de solo lectura
  • Tienda Transformer de solo lectura
  • Una breve historia de la microprogramación
  • Actualización de seguridad del microcódigo del procesador Intel (soluciona los problemas al ejecutar máquinas virtuales de 32 bits en modo PAE)
  • Notas sobre las actualizaciones de microcódigo de Intel , marzo de 2013, por Ben Hawkes, archivado desde el original el 7 de septiembre de 2015
  • Agujero visto en la función de eliminación de errores de Intel , EE Times , 2002, por Alexander Wolfe, archivado desde el original el 9 de marzo de 2003
  • Opteron Exposed: Reverse Engineering AMD K8 Microcode Updates , 26 de julio de 2004