vcs和verdi的联合仿真

纵然是瞬间 提交于 2020-03-18 18:51:35

环境配置

首先搭建好vcs和Verdi都能工作的环境,主要有license问题,环境变量的设置。在220实验室的服务器上所有软件的运行环境都是csh。所以,所写的脚本也都是csh的语法。

生成波形文件

Testbench的编写

若想用Verdi观察波形,需要在仿真时生成fsdb文件,而fsdb在vcs或者modelsim中的生成是通过两个系统调用$fsdbDumpfile $fsdbDumpvars来实现的。而这两个系统调用并不是Verilog中规定的,是Verdi以pli(Programming Language Interface)的方式实现的。这就需要让vcs编译时能找到相应的库。

首先在testbench中需加入以下语句

`ifdef  DUMP_FSDB

initialbegin

  $fsdbDumpfile("test.fsdb");

  $fsdbDumpvars;

end

`endif

这个编译开关在用vcs编译时加入+define+DUMP_FSDB选项就可以打开,也可以在define.v文件中定义DUMP_FSDB这个宏。

我们现在所接触的仿真波形文件主要有

  • Wlf文件: WLF波形日志文件,是modelsim的专用文件。这个wlf文件只能是由modelsim来生成,也只能通过modelsim来显示。在用modelsim做仿真时,仿真结束都会生成一个*.wlf的文件(默认是vsim.wlf)。下次就可以通过通过modelsim直接打开这个保存下来的波形。vsim -view vsim.wlf -do run.do其中run.do中的内容为要查看的波形信号。要强调的是不是一个通用的文件文件格式。
  • VCD文件:VCD 是一个通用的格式。 VCD文件是IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件。可以通过Verilog HDL的系统函数$dumpfile,$dumpvars等来生成。我们可以通过$dumpvars的参数来规定我们抽取仿真中某个特定模块和信号的 VCD数据。它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整个仿真的信息。可以用这个文件来再现仿真,也就能够显示波形。另外我们还可以通过这个文件来估计设计的功耗。因为VCD是 Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能实现这个功能。因此我们可以在verilog代码中通过系统函数来dump VCD文件。另外,我们可以通过modelsim 命令来dump VCD文件,这样可以扩展到VHDL中。具体的命令: vcd file myfile.vcd vcd add /test/dut/* 这个就生成一个含dut下所有信号的VCD数据信息。我们在使用来进行仿真 vsim -vcdstim myfile.com test;add wave /*;run -all;
  • FSDB文件:fsdb文件是verdi使用一种专用的数据格式,类似于VCD,但是它是只提出了仿真过程中信号的有用信息,除去了VCD中信息冗余,就像对 VCD数据进行了一次huffman编码。因此fsdb数据量小,而且会提高仿真速度。我们知道VCD文件使用verilog内置的系统函数来实现 的,fsdb是通过verilog的PLI接口来实现的。$fsdbDumpfile,$fsdbDumpvars等 另外,在VCS仿真器中还有一种VCD+的数据格式VPD,详细情况参照VCS的使用。 注意:WIF:波形中间格式;WLF:波形日志文件。由于在ModelSim下只能打开WLF文件 使用ModelSim行命令vcd2wlf 将VCD文件转化为WLF文件。

而在dump fsdb文件需要几个文件,Verdi.tab, pli.a 以及与仿真器相应版本的.so库文件(需要修改LD_LIBRARY_PATH变量)。而这些目录在以往的版本中是比较凌乱的。

在Verdi200907版本之后它的dumper就做了统一化的处理:

 

How to Link the New Unified Dumper?

Prerequisites:

  • ${NOVAS_INST_DIR} : 

Verdi/Siloti install directory.

  • ${PLATFORM} :

LINUX: Linux OS (32-bit)

LINUX64: Linux OS (64-bit)

SOL2: SunOS 5.x (32-bit)

SOL7: SunOS 5.x (64-bit)

IBM5: IBM 5.1

  • Tab file:

novas.tab

  • LD_LIBRARY_PATH

${NOVAS_INST_DIR}/share/PLI/lib/${PLATFORM} needs to be  added as one of the

LD_LIBRARY_PATH searching paths all the time.

  • Novas banner:

*Novas*

  • novas.vhd file:

For VHDL and mixed language users who transfer from the old FSDB dumper, the first time use of new unified FSDB dumper needs the “novas.vhd” to be re-compiled (or re-analyzed) if the FSDB dumping commands have been specified in the VHDL design.

The related unified dumper directories are:

l  ${NOVAS_INST_DIR}/share/PLI/VCS

l  ${NOVAS_INST_DIR}/share/PLI/MODELSIM

l  ${NOVAS_INST_DIR}/share/PLI/IUS

l  ${NOVAS_INST_DIR}/share/PLI/lib

在我设的vcs环境中(csh)中设计的脚本如下

#!/bin/tcsh

if(-esimv)then

  \rm-rsimv

endif

 

if(-esimv.daidir)then

  \rm-rfsimv.daidir

endif

 

if(-ecsrc*)then

  \rm-rfcsrc

endif

 

vcs0809

 

#verdi env setting

setPLATFORM=LINUX

setNOVAS_INST_DIR=/opt/spring/verdi201004

setenvLD_LIBRARY_PATH${NOVAS_INST_DIR}/share/PLI/lib/${PLATFORM}:${LD_LIBRARY_PATH}

 

vcs -l vcs.log \

    -notice \

    -line -debug_all \

    -P $NOVAS_INST_DIR/share/PLI/VCS/$PLATFORM/novas.tab \

       $NOVAS_INST_DIR/share/PLI/VCS/$PLATFORM/pli.a \

    -f vcs.args

./simv

需要注意:

l  Csh中设置环境变量,需把环境变量用{}括起来,这一点我试了很多次,它确实不如bash的解析器更加智能。

l  在220的服务器上,vcs的版本是201006的,而Verdi的版本时间比较低,编译时会提示,相应的libsscore_vcs201006.so文件找不到。现在我用的Verdi的版本是201004,而vcs的版本是200809

其中的vcs.args的参考脚本如下(以intra mode decision为例)

+libext+.v

+v2k

+acc

 

 

+define+DUMP_FSDB

 

 

-y http://www.cnblogs.com/rtl

-work work

 

//

// Testbench files

//

+incdir+http://www.cnblogs.com/bench

http://www.cnblogs.com/bench/tb_ip_mode_decision.v

 

// RTL files

//

+incdir+http://www.cnblogs.com/rtl

http://www.cnblogs.com/rtl/ip_mode_decision.v

http://www.cnblogs.com/rtl/defines.v

http://www.cnblogs.com/rtl/timescale.v

在csh中运行

./run_vcs

即可生成Verdi所需要的fsdb文件

之后运行以下命令启动Verdi

verdi -2001 -f vcs.args -ssf test.fsdb

Verdi调试

Verdi调试主要分为以下几步

  • Load design and testbench into Debussy;
  • 打开nWave,载入对应的FSDB;
  • 在nTrace中将要观察的信号通过鼠标中键Drag&Drop拖放到nWave中;
  • 通常都是在波形上发现问题,找到错误地方并双击鼠标,会自动跳到Real driver statement,也即会跳到源代码所在。
  • nTrace中,Active Annotation(快捷键X)标出仿真结果在source code下;
  • 在先前driver statement中找个driver来使用active trace来追踪有效驱动。

Verdi就是之前的Debussy,在调试时有着诸多的优点,现在我感觉最基础的几点就是它

  • 只需执行一遍仿真就可以查看所有的波形,而在modelsim中则需要反复运行add wave命令,每一次都要重新仿真。
  • 可以查看设计的原理图schematic,这非常方便查看每一个module和wire的所对应的硬件结构,modelsim现在还没有这个功能。
  • 在仿真时可以很轻易地追踪每个信号所对应的源码。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!