11 个版本
0.0.11 | 2021年3月30日 |
---|---|
0.0.10 | 2020年4月29日 |
0.0.9 | 2020年3月20日 |
#72 在 模拟器
每月 25 次下载
260KB
4K SLoC
RISC-V 模拟器核心实现
注意:此项目目前正在积极开发中。源代码可能会发生重大变化。
如何使用
创建一个 Emulator
对象,将二进制数据放入DRAM中,并将程序计数器设置为 DRAM_BASE
。目前二进制数据必须不包含任何头部。示例在此
use rvemu::bus::DRAM_BASE;
use rvemu::emulator::Emulator;
fn main() {
// Create a dummy binary data.
let data = vec![
0x93, 0x0f, 0xa0, 0x02, // addi x31, x0, 42
];
// Create an emulator object.
let mut emu = Emulator::new();
// Place the binary data in the beginning of DRAM.
emu.set_dram(data);
// Set the program counter to 0x8000_0000, which is the address DRAM starts.
emu.set_pc(DRAM_BASE);
// Start the emulator.
emu.start();
// `IllegalInstruction` is raised for now because of the termination condition of the emulator,
// but the register is successfully updated.
assert_eq!(42, emu.cpu.xregs.read(31));
}
查看rvemu/lib/rvemu-cli/src/main.rs中的示例用法。
功能
目前支持以下功能(未来将添加更多)
- RV64G ISA
- RV64C ISA
- 特权ISA
- 控制和状态寄存器 (CSRs)
- 虚拟内存系统 (Sv39)
- 设备
- UART:通用异步接收器/发送器
- CLINT:核心局部中断器
- PLIC:平台级中断控制器
- Virtio
依赖
~0–2MB
~40K SLoC