1. La ISA: un contrato entre software y hardware
La arquitectura del repertorio de instrucciones (ISA) define qué instrucciones existen, qué hace cada una y cómo se codifica en bits. RISC-V es una ISA abierta; su base entera de 32 bits, RV32I, tiene 40 instrucciones de 32 bits de ancho. Tomemos add a2, a0, a1: la especificación dice que suma los registros a0 y a1 y deja el resultado en a2, y que se codifica como la palabra 0x00B50633.
2. Decodificar: leer los campos de la palabra
El hardware no «lee» texto: separa la palabra en campos de posición fija. Los 7 bits bajos (opcode) dicen que es una operación registro-registro (formato R); funct3 y funct7 eligen la suma; y tres campos de 5 bits dan los números de registro. Esta es la descomposición que hace el decodificador del sitio:
| Campo | Bits | Binario | Significado |
|---|---|---|---|
| funct7 | [31:25] | 0000000 | distingue variantes (0100000 = sub/sra) |
| rs2 | [24:20] | 01011 | registro x11 (a1) |
| rs1 | [19:15] | 01010 | registro x10 (a0) |
| funct3 | [14:12] | 000 | selecciona la operación dentro del grupo |
| rd | [11:7] | 01100 | registro x12 (a2) |
| opcode | [6:0] | 0110011 | grupo OP |
| Instrucción | add a2, a0, a1 | ||
Puedes repetirla con cualquier palabra en el decodificador RISC-V.
3. Ejecutar: cambiar el estado del procesador
Ejecutar la instrucción es aplicar su efecto al estado visible: los 32 registros y el contador de programa (PC). Si antes cargamos a0 = 5 y a1 = 7, después de add el registro a2 vale 12 y el PC avanza 4 bytes.
addi a0, zero, 5 addi a1, zero, 7 add a2, a0, a1
El depurador RISC-V ejecuta este programa instrucción a instrucción y resalta el registro que cambia en cada paso.
4. Segmentar: solapar instrucciones en el tiempo
Un procesador segmentado divide cada instrucción en etapas (IF, ID, EX, MEM, WB) y empieza una nueva en cada ciclo. El problema aparece cuando una instrucción necesita un resultado que la anterior todavía no ha escrito. En el programa de arriba, add necesita a1 justo después de calcularlo: sin forwarding, el simulador la hace esperar 3 ciclos (10 ciclos en total); con forwarding, el valor se reenvía desde la etapa siguiente y no hay espera (7 ciclos).
Compruébalo en el simulador de pipeline activando y desactivando el forwarding.
5. Lógica digital: el circuito que suma
La suma la hace la ALU, que está construida con puertas lógicas. Un sumador de 32 bits encadena sumadores completos de 1 bit; cada uno recibe A, B y el acarreo de entrada C y produce un acarreo de salida que vale 1 cuando al menos dos entradas valen 1. En un mapa de Karnaugh esa función ocupa las celdas 3, 5, 6 y 7:
| A \ BC | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 0 | 00 | 01 | 13 | 02 |
| 1 | 04 | 15 | 17 | 16 |
Los tres grupos de dos celdas dan Cout = BC + AC + AB: tres puertas AND de 2 entradas y una OR de 3, en lugar de los cuatro productos de 3 variables de la tabla de verdad. Ábrelo en el minimizador de Karnaugh.