这一篇在干嘛?

仿真的结果最终都要靠看波形来验证。这一篇专门讲 Wave 窗口的使用:添加信号的四种方法、缩放波形的各种姿势、游标(Cursor)的用法——包括测量两个事件之间的时间间隔——最后教你把窗口配置保存成 .do 文件,下次仿真一键还原。

FPGA 语境

在安路 TD 里做完综合或布局布线后,如果你导出网表到 QuestaSim 做时序仿真,看波形的思路和这一篇完全一致:加信号、缩放、打游标量延时,是调试 FPGA 设计最常用的三板斧。

载入设计

本评件沿用「Basic Simulation」一课中仿真过的设计。

  1. 如果你刚做完别的课程,QuestaSIM 应该已经在运行;否则先启动它:

    • 在 UNIX shell 输入 vsim,或在 Windows 下双击 QuestaSIM 图标。
    • 如果弹出 Welcome to Questa SIM 对话框,点击 Close。
  2. 载入设计:

    • 选择 File > Change Directory,打开你在「Basic Simulation」一课中创建的目录。work 库应该已经存在。
    • 用优化设计的名字载入设计:
vsim testcounter_opt

QuestaSIM 载入设计后,会打开一个 Structure (sim) 窗口。

向 Wave 窗口添加信号

QuestaSIM 提供了好几种往 Wave 窗口添加对象的方法,这一节把常用的都试一遍。

方法一:从 Objects 窗口添加

  1. 选择 View > Objects 打开 Objects 窗口。
  2. 在 Objects 窗口里选中一个对象,右键选择 Add to > Wave > Signals in Region,QuestaSIM 会打开一个 Wave 窗口并显示该区域内的信号。

还有两种等价操作:

  • 把鼠标悬停在某 个对象上,点右键打开上下文菜单,点 Add Wave 把该对象放进 Wave 窗口;
  • 或者先框选一组对象,再右键打开上下文菜单,点 Add Wave 一次全加进去。

方法二:拖拽(drag-and-drop)

你可以从很多其他窗口(比如 Structure、Objects、Locals)把对象直接拖进 Wave 窗口。

  1. 先把 Wave 窗口里的旧内容清掉:在 Wave 窗口选择 Edit > Select All,再 Edit > Delete。
  2. 从 Structure (sim) 窗口把一个实例拖进 Wave 窗口,QuestaSIM 会把该实例的所有对象加进 Wave 窗口。
  3. 再从 Objects 窗口把一个信号拖进 Wave 窗口。
  4. 试完后再用 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 窗口变成独立浮动窗口,方便拖大:

undock 图标

波形看不清的时候,把窗口拖大是最简单有效的办法。

缩放波形显示

缩放波形的方法非常多,逐个试试。

  1. 点击 Wave 窗口工具栏上的 Zoom Mode 图标,然后在波形显示区按住鼠标向右下方拖动。你会看到蓝色的竖线和数字框出了要放大的区域:

Zooming in with the Zoom Mode Mouse Pointer

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

Zoom In 图标

  1. 在波形显示区按住鼠标向右上方拖动——这次框出的是要缩小的范围(zoom out)。
  2. 选择 View > Zoom > Zoom Full,一键回到全程视图。

用游标在 Wave 窗口里量时间

游标(Cursor)用来标记仿真时间。QuestaSIM 第一次画 Wave 窗口时,会在时间零点放一个游标;点击游标时间轴,游标就会跳到鼠标所在位置。

你还可以:添加更多游标;给游标命名、锁定和删除;用游标测量时间间隔;用游标寻找信号跳变。

先把 Wave 窗口停靠回 Main 窗口(点 dock 图标):

dock 图标

单游标:定位与读值

  1. 定位游标:

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

Working with a Single Cursor in the Wave Window

  • 按住游标拖动,同时观察值面板(value pane):随着游标移动,各信号的值实时变化。这大概是查看「某个时刻信号是多少」最省事的方法。
  1. 两种拖动方式,吸附行为不同:

    • 在波形面板里把鼠标移到游标线上,指针变成双向箭头时按住左键选中游标,把它拖到某个跳变的右侧。松开鼠标后,游标会吸附到左边最近的跳变上——当游标被拖到距波形边沿十像素以内时就会吸附。吸附距离可以在 Window Preferences 对话框里设置(Tools > Window Preferences)。
    • 在游标时间轴面板里选中黄色的时间指示框拖动,游标不会吸附到跳变上。
  2. 给游标改名:

    • 在游标面板右键 Cursor 1,选中文字并删除。
    • 输入 A 并回车,游标名字就变成了 A:
WaveMsgs
/test_counter/clk0
/test_counter/reset0
/test_counter/count00010000
Now400 ns
A322 ns
  1. 让游标跳到信号的下一个/上一个跳变:

    • 在路径面板点击信号 count
    • 点击 Wave 窗口工具栏上的 Find Next Transition 图标,游标跳到所选信号的下一个跳变处:

Find Next Transition 图标

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

Find Previous Transition 图标

多游标:测量时间间隔

用两个游标可以测出两个时刻之间的间隔,这是排查时序问题(比如 FPGA 时序仿真里信号到达时间差)的常用手段。

  1. 添加第二个游标:

    • 点击 Wave 窗口工具栏上的 Insert Cursor 图标。
    • 右键新游标的名字,删掉默认文字。
    • 输入 B 并回车。
    • 拖动游标 B,两个游标之间的间隔测量值会跟着实时变化:

Interval Measurement Between Two Cursors

  1. 锁定游标 B:

    • 右键游标 B 关联的黄色时间指示框(在 56 ns 处)。
    • 在弹出菜单里选择 Lock B。

游标颜色变成红色,不能再被拖动了:

A Locked Cursor in the Wave Window

锁定的用处

锁定游标相当于钉住一个参考时刻(比如时钟上升沿),之后随便拖另一个游标对比间隔,参考点都不会被误碰挪走。

  1. 删除游标 B:右键游标 B(56 ns 处的红色框),选择 Delete B。

保存并复用窗口格式

一旦关闭 Wave 窗口,你对窗口做的所有配置(加了的信号、设好的游标)都会被丢弃。好在可以用 Save Format 命令把当前 Wave 窗口的显示和信号配置捕获到一个 .do 文件里,以后打开这个文件就能把窗口原样恢复。

格式文件与设计绑定

格式文件是「设计相关」的——只对你创建它时所仿真的那个设计有效,换个设计加载它没有意义。

  1. 保存格式文件:

    • 在 Wave 窗口选择 File > Save Format。
    • 在 Save Format 对话框的 Pathname 一栏,保持文件名为默认的 wave.do,点击 OK。
    • 关闭 Wave 窗口。
  2. 加载格式文件:

    • 在 Main 窗口选择 View > Wave 重新打开 Wave 窗口。
    • 把窗口 undock 出来。此时你之前设置的信号和游标全都不见了。
    • 在 Wave 窗口选择 File > Load。
    • 在 Open Format 对话框里选中 wave.do,点击 Open。

QuestaSIM 会把窗口恢复到保存时的状态,信号和游标全部回来了。看完之后选择 File > Close Window 关闭 Wave 窗口。

收尾

本课到此结束。继续之前需要结束当前仿真:

  1. 选择 Simulate > End Simulation,点击 Yes。

相关资料

  • Wave Window(Questa SIM GUI Reference Manual)
  • Recording Simulation Results With Datasets(Questa SIM User’s Manual)

自测