Send a value from driver to monitor without using TLMs

In reply to Curious_cat:

Use of static variables is generally discouraged is software programming. It becomes difficult to scale once you find you need multiple instances of the same environment. As you’ve already discovered, synchronization of reading and writing is also problematic. And reaching into another class created dependancies that don’t scale as you move from unit to block to SoC testing. (i.e. your driver might get removed because another part of the RTL was added).

The class uvm_event#() is probably the simplest mechanism for sending data from one class to another. But if you need any kind of buffering/queuing or other handshaking, the TLM is a better choice. If no synchronization is required, or already handled by the phases, then uvm_config_db is best for that.