What is difference of uvm_event / mailbox(sv)/config_db/tlm when to transfer someting?

In reply to designer007:

UVM is a collaboration of works from many different environemnts and has a lot of overlapping capabilities.

TLM came strait out of SystemC and the last letter M is for Modeling. It provides very formal semantic for communucation between components. It’s very useful when some of those components need to change because of different level of abstraction for different simulations, and of course if you want to leverage SystemC models, makes it much easier to integrate.

uvm_config_db is for configuration. That usually implies writing to it once at the beginning of simulation and reading it later in one or more places. It should not be used for run-time communication. Its string based lookup can incur a lot of overhead.

The other synchronization are good for communication between processes within a component, and for simpler communication between components.