VERILATOR: 运行带C++封装的HelloWorld SystemVerilog后终端卡住
Verilator HelloWorld示例运行卡住故障排查
核心故障原因及解决方法
1. 仿真逻辑无终止条件(最高发原因)
sim_main.cpp主程序未设置退出触发条件,或our.v逻辑未调用$finish系统函数,导致仿真陷入无限循环:- 检查
sim_main.cpp的主循环逻辑,默认示例的循环依赖Verilated::gotFinish()触发退出,若HDL代码未调用$finish,该循环会永远执行 - 修复方案二选一:
- 在
our.v的打印逻辑后添加$finish;语句 - 在C++主循环中添加仿真周期计数,达到预设阈值后主动break跳出循环并终止仿真
- 在
- 检查
2. HDL逻辑存在死锁
- 检查
our.v是否存在组合逻辑环路、时钟无翻转等问题,导致仿真卡在eval()调用步骤无法推进 - 可在编译时添加
--trace参数生成VCD波形,终止卡住的进程后查看波形最后停留的时间节点,定位问题逻辑
3. 开发版Verilator缺陷
- 你使用的是4.211开发快照版本,非官方稳定发布版,存在生成代码BUG的概率。可降级到Verilator 4.210稳定版本复现验证,若稳定版无问题则为开发快照的已知缺陷
4. 可执行文件调用错误
- Verilator默认生成的仿真可执行文件名为
obj_dir/V<顶层模块名>,如果你our.v的顶层模块名为our,正确的运行命令应为./obj_dir/Vour,错误调用其他文件会导致不可预期的异常
内容的提问来源于stack exchange,提问作者Miodrag Vukovic
相关产品推荐
相关产品推荐

