2017-11-09 13 views
2

한 고정 소수점 표현에서 다른 고정 소수점 표현으로 숫자를 변환하려고합니다. 나는 2의 보수 표현 (Qmf 표현)을 사용하고있다. 이것은 하드웨어 구현을 검증하기위한 것이다. 하드웨어 구현은 다음과 같이 작동합니다.두 고정 소수점 표현 사이의 변환

입력 데이터는 Qmf 형식입니다. 입력 데이터의 폭은 8 비트이며 6 비트의 길이가 있습니다. 4 소수 비트 (정수 비트 없음) 4 비트 숫자로 변환 할 싶습니다 및 동일한 몇 가지 의심이 있습니다. I를 :

은 내가 {범위 [-2,1.984375]} 형식 Q04에 Q26에서 1.984375 같은 숫자로 변환하려고 할 때 {범위는 [-0.5,0.4375]} 형식, 하드웨어 구현은 다음 실행되는 것으로 나타났습니다 비트 6 & 7이 정수 부분에 사용되고 4 비트 레지스터에 저장되므로 비트 5-2를 읽습니다. 따라서이 값은 Q04 형식으로 변환 될 때 -0.5로 해석됩니다. -0.5가 맞습니까? 발생한 오류의 양은 엄청난 것 같습니다. 내가 뭔가 잘못하고 있는거야? 위에서 언급 한 접근 방식이 올바른 경우. 위에 설명 된 하드웨어 접근 방식을 모방 한 소프트웨어에서 하나의 고정 소수점 표현을 다른 고정 소수점 표현으로 변환하는 표준 절차가 있습니까? 나는 숫자를 Q26 표현에서 부동 소수점으로 변환하고이를 다시 고정 소수점으로 변환하는 것을 고려하고 있습니다. 소프트웨어로 이것을 수행하는 더 깨끗한 방법이 있습니까?

+0

Q26 번호가 Q04 형식으로 저장할 수있는 최대 값보다 크기 때문에 변환은 오류 (오버플로)를보고하거나 가능한 최대 값을 반환해야합니다. – 1201ProgramAlarm

+0

Q0.4 형식은 [range -0.5 .. + 0.4375] 또는 unsigned [0..0.9375]로 서명됩니까? – NickJH

+0

서명 된 표현을 사용하고 있습니다. – a220599

답변

0

나는 간단한 비트 마스킹 작업과 조금의 로직으로 변환을 할 수 있다고 생각한다.

Q26 번호가 양수 (예 : 비트 7이 0)이면 비트 6이 0 인 경우 해당 Q04 번호는 원래 숫자의 비트 2에서 비트 5가됩니다. 이것은 원래 숫자가 1보다 작아야 함을 의미합니다.

Q26 번호가 음수 인 경우 (즉, 비트 7이 하나 인 경우) 해당 Q04 번호는 비트 2에서 비트 5 또는 원래 번호이지만 다시 비트 6이 하나이면 해당 번호가됩니다 비트 2-5의 적어도 0이 아닌 비트에있다. 이것은 원래 숫자가 마이너스 1보다 커야 함을 의미합니다.

각 경우에비트를 무시할 때 반올림 오류가 발생합니다. Q04 번호의 최하위 비트에 1을 더하거나 감하여 계정 할 수 있습니다. 분명히 여분의 산술 연산이 필요하며 Q04 번호의 허용 범위를 넘을 위험이 있습니다.

파이썬에서 이것을 실험하고 싶다면 spfpm과 같은 라이브러리를 사용해 볼 수 있습니다.