always_ff、always_comb、always_latch和always的区别

问题描述 投票:0回答:1

我对这 4 个术语完全感到困惑:

always_ff
always_comb
always_latch
always
。如何以及为了什么目的可以使用它们?

system-verilog
1个回答
47
投票

always
是 Verilog 的主要过程类型,另一种是
initial
,它在模拟开始时运行一次。

always_ff @(posedge clk)

表示触发器 (ff),在时钟的每个上升沿触发(执行)该过程。这取代了
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 @
对应物,并且可能会改变一些模拟行为。

© www.soinside.com 2019 - 2024. All rights reserved.