「博文精選」verdi中如何查看force信號信息

在仿真中,我們會有對信號進行force的操作,從而實現某些特定的功能。但是在仿真波形中,不能直接從波形上看出,這些信號的驅動,是因為前級電路的驅動,還是因為force的原因的驅動。從而使debug非常的不友好。

其實在verdi中,是可以直接看到force信號的信息的。這樣的話,就會方便我們去debug force的信號。

要想要verdi中,查看force信號,就需要vcs在仿真時候,生成fsdb波形時,加入force信號的波形信息。只需要在仿真參數中,加入 +fsdb+force 參數即可。當fsdb波形生成後,就可以在verdi中,直接查看到信號的force信息。

如以下代碼:

module tb_top;

reg a;

reg b;

wire c;

my_and u_my_and(a, b, c);

initial begin

a = 1;

b = 0;

#10;

force u_my_and.a = 1'b1;

force u_my_and.b = 1'b1;

#10;

force u_my_and.a = 1'b0;

force u_my_and.b = 1'b0;

#10;

release u_my_and.a;

release u_my_and.b;

#10;

$finish;

end

initial begin

$fsdbDumpfile("force.fsdb");

$fsdbDumpvars(0, "tb_top");

end

endmodule: tb_top

其中my_and模塊,代碼如下:

module my_and(

input a,

input b,

output c

);

assign c = a & b;

endmodule

編譯仿真的Makefile如下:

compile:

vcs -full64 -sverilog -debug_acces=all my_and.v tb_top.sv -kdb

run:

./simv +fsdb+force

verdi:

verdi -dbdir simv.daidir -ssf force.fsdb

在仿真的時候,加上+fsdb+force選項。

打開verdi,查看信號。

「博文精选」verdi中如何查看force信号信息

從波形上,能夠清晰的看到force信號的信息。用紫色虛線標識的波形,就表示這一段時間內,信號是被force驅動的。

  • 向下的紫色箭頭,表示這個時候,有force語句針對該信號

  • 向上的紫色箭頭,表示這個時候,有release語句針對該信號

    通過特殊的紫色波形標記,就可以很清晰的知道信號的force信息了。

在一個環境中,可能force的信號比較多,通過上面的波形方式,去把每一個信號給拉出來,判斷信號是否有force,效率就會比較低了。

此時,我們可以使用fsdbreport命令,從波形裡面,把所有的信號force的信息,全部給抓出來,保存在一個文件中,這樣,我們通過該文件,就可以知道仿真過程中的所有信號force信息。

命令如下:

fsdbreport xxx.fsdb -find_forces -s "/*" -level level_number -o xxx.txt

其中:

  • xxx.fsdb:是輸入的fsdb波形文件

  • -s:指定查找force信息的層次, /* 表示從最頂層開始

  • -level:表示從指定的層次,向下查找層次的數目。0表示指定的層次和以下所有的層次。1表示指定的層次,2表示指定的層次和下一層次。之後依次類推,一般都是直接使用0

  • -o:指定輸出文件

針對剛剛上述產生的force.fsdb波形,來提取force信息。命令如下:

fsdbreport force.fsdb -find_forces -s "/*" -level 0 -o force.txt

生成的force.txt信息如下:

「博文精选」verdi中如何查看force信号信息

該文件中,會打印每一個force信號的信息:

  • force信號的層次路徑

  • force信號在什麼時刻被force,force的值是多少

  • force信號在什麼時刻被release

通過查閱該文件,就可以知道波形文件中,所有的force信號的信息,從而可以幫助我們去debug。


分享到:


相關文章: