1. 简介
1.1. task通常的特征
1) 在task结束前使用return返回
2) 通过引用、值、名称和位置传递参数值
3) 存在默认的参数值
4) 默认的参数方向是input
5) 默认的参数类型是logic
6) 静态task为所有task调用共享相同的存储空间
7) 动态task为每个task调用分配唯一的堆叠存储空间
8) task没有返回值,但是可以将参数列表中的参数定义为output、ref、inout,将task内部值传递出来
9) task可以调用function
10) function不能消耗仿真时间
1.2. function通常的特征
1) 在function结束前使用return返回
2) 通过引用、值、名称和位置传递参数值
3) 存在默认的参数值
4) 默认的参数方向是input
5) 默认的参数类型是logic
6) function有返回值,但只有一个;另外也可以将参数列表中的参数定义为output、ref、inout,将function内部值传递出来
7) task可以消耗仿真时间
2. function调用task
2.1. task不消耗仿真时间
task t1();
$display(“T1”);
endtask
function void f1();
t1();
endfunction
上述代码可以在VCS下编译仿真通过。
VCS编译会给出上面的告警,不会出错。
如果在t1中加入延时,如下:
task t1();
#1ns;
$display(“T1”);
endtask
VCS会编译出错。
总结:
在task没有延迟语句的情况下,function可以调用task
2.2. task消耗仿真时间
task t1();
#1ns;
$display(“T1”);
endtask
function void f1();
fork
t1();
join_none
endfunction
上述代码可以在VCS下编译仿真通过。
即使是消耗仿真时间的task也可以在function中调用,只需要使用fork...none即可。