目錄
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