|
- `include "uvm_macros.svh"
- import uvm_pkg::*;
-
- class axi_seq_item extends uvm_seq_item;
- //'uvm_object_utils(axi_seq_item);
-
- function new(string name="axi_seq_item")
- super.new(name);
- endfunction
- //write adress channel signals
-
- rand bit wr_rd;
-
- rand bit [3:0] awid;
- rand logic[31:0] awaddr;
- rand logic[2:0] awsize;
- rand logic[3:0] awlen;
- rand logic[1:0] awburst;
- rand logic[1:0] awlock;
-
- logic awvalid;
- logic awready;
-
-
- //write data channel
-
- rand bit [3:0] wid;
- rand logic[31:0] wdata[][];
- logic[3:0] wstrb;
- logic wlast;
- logic wvalid;
- logic wready;
-
- // write response channel
- rand bit []3:0]bid;
- logic[1:0] bresp;
-
- logic bvalid;
- logic bready;
-
- // read adress channel
-
- rand bit [3:0] arid;
-
- rand logic[31:0] araddr;
- rand logic[2:0] arsize;
- rand logic[3:0] arlen;
- rand logic[1:0] arburst;
- rand logic[1:0] arlock;
- logic arvalid;
- logic arready;
-
- // read data channel
-
-
- rand bit [3:0] rid;
- logic[31:0] rdata;
- logic[3:0]rresp;
- logic rlast;
- logic rvalid;
- logic rready;
-
-
- `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
-
- constraint aligned_addr{awadd%2**awsize==0;}
-
- constraint wrap_addr{solve awburst before awlen
- if(awburst==2'b 10)
- awlen inside{1,3,7,15};}
-
- constraint wid_sig{awid==wid;}
-
- constraint rid_sig{arid==rid;}
-
- constraint axi_4kb{awaddr%4096+(2**awsize*(awlen+1))<=4096;}
-
-
-
- //:constrain
- endclass:axi_seq_item
-
|