gpt4 book ai didi

system-verilog - System Verilog always_latch 与 always_ff

转载 作者:行者123 更新时间:2023-12-05 09:21:37 25 4
gpt4 key购买 nike

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

always_ff @ (posedge clk)
begin
a <= b;
end

而后者:

always_latch
begin
a <= b;
end

第一个仅由时钟的上升沿激活,并与非阻塞分配相结合,产生一个 FF。

always_latch 显然被认为代表一个锁存器,但为什么要使用非阻塞赋值?

使用带有阻塞赋值的 always_comb 不是更好吗?

最佳答案

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

例如:

always_ff @ (posedge clk or negedge rst) 
begin
if (!rst)
a <= '0;
end

对于上面的代码,设计者只打算得到一个时序逻辑而不是一个锁存器,但实际上会生成一个锁存器(任何静态工具都会生成一条警告消息,如“Latch will be inferred for the logic”)

与下面的代码类似,设计者的意图是推断硬件锁存器,以便工具(更好地理解您的逻辑)并且不会报告它。

    always_latch
begin
if (rst)
a <= b;
end

锁存器是一种时序逻辑,它在时钟电平而不是时钟边沿上工作。

一般来说,最佳实践是对时序逻辑使用非阻塞赋值,对组合逻辑使用阻塞赋值,这在第 5.0 节中有详细解释Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kill!的Verilog编码指南

Guideline #2: When modeling latches, use nonblocking assignments.

关于system-verilog - System Verilog always_latch 与 always_ff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31165545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com