我对这4个术语完全感到困惑:always_ffalways_combalways_latchalways。这些如何使用以及用于什么目的?

最佳答案

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_ffalways_latchalways_comb在触发时具有更严格的条件,这意味着RTL到门级(合成后)不匹配的机会减少了。这确实意味着并非与always @计数器部分100%等效,并且可能会更改某些模拟行为。

关于system-verilog - always_ff,always_comb,always_latch和Always之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23101717/

10-12 02:08