Inline constraints with uvm_do_on_with macro

The issue is that your sub-sequence (mem_sequence) is also using the uvm_do() macro to create the mem_seq_item. The uvm_do() macro will create and randomize the item every time, which will ignore any constraints passed in.

This is a perfect example of why using the `uvm_do_* macros is bad. I recommend you review the UVM Cookbook chapter on sequences and use the sequence/sequence_item methods directly.