1. function
特点:
- 缺省的数据类型是logic输入;
- 可以作为形式参数传递;* function可以返回或不返回结果,返回时需要关键词return,不返回在声明时要用 void function();
- 只有数据变量可以在形式参数列表中被声明为ref类型,而线网类型不能被声明为ref;
- function不能调用task(v中规定),sv中可以在特定的fork…join_none中调用task;
- function中参数列表中参数如果不标明方向,默认是输入信号input;
2. task
- 可以在参数列表中指定input output inout ref(引用参数);
- 可以返回值或者不返回(void),但是是通过output、inout或ref来指定返回值的,不能使用return返回;
- 缺省类型为logic输入;
特点:
- task无法通过return返回结果,只能通过输出(output inout)或者ref的参数来返回。
- task内可以置入耗时语句,而function不行。常见的耗时语句@event 、wait event 、 #delay
【注意】
- 要调用function,则使用function task均可;
- 要调用task,只能用task调用。
总结表格
| function | task |
|---|---|
| function能调用 function函数,但不能调用task | task可以调用function 和 task |
| 函数中不能有耗时语句,在仿真0时刻就执行 | 任务中可以置入耗时语句,可在非零时刻执行 |
| 函数至少有一个或多个输入变量 | 任务可以没有,也可以有多个输入、输出和双向变量 |
| 函数只能返回一个值,不能有输出或者双向变量 | 任务不返回任何值,可以通过输出或者双向变量传递多个值 |
本文详细介绍了Verilog和SystemVerilog中function与task的区别。function默认为逻辑输入,不可调用task,常用于无耗时计算;而task可指定输入输出参数,能包含耗时语句,适用于需要延迟执行的情况。function只能返回一个值,而task通过参数传递多个结果。在调用上,function和task调用方式不同,function可互相调用,task只能调用function。了解这些差异对于编写高效且正确的硬件描述语言代码至关重要。

4674

被折叠的 条评论
为什么被折叠?



