1.function的写法如下:
function <返回值的类型或范围>(函数名)或<端口说明语句>;
<端口说明语句> // input XXX(如果上面已定义可忽略)
<变量类型说明语句> // reg YYY
......
begin
<语句>
......
函数名 = ZZZ; // 函数名就相当于输出变量;
end
endfunction
————————————————
其中:
1)<返回值的类型或范围>:可以不定义,如果不定义则表示一位寄存器类型的数据;
2)函数名:该函数名即是该函数的返回值,是语句内部的一个与函数名同名的寄存器;
3)端口说明语句:定义函数时至少需要一个输入参量;
例如:
function[63:0] alu (input[63:0] a, b, input [7:0] opcode);
//alu是函数名,该函数返回的是64bit的寄存器类型变量,输入时a和opcode
4)函数名==zzz;在函数的定义中必须有一条赋值语句给函数名具备相同名字的变量赋值;
2.function函数使用规则:
1)函数的调用:
通过将函数作为表达式的操作数来实现,例如:
assign word=control ? {getbyte(msbyte),getbyte(lsbyte)} : 0;
2)函数的定义不能包含任何的时间控制语句,即任何用#,@或wait来标识的语句;
3)函数不能启动任务,定义函数至少一个输入参量;
4)函数的定义中必须有一条赋值语句给函数中的一个内部变量赋以函数的值,该内部变量具有和函数名一样的名字。
3.function本身表述的时组合电路,但可以赋值给某个触发器。
4.function函数电路的复杂程度,需要考虑单周期内的电路延迟嘛?
(该问题是转其人文章)
https://blog.csdn.net/sinat_31206523/article/details/106505878