UVM stands for "Universal Verification Methodology" which is a organized way of writing/implementing a verification testbench in Systemverilog. This page has the most frequently asked interview questions from this topic. As a UVM expoert, the candidate is expected to know how to architect UVM environments along with setting up the neccessary scripts, flows and other neccessary requirements to run the design with the UVM testbench. Followed by the verification plan development and later the implementation of that plan using UVM.
// UVM_COMPONENT : // --------------- // 1. They are created from the begining of the simulation and continue to exist throughout the simulation. // 2. UVM components have this concept of phases for synchronization. // 3. Although they do not possess any predefined subroutines like print and copy. // UVM_OBJECT : // ------------ // 1. These are created during the simulation (on the fly) and get consumed whenever there is no one using them or have been forcefully de-allocated. // 2. These have many in-built subroutines. Its possible to create and destror instances of these whenever we want without any restrictions. // 3. There is not need of any concept of synchronization between any two uvm_objects.
module top; initial begin run_test( "DEFAULT_UVM_TESTNAME_PASS_HERE" ); // This will ensure this test is run if no "TESTNAME" argument is passed end endmodule
`uvm_analysis_imp_decl(_port_a) `uvm_analysis_imp_decl(_port_b) class component_b extends uvm_component; transaction trans; uvm_analysis_imp_port_a #(transaction,component_b) analysis_imp_a; uvm_analysis_imp_port_b #(transaction,component_b) analysis_imp_b; `uvm_component_utils(component_b) //--------------------------------------- // Constructor //--------------------------------------- function new(string name, uvm_component parent); super.new(name, parent); analysis_imp_a = new("analysis_imp_a", this); analysis_imp_b = new("analysis_imp_b", this); endfunction : new //--------------------------------------- // Analysis port write method //--------------------------------------- virtual function void write_port_a(transaction trans); `uvm_info(get_type_name(),$sformatf(" Inside write_port_a method. Recived trans On Analysis Imp Port"),UVM_LOW) `uvm_info(get_type_name(),$sformatf(" Printing trans, \n %s", trans.sprint()),UVM_LOW) endfunction //--------------------------------------- // Analysis port write method //--------------------------------------- virtual function void write_port_b(transaction trans); `uvm_info(get_type_name(),$sformatf(" Inside write_port_b method. Recived trans On Analysis Imp Port"),UVM_LOW) `uvm_info(get_type_name(),$sformatf(" Printing trans, \n %s", trans.sprint()),UVM_LOW) endfunction endclass : component_b