菜鸟问一个verilog中function模块的问题。
时间:10-02
整理:3721RD
点击:
学习Verilog过程中碰见一个阶乘函数定义和调用的模块。后面测试部分怎么都看不懂测试了个啥。
关键句:result = n *factorial(n)/((n*2)+1); //为什么结果会用这样的表达输出,那么最先两个结果分别是4/5和18/7?
完整模块如下:
module tryfact;
//函数的定义————————
function[31:0]factorial;
input[3:0]operand;
reg[3:0]index;
begin
factorial = 1; //0的阶乘为1,1的阶乘也为1
for(index=2; index<=operand; index=index+1)
factorial = index*factorial;
end
endfunction
//函数的测试————————
reg[31:0]result;
reg[3:0]n;
initial
begin
result=1;
for(n=2; n<=9; n=n+1)
begin
$display("Partial result n= %d result= %d", n, result);
result = n * factorial(n)/((n*2)+1);
end
$display("Finalresult= %d", result);
end
endmodule //模块结束
关键句:result = n *factorial(n)/((n*2)+1); //为什么结果会用这样的表达输出,那么最先两个结果分别是4/5和18/7?
完整模块如下:
module tryfact;
//函数的定义————————
function[31:0]factorial;
input[3:0]operand;
reg[3:0]index;
begin
factorial = 1; //0的阶乘为1,1的阶乘也为1
for(index=2; index<=operand; index=index+1)
factorial = index*factorial;
end
endfunction
//函数的测试————————
reg[31:0]result;
reg[3:0]n;
initial
begin
result=1;
for(n=2; n<=9; n=n+1)
begin
$display("Partial result n= %d result= %d", n, result);
result = n * factorial(n)/((n*2)+1);
end
$display("Finalresult= %d", result);
end
endmodule //模块结束
确定后面的语句是用来验证的吗?
后面是计算result的一个表达式,如果用这个式子来检验结果太没必要了
