在verilog和systemverilog等逻辑仿真的过程中,最关心的就是最后生成的波形是如何,我们才能根据波形去具体分析。但是往往会根据各个公司和各个平台工具的不同,会产生不同的波形文件,那么不同的波形文件,有什么不同?接下来会分别进行描述。并且对主要用到两种波形文件,如何生成及语法做简要介绍。

通常不同的仿真工具产生的不同波形文件主要有这些,WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)、shmvpd

1.WLF (Wave Log File)

Mentor Graphics 公司Modelsim支持的波形文件。

在modelsim波形窗口观察波形时,仿真结束时都会生成一个*.wlf的文件(默认是vsim.wlf),可以用modelsim直接打开,命令如下:

vsim -view vsim.wlf -do run.do

其中,run.do中的内容为要查看的波形信号。

这个wlf文件只能由modelsim来生成,也只能通过modelsim来显示。不是一个通用的文件格式。

2.VCD(Value Change Dump)

IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件,是通用的文件格式。

它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整个仿真的信息,我们可以用这个文件来再现仿真,也就能够显示波形,但是波形文件会很大。因为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  #  使用VCD来进行仿真 )
test;add wave /*;run -all;

特别说明的一点是,正是因为VCD记录了信号的完整变化信息,我们还可以通过VCD文件来估计设计的功耗,而这一点也是其他波形文件所不具备的。Encounter 和 PrimeTime PX (Prime Power)都可以通过输入网表文件,带功耗信息的库文件以及仿真后产生的VCD文件来实现功耗分析。

3.FSDB (Fast Signal DataBase)

Spring Soft (Novas)公司 Debussy / Verdi 支持的波形文件,一般较小,使用较为广泛,其余仿真工具如ncsim,modlesim 等可以通过加载Verdi 的PLI (一般位于安装目录下的share/pli 目录下) 而直接dump fsdb文件。

fsdb文件是verdi使用一种专用的数据格式,类似于VCD,但是它是只提出了仿真过程中信号的有用信息,除去了VCD中信息冗余,就像对VCD数据进行了一次huffman编码。因此fsdb数据量小,而且会提高仿真速度。我们知道VCD文件使用verilog内置的系统函数来实现 的,fsdb是通过verilog的PLI接口来实现的,例fsdbDumpfile, fsdbDumpvars等。示例如下:

//testbench中加入内容:

initial
begin
$fsdbDumpfile("*.fsdb");  //*代表生成的fsdb的文件名
$fsdbDumpvars(0,**);    //**代表测试文件名
end

4.shm

Cadence公司 NC verilog 和Simvision支持的波形文件,实际上 .shm是一个目录,其中包含了.dsn和.trn两个文件。使用NC Verilog 对同一testcase和相同dump波形条件的比较,产生shm文件的时间最短(废话,本来就是一个公司的),产生vcd文件的时间数倍于产生shm和 fsdb的时间。在笔者测试的例子中,产生的fsdb文件为十几MB,shm文件为几十MB,而vcd文件则要几个GB的大小。

5.vpd

Synopsys公司 VCS DVE支持的波形文件,可以用$vcdpluson产生。

6. 其余波形文件

就是各家不同的仿真或调试工具支持的文件类型,互不通用,但基本都可以由VCD文件转换而来(其实就是VCD文件的压缩版,因为只取仿真调试需要的数据,所以文件大小要远小于原始VCD文件),有的还提供与VCD文件的互转换功能。

--------------------------------------强迫症分割线--------------------------------------

Verilog提供一系列系统任务用于记录信号值变化,常见的格式有vcd,fsdb等。

接下来对这两种波形文件的生成及语法做一个简要介绍:

1.VCD

Dump VCD格式

$dumpfile("file.dump"); 打开一个VCD数据库用于记录
$dumpvars(level,start_module); 要记录的信号,level=0表示记录所有
$dumpflush; 将VCD数据保存到磁盘(不明白)
$dumpoff; 停止记录
$dumpon; 重新开始记录
$dumplimit(); 限制VCD文件的大小(以字节为单位)
$dumpall; 记录所有指定的信号值

用法:

initial
begin
$dumpfile (“verilog. dump”);
$dumpvars (0, testfixture);
end

关于 VCD $dumpvars 的用法:

$dumpvars; // Dump所有层次的信号
$dumpvars(1, top); // Dump top模块中的所有信号
$dumpvars(2, top.u1); // Dump实例top. u1及其下一层的信号
$dumpvars(0, top.u2, top.u1.u13.q); // Dump top.u2及其以下所有信号,以及信号top.u1.u13.q。
$dumpvars(3, top.u2, top.u1); // Dump top.u1和top.u2及其下两层中的所有信号。

2.fsdb

fsdbDumplimit - 限制FSDB 文件size
$fsdbDumpvars([<level>], <scope | signal>*)fsdbDumpfile - 指定FSDB 文件名
$fsdbDumpfile(“<FSDB name>”)fsdbSwitchDumpFile - 将dumping 切换到另一个FSDB 文件
$fsdbSwitchDumpFile(“<new FSDB name>”)fsdbAutoSwitchDumpfile - 限制文件大小并在数据量过大时自动创建新的FSDB 文件
$fsdbAutoSwitchDumpfile(<file size>, “<FSDB name>”,< number of file>)fsdbDumpMem - Dump 指定的memory 的内容
$fsdbDumpMem(<reg name>, [<start addr>, [<size>]])$fsdbDumpon - 打开 FSDB dumping
$fsdbDumpoff - 关闭 FSDB dumping

1). 一个自由开关FSDB 的方法有时候要运行很长时间的仿真,但是关心的波形却只是其中一小段。这个时候怎么来开关波形,使文件不至于太过庞大呢?这里介绍一个方法。示例仅供参考,大家可以结合实际应用创造出更加多样的变化来。

$fsdbAutoSwitchDumpfile,<file size>表示文件大小,单位MB;<FSDB name>表示文件前缀名,生成dump文件后,会在后面自动加001,002,一直到最大<number of file>,即<number of file>表示文件个数,就会返回到开始覆盖000开始的文件,一直循环。

$fsdbDumpfile,<FSDB name>表示文件前缀名字,不约束文件大小,只会生成一个文件,知道运行结束为止。

$fsdbDumpvars,<level>表示仿真深度,<scope | signal>*表示具体dumo的模块,具体可以参考VCD $dumpvars 的用法,如果有更多的模块,可以在后面继续加。

initial begin
$fsdbAutoSwitchDumpfile(<file size>, “<FSDB name>”,<number of file>);
//$fsdbDumpfile(“<FSDB name>”)
$fsdbDumpvars([<level>], <scope | signal>*);
$fsdbDumpvars([<level>], <scope | signal>*);
// 条件表达式1
$fsdbDumpoff;
// 条件表达式2
$fsdbDumpon;
End

2). 我们比较常用的一般还有$value$plusargs 这个task,在test_top 中:

通过脚本在run的时候把casename传递进去(给vcs/nc SIM_ARG:+casename=$Testcase_name.fsdb)

如果同时跑多个testcase 的时候可以同时dumpfsdb,另外就是跳过一些时间开始。

具体解析可以跳转链接<详解$test$plusargs和$value$plusargs>

$value$plusargs("casename=%s",casename)
dump(SIM_ARG: +time=$start_time)
$value$plusargs("time=%d",skip)
#skip

3). project 中每个人关注的module 不同,为了频繁去修改test_top 的dump,一般也会把需要dump 的内容用dumplist的file 来实现。

$fsdbDumpvarsToFile("dump.list");
比如dump.list 内容 #用于注释)
0 test_top
#1 test_top
#0 test_top.dut
#0 test_top.dut.m1
#0 test_top.dut.m2

用的时候一般是在test_top.v 添加相关的语句:

reg [100:0] casename;
integer skip, i;
initial begin
if( $test$plusargs("dumpfsdb") ) begin
if( $value$plusargs("time=%d", skip) )
#skip;
if( $value$plusargs ("casename=%s",casename) )
$fsdbAutoSwitchDumpfile(300, casename, 30);
else
$fsdbAutoSwitchDumpfile(300,"./test_top.fsdb",40);
$fsdbDumpvarsToFile("dump.list");
end
end

2.其他文件生成参考

1、VCS仿真生成fsdb文件(verilog)

2、VCS仿真生成VPD文件(verilog)

3、VSIM生成fsdb波形文件(verilog)

4、Vsim(ModelSim)生成VCD波形文件(verilog)

5、vsim(modelsim)仿真VHDL输出fsdb格式文件

6、ncsim仿真VHDL

波形文件(wlf,vcd,fsdb,shm,vpd)的区别,及如何生成相关推荐

  1. IC设计中不同eda工具波形文件(wlf/vcd/fsdb/shm/vpd)的区别及生成方法

    转自http://www.eetop.cn/blog/html/30/523930-36594.html 波形文件一般用于仿真后记录波形文件,用于做详细分析和研究.说一下几种波形文件WLF(Wave ...

  2. 波形文件(wlf/vcd/fsdb/shm/vpd)的区别

    http://blog.sina.com.cn/s/blog_ddf93b6c0102y6lr.html

  3. fsdb和vpd格式波形生成并查看

    fsdb和vpd格式波形生成并查看 1.fsdb格式 (irun + verdi) 2.vpd格式 (vcs+dve) 3.参考 1.fsdb格式 (irun + verdi) 首先,tb文件里添加 ...

  4. 【仿真】波形dump(vcd,shm,fsdb,saif,...)

    IC研发过程中,可能会涉及到多种工具,过程中也可能需要不同格式的波形文件.从网上搜索情况来看,介绍saif的较少,所以这里着重介绍一下saif的dump. 下面粘贴了两个相关背景知识的帖子,如其中介绍 ...

  5. oracle里的ols机制,Oracle DV和OLS以及VPD的区别(转)

    Database Vault概述 对于现在数据的权限和安全管理有一个基本的原则就是分离权责,即IT系统的超级用户不应该同时又是应用系统的超级用户,但是传统的数据库体系结构却并不支 持这样的分离,因为D ...

  6. Revit楼板:建筑楼板和结构楼板区别和垫层生成

    一.Revit中建筑楼板和结构楼板的区别 Revit中,在我们做项目时楼板是最常见的结构之一,几乎每次都需要使用它.分为建筑楼板和结构楼板,是不是有很多小伙伴就很好奇,为什么分为两种楼板,那么他们是什 ...

  7. 静态网站与动态网站的区别 静态网站生成工具

    1.静态网站与动态网站 静态网站是什么? 技术上来讲,静态网站是指网页不是由服务器动态生成的.HTML.CSS 和 JavaScript 文件就静静地躺在服务器的某个路径下,它们的内容与终端用户接收到 ...

  8. 我该怎样度此生?——认真并干净地生活

    大海之雄伟,在于它有汹涌的波涛. 人生之丰富多姿,由于它有坎坷曲折的道路. 人活着是应该有自己的一片精神天地的.正因为有了这一片自己的精神天地,在遇到人生坎坷旅途时才能熬过去. 过来人都知道,有这样的 ...

  9. VCS-bilibili教程篇1-Debug Basic

    文章目录 VCS debug 本篇文章将会介绍如何学会VCS debug VCS debug 针对VCS的debug,很少会用命令来debug,是用DVE来debug,另外其实很多公司会采用verdi ...

最新文章

  1. EXPDP 时ORA-27054 问题处置
  2. ASP:Literal控件用法
  3. codeforces-148D-Bag of mice-概率DP
  4. ifdef的用法_chisel 高阶用法简介--rocket-chip generator
  5. 从电视主播到高考,人工智能还能干些什么
  6. vc++数字图像处理 自适应二值化程序
  7. Windows下mysql的基础操作
  8. js实现图片放大镜效果——简单方法
  9. 如何做一个本地漫画党:了解漫画+下载漫画+漫画APP推荐
  10. 从零开始,做一个NodeJS博客(零):整体规(chui)划(niu)
  11. 使用sql语句在命令行下载mysql表格数据
  12. java程序员面试简历注意事项
  13. Kubernetes1.4新特性前瞻:设置JOB执行计划
  14. SQlServer数据库基础
  15. Android——Activity的生命周期
  16. vue移动端富文本编辑器vue-html5-editor
  17. CMMI(能力成熟度集成)四个等级
  18. 开源的调色板软件:焰火十二卷(Rickrack)
  19. 毕业设计:微信小程序健康管理系统的开发与实现
  20. VSCode Java 代码补全插件

热门文章

  1. 新 Mac 到手,程序员应当做的配置
  2. Microarchitecture:Macro Fusion
  3. OpenHarmony 平头哥玄铁架构 轻量系统移植—润和W800移植分享
  4. static_cast 和 reinterpret_cast
  5. 发现一个兼具图像处理、存储和加速的wordpress插件
  6. 云ERP系统适合什么样的企业
  7. java-sec-code学习
  8. 全网最详细JavaScript防抖、节流函数解析
  9. 运动想象脑机接口方向投稿期刊选择(二)
  10. 【产品设计】七点关于做互联网产品设计的思路