Why we are suggested to use $urandom rather than $random

In reply to jianfeng.he:

Yes, the main reason not to use $random is it does not have the random stability properties of $urandom, randomize() and other SystemVerilog randomization constructs. You must manually control the seeding.

Another problem with $random is its distribution is not uniform across every bit. It uses a very old and simple randomization algorithm that is prescribed by the LRM.

And finally, the seeding of $urandom and all SystemVerilog randomization constructs can be controlled by the command line to run different seeds without having to modify your code.