Verilog 尽管相等为真,断言仍然失败

Verilog 尽管相等为真,断言仍然失败,verilog,system-verilog,assertion,hdl,system-verilog-assertions,Verilog,System Verilog,Assertion,Hdl,System Verilog Assertions,我得到了一个奇怪的失败的断言。如错误消息所示,虽然相等为true,但它失败。我正在对u2模块的4个输入进行简单求和,并确认该和等于两个输出的和 property CSA_add; @(posedge clk) disable iff(reset) (u2.VS + u2.VC)&'hFFFF == (u2.VS_x + u2.VS_y + u2.VC_x + u2.VC_y)&'hFFFF; endproperty assert property (CSA_add)

我得到了一个奇怪的失败的断言。如错误消息所示,虽然相等为true,但它失败。我正在对
u2
模块的4个输入进行简单求和,并确认该和等于两个输出的和

property CSA_add;
    @(posedge clk) disable iff(reset) (u2.VS + u2.VC)&'hFFFF == (u2.VS_x + u2.VS_y + u2.VC_x + u2.VC_y)&'hFFFF;
endproperty 

assert property (CSA_add)
       error <= 1'b0; 
    else begin
       $warning("%x result != %x  cheat\n",(u2.VS_x + u2.VS_y + u2.VC_x + u2.VC_y)&'hFFFF
                                       ,(u2.VS + u2.VC)&'hFFFF );
       error <= 1'b1;
    end
property CSA\u add;
@(posedge clk)禁用iff(重置)(u2.VS+u2.VC)和'hFFFF==(u2.VS_x+u2.VS_uy+u2.VC_x+u2.VC_y)和'hFFFF;
端属性
断言属性(CSA\U添加)

错误当显示的消息和检查代码之间存在差异时,这通常是竞争条件的结果。在这种情况下,被比较的信号与采样时钟同时变化

一种补救方法是更改断言的采样点。例如,改变

@(posedge clk) 
致:

@(posedge clk) 
@(negedge clk)