关于verilog HDL 中for循环的问题
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就不行,也许高版本的综合工具是支持变量的.