是否有可能打破Verilog中的始终阻止?我有一个很大的块,与多个嵌套的if / else语句相比,带有中断的可读性更高。
所以我想要这样的东西:
always_ff @(posedge clk) begin
...
if (x) begin
...
break;
end
...
end
我找到了一个解决方案,但是它看起来像一个hack:
always_ff @(posedge clk) begin
repeat(1) begin
...
if (x) begin
...
break;
end
...
end
end
答案 0 :(得分:1)
您可以将代码放入函数中,并使用return
代替break
always_ff @(posedge clk) func1;
function void func1;
if (x) begin
...
return;
end
...
endfunction
这是可合成的,并且需要的击键次数几乎相同。
答案 1 :(得分:0)
无法通过可合成的代码来完成所需的操作。同样,具有较大的ff块通常在任何情况下都意味着不良的Verilog编程风格。您应该尝试将大的Always块拆分为多个单独的较小的alway _...块。
可综合的Verilog代码的目的是描述您要实现的硬件的行为。在硬件中没有“中断”。每个always_ff块都描述一个触发器,可能带有一些附加逻辑。但一般来说,它应该像这样:
always_ff @(posedge clk)
out <= in;
如果您在块中添加更多内容,则必须有很好的理由。大型ff街区会让人们皱眉。
因此,再次,您应该将always_ff分为一组触发器和组合逻辑:always_ff和always_comb。这样,您将使它更具可读性,并避免了大型ff块可能导致的多个问题。