我在为这种情况设计断言(SVA)时遇到了麻烦。当 mux sel 被置位时,data_in 预计会稳定 2 个时钟;mux sel 被断言之前的时钟,以及 mux sel 被断言时的当前时钟。
现在 data_in 是一个宽向量/总线信号,因此总线的某些位在功能模式期间是 Z 和 X(这是预期的),而这些位可能在非功能模式期间携带值。
这意味着,设计 SVA 的方法是在 mux sel 被断言时逐位比较数据总线。
这是我的方法,但 SVA 失败了,不知道为什么。
generate
for( genvar i=1 ; i<BUS_WIDTH ; i++ ) begin
always @ (posedge clk) begin
if(!$isunknown(data_in[i]) && reset) begin
data_in_temp_prev[i] <= data_in[i];
if (mux_sel==1 && reset==1 && i>0) begin
SVA_TEST: assert property (data_in[i] == data_in_temp_prev[i-1]) else `uvm_error("TRIAL_SVA",$sformatf("datain expected to be stable for 2 clks prior to mux sel"));
end //if
end //if isunknown
else begin
din0_temp_prev[i] <= 0;
end
end //always
end // for genvar
endgenerate
有关如何设计此 SVA 的任何建议?
谢谢。