- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对语句 always_ff
和 always_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/
我对语句 always_ff 和 always_latch 的用法感到困惑。前者将用作: always_ff @ (posedge clk) begin a <= b; end 而后者: al
我完全混淆了这 4 个术语:always_ff , always_comb , always_latch和 always .如何以及出于什么目的使用这些? 最佳答案 always 是来自 Verilo
我是一名优秀的程序员,十分优秀!