Simulador del ISA base RISC-V de 32 bits implementado en C++.
- Soporte completo para el ISA base RV32I (37 instrucciones)
- Memoria plana little-endian de 256 MB (paginada internamente)
- Carga de programas binarios raw desde archivo
- Ejecución paso a paso con desensamblador integrado
- Inspección de PC, registros (con nombres ABI) y memoria
- Soporte básico de
ecall(syscalls SPIM: print_int, print_str, print_char, exit) - REPL interactivo con múltiples comandos
| Tipo | Instrucciones |
|---|---|
| Loads | lb, lh, lw, lbu, lhu |
| Stores | sb, sh, sw |
| Aritmética inmediata | addi, slli, slti, sltiu, xori, srli, srai, ori, andi |
| Aritmética de registros | add, sub, sll, slt, sltu, xor, srl, sra, or, and |
| Saltos | beq, bne, blt, bge, bltu, bgeu |
| Saltos incondicionales | jal, jalr |
| Inmediatos superiores | lui, auipc |
| Sistema | ecall, ebreak |
cmake -S . -B build
cmake --build build./build/riscv-sim programa.binSi no se especifica archivo, el simulador arranca igual y permite cargarlo con el comando load.
| Comando | Descripción |
|---|---|
step [N] |
Ejecutar N instrucciones (default 1) |
run |
Ejecutar hasta halt/ebreak/ecall exit |
pc |
Mostrar PC actual |
regs |
Mostrar todos los registros |
reg <nombre> |
Mostrar un registro (ej: reg a0, reg x5, reg pc) |
mem <hex> [hex] |
Mostrar memoria desde addr hasta addr2 |
disasm <hex> [N] |
Desensamblar N instrucciones desde dirección |
reset |
Reiniciar CPU (conserva memoria) |
load <archivo> |
Cargar nuevo binario (resetea CPU) |
status |
Mostrar PC, estado y pasos ejecutados |
help |
Mostrar ayuda |
exit |
Salir |
$ ./build/riscv-sim riscvtest.bin
"riscvtest.bin" cargado en 0x00000000
> disasm 0 10
0x00000000 00500113 addi zero, zero, 5
...
> step 5
[1] 0x00000000 addi zero, zero, 5
...
> reg a0
a0 = 0x00000019 (25)
> mem 64 64
Memoria (0x64 - 0x64):
0x00000064 00000019 (25)
> exit