【发布时间】:2018-01-22 05:32:05
【问题描述】:
我试图连续减去一个特定的数字以获得该数字的最后一位(不除法)。例如当 q=54 时,我们在循环之后得到 q=4。 q=205 也是如此,输出为 q=5。
if(q>10)
while(q>10)
begin
q=q-10;
end
迭代应该在逻辑上收敛。但是,我收到一个错误: “[Synth 8-3380] 循环条件在 2000 次迭代后不收敛”
我查看了帖子 - Use of For loop in always block。它说循环中的迭代次数必须是固定的。
然后我尝试用固定迭代实现这个循环,如下所示(只是为了检查这是否至少合成):
if(q>10)
while(loopco<9)
begin
q=q-10;
loopco=loopco-1;
end
但是上面的也行不通。得到相同的错误“[Synth 8-3380] 循环条件在 2000 次迭代后不收敛”。从逻辑上讲,它应该是 10 次迭代,因为我声明了 loopco=8 的值。
任何关于如何在verilog中实现上述功能的建议都会有所帮助。
【问题讨论】:
-
如果 loopco 在您递减时开始低于 9,您的第二个条件肯定会永远持续下去。... Sill 看着您的其他代码。 q 在哪里设置?这可能会干扰您的循环。毕竟 Verilog 是一种并行语言。只是片刻,这仅在合成中失败?不,那行不通!
-
@oldfart 感谢您的帮助。是的,我尝试了一些解决方法,但没有奏效。你是对的。