2014-11-27 6 views
0

Verilog에서 부호있는 부동 소수점을 부호있는 24 비트 이진 값으로 변환하려고합니다. 예 :Verilog 부동 소수점 - 이진 변환

-0.0065 would become: 24'b100000000110101001111110 
0.0901 would become: 24'b000001011100010000110010 

이 맞습니까?

잘라낼 수있다 (수학 사용

루비 구문 및 붙여 는

+0

부동 소수점 형식이란 무엇입니까? –

답변

0

소수 소수 0.0901 촬영 2 정수 비트 및 22 분수 비트 (24 비트 전체)과 고정 소수점 값으로 변환 감사 IRB (대화 형 루비) 명령 줄 도구)로 :

i = (0.0901 * 2**20) # 377906.7904 
# truncat to integer value 
i = i.to_i # 377906 

# Convert to string using binary (base 2) 
i.to_s(2) # "1011100010000110010" 

는 앞에 0을 추가하려면 (24 비트 길이) 오른쪽 정당화 0의

i.to_s(2).rjust(24, '0') # "000001011100010000110010" 

# Convert to Hex (base 16) 
i.to_s(16) # "5c432" 
와 패드

(0.0065 * 2**22).to_i.to_s(2).rjust(24, '0') 
=> "000000000110101001111110" 

의 보수가

"000000000110101001111110" 
"111111111001010110000001" # Ones complement (bit invert) 
"111111111001010110000001" + 1 
"111111111001010110000010" #Twos complement 

당신은 MSB와 단지 양수이다 24'b100000000110101001111110했다 보완 : 617,451,515,

서명 숫자는 가장 쉬운 방법은 다음의 보수를 수행 양의 값을 계산하는 것입니다, 좀 더 문제가있다 1으로 설정하면 서명 된 숫자가 정상적으로 작동하지 않습니다. 사용 된 형식은 Sign Magnitude이지만, 이전 질문에 따라 승수에 피드를 제공 할 수는 없습니다.

NB : 또한 고정 소수점으로 변환하는 양자화 효과를 건너 뛰었습니다. 분수 비트로 스케일 된 계수는 377906.7904입니다. 하지만 정수 부분을 취하여 0.7904이라는 오류를 제공하므로 필터 성능에 영향을 미칠 수 있습니다.

관련 문제