Random 在verilog中生成随机数

Random 在verilog中生成随机数,random,verilog,Random,Verilog,我在为一个项目编写测试台时遇到了这个问题。我在verilog中找到了如何使用$random,但出于某种原因,它会给我带来奇怪的结果。我有两个叫做A和B的16位reg,我用0-10之间的随机数对它进行了测试,每秒钟输出一个值,这是16位中的最大值。我想知道是否有其他人也有类似的问题,可以提供帮助。 谢谢 reg[15:0]a; reg[15:0]b; 整数种子i,j; 初始开始 对于(i=0;i 输出是一个值,它是16位中可以具有的最大值 $random生成有符号的随机数。当您将负数打印为无符号数

我在为一个项目编写测试台时遇到了这个问题。我在verilog中找到了如何使用
$random
,但出于某种原因,它会给我带来奇怪的结果。我有两个叫做
A
B
的16位reg,我用0-10之间的随机数对它进行了测试,每秒钟输出一个值,这是16位中的最大值。我想知道是否有其他人也有类似的问题,可以提供帮助。 谢谢

reg[15:0]a;
reg[15:0]b;
整数种子i,j;
初始开始
对于(i=0;i
输出是一个值,它是16位中可以具有的最大值

$random
生成有符号的随机数。当您将负数打印为无符号数时,负数将显示为大数

您发布的代码可能如下所示,并且不在0到10之间

A     8, B: 65517
A 65527, B: 65527
A     7, B:    17
A 65535, B: 65522
A     1, B:     9
A     8, B:    17
作为一种解决方案,使用
$uradom
生成预期介于0到10和0到20之间的无符号随机数

下面是对您发布的代码的修改

module test;
   initial begin
      reg[15:0]a;
      reg [15:0] b;

      integer    seed,i,j;
      for (i=0; i<6; i=i+1)
        begin
           a=$urandom%10; 
           #100;
           b=$urandom%20;
           $display("A %d, B: %d",a,b);    
        end 
      $finish;
   end
endmodule
我猜这就是你所期待的


可以找到并运行代码。

$random
$urandom
$srandom
$urandom\u range()
是生成随机数的一些系统任务。
$urandom\u range
在给定范围内生成随机数。
$srandom
用于种子特定的随机数生成。
module test;
   initial begin
      reg[15:0]a;
      reg [15:0] b;

      integer    seed,i,j;
      for (i=0; i<6; i=i+1)
        begin
           a=$urandom%10; 
           #100;
           b=$urandom%20;
           $display("A %d, B: %d",a,b);    
        end 
      $finish;
   end
endmodule
A     8, B:     0
A     3, B:    10
A     7, B:    11
A     6, B:     3
A     2, B:     7
A     1, B:    10