← Volver al blogArquitectura de CPU

Registro de instrucciones y etapa de decodificación

Cómo una CPU didáctica captura una instrucción, extrae campos de opcode, registro e inmediato y los convierte en señales de control validadas, con contexto de RISC-V y x86.

DennyDenny
10 min de lectura
Chalkboard feature illustration for “Registro de instrucciones y etapa de decodificación”

Resumen: En una CPU sencilla, un registro de instrucciones (IR) captura una instrucción obtenida para que la decodificación vea bits estables. La decodificación identifica el formato de instrucción, extrae campos de registros e inmediatos, comprueba si la codificación es legal y genera información de control para las etapas posteriores. Un procesador moderno puede distribuir esa función entre búferes de búsqueda y registros de canalización, en lugar de contener un único «IR» arquitectónico literal.

El contador de programa responde dónde buscar. La etapa de decodificación responde qué significan los bits obtenidos. Entre ambos, una CPU didáctica suele colocar un registro de instrucciones: un banco de biestables que conserva la instrucción actual mientras la lógica de control la examina.

Ese modelo es útil, pero necesita un límite. El registro de instrucciones no es un registro visible para el programador en la mayoría de las ISA, y una implementación de alto rendimiento puede mantener muchas instrucciones a la vez en bloques de búsqueda, colas, registros de canalización o cachés de operaciones decodificadas. «IR» nombra una función en la ruta de datos didáctica, no un componente físico universal.

La ruta de datos didáctica

Una CPU multiciclo pequeña puede dibujarse así:

PC → instruction memory → instruction register → field extraction → control

En un evento de búsqueda de instrucción:

  1. el PC proporciona una dirección de instrucción;
  2. la memoria de instrucciones devuelve una palabra de instrucción;
  3. el IR captura esa palabra en el flanco de reloj activo; y
  4. la lógica de decodificación combinacional interpreta los bits almacenados.

La habilitación de escritura del IR se activa solo cuando debe aceptarse una instrucción nueva. Durante una detención, el IR conserva su valor anterior. Durante un reinicio o un vaciado de la canalización, el controlador marca la instrucción almacenada como no válida o la sustituye por una operación inocua.

Algunas rutas de datos multiciclo sitúan un registro de datos de memoria entre la memoria y el IR. Otras capturan directamente la salida de memoria. Ninguna secuencia es universal; la temporización y el protocolo de enlace de la interfaz de memoria elegida determinan los registros necesarios.

Una codificación de ejemplo pequeña

Supón que una ISA didáctica de ocho bits define este formato:

7             5 4             2 1             0
┌──────────────┬───────────────┬───────────────┐
│ opcode [2:0] │ register [2:0]│ mode / small  │
│              │               │ immediate     │
└──────────────┴───────────────┴───────────────┘

Los campos exactos son una elección de diseño de la ISA. Ocho bits no pueden codificar simultáneamente un espacio grande de opcodes, dos operandos de registro independientes y un inmediato útil, así que una ISA didáctica real suele usar varios formatos. Por ejemplo:

  • una instrucción de registro puede dedicar bits a las direcciones de origen y destino;
  • una instrucción de carga inmediata puede usar la mayoría de los bits bajos como una constante; y
  • una instrucción de salto condicional puede interpretar esos mismos bits como un desplazamiento.

La decodificación debe establecer primero el formato y después interpretar los bits restantes en consecuencia. Dar a cada bit una única etiqueta permanente produce el circuito equivocado.

Campos de posición fija: ejemplo de RISC-V

La ISA base de RISC-V usa formatos de instrucción de 32 bits. Para una instrucción de tipo R:

31         25 24    20 19    15 14   12 11      7 6        0
┌────────────┬────────┬────────┬───────┬─────────┬──────────┐
│   funct7   │   rs2  │   rs1  │ funct3│    rd   │  opcode  │
└────────────┴────────┴────────┴───────┴─────────┴──────────┘

Los campos de registro ocupan posiciones coherentes en los formatos base:

opcode = IR[6:0]
rd     = IR[11:7]
funct3 = IR[14:12]
rs1    = IR[19:15]
rs2    = IR[24:20]
funct7 = IR[31:25]

Esas particiones son cableado, no aritmética. rs1 y rs2 alimentan las direcciones de lectura del banco de registros; rd identifica un posible destino; y el opcode junto con los bits de función identifican la clase y la variante de operación.

Los inmediatos requieren más cuidado. En varios formatos de RISC-V, los bits del inmediato están deliberadamente repartidos por la instrucción. El hardware debe concatenarlos en el orden especificado y extender el signo a partir del bit de signo definido por la arquitectura. Sigue siendo cableado combinacional simple, pero no siempre es una única partición contigua.

La decodificación es más que un decodificador de opcodes

Para una ISA de juguete con ocho operaciones completas, un decodificador de tres a ocho puede crear señales one-hot:

OpcodeOperación didácticaResultado one-hot
000NOPis_nop
001LOADis_load
010STOREis_store
011ADDis_add
100SUBis_sub
101JUMPis_jump
110BRANCH-Zis_branch_z
111HALTis_halt

A partir de esas señales se pueden derivar ecuaciones de control:

RegWrite=is_load∨is_add∨is_sub\text{RegWrite} = \text{is\_load} \lor \text{is\_add} \lor \text{is\_sub} MemWrite=is_store\text{MemWrite} = \text{is\_store}

Es una introducción útil a los decodificadores y a la lógica de suma de productos, pero no es la estructura general de un decodificador real.

En una ISA más grande:

  • el opcode principal suele seleccionar un formato o una familia de instrucciones, en vez de una sola operación;
  • los campos de función secundarios distinguen los miembros de la familia;
  • el estado de modo o de prefijo puede cambiar el tamaño y la interpretación de los operandos;
  • algunos patrones de bits están reservados o son ilegales;
  • el privilegio y la disponibilidad de extensiones pueden afectar a la legalidad; y
  • las salidas de control suelen estar codificadas, en vez de disponer de un cable dedicado por instrucción.

Un decodificador correcto debe rechazar las codificaciones no admitidas, en lugar de tratarlas accidentalmente como una instrucción legal cercana.

Qué produce la decodificación

Es mejor considerar la salida como un paquete de control que como docenas de cables inconexos. Un paquete didáctico podría contener:

CampoSignificado
alu_opSelecciona suma, resta, operación lógica, comparación o paso directo
src_a / src_bElige operandos de registro, PC, inmediato o constante
reg_writePermite una escritura en el banco de registros en la etapa posterior adecuada
mem_read / mem_writeSolicita una operación de memoria de datos
result_sourceElige ALU, memoria, valor relativo al PC u otra fuente de escritura de vuelta
branch_kindSelecciona sin salto, salto condicional, salto directo o salto indirecto
immediateConstante recompuesta y extendida
legalIndica si la codificación está admitida en el estado actual de la máquina

Estas señales deben estar condicionadas por la validez de la canalización y la temporización de etapa. Un reg_write = 1 combinacional en la decodificación no da permiso para actualizar inmediatamente el banco de registros; la escritura ocurre solo cuando la instrucción alcanza la etapa designada sin haber sido vaciada ni haber sufrido un fallo.

Longitud de instrucción fija y variable

La longitud de instrucción cambia la parte inicial del problema de decodificación.

Ejemplo de longitud fija: Arm A64

Las instrucciones Arm A64 tienen 32 bits de ancho. Una vez que la búsqueda ha proporcionado una palabra alineada, las posiciones de los campos se pueden examinar directamente. La longitud fija simplifica el descubrimiento de límites de instrucción, pero no hace trivial toda operación ni toda codificación de inmediato.

RISC-V con instrucciones comprimidas

Las instrucciones base de RISC-V tienen 32 bits. La extensión comprimida opcional añade instrucciones de 16 bits, y la arquitectura reserva un esquema de codificación de longitud para codificaciones más largas. La búsqueda debe determinar si la instrucción siguiente ocupa dos, cuatro u otro número admitido de bytes antes de avanzar el PC y alinear la instrucción siguiente.

Ejemplo de longitud variable: x86

Las instrucciones x86 van de uno a 15 bytes y pueden contener codificaciones de prefijo heredadas o modernas, bytes de opcode, bytes de direccionamiento ModR/M y SIB, desplazamiento y datos inmediatos. Las partes presentes dependen de los bytes anteriores.

Por ello, un front-end moderno de x86 necesita decodificación de límites y longitud de instrucción antes de la decodificación semántica o junto a ella. Las implementaciones difieren: no es seguro afirmar que todos los procesadores obtienen un bloque de tamaño fijo, usan una distribución de colas o traducen cada instrucción por la misma ruta. Los manuales de arquitectura de Intel definen la codificación visible para el software; la canalización exacta depende de la microarquitectura.

Longitud fija y longitud variable no son sinónimos de RISC y CISC. Describen una propiedad de la codificación.

Control cableado y secuenciado

Una CPU pequeña puede generar el control directamente a partir de lógica booleana. En su lugar, un controlador multiciclo puede usar una máquina de estados o una memoria de control cuyas entradas describen varios pasos internos. Los procesadores reales pueden combinar rutas de decodificación rápidas con tratamiento secuenciado para operaciones más complejas.

La distinción útil es:

  • Decodificación combinacional asigna los campos actuales a una representación de control inicial.
  • Control secuenciado emite varias acciones internas a lo largo del tiempo.

Ningún método es automáticamente «RISC» o «CISC», y una implementación microcodificada no es intrínsecamente lenta. El rendimiento depende de la implementación completa y de la carga de trabajo.

Control de canalización: detención, vaciado y validez

Cuando se solapan varias instrucciones, los bits de instrucción son solo una parte del estado. Cada registro de canalización también necesita metadatos de control.

Detención

Si la etapa siguiente no puede aceptar una instrucción, el registro actual de búsqueda/decodificación debe conservar sus datos o participar en un protocolo de enlace listo/válido. Permitir que los bits avancen mientras el estado de validez se detiene pierde la alineación entre instrucción y control.

Vaciado

Una predicción de salto errónea, una excepción o un reinicio pueden invalidar instrucciones más jóvenes. Borrar solo los bits de instrucción es menos robusto que borrar un bit de validez, porque una codificación formada por todo ceros puede ser legal en algunas ISA.

Tratamiento de dependencias

La decodificación puede identificar registros de origen y destino para las comprobaciones de riesgos. La respuesta puede ser una detención, la selección de reenvío, el renombrado de registros u otra acción específica de la implementación. La extracción de campos proporciona los identificadores; el control posterior decide qué hacer con ellos.

Errores de diseño habituales

  • Suponer que la memoria siempre necesita un MDR. Añade registros a partir de la temporización e interfaz reales de la memoria, no de un diagrama universal.
  • Cambiar el IR mientras su instrucción sigue activa. Usa una habilitación de escritura o un protocolo de enlace para que la decodificación vea bits estables.
  • Decodificar solo el opcode principal. Pueden ser necesarios campos de función, modos, extensiones y comprobaciones de legalidad.
  • Concatenar los bits del inmediato en el orden numérico del dibujo. Sigue exactamente el mapeo de bits de la ISA y después extiende desde el bit de signo especificado.
  • Accionar efectos laterales directamente desde una decodificación sin calificar. Condiciona las escrituras con la validez de la canalización, la temporización de etapa y el estado de excepción/vaciado.
  • Reiniciar a un patrón de instrucción arbitrario. Prefiere un bit de validez o un estado de reinicio del controlador; no supongas que todos los bits a cero significan NOP.
  • Tratar una forma de onda didáctica como prueba de temporización física. El modelo puede mostrar secuenciación lógica, no el cierre de tiempos de establecimiento y retención en silicio.

Construir y verificar un decodificador didáctico

Abre el Ejecutor secuencial de instrucciones e identifica:

  1. el elemento que almacena instrucciones;
  2. los cables que forman cada campo;
  3. las salidas de control influidas por cada campo; y
  4. el punto en el que esas salidas pueden cambiar el estado arquitectónico.

Después, crea una tabla de pruebas compacta:

Clase de pruebaQué variarResultado esperado
Cada opcode legalBits del opcode principalFamilia de operaciones correcta y habilitaciones de efectos laterales
Variantes de funciónCampos secundariosVariante correcta de ALU o direccionamiento
Direcciones de registroCampos rs / rdPuertos de registro correctos; operación sin cambios
Extremos de inmediatoCero, máximo positivo, máximo negativoConcatenación y extensión correctas
Codificación reservadaPatrón de bits no admitidoRuta de instrucción ilegal, sin escritura no intencionada
DetenciónMantener la decodificación durante varios relojesLa instrucción y el control permanecen alineados
VaciadoInvalidar una instrucción en cursoSin efecto lateral en registros ni memoria

Alternar manualmente un ejemplo es una ilustración, no una verificación suficiente. Cubre toda clase de operación legal y codificaciones ilegales representativas.

Dónde encaja en la CPU

El contador de programa proporciona la dirección de búsqueda. La decodificación identifica los operandos y la intención de control. El registro de banderas de la CPU es una posible fuente de condiciones de salto en ISA basadas en banderas; otras ISA comparan registros directamente. La unidad de control secuencia la ruta de datos didáctica y condiciona los efectos laterales.

En conjunto, estos elementos explican el flujo de control de un procesador pequeño, pero ninguno de ellos por sí solo es «todo el plano de control». Las cachés, la predicción, las excepciones, el privilegio, los riesgos y el estado de canalización añaden más control en máquinas mayores.

Referencias principales

Continúa con el análisis detallado de búsqueda–decodificación–ejecución y, después, modifica una codificación en la CPU didáctica y actualiza conjuntamente el decodificador, las pruebas y la documentación.

Convierte la idea en un circuito funcional.