From HDL Processes to the UVM Run Phase
UVM provides processes that execute during simulation, just like Verilog and VHDL. For example, here we see a VHDL design entity containing two concurrent processes:
-- VHDL entity D is end entity; architecture V1 of D is begin P1: process begin report "Hello world 1"; wait; end process; P2: process begin report "Hello world 2"; wait; end process; end architecture;
And here is the UVM equivalent:
// UVM class D extends uvm_component; `uvm_component_utils(D) function new(string name, uvm_component parent); super.new(name, parent); endfunction task run; fork begin: P1 `uvm_info("", "Hello world 1", UVM_NONE) end begin: P2 `uvm_info("", "Hello world 2", UVM_NONE) end join endtask endclass
Any code written within the run method, which must be a SystemVerilog task, executes as a process during simulation. A UVM component can only have a single run method, so if you want multiple concurrent processes within a single UVM component, you have to spawn them off using fork-join. Note that there are no component instances within component D, so we don't need the build or connect methods.
Next: From HDL Input and Output Ports to TLM Ports and Exports
Previous: The Various Kinds of UVM Component
Back to Easier UVM - for VHDL and Verilog Users
Back to the full list of UVM Resources