$random()、$random(seed)
在同一次仿真中,每次调用可以得到不一样的随机值。
但是每次不同的仿真,相同次数的调用会得到相同的随机值,即使在命令行中添加选项 -seed xxx,改变种子也是这样。
$urandom()
在同一次仿真中,每次调用可以得到不一样的随机值。
命令行中不添加选项 -seed xxx,每次不同的仿真,相同次数的调用会得到相同的随机值。
在命令行中添加选项 -seed xxx,改变种子,可以得到不同的随机值,-seed 可以改变初始种子值。
$urandom(seed)
指定seed值的情况下,在同一次仿真中, 每次调用会得到相同的随机值!
每次不同的仿真,即使调用次数不同,也会得到相同的随机值。
注意
假设在一个子模块中用$urandom()生成随机值,在top中多次调用子模块,会得到相同的随机值。
举例:
module sub_a(
input clk,
output reg [31:0] data_out
);
always@(posedge clk) data_out <= $urandom();
endmodule
module top();
reg clk=0;always #5 clk=~clk;
wire [31:0] data_0;
wire [31:0] data_1;
sub_a sub_a0(
.clk ( clk ),
.data_out ( data_0 )
);
sub_a sub_a1(
.clk ( clk ),
.data_out ( data_1 )
);
其中data_0和data_1的值将完全相同。