函数和任务
- Verilog中函数与任务区别:
任务可以消耗时间,函数不能消耗时间;
函数里不能带有#10延时语句或者@(posedge clk)、wait(ready)的阻塞语句;
函数不能调用任务;
函数必须有返回值,并且返回值必须被使用;
1.函数(与C语言类似)
函数的参数可以声明为input、output、inout、ref;
Void函数不返回数值;
函数可以调用函数,但必须立即返回,即不能发生阻塞、等待行为;
如果调用具有返回值的函数,但没有使用该返回值,应添加void‘()进行转换;
Void’(some_function());
2.任务
任务的定义可以指定参数input、output、inout、ref;任务没有返回值;
任务可以消耗仿真时间;
任务可以调用其他任务或者函数;
3.任务和函数区别
- 函数不会消耗仿真时间,而任务可能会消耗仿真时间;
- 函数无法调用任务,而任务可以调用函数;
- 一个函数只能返回一个数值,而任务不会返回数值;
- 函数可以作为一个表达式中的操作数,而该操作数的值即函数的返回值;
4.参数传递
- input、output、inout参数在调用方法时属于值传递,即传递过程中,外部变量的值会经过拷贝,赋值给形式参数;
- 值传递的过程只会出现在方法的调用时和返回时;
- ref参数在传递时不会发生值拷贝,而是将变量指针传递到方法中,因此在方法内部对于参数的任何操作会立即影响到外部变量;
- 为了避免外部传入的ref参数会被方法修改,可以添加const修饰符,表示变量是只读变量;
- SV允许方法声明输入参数时指定参数的默认值;
- SV允许类似于模块例化,可以由参数位置在调用方法时传递参数,也可以由参数名字映射的方式来传递参数;