我在我的测试台中看到奇怪的行为,其中非阻塞分配充当连续分配,而不是输出延迟一个周期的 RHS。
我的测试台通过 将模块“cov”绑定到 cpu.cache 的 DUT bind cache cov cov_top
,并且在“cov”模块中我有这个非阻塞分配:
module cov
import cachePkg::*;
(
input logic clk,
input logic rst
);
clocking cclk @(posedge clk iff !rst); endclocking
logic [1:0] LinkState_d1, LinkState_d2;
always @(cclk) begin
LinkState_d1 <= cache.cntrl.LinkState;
LinkState_d2 <= LinkState_d1;
end
endmodule
DUT 中的 cache.cntrl.LinkState 是非阻塞分配的输出,所以我希望 LinkState_d1 只是简单地跟随来自 DUT 的 LinkState,只是延迟了一个周期。但是在波形查看器中,我看到 LinkState_d1 与 LinkState 完全匹配,就好像它是连续分配一样,这是我在波形中看到的时钟图:
__ __ __
clk __| |__| |__| |__
________
LinkState _____|
________
LinkState_d1 _____|
__
LinkState_d2 ___________|
当我们在连续分配的 RHS 中使用分层引用时,会发生什么不同的事情吗?或者这只是一个模拟器错误?我正在使用 questasim 2019.4