function函数的使用
规则:
- 函数必须至少含有一个输入变量,不能有任何输出或输入/输出双向变量。
- 函数不能包含时钟控制语句(如延迟#、事件控制@或者等待wait)。
- 函数是通过对函数名赋值的途径返回其值的,就好比是一个寄存器。
- 函数不能启动任务。
- 函数不能被禁用。
注意:
- 函数的输入变量不能像模块的端口那样列在函数名后的括弧里;在声明输入时把这些输入端列出即可。
- 如果函数包含一条以上的语句,这些语句必须包含在begin-end或fork-join块中。
可综合性问题:
函数每一次调用都被综合为一个独立的组合逻辑电路块。
module tryfunct(clk,n,result,reset);output [31 : 0] result;input [3 : 0] n;input reset,clk;reg [31 : 0] result;always@(posedge clk)
beginif(!reset)result <= 0;elsebeginresult <= n*factorial(n)/((n*2)+1);end //verilog在整数除法运算结果中不考虑余数
endfunction [31 : 0] factorial;//函数定义,返回的是一个32位的数input [3:0] operand;//输入只有一个4位的操作数reg [3:0] index;//函数内部计数用中间变量beginfactorial = operand ? 1 : 0;//先定义操作数为零时函数的输出为零,不为零时为1for(index = 2;index <= operand ; index = index +1)factorial = index * factorial; //表示阶乘的算术迭代运算end
endfunctionendmodule
欢迎关注我,关于FPGA的问题欢迎留言讨论!