微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于verilog HDL 中for循环的问题

关于verilog HDL 中for循环的问题

时间:10-02 整理:3721RD 点击:
我设计了一个程序来测试函数的功能,函数就是一个阶乘,代码如下:
module tryfunc(clk,n,result,reset);
output[31:0] result;
input[3:0]n;
inputreset,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,应该没有过界,
那为大侠可以告诉我应该如何改正?

关于verilog HDL 中for循环的问题
没有直接的好办法,verilog不支持for循环里的变量边界条件。
改一种写法吧:
试试用while ,应该可以。

关于verilog HDL 中for循环的问题
建议不要把verilog当作c来写,差别大了,呵呵
for 不要是变量,最好也不是reg,否则有时后你会遇见很麻烦的错误,

关于verilog HDL 中for循环的问题
我试过了while,但是抱错还是一样的啊,这种情况下该怎么处理?
请高手指点.

关于verilog HDL 中for循环的问题
谢谢了,看来我要用其他方法来改写这段程序了!

关于verilog HDL 中for循环的问题
temp = n ;
result = 1 ;
while ( temp > 1 ) begin
result = result * temp ;
temp = temp - 1 ;
end
试试

关于verilog HDL 中for循环的问题
我没用过for语句
不知道综合出来是什么样子的

关于verilog HDL 中for循环的问题
同意,毕竟是硬件设计。要想好生成的电路再写。
边界关乎你的硬件实现,对于这个设计也就是说需要多少乘法器来实现,所以这个数字一定要是确定值。

关于verilog HDL 中for循环的问题
小编的意思并不是要做硬件实现吧
俺感觉他只是用verilog写个程序而已
for 在综合的时候是可以的,特别是当你要调用n个相同的模块而彼此无关时。
而对于定边界的for语句在很多情况下都是可以综合的,只要逻辑关系正确就行。
一个典型的用for实现的硬件组合电路就是在一个向量里找“1”。

关于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

关键就在于i < 4中这个4是个常量。

关于verilog HDL 中for循环的问题
我想总不会用来做电路吧,应该只是用来测试才对,用modelsim来做仿真应该是没有问题的。

关于verilog HDL 中for循环的问题
其实for语句用于某些情况下的综合,效果还是蛮好的而且易读。毕竟现在的综合工具也在不断进步。

关于verilog HDL 中for循环的问题
清华出版社《Verilog HDL综合实用教程》讲得比较透彻

关于verilog HDL 中for循环的问题
强烈建议要用Verilog的思想来做设计。

关于verilog HDL 中for循环的问题
[这个贴子最后由hitlzh在 2004/09/21 12:35pm 第 1 次编辑]
这个我遇到过.不过,我用synopsys的design analyzer02.05版,for(i=0;i+number<=16;i=i+1)中有变量(number是输入信号)是可以综合出结果的.用97就不行,也许高版本的综合工具是支持变量的.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top