时钟生成的差异

时间:2013-04-02 11:26:05

标签: verilog clock

以下代码有什么区别?

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


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

我知道Inertial和Transport Delays之间的区别,我知道在两种情况下都会生成时钟(两者之间存在一些相位差异),但我想知道模拟器如何对以下代码做出反应。是的相同或不同?就像在计算值时考虑了多少事件一样?

1 个答案:

答案 0 :(得分:1)

两者从使用点的区别:

#5 clk = ~clk;表示等待5个步骤,然后执行clk = ~clk;

对于导线B = #5 A;表示B从5个步骤前分配给A. A导致B超过5个步骤。如果B更改为A A = #5 A;

wire B;
assign B= #5 A;

IEEE 1800-2012部分 6.7网络声明

涵盖电汇的使用情况

来自@ new2androids更新语法A = #5 B;,寄存器与电线不同。每5个时间单位检查B,并立即为A分配值。这就是它适用于测试平台时钟生成的原因。

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

@ new2android提供从1996 : Understanding Verilog Blocking and Non--blocking Assignments

读取的以下信息
  1. #5 A = B;模拟器忽略宽度小于5的脉冲
  2. A = #5 B;每5个时间单位检查一次输入并立即分配值
  3. 备注

    1. 延迟的所有使用仅用于模拟,不可综合。
    2. 问题&amp;在使用延迟的非阻塞变体(B <= #5 A;#5 B <= A;)时,答案不会涵盖差异。