使用 C++23 从零实现 RISC-V 模拟器

使用 C++23 从零实现 RISC-V 模拟器

使用 C++23 从零实现的 RISC-V 模拟器,最终的模拟器可以运行 xv6 操作系统。

本教程参考了 Asami 所写的 Rust 版本的模拟器教程 ,但是原版只写了前三章。此外也参考了 Rare 对 rvemu 的改进 Rare 这也是一个 Rust 版本的并且已经完结了,对 rust 版本感兴趣的可以参考上面所给出对应的链接。

接下来我将会用 C++ 23 来实现,原则是即能用上的新特性全部都用上。以循序渐进的方式,最终实现一个可以运行 xv6 操作系统的 RISC-V 模拟器。此外重新组织了实现方式,一定程度上降低了难度梯度。

前置知识

假设读者学过 C 语言并且了解一点 C++ 的基本概念,即 C with class 水平即可。

对于 RISC-V 方面的知识可以参考下面的内容:

开发环境

  • Linux / Win(WSL) / MacOS

使用 docker 开发,其内部包含了一个 Ubuntu 20.04,其中用到了 riscv64-unknown-elf-gcc, 也可以用 clang 来编译。

lab0-start-code 分支是一个包含了 gtest 的启动代码。项目名称为 crvemu ,即 C++ RISC-V emulate 的缩写。

sh 复制代码
git clone --recurse-submodules https://github.com/weijiew/crvemu
cd crvemu && mkdir -p build && cd build
cmake .. && make -j $(nproc)
./crvemu
# Hello, World!

验证 gtest :

sh 复制代码
cmake .. && make -j $(nproc) && ./g_test

问题

如有任何问题,可以随时提 crvemu issue。

👉🏻 文章汇总「从零实现模拟器、操作系统、数据库、编译器...」:https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc

相关推荐
国科安芯2 天前
星载通信载荷信号处理中抗辐射微控制器的选型与适应性分析
人工智能·嵌入式硬件·mcu·信号处理·risc-v·抗辐射·空间信息
RISCV_Explorer3 天前
RISC-V RVV向量编程模型机制解析——vsetvl配置、掩码与尾元素策略及长度无关编程
后端·risc-v
RISCV_Explorer3 天前
RISC-V电源管理与低功耗实战——WFI指令、电源域划分与唤醒路径设计
单片机·嵌入式硬件·risc-v
ChipCamp3 天前
Spike-pk在RISC-V RTL开发验证中的应用:黄金参考基准
risc-v·spike·difftest·co-simulation·spike-pk·riscv-pk
Hi202402173 天前
Vortex CUDA 生态适配:让 CUDA C、CUTLASS 与 Triton 在 RISC-V GPGPU 上运行
人工智能·risc-v·gpgpu
zh_xuan4 天前
c++ 23 std::out_ptr用法
开发语言·c++23·out_ptr
国科安芯4 天前
用 AS32X601 做一块关节电机驱动板:三相桥、电流采样、封波保护、FOC 代码一次讲透
risc-v·foc·bldc·关节电机·机器人关节·as32x601·三相逆变桥
硅基手札4 天前
【risc-v专栏 07】启动与 bare-metal 流程
risc-v
硅基手札4 天前
【risc-v专栏 08】扩展生态与 -march/-mabi 匹配
risc-v
硅基手札5 天前
【risc-v专栏 06b】内存架构深挖:PMA / ePMP / Cache / CMO / MMU 细节 / RVWMO 形式化
架构·risc-v