- What are the different phases in UVM ?
 - What is a virtual sequence and a virtual sequencer ?
 - What is the difference between `uvm_do and `uvm_send ?
 - What is the difference between uvm_transaction and uvm_sequence_item ?
 - What are the benefits of using UVM ?
 - Is it possible to have a user defined phase in UVM ?
 - What is the difference between RAL backdoor and frontdoor accesses ?
 - What is a phase objection ?
 - What is the difference between set_config_* and uvm_config_db ?
 - What are the different factory override types ?
 
What are the different phases in UVM ?
The main phases in UVM are :
- build_phase
 - connect_phase
 - end_of_elaboration_phase
 - start_of_simulation_phase
 - run_phase
 - extract_phase
 - check_phase
 - report_phase
 - final_phase
 
Read more in UVM Phases.
What is a virtual sequence and a virtual sequencer ?
A virtual sequence is a container to hold and execute multiple other smaller sequences. A virtual sequencer is a container to hold the handles to other sequencers in an environment so that each sequence in a virtual sequence can be executed on the appropriate sequencer. Read more in Virtual Sequence and Virtual Sequencer
What is the difference between `uvm_do and `uvm_send ?
`uvm_do macro will automatically create a new object, randomize it and send to the the sequencer. `uvm_send is used when the object is already created and randomized but needs to be executed on a sequencer. Read more in How to execute sequences via `uvm_do macros ? and Sequence action macros for pre-existing items
What is the difference between uvm_transaction and uvm_sequence_item ?
The uvm_transaction class is the root base class for UVM transactions and has a timing and recording interface as well. Use of this class as a base for user-defined transactions is deprecated, and instead its sub-class uvm_sequence_item should be used. The intended use of transaction API is to call accept_tr, begin_tr and end_tr during the course of sequence item execution in order to record the events to a vendor-specific transaction database. uvm_sequence_item is primarily used to define data objects and related methods.
What are the benefits of using UVM ?
Some of the major and immediate benefits are :
- Testbench prototyping becomes faster because of all the base classes for drivers, monitors, sequencers
 - There's a well defined reporting system which supports various levels of verbosities like LOW, DEBUG, etc
 - Supports register model creation and maintainence which simplifies the way DUT registers are accessed
 - Well structured plug and play style components like agents that can be plugged into any environment to support a particular protocol
 - Factory helps to override certain components without having to modify existing connections in the testbench
 - Configuration databases that allow components to share objects and data between each other
 - Make use of TLM features that enable different components that receive transactions to perform different operations on it.
 - Promotes re-usability, flexibility, uniformity and robustness to every testbench built on UVM
 
Is it possible to have a user defined phase in UVM ?
Yes, you can define your own phase and insert it between any of the existing phases. For this, you have to first define a new phase class inherited from uvm_task_phase, implement the exec_task or exec_func method and insert the phase into existing schedule or domain object.
Read more on Creating user-defined phases.
What is the difference between RAL backdoor and frontdoor accesses ?
A backdoor access in RAL is a way to dump values directly onto the DUT registers via a hard coded RTL signal path and does not consume simulation time. A frontdoor access in RAL is usually done by sending the data as a transaction through an associated peripheral bus interface and hence consumes simulation time.
What is a phase objection ?
In UVM, all components synchronize with each other through a set of phases. Every component has to finish its processes in a particular phase until it can proceed to the next. So, objection is a mechanism to allow a component to stall other components from proceeding to the next phase until it gets the chance to finish its own tasks. This is normally done using raise_objection() and drop_objection() methods from the uvm_phase class.
What is the difference between set_config_* and uvm_config_db ?
The basic set_config_* methods are mapped to corresponding uvm_config_db as :
set_config_int(...) => uvm_config_db#(uvm_bitstream_t)::set(cntxt,...)
set_config_string(...) => uvm_config_db#(string)::set(cntxt,...)
set_config_object(...) => uvm_config_db#(uvm_object)::set(cntxt,...)		
What are the different factory override types ?
Factory overrides can be done in four different ways:
- Instance override by type of the component/object
 - Instance override by name of the component/object
 - Type override by type of the component/object
 - Name override by type of the component/object
 
Read more on UVM Factory Override.