verilog test bench延迟一定时间后翻转_调用函数


函数和任务

  • 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允许类似于模块例化,可以由参数位置在调用方法时传递参数,也可以由参数名字映射的方式来传递参数;