1 回答

TA貢獻1934條經驗 獲得超2個贊
$dumpfile和$dumpvar是verilog語言中的兩個系統任務,可以調用這兩個系統任務來創建和將指定信息導入VCD文件. (什么是VCD文件? 答:VCD文件是在對設計進行的仿真過程中,記錄各種信號取值變化情況的信息記錄文件。EDA工具通過讀取VCD格式的文件,顯示圖形化的仿真波形,所以,可以把VCD文件簡單地視為波形記錄文件.)下面分別描述它們的用法并舉例說明之。
$dumpfile系統任務:為所要創建的VCD文件指定文件名。
舉例("//"符號后的內容為注釋文字):
initial
$dumpfile ("myfile.dump"); //指定VCD文件的名字為myfile.dump,仿真信息將記錄到此文件
$dumpvar系統任務:指定需要記錄到VCD文件中的信號,可以指定某一模塊層次上的所有信號,也可以單獨指定某一個信號。
典型語法為$dumpvar(level, module_name); 參數level為一個整數,用于指定層次數,參數module則指定要記錄的模塊。整句的意思就是,對于指定的模塊,包括其下各個層次(層次數由level指定)的信號,都需要記錄到VCD文件中去。
舉例:
initial
$dumpvar (0, top); //指定層次數為0,則top模塊及其下面各層次的所有信號將被記錄
initial
$dumpvar (1, top); //記錄模塊實例top以下一層的信號
//層次數為1,即記錄top模塊這一層次的信號
//對于top模塊中調用的更深層次的模塊實例,則不記錄其信號變化
initial
$dumpvar (2, top); //記錄模塊實例top以下兩層的信號
//即top模塊及其下一層的信號將被記錄
假設模塊top中包含有子模塊module1,而我們希望記錄top.module1模塊以下兩層的信號,則語法舉例如下:
initial
$dumpvar (2, top.module1); //模塊實例top.module1及其下一層的信號將被記錄
假設模塊top包含信號signal1和signal2(注意是變量而不是子模塊), 如我們希望只記錄這兩個信號,則語法舉例如下:
initial
$dumpvar (0, top.signal1, top.signal2); //雖然指定了層次數,但層次數是不影響單獨指定的信號的
//即指定層次數和單獨指定的信號無關
我們甚至可以在同一個$dumpvar的調用中,同時指定某些層次上的所有信號和某個單獨的信號,假設模塊top包含信號signal1,同時包含有子模塊module1,如果我們不但希望記錄signal1這個獨立的信號,而且還希望記錄子模塊module1以下三層的所有信號,則語法舉例如下:
initial
$dumpvar (3, top.signal1, top.module1); //指定層次數和單獨指定的信號無關
//所以層次數3只作用于模塊top.module1, 而與信號
top.signal1無關
上面這個例子和下面的語句是等效的:
initial
begin
$dumpvar (0, top.signal1);
$dumpvar (3, top.module1);
end
$dumpvar的特別用法(不帶任何參數):
initial
$dumpvar; //無參數,表示設計中的所有信號都將被記錄
最后,我們將$dumpfile和$dumpvar這兩個系統任務的使用方法在下面的例子中綜合說明,假設我們有一個設計實例,名為 i_design,此設計中包含模塊module1,模塊module1下面還有很多層次,我們希望對這個設計進行仿真,并將仿真過程中模塊module1及其以下所有層次中所有信號的變化情況,記錄存儲到名為mydesign.dump的VCD文件中去,則例示如下:
initial
begin
$dumpfile ("mydesign.dump"); //指定VCD文件名為mydesign.dump
$dumpvar (0, i_design.module1); //記錄i_design.module1模塊及其下面層次中所有模塊的所有信號
end
添加回答
舉報