例如在这个线程-如何不使用while()循环在verilog(合成)?,布莱恩·卡尔顿提到,而不是使用for和while循环在Verilog,应该使用一个always
循环。我想知道,如果满足特定条件,有什么方法可以中断迭代。我想知道是否可以使用以下内容:
always @ (posedge CLK or var == 3) '
其中var
是模块或块中的变量?
例如,我如何将下面的代码转换成可以由XST合成的东西。
//******************************************************
//Check whether randp is prime or not
//******************************************************
for(i = 0; i < 100; i = i+1)
begin
assign PRIME_CHECK = randp;
assign sqroot = PRIME_CHECKED;
for(i = 0 ; i <= sqroot ; i=i+1)
begin
if((sqroot%i) == 0)
begin
break;
end
end
break;
randp = RANDP;
end
无法将从always
块中分离出来。您正在声明存在一个总是在那里的进程。硬件不能动态创建或销毁。您所能做的就是将代码包装在一个条件周围,并围绕它进行分支。但是,如果您正在编写可合成的代码,则always
块必须始终遵循顺序或组合逻辑的编码规则。
BTW var
是SystemVerilog中的保留关键字,所以不要使用它。
——更新现在您已经添加了想要转换为硬件的软件代码,这是一个不同的问题。在跳出此循环之前,需要将循环划分为状态机的时钟周期。然后,跳出循环就变成了状态机中的跳转。