Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在difftest中查看仿真波形 #11

Open
stormkidorg opened this issue Aug 8, 2021 · 9 comments
Open

在difftest中查看仿真波形 #11

stormkidorg opened this issue Aug 8, 2021 · 9 comments

Comments

@stormkidorg
Copy link

在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 emu

2.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框架中功能的思考

@stormkidorg
Copy link
Author

如果有说错的地方请大家指出,相互讨论

@doubletpy
Copy link

求助,我直接输入./emu -i add-riscv64-mycpu.bin时可以运行28哥周期,于是重新输入./emu -b 0 -e 28 --dump-wave -i add-riscv64-mycpu.bin就会卡在第一条指令,我换了不同的bin文件也都是这样,检测触的错误值还一样
![R~XDI13@JVIT 4MVMJ求助,我直接输入./emu -i add-riscv64-mycpu.bin时可以运行28哥周期,于是重新输入./emu -b 0 -e 28 --dump-wave -i add-riscv64-mycpu.bin就会卡在第一条指令,我换了不同的bin文件也都是这样,检测出的错误值还一样

@doubletpy
Copy link

}9HD036R49$YTS (OW9(FPB
报错是这个

@stormkidorg
Copy link
Author

可能跟NEMU和difftest版本有关,我使用的香山最新的版本;你下载最新的试一下

@doubletpy
Copy link

可能跟NEMU和difftest版本有关,我使用的香山最新的版本;你下载最新的试一下

我前两天用最新版本menu编译总过不了,然后重新下了稳定版本,啊这

@stormkidorg
Copy link
Author

NEMU 第一次make的时候要用make menuconfig,进去自己配置一些选项;编译不过的话,是缺少文件,按照提示装上就行了

@HotCoCoC
Copy link

求助...目前我可以输出vcd文件,difftest似乎也没什么大错,但vcd波形一直是0sec到0sec想咨询一下大佬们碰上过这个问题么?
image
image
image

@stormkidorg
Copy link
Author

是否接入了DifftestTrapEvent
注意:仿真周期个数统计需要在SimTop.v中接入 “DifftestTrapEvent ”模块
可参考:oscpu-framework,接入DifftestTrapEvent ”

@HotCoCoC
Copy link

谢谢大佬,问题已经解决。之前trap信号的cycleCnt硬连线到0了...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants