为什么 $urandom 即使使用种子(int 或任何其他)作为变量也给出相同的值?
Why $urandom is giving same value even with using seed(int or any other) as variable?
我正在使用 $random 来获取不同的数字,但我现在需要无符号随机数,所以我将 $random 更改为 $urandom。
module Tb();
int seed;
integer num;
initial begin
$display("========================================================");
begin
$display("$RANDOM: With Seed Value = 2 With Variable");
seed = 2;
repeat (5) begin
num = $random(seed);
$display("seed = %d |num = %d ",seed, num);
end
end
$display ("------------------------------");
begin
$display("$U-RANDOM: With Seed Value = 2 With Variable");
seed = 2;
repeat (5) begin
num = $urandom(seed);
$display("seed = %d |num = %d ",seed, num);
end
end
$display ("========================================================");
end
endmodule
这些是结果:(如代码中添加的显示)。
========================================================
$RANDOM: With Seed Value = 2 With Variable
seed = 138139 |num = -2147345408
seed = 951188000 |num = -1196295055
seed = 1784212385 |num = -363270956
seed = -1731404562 |num = 416079665
seed = -1607270249 |num = 540214080
------------------------------
$U-RANDOM: With Seed Value = 2 With Variable
seed = 2 |num = -541627016
seed = 2 |num = -541627016
seed = 2 |num = -541627016
seed = 2 |num = -541627016
seed = 2 |num = -541627016
Expected Results: Value of seed and num should change in $urandom.
As It is changing in case of $random.
我是不是漏掉了一些关于 "How $urandom works with seed?" 的东西
在 $random 的情况下,它是种子变量的输入端口。
$urandom
的参数初始化生成器。这意味着给定一个参数,它将始终 return 相同的值。 $urandom(seed)
应该调用一次,后续调用应该在没有种子的情况下调用。
来自 2012 LRM 第 18.13.1 节的示例:
bit [64:1] addr;
bit [ 3:0] number;
addr[32:1] = $urandom( 254 ); // Initialize the generator,
// get 32-bit random number
addr = {$urandom, $urandom }; // 64-bit random number
number = $urandom & 15; // 4-bit random number
的行为
x = $urandom(seed);
等同于
process p;
p = process::self();
p.srandom(<urandom_seed>);
x = $urandom;
$urandom
的参数仅为 input
,而 $random
的参数为 inout
。此信息需要在 LRM 中得到澄清。参见 https://accellera.mantishub.io/view.php?id=5902
我正在使用 $random 来获取不同的数字,但我现在需要无符号随机数,所以我将 $random 更改为 $urandom。
module Tb();
int seed;
integer num;
initial begin
$display("========================================================");
begin
$display("$RANDOM: With Seed Value = 2 With Variable");
seed = 2;
repeat (5) begin
num = $random(seed);
$display("seed = %d |num = %d ",seed, num);
end
end
$display ("------------------------------");
begin
$display("$U-RANDOM: With Seed Value = 2 With Variable");
seed = 2;
repeat (5) begin
num = $urandom(seed);
$display("seed = %d |num = %d ",seed, num);
end
end
$display ("========================================================");
end
endmodule
这些是结果:(如代码中添加的显示)。
========================================================
$RANDOM: With Seed Value = 2 With Variable
seed = 138139 |num = -2147345408
seed = 951188000 |num = -1196295055
seed = 1784212385 |num = -363270956
seed = -1731404562 |num = 416079665
seed = -1607270249 |num = 540214080
------------------------------
$U-RANDOM: With Seed Value = 2 With Variable
seed = 2 |num = -541627016
seed = 2 |num = -541627016
seed = 2 |num = -541627016
seed = 2 |num = -541627016
seed = 2 |num = -541627016
Expected Results: Value of seed and num should change in $urandom. As It is changing in case of $random.
我是不是漏掉了一些关于 "How $urandom works with seed?" 的东西 在 $random 的情况下,它是种子变量的输入端口。
$urandom
的参数初始化生成器。这意味着给定一个参数,它将始终 return 相同的值。 $urandom(seed)
应该调用一次,后续调用应该在没有种子的情况下调用。
来自 2012 LRM 第 18.13.1 节的示例:
bit [64:1] addr;
bit [ 3:0] number;
addr[32:1] = $urandom( 254 ); // Initialize the generator,
// get 32-bit random number
addr = {$urandom, $urandom }; // 64-bit random number
number = $urandom & 15; // 4-bit random number
x = $urandom(seed);
等同于
process p;
p = process::self();
p.srandom(<urandom_seed>);
x = $urandom;
$urandom
的参数仅为 input
,而 $random
的参数为 inout
。此信息需要在 LRM 中得到澄清。参见 https://accellera.mantishub.io/view.php?id=5902