Sequence to that respond to done signal

In reply to bachan21:

This is what the call of item_done() in the driver is doing. It is the indication to the sequencer to generate the next seq_item.
start_item/finish_item creates exactly 1 item. If you need more you have to implement multiple start_item/finish_item.
To make your code easy you could use a loop construct in the body method like this

task body();
 repeat (10) begin
  req = packet::type_id::create("req");
  start_item(req);
    void`(randomize() with sel == 1; en == 1; addr inside {20'h0000, 20'h0100};);
  finish_item(req);
endtask : body

This generates seq_item with addr in random order.

It looks like your seq_item has data members you do not need, like sel and en. You can set these variables directly in the driver.