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变为AA=#5 A代码>
wire B;
assign B= #5 A;
导线的使用在6.7净声明一节中介绍
从@new2androids更新语法A=#5b寄存器的代码>,与导线的代码不同。每5个时间单位检查一次B,并立即为A赋值。这就是为什么它适用于测试台时钟生成
至于模拟器如何反应,可能有一些其他人可以评论的标准调度实践,但在一定程度上可能取决于您使用的模拟器
@new2android提供了从中读取的以下信息
#5a=B宽度小于5的代码>脉冲被模拟器忽略
A=#5b代码>输入每5个时间单位检查一次,并立即赋值
注释
延迟的所有用途仅用于模拟,不可合成
当使用非阻塞延迟变量时,问题和答案没有涵盖差异(B如果clk不是时钟,它是一些随机信号,你能告诉我模拟器是如何反应的吗?我想一个比另一个有更多的事件,但我不确定。对不起,我只是把模拟器作为一个工具,不涉及它所面临的具体调度问题。从表面上看,这两种类型似乎都在做同样的事情,所以我希望它们对于模拟器也是一样的。你的答案还有一些补充,#5a=B;//宽度小于5的脉冲被模拟器忽略a=#5b;//每5个时间单位检查一次输入,并立即分配值这是我从链接中得出的结果(幻灯片16)