37 new (
string name=
"axi_sequential_reads_seq");
81 if (!uvm_config_db <memory> ::get(null,
"",
"m_memory",
m_memory)) {
82 uvm_fatal(this.get_type_name(),
83 "Unable to fetch m_memory from config db. Using defaults")
100 read_item = axi_seq_item::type_id::create(
"read_item");
107 addr_hi = addr_lo+0x100;
111 uvm_info(this.get_type_name(),
112 $sformatf(
"item %0d id:0x%0x addr_lo: 0x%0x addr_hi: 0x%0x",
113 xfer_cnt, xid, addr_lo,addr_hi),
117 assert( read_item.randomize() with {
119 burst_size <= local::max_burst_size;
121 addr >= local::addr_lo;
122 addr < local::addr_hi;
125 uvm_info(
"DATA", $sformatf(
"\n\n\nItem %0d: %s",
134 Lower_Wrap_Boundary = read_item.
addr;
135 Upper_Wrap_Boundary = Lower_Wrap_Boundary + (2**read_item.
burst_size);
139 Lower_Wrap_Boundary = read_item.
addr;
140 Upper_Wrap_Boundary = Lower_Wrap_Boundary + read_item.
len;
146 .burst_length(read_item.
len)) + 1;
148 dtsize = (2**read_item.
burst_size) * max_beat_cnt;
150 Lower_Wrap_Boundary = (int(read_item.
addr/dtsize) * dtsize);
151 Upper_Wrap_Boundary = Lower_Wrap_Boundary + dtsize;
156 write_addr = read_item.
addr;
157 for (
int i=0;i <read_item.
len;i++) {
160 if (write_addr >= Upper_Wrap_Boundary) {
161 write_addr = Lower_Wrap_Boundary;
166 start_item (read_item);
167 finish_item (read_item);
168 get_response(read_item);
173 .lower_addr(addr_lo),
174 .upper_addr(addr_hi)));
179 uvm_info(this.get_type_name(),
"SEQ ALL DONE", UVM_INFO)
bit< C_AXI_LEN_WIDTH-1:0 > calculate_axlen(input bit< C_AXI_ADDR_WIDTH-1:0 > addr, input bit< 2:0 > burst_size, input shortint burst_length)
calculate awlen or arlen
string convert2string()
Convert item's variable into one printable string.
bit seq_item_check(ref axi_seq_item item, input bit< ADDR_WIDTH-1:0 > lower_addr, input bit< ADDR_WIDTH-1:0 > upper_addr)
Compares an axi_seq_item's data and burst_type against expected matching memory contents.
rand bit< ADDR_WIDTH-1:0 > addr
virtual void write(input bit< ADDR_WIDTH-1:0 > addr, input bit< 7:0 > data)
Writes into memory.
rand logic< 2:0 > burst_size
Writes to memory over AXI, backdoor readback, then AXI readback.
uvm_object_utils(axi_sequential_reads_seq) new(string name
new(string name="axi_seq")
Constructor.
task body()
Does all the work.
Writes to memory over AXI, backdoor readback, then AXI readback.
rand logic< 1:0 > burst_type
contains all data and functions related to axi and usage