松江网站建设培训,朔州怀仁网站建设,企业网站系统详细设计,长沙58同城招聘信息相关阅读
Verilog基础编辑https://blog.csdn.net/weixin_45791458/category_12263729.html $random系统函数语法的BNF范式如下所示#xff0c;有关BNF范式相关内容#xff0c;可以浏览以往文章Verilog基础#xff1a;巴科斯范式(BNF)。 $random系统函数在每次调用时返回一…相关阅读
Verilog基础编辑https://blog.csdn.net/weixin_45791458/category_12263729.html $random系统函数语法的BNF范式如下所示有关BNF范式相关内容可以浏览以往文章Verilog基础巴科斯范式(BNF)。 $random系统函数在每次调用时返回一个32位的随机数这个随机数是有符号的可正可负。按照Verilog标准语法$random系统函数的调用方式为$random或$random(seed)但实际上$random()这种调用方式也是可以的且其与$random完全一样。 seed是系统函数产生随机数的种子当不指定种子时如$random()或$random系统会默认指定一个在每次调用后都会改变的隐形种子且种子的改变轨迹是确定的具体如下所示。
timescale 1ns/1ns
module test();
initial begin repeat(10) #5 $display(Default Random number is %d, $random);
end
endmodule输出
Default Random number is 303379748
Default Random number is -1064739199
Default Random number is -2071669239
Default Random number is -1309649309
Default Random number is 112818957
Default Random number is 1189058957
Default Random number is -1295874971
Default Random number is -1992863214
Default Random number is 15983361
Default Random number is 114806029 上面代码的随机数序列是确定的即第一次调用系统函数时返回303379748第二次时返回-1064739199以此类推。 对于相同数值的种子系统函数会返回相同的值如下所示。
timescale 1ns/1ns
module test();
initial begin repeat(10) #5 $display(Default Random number is %d, $random(0));
end
endmodule输出
Default Random number is 303379748
Default Random number is 303379748
Default Random number is 303379748
Default Random number is 303379748
Default Random number is 303379748
Default Random number is 303379748
Default Random number is 303379748
Default Random number is 303379748
Default Random number is 303379748
Default Random number is 303379748 从上面的输出我们还可以发现系统默认的隐形种子的种子值可能就是从0开始。 如果指定了种子值我们必须保证在每次调用系统函数前的种子值是不同的这样才能得到一个看近似随机的数字如使用$time系统函数它会返回当前的仿真时间。
timescale 1ns/1ns
module test();
initial begin repeat(10) #5 $display(Default Random number is %d, $random($time));
end
endmodule输出
Default Random number is -2147138048
Default Random number is -2146792448
Default Random number is -2146447360
Default Random number is -2146101760
Default Random number is -2145756672
Default Random number is -2145411072
Default Random number is -2145065984
Default Random number is -2144720384
Default Random number is -2144375296
Default Random number is -2144029696 $random系统函数返回的是32位有符号数如果我们不需要这么大的有符号数可以使用求余运算符得到一个小的随机数如下所示。
timescale 1ns/1ns
module test();
initial begin repeat(10) #5 $display(Default Random number is %d, {$random} % 8);
endmodule输出
Default Random number is 4
Default Random number is -7
Default Random number is -7
Default Random number is -5
Default Random number is 5
Default Random number is 5
Default Random number is -3
Default Random number is -6
Default Random number is 1
Default Random number is 5通过对8求余我们得到了一个位于-7到7之间的随机数。 如果我们需要无符号的随机数我们可以利用拼接运算符、域选或$unsigned系统函数如下所示。
timescale 1ns/1ns
module test();
integer a;
initial begin repeat(10) #5 $display(Default Random number is %d, {$random} % 8);//repeat(10) #5 begin a $random; a a[2:0]; $display(Default Random number is %d, a);end//repeat(10) #5 $display(Default Random number is %d, $unsigned($random) % 8);
end
endmodule输出
Default Random number is 4
Default Random number is 1
Default Random number is 1
Default Random number is 3
Default Random number is 5
Default Random number is 5
Default Random number is 5
Default Random number is 2
Default Random number is 1
Default Random number is 5 三种方法的输出结果是一样的因为他们的原理是类似的{}拼接运算符的结果是无符号的域选运算符的结果也是无符号的同时域选的位宽还可以保证输出数据的大小这甚至省略了求余的操作$unsigned系统函数可以直接将一个有符号数转换为无符号数。