2017-02-27 175 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