原创 fsdb waveform

2010-5-29 17:08 6983 5 5 分类: FPGA/CPLD

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<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


 


  1: initial


   2: begin


   3: $fsdbDumpfile("wave_out.fsdb");


   4: $fsdbDumpvars;


   5: end   


这样,在仿真时就会在script目录生成wave_out.fsdb波形文件。


如果波形文件比较大的话,打开时会占用很多内存,这时可以把波形文件分段输出,调试时只要载入指定时间段的波形文件就可以了,将第三行语句替换为如下语句:


   1: $fsdbAutoSwitchDumpfile(25, "test.fsdb", 150);


这条语句表示将fsdb文件分成每个大小为25MB的文件,最多输出150个文件。每个文件的仿真时间范围记录在test.log文件中。


 


initial begin

    $timeformat(...);
    $fsdbAutoSwitchDumpfile(...);
    $fsdbDumpvars(...);

    //
条件表达式1
    $fsdbDumpoff;
    //
条件表达式2
    $fsdbDumpon;
end


 


1. 我们比较常用的一般还有$value$plusargs这个task,在test_top中:$value$plusargs("casename=%s",casename)
   
通过脚本在run的时候把casename传递进去(vcs/nc SIM_ARG: +casename=$Testcase_name.fsdb)
   
便于如果同时跑多个testcase的时候可以同时dumpfsdb,另外就是跳过一些时间开始dumpSIM_ARG: +time=$start_time)
   $value$plusargs("time=%d",skip)
    #skip

2. project
中每个人关注的module不同,为了频繁去修改test_topdump,一般也会把需要dump的内容用dumplistfile来实现
   $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

1.
跑仿真的时候,对应的如果要从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


 


 


 


新开一个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);

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条