2017-02-27 1 views
0

Verilog에서 % 연산자의 범위는 무엇입니까? C에서 나는 숫자 % 10을 쓰면 출력이 0과 9 사이임을 안다.하지만 Verilog에서 시도해 보았는데 결과는 -9와 9 사이에 있는가? 왜 그런가요? 명확의 Verilog의 IEEE 표준에 명시된 바와 같이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

계수가 음수를 반환 할 수 있습니다 1,364에서 2,001 사이 § 4.1.5 산술 연산자뿐만 아니라 SystemVerilog에의 IEEE Std 1800-2012 § 11.4.3 산술 연산자

모듈러스 연산의 결과는 첫 번째 피연산자의 부호를 취한다.

두 LRM (Language Reference Manual)도 예제를 제공합니다.

양수를 보장하려면 $unsigned()을 사용할 수 있습니다. 예 : SystemVerilog를을 사용하는 경우

a = $unsigned($random) % 10; 

, 당신은 $urandom$unsigned($random)를 교체하거나 $urandom_range(9, 0)$unsigned($random) % 10를 대체 할 수있다; IEEE Std 1800-2012 § 18.13 난수 시스템 기능 및 방법


참조 참고 : C/C++ 음수와 동일하지 않습니다. 이전 답변 질문을 참조하십시오 : Modulo operation with negative numbersModulo operator with negative values