Implementación de un procesador RISC-V de 32 bits desde cero
Descripción • Estructura • Herramientas • Talleres • Uso
Este repositorio contiene el desarrollo completo de un procesador RISC-V de 32 bits realizado como parte del curso de Arquitectura de Computadores. El proyecto abarca desde componentes básicos (multiplexores, sumadores) hasta la implementación de un procesador monociclo funcional.
- Diseñar y simular componentes digitales básicos
- Implementar una ALU (Unidad Aritmético-Lógica) de 32 bits
- Desarrollar un archivo de registros (Register File) compatible con RISC-V
- Construir una unidad de control para decodificación de instrucciones
- Integrar todos los componentes en un procesador monociclo funcional
- Sintetizar y programar el diseño en una FPGA real
ArquitecturaComputadores/
│
├── 📁 TallerNo2Plexores/ # Multiplexores y demultiplexores básicos
│ ├── *.dig # Diseños en Digital
│ └── *.v # Implementaciones en Verilog
│
├── 📁 TallerNo3SumadorCompleto/ # Sumadores completos y simplificados
│ └── *.dig
│
├── 📁 TallerNo4Latches/ # Flip-flops y elementos de memoria
│ └── *.dig
│
├── 📁 TallerNo5Componentes4Bits/ # Componentes de 4 bits
│ ├── Registros, sumadores, restadores
│ └── *.dig
│
├── 📁 TallerNo6Componentes8Bits/ # Componentes de 8 bits
│ └── *.dig
│
├── 📁 TallerNo7Componentes32bits/ # Componentes principales de 32 bits
│ ├── ALU_32bits.v # Unidad Aritmético-Lógica
│ ├── PC_32bit.v # Program Counter
│ ├── RF24_32bit.v # Register File (32 registros)
│ ├── PM24_32bit.v # Program Memory
│ └── *_testbench.v # Testbenches exhaustivos
│
├── 📁 TallerNo8ALU32Bits/ # ALU optimizada con integración
│ ├── ALU_32bits.v
│ ├── CPU_Integration_32bit.v
│ └── testbench.v
│
├── 📁 TallerNo9TablaDeInstrucciones/ # Documentación de ISA
│
├── 📁 TallerNo10ControlUnit/ # Unidad de Control
│ ├── CU_32bits.dig # Control Unit
│ └── Deco_32bit.dig # Instruction Decoder
│
├── 📁 TallerNo11Immediate&Branch/ # Generación de inmediatos
│ ├── Immediate_32bits.dig
│ ├── Branch_32bit.dig
│ └── Inst_Decoder_*.dig # Decodificadores tipo I, B, S, U, J
│
└── 📁 ProcesadorMonociclo/ # Procesador completo integrado
├── ProcesadorMonociclo_32bits.dig
├── DataMemory_32bits.dig
└── Programas/ # Programas de prueba en ensamblador
├── factorial.asm
├── SimpleFactorial.asm
└── sum_n.asmDigital es un simulador de circuitos digitales educativo que permite:
- Diseñar circuitos de forma visual e intuitiva
- Simular en tiempo real el comportamiento de circuitos
- Exportar diseños a Verilog/VHDL
- Crear jerarquías de componentes reutilizables
Archivos: *.dig - Todos los diseños de circuitos del proyecto
Intel Quartus Prime es la herramienta oficial para diseño y síntesis en FPGAs Intel/Altera:
- Síntesis de código Verilog a hardware
- Place & Route optimizado
- Análisis de timing y recursos
- Programación directa de FPGA
Archivos: *.v - Código Verilog sintetizable para Quartus
Hardware Target:
- FPGA: Cyclone V SoC (5CSEMA5F31C6)
- Logic Elements: 85K
- Memory: 4.5 Mbits embedded
- DSP Blocks: 87
- ARM Cortex-A9: Dual-core (no usado en este proyecto)
Implementación de MUX y DEMUX de 1, 4 y 8 bits para selección y distribución de señales.
Diseño de sumadores de 1 bit, optimización con mapas de Karnaugh y circuitos simplificados.
Elementos de memoria: Latch SR, Flip-Flop D, JK y T para almacenamiento de estado.
Escalamiento de componentes: registros, sumadores y restadores de múltiples bits.
- Operaciones aritméticas: ADD, SUB
- Operaciones lógicas: AND, OR, XOR
- Desplazamientos: SLL, SRL, SRA
- Comparaciones: SLT, SLTU
- Flag zero- Contador de programa con reset asíncrono
- Write enable para saltos
- Incremento automático
- 32 registros de 32 bits (x0-x31)
- x0 hardwired a cero (RISC-V spec)
- 2 puertos de lectura, 1 puerto de escritura
- Memoria ROM de 1K palabras × 32 bits
- Almacenamiento de instrucciones
- Lectura asíncrona
Documentación completa del subset RISC-V implementado (RV32I).
Decodificación de instrucciones y generación de señales de control.
Generación de inmediatos para tipos I, B, S, U, J y lógica de branch.
Integración completa de todos los componentes en un procesador funcional:
Fetch → Decode → Execute → Memory → WriteBack (todo en un ciclo)
Características:
- Arquitectura RISC-V de 32 bits (RV32I)
- Ejecución monociclo
- Memoria de datos separada
- Soporte para instrucciones R, I, S, B, U, J
- Programas de prueba incluidos
# Para simulación con Digital
- Java Runtime Environment (JRE) 8+
- Digital.jar desde https://github.com/hneemann/Digital/releases
# Para síntesis en FPGA
- Intel Quartus Prime (versión 20.1 o superior)
- Drivers USB Blaster para programación
- FPGA DE1-SoC conectada-
Descargar e instalar Digital:
# Descargar Digital.jar https://github.com/hneemann/Digital/releases/latest # Ejecutar java -jar Digital.jar
-
Abrir un circuito:
File → Open → Seleccionar archivo .dig -
Simular:
- Hacer clic en el botón
- Modificar entradas con clic derecho
- Observar salidas en tiempo real
-
Circuito recomendado para empezar:
ProcesadorMonociclo/ProcesadorMonociclo_32bits.dig
cd TallerNo7Componentes32bits
.\run_tests.ps1 help # Ver opciones disponibles
.\run_tests.ps1 alu # Testear ALU
.\run_tests.ps1 -All # Testear todos los componentes-
Crear nuevo proyecto:
File → New Project Wizard -
Configurar dispositivo:
Family: Cyclone V Device: 5CSEMA5F31C6 -
Añadir archivos Verilog:
Project → Add/Remove Files → Añadir todos los .v -
Compilar:
Processing → Start Compilation -
Programar FPGA:
Tools → Programmer → Hardware Setup → USB-Blaster Start → Program FPGA
# En Quartus TCL Console:
cd TallerNo8ALU32Bits
source create_quartus_project.tcl| Componente | Logic Elements | Memory Bits | DSP Blocks |
|---|---|---|---|
| ALU 32-bit | ~500 LEs | - | 2-4 |
| Register File | ~400 LEs | ~1K bits | - |
| Program Memory | ~200 LEs | ~32K bits | - |
| Control Unit | ~300 LEs | - | - |
| Procesador Completo | ~3,000 LEs | ~35K bits | 4-6 |
Utilización total: ~3.5% de la FPGA Cyclone V
El procesador incluye programas de prueba escritos en ensamblador RISC-V:
# Calcula el factorial de un número
factorial.asm# Suma los primeros N números naturales
sum_n.asm# Implementación iterativa eficiente
SimpleFactorial.asmEste proyecto proporciona experiencia práctica en:
- Diseño digital jerárquico - De compuertas a procesadores
- Arquitectura RISC-V - ISA moderna y open-source
- Verilog HDL - Lenguaje de descripción de hardware
- Síntesis FPGA - De código a hardware real
- Metodología de testing - Testbenches y verificación
- Optimización de recursos - Área, timing, potencia
- Datapath y control - Separación de responsabilidades
- Pipeline concepts - Base para procesadores avanzados
- RISC-V ISA Spec: https://riscv.org/technical/specifications/
- Digital Simulator: https://github.com/hneemann/Digital
- Intel Quartus Prime: https://www.intel.com/content/www/us/en/products/details/fpga/development-tools/quartus-prime.html
- DE1-SoC User Manual: Terasic DE1-SoC
Catto2004
- GitHub: @Catto2004
- Repositorio: ArquitecturaDeComputadores
Este proyecto es desarrollado con fines educativos como parte del curso de Arquitectura de Computadores.
Las contribuciones, issues y sugerencias son bienvenidas. Si encuentras algún error o tienes ideas para mejorar:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
