Apuntes de Verilog
Tema 7. Arquitectura de Ordenadores. Procesador MIPS
3ª Parte: la Unidad de Control
3ª Parte: la Unidad de Control
11 de septiembre 2025
La Control Unit (CU) o Unidad de Control en un procesador MIPS es el bloque encargado de dirigir el funcionamiento del procesador, generando las señales necesarias para que los demás módulos (ALU, memoria, Register File, etc.) realicen la operación correcta según la instrucción que se está ejecutando.
Es un circuito que, a partir del opcode y, en algunos casos, de los campos funct de la instrucción, decodifica qué tipo de operación se debe realizar y genera las señales de control adecuadas para coordinar el datapath.
Decodificación de instrucciones
Interpreta el opcode (y funct en instrucciones tipo R) para saber si la instrucción es aritmética, lógica o de carga/almacenamiento.
Generación de señales de control
Produce las señales que gobiernan el datapath, como:
RegWrite → habilita la escritura en el banco de registros.
MemRead / MemWrite → controlan lectura/escritura en la memoria de datos.
ALUOp → envía un código reducido a la ALU Decoder para elegir la operación exacta.
Interacción con la ALU Decoder
El módulo principal o Main Decoder envía una señal ALUOp general, y la ALU Decoder (otro bloque más pequeño) afina la operación exacta de la ALU según el campo funct de la instrucción.
Procesador MIPS: Control Unit
La imagen siguiente muestra el código Verilog de los dos módulos simples que forman la Unidad de Control: el Main Decoder y el ALU Decoder. Puedes descargar las fuentes al final de la página.
Para comprobar su correcto funcionamiento, vamos al conectar la Contro Unit con el Program Counter y el Instruction Memory.
La simulación consiste en grabar unas instrucciones de prueba en el Instruction Memory y verificar que la Unidad de Control activa las señales correspondientes, según se va incrementando el PC y el módulo IM va poniendo las instrucciones en el bus.
Unidad de Control. Circuito de prueba
Ejecutamos la simulación y verificamos que efectivamente la Unidad de Control funciona como se espera.
Ya hemosw verificado que la Unidad de Control funciona correctamente. Sólo queda conectarla con el Datapath y probar todo el conjunto. Para ello conectamos los módulos datapath y controller dentro de un módulo principal o top module.
Procesador MIPS. Instrucciones I-type
Para que no quede muy extenso, voy a poner a continuación solamente el código Verilog del top module y el testbench.
Todas las fuentes están disponibles para descargar al final de la página.
top module & testbench
Ejecutamos la simulación de un par de instrucciones lw, donde leemos dos datos de Data Memory y los guardamos en el Register File. A continuación ejecutamos dos instrucciones sw para almacenar dos datos del Registro en Data Memory. Luego volvemos a ejecutar tres instrucciones lw para verificar que los datos se han guardado correctamente en la memoria.
Eso es todo por el momento, espero que os haya gustado.
El siguiente paso es añadir nuevas funciones al datapath para ejecutar instrucciones tipo-R. (próximamente aquí).
MIPS32 Single-Cycle Processor, thanks to Mr Moamen Wael for sharing!
Puedes descargar las fuentes, esquema y testbenches aquí abajo.