/trantor

Primary LanguageRustMIT LicenseMIT

trantor

帮你一步一步实现RISCV指令集模拟器的框架。这个框架是terminus裁剪出来的。

第一步

  • 实现RV32/64I
  • 你需要定义RV32/64I 指令集, 指令的实现基于terminus_vault, 如何定义指令可以参考这里
  • 你需要定义RV32/64I 必要的csr, csr的实现基于terminus_vault, 如何定义csr可以参考这里
  • 你需要实现在这里实现Processor的基本功能,如取指令,译码(可参考这里), 执行等
  • 你需要通过测试basic_tests, 你可能要修改riscv_test的内容
  //run all test
  cargo run --example basic_tests
  //or run single test
  cargo run --example basic_tests -- -r rv64ui-p-add
  • 如果需要debug testcase, 请参考riscv-tests, 或自行objdump elf, 所有的elf在这里

第二步

  • 实现RV32/64M
  • 你需要定义RV32/64M 指令集, 相信通过第一步,你已经发现通过terminus_vault是很容易的
  • 你需要通过测试m_ext_tests

第三步

  • 实现M/S/U privilege
  • 你需要修改processor, 定义新的csr,并添加相应的privilege指令
  • 你需要通过priv_m_tests, priv_m_tests

第四步

  • 实现atomic extension并支持多核
  • 你需要添加atomic指令,修改processor和bus来支持atoimc操作
  • 你需要通过multi_core_tests

第五步

  • 实现compress extensionf
  • 你需要添加compress指令集
  • 你需要通过c_ext_tests

第六步

  • 实现浮点指令集
  • 你需要添加单精度和双精度浮点指令集
  • 你需要通过f_ext_tests, d_ext_tests

第七步

  • 支持虚拟地址
  • 你需要修改该processor,为processor添加mmu,以支持虚拟地址,pmp
  • 你需要通过mmu_tests
  • 至此你应该能通过riscv_tests

第八步

  • boot linux
  • 通过之前步骤,你现在可以尝试用模拟器来启动linux, 这里提供了一个bbl+linux的image
  • 你需要添加一些必要的外设,terminus_transport可以帮助到你,你也可以借助terminus_transport定义自己的外设
  • 你可能需要利用到elf和dts的一些处理,这里可能可以帮助到你
  • 在此步骤你可能会发现之前测试没有覆盖的bug,为processor提供一些简单的trace和debug功能会很很有帮助

Enjoy ^_^