A UVM transaction class typically defines all the input and output control signals that can be randomized and driven to the DUT.
Steps to create a UVM transaction object
1. Create custom class inherited fromuvm_sequence_item
, register with factory and call new
// my_object is user-given name for this class that has been derived from "uvm_sequence_item"
class my_object extends uvm_sequence_item;
// This is standard code for all components
function new (string name = "my_object", uvm_component parent = null);
super.new (name, parent);
endfunction
// Code for rest of the steps come here
endclass
2. Declare variables related to this transaction class
// Declare variables and make the ones that has to be randomized as "rand"
rand bit [15:0] addr;
rand bit [31:0] data;
rand bit [2:0] burst;
3. Register the class with factory and apply UVM field macros if required
`uvm_object_utils_begin (my_object)
// Apply the given object macros to the corresponding variables
`uvm_field_int (addr, UVM_ALL_ON | UVM_NO_COMPARE)
`uvm_field_int (data, UVM_ALL_ON)
`uvm_field_int (burst, UVM_ALL_ON)
`uvm_object_utils_end
4. Add constraints as required
constraint c_addr { addr <= 16'hBFFF; }
constraint c_burst { burst inside {[0:4]}; }
Define convert2string
function
function string convert2string();
return $sformatf("addr=0x%0h data=0x%0h burst=0x%0h", addr, data, burst);
endfunction