博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vcs和verdi的联合仿真
阅读量:7121 次
发布时间:2019-06-28

本文共 2742 字,大约阅读时间需要 9 分钟。

环境配置

首先搭建好vcs和Verdi都能工作的环境,主要有license问题,环境变量的设置。

生成波形文件

Testbench的编写

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

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

`ifdef DUMP_FSDB

initial begin

$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就做了统一化的处理:

#verdi env setting

set PLATFORM=LINUX

set NOVAS_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 list.f

./simv

需要注意:

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

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

+libext+.v

+v2k

+acc

+define+DUMP_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现在还没有这个功能。

Ø 在仿真时可以很轻易地追踪每个信号所对应的源码。

转载于:https://www.cnblogs.com/xiyoulhj/p/3650188.html

你可能感兴趣的文章
access token
查看>>
爬虫神器pyppeteer,对 js 加密降维打击
查看>>
吃鸡数据不完全分析
查看>>
iOS上下联动框架(Swift)
查看>>
Android RxJava之变换操作符(三)
查看>>
高性能 Web 缓存服务器 nuster 1.7.9.4 发布
查看>>
Java中基本类型占字节数以及Uint32的意思
查看>>
java后台框架 springmvc整合mybatis框架源码 java图片爬虫 bootstrap html5
查看>>
APK体积优化的一些总结
查看>>
Timer机制源码浅析
查看>>
javaScript之Location,Navigator,History
查看>>
RocketMQ中使用SQL92过滤消息
查看>>
Vue入门指南-02自定义全局和局部指令 (快速上手vue)
查看>>
Python知识点总结篇(一)
查看>>
介绍一款Java的方法入参校验工具
查看>>
三星7.0以上系统如何无需ROOT激活Xposed框架的步骤
查看>>
不借助第三个变量交换 a,b两个值
查看>>
[深入SystemUI]-了解recents的启动流程(一)
查看>>
Android线程池的原理以及项目中实践
查看>>
node小记:EventEmitter监听器
查看>>