RAL: set_check_on_read(1) does not work with frontdoor access and passive prediction?


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);
      UVM_FRONTDOOR: begin
         if (system_map.get_auto_predict()) begin
            uvm_status_e status;
            if (rw.local_map.get_check_on_read() &&
                rw.status != UVM_NOT_OK) begin
               void'(do_check(exp, rw.value[0], system_map));