首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System always_latch vs. always_ff

System always_latch vs. always_ff
EN

Stack Overflow用户
提问于 2015-07-01 15:25:47
回答 2查看 9.1K关注 0票数 2

我对语句always_ffalways_latch的用法感到困惑。前者将被用作:

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

而后者:

代码语言:javascript
运行
复制
always_latch
begin
    a <= b;
end

第一个被时钟的正边缘激活,再加上非阻塞分配,产生一个FF。

显然,always_latch被认为是一个锁存器,但是为什么要使用非阻塞分配呢?

使用带有阻塞分配的always_comb不是更好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-01 16:14:18

通过使用always_latch或always_ff,设计人员将分别推断锁存逻辑或顺序逻辑,但如果逻辑不正确,软件工具可以警告设计人员,无法正确推断预期的硬件逻辑。

例:

代码语言:javascript
运行
复制
always_ff @ (posedge clk or negedge rst) 
begin
  if (!rst)
    a <= '0;
end

对于上面的代码,设计人员只打算获得一个顺序逻辑,而不是一个锁存器,但是实际中会生成一个锁存器(任何静态工具都会生成一条警告消息,因为"Latch将被推断为逻辑“)

类似地,对于下面的代码,设计人员的目的是推断硬件锁存,这样工具就会(更好地理解您的逻辑)而不会报告它。

代码语言:javascript
运行
复制
    always_latch
    begin
      if (rst)
        a <= b;
    end

锁存器是一种顺序逻辑,它工作在时钟的水平上,而不是时钟的边缘。

通常,最佳实践是对顺序逻辑使用非阻塞分配,对组合逻辑使用阻塞分配,这将在非阻塞分配在Verilog合成,编码样式,杀死! 5.0Verilog编码指南中详细解释。

准则2:在建模锁存时,使用非阻塞分配。

票数 5
EN

Stack Overflow用户

发布于 2015-07-01 15:58:21

源自IEEEST1800-2012,"9.2.2.3锁存逻辑always_latch过程“一节:

always_latch构造与always_comb构造相同,只是如果always_latch构造中的行为不表示锁存逻辑,则软件工具应该执行额外的检查和警告,而在always_comb构造中,如果行为不表示组合逻辑,则工具应该进行检查和警告。

Std中的代码示例显示了使用非阻塞分配的always_latch。

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

https://stackoverflow.com/questions/31165545

复制
相关文章

相似问题

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