System verilog always\u ff、always\u梳、always\u闩锁和always之间的区别

System verilog always\u ff、always\u梳、always\u闩锁和always之间的区别,system-verilog,System Verilog,我完全混淆了这四个术语:始终_ff,始终_梳,始终_闩锁和始终。如何使用以及用于什么目的?始终是Verilog的主要处理类型,另一种是在模拟开始时运行一次的初始 始终(posedge clk): 表示触发器(ff),在时钟的每个正边缘触发(执行)进程。这将取代始终@(posedge clk)。这是唯一一种非阻塞的类型(总是*不等同于总是*,您不应该再使用总是*。最大的原因是当逻辑中涉及常量或参数时,总是*不起作用。它们不会生成事件来触发块的执行。总是*arantees在时间0时执行。感谢@dav

我完全混淆了这四个术语:
始终_ff
始终_梳
始终_闩锁
始终
。如何使用以及用于什么目的?

始终
是Verilog的主要处理类型,另一种是在模拟开始时运行一次的
初始

始终(posedge clk)


表示触发器(ff),在时钟的每个正边缘触发(执行)进程。这将取代
始终@(posedge clk)
。这是唯一一种非阻塞的类型(
总是*
不等同于
总是*
,您不应该再使用
总是*
。最大的原因是当逻辑中涉及常量或参数时,
总是*
不起作用。它们不会生成事件来触发块的执行。
总是*
arantees在时间0时执行。感谢@dave_59,我试图与我的上一段内容完全相同。它们是SystemVerilog,IPs通常设计为与Verilog向后兼容,因此将继续使用
always@*
。考虑到有多少初学者发布带有手动敏感性列表的问题,我认为我们还有一段路要走因此,
总是梳
成为标准。是的,想想人们从使用注释pragmas(如
/synthesis translate on
转换为使用`
ifdef synthesis
)需要多长时间。自从把ifdef添加到Verilog中以来,已经超过25年了。@Morgan:IEEE标准使用的
总是梳
,没有阻塞ssignments。您在回复中使用阻塞分配的具体原因是什么?@Ari我将
始终锁定
作为
始终*
的扩展
always_ff @(posedge clk) begin
  a <= b;
end
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