各种波形文件vcd,vpd,shm,fsdb生成的方法(zz)
仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd:
对于WLF波形日志文件,只要我们使用过modelsim,应该都很熟。WLF(Wave Log File) 是Mentor Graphics 公司Modelsim支持的波形文件。但我们在波形窗口观察波形时,仿真结束时都会生成一个*.wlf的文件(默认是vsim.wlf)。我们下次就可以通过通过modelsim直接打开这个保存下来的波形。vsim -view vsim.wlf -do run.do 其中run.do中的内容为要查看的波形信号。要强调的是这个wlf文件只能是由modelsim来生成,也只能通过modelsim来显示。不是一个通用的文件文件格式。
VCD (Value Change Dump)是一个通用的格式。 VCD文件是IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件。它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整个仿真的信息,我们可以用这个文件来再现仿真,也就能够显示波形。因为VCD是 Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能够实现这个功能,也要允许用户在verilog代码中通过系统函数来dump VCD文件。我们可以通过Verilog HDL的系统函数$dumpfile 来生成波形,通过$dumpvars的参数来规定我们抽取仿真中某些特定模块和信号的数据。
特别说明的一点是,正是因为VCD记录了信号的完整变化信息,我们还可以通过VCD文件来估计设计的功耗,而这一点也是其他波形文件所不具备的。Encounter 和 PrimeTime PX (Prime Power)都可以通过输入网表文件,带功耗信息的库文件以及仿真后产生的VCD文件来实现功耗分析。
因为VCD是Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能实现这个功能。因此我们可以在verilog代码中通过系统函数来dumpVCD文件。另外,我们可以通过modelsim 命令来dump VCD文件,这样可以扩展到VHDL中。具体的命令: vcd file myfile.vcd
vcd add /test/dut/* 这个就生成一个含dut下所有信号的VCD数据信息。
我们在使用来进行仿真 vsim -vcdstim myfile.com
test;add wave /*;run -all;
或在testbench中加入:
initial
begin
$dumpfile("*.vcd");
$dumpvars(0,**);
end
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");
$fsdbDumpvars(0,**);
end
其余波形文件就是各家不同的仿真或调试工具支持的文件类型,互不通用,但基本都可以由VCD文件转换而来(其实就是VCD文件的压缩版,因为只取仿真调试需要的数据,所以文件大小要远小于原始VCD文件),有的还提供与VCD文件的互转换功能。
shm 是Cadence公司 NC verilog 和Simvision支持的波形文件,实际上 .shm是一个目录,其中包含了.dsn和.trn两个文件。
vpd 是Synopsys公司 VCS DVE支持的波形文件,可以用$vcdpluson产生。
通过使用Cadence NC Verilog 对同一testcase和相同dump波形条件的比较,产生shm文件的时间最短(废话,本来就是一个公司的),产生vcd文件的时间数倍于产生shm和fsdb的时间。在笔者测试的例子中,产生的fsdb文件为十几MB,shm文件为几十MB,而vcd文件则要几个GB的大小。
********************************************************************************
fsdb的一些用法:
(1)下面是一个列表,提示了fsdb 的各种可能用法,具体的内容大家可以Google 一把,就都出来了。
fsdbDumplimit - 限制FSDB 文件size 如何使用?
$fsdbDumpvars([<level>], <scope | signal>*)
fsdbDumpfile - 指定FSDB 文件名
$fsdbDumpfile(“<FSDB name>”)
fsdbDumpvars - Dump 指定的变量
fsdbDumpSingle - Dump 指定的信号
fsdbDumpvariable - Dump 指定的VHDL 变量
fsdbSwitchDumpFile - 将dumping 切换到另一个FSDB 文件
$fsdbSwitchDumpFile(“<new FSDB name>”)
fsdbAutoSwitchDumpfile - 限制文件大小并在数据量过大时自动创建新的FSDB 文件
$fsdbAutoSwitchDumpfile(<file size>, “<FSDB name>”,< number of file>)
fsdbDumpflush - Force to Dump Result to FSDB file
fsdbDumpMem - Dump 指定的memory 的内容
$fsdbDumpMem(<reg name>, [<start addr>, [<size>]])
$fsdbDumpon - 打开 FSDB dumping
$fsdbDumpoff - 关闭 FSDB dumping
(1)一个自由开关FSDB 的方法
有时候要运行很长时间的仿真,但是关心的波形却只是其中一小段。这个时候怎么来开关波形,使文件不至于太过庞大呢?这里介绍一个方法。示例仅供参考,大家可以结合实际应用创造出更加多样的变化来。
initial begin
$timeformat(...);
$fsdbAutoSwitchDumpfile(...);
$fsdbDumpvars(...);
// 条件表达式1
$fsdbDumpoff;
// 条件表达式2
$fsdbDumpon;
End
( 2 )、我们比较常用的一般还有$value$plusargs 这个task,在test_top 中:
$value$plusargs("casename=%s",casename)
通过脚本在run 的时候把casename 传递进去(给vcs/nc SIM_ARG: +casename=$Testcase_name.fsdb)
便于如果同时跑多个testcase 的时候可以同时dumpfsdb,另外就是跳过一些时间开始
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
跑仿真的时候,对应的如果要从5000ns(时间单位根timescale 有关)处开始dump 波形,给vcs/nc 的参数
+dumpfsdb +time= 5000 +casename= testcase1.fsdb
其中的testcase1 一般我们都会在脚本处理后跟case 名字关联起来,这样子跑完之后就会从5000 开始dump
testcase1_000.fsdb, testcase1_001.fsdb 这样子,
2. 另外那个dump.list(名字可以随便取)里面的设定就跟平常的设定dump 的层次设置一样了
层次 路径名
0 test_top.dut.m1
例子:
//=================
// dump FSDB wave
interger start_dump;
integer stop_dump;
integer finish_time;
integer result;
reg [8*30*-1 : 0] waveform_name;
initial begin:fsdb_dump
start_dump = 0;
finish_time = 0;
waveform_name = "debussy.fsdb";
if ($test$plusargs("FSDB"))
begin
if($test$plusargs("DUMP_FILE"))
result = $value$plusargs("DUMP_FILE=%s",waveform_name);
$fsdbAutoSwitchDumpfile(150,waveform_name,100);
$fsdbDumpflush;
#start_dump;
//select dump signals
$fsdbDumpvars(0,xx_tb);
end
end
转载自:http://www.cnblogs.com/zeushuang/archive/2012/11/14/2769640.html
各种波形文件vcd,vpd,shm,fsdb生成的方法(zz)的更多相关文章
- 各种波形文件VCD,VPD,SHM,FSDB生成的方法
转载---http://www.cnblogs.com/zeushuang/archive/2012/11/14/2769640.html 仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文 ...
- Eclipse用法和技巧三:自动生成Main方法2
上一篇文章里面介绍了新建文件时候自动添加main方法,这里接着介绍自动联想main方法. 步骤一:输入"main” 步骤二:保持光标在上图位置,按ALT + /,再回车 上一篇文 ...
- Eclipse用法和技巧二:自动生成Main方法1
刚开始编写java小程序,基本都要用到main方法.后期开发大一点的程序,也可以用main方法进行单元测试.总是编写main方法,感觉太无聊了,幸好Eclipse可以帮我们自动生成main方法.见图: ...
- Java的注释和Javadoc在eclipse生成的方法 – Break易站
本文内容来自:Java的注释和Javadoc在eclipse生成的方法 – Break易站 1. Java的注释 Java里有两种注释风格.下面这个写法是非常常见的 1 2 3 4 /*This i ...
- Core文件简单介绍及生成设置方法
Core文件简单介绍及生成设置方法 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文 ...
- 针对myeclipse6.5无法自动生成toString方法
public void getToStringSTR(){ Field[] fs = this.getClass().getDeclaredFields(); for (int i = 0; i &l ...
- SQL语句中生成UUID方法
SQL语句中生成UUID方法为UUID() 生成带横线UUID: select UUID() 形如:abaffaca-fd55-11e5-b3d0-d2 ...
- FastAdmin 一键 CRUD 生成时方法不存在的问题分析
FastAdmin 一键 CRUD 生成时方法不存在的问题分析 有群友反馈 使用 一键 CRUD 生成时不成功. 我试了以下命令 php think crud -t test -u 1 是成功的. 再 ...
- Spring中使用事务搭建转账环境方法二 相对简便的注解方法 ——配置文件注入对象属性需要setter方法 注解方法,不需要生成setter方法
XML配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
随机推荐
- Git分支模型
转自:http://www.cnblogs.com/byeyear/archive/2012/11/28/2793374.html 本文介绍一种使用Git进行源代码管理的分支模型,着重于如何使用Git ...
- Sound.loadCompressedDataFromByteArray
前不久Adobe发布了Flash Player 11的release版本, Flash Player 11 带来了很多新特性, 最最红火的就是Stage3D了,但是这里讲的是这个版本的另一个新特性, ...
- HBase系统架构及数据结构(转)
原文链接:Hbase系统架构及数据结构 HBase中的表一般有这样的特点: 1 大:一个表可以有上亿行,上百万列 2 面向列:面向列(族)的存储和权限控制,列(族)独立检索. 3 稀疏:对于为空(nu ...
- MYSQL错误1130:ERROR 1130: Host 10.10.36.115 is not allowed to connect to this MySQL server
解决远程连接mysql错误1130代码的方法 在用远程连接Mysql服务器的数据库,不管怎么弄都是连接不到,错误代码是1130,ERROR 1130: Host 10.10.36.115 is no ...
- VS2010 OpenCL运行环境配置
1.安装AMD GPU显卡驱动(安装后重启) 13-12_win7_win8_64_dd_ccc_whql.exe 2.安装AMD OpenCL SDK(安装后重启) AMD-APP-SDK-v2.9 ...
- event & EventHandler
[event & EventHandler] 在老C#中EventHandler指的是一个需要定义一个delegate,这个delegate是回调的规范.例如: public delegate ...
- MYSQL 命令行工具自动登录的方法
MYSQL 命令行工具自动登录的方法 1. 需求提出 由于在linux 环境下,经常需要使用mysql(command-line tool) 终端连接到MYSQL DB服务. 其中大致的语法如下: m ...
- EasyUI-EasyUI框架入门学习
前言 新项目的开发前端技术打算采用EasyUI框架(基于EasyUI较为丰富的UI组件库),项目组长将前端EasyUI这块的任务分配给了我.在进行开发之前,需要我这菜鸟对EasyUI框架进行一些基础的 ...
- js 判断页面元素是否存在
转自:http://www.0fish.com/js/416 原生js写法案例: obj = document.getElementById("someID"); if (obj) ...
- Unity骨骼动力学应用
原地址:http://blog.csdn.net/libeifs/article/details/7169794 开发环境 Window7 Unity3D 3.4.1 MB525defy Andro ...