Random 在verilog中生成随机数
我在为一个项目编写测试台时遇到了这个问题。我在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生成有符号的随机数。当您将负数打印为无符号数
$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