我在为项目编写测试平台时遇到了这个问题.我发现如何$random在verilog中使用但由于某种原因它会给我带来奇怪的结果.我有2个16位暂存器称为A和B,我用随机数测试它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;
Run Code Online (Sandbox Code Playgroud)
output是一个值,它是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
Run Code Online (Sandbox Code Playgroud)
作为解决方案,用于$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
Run Code Online (Sandbox Code Playgroud)
上面的代码可能会产生如下输出:
A 8, B: 0
A 3, B: 10
A 7, B: 11
A 6, B: 3
A 2, B: 7
A 1, B: 10
Run Code Online (Sandbox Code Playgroud)
我想这就是你的期望.
可以在此处找到并运行代码.