關於fsdb的一些記錄

harriszh發表於2023-03-05

FSDB

控制波形生成

vcd

$dumpvars; // Dump所有層次的訊號
$dumpvars(level,module_hierarchy); //要記錄的訊號,level=0表示記錄所有
$dumpvars (0, top); // Dump top模組中的所有訊號
$dumpvars (1, top.module1); // Dump例項top.module1及其下一層的訊號
$dumpoff; //停止記錄
$dumpon; //重新開始記錄

fsdb

`timescale 1ns/1ns
module test; 
initial 
begin 
$fsdbDumpfile("test.fsdb"); 
$fsdbDumpvars(0,test); 
end
...
endmodule

run-time

xcelium
%> xrun top.v -access +r +tcl+cmd.tcl
call fsdbDumpfile "my.fsdb"
call fsdbDumpvars top
run 10000ns
exit
vcs
% simv -ucli -i cmd.tcl
fsdbDumpfile test.fsdb 500
fsdbDumpvars 0 test "+all"
fsdbDumpon
run 1000ns
fsdbDumpoff
quit

VCS中使能FSDB

-debug_access+pp
-fsdb
-P $VERDI_LIB/novas.tab $VERDI_LIB/pli.a

分割fsdb波形

fsdbextract verilog.fsdb -s /top/module1 -o sub.fsdb
fsdbextract verilog.fsdb -s /top/module1 /top/module2/u_sub1 -level0 -o sub.fsdb
fsdbextract verilog.fsdb -s /top/module1 -bt 1ms -et 3ms -o sub.fsdb //bt=begin time, et=end time

將FSDB波形轉成CSV等可讀性文字

fsdbreport test.fsdb -bt 1000ns -et 1100ns -s "top/abc[31:0]" -csv -of h -o test.csv

其中引數

  • bt是波形的開始時間
  • et是波形的結束時間
  • s是匯出的訊號名,可以用萬用字元匹配
  • of是輸出的資料格式,h為16進位制
  • o為匯出的檔名
fsdbreport tb.fsdb -s /tb* -level 0 -bt 101055ps -et 200000ps -of h -o fsdb_cn.txt

列出模組/tb下的訊號,輸出類似

Time(1ns) /tb/clk    /tb/rst      /tb/led
========  =======    =======      =======
101       0          1            1
105       1          1            0

fsdbreport -help可以檢視更多選項

  • -s: 指定要報告的訊號或範圍
  • -exp: 當表示式為 true(==1) 時的報告值
  • -w 32: 是指定資料位寬
  • -bt: begin time
  • -et: end time
  • -of: 定義輸出顯示格式為二進位制、八進位制、十進位制、無符號十進位制或十六進位制
  • -o: 指定輸出報告的檔名
  • -level:指定要在指定範圍內轉儲的級別數。此選項必須與 -s 一起使用
  • -cn: 定義報告的列數,包括時間列, 0 表示所有滿足的訊號以一列形式顯示;
fsdbreport verilog.fsdb -s "/system/addr[7:4]"

fsdbreport fsdb/vhdl_typecase.fsdb -nocase -s top/A_SIMPLE_REC.FIELD3 -a simple.field3 -w 15 TOP/A_COMPLEX_REC.F1.FIELD3 -a complex.f1.field3 -w 20 top/a_std_logic_vector -af sean2.alias -of a -o output.txt -bt 1000 -et 2000

fsdbreport rtl.fsdb -find_forces -s "/system/i_cpu/*" -exclude_scope "/system/i_cpu/s1/*" "/system/i_cpu/s2" -o report.txt

fsdbreport verilog.fsdb -exp "/system/addr=='h30 & /system/clock==1" -s /system/data 

fsdb2vcd

fsdb2vcd verilog.fsdb -s /system/i_cpu -level 1 -bt 10 -et 1000 -o output.vcd

fsdb ucli

+IO_Only – 只載入IO port訊號;
+Reg_Only – 只載入reg型別訊號;
+mda – 載入memory和MDA訊號;
+packedmda – 載入packed MDA;
+struct – 載入structs;
+parameter – 載入parameter;
+fsdbfile+filename – 指定fsdb檔名字。

相關文章