作业帮 > 综合 > 作业

verilog 随机数生成

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/02 18:34:19
verilog 随机数生成
module test;
reg [31:0] a,b,c,d;
initial
begin
a = $random % 100; a[31] = 0;
b = $random % 100; b[31] = 0;
c = $random % 100; c[31] = 0;
d = $random % 100; d[31] = 0;
end
initial
begin
#10 $display("%d,%d,%d,%d",a,b,c,d);
#1000 $finish;
end
endmodule
这段代码在仿真时输出为
48,2147483549,2147483609,2147483639
为什么只有a是正确的?
{$random}%100.试试,random能生成负数.
若是-69,则-69%100=-69,补码的话看上去就会是一个很大的数.即便后来高位置零,其他位还是保留补码时的值,所以很大.
再问: 加{}的作用是什么呢,是取绝对值么? 在书上没看过这种用法,只知道{}是用来连接的。比如: Y = {4{A} , 2{B}}
再答: {}将符号数变为bit向量,从而取出了正负属性。
再问: bit向量 是什么意思? 是指补码的原码加符号位信息吗?
再答: 就是1010的二进制序列,没有符号、整数、小数等意义的数
再问: {}将符号数变为bit向量的同时,将补码变为了原码表示,对吗?
再答: 是这个效果,可以这样理解