在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6202|回复: 15

关于verilog HDL 中for循环的问题

[复制链接]
发表于 2003-11-19 10:01:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我设计了一个程序来测试函数的功能,函数就是一个阶乘,代码如下:
module tryfunc(clk,n,result,reset);
output[31:0] result;
input[3:0]   n;
input        reset,clk;
reg[31:0]    result;
always @(posedge clk)
  begin
    if(!reset)
  result<=0;
else
  begin
    result<=factorial(n);
  end
  end

function[31:0] factorial;
input[3:0]      n;
reg[3:0]        index;
   
  begin   
    factorial = 1;
for(index = 1;index <= n;index = index+1)
  
   factorial = index * factorial;  
  

  end
endfunction
endmodule
但是编译的时候抱撮,错误信息如下:
@E: tryfunc.v(28): loop iteration limit 100 exceeded - add '// synthesis
loop_limit 200' before the loop construct @E:"d:\verilog
program\tryfunc\tryfunc.v":28:15:28:25
1 Verilog Compiler error
将FOR循环中的for(index = 1;index <= n;index = index+1)改为:
for(index = 1;index <= 15;index = index+1)则便宜可以通过,
但是n定义为reg[3:0] n,应该没有过界,
那为大侠可以告诉我应该如何改正?
发表于 2003-11-19 10:23:53 | 显示全部楼层

关于verilog HDL 中for循环的问题

没有直接的好办法,verilog不支持for循环里的变量边界条件。
改一种写法吧:
试试用while ,应该可以。
  
发表于 2003-11-19 11:44:34 | 显示全部楼层

关于verilog HDL 中for循环的问题

建议不要把verilog当作c来写,差别大了,呵呵
for 不要是变量,最好也不是reg,否则有时后你会遇见很麻烦的错误,
 楼主| 发表于 2003-11-19 11:44:56 | 显示全部楼层

关于verilog HDL 中for循环的问题

我试过了while,但是抱错还是一样的啊,这种情况下该怎么处理?
请高手指点.
 楼主| 发表于 2003-11-19 11:46:47 | 显示全部楼层

关于verilog HDL 中for循环的问题

谢谢了,看来我要用其他方法来改写这段程序了!
发表于 2003-11-19 11:58:33 | 显示全部楼层

关于verilog HDL 中for循环的问题

temp = n ;
result = 1 ;
while ( temp > 1 ) begin
      result = result * temp ;
      temp = temp - 1 ;
end
试试
发表于 2003-11-19 12:05:03 | 显示全部楼层

关于verilog HDL 中for循环的问题

我没用过for语句
不知道综合出来是什么样子的
发表于 2003-11-19 12:11:32 | 显示全部楼层

关于verilog HDL 中for循环的问题



下面引用由alphame2003/11/19 11:44am 发表的内容:
建议不要把verilog当作c来写,差别大了,呵呵
for 不要是变量,最好也不是reg,否则有时后你会遇见很麻烦的错误,

同意,毕竟是硬件设计。要想好生成的电路再写。
边界关乎你的硬件实现,对于这个设计也就是说需要多少乘法器来实现,所以这个数字一定要是确定值。
发表于 2003-11-19 13:53:24 | 显示全部楼层

关于verilog HDL 中for循环的问题

楼主的意思并不是要做硬件实现吧
俺感觉他只是用verilog写个程序而已
for 在综合的时候是可以的,特别是当你要调用n个相同的模块而彼此无关时。
而对于定边界的for语句在很多情况下都是可以综合的,只要逻辑关系正确就行。
一个典型的用for实现的硬件组合电路就是在一个向量里找“1”。
发表于 2003-11-19 14:11:33 | 显示全部楼层

关于verilog HDL 中for循环的问题

给老扁的说明加一个例子,这个例子是实际产品的一段。
function [1:0] decode_func;
input [3:0] in;
integer i;
begin
    decode_func = 2'b00;
    for(i = 0;i < 4;i = i + 1) begin
        if (in) begin
            decode_func = decode_func + 1'b1;
        end
    end
end
endfunction
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-4 01:23 , Processed in 0.050840 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表