As per above code you have connected monitor to predictor,
possible call for bus2reg
1. wait for end event from req or if provide response is 1 then wait for driven to put response.
bus_req.end_event.wait_on();
if (adapter.provides_responses) begin
uvm_sequence_item bus_rsp;
uvm_access_e op;
// TODO: need to test for right trans type, if not put back in q
rw.parent.get_base_response(bus_rsp);
adapter.bus2reg(bus_rsp,rw_access);
end
else begin
adapter.bus2reg(bus_req,rw_access);
end
2. When monitor see that register read, it also call bus2reg,
so you will see bus2reg get called twice if you have monitor connected to predictor.as you are using same adapter.
I suspect your read response transaction from monitor is not correct as you mentioned it is getting overriden by 0 2nd time.
Image from ClueLogic Post will give you clear picture :
