Verilog中function与task的区别
任务、函数的定义和调用都包括在一个module的内部,他们一般用于行为级建模,在编写Testbench时用的较多,而在写可综合的代码时要少用。
function的定义
function <返回值类型和位宽> <函数名>;
入口参数和类型声明;
局部变量声明;
行为语句;
endfunction
定义function时需要注意以下几点:
- function定义结构不能出现在任意一个过程块(always或者initial)的内部;
- function定义不能包含有任何时间控制语句,即任何用#、@、wait来标识的语句;
- 定义function时至少有一个输入参量;
- 定义function时,在function内部隐式地将函数声明成一个寄存器变量,在函数中必须有一条赋值语句对该寄存器变量赋值,以便调用function时能够得到返回的函数值。如果没有指定返回值的宽度,function将缺省返回1位二进制数。
function的调用
<函数名>(<输入表达式1>,...,<输入表达式n>);
输入表达式与函数定义结构中的各个输入端口一一对应