하드웨어에서 IEEE 754 부동 소수점 제거를 구현하는 방법은 무엇입니까?
분명해야 할 점 : IEEE 754는 HW가 빼기를 수행하는 방법을 지시하지 않으며 결과는 반드시 2 개의 입력과 반올림 모드로 주어집니다. HW는 중간에 검은 색 상자가 있으며 miracle occurs입니다.
샘플 HW 차감 알고리즘 :
가 가정 N=8
유효수 비트, a b
대한 동일한 기호 (다른 용도 첨가) 및 |a| >= |b| > 0
(다른 스왑 피연산자). 비트 x
은 0 또는
1.xxxxxxx e AA
- 1.xxxxxxx e BB
사용 N+2
폭 레지스터 1입니다. 필요한 교대는 AA - BB
입니다. 이 전환은 N+2
레지스터에 b
비트 중 일부를 남기고 일부는 "오른쪽"으로 남겨 둡니다. xxx
에서
1.xxxxxxx_00 e AA
- 0.00001xx_xx xxx e AA
설정, 밖으로 이동 "비트 C를 빌려"입니다에 그들 1 항?
c <-- Initial borrow bit
1.xxxxxxx_00
- 0.00001xx_xx
이제 일반적인 방식으로 뺄셈을 수행합니다.
기능 설명을 쉽게하기 위해 HW가 하나의 공통 경로를 사용하더라도 초기 시프트/시프트 없음 2 가지 경우를 고려하십시오.
// Result with no shift. Initial borrow bit 'c' is then zero.
0.1111111_00 Max value
0.0000000_00 Min-value (a == b)
결과
왼쪽 시프트 리드 비트까지 감소 지수는 감산
정확한 1.이다. 0 결과는 특별히 처리됩니다 (표시되지 않음).'C'를 이동과 케이스 (2)에서
는 결과가 왼쪽으로 이동되고, 지수 감소, 0 또는
// Result with shift
1.1111110_11 Max value.
0.1111111_1x Lowest-values.
선두 비트가 0이면 1이다. N+1
레지스터 대신 N+2
이 반올림 (아래)을 올바르게 수행하도록하는 가장 낮은 값의 하위 사례입니다.
이제 반올림이 발생합니다. 처음에 s
과 c
비트는 새로운 것입니까? C
을 형성하기 위해 or'ed (하나입니까?)입니다. 다양한 rounding modes은 무한대 방향으로 위, 아래, 자르기를 좋아하고 인기있는 "동등한 관계로 가장 가까운 둥근"은 부호 o
, r
및 C
에서 전적으로 추론 할 수 있습니다. r
및 C
이 0 일 때 결과는 정확합니다.
o rs c
1.xxxxxxx_xx c
-->
1.xxxxxxx_x C
이제 라운드 비트 R
을 추가하십시오.
1.xxxxxxx
0.000000R
이 합계는 10.0000000
이 될 수 있습니다. 결과가 오른쪽으로 이동하고 지수가 증가합니다.
소프트웨어로 수행하는 방법을 알면 ** 하드웨어로 변환 할 수 있습니다. 이것은 단순한 것이 아니라는 점에 유의하십시오. 소프트웨어로도 하드웨어에서 혼자만의 권리를 얻는 것은 매우 복잡합니다. –
아무 문제가 하드웨어 또는 소프트웨어에 관한 것이 아니라 구현하는 방법에 문제가 있습니다. 그러나 HW 단어를 사용하여 'C'또는 'C++'프로그램에 대해 말하는 것이 아닙니다. 나는 XOR, AND, NOT 등의 로직을 처음부터 구현하는 것에 대해 이야기하고있다. –
다음과 같은 지시를 배제하더라도 사소한 것은 아니지만 소프트웨어 (기계 코드)에서 수행 가능하다. 'DIV' 또는'MUL'. 기존 도서관이 있습니다. –