芙蓉帐暖 发表于 2010-8-6 16:37:55

帮我看一下这个函数!出了什么问题~

function factorial;      
input opa;               
reg i;
begin
factorial = opa ? 1 : 0;
for(i= 2; i <= opa; i = i+1)
factorial = i* factorial;      
end
endfunction
这是一个表示阶乘的函数~不知道为什么编译时通不过~应该是for语句出问题,还不清楚~愿赐教~

zhouliang 发表于 2010-8-11 14:44:45

没有办法,循环次数必须是整形变量或常量,只能写成:
module fun(ope,fac);
function factorial;      
input opa;               
reg i;
begin
factorial = opa ? 1 : 0;
i=2;
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end   
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
if(i<=opa)
begin
factorial = i* factorial;
i=i+1;
end
end
endfunction

input ope;
output fac;
reg fac;
always @(ope)
begin
fac=factorial(ope);
end

endmodule

芙蓉帐暖 发表于 2010-8-12 11:09:23

嗯,我也认为是循环次数有问题,不能是变量!

大家再想想能不能设计得简单点,像上面这个程序好像有点大动干戈了,不过实在想不出来也只能是那样了!!

amyxxf 发表于 2010-8-18 23:42:18

用组合来做这个太费逻辑了,看看时序上有没有问题,编译的时候出现什么问题?
页: [1]
查看完整版本: 帮我看一下这个函数!出了什么问题~