與C語言類比,可以把任務理解成返回類型為void的子程序,把函數理解為帶有返回值類型的子程序。
1、任務(task)
(1)任務定義的語法為:
task《任務名》; 《端口與類型說明》 《局部變量說明》 begin 《語句》 endendtask
需要注意的是,在第一行task語句中不能列出端口名列表;可以沒有輸入、輸出端口和雙向端口,也可以有一個或多個輸入、輸出端口和雙向端口。
(2)任務的調用
《任務名》(端口1,端口2,。..,端口n);
任務的調用只能在過程塊中進行。當被調用的任務具有輸入或輸出端口時,任務調用語句必須包含端口列表。這個列表內端口出現的順序和類型必須與任務定義的順序和類型一致。
2、函數(function)
函數的目的是通過返回一個值來響應輸入信號的值。函數不能啟動任務,但任務可以啟動函數。在Verilog HDL中函數被當作操作符來使用,結果就是這個函數的返回值。
(1)函數的定義
function《返回值的類型和位寬》(函數名) 《端口與類型說明》 《局部變量說明》 begin 《語句》 endendfunction
其中,返回值的類型和位寬是可選項,如果缺省會返回一位寄存器類型數據。Verilog HDL認為函數的定義隱式地聲明了與函數同名的寄存器。函數的定義把函數被返回值所賦值寄存器的名稱初始化為與函數同名的內部變量。
(2)函數的調用
《函數名》(《輸入表達式1》,《輸入表達式2》,。..,《輸入表達式n》);
其中,n個輸入表達式要與函數定義結構中說明的各個端口一一對應,他們代表各個輸入端口的輸入數據,這些輸入表達式的排列順序及類型必須與各個輸入端口在函數定義結構中的排列順序及類型嚴格保持一致。
函數的調用不能單獨作為一條語句出現,他只能作為一個操作出現在賦值語句內,不僅能夠用于過程塊內的賦值,還能夠出現在assign語句中。
3、任務與函數的比較
(1)函數至少必須有一個輸入端口,而任務可以有多個、一個或沒有輸入端口;
(2)函數不能有輸出端口,而任務可以有多個、一個或沒有輸出端口;
(3)函數調用通過函數名返回一個返回值,而任務調用通過端口傳遞返回值;
(4)函數中不能調用任務,但任務中可以調用函數;
(5)函數調用不能作為一條語句出現,而任務調用可以;
(6)函數調用可以出現在過程塊或者連續賦值語句中,而任務調用只能出現在過程塊中。
文章出處:【微信公眾號:FPGA之家】
責任編輯:gt
-
數據
+關注
關注
8文章
7241瀏覽量
91034 -
C語言
+關注
關注
180文章
7630瀏覽量
140450
原文標題:Verilog HDL語言(3) : 任務和函數
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
verilog模塊的調用、任務和函數

一文詳解Verilog HDL

淺談Verilog和VHDL的區別

評論