首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >always_ff、always_comb、always_latch和always之间的区别

always_ff、always_comb、always_latch和always之间的区别
EN

Stack Overflow用户
提问于 2014-04-16 14:30:35
回答 1查看 81.7K关注 0票数 32

我完全搞不懂这四个术语:always_ffalways_combalways_latchalways。这些可以如何使用以及用于什么目的?

EN

回答 1

Stack Overflow用户

发布于 2014-04-16 15:37:09

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

always_ff @(posedge clk)

表示触发器(ff),则在时钟的每个正边沿触发(执行)该过程。这将取代always @(posedge clk)。这是唯一应该使用非阻塞(<=)赋值的类型,因为这模仿了触发器传输数据的方式。

代码语言:javascript
运行
复制
always_ff @(posedge clk) begin
  a <= b;
end

always_latch:用于表示闩锁。

用法为:

代码语言:javascript
运行
复制
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

这将取代:

代码语言:javascript
运行
复制
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到门级(合成后)不匹配的机会减少了。这并不意味着它们不是100%等同于always @对应物,并且可能会改变一些模拟行为。

票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23101717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档