11 个版本

0.0.11 2021年3月30日
0.0.10 2020年4月29日
0.0.9 2020年3月20日

#72模拟器

每月 25 次下载

MIT 协议

260KB
4K SLoC

RISC-V 模拟器核心实现

Build Status Actions Status docs.rs crate.io License

注意:此项目目前正在积极开发中。源代码可能会发生重大变化。

如何使用

创建一个 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