sv中的task和function
- task和function的共同点
- task和function的不同点
task和function的共同点
- verilog中task和function是相同的。
- 将复杂代码分割成小段落,便于理解和调用,简化程序,功能单一;
- .端口参数默认都是输入,除非声明其他类型;
- 数据类型默认是logic,除非声明为其他类型;
- 可以存在多个语句,不用begin…end做开始结尾;
- wire类型数据不可以在端口使用;
- 通过引用、值、名称、位置传递参数值;
task和function的不同点
sv中增加的使用:在静态task和function中声明动态变量,以及在动态task和function中声明静态变量。
- function不能消耗仿真时间;task可以消耗仿真时间;比如function不能带有#100的时延语句、不能有@(posedge clk)、不能有wait(ready)的阻塞语句。
- function不能调用task;task可以调用function或task;注意:sv中允许function调用task,但只能在fork…join_none生成的线程中调用。
- function可以使用void表示不返回结果;task不使用void表示不返回结果;
- function只能返回一个值;注意:task无返回值;verilog fucntion必须要有一个返回值;sv可以使用void’(call_function(params))避免返回值。