集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1906|回复: 3

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

[复制链接]
芙蓉帐暖 发表于 2010-8-6 16:37:55 | 显示全部楼层 |阅读模式
function[31:0] factorial;        
input[3:0] opa;               
reg[3:0] 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[31:0] factorial;        
  input[3:0] opa;               
  reg[3:0] 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[3:0] ope;
output[31:0] fac;
reg[31:0] fac;
always @(ope)
begin
fac=factorial(ope);
end

endmodule
 楼主| 芙蓉帐暖 发表于 2010-8-12 11:09:23 | 显示全部楼层
嗯,我也认为是循环次数有问题,不能是变量!

大家再想想能不能设计得简单点,像上面这个程序好像有点大动干戈了,不过实在想不出来也只能是那样了!!
amyxxf 发表于 2010-8-18 23:42:18 | 显示全部楼层
用组合来做这个太费逻辑了,看看时序上有没有问题,编译的时候出现什么问题?
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-25 13:26 , Processed in 0.060893 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表