In reply to chr_sue:
virtual task body();
bit [63:0] rd_data;
bit [63:0] data;
my_seq_item item;
int no_of_regs = 4;
item = my_seq_item::type_id::create("item");
$display ("Calling get all regs ");
get_all_regs(); //to do
// fill the addr_queue;
for (int i = 0; i < no_of_regs; i++)
begin
addr_queue.push_back(32'hf0000000);
addr_queue.push_back(32'hf0000064);
addr_queue.push_back(32'hf0000130);
addr_queue.push_back(32'hf0000134);
addr_queue.push_back(32'hF0000138);
end
$display("addr_queue size = %0d", addr_queue.size);
$display("\taddr_queue = %p",addr_queue);
// addr_queue.shuffle(); // randomize the addresses
// $display("\tshuffle addr_queue = %p",addr_queue);
// Writing all regs
foreach (addr_queue[i]) begin
void'(item.randomize() with {addr == addr_queue[i]; delay == 8; len == 2; opc == 3; tag ==0; mid == 0;prty == 3; });
$display("value of item_addr = %h", item.addr);
svci_master_write(.addr(item.addr), .data(data), .delay(item.delay), .len(item.len), .opc(item.opc),.tag(item.tag),.prty(item.prty), .mid(item.mid));
`uvm_info(get_type_name(), $sformatf("writing req addr = %0h with data = %0h ", item.addr, data), UVM_MEDIUM)
exp_pkt = wr_rd_reg_addr_array_q.pop_front();
expect_mem[addr_queue[i]] = exp_pkt.rdata;
$display("expect_mem[%0h] = %0h",addr_queue[i],expect_mem[addr_queue[i]]);
end
// Reading all regs
foreach (addr_queue[i]) begin
svci_master_read(.addr(addr_queue[i]), .rd_data(rd_data), .delay('h8), .len('h2), .opc('h0), .mid('h0),.tag(0),.prty(3));
if (rd_data == expect_mem[addr_queue[i]])
`uvm_info(get_type_name(), $sformatf("check passed for addr = %0h , rd_data = %h , expected rd_data = %h", addr_queue[i], rd_data,expect_mem[addr_queue[i]]), UVM_MEDIUM)
else
`uvm_error("DATA MISMATCH ERROR", $sformatf("check failed for addr = %0h, actual rd_data = %h , expected rd_data = %h", addr_queue[i],rd_data,expect_mem[addr_queue[i]] ))
end
How to make data for master_write task FFFFF, AAAAA, 55555, 000000 for each set of reg_address.
output should be like
ue size = 20
addr_queue = '{'hf0000000, 'hf0000064, 'hf0000130, 'hf0000134, 'hf0000138, 'hf0000000, 'hf0000064, 'hf0000130, 'hf0000134, 'hf0000138, 'hf0000000, 'hf0000064, 'hf0000130, 'hf0000134, 'hf0000138, 'hf0000000, 'hf0000064, 'hf0000130, 'hf0000134, 'hf0000138}
write_data {ffffffff, fffffff,fffffff,ffffff,fffffff, aaaaaaaa,aaaaaaa,aaaaaaa,aaaaaaa,aaaaaaaa,5555555,55555555…so on} should be on sequence