task区别 function
Task和function分别用来定义任务和函数,利用task和function可以把一个很大的程序模块分解为许多较小的task和function便于理解和调试,即增强了代码的可读性和可维护性。
Function和task说明语句的不同点:
(1)function只能和主模块共用同一个仿真时间单位,而task可以自己定义自己的仿真时间单位。
(2)function不能启动task,但是task可以能启动其他task和function。
(3)function至少要有一个输入变量,而task可以没有或者有多个任何类型的变量。
(4)function返回一个值,而task则不返回值。
(5) task可以有任意多个输入、输入输出inout、输出变量;在task中可以使用延迟、事件和时序控制结构,在task中可以调用其他的task和function。
(6) 可重入task使用关键字automatic进行定义,它的每一次调用都对不同的地址空间进行操作。因此在被多次并发调用时,它仍然可以获得正确的结果。
(7) function只能有一个返回值,并且至少要有一个输入变量;在function中不能使用延迟、事件和时序控制结构,但可以调用其他function,不能调用task。
(8) 当声明function时,Verilog仿真器都会隐含地声明一个同名的寄存器变量,function返回值通过这个寄存器传递回调用处。
(9) 递归function使用关键字automatic进行定义,递归function的每一次调用都拥有不同的地址空间。因此对这种function的递归调用和并发调用可以得到正确的结果。
(10) task和function都包含在设计层次之中,可以通过层次名对它们进行调用。
注意:
在Verilog中function不能调用task,但在SystemVerilog对这条限制稍有放宽,允许function调用task,但只能在由 fork…join_none语句生成的线程中调用。
————————————————
版权声明:本文为CSDN博主「IC媛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38374491/article/details/118152915