2017-11-21 22 views
2

구글을 찾고 행운을 빌어 내가 찾는 것을 찾는다. 하드웨어에서 IEEE 754 부동 소수점 제거를 구현하는 방법은 무엇입니까?

은 기본 2 년이 두 숫자를 상상해

A = 1.0001 * e-4 
B = 1.001 * e-6 


그래서 우리가 같은 지수를 가지고, 바로 2END를 한 2 비트를 이동해야하는이 두 숫자를 뺍니다. 그래서 지금 우리는이 :

A = 1.0001 * e-4 
B = 0.001001 * e-4 


지금 우리 지수는 동일하며 우리는 의미 significands에 대한 뺄셈을 수행해야합니다

1.000100 
- 0.001001 
---------- 
    0.111011 


그런 다음 우리는 결과에 정상화 및 반올림 공정을한다. 인간으로서 우리는이 뺄셈을 다루는 방법을 알고 있지만, HW는 어떨까요? 음수를 만들기위한 특별한 알고리즘을 사용합니까? B (정수에 대해 2의 보수와 같은 알고리즘)? 이 질문은 A+B을 수행하려고 할 때도 유효하지만 B은 음수입니다.

+0

소프트웨어로 수행하는 방법을 알면 ** 하드웨어로 변환 할 수 있습니다. 이것은 단순한 것이 아니라는 점에 유의하십시오. 소프트웨어로도 하드웨어에서 혼자만의 권리를 얻는 것은 매우 복잡합니다. –

+0

아무 문제가 하드웨어 또는 소프트웨어에 관한 것이 아니라 구현하는 방법에 문제가 있습니다. 그러나 HW 단어를 사용하여 'C'또는 'C++'프로그램에 대해 말하는 것이 아닙니다. 나는 XOR, AND, NOT 등의 로직을 처음부터 구현하는 것에 대해 이야기하고있다. –

+0

다음과 같은 지시를 배제하더라도 사소한 것은 아니지만 소프트웨어 (기계 코드)에서 수행 가능하다. 'DIV' 또는'MUL'. 기존 도서관이 있습니다. –

답변

1

하드웨어에서 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이 반올림 (아래)을 올바르게 수행하도록하는 가장 낮은 값의 하위 사례입니다.


이제 반올림이 발생합니다. 처음에 sc 비트는 새로운 것입니까? C을 형성하기 위해 or'ed (하나입니까?)입니다. 다양한 rounding modes은 무한대 방향으로 위, 아래, 자르기를 좋아하고 인기있는 "동등한 관계로 가장 가까운 둥근"은 부호 o, rC에서 전적으로 추론 할 수 있습니다. rC이 0 일 때 결과는 정확합니다.

  o rs c 
    1.xxxxxxx_xx c 
    --> 
    1.xxxxxxx_x C 

이제 라운드 비트 R을 추가하십시오.

1.xxxxxxx 
    0.000000R 

이 합계는 10.0000000이 될 수 있습니다. 결과가 오른쪽으로 이동하고 지수가 증가합니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 저는 여전히 뺄셈 단계를 어떻게 수행했는지 이해하지 못했습니다. 음수를 만들기 위해 2의 보수와 같은 알고리즘을 사용 했습니까? 이것은 정확하게 이해할 수없는 나의 문제입니다. 고마워. –

+1

@MA'a-b'를 사용하면 FP는 [sign magnitude] (https://en.wikipedia.org/wiki/Signed_number_representations)를 사용하므로 1 비트를 변경하여 값의 부호를 변경하는 것이 간단합니다. 피연산자 기호가 일치하지 않으면'b'를 무효화하고 추가 루틴/HW를 호출하십시오. 피연산자가'a chux