1、任務和函數必須在模塊中定義,也只能在定義它們的模塊中使用。
2、任務用於代替普通Verilog代碼,可包含延遲、時序、事件等;函數用於代替表示純組合邏輯的Verilog代碼。
-任務:關鍵字task-endtask。必須使用任務而不能使用函數的條件:1.程序中包含延遲、時序、事件控制結構;2.沒有輸出、輸出變量數目大於1;3.沒有輸入變量。
任務使用示例:
或者:
-自動(可重入)任務:task後加關鍵字automatic。由於任務中聲明項的地址空間是靜態分配的,若是同時併發執行的多個任務共享存儲區。若兩個任務被同時調用,則會對同一個地址空間進行操作,產生衝突。使用自動任務,可以將存儲空間動態分配給聲明項,每個任務調用獨立變量副本進行操作。
task automatic bitwise_xor;
……
endtask
-函數:關鍵字function-endfunction。函數使用必須同時滿足如下條件:不含延遲、時序、控制結構;只有一個返回值;至少有一個輸入變量;沒有輸出或雙向變量;不含非阻塞賦值語句。
函數使用示例:
-自動(遞歸)函數:關鍵字automatic。同自動任務,仿真器爲每一次函數調用動態地分配新的地址空間。自動函數聲明的局部變量不能通過層次名進行訪問,自動函數本身可以通過層次名進行調用。
自動函數使用示例:
-常量函數:帶有某些限制的常規函數,能夠又來引用複雜值,可代替常量。
-帶符號函數:帶符號函數的返回值可以作爲帶符號數進行運算。