System verilog 为什么$Uradom即使使用seed(int或任何其他)作为变量也给出相同的值?

System verilog 为什么$Uradom即使使用seed(int或任何其他)作为变量也给出相同的值?,system-verilog,System Verilog,我使用$random获得不同的数字,但我现在需要无符号随机数,所以我将$random更改为$urandom module Tb(); int seed; integer num; initial begin $display("========================================================"); begin $display("$RANDOM: With Seed Value = 2

我使用$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
以下是结果:(如代码中添加的显示)

预期结果:seed和num的值应以$urandom的形式更改。 因为它在$random的情况下会发生变化

我是否遗漏了一些关于“$urandom如何与seed一起工作?”
在$random的情况下,它是seed变量的inout端口

使用
$uradom
的参数初始化生成器。这意味着给定一个参数,它将始终返回相同的值。
$uradom(seed)
应该调用一次,后续调用应该在没有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;
过程p;
p=进程::self();
p、 srandom();
x=铀矿;

$urandom
的参数仅为
input
,而
$random
的参数为
inout
。该信息需要在LRM中澄清。看

process p;
p = process::self();
p.srandom(<urandom_seed>);
x = $urandom;