1.9 KiB
1.9 KiB
RISC-V Processor Simulation Environment
目录结构
sim/
├── verilator/ # Verilator仿真环境
│ ├── testbench.cpp # 主测试平台
│ ├── memory.cpp/h # 内存模型
│ └── Makefile # 构建脚本
├── scripts/ # 测试脚本
│ └── run_tests.sh # 批量测试运行器
└── waves/ # 波形文件输出目录
快速开始
1. 编译测试平台
cd sim/verilator
make compile
这会:
- 从Chisel生成Verilog代码
- 使用Verilator编译C++测试平台
2. 运行单个测试
make run TEST=../../riscv-tests/isa/rv64ui-p-add
或直接运行:
./obj_dir/VCore ../../riscv-tests/isa/rv64ui-p-add
3. 运行所有测试
cd ../scripts
./run_tests.sh
查看结果:
cat test_results.txt
测试结果说明
- PASS: 测试通过 (tohost写入1)
- FAIL: 测试失败 (tohost写入错误码)
- TIMEOUT: 测试超时 (超过100,000周期)
tohost/fromhost 协议
- tohost地址: 0x80001000
- fromhost地址: 0x80001040
- 内存基址: 0x80000000
- 内存大小: 64MB
测试程序通过向tohost地址写入来报告结果:
tohost = 1: 测试通过tohost = (error_code << 1) | 1: 测试失败
依赖项
- Verilator (>= 4.0)
- Scala/SBT (Chisel编译)
- C++14编译器
- libelf-dev (ELF文件解析)
故障排查
编译错误
如果Verilator编译失败,检查:
- Verilog是否正确生成在
generated/目录 - Core模块的IO接口定义
测试超时
如果测试一直超时:
- 增加
MAX_CYCLES在 testbench.cpp - 检查处理器是否正确执行指令
- 验证内存接口握手逻辑
内存访问错误
检查:
- ELF加载是否成功
- 内存地址映射是否正确
- 链接脚本中的地址与
MEM_BASE一致