Q11: Difference between module & class based TB?
Ans: A module is a static object present always during of the simulation.
A Class is a dynamic object because they can come and go during the life time of simulation.
Q12: What is uvm_config_db ? What is difference between uvm_config_db & uvm_resource_db?
Ans: uvm_config_db is a parameterized class used for configuration of different type of parameter into the uvm database, So that it can be used by any component in the lower level of hierarchy.
uvm_config_db is a convenience layer built on top of uvm_resource_db, but that convenience is very important. In particular, uvm_resource_db uses a "last write wins" approach. The uvm_config_db, on the other hand, looks at where things are in the hierarchy up through end_of_elaboration, so "parent wins." Once you start start_of_simulation, the config_db becomes "last write wins."
All of the functions in uvm_config_db#(T) are static, so they must be called using the :: operator
It is extended from the uvm_resource_db#(T), so it is child class of uvm_resource_db#(T)
Q13: What is the advantage and difference of `uvm_component_utils() and `uvm_object_utils()?
Ans: The utils macros define the infrastructure needed to enable the object/component for correct factory operation.
The reason there are two macros is because the factory design pattern fixes the number of arguments that a constructor can have. Classes derived from uvm_object have constructors with one argument, a string name. Classes derived from uvm_component have two arguments, a name and a uvm_component parent.
The two `uvm_*utils macros inserts code that gives you a factory create() method that delegates calls to the constructors of uvm_object or uvm_component. You need to use the respective macro so that the correct constructor arguments get passed through. This means that you cannot add extra constructor arguments when you extend these classes in order to be able to use the UVM factory.
Q14: Difference between `uvm_do and `uvm_rand_send ?
Ans: `uvm_do perform the below steps:
- get_response (optional)
while `uvm_rand_send perform all the above steps except create. User needs to create sequence / sequence_item.
Q15: Difference between uvm_transaction and uvm_seq_item?
Ans: class uvm_sequence_item extends uvm_transaction
uvm_sequence_item extended from uvm_transaction only, uvm_sequence_item class has more functionality to support sequence & sequencer features. uvm_sequence_item provides the hooks for sequencer and sequence , So you can generate transaction by using sequence and sequencer , and uvm_transaction provide only basic methods like do_print and do_record etc .