In reply to dave_59:
Thanks Dave. I really learnt a lot from your replies. Just now I designed some small tests on Questa and get confirmed about what your said. Here I also have found an interesting thing, about “shuffle”.
function automatic thread_0 ();
int xxx;
int yyy[$] = '{1, 2, 3, 4};
process p = process::self();
$display("YYY:",,,, p.get_randstate());
$display("do $urandom");
xxx = $urandom;
$display("YYY:",,,, p.get_randstate());
$display("do shuffle");
yyy.shuffle; $display(yyy);
$display("YYY:",,,, p.get_randstate());
$display("do shuffle");
yyy.shuffle; $display(yyy);
$display("YYY:",,,, p.get_randstate());
$display("do $urandom");
xxx = $urandom;
$display("YYY:",,,, p.get_randstate());
endfunction: thread_0
After observing the display output, I surprisingly saw that the yyy.shuffle never advanced thread RNG at all. This went beyond my imagination in another direction. However, this still kept random stable. :-)