3 个版本
0.0.3 | 2020 年 7 月 22 日 |
---|---|
0.0.2 | 2020 年 7 月 16 日 |
0.0.1 | 2020 年 7 月 7 日 |
#140 在 模拟器 中
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]
是只读的)。