| @@ -0,0 +1,102 @@ | |||||
| class wrap_txn extends uvm_sequence_item; | |||||
| function new(string name ="wrap_txn"); | |||||
| super.new(name) | |||||
| endfunction | |||||
| rand bit wr_rd; | |||||
| //write address channel | |||||
| 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[3:0]awcache; | |||||
| rand logic[2:0]awprot; | |||||
| rand logic[1:0]awlock; | |||||
| logic awvalid;' | |||||
| logic awready; | |||||
| ' | |||||
| //write data channel | |||||
| rand bit[3:0]wid; | |||||
| logic[3:0]wstrb; | |||||
| rand logic[31:0]wdata[$]; | |||||
| logic wlast; | |||||
| logic wvalid; | |||||
| logic wready; | |||||
| //write response channel | |||||
| rand bit[3:0]bid; | |||||
| logic[1:0]bresp; | |||||
| logic bvalid; | |||||
| logic bready; | |||||
| //read address channel | |||||
| 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[3:0]arcache; | |||||
| rand logic[2:0]arprot; | |||||
| rand logic[1:0]arlock; | |||||
| logic arvalid; | |||||
| logic arready; | |||||
| //read data channel | |||||
| rand bit[3:0]rid; | |||||
| logic[31:0]rdata[$]; | |||||
| logic rlast; | |||||
| logic[1:0]rresp; | |||||
| logic rvalid; | |||||
| logic rready; | |||||
| constraint write_id {awid == wid; wid == bid;} | |||||
| constraint read_id {arid == rid;} | |||||
| constraint wr_data {wdata.size()==awlen+1;} | |||||
| constraint write_unalign {awaddr%(2**awsize)!=0;} | |||||
| constraint wrap {awburst ==2'b10; arburst ==2'b10;} | |||||
| constraint read_unalign {araddr%(2**arsize)!=0;} | |||||
| function void post_randomize(); | |||||
| if(wr_rd = 1) | |||||
| begin | |||||
| for(int i=1;i<=(2**awsize);i++) | |||||
| wstrb[i] = 1; | |||||
| end | |||||
| endfunction | |||||
| `uvm_object_param_utils_begin(wrap_txn) | |||||
| `uvm_field_int(wr_rd,UVM_ALL_ON) | |||||
| `uvm_field_int(awaddr,UVM_ALL_ON) | |||||
| `uvm_field_int(awid,UVM_ALL_ON) | |||||
| `uvm_field_int(awlen,UVM_ALL_ON) | |||||
| `uvm_field_int(awsize,UVM_ALL_ON) | |||||
| `uvm_field_int(awburst,UVM_ALL_ON) | |||||
| `uvm_field_int(awcache,UVM_ALL_ON) | |||||
| `uvm_field_int(awprot,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_queue_int(wdata,UVM_ALL_ON) | |||||
| `uvm_field_int(wstrb,UVM_ALL_ON) | |||||
| `uvm_field_int(wlast,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(araddr,UVM_ALL_ON) | |||||
| `uvm_field_int(arid,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(arcache,UVM_ALL_ON) | |||||
| `uvm_field_int(arprot,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_queue_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 | |||||
| endclass | |||||