Утверждение не выполняется, несмотря на истинность равенства

Я получаю причудливую ошибку утверждения. Это не удается, хотя равенство верно, как показано в сообщениях об ошибках. Я делаю простую сумму 4 входов модуля u2 и подтверждаю, что сумма равна сумме двух выходов.

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

Я получаю эти сообщения об ошибках:

** Warning: 0000049d result != 0000049d  cheat
Time: 3 ns Started: 3 ns  Scope: tb_shift File: C::....../tb_shift.sv Line: 29<br>
** Warning: 00000163 result != 00000163  cheat
Time: 5 ns Started: 5 ns  Scope: tb_shift File: C::....../tb_shift.sv Line: 29<br>
** Warning: 000000a4 result != 000000a4  cheat
Time: 7 ns Started: 7 ns  Scope: tb_shift File: C::....../tb_shift.sv Line: 29<br>
** Warning: 000006b3 result != 000006b3  cheat
Time: 9 ns Started: 9 ns  Scope: tb_shift File: C:....../tb_shift.sv Line: 29<br>
** Warning: 00000580 result != 00000580  cheat
Time: 11 ns Started: 11 ns  Scope: tb_shift File: C:/Users/John/Dropbox/University/3rd_year/ELEC3017/tb_shift.sv Line: 29

person StanOverflow    schedule 22.12.2013    source источник


Ответы (1)


Когда есть несоответствие между отображаемыми сообщениями и проверочным кодом, это часто является результатом состояния гонки. В этом случае сравниваемые сигналы изменялись одновременно с тактовой частотой дискретизации.

Одним из средств защиты является изменение точки выборки для утверждения. Например, изменить

@(posedge clk) 

to:

@(negedge clk) 
person toolic    schedule 03.05.2020