- 任务和函数(task and function)
任务可以调用函数以及其他任务,但是函数不可以调用任务。在verilog中函数必须有返回值,但是在system verilog中扩展了函数功能,其可以返回空,即void。同时task参数列表可以表示为类似C的形式,用括号括起来,如:
task test(input logic a, input reg[5:0]b, output logic c);
任务重可以有时序控制,但是函数不准许有时序控制。同时需要注意的坑是任务必须在所有语句执行完成后才会返回数值.
可以使用ref来传递参数,这有点类似C中指针传参,相当于将参数地址传递给任务,任务修改是可见的。但是在system verilog手册中要求ref只能用于动态任务中,即要声明任务为automatic。
task automatic test(input logic a, ref reg[5:0]b, output logic c);
不声明动态的任务或者函数,其默认为静态即内部数据分配给内存中固定存储区。如果任务被多次调用,那么多个程序共享静态存储区很容易发生混乱。声明为动态的任务和函数其内部变量自动为动态,但是可以通过static声明为静态的。
动态任务中的动态变量如果去读取文件,则不会获取文件数据,如:
task automatic test(input logic a, ref reg[5:0]b, output logic c);
integer data