初次接触Debussy,在网上搜索了一些资料,发现Debussy的使用者并不多,edacn的论坛Modelsim主论坛中有个Debussy的子论坛,不过发现里面的人气并不高。另外,Novas公司现在推的是Verti,我使用的版本是2004年出的5.4V5,基于NT(Windows)平台的。
关于如何使用ModelSim进行仿真可以另外两篇关于ModelSim的文章,这里的体会是关于ModelSim结合Debussy使用的体会,所以使用Debussy前最好先学会如何使用ModelSim。网上也有介绍不要启动ModelSim GUI而直接在Debussy进行查看波形并调试的方法,本文最后也有介绍;如果确实不会使用ModelSim且又不愿学习的,可以使用此方法直接跳过ModelSim。
二、使用Debussy调试基本步骤
网上流传的使用Debussy来调试的通常用法是:
1、Load design and testbench into Debussy;
2、打开nWave,载入对应的FSDB;
3、在nTrace中将要观察的信号通过鼠标中键Drag&Drop拖放到nWave中;
4、通常都是在波形上发现问题,找到错误地方并双击鼠标,会自动跳到Real driver statement,也即会跳到源代码所在。
5、nTrace中,Active Annotation(快捷键X)标出仿真结果在source code下;
6、在先前driver statement中找个driver来使用active trace来追踪有效驱动。
当然还有更深入的用法比如:fan-in cone和 trace-x等等。
三、ModelSim结合Debussy进行仿真调试
这才是我要介绍的重点,我近几年使用Altera多一点,所以就结合ModelSim仿真Altera的库进行介绍(详细的如何用Modelsim仿真Altera的产品可查看另外两篇文章)。Debussy支持的波形格式是fsdb,是Fast Signal Database的简写。Debussy也可以读取vcd文件,在它读入vcd文件时,先自动把vcd文件转换成fsdb文件,然后再读入debussy。因此首先还是学习怎么通过modelsim仿真,生成fsdb格式的波形文件。而对于语言最近使用多的是VHDL,下面分VHDL以及Verilog进行描述。
基本的流程是:a、通过ModelSim生成FSDB格式的波形文件;b、在Debussy中导入设计进行调试(导入设计包括在nTrace中导入code(含testbench)和在nWave中导入FSDB文件)。
1、首先介绍Verilog语言,基本是节选网上大拿的体会,大家凑合着看。
a、通过ModelSim产生FSDB文件:将Debussy安装目录下的\share\PLI\modelsim_pli\WINNT中的novas.dll拷贝到modelsim安装目录下的win32文件夹中。然后在modelsim.ini文件中的[vsim]标签下添加Veriuser=novas.dll。这是准备工作。
有网友介绍可以在ModelSim仿真脚本中的[vsim]命令行加入这样调用pli的选项:
-pli <Debussy安装目录>/share/PLI/modelsim_pli/WINNT/novas.dll
个人感觉还是拷贝过去简单。
b、准备工作做好以后,当然你的coding也已经结束,testbench也应该写好了。正常的ModelSim仿真流程是这时候直接在建立工程进行仿真,编辑sim.do和wave.do就可以了。如果结合Debussy,ModelSim的唯一功能就是产生Debussy可以识别的波形文件-FSDB文件了。
在测试平台(testbench)中添加FSDB系统函数,典型的可以把下列语句加到testbench中:
initial
begin
$fsdbDumpfile("wave_test.fsdb"); //文件名随便起
$fsdbDumpvars;
end
这样波形数据就dump出来了。好多同学在单步调试的时候经常遇到说生成的FSDB文件中Deussy中不能用或者是signal加进去以后没有波形出来表现为NF,而且FSDB的文件大小这时候也表现的很小。很多同学怀疑是不是ModelSim或者Debussy运行有错误,其实这都是测试平台控制不当造成的,此时FSDB文件应该还没有生成好。就像我们通常要将TB中的内容输出到一个文件的时候要先创建这个文件,写完以后要及时关闭一样,产生FSDB文件同样先要创建文件(上面语句达到了此目的),然后写入波形数据,因此在外部调用FSDB文件之前要结束ModelSim仿真。我最后介绍的通过命令行脚本实现流水线生成FSDB文件,且不启动ModelSim GUI,可以完全避免这种操作失误。
2、其次介绍VHDL如何混合使用ModelSim和Debussy
a、将Debussy安装目录下的\share\PLI\modelsim_fli54\WINNT中的novas_fli.dll拷贝到modelsim安装目录下的win32文件夹中。然后在modelsim.ini文件中的[vsim]标签下添加Veriuser=novas.dll。编辑modelsim根目录下的modelsim.ini文件,将; Veriuser = veriuser.sl 更换为Veriuser = novas_fli.dll(注:“; Veriuser = veriuser.sl ”默认值ini文件中被注释掉,或者可以不管它直接添加即可,注意这里和Verilog的不同,另外请注意:Do not specify veriuser variable to both novas.dll and novas_fli.dll.)
b、将Debussy安装目录下的\share\PLI\modelsim_fli54\WINNT下的novas.vhd拷贝至工程所在目录,打开modelsim,在工程所在目录新建一个novas的LIB,然后编译novas.vhd文件。(对于这一步,我的做法是前期准备工作的时候就像提取Altera的库一样,将该库文件提取到ModelSim里,生成一个可以重复使用的novas库,这样就可以一劳永逸不要每个工程都要编译一次这个库)。
c、同样coding以及测试台建立完成之后,开始生产FSDB文件了。在testbentch中增加library novas;use novas.pkg.all;并在在testbentch中添加:
debussy_debug:process
begin
fsdbDumpfile("**.fsdb");
fsdbDumpvars(0,"system");
wait;
end process debussy_debug;
fsdbdumpfile("t1.fsdb");--此处的文件名可以随便取。
(注:此处system为顶层文件,所谓顶层就是testbench的顶层entity名,不能搞错)
这里有最原始的版本的ModelSim和Debussy混合使用的介绍:。
三、通过脚本自动化生成FSDB波形文件
通过二介绍的过程,进行自动化生成FSDB文件,其实非常简单。整个coding结束,且测试台建立完成后,创建一个do文件,这里给出一个例子: ;可以看到例子中没有库的编译,因为我前面说了,我把库的提取单独做为准备工作一劳永逸的完成。
有了do文件以后,就需要执行do文件,ModelSim有dos命令行或者GUI里有命令行可以执行do文件。本文的主要目的就是要完成“自动化”,所以以上两种方法都不可行,一个使用调出dos comand shell一个是要打开ModelSim GUI。我的做法是:做一个批处理文件,然后将它放在c盘的根目录下,然后执行一下批处理就全部OK了。这里给出一个批处理文件例子:。
do文件贴出来就是:
vlib work
vcom Accumulator_tb.vhd
vcom Accumulator.vhd
vsim Accumulator_tb
run 1000us
quit
说明:最后一句quit就是仿真结束。
批处理bat文件贴出就是:
e:
cd E:\wmz\workspace\prj\debussy\pet\DataInProc\accumulator
D:\modeltech_6.5a\win32/vsim -c -do accumulator.do
说明:整个批处理就3个命令,第一条进入E盘(当然是进入工作盘了);第二条是进入当前工作目录;第三条是执行do文件,其中vsim命令一定要带-c参数,具体原因感兴趣的同学可以在打开ModelSim GUI后执行vsim -help查看帮助。
注:任何编辑modelsim.ini文件的时候都要将其只读属性去掉再修改,修改完成以后再设回只读。