可以使用哪些结构来突破 Verilog 中的"always"块?



例如在这个线程-如何不使用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中的保留关键字,所以不要使用它。

——更新现在您已经添加了想要转换为硬件的软件代码,这是一个不同的问题。在跳出此循环之前,需要将循环划分为状态机的时钟周期。然后,跳出循环就变成了状态机中的跳转。

最新更新