function和task的定义与调用都包含在一个module的内部,可以在一个module内把很大的程序模块分解成如果较小的任务和函数,使之便于理解和调试。
不过并没有降低资源的使用率,只是让代码看起来更简洁、更加的模块化。(参考https://blog.csdn.net/qq_37147721/article/details/84889832)
function
- 定义
function [返回值类型或位宽] function_id;
input_declaration
other_declarations
begin
procedural_statement;
end
endfunction
函数返回值的类型或位宽,是一个可选项,若没有指定,默认缺省值为 1 比特的寄存器数据;
function_id 为所定义函数的名称,并在函数结构体内部隐式地生成一个内部变量,该寄存器变量和函数同名并且位宽也一致。函数通过在函数定义中对该寄存器的显式赋值来返回函数计算结果;
对函数的调用也是通过函数名完成的,函数调用的返回值就是通过函数名变量传递给调用语句。
定义时要注意:
(1) 和模块定义不一样,第一行的function语句中没有列出端口名列表;
(2) 函数定义只能在模块中完成,不能出现在过程块中(always,initial)