例如在这个主题 - How to NOT use while() loops in verilog (for synthesis)?中,Brian Carlton提到不要在Verilog中使用for和while循环,而应该使用always
循环。我想知道如果满足特定条件,有什么方法可以突破迭代。我想知道是否可以使用以下内容:
总是@(posedge clk或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
答案 0 :(得分:3)
无法突破<{1}}阻止。您声明存在始终的进程。无法动态创建或销毁硬件。你可以做的是围绕条件包装代码并围绕它分支。但是,如果您正在编写可综合代码,always
块必须始终遵循顺序或组合逻辑的编码规则。
BTW always
是SystemVerilog中的保留关键字,所以不要使用它。
- Updated-- 现在您已经添加了要转换为硬件的软件代码,这是一个不同的问题。在摆脱此循环之前,需要将循环划分为状态机的时钟周期。然后突破循环就会成为状态机的跳转。