2016-06-17 3 views
0

나는 Verilog 언어를 연구 중이며 문제에 직면 해있다.Verilog operation unexpected exclusion 결과

integer intA; 
... 
intA = - 4'd12/3; // expression result is 1431655761. 
        // -4’d12 is effectively a 32-bit reg data type 

표준에서 가져온이 스 니펫은 우리의 마음을 날려 버렸습니다. 표준에 따르면 4d12 -은 4 비트 숫자 입니다. Then -4d12 = . 이제 괜찮아.

나누기를 수행하려면 숫자를 같은 크기로 가져와야합니다. 4 ~ 32 비트. 비트 수는 -4'd12 - 부호가 없으므로 32'b0000 ... 0100과 같아야하지만 32'b1111 ... 10100과 같습니다. 괜찮지 만 다음 단계.

분단

내 버전 : -4d12/3 = 32'b0000 ... 0100/0011 ... 32'b0000 = 1

의 standart 버전 - 4'd12/3 =

아무도 말할 수 있습니까? 왜 4 비트 숫자가 여분의 비트를 유지합니까?

답변

4

섹션을 읽어야합니다. 11.8.2 1800-2012 LRM의 표현식을 평가하는 단계입니다 (). 당신이 놓치고있는 핵심 부분은 피연산자가 4'd12이고 단 하나의 - 연산자가 적용되기 전에 32 비트의 부호없는 값으로 크기가 정해져 있다는 것입니다. 당신이 서명으로 처리 된 4 비트 값을 원하는 경우에

-3, 당신은

intA = - 4'sd12/3 // result is 1 
를 작성해야