我对这 4 个术语完全感到困惑:
always_ff
、always_comb
、always_latch
和 always
。如何以及为了什么目的可以使用它们?
always
是 Verilog 的主要过程类型,另一种是 initial
,它在模拟开始时运行一次。
always_ff @(posedge clk)
:always @(posedge clk)
.
always_ff @(posedge clk) begin
a <= b;
end
always_latch
:用于表示闩锁。
用法是:
always_latch begin
if (enable) begin
a_latch <= something;
end
//No else clause so a_latch's value
//is not always defined, so it holds its value
end
这取代了:
always @* begin
if (enable) begin
a_latch = something;
end
//No else clause so a_latch's value
//is not always defined, so it holds its value
end
always_comb
:always @*
。现在我们可以在需要和不需要锁存器之间区分我们的设计意图。
SystemVerilog 名称
always_ff
、always_latch
和 always_comb
对触发时间有更严格的标准,这意味着 RTL 到门级(综合后)不匹配的机会减少了。这确实意味着它们不是 100% 等同于它们的 always @
对应物,并且可能会改变一些模拟行为。