verilog之random

Posted on 2020-07-28 22:27  绿叶落秋风  阅读(2956)  评论(0编辑  收藏  举报

verilog之random

1、基本作用

random,用于产生随机数。在测试时,有时需要测试的情况太多,无法一一列举,就需要使用抽样测试的方法验证功能是否可行。random是一个有返回值的系统函数,可以直接用于计算。返回值带符号的整形,所以不能直接当作无符号的数据处理。可以加上{}作为本身连接,即将符号位和数值位并在一起。这样的数据就是无符号的随机数。

2、实际例子

`timescale 1ns/1ns
module random;
    reg [23:0] ran;
initial begin
    $monitor($realtime,,"ran=%d",ran);
    #1
    ran=$random % 60;
    #1
    ran={$random} % 20; //无符号
    #1
    ran=$random % 2;
    #10
    $stop;
end
endmodule
run -all
# 0 ran=       x
# 1 ran=       8
# 2 ran=      17
# 3 ran=16777215
# ** Note: $stop    : D:/Library/verilog_soft/P1_function/H4_random/random.v(13)
#    Time: 13 ns  Iteration: 0  Instance: /random

前面两个数据还是比较正常的,但第三个数据就比较奇怪。这个具体的原因可能和负数取余的运算有关。大概是带符号位的取余的计算有别的语法规则。这里注意一下就行,尽量不要使用带符号位的随机数去取余。

3、小结

这个函数主要要认识,具体的作用也好理解。随机数可以节约大型项目的测试向量的编写时间和成本,是提高效率的好办法。