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

TLM used to connect component, and transfer item between them;
config_db used to config some un-changed parameter;
uvm_event do sync can also transfer something;
the same with mailbox in sv.

what is the different between them, in which scenario use which method?

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.

In reply to dave_59:

Thanks,dave.
is it possible to use mailbox to instead of TLM to transfer between component?
even though we now it is not recommended to do this.

In reply to designer007:

You can use anything in SystemVerilog that you want. There is nothing in the UVM that stops you.