3 个版本

0.0.3 2020 年 7 月 22 日
0.0.2 2020 年 7 月 16 日
0.0.1 2020 年 7 月 7 日

#140模拟器

MIT 许可证

68KB
1K SLoC

Rysk Core

RISCV 解码和执行原语。实现您自己的虚拟 RISCV 机器所需的一切。

虚拟机

如果您在寻找一个可工作的虚拟机,您需要 Rysk。这是一个用于构建 RISCV 虚拟机的库。

用法

请注意,0.0 版本不保证稳定的 ABI。在早期开发过程中,任何内容都可能随时更改。

首先,在您的 Cargo.toml 中添加依赖项

    [dependencies]
    rysk-core = "0.0.3"

然后在您的项目中

    // Implement a memory management unit
    impl rysk_core::Mmu</* Register Size */> for YourMmu { /* ... */ }

    // Run your system
    fn main() {
        let mmu = YourMmu::new();
        let core = rysk_core::Core::</* Register Size */>::new(/* PC initial address */);

        loop {
            // fetch, then decode & execute
            core.execute(mmu.fetch_instruction(core.pc), &mut mmu).expect("Unable to decode instruction");
        }
    }

目标

当前目标

  • 支持所有 std 支持的平台兼容性
  • 支持 RV32IMA 和 RV64IMA
  • 无依赖项
  • 支持特权指令集架构

未来目标

  • 性能
  • 支持所有明确定义的基本扩展

合规性

注意:此列表不考虑实现中的错误和/或漏洞。不保证完全合规

如果指令的行为不符合规范,请提交问题

扩展 支持
RV32I 部分
RV32E
RV64I 完全
RV128I 待定
Zifencei
Zicsr 部分
N
M 完全
A
F
D
Q
C
G 部分
Zam N/A
Ztso 总是

支持嵌入式扩展的优先级较低。const-generics 将使实现此功能更加简洁,因此不计划在 stable Rust 中的 const-generics 之前支持 RV32E。

特权级别

级别 支持
机器 部分
监督器
用户

扩展

大多数扩展通过 cargo 功能启用。

扩展 功能
Zicsr 默认
Zicsr ext-csr

基本扩展(RV32I,RV64I)通过使用的通用寄存器类型设置。 MXLEN 在编译时设置,因此不能通过 RISCV 程序更改(即 misa[MXLEN] 是只读的)。

无运行时依赖项

功能