|
- //=============================AXI TRANSACTION CLASSS ==========================================//
- class axi_seq_item extends uvm_sequence_item;
-
- //FACTORY REGISTRATION
-
- 'uvm_object_utils(axi_seq_item);
-
- //WRITE ADDRESS CHANNEL
- rand logic [31:0] AWADDR;
- rand logic [3:0] AWLEN;
- rand logic [2:0] AWSIZE;
- rand logic [1:0] AWBURST;
- bit AWVALID;
- bit AWREADY;
- bit [1:0] AWLOCK;
- rand logic [2:0] AWPROT;
- rand logic [3:0] AWCACHE;
- rand bit [3:0] AWID;
-
- //WRITE DATA CHANNEL
- rand bit [3:0] WID;
- bit [2:0] WSTRB;
- rand logic [7:0] WDATA;
- bit WVALID;
- bit WREADY;
- bit WLAST;
- //WRITE RESPONSE CHANNEL
- bit [1:0] BRESP;
- bit BVALID;
- bit BREADY;
-
- //READ ADDRESS CHANNEL
- rand bit [3:0] ARID;
- rand logic [31:0] ARADDR;
- rand logic [2:0] ARSIZE;
- rand logic [1:0] ARBURST;
- rand logic [3:0] ARLEN;
- rand logic [2:0] ARPROT;
- rand logic [3:0] ARCACHE;
- rand logic [1:0] AELOCK;
- bit ARVALID;
- bit ARREADY;
-
- //READ DATA CHANNEL
- bit [3:0] RID;
- logic [7:0] RDATA;
- bit [1:0] RRESP;
- bit RVALID;
- bit RREADY;
- bit [3:0] RSTRB;
- bit RLAST;
-
-
- //==============================================4kb boundary=====================================//
- constraint awaddr_4k{ AWADDR % 4096 + (AWLEN + (1 << AWSIZE) <= 4096;}
- constraint araddr_4k{ ARADDR % 4096 + (ARLEN + (1 << ARSIZE) <= 4096;}
-
- //==============================================id must be same for bot read/write operation =====================================//
- constraint ali_w_addr{ AWID==ARID;}
- constraint ali_r_addr{WID==RID;}
-
- //==============================================burst type always not reserved=====================================//
- constraint burst_type{ AWBURST!=2'b11; ARBURST!=2'b11;}
-
- constraint wr_data_size{if(AWBURST==2'b01)
- (WDATA inside{[1:((2**AWSIZE)*16)]});}
- constraint rd_data_size{if(ARBURST==2'b01)
- (RDATA inside{[1:((2**ARSIZE)*16)]});}
-
-
-
- constraint wrap_data{ if(AWBURST==2'b10)
- WDATA inside {((2**AWSIZE)*2),((2**AWSIZE)*4),((2**AWSIZE)*8),((2**AWSIZE)*16)};}
-
-
- endclass
-
-
-
-
- //=============================AXI SEQUENCE CLASSS ==========================================//
- class axi_wrap_sequence extends uvm_sequence #(axi_seq_item);
-
- `uvm_object_utills(axi_wrap_sequence)
- axi_wrap_sequence wrap_xtn;
-
- function new(string name ="axi_wrap_sequene")
- super.new(name);
- endfunction
-
- task body();
- repeat(10)
- begin
- wrap_xtn=axi_seq_item::type_id::create("wrap_xtn");
- start_item(wrap_xtn);
- assert(wrap_xtn.randomize() with {AWBURST==2;});
- finish_item(wrap_xtn);
- end
- endtask
- endclass
-
-
-
-
- //=============================AXI SEQUENCE CLASSS ==========================================//
- class axi_wrap_read_seq extends uvm_sequence #(axi_seq_item);
-
- `uvm_object_utills(axi_wrap_read_seq)
- axi_wrap_sequence rwrap_xtn;
-
- function new(string name ="axi_wrap_read_seq")
- super.new(name);
- endfunction
-
- task body();
- repeat(10)
- begin
- rwrap_xtn=axi_seq_item::type_id::create("rwrap_xtn");
- start_item(rwrap_xtn);
- assert(rwrap_xtn.randomize() with {ARBURST==2;});
- finish_item(rwrap_xtn);
- end
- endtask
- endclass
-
-
|