diff --git a/seq_item.sv b/seq_item.sv new file mode 100644 index 0000000..eebea6c --- /dev/null +++ b/seq_item.sv @@ -0,0 +1,114 @@ +`include "uvm_macros.svh" +import uvm_pkg::*; + +class axi_seq_item extends uvm_sequence_item; + + //`uvm_object_utils(axi_seq_item) + + function new(string name="axi_seq_item"); + super.new(name); + endfunction + + //write address signals + rand bit write; + rand logic [31:0] awaddr; + rand bit [3:0] awid; + rand logic [3:0] awlen; + rand logic [2:0] awsize; + rand logic [1:0] awburst; + rand logic [1:0] awlock; + + //write data signals + rand bit [3:0] wid; + rand logic [31:0] wdata[][]; + logic [3:0] wstrb; + logic wlast; + + //write response signals + rand bit [3:0] Bid; + logic [1:0] Bresp; + + //read address signals + rand logic [31:0] araddr; + rand bit [3:0] arid; + rand logic [3:0] arlen; + rand logic [2:0] arsize; + rand logic [1:0] arburst; + rand logic [1:0] arlock; + + + //read data signals + rand bit [3:0] rid; + rand logic [31:0] rdata[][]; + logic [3:0] rresp; + rand logic rlast; + + `uvm_object_utils_begin(axi_seq_item) + `uvm_field_int(awid,UVM_ALL_ON) + `uvm_field_int(awaddr,UVM_ALL_ON) + `uvm_field_int(awsize,UVM_ALL_ON) + `uvm_field_int(awlen,UVM_ALL_ON) + `uvm_field_int(awburst,UVM_ALL_ON) + `uvm_field_int(awlock,UVM_ALL_ON) + `uvm_field_int(awvalid,UVM_ALL_ON) + `uvm_field_int(awready,UVM_ALL_ON) + + `uvm_field_int(wid,UVM_ALL_ON) + `uvm_field_int(wdata,UVM_ALL_ON) + `uvm_field_int(wlast,UVM_ALL_ON) + `uvm_field_int(wstrb,UVM_ALL_ON) + `uvm_field_int(wvalid,UVM_ALL_ON) + `uvm_field_int(wready,UVM_ALL_ON) + + `uvm_field_int(Bid,UVM_ALL_ON) + `uvm_field_int(Bresp,UVM_ALL_ON) + `uvm_field_int(Bvalid,UVM_ALL_ON) + `uvm_field_int(Bready,UVM_ALL_ON) + + `uvm_field_int(arid,UVM_ALL_ON) + `uvm_field_int(araddr,UVM_ALL_ON) + `uvm_field_int(arsize,UVM_ALL_ON) + `uvm_field_int(arlen,UVM_ALL_ON) + `uvm_field_int(arsize,UVM_ALL_ON) + `uvm_field_int(arburst,UVM_ALL_ON) + `uvm_field_int(arlock,UVM_ALL_ON) + `uvm_field_int(arvalid,UVM_ALL_ON) + `uvm_field_int(arready,UVM_ALL_ON) + + `uvm_field_int(rid,UVM_ALL_ON) + `uvm_field_int(rdata,UVM_ALL_ON) + `uvm_field_int(rlast,UVM_ALL_ON) + `uvm_field_int(rresp,UVM_ALL_ON) + `uvm_field_int(rvalid,UVM_ALL_ON) + `uvm_field_int(rready,UVM_ALL_ON) + `uvm_object_utils_end + + + + +//constraints for axi + +//axi 4kb boundary +constraint axi_4kb {awaddr%4096+(2**awsize*(awlen+1))<=4096;} + +//constarint for exclusive access +constraint exclusive_access { + if(awlock==2'b01) + awlen inside{1,3,7,15};} + +// aligned addr +constraint aligned_addr {awaddr%2**awsize==0;} + +//wrap addr +constraint wrap_addr { + if(awburst==2'b 10) + awlen inside{1,3,7,15};} +//id's should be same +constraint wid_awid {awid==wid;} + +//id's should be same +constraint rid_awid {arid==rid;} + +endclass + +