FSDB dump·

目錄

$fsdbDumpfile

$fsdbDumpvars

$fsdbAutoSwitchDumpfile

$fsdbDumpflush

實用技巧


FSDB Dumper支持三種方式來加入options:

1) simulator的command line中添加,simv +fsdbfile+high.fsdb

2) 直接在env中添加,setenv NOVAS_FSDB_FIEL mid_prio.fsdb

3)FSDB Dumping cmd中添加,$fsdbDumpfile("+fsdbfile+low_prio.fsdb")

$fsdbDumpfile

$fsdbDumpfile("FSDB_NAME",Limit_Size);  

指定波形文件名,第二個參數可選擇用來限制波形的大小(MB)。$fsdbDumpfile("FSDB_NAME",Limit_Size);  

$fsdbDumpvars

$fsdbDumpvars(depth,instance,"option="),

$fsdbDumpvars(0,system,"+fsdbfile+novas.fsdb");

dump system模塊中的所有信號並且生產novas的波形文件

0表示dump該模塊以及該模塊下面的所有信號

1表示只dump該模塊這一層的信號

 

$fsdbAutoSwitchDumpfile

$fsdbAutoSwitchDumpfile(file_size, “fsdb_name”, number_of_files[, “log_file_name”, “+fsdb+no_overwrite”])

當波形的大小達到限制後自動以一個新的波形文件起始加載波形;

在所有的波形文件加載完成後,會創建一個virtual FSDB文件,文件後綴.vf。查看波形時只需要加載此文件就可以合併所有的波形文件。

file_size—波形文件大小限制,單位爲MB,最小爲10M,若值小於10M則默認10M;

file_name—波形文件的名字,在實際加載波形時,文件名爲file_name_000.fsdb file_name_001.fsdb…;

number_of_files—最多可以加載多少個file_size這麼大的波形文件,如果寫爲0,則默認沒有限制;

log_file_name—指定log文件的名字;

+fsdb+no_overwrite—當number_of_files限制的個數達到時停止dump波形;

 

$fsdbDumpflush

在仿真過程中強制將信號值加載到波形中,便於在仿真過程中查看波形

 


實用技巧

轉載

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章