Random verilog中模算子的取值范围
Verilog中%运算符的范围是多少?在C语言中,我知道若我写的是数字%10,那个么输出值在0和9之间。但我在Verilog中试过了,得到的结果是-9到9之间?为什么呢Random verilog中模算子的取值范围,random,operators,verilog,Random,Operators,Verilog,Verilog中%运算符的范围是多少?在C语言中,我知道若我写的是数字%10,那个么输出值在0和9之间。但我在Verilog中试过了,得到的结果是-9到9之间?为什么呢 enter code here module testbench; integer i; reg signed [15:0] a,b; initial begin for(i = 0; i < 9; i = i + 1) begin a= $random%10; b= $random%20; $
enter code here
module testbench;
integer i;
reg signed [15:0] a,b;
initial
begin
for(i = 0; i < 9; i = i + 1)
begin
a= $random%10;
b= $random%20;
$display("A: %d and B : %d",a,b);
end
end
endmodule
在此处输入代码
模块测试台;
整数i;
注册签名[15:0]a,b;
最初的
开始
对于(i=0;i<9;i=i+1)
开始
a=$random%10;
b=随机%20美元;
$display(“A:%d和B:%d”,A,B);
结束
结束
端模
模数可以返回负数,正如Verilog的IEEE Std 1364-2001§4.1.5算术运算符以及SystemVerilog的§11.4.3算术运算符中明确规定的那样
模运算的结果应取第一个操作数的符号
两个LRMs(语言参考手册)也给出了示例
要保证为正数,可以使用$unsigned()
。例如:
a = $unsigned($random) % 10;
如果启用SystemVerilog,可以将$unsigned($random)
替换为$urandom
,或将$unsigned($random)%10
替换为$urandom_范围(9,0)
;参见§18.13随机数系统功能和方法
仅供参考:C/C++对负数也做同样的处理。请参阅之前回答的问题:模数可以返回负数,正如Verilog的IEEE Std 1364-2001§4.1.5算术运算符以及SystemVerilog的§11.4.3算术运算符中明确说明的那样 模运算的结果应取第一个操作数的符号 两个LRMs(语言参考手册)也给出了示例 要保证为正数,可以使用
$unsigned()
。例如:
a = $unsigned($random) % 10;
如果启用SystemVerilog,可以将$unsigned($random)
替换为$urandom
,或将$unsigned($random)%10
替换为$urandom_范围(9,0)
;参见§18.13随机数系统功能和方法
仅供参考:C/C++对负数也做同样的处理。请参阅之前回答的问题:和