我在为项目编写测试平台时遇到了这个问题。我发现如何在verilog中使用$random
,但由于某种原因,它会给我带来奇怪的结果。我有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;
答案 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。