English | 简体中文
CakeMu-RV 是一个用 Rust 编写的简单 RISC-V 模拟器,支持 RV32I 基本指令集。这是一个用于学习计算机组成原理的个人项目,通过实现基本的 CPU 执行过程和简单的外设系统,帮助理解计算机的基本工作原理。目前实现了指令执行、内存访问和基础的 I/O 操作等基本功能。该模拟器可以作为学习计算机组成原理的一个参考和实践工具。
- 支持 RV32I 基本指令集
- 完整的外设模拟系统:
- UART:支持字符和字符串输出
- Timer:可编程定时器,支持中断
- Wave Generator:波形发生器,支持多种波形输出
- 正弦波
- 方波(可调占空比)
- 三角波
- 锯齿波
- 提供 C 语言开发环境
- 支持调试输出控制
- 波形数据可视化工具
- 轻量级二进制程序构建工具
- 克隆仓库:
git clone https://github.com/yourusername/cakemu_rv.git
cd cakemu_rv
- 编译 C 测试程序:
cd c_sim
make
- 运行模拟器:
cargo run --bin riscv-emu build/program.bin
- 查看波形数据(如果使用了波形发生器):
python3 tools/plot_wave.py
--no-mtrace
:禁用内存访问跟踪--no-regtrace
:禁用寄存器跟踪--no-itrace
:禁用指令跟踪--step
:启用单步执行模式
项目提供了完整的 C 语言开发环境,包含以下外设支持:
- 基本功能:字符和字符串输出
- 接口:
uart_putc(char c)
:输出单个字符uart_puts(const char *str)
:输出字符串
- 基本功能:可编程定时器
- 寄存器映射:0x02000200
- 主要功能:
- 可编程计数值
- 中断支持
- 自动重载功能
- 接口:
timer_init(uint32_t compare_value)
:初始化定时器timer_enable()
:启动定时器timer_disable()
:停止定时器timer_get_status()
:获取定时器状态timer_clear_status()
:清除定时器状态
- 基本功能:波形发生器
- 寄存器映射:0x02000300
- 支持波形:
- 正弦波 (WAVE_TYPE_SINE)
- 方波 (WAVE_TYPE_SQUARE)
- 三角波 (WAVE_TYPE_TRIANGLE)
- 锯齿波 (WAVE_TYPE_SAWTOOTH)
- 可配置参数:
- 频率 (1Hz-100kHz)
- 幅度 (0-255)
- 相位 (0-359度)
- 占空比 (0-100%, 仅方波)
- 接口:
wave_init()
:初始化波形发生器wave_enable()
:启动输出wave_disable()
:停止输出wave_set_type(uint32_t type)
:设置波形类型wave_set_frequency(uint32_t freq)
:设置频率wave_set_amplitude(uint32_t amp)
:设置幅度wave_set_phase(uint32_t phase)
:设置相位wave_set_duty(uint32_t duty)
:设置占空比
项目提供了波形数据可视化工具:
- 波形数据自动保存到
wave.txt
- 使用 Python 脚本可视化:
python3 tools/plot_wave.py
项目包含了一个综合测试程序 (c_sim/main.c
),演示了所有外设的使用方法:
- UART 字符和字符串输出测试
- Timer 定时器测试(短延时和长延时)
- Wave Generator 所有波形类型测试
本项目采用 GPL-3.0 许可证。详见 LICENSE 文件。