Skip to content
Rodri5449Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

RISC-V RV32I Simulator

Simulador del ISA base RISC-V de 32 bits implementado en C++.

Características

  • 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

Instrucciones implementadas

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

Compilar

cmake -S . -B build
cmake --build build

Usar

./build/riscv-sim programa.bin

Si no se especifica archivo, el simulador arranca igual y permite cargarlo con el comando load.

Comandos del REPL

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

Ejemplo de sesión

$ ./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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages