I am thinking of writing something like this
class seq extends uvm_sequence#(block_data);
`uvm_object_utils(seq)
function new(string name ="seq");
super.new(name);
endfunction
task body();
block_data req,rsp;
for(int j =0; j<4;j++) begin// filling up the sets
for(int i =0; i<2**10;i++) begin //filling up the addresses
if(!rsp.full) begin
start_item(req);
assert(req.randomize());//randomize with whatever
finish_item(req);
end
end
end
get_response(rsp);//try to get response from the driver whether full or not
if(rsp.full()) begin
req.addr = rsp.address_lru;//get the lru addresss
for(int i=0; i<2**10;i++) begin
start_item();
req.randomize();//try to send address there
finish_item();
end
end
endtask
endclass