當前位置:首頁 > 公眾號精選 > ZLG致遠電子
[導讀]波形文件一般用于仿真后記錄波形文件,用于做詳細分析和研究。說一下幾種波形文件WLF(WaveLogFile)、VCD(ValueChangeDump)文件,fsdb(FastSignalDataBase)文件、shm、vpd。WLF?(WaveLogFile)?MentorGra...

波形文件一般用于仿真后記錄波形文件,用于做詳細分析和研究。說一下幾種波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd。


WLF?(Wave Log File)?

Mentor Graphics 公司Modelsim支持的波形文件。在modelsim波形窗口觀察波形時,仿真結束時都會生成一個*.wlf的文件(默認是vsim.wlf),可以用modelsim直接打開,命令如下:

vsim -view vsim.wlf -do run.do
其中,run.do中的內容為要查看的波形信號。

這個wlf文件只能由modelsim來生成,也只能通過modelsim來顯示。不是一個通用的文件格式。

?

VCD(Value Change Dump)

IEEE1364標準(verilog?hdl語言標準)中定義的一種ASCII文件,是通用的文件格式。它主要包含了頭信息,變量的預定義和變量值的變化信息。正是因為它包含了信號的變化信息,就相當于記錄了整個仿真的信息,我們可以用這個文件來再現(xiàn)仿真,也就能夠顯示波形。因為VCD是 Verilog HDL語言標準的一部分,因此所有的verilog的仿真器都能夠查看該文件,允許用戶在verilog代碼中通過系統(tǒng)函數(shù)來dump VCD文件。


我們可以通過Verilog HDL的系統(tǒng)函數(shù)$dumpfile 來生成波形,通過$dumpvars的參數(shù)來規(guī)定我們抽取仿真中某些特定模塊和信號的數(shù)據(jù)。示例如下:

// 在testbench中加入以下內容initialbegin$dumpfile("*.vcd");$dumpvars(0,**);end
我們可以通過modelsim 命令來dump VCD文件,這樣可以擴展到VHDL中。具體的命令:

vcd file myfile.vcdvcd add /test/dut/* # 生成一個含dut下所有信號的VCD數(shù)據(jù)信息)vsim -vcdstim myfile.com # 使用VCD來進行仿真 )
test;add wave /*;run -all;
特別說明的一點是,正是因為VCD記錄了信號的完整變化信息,我們還可以通過VCD文件來估計設計的功耗,而這一點也是其他波形文件所不具備的。Encounter 和 PrimeTime PX (Prime Power)都可以通過輸入網(wǎng)表文件,帶功耗信息的庫文件以及仿真后產(chǎn)生的VCD文件來實現(xiàn)功耗分析。

FSDB (Fast Signal DataBase)

Spring Soft (Novas)公司 Debussy / Verdi 支持的波形文件,一般較小,使用較為廣泛,其余仿真工具如ncsim,modlesim 等可以通過加載Verdi 的PLI (一般位于安裝目錄下的share/pli 目錄下)?而直接dump fsdb文件。


fsdb文件是verdi使用一種專用的數(shù)據(jù)格式,類似于VCD,但是它是只提出了仿真過程中信號的有用信息,除去了VCD中信息冗余,就像對VCD數(shù)據(jù)進行了一次huffman編碼。因此fsdb數(shù)據(jù)量小,而且會提高仿真速度。我們知道VCD文件使用verilog內置的系統(tǒng)函數(shù)來實現(xiàn)的,fsdb是通過verilog的PLI接口來實現(xiàn)的,例如$fsdbDumpfile, $fsdbDumpvars等。示例如下:

// Testbench中加入以下內容 initialbegin$fsdbDumpfile("*.fsdb");$fsdbDumpvars(0,**);end
?

shm

Cadence公司 NC verilog 和Simvision支持的波形文件,實際上 .shm是一個目錄,其中包含了.dsn和.trn兩個文件。使用NC Verilog 對同一testcase和相同dump波形條件的比較,產(chǎn)生shm文件的時間最短(廢話,本來就是一個公司的),產(chǎn)生vcd文件的時間數(shù)倍于產(chǎn)生shm和 fsdb的時間。在筆者測試的例子中,產(chǎn)生的fsdb文件為十幾MB,shm文件為幾十MB,而vcd文件則要幾個GB的大小。


vpd

Synopsys公司 VCS DVE支持的波形文件,可以用$vcdpluson產(chǎn)生。


其余波形文件

就是各家不同的仿真或調試工具支持的文件類型,互不通用,但基本都可以由VCD文件轉換而來(其實就是VCD文件的壓縮版,因為只取仿真調試需要的數(shù)據(jù),所以文件大小要遠小于原始VCD文件),有的還提供與VCD文件的互轉換功能。


?******************************************************************************

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 - 限制文件大小并在數(shù)據(jù)量過大時自動創(chuàng)建新的FSDB 文件$fsdbAutoSwitchDumpfile(<file size>, “<FSDB name>”,< number of file>)fsdbDumpflush - Force to Dump Result to FSDB filefsdbDumpMem - Dump 指定的memory 的內容$fsdbDumpMem(<reg name>, [<start addr>, [<size>]])$fsdbDumpon - 打開 FSDB dumping$fsdbDumpoff - 關閉 FSDB dumping2、一個自由開關FSDB 的方法,有時候要運行很長時間的仿真,但是關心的波形卻只是其中一小段。這個時候怎么來開關波形,使文件不至于太過龐大呢?這里介紹一個方法。示例僅供參考,大家可以結合實際應用創(chuàng)造出更加多樣的變化來。

initial begin$timeformat(...);$fsdbAutoSwitchDumpfile(...);$fsdbDumpvars(...);// 條件表達式1$fsdbDumpoff;// 條件表達式2$fsdbDumpon;end3、我們比較常用的一般還有$value$plusargs 這個task,在test_top 中:

$value$plusargs("casename=%s",casename)通過腳本在run 的時候把case name 傳遞進去(給vcs/nc SIM_ARG: casename=$Testcase_name.fsdb)
便于如果同時跑多個testcase 的時候可以同時dumpfsdb,另外就是跳過一些時間開始

dump(SIM_ARG: time=$start_time)$value$plusargs("time=%d",skip)#skip4、project 中每個人關注的module 不同,為了頻繁去修改test_top 的dump,一般也會把需要dump 的內容用dumplist的file 來實現(xiàn)

$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 beginif( $test$plusargs("dumpfsdb") ) beginif( $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");endend跑仿真的時候,對應的如果要從5000ns(時間單位跟timescale 有關)處開始dump 波形,給vcs/nc 的參數(shù)

dumpfsdb? time=?5000? casename=?testcase1.fsdb其中的testcase1 一般我們都會在腳本處理后跟case 名字關聯(lián)起來,這樣子跑完之后就會從5000 開始dump testcase1_000.fsdb, testcase1_001.fsdb 這樣子,
2. 另外那個dump.list(名字可以隨便?。├锩娴脑O定就跟平常的設定dump 的層次設置一樣了

層次 路徑名0 test_top.dut.m1

例子:

//=================// dump FSDB waveinterger 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); endend

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
關閉
關閉