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.