task區(qū)別 function
Task和function分別用來定義任務(wù)和函數(shù),利用task和function可以把一個(gè)很大的程序模塊分解為許多較小的task和function便于理解和調(diào)試,即增強(qiáng)了代碼的可讀性和可維護(hù)性。
Function和task說明語句的不同點(diǎn):
(1)function只能和主模塊共用同一個(gè)仿真時(shí)間單位,而task可以自己定義自己的仿真時(shí)間單位。
(2)function不能啟動(dòng)task,但是task可以能啟動(dòng)其他task和function。
(3)function至少要有一個(gè)輸入變量,而task可以沒有或者有多個(gè)任何類型的變量。
(4)function返回一個(gè)值,而task則不返回值。
(5) task可以有任意多個(gè)輸入、輸入輸出inout、輸出變量;在task中可以使用延遲、事件和時(shí)序控制結(jié)構(gòu),在task中可以調(diào)用其他的task和function。
(6) 可重入task使用關(guān)鍵字automatic進(jìn)行定義,它的每一次調(diào)用都對不同的地址空間進(jìn)行操作。因此在被多次并發(fā)調(diào)用時(shí),它仍然可以獲得正確的結(jié)果。
(7) function只能有一個(gè)返回值,并且至少要有一個(gè)輸入變量;在function中不能使用延遲、事件和時(shí)序控制結(jié)構(gòu),但可以調(diào)用其他function,不能調(diào)用task。
(8) 當(dāng)聲明function時(shí),Verilog仿真器都會(huì)隱含地聲明一個(gè)同名的寄存器變量,function返回值通過這個(gè)寄存器傳遞回調(diào)用處。
(9) 遞歸function使用關(guān)鍵字automatic進(jìn)行定義,遞歸function的每一次調(diào)用都擁有不同的地址空間。因此對這種function的遞歸調(diào)用和并發(fā)調(diào)用可以得到正確的結(jié)果。
(10) task和function都包含在設(shè)計(jì)層次之中,可以通過層次名對它們進(jìn)行調(diào)用。
?
注意:
在Verilog中function不能調(diào)用task,但在SystemVerilog對這條限制稍有放寬,允許function調(diào)用task,但只能在由 fork…join_none語句生成的線程中調(diào)用。
————————————————
版權(quán)聲明:本文為CSDN博主「IC媛」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_38374491/article/details/118152915