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