Verilog 时钟产生的差异

Verilog 时钟产生的差异,verilog,clock,Verilog,Clock,以下代码之间有什么区别 initial begin clk = 0 ; forever begin #5 clk = ~clk; end end initial begin clk = 0 ; forever begin clk = #5 ~clk; end end 我知道惯性延迟和传输延迟之间的区别,我知道在这两种情况下都会产生时钟(两者之间有一些相位差),但我想知道模拟器对以下代码的反应。是相同还是不同?例如,计算值时考虑了多少个事件?从

以下代码之间有什么区别

initial begin
  clk = 0 ;
  forever begin
    #5  clk =   ~clk;
  end
end


initial begin
  clk = 0 ;
  forever begin
    clk = #5  ~clk;
  end
end

我知道惯性延迟和传输延迟之间的区别,我知道在这两种情况下都会产生时钟(两者之间有一些相位差),但我想知道模拟器对以下代码的反应。是相同还是不同?例如,计算值时考虑了多少个事件?

从使用点看,两者之间的差异:

#5时钟=~clk
表示等待5个时间步,然后执行
clk=~clk

对于
B=#5 A表示B从5个时间步前分配给A。A领先B 5个时间步。如果B变为A
A=#5 A

wire B;
assign B= #5 A;
导线的使用在6.7净声明一节中介绍

从@new2androids更新语法
A=#5b,与导线的代码不同。每5个时间单位检查一次B,并立即为A赋值。这就是为什么它适用于测试台时钟生成

至于模拟器如何反应,可能有一些其他人可以评论的标准调度实践,但在一定程度上可能取决于您使用的模拟器

@new2android提供了从中读取的以下信息

  • #5a=B脉冲被模拟器忽略
  • A=#5b输入每5个时间单位检查一次,并立即赋值
  • 注释

  • 延迟的所有用途仅用于模拟,不可合成

  • 当使用非阻塞延迟变量时,问题和答案没有涵盖差异(
    B如果clk不是时钟,它是一些随机信号,你能告诉我模拟器是如何反应的吗?我想一个比另一个有更多的事件,但我不确定。对不起,我只是把模拟器作为一个工具,不涉及它所面临的具体调度问题。从表面上看,这两种类型似乎都在做同样的事情,所以我希望它们对于模拟器也是一样的。你的答案还有一些补充,#5a=B;//宽度小于5的脉冲被模拟器忽略a=#5b;//每5个时间单位检查一次输入,并立即分配值这是我从链接中得出的结果(幻灯片16)