How does UVM Comparator works?

In reply to tfitz:

Thanks for the info.
Regarding the fifo, I’m not sure what’s happening in my comparator’s fifo because it only compares the last expected transaction to all the observed transactions.

Here’s what’s happening:

I passed for addresses:
'h2821
'h2822
'h2823
'h2824

When the observed transactions came, here’s the report:

lhs = 'h2824 : rhs = 'h2821
lhs = 'h2824 : rhs = 'h2822
lhs = 'h2824 : rhs = 'h2823
lhs = 'h2824 : rhs = 'h2824

Only the last one matches. The frist 3 are miscompares.

This is how I passed the expected:


num = 0;
repeat(4) begin
  exp_tr.addr = 15'h2821 + (num*1);
  exp_export.write(exp_tr);
  ++num;
end

exp_export is an analysis_export in the scoreboard.
I connect it with the before_export of the comparator:


// In build_phase of scoreboard, comp_cmd is the in_order_comparator
exp_export = comp_cmd.before_export;