在verilog中生成随机数

时间:2015-12-01 02:25:46

标签: random verilog

我在为项目编写测试平台时遇到了这个问题。我发现如何在verilog中使用$random,但由于某种原因,它会给我带来奇怪的结果。我有2个16位的寄存器叫AB,我用0到10之间的随机数测试它,每秒输出一个值,这是16位的最大值。我想知道是否有其他人有类似的问题,可以提供帮助。 感谢

reg[15:0]a;
reg[15:0]b;

 integer seed,i,j;
 initial begin 


   for (i=0; i<6; i=i+1)
    begin
      a=$random%10; 
      #100;
      b=$random%20;
    $display("A %d, B: %d",a,b);    
   end 
$finish;

1 个答案:

答案 0 :(得分:5)

  

输出是一个值,它是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

作为解决方案,使用$urandom生成无符号随机数,预期在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

上面的代码可能会产生类似的输出:

A     8, B:     0
A     3, B:    10
A     7, B:    11
A     6, B:     3
A     2, B:     7
A     1, B:    10

我猜你的意思是什么。

可以找到并运行代码here