ModelSim中如何在添加信号到波形窗口前获取所有信号仿真数据?
在ModelSim中先获取仿真数据再添加波形信号的方法
作为从Cadence Incisive切换到ModelSim的过来人,我完全理解你这种操作习惯转变的困惑——毕竟两款工具的流程逻辑确实有不少差异。其实ModelSim完全支持先跑完仿真、再添加波形查看历史数据的操作,下面给你详细讲两种实用方法:
方法一:直接先跑仿真,再回溯加载波形
这是最直接的方式,利用ModelSim自带的波形回溯能力,步骤如下:
- 保留你原有的编译和加载流程:用
vcom编译所有源文件和测试平台,然后用vsim加载测试平台(务必加上-voptargs=+acc参数,避免工具优化隐藏信号) - 跳过打开窗口和添加波形的步骤,直接运行仿真到目标时间点,比如
run -all(跑完全部仿真)或者run 500ns(指定仿真时长) - 仿真完成后,再用
add wave命令添加你需要的信号,比如添加顶层所有信号:add wave sim:/tb_top/* - 最后打开波形窗口并查看全部数据:
view wave+wave zoom full
这时候你会发现,波形窗口里已经显示了从仿真开始到结束的所有信号数据,哪怕是在添加波形前就已经跑完的仿真周期。
方法二:保存波形数据库,后续随时加载查看
如果你的仿真时间很长、内存占用过高,或者需要后续反复查看仿真数据,可以先把仿真数据保存到WLF波形文件,再按需加载查看:
- 完成编译和加载后,先运行仿真:
run -all - 将当前仿真的所有波形数据保存到WLF文件:
write wave -format wlf my_simulation_wave.wlf - 关闭当前仿真会话后,后续可以直接加载这个WLF文件查看:
vsim -view my_simulation_wave.wlf - 加载后用
add wave添加信号即可查看历史数据
完整的.do脚本示例
给你一个整合后的完整脚本参考:
# 编译源文件和测试平台 vcom -work work ./src/*.vhd vcom -work work ./tb/tb_top.vhd # 加载测试平台,禁用优化确保所有信号可访问 vsim -voptargs=+acc work.tb_top # 先跑完全部仿真 run -all # 添加顶层所有信号到波形 add wave -position end sim:/tb_top/* # 打开波形窗口并显示全部数据 view wave wave zoom full
关键注意点
- 一定要加上
-voptargs=+acc:ModelSim默认会做优化,可能会把未被引用的信号从仿真中移除,导致你后续添加信号时找不到。这个参数会强制保留所有信号的可访问性,和Incisive的默认行为更接近。 - 波形回溯的前提是仿真数据还在内存中(或者已经保存到WLF文件),如果仿真后执行了
restart命令,历史数据会被清空,就无法回溯了。
内容的提问来源于stack exchange,提问作者Cong Li
相关产品推荐
相关产品推荐

