Random verilog中模算子的取值范围

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; $

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;  
    $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++对负数也做同样的处理。请参阅之前回答的问题:和