Verilog中Function和Task的区别
区别:
- 函数可以返回一个值而任务可以返回多个值
- 函数一经调用必须立即执行,里面不能包含任何的时序控制,而task中可以有时序控制
- 函数可以调用函数,但不可以调用任务,任务既可以调用函数也可以调用任务
- 函数必须要有一个输入参数,而任务可以没有参数输入
- 任务输出的信号或设置为输入输出的端口,在模块中必须定义为reg信号
verilog书中是这样写的:
函数类似于任务,也能提供在模块的不同位置执行共同代码的能力。函数与任务的不同之处在于函数只能返回一个值,它不能包含任何延迟,必须立即执行。并且不能调用其他任务。此外,函数必须至少有一个输入,函数不允许有output和inout声明语句,可调用其他函数。
相同点:
1.任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用。
2. 任务和函数中只能使用行为级语句,但是不能包含always和initial块,设计者可以在always和initial块中调用任务和函数。
3.任务和函数均可以被声明为automatic类型,这样的情况下,任务和函数内部声明的所有局部变量在每一次任务调用时都会进行动态分配,即在任务或函数中调用的局部变量不会对两个单独或并发的进程产生影响。而在静态任务或者函数中,在每一次调用中,任务和函数中的局部变量都使用同一个存储空间。