UVM monitor error

In reply to SV26:

The variables driver_cb.addr and driver_cb.wr is illegally driven by a
blocking assignment.

A simple solution is to change only the code displayed in my previous post to look like this:

     vif.driver_cb.wr <= req.wr;
     vif.driver_cb.addr <= req.addr;
     @ (vif.driver_cb)
     req.rdata = vif.driver_cb.rdata;

It is not a good practice to use blocking and nonblocking assignment in the same task but it solves your problem.