I'm using .set_check_on_read(1) to make .read() compare the read value to the mirrored value. However, it seems that it only works for backdoor accesses as well as for frontdoor accesses with auto-prediction mode on. With passive prediction and frontdoor access it does not work. I would like to know whether it is a UVM bug or feature - what are the reasons for this behavior?
Here is the relevant part of uvm_reg class:
task uvm_reg::do_read(uvm_reg_item rw);
if (system_map.get_auto_predict()) begin
if (rw.local_map.get_check_on_read() &&
rw.status != UVM_NOT_OK) begin
void'(do_check(exp, rw.value, system_map));