【发布时间】:2021-04-28 14:11:51
【问题描述】:
我在我的测试台中看到奇怪的行为,其中非阻塞分配充当连续分配,而不是输出延迟一个周期的 RHS。
我的测试台通过bind cache cov cov_top 将一个模块“cov”绑定到 cpu.cache 的 DUT,并且在“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
【问题讨论】:
-
是的,它与 cache.cntrl 实例中的 clk 相同
-
您编辑的问题表明它不是同一个时钟,
标签: verilog system-verilog questasim