使用Verdi的小技巧(一)
使用Verdi的小技巧(二)
使用 Verdi 的过程中,难免会碰到表示某种变化量的多位宽数字信号,我们关心的是它的变化趋势。今天主要聊聊数字信号的模拟化呈现。
数字信号的模拟化呈现
Verdi 提供了既简单又直观的操作,去绘制数字信号的模拟变化趋势。尤其是在观察周期性计数的数字信号时,例如调制频率的变化,还有 FIFO 读写地址的变化,这种方式基本是可以做到一目了然的。
操作方式:nWave 窗口菜单 - Waveform - Analog Waveform
对于 Verdi 这个工具来说,它对于数字信号本身的含义目前还没有智能到可以自动识别。所以我们需要指定特定数字信号的表示方式(Notation),是无符号、二补码还是补码等等。
操作方式:nWave 窗口菜单 - Waveform - Set Notation
模拟波形的显示范围
还有一个可能遇到的局限性就是,Verdi 在绘制数字信号的模拟波形时,默认会按照整个波形的动态范围来绘图。如果一个数字信号的初始值和工作时实际的动态范围差别很大,那么观察实际工作时的模拟波形时,波形变化的幅度相比整个动态范围就会太小,无法明了的看到小动态范围的变化趋势。
手动调节显示范围
还好 Verdi 提供了手动调节显示范围的功能。
操作方式:nWave 窗口菜单 - Analog - Zoom Value...
根据需要调节上限和下限,调节过程中波形是实时更新的。
对比效果如下图,第一个信号是默认范围的,动态变化缩成一条直线了,没有观察价值。第二个信号是调整了范围的,可以清楚的看到变化趋势。第三个是原始的数字信号。
自动调节:切换 FSDB 文件
还有一个比较笨的解决方法是,写出 FSDB 文件时,根据特定信号,从数字信号开始动态变化的时候,做一个文件切换。这样就把数字信号初始化部分的波形分离出去。当我们着重分析动态变化的部分时,就不需要加载初始化部分的波形。Verdi 在绘制模拟波形的时候,只会看到小动态范围的数值,绘制出来的变化趋势就足够清楚了。
代码语言:javascript复制 $fsdbDumpfile("tb_000.fsdb");
$fsdbDumpvars(0, tb);
@(posedge some_trigger_signal);
$fsdbSwitchDumpfile("tb_001.fsdb");
自动调节:加载特定时间范围
当然作为团队项目的螺丝钉,有时候不方便控制 FSDB 文件的产生方式,那么在加载 FSDB 文件的时候,可以选择指定一个时间范围。感谢读者 @Erik Li
提供的这个技巧。
操作方式:nWave窗口菜单 - Open,选择 FSDB 文件到 Target Name 后,点击左下方的 Options... 按钮。
在弹出的对话框中选中 Open File By Time Range,然后点击 OK 按钮。
再点击 OK 按钮,在弹出的对话框中就可以选择感兴趣的时间起止范围了。
如何提高螺丝钉的自我修养
今天就到这里。最后再分享一个最近才发现的 Verdi 调用参数。
代码语言:javascript复制verdi -preTitle "some text"
螺丝钉做久了,需要同时打开的 Verdi 窗口数量与日俱增。怎么从密密麻麻的任务栏图标中找到要找的那个,是个麻烦但不紧急的问题。除了贯彻断舍离、及时关闭短期内不需要的窗口之外,用上面的选项为每一个 Verdi 窗口做个简洁唯一的命名,也是一个不那么有效的解决之道。