2 Task and Function
task和function在verilog中就已经存在,然而systemverilog为了便于工程使用对它们增加了许多新的特性。
1 task与function最大的区别有两点
(1)task可以添加消耗时间的语句,而function不可以消耗时间 (这一点与verilog相同)。
(2)task可以调用task和function,而function仅能调用function。
还有一点要提醒新手:
task和function中是不能使用initial和always的。
2 task和function在SV中的新特性
2.1 关于task/function参数定义风格
(1)类C的参数声明风格
在verilog中声明一个task的示例如下:
task task_name;
input [31:0] x ;
output [31:0] y ;
wire [31:0] x ;
reg [31:0] y ;
// task 内容
endtask
而在system verilog中,除了可以继续使用verilog中task/function的声明风格外,还提供了一种类似C语言的声明风格:
task task_name(
input [31:0] x,
output logic [31:0] y //可以使用logic替代reg与wire);
// task 内容endtask
(2) 默认参数
在声明task和function时,可以设置默认的参数值,这样当使用task和function时对应参数缺省时