请教fsdb命令波形产生命令的问题

当前位置: >>
【SoCVista】有关FSDB文件的一些问题
收集整理自开源 IP 通吃岛 http://www.socvista.com/bbs有关 FSDB 波形文件的一些问题 作者:justdoit、winfire、dicer、5life 等等一、介绍三个术语: VCD:Value Change Dump 文件, Fsdb:Fast Signal DataBase 文件, WLF:Wave Log File 文件, 对于 WLF 波形日志文件,只要我们使用过 modelsim,应该都很熟。但我们在波形窗口观察波形时,仿真结束时都会生 成一个*.wlf 的文件(默认是 vsim.wlf)。 我们下次就可以通过通过 modelsim 直接打开这个保存下来的波形。 vsim -view vsim.wlf -do run.do 其中 run.do 中的内容为要查看的波形信号。 要强调的是这个 wlf 文件只能是由 modelsim 来生成,也只能通过 modelsim 来显示。不是一个通用的文件文件格式。 VCD 文件是 IEEE1364 标准(Verilog HDL 语言标准)中定义的一种 ASCII 文件。可以通过 Verilog HDL 的系统函数 $dumpfile,$dumpvars 等来生成。我们可以通过$dumpvars 的参数来规定。我们抽取仿真中某个特定模块和信号的 VCD 数 据。它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整 个仿真的信息。我们可以这个文件来再现仿真,也就能够显示波形。另外我们还可以通过这个文件来估计设计的功耗。 解决了前一段时间一直不知道这个 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.add wave /*;run - fsdb 文件是 verdi 使用一种专用的数据格式,类似于 VCD,但是它是只提出了仿真过程中信号的有用信息,除去了 VCD 中信息冗余,就像对 VCD 数据进行了一次 huffman 编码。因此 fsdb 数据量小,而且会提高仿真速度。我们知道 VCD 文 件使用 verilog 内置的系统函数来实现的,fsdb 是通过 verilog 的 PLI 接口来实现的。$fsdbDumpfile,$fsdbDumpvars 等 另外,在 VCS 仿真器中还有一种 VCD+的数据格式 VPD,详细情况参照 VCS 的使用。 我们为什么要输出 fsdb 格式的波形文件的, 原因之一 VCD 文件比较大,读取时间长,故用 fsdb 格式的波形文件, 其二 是该格式可以由 Debussy 读取,以便使用 Debussy 进行代码分析。 我们要输出 fsdb 的话, 要通过 PLI 来调用 Debussy 的系统函数. 收集整理自开源 IP 通吃岛 http://www.socvista.com/bbs二、产生 FSDB 波形的一些方法和技巧 1、Modelsim 产生 FSDB 波形文件:1). 编译 PLI 接口 =& 在 DEBUSSY 目录中有 PLI 接口代码 ...\Novas\Debussy\share\PLI\modelsim_pli54\WINNT 此目录下有源码, 还有一个批处理文件 make.bat,打开作一些路径上的改动 set cl link MODELSIM_PATH=c:\simulators\modeltech_5.3a -c -I%MODELSIM_PATH%\include veriuser.c -dll -out:novas.dll -nodefaultlib:libcmt.lib -export:init_usertfs veriuser.obj pli.lib %MODELSIM_PATH%\win32\mtipli.lib shell32.lib =& 其中命令 cl 与 link c/c++编译连接命令, 安装了 VC++可以找到 =& 编译连接后生成 novas.dll,其为 modelsim 与 debussy 的 PLI 接口库 或者用其目录下存在的 novas.dll 文件,modelsim5.4 或更高版本采用 modelsim_pli54\WINNT 下的文件 2). 设置 Modelsim,使其加载接口库 novas.dll,从而在代码中调用接口函数 =& 打开 modelsim.ini [vsim] Veriuser=novas.dll 其中 Veriuser 这个变量是在文件中用&;&屏蔽了的,找到后去掉分号设置值为库 novas.dll =& 设置 windows 系统环境变量 这在 Modelsim 的 user's guide 中有说明 LD_LIBRARY_PATH path\novas.dll PLIOBJS path\novas.dll SHLIB_PATH path\novas.dll 3). 在代码中调用系统函数生成.fsdb 文件 debussy user's guide docs 中有说明 [VHDL] process begin fsdbDumpfile(&test.fsdb&); fsdbD [Verilog] initial begin $fsdbDumpfile( &FILE_NAME.fsdb& ); // Debussy 系统任务 $fsdbD // Debussy 系统将变量映射到.fsdb 文件 end 收集整理自开源 IP 通吃岛 http://www.socvista.com/bbs2、NC-verilog首先, 我们建立一个工作目录 $& mkdir work $& cd work 然后新开一个 teminal 窗口, 找到 Debussy 的安装目录. 进入/share/PLI/, 在该目录下有很多版本的目录,选择一个属于 你的 NC 版本的目录, 比如 nc51, 然后选择你的操作系统, 如 LINUX,(换而言之, 现在处于/share/PLI/nc51/LINUX) 之后你 会发现: nc_loadpli1/ nc_shared/ pli.a veriuser.c 把这些目录及文件拷贝到 work 目录下. * 免编译 如果你不需要添加其他的系统函数, 那么直接可以用 nc_loadpli1 下 debpli.so 文件. 使用方法: $& ncverilog +access+wrc +loadpli1= ./nc_loadpli1/debpli.so : debpli_boot rtl.files 当然在 testbench 文件中要写上你所希望调用的 debussy 提供的函数, 基本的如: $fsdbDumpfile(&wave.fsdb&); $fsdbDumpvars(6, tb); * 需编译 如果你已经对 veriuser.c 进行了修改, 那么首先把 veriuser.c 编译为 veriuser.o 文件. cc -KPIC -c veriuser.c -I${CDS_INST_DIR}/tools/verilog/include 之后连接 ld -G veriuser.o pli.a -o debussypli.so 使用方法: $& ncverilog +access+wrc +loadpli1= ./debussypli.so : debussy_bootstrap rtl.files 当然在 testbench 文件中要写上你所希望调用的 debussy 提供的函数, 基本的如: $fsdbDumpfile(&wave.fsdb&); $fsdbDumpvars(6, tb); 从 NC 中 dump 出 fsdb 波形文件的方法: 1)在所有的 design file 里不要加入 `timescale 2) 建立一个单独的文件 ( 比如 time.v) , 其内容只有一句 `timescale xx/xx 3) 建立 design 的 file list (比如: flist.f ), 其内容是所有的 design file name, 将 time.v 放在最后一行 (建议) 4) 以如下形式调用 ncverilog: (1) source ....../ncverilog.env (2) ncverilog -f flist.f \ +ncloadpli1=debpli:deb_PLIPtr \ #这个 option 用以使用 fsdb +access+rwc 其他 option 可以自己按需加入. 5) 在 testbench 中 调用 $fsdbDumpfile, $fsdbDumpvars 就可以生成 fsdb 了. 假设 top.v 为 testbench 文件,rtl_list 为记录 verilog 文件的列表文件。 (1)在 top.v 文件加入如下代码: initial begin $fsdbDumpfile(&top.fsdb&); // 创建 fsdb 文件供 Debussy 调用,这样就可以观察波形了,名称自定义 。 $fsdbDumpvars(0,top); // top 为 top.v 中的顶层模块名,0 表示将 top 层及以下的子 //模块的信号都 dump 出来。 end (2)调用命令: ncverilog +access+r -f rtl_list (3)调用 veridi 或 debussy 打开.fsdb 文件查看波形: verdi -f rtl_list & 或者 debussy -f rtl_list & 收集整理自开源 IP 通吃岛 http://www.socvista.com/bbs3、在运行 vcs 的时候使用如下命令:(1)先生成 fsdb 波形 vcs xxx.v -P /Debussy_path/share/PLI/vcs71/LINUX/debussy.tab /Debussy_path/share/PLI/vcs71/LINUX/pli.a 就可以了,当然 testbench 中要加上有关产生 fsdb 的命令,和 modelsim 一样的。 用 nWave -f xxx.fsdb (2)生成 vpd 波形文件 使用命令 vcs -I test.v 生成 vpd 文件,testbench 文件中加入 $vcdplusfile(&xxxx.vpd&) $vcdpluson(1,xxx); 就可以生成 vpd 文件,查看 vpd 文件可以使用 virsim 来看,可以通过命令 virsim +vpdfile+xxx.vpd 来直接打开。 (3)vcs -R 编译完后直接执行。 可以通过$fsdbSwitchDumpfile 来将信号 dump 到不同的 fsdb 文件中。4、列表、技巧(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(2)、一个自由开关 FSDB 的方法 有时候要运行很长时间的仿真,但是关心的波形却只是其中一小段。这个时候怎么来开关波形,使文件不至于太过庞大 呢?这里介绍一个方法。示例仅供参考,大家可以结合实际应用创造出更加多样的变化来。 收集整理自开源 IP 通吃岛 http://www.socvista.com/bbsinitial begin $timeformat(...); $fsdbAutoSwitchDumpfile(...); $fsdbDumpvars(...); // 条件表达式 1 $fsdbD // 条件表达式 2 $fsdbD End( 3 )、我们比较常用的一般还有$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(4)、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] integer skip, initial begin if( $test$plusargs(&dumpfsdb&) ) begin if( $value$plusargs(&time=%d&, skip) ) # if( $value$plusargs (&casename=%s&,casename) ) $fsdbAutoSwitchDumpfile(300, casename, 30); else $fsdbAutoSwitchDumpfile(300,&./test_top.fsdb&,40); $fsdbDumpvarsToFile(&dump.list&); end end 收集整理自开源 IP 通吃岛 http://www.socvista.com/bbs跑仿真的时候,对应的如果要从 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三、使用 Makefile不过话说,这些命令都可以用自己的一套 makefile 裹好,只需要用 Makefile 提供的函数接口。 首先工作环境是 linux,所有的命令都是用 makefile 来联系在一起的。 举个简单的例子,如果需要运行一个 vcs 命令 并带一些命令行参数。做法如下: 在某个固定的地方创建一个 vcs.makefile 作为通用的 makefile,所有人需要用到 vcs 的,那么在自己项目的 makefile 中 include 这个 vcs.makefile. vcs.makefile: VCS_EXE = $(VCS_HOME)/bin/vcs $(VCS_EXE) ${VCS_FLAGS} \ -l $(vcs_logfile $@) +libverbose \ -LDFLAGS &${VCS_LDFLAGS} ${VCS_LIB_PATHS} -g& ……………… 拿其中的 VCS_FLAGA 来详细说明: VCS_FLAGS += +define+NO_DUMPS VCS_FLAGS += -Mupdate -Mmakep=&gmake& VCS_FLAGS += -cc $(GCC_PATH)/bin/gcc -cpp $(GCC_PATH)/bin/g++ -ld $(GCC_PATH)/bin/g++ VCS_FLAGS += $(VCS_VERSION_ARGS) VCS_FLAGS += ${VCS_EXTRA_ARGS} VCS_FLAGS += +define+NO_FSDB=1 这 个 common 的 vcs.makefile 可 以 被 任 意 项 目 调 用 , 我 们 自 己 锁 需 要 做 的 事 情 就 是 创 建 一 个 自 己 模 块 的 module_name.makefile 在其中 include 这个 vcs.makefile, 然后将需要的参数传递给 vcs.makefile 我们一般利用${VCS_EXTRA_ARGS} 变量,将我们需要为项目专门添加和修改的参数传递 比如,在自己模块的 module_name.makefile 中: # vcs argument VCS_EXTRA_ARGS += +notimingcheck +nospecify +udpsched +vcsevalorder $(STANDSIM_DIR)/dini_sodimm/glbl.v VCS_EXTRA_ARGS += +define+M512+S667+X8 $(STANDSIM_DIR)/dini_sodimm/ddr2_vcs.vp VCS_EXTRA_ARGS += +dump_multi_fsdb VCS_EXTRA_ARGS += +dmp_siloti +dmp_top=0 这样我们就添加额外的 vcs command line argument。 收集整理自开源 IP 通吃岛 http://www.socvista.com/bbs以后需要跑 vcs 的时候,只需要敲一下 make 就可以。vcs.makefile 把大部分需要设定的参数都会设置好,并有初始值。可以允许我们在各自模块的 makefile 中覆盖,用以执行 自己 special 的情况。当然大部分参数都会用设置好的值,在运行之前,我们甚至多数时候都不知道自己用了哪些 vcs 的 参数,只有 test 跑完,看 logfile 的时候,才会发现原来 vcs.makefile 把我们加了一大堆的参数,包括 vcs 的版本、路径、 项目默认需要包含的很多头文件、使用 v2k、使用-ssy -ssv、等等,可能有 30~40 个默认的参数会被添加。 如果需要使用 siloti,那么我们只需要项目文件夹下执行 make siloti,那么和 siloti 有关的所有参数 vcs.makefile 都会帮我 们自动配置好。 出来的波形都是经过 siloti 的。 确实是很好的方法。统一管理。统一维护,做成统一的库,方便所有人调用。四、一些注意的1、在 &NC 中如何 DUMP 出 fsdb 格式的波形文件&的文件中,使用&需编译&的方法 但是_l生如下的e`息 SYSTEM ERROR : VPI LOADFB fail to find requested bootstrap routine debussu_bootstrap in library ./debusspli.so 可否告知到底那h出e ??? 答:是 debussy_boostrap 名字不对。请注意一下,文中 debussypli.so 是替代用语。您可以不使用这名字的, 可自行定义。 而 debussy_bootstrap 是 veriuser.c 里定义的 bootstrap 的函数名称, 该函数名字可以由你自己定义的, 若您没进行过修改可 以查看 veriuser.c 文件。 类似于以下 p_tfcell alu_bootstrap() { io_printf(&*** Registering ALU user system tasks...\n&); return (alu_veriusertfs); }2、是不是如果验证中不要用到其他PLI的时候,不需要$& ncverilog +access+wrc +loadpli1= ./nc_loadpli1/debpli.so : debpli_boot rtl.files 这句.而需要使用其他PLI的时候,比如VIP也用在验证中,才需要这句话? 答:当不需要调用 PLI 时 +loadpli1= ./nc_loadpli1/debpli.so : debpli_boot 不需要。 如果需要 VIP 函数的时候,需要用+loadvip 选项。 3、 FSDB_DUMP: process begin fsdbDumpfile(&simdata.fsdb&); fsdbDumpvars(0, &&); 收集整理自开源 IP 通吃岛 http://www.socvista.com/bbs& Note: $fsdbdumpvars is for pure verilog desings, right? A:any &$& call is PLI, hence works in Verilog, some tools might VCS-MX works for both VHDL & Verilog. extend it to mixed designs - for instance $vcdpluson in4、不明白我严格按照网上的步骤来设置的,最后为什么总是提示没有 task &$fsdbdumpfile&, 今天才弄明白应该是 initial begin $fsdbDumpfile(&test.fsdb&); $fsdbD end 上边的 D 应该大写。http://www.socvista.com/bbs/viewthread.php?tid=2539&extra=page%3D1 更多讨论,见 SoC Vista -- 开源 IP 通吃岛 - 基于 FPGA 及 ASIC 的 SOC 设计文章整理自网络,有问题请 Mail :
赞助商链接
喜欢此文档的还喜欢 【SoCVista】5.展开 28页 免费 【SoCVista】8.快速卷积 ...器,阵列 式结构需要资源反而少一些,这与控制逻辑和中间寄存器的复杂程度有关。...【SoCVista】HDMI 常见问题解答 SoCVista资料SoCVista资料隐藏&& 目录: 目录: 一般 HDMI 问题 成为采纳者 HDMI 规范 HDMI 1.3 商标与徽标使用准则 兼容性测试 ...【SoCVista】10.流水线结构的并行自适应递归滤波器_...“数据交织”关系,如表 3 所示,从表中可知何时初...并行结构的电力有源滤波... 6页 免费喜欢此文档的...喜欢此文档的还喜欢 【SoCVista】10.流水线结构.....请到百度文库投诉中心;如要提出功能问题或意见建议,...没有经过优化,占用资源多 很多朋友看到这可能会很...喜欢此文档的还喜欢 【SoCVista】10.流水线结构.....关于设计结果的复杂度方面我们没有过多讨论, 但那...解决问题的诀窍在于:先用超前 计算构造“自交织”的...如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 【SoCVista】8.快速卷积 SoCVista论坛的附件资料SoCVista论坛的附件资料...喜欢此文档的还喜欢 【SoCVista】10.流水线结构.....请到百度文库投诉中心;如要提出功能问题或意见建议,...“莫名其妙”的原理,不过没有关系,我会慢慢展示给...喜欢此文档的还喜欢 【SoCVista】10.流水线结构.....请到百度文库投诉中心;如要提出功能问题或意见建议,...很多教科书,虽然都有专门的章节来讲解量化误差的内容...喜欢此文档的还喜欢 【SoCVista】2.迭代边界 6页 ...请到百度文库投诉中心;如要提出功能问题或意见建议,...任一次迭代都可以单独进行而与其他次迭代没依赖关系...喜欢此文档的还喜欢 【SoCVista】13.位级运算架... 31页 免费 【SoCVista】...讨论具体硬件设计方法之前, 先进行一些约定: 假设所有的有符号数都采用定点 2 ...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。你的位置:
verdi 与 vcs 查看波形的问题
[i=s] 本帖最后由 悉你 于
11:10 编辑
verdi的版本是201101, vcs是201103,都是论坛的文件
Dump fsdb file了之后,转到verdi中打开始终是有问题。是不是有版本的问题。vcs编译使用的是VCS/LINUX下的novas.tab和pli.a,生成都没有问题,但是到了verdi下面就是打开文件有问题。
仿照introduction to verdi中的操作,在verdi中加载verilog 文件,设定仿真器,运行仿真之后就自动跳出运行环境了。不知道大家有没有这种问题。
使用命令 verdi -ssf xx.fsdb,就是不能再nWave下看到信号,如果是选择get all signals,报错为no setting dump scope yet, please add one or more. 关于verdi 加载verilog文件就是上述的问题。
不知道如果是选择安装更旧一点版本的verdi会不会有同样的问题??仿真是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
add wave /*;run -
或在testbench中加入:
$dumpfile("*.vcd");
$dumpvars(0,**);
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中加入:
$fsdbDumpfile("*.fsdb");
$fsdbDumpvars(0,**);
其余波形文件就是各家不同的仿真或调试工具支持的文件类型,互不通用,但基本都可以由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
// 条件表达式2
( 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)
(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]
integer skip,
initial begin
if( $test$plusargs("dumpfsdb") ) begin
if( $value$plusargs("time=%d", skip) )
if( $value$plusargs ("casename=%s",casename) )
$fsdbAutoSwitchDumpfile(300, casename, 30);
$fsdbAutoSwitchDumpfile(300,"./test_top.fsdb",40);
$fsdbDumpvarsToFile("dump.list");
跑仿真的时候,对应的如果要从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_
integer stop_
integer finish_
reg [8*30*-1 : 0] waveform_
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);
&&&&&&&&&&$fsdbD
&&&&&&&&&&#start_
//select dump signals
$fsdbDumpvars(0,xx_tb);
转载自:http://www.cnblogs.com/zeushuang/archive//2769640.html
阅读(...) 评论()

我要回帖

更多关于 hspice输出fsdb波形 的文章

 

随机推荐