【verilog】六、任務和函數

 

 

1、任務和函數必須在模塊中定義,也只能在定義它們的模塊中使用。

2、任務用於代替普通Verilog代碼,可包含延遲、時序、事件等;函數用於代替表示純組合邏輯的Verilog代碼。

 

-任務:關鍵字task-endtask。必須使用任務而不能使用函數的條件:1.程序中包含延遲、時序、事件控制結構;2.沒有輸出、輸出變量數目大於1;3.沒有輸入變量。

 

 

任務使用示例:

或者:

 

-自動(可重入)任務:task後加關鍵字automatic。由於任務中聲明項的地址空間是靜態分配的,若是同時併發執行的多個任務共享存儲區。若兩個任務被同時調用,則會對同一個地址空間進行操作,產生衝突。使用自動任務,可以將存儲空間動態分配給聲明項,每個任務調用獨立變量副本進行操作。

 task automatic bitwise_xor;

 ……

 endtask

 

-函數:關鍵字function-endfunction。函數使用必須同時滿足如下條件:不含延遲、時序、控制結構;只有一個返回值;至少有一個輸入變量;沒有輸出或雙向變量;不含非阻塞賦值語句。

函數使用示例:

 

-自動(遞歸)函數:關鍵字automatic。同自動任務,仿真器爲每一次函數調用動態地分配新的地址空間。自動函數聲明的局部變量不能通過層次名進行訪問,自動函數本身可以通過層次名進行調用。

自動函數使用示例:

 

-常量函數:帶有某些限制的常規函數,能夠又來引用複雜值,可代替常量。

 

-帶符號函數:帶符號函數的返回值可以作爲帶符號數進行運算。

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章