这一篇在干嘛?
仿真的结果最终都要靠看波形来验证。这一篇专门讲 Wave 窗口的使用:添加信号的四种方法、缩放波形的各种姿势、游标(Cursor)的用法——包括测量两个事件之间的时间间隔——最后教你把窗口配置保存成 .do 文件,下次仿真一键还原。
FPGA 语境
在安路 TD 里做完综合或布局布线后,如果你导出网表到 QuestaSim 做时序仿真,看波形的思路和这一篇完全一致:加信号、缩放、打游标量延时,是调试 FPGA 设计最常用的三板斧。
载入设计
本评件沿用「Basic Simulation」一课中仿真过的设计。
-
如果你刚做完别的课程,QuestaSIM 应该已经在运行;否则先启动它:
- 在 UNIX shell 输入
vsim,或在 Windows 下双击 QuestaSIM 图标。 - 如果弹出 Welcome to Questa SIM 对话框,点击 Close。
- 在 UNIX shell 输入
-
载入设计:
- 选择 File > Change Directory,打开你在「Basic Simulation」一课中创建的目录。
work库应该已经存在。 - 用优化设计的名字载入设计:
- 选择 File > Change Directory,打开你在「Basic Simulation」一课中创建的目录。
vsim testcounter_optQuestaSIM 载入设计后,会打开一个 Structure (sim) 窗口。
向 Wave 窗口添加信号
QuestaSIM 提供了好几种往 Wave 窗口添加对象的方法,这一节把常用的都试一遍。
方法一:从 Objects 窗口添加
- 选择 View > Objects 打开 Objects 窗口。
- 在 Objects 窗口里选中一个对象,右键选择 Add to > Wave > Signals in Region,QuestaSIM 会打开一个 Wave 窗口并显示该区域内的信号。
还有两种等价操作:
- 把鼠标悬停在某 个对象上,点右键打开上下文菜单,点 Add Wave 把该对象放进 Wave 窗口;
- 或者先框选一组对象,再右键打开上下文菜单,点 Add Wave 一次全加进去。
方法二:拖拽(drag-and-drop)
你可以从很多其他窗口(比如 Structure、Objects、Locals)把对象直接拖进 Wave 窗口。
- 先把 Wave 窗口里的旧内容清掉:在 Wave 窗口选择 Edit > Select All,再 Edit > Delete。
- 从 Structure (sim) 窗口把一个实例拖进 Wave 窗口,QuestaSIM 会把该实例的所有对象加进 Wave 窗口。
- 再从 Objects 窗口把一个信号拖进 Wave 窗口。
- 试完后再用 Edit > Select All + Edit > Delete 清空,准备试下一种方法。
方法三:add wave 命令
在 VSIM> 提示符下输入:
add wave *QuestaSIM 会把当前选中区域的所有对象都加进 Wave 窗口。
然后跑一段仿真让波形画出来:
run 500 ns什么时候用哪种方法?
只想盯一两个关键信号,用 Objects 窗口右键最精准;想看某个实例的全部信号,拖拽实例最快;想「全都加上再说」,
add wave *一条命令搞定。
顺便:窗口的停靠与浮动
默认情况下,Wave 窗口停靠在 Main 窗口右侧。想改默认停靠位置,可以通过 Preferences 对话框(Tools > Edit Preferences)设置,详见 GUI Reference Manual 中的 Setting GUI Preferences。
点击 Wave 窗口上的 undock(取消停靠)图标,可以把 Wave 窗口变成独立浮动窗口,方便拖大:

波形看不清的时候,把窗口拖大是最简单有效的办法。
缩放波形显示
缩放波形的方法非常多,逐个试试。
- 点击 Wave 窗口工具栏上的 Zoom Mode 图标,然后在波形显示区按住鼠标向右下方拖动。你会看到蓝色的竖线和数字框出了要放大的区域:

- 选择 View > Zoom > Zoom Last,波形显示会恢复到上一次的显示范围。
- 连点几次 Zoom In 图标,逐级放大:

- 在波形显示区按住鼠标向右上方拖动——这次框出的是要缩小的范围(zoom out)。
- 选择 View > Zoom > Zoom Full,一键回到全程视图。
用游标在 Wave 窗口里量时间
游标(Cursor)用来标记仿真时间。QuestaSIM 第一次画 Wave 窗口时,会在时间零点放一个游标;点击游标时间轴,游标就会跳到鼠标所在位置。
你还可以:添加更多游标;给游标命名、锁定和删除;用游标测量时间间隔;用游标寻找信号跳变。
先把 Wave 窗口停靠回 Main 窗口(点 dock 图标):

单游标:定位与读值
-
定位游标:
- 点击 Wave 窗口工具栏上的 Select Mode 图标。
- 在游标时间轴(cursor timeline)任意位置点击,游标会吸附到你点击的时间点:

- 按住游标拖动,同时观察值面板(value pane):随着游标移动,各信号的值实时变化。这大概是查看「某个时刻信号是多少」最省事的方法。
-
两种拖动方式,吸附行为不同:
- 在波形面板里把鼠标移到游标线上,指针变成双向箭头时按住左键选中游标,把它拖到某个跳变的右侧。松开鼠标后,游标会吸附到左边最近的跳变上——当游标被拖到距波形边沿十像素以内时就会吸附。吸附距离可以在 Window Preferences 对话框里设置(Tools > Window Preferences)。
- 在游标时间轴面板里选中黄色的时间指示框拖动,游标不会吸附到跳变上。
-
给游标改名:
- 在游标面板右键 Cursor 1,选中文字并删除。
- 输入
A并回车,游标名字就变成了 A:
| Wave | Msgs | |
| /test_counter/clk | 0 | |
| /test_counter/reset | 0 | |
| /test_counter/count | 00010000 | |
| Now | 400 ns | |
| A | 322 ns | |
-
让游标跳到信号的下一个/上一个跳变:
- 在路径面板点击信号
count。 - 点击 Wave 窗口工具栏上的 Find Next Transition 图标,游标跳到所选信号的下一个跳变处:
- 在路径面板点击信号

- 点击 Find Previous Transition 图标,游标跳回上一个跳变处:

多游标:测量时间间隔
用两个游标可以测出两个时刻之间的间隔,这是排查时序问题(比如 FPGA 时序仿真里信号到达时间差)的常用手段。
-
添加第二个游标:
- 点击 Wave 窗口工具栏上的 Insert Cursor 图标。
- 右键新游标的名字,删掉默认文字。
- 输入
B并回车。 - 拖动游标 B,两个游标之间的间隔测量值会跟着实时变化:

-
锁定游标 B:
- 右键游标 B 关联的黄色时间指示框(在 56 ns 处)。
- 在弹出菜单里选择 Lock B。
游标颜色变成红色,不能再被拖动了:

锁定的用处
锁定游标相当于钉住一个参考时刻(比如时钟上升沿),之后随便拖另一个游标对比间隔,参考点都不会被误碰挪走。
- 删除游标 B:右键游标 B(56 ns 处的红色框),选择 Delete B。
保存并复用窗口格式
一旦关闭 Wave 窗口,你对窗口做的所有配置(加了的信号、设好的游标)都会被丢弃。好在可以用 Save Format 命令把当前 Wave 窗口的显示和信号配置捕获到一个 .do 文件里,以后打开这个文件就能把窗口原样恢复。
格式文件与设计绑定
格式文件是「设计相关」的——只对你创建它时所仿真的那个设计有效,换个设计加载它没有意义。
-
保存格式文件:
- 在 Wave 窗口选择 File > Save Format。
- 在 Save Format 对话框的 Pathname 一栏,保持文件名为默认的
wave.do,点击 OK。 - 关闭 Wave 窗口。
-
加载格式文件:
- 在 Main 窗口选择 View > Wave 重新打开 Wave 窗口。
- 把窗口 undock 出来。此时你之前设置的信号和游标全都不见了。
- 在 Wave 窗口选择 File > Load。
- 在 Open Format 对话框里选中
wave.do,点击 Open。
QuestaSIM 会把窗口恢复到保存时的状态,信号和游标全部回来了。看完之后选择 File > Close Window 关闭 Wave 窗口。
收尾
本课到此结束。继续之前需要结束当前仿真:
- 选择 Simulate > End Simulation,点击 Yes。
相关资料
- Wave Window(Questa SIM GUI Reference Manual)
- Recording Simulation Results With Datasets(Questa SIM User’s Manual)
自测
自测
- 向 Wave 窗口添加信号有哪几种方法?各自适合什么场景?
add wave *命令的作用是什么?- 在波形面板拖动游标和在游标时间轴面板拖动游标,吸附跳变的行为有什么区别?吸附距离在哪里设置?
- 如何测量两个时刻之间的时间间隔?为什么有时要把其中一个游标锁定?
- Save Format 保存的 .do 文件能跨设计使用吗?为什么?