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.
if (adapter.provides_responses) begin
// TODO: need to test for right trans type, if not put back in q
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 :