Task
在SystemVerilog中,Task(任務(wù))常被認(rèn)為是程序塊或過(guò)程塊,其具有以下特點(diǎn):
- Task在被使用的模塊中被調(diào)用。可以在單獨(dú)的文件中定義task塊,使用`include語(yǔ)句包含定義task塊的文件來(lái)調(diào)用task塊。
- Task塊中可以使用 timing delay。例如:posedge,negedge,# delay and wait。
- Task塊可以有多個(gè)inputs and outputs。
- Task塊中定義的變量只存在于Task塊中。
- 當(dāng)Task塊內(nèi)部沒(méi)有本地變量時(shí),Task塊可以使用,驅(qū)動(dòng),回溯全局變量 。當(dāng)Task塊內(nèi)部有本地變量時(shí),輸出賦值基本在Task塊執(zhí)行完畢后完成。
- Task塊可以調(diào)用其他Task塊或者Function。
- Task塊可以用于組合邏輯建模以及時(shí)序邏輯建模。
- Task塊必須使用專(zhuān)門(mén)的語(yǔ)句來(lái)調(diào)用,它不能像函數(shù)一樣用于表達(dá)式。
Function
Function在很多地方上與Task類(lèi)似,但它們之間有一些區(qū)別,比如Function不能驅(qū)動(dòng)多個(gè)output并且不能包含 timing delay等。
- Function在被使用的模塊中被調(diào)用??梢栽趩为?dú)的文件中定義Function,使用`include語(yǔ)句包含定義Function的文件來(lái)調(diào)用Function。
- Function中不允許包含timing delays。 例如:posedge, negedge, # delay, 這意味著Function的執(zhí)行是"zero" time delay的。
- Function可以有多個(gè)inputs但只能有 一個(gè)output。
- Function中定義的變量只存在于Function中。
- 當(dāng)Function內(nèi)部沒(méi)有本地變量時(shí),F(xiàn)unction可以使用,驅(qū)動(dòng),回溯全局變量 。當(dāng)Function內(nèi)部有本地變量時(shí),輸出賦值基本在Function執(zhí)行完畢后完成。
- Function只可用于組合邏輯建模。
- Function可以調(diào)用其他Function,但不能調(diào)用Task塊。