人们可以使用什么样的构造来突破"总是"在Verilog阻止?

时间:2016-06-26 15:04:26

标签: verilog fpga xilinx

例如在这个主题 - 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

1 个答案:

答案 0 :(得分:3)

无法突破<{1}}阻止。您声明存在始终的进程。无法动态创建或销毁硬件。你可以做的是围绕条件包装代码并围绕它分支。但是,如果您正在编写可综合代码,always块必须始终遵循顺序或组合逻辑的编码规则。

BTW always是SystemVerilog中的保留关键字,所以不要使用它。

- Updated-- 现在您已经添加了要转换为硬件的软件代码,这是一个不同的问题。在摆脱此循环之前,需要将循环划分为状态机的时钟周期。然后突破循环就会成为状态机的跳转。