在Verilog有可能打破封锁吗?我有一个很大的块,与多个嵌套的if/ with语句相比,它具有更好的可读性。
所以我想要这样的东西:
always_ff @(posedge clk) begin
...
if (x) begin
...
break;
end
...
end我找到了一个解决方案,但看起来像是黑客:
always_ff @(posedge clk) begin
repeat(1) begin
...
if (x) begin
...
break;
end
...
end
end发布于 2018-10-21 01:13:25
您可以将代码放入函数中,使用return而不是break。
always_ff @(posedge clk) func1;
function void func1;
if (x) begin
...
return;
end
...
endfunction这是可合成的,并采取几乎相同数量的击键。
发布于 2018-10-20 23:02:10
在一段可合成的代码中,没有办法做你想做的事情。而且,在任何情况下,拥有一个大的ff块通常意味着不好的verilog编程风格。您应该尝试将大的始终块分割成多个单独的较小的alway_.块。
可综合verilog代码的目的是描述要实现的硬件的行为。在硬件中没有“中断”。每个always_ff块都描述一个失败,可能带有一些额外的逻辑。但总的来说,应该是这样的:
always_ff @(posedge clk)
out <= in;如果你增加了更多的东西,你必须有一个非常好的理由这样做。大的滑块会让人皱眉。
因此,您应该再次将always_ff拆分为一组失败和组合逻辑: always_ff和always_comb。这样,您将使它更具可读性,并避免可能由大型ff块引起的多个问题。
https://stackoverflow.com/questions/52908221
复制相似问题