我正在编写一个用于计算十进制数字位数的Verilog代码。在下面的代码中,我初始化了c的值等于a。 我能够正确地获得模拟结果,但无法进行同步,错误是由于&c; a ='。我该如何摆脱错误?是否还有其他逻辑来计算位数?
Error: [Synth 8-3380] loop condition does not converge after 2000 iterations
代码: -
module numdigits(a,b);
parameter n=100;
input [0:n-1] a;
output reg [0:n-1]b; //THIS MODULE COUNTS THE NUMBER OF DIGITS IN DECIMAL FORM
reg [0:n-1] d,c;
always @(*)
begin
d=0;
for(c=a;c>0;c=c/10)
begin
d=d+1;
end
b=d;
end
endmodule
答案 0 :(得分:0)
为了使for
循环可以合成,它必须是 static :也就是说,循环的最大迭代次数必须是固定的。考虑到a
具有固定的位数,可能看起来循环的迭代次数最多,但请记住,你的合成器不会模拟你的代码,所以它无法分辨。
您需要重构代码;你需要以这样的方式编写它,以便修复循环迭代的最大数量。换句话说,循环的迭代次数必须是固定的,但如果您愿意,可以提前跳出(使用disable
语句)。