以下代码有什么区别?
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之间的区别,我知道在两种情况下都会生成时钟(两者之间存在一些相位差异),但我想知道模拟器如何对以下代码做出反应。是的相同或不同?就像在计算值时考虑了多少事件一样?
答案 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
读取的以下信息#5 A = B;
模拟器忽略宽度小于5的脉冲A = #5 B;
每5个时间单位检查一次输入并立即分配值备注强>
B <= #5 A;
,#5 B <= A;
)时,答案不会涵盖差异。