Stumbled into a data corruption during a register read.
bus2reg function is called twice during the transaction. This behaviour is correct as the
uvm_sequence_items of both the monitor and the driver (REQ) are broadcasted. But the driver should provide the final data for the adapter to translate.
register read()’s active path:
reg.read() => sequencer => register adapter => driver => adapter => sequencer => reg.read()
Instead of duplicating the monitor’s logic to decode the protocol, I recommend to use an UVM configuration database to propagate the decoded data from the monitor to the driver.