99 lines
1.9 KiB
Markdown
99 lines
1.9 KiB
Markdown
# RISC-V Processor Simulation Environment
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
sim/
|
||
├── verilator/ # Verilator仿真环境
|
||
│ ├── testbench.cpp # 主测试平台
|
||
│ ├── memory.cpp/h # 内存模型
|
||
│ └── Makefile # 构建脚本
|
||
├── scripts/ # 测试脚本
|
||
│ └── run_tests.sh # 批量测试运行器
|
||
└── waves/ # 波形文件输出目录
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 编译测试平台
|
||
|
||
```bash
|
||
cd sim/verilator
|
||
make compile
|
||
```
|
||
|
||
这会:
|
||
- 从Chisel生成Verilog代码
|
||
- 使用Verilator编译C++测试平台
|
||
|
||
### 2. 运行单个测试
|
||
|
||
```bash
|
||
make run TEST=../../riscv-tests/isa/rv64ui-p-add
|
||
```
|
||
|
||
或直接运行:
|
||
|
||
```bash
|
||
./obj_dir/VCore ../../riscv-tests/isa/rv64ui-p-add
|
||
```
|
||
|
||
### 3. 运行所有测试
|
||
|
||
```bash
|
||
cd ../scripts
|
||
./run_tests.sh
|
||
```
|
||
|
||
查看结果:
|
||
|
||
```bash
|
||
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编译失败,检查:
|
||
1. Verilog是否正确生成在 `generated/` 目录
|
||
2. Core模块的IO接口定义
|
||
|
||
### 测试超时
|
||
|
||
如果测试一直超时:
|
||
1. 增加 `MAX_CYCLES` 在 testbench.cpp
|
||
2. 检查处理器是否正确执行指令
|
||
3. 验证内存接口握手逻辑
|
||
|
||
### 内存访问错误
|
||
|
||
检查:
|
||
1. ELF加载是否成功
|
||
2. 内存地址映射是否正确
|
||
3. 链接脚本中的地址与 `MEM_BASE` 一致
|