Browse Source

axi_seq

main
prasad_madala 6 months ago
parent
commit
50af32beca
1 changed files with 126 additions and 0 deletions
  1. +126
    -0
      axi_seq_item.sv

+ 126
- 0
axi_seq_item.sv View File

@@ -0,0 +1,126 @@
//=============================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

Loading…
Cancel
Save