2017-02-27 150 views
0

Verilog中%运算符的范围是什么?在C中,我知道如果我写数字%10然后输出介于0和9之间。但我尝试了Verilog,结果我得到的是-9和9之间?这是为什么?Verilog中模运算符的范围

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 

回答

4

模量可以返回负数作为以Verilog的IEEE标准明确提出1364-2001 § 4.1.5 算术运算符以及SystemVerilog中的IEEE Std 1800-2012 § 11.4.3 算术运算符

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

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

为了保证正数,你可以使用$unsigned()。例如:

a = $unsigned($random) % 10; 

如果启用SystemVerilog的,你可以用$urandom替代$unsigned($random)或更换$unsigned($random) % 10$urandom_range(9, 0);见IEEE Std 1800-2012 § 18.13 随机数系统的功能和方法


供参考:C/C++确实与负数相同。请参阅之前回答问题:Modulo operation with negative numbersModulo operator with negative values

相关问题