Generating unique addresses for a write sequence

In reply to ssingh:

BTW, someone else asked about doing writes and read backs. You can do this by making the list an associative array.

rand bit wr_mode;
rand unint64 address;
uint64 list[unint64];
constraint write_10_ahead {list.size() < 10 |-> wr_mode == '1;} 
constraint not_in_list {wr_mode |-> !(address inside {list};}
constraint in_list {!wr_mode |-> (address inside {list};}
 
function void post_randomize()
 if (wr_mode)
   list[address] = address; // write adds address to list
 else
   list.delete(address); // read removes address from list
endfunction