学习FPGA以来,一直是用Modelsim作为仿真调试工具,前几天在同事那儿看到了一个新工具:Debussy,看她用的相当顺手,而且工具本身也相 当好用,有很多Modelsim不具有的功能,然后就立马上网下载了Debussy软件和相关教程学习了一下,从本文开始软件的学习笔记。
Debussy 是NOVAS Software, Inc(思源科技)开发的HDL Debug & Analysis tool,这套软体主要不是用来跑模拟或看波形,它本身不具有仿真功能,需要调用Modelsim等仿真软件生成的仿真结果文件来观测波形,但是它可以预 存设计中所有信号的仿真波形,仿真需要新调入信号进行观测时,可以即时调入而无需重新跑仿真;Debussy另一个最强大的功能是:能够在HDL source code、schematic diagram、waveform、state bubble diagram之间,即时做trace,协助工程师debug;可能您会觉的:只要有simulator如ModelSim就可以做debug了,我何必 再学这套软体呢? 其实Debussy v5.0以后的新版本,还提供了nLint -- check coding style & synthesizable,这蛮有用的,可以协助工程师了解如何写好coding style,并养成习惯。
首先来学习一下Debussy的软件使用,如图1所示为Debussy的基本原理架构,其中主要由4部分组成:nSchema、nTrace、nWave和nState。
图1
nTrace:超文本源代码分析和浏览工具,是Debussy 软件所开启的主画面;nWave:波形分析观测工具,可由nTrace内开启;nSchema:层次原理图生成器;nState:有限状态机提取和分析工具。
上文中提到,Debussy软件一大功能就是波形的预存观测功能。由于Debussy自身不具有仿真功能,需要由 Modelsim等仿真软件生成fsdb(fast signal database)文件,是Spring Soft (Novas)公司Debussy / Verdi 支持的波形文件,一般较小,使用较为广泛,其余仿真工具如ncsim,modlesim等等可以通过加载Verdi 的PLI (一般位于安装目录下的share/pli 目录下) 而直接dump fsdb文件。fsdb文件是verdi使用一种专用的数据格式,类似于VCD,但是它是只提出了仿真过程中信号的有用信息,除去了VCD中信息冗余,就 像对VCD数据进行了一次huffman编码。因此fsdb数据量小,而且会提高仿真速度。下面介绍一下利用Modelsim生成fsdb文件的方 法,Verilog HDL和VHDL方法有些不同,因此分别说明:
A. Verilog HDL方法
1. 修改Modelsim安装根目录下modelsim.ini文件,去除只读保护后,加入一条语句:Veriuser=<Debussuy软件安装目录>/Debussy/share/PLI/modelsim_pli/WINNT/novas.dll
2. 在Testbench中加入以下代码:
initial begin
$fsdbDumpfile("wave_test.fsdb");
$fsdbDumpvars;
end
3. 在Modelsim中建立工程,编译所有*.v文件,调用仿真命令:vsim –pli novas.dll work.**_tb,仿真一段时间后退出仿真。然后可以在新建工程根目录下发现多出了一个wave_test.fsdb文件。
B. VHDL方法
1. 从<Debussy安装目录>\Debussy\share\PLI\modelsim_fli54\WINNT中找到novas.vhd文 件和novas_fli.dll文件,novas_fli.dll文件拷贝到modelsim安装根目录的win32文件夹下,并且修改 modelsim.ini文件,去除只读保护后,加入一条语句:Veriuser=novas_fli.dll;
2. 在Modelsim中建立工程,将第1步中的novas.vhd文件拷贝到新建的modelsim工程根目录下,在Transcript中运行以下脚本命令:
vlib novas
vmap novas novas
vcom –work novas ./novas.vhd
3. 在VHDL Testbench中加入语句:
library novas;use novas.pkg.all;
process
begin
fsdbDumpfile("wave_vhd.fsdb");
fsdbDumpvars(0,"div_tb"); --0表示dump的模块层,“div_tb”表示第0层模块名
wait;
end process;
4. 编译所有*.v文件,调用仿真命令:vsim work.**_tb,仿真一段时间后退出仿真。然后可以在新建工程根目录下发现多出了一个wave_vhd.fsdb文件。
注:在VHDL方法中遇到了些问题,在执行vsim命令时出现以下错误警告:
# Loading D:\modeltech_6.6f\win32/./novas_fli.dll
# ** Warning: (vsim-FLI-3159) Failed to find foreign function ‘fliparseVariableInFile‘ in FLI object file "D:\modeltech_6.6f\win32/./novas_fli.dll".
# Region: /
# ** Fatal: (vsim-3274) Null foreign subprogram pointer (19).
在网上搜索了也没有什么好的解决方法,生成方法也没有什么问题。只能自己试着解决一下问题了。看错误是因为 fliparseVariableInFile没有在novas_fli.dll中找到,这个函数在Testbench中也没有使用,但是在 novas.vhd中确实有这个名为“fliparseVariableInFile” 的procedure说明,在novas_fli.dll没找到会不会是因为novas.vhd文件和novas_fli.dll文件不匹配造成的。定位 了问题,就修改了一下novas.vhd文件,将有关fliparseVariableInFile的说明都注释掉了,然后重新编译了novas库,运行 vsim就好使了,run后成功生成了fsdb文件。
fsdb生成后,就可以通过Debussy软件中的nWave导入:
1. 首先打开Debussy软件,启动界面是nTrace,通过Tools->New Waveform新建一个nWave窗口,如图2所示;
图2
2. 在nWave中打开**.fsdb文件,如图3所示;
图3
3. 通过Get Signals按钮选取需要观测的信号,如图4所示为在nWave中显示的波形。
图4
学习笔记(二)主要熟悉一下Debussy软件中nWave的界面和学习一下相关的常规操作。首先介绍一下nWave界面,如图1所示,其中主要包含三个 窗口:信号窗口、值窗口和波形窗口。在信号窗口中显示了加入的所有信号,并且可以分组,其中图1中信号都在组G1中;值窗口显示了当前光标所处位置的信号 值;波形窗口中显示所有加入信号的波形,其中上边区域有个窗口标尺,表示当前显示窗口范围的时间标尺,中间是波形显示区域,除了信号波形,还有光标 (cursor)和标记(marker),最下边区域是全局标尺,表示整个fsdb文件所含信息范围的时间标尺。
图1
按照笔记(一)的方法成功地生成了fsdb文件,通过File->Open或者快捷键打开,如图2所示,在左侧窗口中选择路径,在右侧窗口中选择fsdb文件。
图2
fsdb文件读取之后,在nWave是没信号显示的,需要通过Signal->Get Signals或者快捷键选取信号,弹出窗口如图3所示,左侧窗口中显示了整个仿真设计的层次,中间窗口显示了选定层次中的所有信号,可以点击选取需要观测的信号。
图3
读取信号之后就可观测到信号波形了,如图1所示。在各个窗口中需要一些常用操作:
信号窗口:如果需要拖动信号改变显示顺序,需要点击鼠标中键即滚轮选中需要拖动的信号,如图4所示,而黄色光标表示信号拖动后所处位置;改变黄色光标的位置也需要通过点击鼠标中键来完成,配合剪切、复制和粘贴信号等操作。
图4
值窗口:值窗口显示当前光标所处位置各信号的值,并且可以通过 View->Values at Cursor/Marker同时显示光标位置和标记位置处信号的值,如图5所示,显示的信号值有2列,分别对应光标和标记位置处信号值。右击值窗口可以改 变信号的数字表示格式,如图6所示,当前选择信号的表示格式为16进制,可以将其切换成二进制、10进制等。
图5
图6
波形窗口:在波形窗口中最主要的是光标和标记的操作,可以由三个键的组合操作就能完 成所有工作,1. 通过鼠标左键控制光标的位置;2. 通过鼠标中键控制标记的位置;3. 通过鼠标右键放大光标和标记间区域的波形至整个波形窗口。在移动光标和标记时,要注意一个选项Waveform->Snap Cursor To Transitions,在使能该选项时,光标和标记始终处于信号波形变化边沿,如1-bit信号的上升沿或者下降沿;在不使能该选项时,光标和标记可以 在信号波形任意位置,如图7所示,左边图为不使能选项效果,右边图为使能时效果。通过鼠标右键放大了光标和标记间区域波形,如图8所示。
图7
图8
波形窗口中操作还有几个快捷键:
z: 缩小
shift+z:放大
f:所有波形缩小至整个窗口中显示
l:返回至上一个视图
在nWave中还提供了模拟波形的显示功能,如图9所示,白色波形曲线是通过Waveform->Analog Waveform将数字数据化成模拟曲线,可以看到有明显的量化效果;而红色和黄色曲线是通过Analog->Convert To Analog将数字数据转化成模拟量,从图中可以看到转化后波形比较光滑,并且可以在Analog菜单中设置各种参数,