How can one write a UVM sequence for cache eviction? Lets suppose main memory is 4GB. 64KB Cache, 4 way associative, 64B cache line. Any ideas would be appreciated

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