本节主要介绍了SystemVerilog中函数与任务的基础知识
函数function
任务的首要目的在于为运算表达式提供返回值
函数定义时会在内部隐式定义一个变量(默认logic类型),该寄存器变量和函数同名并且位宽也一致
1
2
3
4
5function logic [15: 0] myfunc2;
input [7: 0] x;
input [7: 0] y;
myfunc1 = x * y -1;
endfunction
任务
子程序中包含有延迟、时序或者事件控制结构时只能使用任务
若没有声明类型,那么默认是1bit的logic
1
2
3task mytask(input [7: 0] x, input [7: 0] y, output [15: 0] z);
z = x * y - 1;
endtask
函数与任务的区别
function不会消耗仿真时间,而task则可能会消耗仿真时间
函数 任务 function无法调用task task可以调用function 函数一定不能包含任何延迟、事件或者时序控制声明语句 任务可以包含延迟、事件或者时序控制声明语句 函数至少有一个输入变量,函数可以有多个输入变量 任务可以没有或者有多个输入、输出和双向变量 函数只能返回一个值,函数不能输出或者双向变量 任务或者 function void function_name
没有返回值,任务可以通过输出或者双向变量传递多个值