System Verilog学习笔记(十)——任务和函数
函数(function)和任务(task)可以提高代码的复用性和整洁度。他们的目的在于将大型的过程块切分为更小的片段,而便于阅读和代码维护。
区别
- function不会消耗仿真时间,而task则可能会消耗仿真时间。
- function无法调用task,而task可以调用function。
- 一个可以返回数据的function只能返回一个单一数值,而task或者void function不会返回数值。
- 一个可以返回数据的function可以作为表达式的操作数,而该操作数的值即function的返回值。
函数function
- 首要目的是为运算表达式提供返回值 ,可以用return直接返回,也可以将值赋给与函数同名的变量。
- void函数不会返回数值
- 函数的参数列表也可以声明input、output、inout和ref。
function logic [15:0] myfuncl(int x, int y); //logic [15:0]是函数的返回值,x和y是两个参数,若没指明方向,则默认为input. endfunction
任务task
- 任务的定义可以指定参数、input、output、inout和ref都可
- 如果调用具有返回值的函数,但是又不使用该返回值,建议为其添加void’()进行转换。
- 若参数没有被传递值,那么编译器将会为这些参数传入对应的默认值。
- 类似于模块例化一样,可由参数位置顺序在调用方法时传递参数,也可以由参数名字调用方式时绑定参数。
task mytask3(input x, input y);endtask