-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
在Difftest中查看仿真波形
描述:在调试过程中,遇到信号值不正确,单从emu程序中看不出问题的时候,可以考虑启用波形仿真。
1.修改源文件
1.1 make 相关
- 文件:
verilator.mk:定位到以下代码段(关键字:trace) - 文件路径:
"你的项目名字"/difftest/verilator.mk
# Verilator trace support
EMU_TRACE ?= 1 #==============>>这一行<<==============#
ifeq ($(EMU_TRACE),1)
VEXTRA_FLAGS += --trace
endif- 将
EMU_TRACE ?=修改为EMU_TRACE ?= 1,并保存- 修改后将启用 verilator 的波形生成功能
- 有关trace选项的功能描述详见 verilator 官方文档 Verilator (veripool.org)
- 章节 "8.1.8 How do I generate waveforms (traces) in C++?"
1.2 difftest 源码
- 文件:
emu.h - 文件路径:
"你的项目名字"/difftest/src/test/csrc/verilator/emu.h
#define VM_TRACE 1- 在 "文件" 中加入如上的宏定义,并保存
2.编译和运行
2.1 编译新的emu程序
- 进入
"你的项目名字"/difftest目录执行以下命令,生成新的emu程序
make emu2.2 运行emu程序
- 进入
"你的项目名字"/build目录,执行以下命令(将emu和*.bin文件拷贝到其他地方执行也可以,只要你知道这两个文件的路径)
./emu -i add-riscv64-mycpu.bin- 程序会统计仿真时钟周期个数
Guest cycle spent: 22("22"是例子具体要看你自己的程序)- 注意:仿真周期个数统计需要在
SimTop.v中接入 “DifftestTrapEvent ”模块 - 可参考:oscpu-framework,接入DifftestTrapEvent ”
- 注意:仿真周期个数统计需要在
- 执行以下命令,获取帮助提示
./emu -h- 注意红框部分的描述,执行以下命令
- -b:开始记录的第 n 个周期
- -e:结束记录的第 N 个周期
- 由上面得到的
Guest cycle填入0和22,表示全程记录
./emu -b 0 -e 22 --dump-wave -i add-riscv64-mycpu.bin- 预期得到以下输出
- 在
"你的项目名字"/build目录下会生成以时间命名的*.vcd文件
3.使用gtkwave观察仿真波形
- 打开
*.vcd文件,添加一些信号,即可查看仿真波形
4.思路过程
- 这里是我启用difftest框架中功能的思考
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels




