verilog

时间:2017-02-27 01:42:07

标签: 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;  
    $display("A: %d and B : %d",a,b);
end
end
endmodule

1 个答案:

答案 0 :(得分:4)

模数可以返回负数,如Verilog的IEEE Std1364-2001§4.1.5算术运算符以及SystemVerilog的IEEE Std 1800-2012§11.4.3算术运算符< / em>的

  

模数运算的结果应采用第一个操作数的符号。

两个LRM(语言参考手册)也举例说明。

要保证正数,您可以使用$unsigned()。例如:

a = $unsigned($random) % 10;

如果您启用了SystemVerilog,则可以将$unsigned($random)替换为$urandom,或将$unsigned($random) % 10替换为$urandom_range(9, 0);见IEEE Std 1800-2012§18.13随机数系统函数和方法

仅供参考:C / C ++对负数做同样的事。请参阅之前已回答的问题:Modulo operation with negative numbersModulo operator with negative values