在时序逻辑中,譬如x1<=x0;那么x1的值一般是在x0的上一个周期的值。时钟在x0有效后才会对其采样。但是如果x0和时钟的采样沿同时有效,那么情况可能就有些不一样了。
一般来讲同时有效分两种情况,第一种经过前级寄存器采样后的数据可能会和采样沿同时有效,但是这种并不是零延时,在仿真器看来,这样的数据在时隙上是比采样沿晚的。第二种,是真正的零延时,譬如时钟去采样自己,或者去采样经过pll,bufg或者组合逻辑等后相位为差为0的时钟信号。
第一种情况的仿真结果会确实如我们期望的,x1的值在下一个周期等于当前x0
的值。第二种情况就不一样了,x1的值会和x0的值同步(在仿真器的时隙上看x1比x0晚)。
举个例子
always @(posedge x0 or negedge rst_n) begin
if(~rst_n) begin
x1 <= 1’b0 ;
x2 <= 1’b0;
end
else begin
x1 <= x0 ;
x2 <= x1;
end
end
在rst_n解除后,从波形上看x1和x0是一样的,但是x2比x1晚一个周期。
VCS仿真器对零延时的行为
最新推荐文章于 2024-05-08 09:14:55 发布