KR0139733B1 - 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법 및 장치 - Google Patents
부동 소수점 덧셈/뺄셈 연산기의 반올림 방법 및 장치Info
- Publication number
- KR0139733B1 KR0139733B1 KR1019940009331A KR19940009331A KR0139733B1 KR 0139733 B1 KR0139733 B1 KR 0139733B1 KR 1019940009331 A KR1019940009331 A KR 1019940009331A KR 19940009331 A KR19940009331 A KR 19940009331A KR 0139733 B1 KR0139733 B1 KR 0139733B1
- Authority
- KR
- South Korea
- Prior art keywords
- rounding
- value
- bit
- subtraction
- addition
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
- G06F7/49947—Rounding
- G06F7/49957—Implementation of IEEE-754 Standard
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Nonlinear Science (AREA)
- Complex Calculations (AREA)
Abstract
본 발명은 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법 및 장치에 관한 것으로서, 이는 부동 소수점 덧셈/뺄셈 연산 처리과정인 지수정렬, 덧셈/뺄셈 연산, 정규화, 반올림의 4과정에서 덧셈/뺄셈 연산과 반올림을 동시에 수행함으로써 부동 소수점 덧셈/뺄셈 연산을 3과정에 수행할 수 있도록 한 것이다.
이와같이 본 발명은 입력되는 두 피연산자의 지수부를 비교하여 지수부의 차이만큼 분수부를 정렬하는 데이타 정렬수단과, 상기데이타 정렬수단에서 정렬된 분수부를 가지고 덧셈과 뺄셈을 연산하고 반올림을 동시에 처리하여 그 값들을 선택 출력하는 덧셈/뺄셈 및 반올림수단과, 상기 덧셈/뺄셈 및 반올림수단에서 연산된 덧셈/뺄셈의 결과값과 반올림된 값을 정규화하여 최종 연산출력을 얻는 정규화수단으로 이루어짐으로써, 달성되는 것이다.
Description
제1도는 부동 소수점 수의 표현에서 IEEE 표준안인 단정밀도 포맷도
제2도는 부동 소수점 수의 표현에서 IEEE 표준안인 배정밀도 포맷도
제3도는 정규화된 피연산자가 IEEE표준안에서 단정밀도 형식이고 8비트 만큼 하위비트쪽으로 이동했을 때 가드비트, 라운드비트, 스티키비트의 예시도.
제4도는 종래의 부동 소수점 연산기의 구성을 개략적으로 나타낸 블록도.
제5도는 종래의 반올림 처리를 예상한 부동 소수점 연산기의 구성을 개략적으로 나타낸 블록도.
제6도는 종래의 부동 소수점 연산기의 정규화 및 반올림 처리기를 개략적으로 나타낸 블록도.
제7도는 본 발명 부동 소수점 덧셈/뺄셈 연산기의 구성도.
제8도는 제7도의 반올림 결정부 보다 상세하게 도시한 회로도.
제9도는 제7도의 반올림 쉬프트값 결정부를 보다 상세하게 도시한 회로도.
제10도는 본 발명에 따른 가까운쪽으로의 반올림일 때 반올림 증가비트와 반올림 제어값을 보인 테이블도.
제11도는 본 발명에 따른 0으로의 반올림시 반올림 증가비트와 반올림 제어값을 보인 테이블도.
제12도는 본 발명에 따른 양의 무한대로의 반올림시 반올림 증가비트와 반올림 제어값을 보인 테이블도로서,
(a)는 뺄셈 연산시 부호비트가 0일 경우이고, (b)는 뺄셈 연산시 부호비트가 1일 경우이다.
*도면의 주요부분에 대한 부호의 설명
300:데이타 정렬수단301:덧셈/뺄셈연산 및 반올림 수단
302:정규화수단300a:지수비교부
300b:제1스웨퍼300c:분수정렬부
300d:제1배타적 오아게이트300f:반가산 로직부
300g:제1지수부 덧셈기301a:제1분수부 덧셈기
301b:제2분수부 덧셈기301c:제1배타적 오아게이트
301e:제1멀티플렉서301f:반올림 결정부
302a:반올림 쉬프트값 결정부302b:반올림 보충부
302c:제로판독 카운터부301f:분수정규화부
본 발명은 부동 소수점 덧셈/뺄셈 연산기에 관한 것으로, 특히 부동 소수점 덧셈/뺄셈 연산 처리과정인 지수정렬(Alignment), 덧셈/뺄셈 연산, 정규화(Normalization), 반올림(Rounding)의 4과정에서 덧셈/뺄셈 연산과 반올림을 동시에 처리하여 부동 소수점 덧셈/뺄셈 연산과 반올림, 정규화인 3과정의 파이프라인(Pipeline)으로 처리하도록 하는 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법 및 장치에 관한 것이다.
일반적으로, 부동 소수점 연산기(Floating Point Unit)는 그래픽 가속도(graphic accelerlator), 디지탈 신호 처리기(DSP : Digital Signal Processor) 및 고성능을 요하는 컴퓨터에 필수적으로 사용되고 있다.
이와같은 부동 소수점 연산기는 반도체 분야의 발전으로 칩(chip)의 집적도가 증가함에 따라서 중앙처리장치(CPU:Central Processing Unit)와 함께 한 칩에 내장할 수 있게 함으로써, 보조적인 기능을 넘어서 주 연산기의 중요한 요소로 등장하고 있다.
상기 중앙처리장치에 내장되는 경우 차지하는 면적으로 인하여 보통 덧셈/뺄셈, 곱셈 등의 기본적인 연산기만 내장되며, 다른 연산은 소프트웨어적으로 처리된다.
따라서, 부동 소수점 덧셈/뺄셈 연산기는 전체 부동 소수점 연산에 큰 영향을 미치게 된다.
그리고, 상기 부동 소수점 덧셈/뺄셈 연산 처리과정인 지수정렬, 덧셈/뺄셈 연산, 정규화, 반올림의 4과정 중에서, 반올림은 IEEE(Institute of Electrical and Electronic Engineers)에서 지정한 4가지 방법인 가까운 쪽으로의 반올림(Round to Nearest), 0으로의 반올림(Round to Zero), 양의 무한대로의 반올림(Round to Positive Infinitive), 음의 무한대로의 반올림(Round to Negative Infinitive)을 모두 구현한다.
상기 부동 소수점 연산기에 대한 IEEE 표준안에서는 부동 소수점 수를 표현하는데 있어서, 제1도와 같이, 32비트인 단정밀도(single precision) 형식과 제2도와 같이, 64비트인 배정밀도(double precision) 형식이 있다.
상기 단정밀도의 형식은 1비트의 부호비트(s)와 8비트의 지수부(e) 및 23비트의 분수부(f)로 되어 있고, 배정밀도의 형식은 1비트의 부호비트(s)와 11비트의 지수부(e) 및 52비트의 분수부(f)로 되어 있다.
그리고, IEEE 표준안에 따르는 피연산자(A)는 다음과 같이, 표현된다.
즉, A=(-1)s*1.f*2o-bias
상기에서 s는 분수부(f:fraction)에 대한 부호(s:sign)비트이며, f는 절대치 형태의 분수부이며, e는 바이어스(bias)형태의 지수부이다.
상기 부동 소수점 연산기의 대부분은 지수부(e)의 처리를 간단하게 하기 위해서 바이어스 개념을 사용한다.
이 바이어스는 표현된 지수값에 적당한 수를 더하여 지수로 표현 가능한 가장 작은 음수률0(00…0)으로 변형시킨 것을 말한다.
상기 단정밀도 형식에서 바이어스 값은 127이고, 배정밀도 형식에서 바이어스값은 1023이다.
그리고, 본수부(f)의 정규화된 형태는 최상위 비트(MSB : Most Significant Bit)가 1인 상태이며, 부동 소수점 표현에서는 최상위 비트가 생략된다.
또한 IEEE 표준안에서의 올바른 반올림을 위해서 지수부(e) 정렬시 분수부(f)의 데이타 손실에 대한 정보를 갖고 있어야 한다.
이를 위하여 3개의 비트인 가드 비트(G : Guard bit), 라운드 비트(R : Round bit), 스티키 비트(Sy : Sticky bit)가 정의되어 있다.
상기 가드(G) 비트는 최하위 비트(LSB : Least Significant bit)보다 작은 가중치를 가져서 손실되는 정보중에 최상위 비트(MSB)가 되며, 라운드(R) 비트는 가드(G) 비트의 다음 비트가 되며, 스트키(Sy)비트는 손실되는 부분중 상기 가드(G)비트와 라운드(R)비트를 제외한 모든 비트를 논리합한 연산값이다.
상기에서, 가드(G) 비트는 손실되는 정보가 1/2보다 작은지 크거나 같은지를 결정하는 것이다.
그리고, 분수부 뺄셈의 결과 최상위 비트(MSB)가 0이면 상위 비트쪽으로 1비트 쉬프트하게 된다.
이때 가드(G) 비트가 상위 비트쪽으로 쉬프트 되면서 최하위 비트(LSB)가 된다.
따라서, 반올림을 수행하기 위하여 상기 가드(G)비트보다 하나 작은 가중치를 가져서 상위 비트쪽으로 1비트 쉬프트후에 가드(G) 비트 역할을 수행할 비트가 필요하게 되는데, 이것이 라운드(R)비트이다.
즉, 다시 말해 분수부의 뺄셈의 결과 최상위 비트(MSB)가 0일때 상위 비트쪽으로 1비트 쉬프트 되는데 이때 가드(G) 비트는 최하위 비트(LSB)가 되고 라운드(R)비트는 가드(G) 비트가 되어 반올림을 수행한다.
그리고 스티키(Sy) 비트는 가드(G) 비트와 라운드(R) 비트만 가지고 반올림을 할 수 없을때는 라운드(R) 비트보다 가중치가 적은 부분에서의 정보가 필요하는데, 이 정보를 스티키(Sy) 비트가 가지고 있다.
일예로써, 일반적으로 반올림시 가드(G) 비트가 1이고, 라운드(R) 비트가 0이면 이때는 반올림시 올림과 버림이 동등한 오차를 갖게 되므로, 이때에는 스티키(Sy) 비트의 정보를 본다.
즉, 스티키(Sy) 비트가 1이면 버려진 분수부(f)에서 최소 1개가 1임으로 반올림시 올림을 선택한다.
상기에서 전술한 3개의 비트, 즉 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 가지면 IEEE에서 지정한 모든 반올림을 실행할 수가 있다.
도면 제3도는 전술한 바와 같이, 정규화된 피연산자가 IEEE 표준안에서 단정밀도 형식이고 8비트 만큼 하위 비트쪽으로 이동했을때의 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트의 일예를 보인 것이다.
상기한 IEEE표준안에 있어서의 반올림 방식은 가까운쪽으로의 반올림, 0으로의 반올림, 양의 무한대로의 반올림, 음의 무한대로의 반올림인 4가지 반올림 방식을 규정하고 있다.
상기에서 가까운쪽으로의 반올림 방식은 반올림 대상이 양쪽으로 똑같이 가까운 경우에 최하위 비트(LSB)가 0이 되도록 반올림하는 방식으로써, 상기 4가지 반올림 방식중에서 가장 많이 사용되는 방식이며, 이 방식이 구현되어지면 다른 반올림 방식은 이 방식을 응용하여 구현할 수가 있다.
그리고, 상기 0으로의 반올림 방식은 0(Zero)을 향하여 반올림하는 방식으로써, 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트에 관계없이 반올림시 버림이다.
그리고, 상기에서 양의 무한대로의 반올림 방식은 양의 무한대를 향하여 반올림을 하는 것으로, 이는 반올림 하고자 하는 수가 양수이고 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트중에 최소 1개의 비트가 1이면 반올림을 하는 방식이다.
마지막으로, 상기 음의 무한대로의 반올림 방식은 음의 무한대를 향하여 반올림을 하는 것으로, 이는 반올림 하고자 하는 수가 음수이고 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트중에 최소 1개의 비트가 1이면 반올림을 하는 방식이다.
전술한 IEEE 표준안에서 제시한 4가지 반올림 방식을 알고리즘으로 표현하면 하기와 같다.
① 가까운 쪽으로의 반올림에 있어서, 만약 가드(G) 비트가 0이면 버리고, 아니고 만약 라운드(R) 비트가 1 혹은 스티키(Sy) 비트가 1이면 올림하고, 아니고 만약 최하위 비트가(LSB)가 0이면 버리고, 상기 모든 조건이 아니면 올림한다.
② 0으로의 반올림에 있어서는 버린다.
③ 양의 무한대로의 반올림에 있어서, 만약 부호비트(S)가 0이고, 만약 가드(G) 비트, 또는 라운드(R) 비트, 스티키(Sy) 비트가 1이면 올림하고, 아니면 버림하며, 상기 모든 조건이 아니면 버림한다.
④ 음의 무한대로의 반올림에 있어서, 만약 부호비트(S)가 1이고 만약 가드(G) 비트, 또는 라운드(R) 비트 또는 스티키(Sy) 비트가 1이면 올림하고, 아니면 버림한다. 상기 모든 조건이 아니면 버림한다.
그리고, 상기 IEEE표준안에서의 부동 소수점 덧셈/뺄셈 연산기는 전술한 바와 같이, 지수정렬, 덧셈/뺄셈 연산, 정규화, 반올림인 4과정을 거친다.
여기서, 두 피연산자는 양수라 한다.
즉, 부호 비트(S)가 0이다.
일예로써, 상기 피연산자가 A가 양수이고 피연산자가 B가 음수이면 A와 B의 덧셈 연산은 B가 음수임으로 결국 A와 양수 B의 뺄셈 연산이 된다.
첫째로 상기 지수정렬 단계는 다음 두가지로 구성된다.
① 두 연산자의 지수부(e)를 비교하여 그 차이를 계산하고, 비교된 지수부중에 큰쪽을 다음 단계로 넘겨준다.
② 작은 지수부(e)를 갖는 피연산자의 분수부(f)를 상기 단계 ①에서 계산한 차이만큼 하위 비트쪽으로 쉬프트한다.
이때 반올림을 위한 판단 자료인 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트가 생성된다.
둘째로 상기 덧셈/뺄셈 연산 단계는 다음 두가지로 구성된다.
③ 분수부(f)에 대한 연산을 수행한다.
뺄셈시 2의 보수형태로 계산한다.
④ 연산의 결과가 음수이면 양수로 바꾼다.
여기서, 뺄셈의 경우 뺄셈 연산후 결과값이 음수가 되면 결과 값을 다시 절대치 값으로 변환을 해야 한다.
셋째로 상기 정규화 단계는 다음 두가지로 구성된다.
⑤ 뺄셈시 연산의 결과에서 선행 0의 수를 계산한다.
⑥ 정규화를 수행한다.
이는 덧셈의 경우 오버플로우(overflow)신호의 캐리(carry)가 생겼을 때 하위 비트쪽으로 1비트 쉬프트하고 지수부(e)에 1을 더한다.
뺄셈의 경우 연산이 수행된 분수부(f)를 선행 0 수만큼 상위 비트쪽으로 쉬프트하고, 지수부에서 선행 0수만큼을 뺀다.
넷째로 반올림 단계는 다음 두가지로 구성된다.
⑦ 상기 지수정렬 단계에서 얻어진 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트의 정보를 가지고 정규화된 결과값에 반올림을 수행한다.
⑧ 반올림한 결과에서 오버플로우(overflow)가 생기면 다시 정규화 한다.
즉, 분수부(f)는 하위 비트쪽으로 1비트 쉬프트하고 지수부(e)는 1만큼 증가된다.
상기 부동 소수점 덧셈/뺄셈 연산기에서 덧셈/뺄셈 연산의 특성을 살펴보면 먼저, IEEE 표준안에 의하면 부동 소수점 수치의 분수부는 절대치 값을 나타낸다.
따라서, 덧셈의 경우 보통의 덧셈과 같이 두 개의 분수부를 더하면 된다.
그러나, 뺄셈의 경우 뺄셈 연산후 결과값이 음수가 되면 결과 값을 다시 절대치 값으로 변환을 해야 한다.
이는 수의 표현이 2의 보수 임으로 음수를 절대치 값을 만들기 위해 반전기와 증가기가 필요하게 되는데 증가기는 칩 면적이나 처리 속도면에서 볼 때 하나의 덧셈기와 큰 차이가 없다.
따라서, 면적이 커지고 증가기가 연산용 덧셈기와 직렬로 연결되게 되므로 처리시간이 길어지는 문제점이 있었다.
제4도는 종래 부동 소수점 덧셈/뺄셈 연산기를 덧셈/뺄셈의 특성을 이용하여 변형한 것이다.
먼저, 덧셈/뺄셈의 특성을 살펴보고, 그 다음에 이것을 이용한 부동 소수점 덧셈/뺄셈 연산기를 살펴보면 다음과 같다.
제4도의 부도 소수점 덧셈/뺄셈 연산은 지수정렬과, 덧셈/뺄셈 연산, 절대값 계산, 정규화과정, 반올림 및 오버플로우(overflow) 처리인 6가지 과정으로 나눌수 있다.
상기 덧셈/뺄셈 연산과정에서의 덧셈시에는 두 피연산자의 지수부가 같을때는 덧셈의 결과가 양수임으로 지수정렬, 덧셈연산, 정규화, 반올림 및 오버플로우 처리로 부동 소수점 뺄셈 연산을 수행할 수 있다.
뺄셈시에는 두 피연산자의 지수부가 같을때는 반올림시 필요정보인 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트가 모두 0임으로 지수정렬, 뺄셈연산, 절대값 계산, 정규화 만으로 부동 소수점 뺄셈 연산을 수행할 수 있다.
지수부의 차이가 있을 때 뺄셈 수행시 큰수에서 작은수를 빼는 구조에서는 뺄셈의 결과가 양수이다.
따라서, 두 피연산자의 지수부가 다를때는 덧셈/뺄셈의 결과가 양수임으로 지수정렬, 덧셈/뺄셈 연산, 정규화, 반올림, 오버플로우 처리로 부동 소수점 덧셈/뺄셈 연산을 수행할 수 있다.
제4도는 종래의 부동 소수점 연산기의 구성을 개략적으로 나타낸 블록도로서, 다음 네가지의 과정을 통해 부동 소수점 덧셈/뺄셈 연산이 이루어진다.
즉, 두 개의 바이어스된 지수부의 값을 비교하여 그차를 계산하고 여기에서 얻어진 작은 지수부를 가지고 있는 두 피연산자의 분수부를 최하위 비트 방향으로 지수부의 차이만큼 이동시켜 정렬시키는 데이타 정렬수단(10)과, 상기 데이타 정렬수단(10)에서 얻어진 두 피연산자를 가산 및 감산하고 분수부의 뺄셈시 음수일 때 양수로 만들어주는 덧셈/뺄셈 연산수단(11)과, 상기 덧셈/뺄셈 연산수단(11)에서의 덧셈시 분수부의 오버플로우가 발생하게 될시에 분수부를 하위 비트쪽으로 이동시키고 뺄셈에서 선행하는 0이 발생할 때 그 갯수만큼 분수부를 상위비트쪽으로 이동시키고 지수부를 조정하며, 상기 분수부의 이동을 위하여 쉬프터를 포함하는 정규화 수단(12)과, 상기 정규화수단(12)을 통해 정규화된 분수부의 최하위 비트(LSB), 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 가지고 반올림을 수행하고 상기 반올림 처리로 인해 발생하는 넘침(overflow)이 생길 경우에 대한 1비트 정규화를 하는 반올림수단(13) 및 오버플로우 처리수단(14)으로 구성되어 있다.
상기에서 데이타 정렬수단(10)은 각기 부호비트(S1)(S2), 지수부(e1)(e2), 분수부(f1)(f2)를 갖는 두 개의 부동 소수점 수를 저장하고 있는 제1, 제2레지스터(40)(41)와, 상기 제1레지스터(40)의 지수부(e1)에서 제2레지스터(41)의 지수부(e2)를 감산하여 차신호(ed)와 발림수(borrow)신호(eb) 및 상등(相等 : equality) 신호(ez)를 발생하는 제1서브트랙트(42)와, 상기 제1서브트랙트(42)에서 발생된 빌림수신호(eb)에 따라 제1레지스터(40)에서 제공되는 지수부(e1) 또는 제2레지스터(41)에서 제공되는 지수부(e2)를 선택하여 출력하는 제1멀티플랙서(43)와, 상기 제1서브트랙터(42)에서 발생된 빌림수신호(eb)에 따라 제1레지스터(40)에서 제공되는 분수부(f1) 또는 제2레지스터(41)에서 제공되는 분수부(f2)를 선택하여 출력하는 제2멀티플렉서(44)와, 상기 제2멀티플랙서(44)에서 선택되어 제공되는 분수부 f1 또는 f2를 상기 제1서브트랙트(42)에서 발생되는 차신호(eb)만큼 자리 이동시키는 제1쉬프트(45)와, 상기 제1서브트랙트(42)에서 발생된 올림수신호(eb)에 따라 제1레지스터(40)에서 제공되는 분수부(f1) 또는 상기 제1쉬프트(45)의 출력값을 선택하여 출력하는 제3멀티플렉서(46)와, 상기 제1서브트랙트(42)에서 발생되는 올림수신호(eb)에 따라 상기 제1쉬프터(45)에서 제공되는 출력값 또는 제2레지스터(41)에서 제공되는 분수부(f2)를 선택하여 출력하는 제4멀티플랙서(47)로 구성되어 있다.
그리고, 상기에서 덧셈/뺄셈 연산수단(11)은 상기 입력되는 산술모드(ARITHMETIC MODE)에 따라 메인 콘크롤회로부(61)에서 발생되는 제어신호(CPL1) (CPL2)를 받아 각각 상기 제3, 제4멀티플랙서 (46)(47)에서 선택되어 입력되는 출력값을 반전시키는 제1, 제2반전기(48)(49)와, 상기 제1, 제2반전기(48)(49)에서 반전되어 얻어진 값을 가산하는 제1덧셈기(50)로 구성되어 있다.
또한 상기에서 정규화수단(13)은 상기 제1덧셈기(50)의 결과에서 정규화를 위한 비트수를 계수하는 카운터(51)와, 상기 카운터(51)의 계수값 만큼 제1덧셈기(50)의 출력값을 쉬프트하여 반올림에 필요한 정보인 최하위 비트(LSB), 가드(G) 비트, 라운드(R), 비트 스티키(Sy) 비트를 발생하는 제2쉬프트(52)와, 상기 제1멀티플렉서(43)에서 선택된 제1, 제2레니스터(40)(42)의 지수부(e1)(e2)를 카운터(51)의 계수값 만큼 감산하는 제2서브트랙트(53)로 구성되어 있다.
상기에서 반올림수단(13)은 상기 제2쉬프터(52)에서 반올림에 필요한 정보인 최하위 비트(LSB), 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 메인콘트롤 회로부(61)의 제어신호에 따라 반올림을 수행하는 반올림 제어기(54)와, 상기 메인콘트롤 회로부(61)의 제어신호(CPL3)에 따라 상기 제2쉬프터(52)에서 발생되는 출력값을 반전시키는 제3반전기(55)와, 상기 메인콘트롤 회로부(61)에서 발생되는 제어신호(CPL3)에 따라 상기 반올림 제어기(54)의 출력 결과값과 제2쉬프터(52)의 최하위 비트(LSB)를 선택하여 출력하는 제5멀티플렉서(56)와, 상기 제3반전기(55)의 출력값과 제5멀티플렉서(56)에서 선택된 결과값과를 가산하는 제2덧셈기(57)로 구성되어 있다.
오버플로우 처리수단(14)은 상기 제2덧셈기(57)의 출력값이 오버플로우인지를 감지하는 오버플로우 감지기(58)와, 상기 오버플로우 감지기(58)에서 감지된 결과에 따라 제2덧셈기(57)로부터 출력된 결과값을 쉬프트시키는 제3쉬프트(59)와, 상기 오버플로우 감지기(58)에서 감지된 결과에 따라 상기 제2서브트랙트(53)의 출력값을 증가시키는 증가기(60)로 구성되어 있다.
이와같이, 구성된 종래의 부동 소수점 연산기는 면저, 부호비트(s1)(s2)와 지수부(e1)(e2), 분수부(f1)(f2)를 갖는 두 개의 부동소수점이 저장되어 있는 제1, 제2레지스터(40)(41)로 부터의 지수부(e1)(e2)가 출력되면, 테이타 정렬수단(10)의 제1서브트랙터(42)는 제1레지스터(40)의 지수부(e1)에서 제2레지스터(41)의 지수부(e2)를 빼고, 그 차이인 신호(ed)와 올림수신호(ed), 상등신호(ez)를 발생한다.
상기 제1서브트랙트(42)에서 발생된 올림수신호(eb)는 지수부(e1)가 지수부(e2)보다 크거나 같을 때 0이 되고, 그 반대이면 1이되어 제1내지 제4멀티플랙서(43)(44)(46)(47), 메인콘트롤 회로부(61)에 입력된다.
상기 제1멀티플랙서(43)는 제1서브트랙트(43)로부터 발생된 올림수신호(eb)가 0일 때 제1레지스터(40)에서 제공된 지수부(e1)를 선택하여 출력하고, 올림수신호(eb)가 1일때는 제2레지스터(41)에서 제공된 지수부(e2)를 선택하여 정규화수단(1)의 제2서브트랙트(53)에 제공하게 된다.
따라서 상기한 제1멀티플랙서(43)는 지수부가 큰쪽을 선택받게 된다.
그리고, 상기 제2멀티플랙서(44)는 상기 제1서브트랙트(42)에서 발생된 올림수신호(eb)가 1일때는 제1레지스터(40)의 분수부(f1)를 선택하여 출력하고 올림수신호( eb)가 0일때는 제2레지스터(41)의 분수부(f2)를 선택하여 제1쉬프트(45)에 제공하게 된다.
따라서, 상기 제2멀티플랙서(44)는 지수부가 작은쪽의 분수부를 선택받게 된다.
상기 제1쉬프트(45)는 제2멀티플렉서(44)로부터 선택되어 입력된 분수부를 제1서브트랙트(42)에서 발생된 차신호(ed) 만큼 왼쪽으로 쉬프트하여 각각 제3, 제4멀티플랙서(46)(47)에 제공하게 되고, 상기 제3멀티플렉서(46)는 제1서브트랙트(42)에서 발생된 올림수신호(eb)가 0일때 제1레지스터(40)의 분수부(f1)를 선택하여 덧셈/뺄셈 연산수단(11)의 제1반전기(48)에 입력하고 올림수신호(eb)가 1일때는 제1쉬프터(45)에서 쉬프트된 출력값을 선택하여 제1반전기(48)에 입력하게 된다.
그리고, 상기 제4멀티플랙서(47)는 제1서브트랙트(42)에서 발생된 올림수신호(eb)가 0일 때 제1쉬프터(45)에서 쉬프되어 얻어진 출력값을 선택하여 덧셈/뺄셈 연산수단(11)의 제2반전기(49)에 제공하고 올림수신호(ed)가 1일때는 제2레지스터(41)에서 제공된 분수부(f2)를 선택하여 제2반전기(49)에 입력하게 된다.
상기 덧셈/뺄셈 연산수단(11)의 제1, 제2반전기(48)(49)는 메인콘트롤 회로부(61)에서 발생된 제어신호(CPL1)(CPL2)를 받아 상기 제3, 제4멀티플렉서(46)(47)에서 출력된 값을 각각 반전시켜 제1덧셈기(50)에 제공하게 되므로, 그 제1덧셈기(50)에서는 상기 제1, 제2반전기(48)(49)에서 반전된 값을 더하여 정규화수단(12)의 제2쉬프터(52) 및 카운터(51)에 제공함과 아울러 양수 및 음수의 결과를 알리는 제어신호를 제공하게 된다.
상기 정규화수단(12)의 카운터(51)는 상기 제1덧셈기(50)의 결과에서 정규화를 위한 비트수를 계수하게 되는데, 이때, 제1덧셈기(50)로부터 출력되는 수가 양수의 경우에는 오른쪽으로 쉬프트할 수를 계수하고, 음수일 경우에는 왼쪽으로 쉬프트할 수를 계수하여 제2쉬프트(52) 및 제2서브트랙트(53)에 제공하게 된다.
상기 제2쉬프터(52)는 정규화를 수행하는 부분으로써, 제1덧셈기(50)의 결과값에서 카운터기(51)의 출력 계수값 만큼 쉬프트를 수행하여 각각 최하위 비트(LSB), 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 반올림수단(13)의 반올림 제어기(54) 및 제5멀티플렉서(56)에 제공하게 되고, 상기 제2서브트랙트(53)는 지수부를 조정하는 부분으로써 제1멀티플렉서(43)에 선택된 지수부의 결과값을 카운터기(51)에서의 계수한 결과값 만큼 빼주어 그 결과를 오버플로우 처리수단(14)의 증가기(60)에 제공하게 된다.
그리고, 상기 반올림수단(13)의 반올림 제어기(54)는 반올림 모드(ROUND OFF MODE)에 따라 정규화수단(12)의 제2쉬프터(52)에서 반올림에 필요한 정보인 최하위 비트(LSB), 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 받아서 반올림을 수행하여 제5멀티플렉서(56)에 제공하게 되고, 제5멀티플렉서(56)는 메인콘트롤 회로부(61)에서 제공되는 제어신호(CPL3)에 따라 상기 반올림 제어기(54)에서의 결과값과 제2쉬프터(52)에서 발생되는 최하위 비트(LSB)만 1인 수를 선택하여 제2덧셈기(57)에 입력하게 된다.
또한 상기 반올림수단(13)의 제3반전기(55)는 메인콘트롤 회로부(61)에서 제공되는 제어신호(CPL3)에 의해 제2쉬프터(52)로부터 출력되는 값이 음수일 경우에 한해서 반전시켜 제2덧셈기(57)에 입력하게 된다.
상기 제2덧셈기(57)는 제3반전기(55)로부터 제공되는 결과값과 제5멀티플렉서(56)에서 제공되는 결과값을 더하여 제3쉬프터(59)에 제공함과 아울러 오버플로우 감지기(58)에 제공하게 되고, 상기 오버플로우 감지기(58)는 상기 제2덧셈기(57)의 출력값이 오버플로우인지를 감지하여 오버플로우가 발생했으면 상기 제3쉬프터(59)를 제어하게 된다.
즉, 상기 제3쉬프터(59)는 오버플로우 감지기(58)로 부터의 오버플로우가 발생했으면 제2덧셈기(57)로 부터의 결과값을 1비티 왼쪽으로 쉬프트시켜 최종 분수부(f)를 출력하고, 이와 동시에 증가기(60)는 오버플로우가 발생했으면 제2서브트랙트(53)로 부터의 결과값에 1을 증가시켜 최종 지수부(e)를 출력하게 된다.
그리고, 상기 메인콘트롤 회로부(61)는 제1, 제2레지스터(40)(41)의 부호비트(s1)(s2)와, 제1서브태랙트(42)의 올림수신호(eb), 상등신호(ez)와 제1덧셈기(50)의 출력값중 부호비트의 정보를 가지고 제1내지 제3반전기(48)(49)(55)와 제5멀티플렉서(56)를 제어하게 된다.
그러나, 이와 같은 부동 소수점 덧셈/뺄셈 연산기는 부동 소수점 덧셈/뺄셈 연산에 있어서, 지수정렬(데이타 정렬), 덧셈/뺄셈연산, 정규화, 반올림인 4단계로 이루어지며, 반올림을 위하여 궤환하거나 별도의 덧셈기를 필요로 하고, 도한 반올림의 결과로 인한 재정규화가 발생할 수 있는 문제점이 있었다.
그리고, 제5도는 상기 부동 소수점 덧셈/뺄셈 연산기에 제기되는 문제점을 보완하기 위해 반올림을 예상하여 증가기를 사용치 않고 처리속도를 증가시키는 종래 부동 소수점 연산기의 구성을 개략적으로 나타낸 블록도로서, 이에 도시한 바와 같이, 두 피연산자를 저장하고 있는 메모리부(100)와, 데이타 정렬수단으로써, 상기 메모리부(100)에서 제공되는 A, B의 지수부를 비교하여 그 결과를 각각 분리 출력하는 지수비교부(101)와, 상기 메모리부(100)에서 제공되는 두 지수부를 상기 지수비교부(101)에서 얻어진 두 지수부의 차만큼 쉬프트하고 반올림의 판단자료인 가드(G)비트, 라운드(R) 비트, 스티키(Sy) 비트를 발생하는 데이타 정렬수단인 제1가수선택 기억부(102), 상기 지수비교부(101)에서 비교되어 얻어진 결과신호에 따라 메모리부(100)에서 제공되는 두 지수부(A)(B)중에서 지수가 큰쪽의 분수부를 선택하여 저장하는 제2가수선택 기억부(103)와, 상기 제1, 제2가수선택 기억부(102)(103)에서 입력받은 지수값을 감산 또는 가산하고 예상초과 반올림부(105)에서 얻어진 반올림 만큼의 수를 더하거나 빼는 소수점 덧셈부(104)와, 상기 소수점 덧셈부(104)로부터의 오버플로우를 감지하고 여기서 생성된 일부신호를 가지고 반올림을 예상하여 처리하는 예상초과 반올림부(105)와, 상기 소수점 덧셈부(104)에서 계산되어 얻어진 출력값중 최상위 비트(MSB)에서 가드(G) 비트까지의 수를 저장하는 정규화 수단인 덧셈레지스터(106)와, 상기 예상초과 반올림부(105)에서 감지한 오버플로우에 따라 상기 덧셈레지스터(106)에 저장되어 출력되는 값을 계수하는 정규화 수단인 제로판독 카운터부(107)와, 상기 제로판독 카운터부(107)에서 계수한 값 만큼 상기 덧셈레지스터(106)의 출력값을 쉬프트하는 가수정규화 쉬프트 레지스터(109)와, 상기 가수정규화 쉬프트 레지스터(109)의 출력값을 저장하여 분수부의 결과값을 출력하는 가수레지스터(111)와, 상기 예상초과 반올림부(105)의 오버플로우 감지 여부에 따른 제로판독 카운터부(107)의 계수값 만큼 지수비교부(101)의 큰지수값을 증가 또는 감산하여 보정 출력하는 지수보정부(108)와, 상기 지수보정부(108)에서 보정된 지수값을 저장하여 최종의 지수부 결과를 출력하는 지수레지스터(110)로 구성되어 있다.
이와같이, 구성된 부동 소수점 연산기는 먼저, 메모리부(100)에 저장되어 있는 두 피연산자의 지수부(A)(B)를 데이타 정렬수단인 지수비교부(101)에서 비교하여 지수부가 작은쪽의 분수부를 제1가수선택 기억부(102)에 제공하고, 지수부가 큰쪽의 분수부를 제2가수선택 기억부(103)에 제공함과 아울러 지수부중 큰쪽의 지수부를 지수보정부(108)에 제공하게 된다,
상기 제1가수선택 기억부(102)는 메모리부(100)에서 입력되는 두지수부(A)(B)중에서 작은쪽의 지수부를 선택하고 그 선택된 작은쪽의 지수부를 지수비교부(101)로 부터의 두 지수부의 차만큼 오른쪽으로 쉬프트하여 그 값(So-31)을 소수점 덧셈부(104)에 입력하고 반올림의 판단 자료인 촤상위의 가드(G) 비트, 최상위의 라운드(R) 비트, 최상위의 스티키(Sy) 비트를 발생하게 된다.
상기 제2가수선택 기억부(103)는 메모리부(100)에서 입력되는 두 지수부(A)(B)중에서 큰쪽의 지수부를 지수비교부(101)로 부터의 두 지수부의 차만큼 오른쪽으로 쉬프트하여 그 값(Lo-31)을 소수점 덧셈부(104)에 입력하게 된다.
이때, 예상초과 반올림부(105)는 상기 소수점 덧셈부(104)의 연산결과에 따라 반올림의 여부와 위치를 결정하여 그 소수점 덧셈부(104)에 제공하게 된다,
이에따라 상기한 소수점 덧셈부(104)는 제1가수선택 기억부(102)에 입력되는 작은쪽의 지수값(So-31)과 제2가수선택 기억부(103)에서 입력되는 큰쪽의 지수값(Lo-31)과를 더하거나 빼고 예상초과 반올림부(105)에서 예상한 반올림 만큼의 수를 더하거나 빼어 그 결과값(Σ0-31)(Σg)을 정규화수단인 덧셈레지스터(106)에 제공하게 된다.
상기 덧셈레지스터(106)는 소수점 덧셈부(104)의 출력값중 최상위 비트(MSB)에서 가드(G) 비트까지의 수를 저장하여 제로판독 카운터부(107)와 가수정규화 쉬프트레지스터(109)에 입력하게 된다.
이때, 상기 예상초과 반올림부(105)는 소수점 덧셈부(104)로 부터의 오버플로우를 감지하여 오버플로우가 발생되면 제로판독 카운터부(107)를 인에이블시키게 된다.
이에따라, 상기한 제로판독 카운터부(107)는 덧셈레지스터(106)로부터 출력되는 값을 계수하여 지수보정부(108) 및 가수정규화 쉬프트 레지스터(109)에 입력하게 되고, 상기 가수정규화 쉬프트레지스터(109)는 제로판독 카운터부(107)의 계수값에 따라 상기 덧셈레지스터(106)에서 출력되는 값을 1비트 오른쪽으로 쉬프트하여 가수레지스터(111)에 입력하게 되고, 지수보정부(108)는 지수비교부(101)에서 입력되는 큰쪽의 지수값을 1증가시켜 지수레지스터(110)에 입력하게 된다.
그리고, 상기 소수점 덧셈부(104)로 부터의 오버플로우가 발생되지 않으면, 제로판독 카운터부(107)는 덧셈레지스터(106)의 선행 0의 수를 계수하고 가수정규화 쉬프트레지스터(109)에서 그 계수한 수만큼 덧셈레지스터(104)의 출력값을 왼쪽으로 쉬프트하게하여 가수레지스터(111)에 입력하게 하고, 지수보정부(108)에게는 그 계수한 수만큼 지수비교부(101)의 큰쪽의 지수값을 감산하여 지수레지스터(110)에 그 결과값을 입력하게 한다.
따라서 상기 지수레지스터(110)에서 출력되는 값이 지수부의 결과값이고 가수레지스터(111)에서 출력되는 값이 가수부의 결과값이 된다.
그러나, 이와같은 종래 부동 소수점 연산기에서의 반올림은 소수점 덧셈기에서 발생된 신호를 이용하고, 반올림을 위한 별도의 증가기를 사용하지 않으므로 소요 게이트수가 줄어들고 처리속도 또한 증가되는 효과는 다소간 달성할 수 있으나, 이또한 소수점 덧셈부(104)에서 생성된 일부신호를 가지고 반올림을 수행할시에 덧셈/뺄셈 연산을 수행하는 소수점 덧셈부를 가지고 반올림을 수행하기 때문에 별도의 캐리 전달 지연(carry propagate delay)이 초래되므로 부동 소수점 덧셈/뺄셈 연산기의 구조와 처리 지연 시간면에서 크게 차이가 나지 않을뿐 아니라 반올림만(Round to up)을 고려한 문제점이 있었다.
그리고, 제6도는 상기 제4도의 부동 소수점 덧셈/뺄셈 연산기 및 재5도의 부동 소수점 연산기에서 제기되는 문제점을 보완하기 위해 분수부 연산후에 정규화와 반올림을 병렬적으로 수행하는 부동 소수점 연산기의 구성을 개략적으로 나타낸 불럭도로서, 이에 도시한 바와 같이, 분수부 연산후에 외부의 레지스터에서 입력되는 분수부의 결과값에서 제로검출기(200a)를 통해 선행 0을 구하고 그만큼 쉬프터(200b)에 쉬프트시켜 정규화하는 정규화수단(200)과, 상기분수부 연산후 외부와 레지스터에서 입력되는 분수부의 결과값에서 상위 2비트를 검사하여 그에 따른 정규화 선택제어신호(NS)와 반올림 선택제어신호(RS)를 발생하고 그 검사한 값(1.X)(0.1X)을 출력하는 콘트롤로직부(201)와, 상기 콘트롤로직부(201)에서 검사한 값에 따라 외부의 레지스터에서 입력되는 분수부의 결과값을 1비트 쉬프트하거나 또는 쉬프트없이 그냥 선택하여 출력하는 선택부(202)와, 상기 선택부(202)를 통해 입력되는 결과값을 반올림을 수행하는 반올림부(203)와, 상기 콘트롤로직부(201)로부터 정규화 선택제어신호(NS)가 발생할시에는 정규화수단(200)에서 정규화된 값을 선택하여 외부의 레지스터에 궤환입력하고 반올림 선택제어신호(RS)가 발생할시에는 상기 반올림부(203)에서 반올림 수행된 값을 선택하여 외부의 레지스터에 궤환 입력하는 선택출력부(204)로 구성되어 있다.
이와같이, 구성된 종래의 부동 소수점 연산기에 있어서는 면저 분수부 연산후 상위 2비트를 검사하게 되는데, 만약 1.X이면 그대로 반올림을 수행하고, 만약 0.1X이면 상위 비트쪽으로 1비트 쉬프트한 후 반올림을 수행한다. 그리고 0.0X이면 반올림이 필요하지 않으므로 그냥 입력된 분수부의 결과값을 정규화를 수행한다.
즉, 제6도에서와 같이, 외부의 레지스터로부터 분수부의 결과값이 입력되면, 정규화수단(200)의 제로검출기(200a)는 입력되는 분수부의 상위 2비트가 0.0X일 경우 분수부에서 선행 0을 구하고 그 만큼 쉬프터(200b)에 쉬프티시켜 정규화된 값으로 선택 출력부(204)에 입력하게 된다.
그리고 콘트롤로직부(201)는 분수부 연산후 외부의 레지스터에서 입력되는 분수부의 상위 2비트를 검사하여 만약 0.0X 형태이면 정규화 선택제어신호(NS)를 선택출력부(204)에 입력하여 상기 정규화수단(200)에서 정규화된 값을 선택하도록 하고, 상위 2비트가 0.1X이거나 또는 1.X이면 반올림 선택제어신호(RS)를 발생하여 선택출력부(204)에 입력함과 아울러 그 값(0.1X)(1.X)를 선택부(202)에 입력하게 된다.
상기 선택부(202)는 콘트롤로직부(201)로 부터의 0.1X가 입력되면 외부의 레지스터로 부터 입력되는 분수부의 결과값을 1비트 쉬프트시켜 반올림부(203)에 입력하고 1.X이면 입력 분수부의 결과값을 쉬프트 없이 그냥 반올림부(203)에 입력하게 된다.
이에따라, 상기한 반올림부(203)는 상기 선택부(202)에서 쉬프트 또는 쉬프트없이 입력되는 분수부의 연산 결과값을 반올림하여 선택출력부(204)에 입력하게 되며, 상기 선택출력부(204)는 콘트롤로직부(201)에서 검사한 상위 2비트가 0.1X, 또는 1.X일 경우에 한해 발생되는 반올림 선택제어신호(RS)에 의해서 반올림부(203)에서 반올림된 값을 선택하여 외부 레지스터에 궤환 입력하게 된다.
그러나, 이와같은 종래 부동 소수점 연산기에 있어서도, 전술한 바와 같이, 분수부 연산후 반올림을 수행함으로 반올림으로 인한 오버플로우가 생길수 있어서 제정규화가 발생할 수 있고, 또한 분수부 연산에서 나올 수 있는 형태인 1X, X는 고려하지 않고 처리하게 되는 문제점이 있었다.
따라서, 본 발명의 목적은 이와같은 종래의 종합적인 문제점을 감안하여 부동 소수점 덧셈/뺄셈 연산 처리과정인 지수정렬, 덧셈/뺄셈 연산, 정규화, 반올림의 4과정에서 덧셈/뺄셈 연산과 반올림을 동시에 수행함으로써 부동 소수점 덧셈/뺄셈 연산을 3과정에 수행할 수 있는 부동 소수점 덧셈/뺄셈 연산기를 제공함에 있다.
본 발명의 다른 목적은 덧셈/뺄셈과 반올림을 동시에 수행시켜 반올림 단계에 사용되는 덧셈기 및 이에 적용되는 게이트를 생락하고 연산처리속도 및 연산기의 면적면에서 효율적인 부동 소수점 덧셈/뺄셈 연산기를 제공함에 있다.
본 발명의 또다른 목적은 부동 소수점 덧셈/뺄셈과 반올림을 병렬적으로 수행시켜 일반 부동 소수점 덧셈/뺄셈 연산이 가지고 있는 재정규화를 근본적으로 제거하는 부동 소수점 덧셈/뺄셈 연산기를 제공함에 있다.
이와같은 본 발명의 목적을 달성하기 위한 수단으로써는, 입력되는 두 피연산자의 지수부를 비교하여 지수부의 차이만큼 분수부를 정렬하는 데이타 정렬수단과, 상기 데이타 정렬수단에서 정렬된 분수부를 가지고 덧셈과 뺄셈을 연산하고 반올림을 동시에 처리하여 그 값들을 선택 출력하는 덧셈/뺄셈 및 반올림수단과, 상기 덧셈/뺄셈 및 반올림수단에서 연산된 덧셈/뺄셈의 결과값과 반올림된 값을 정규화하여 최종 연산출력을 얻는 정규화 수단으로 이루어짐으로써, 달성된다.
본 발명의 또다른 목적을 달성하기 위한 방법으로써는, 입력되는 제1, 제2피연산자의 지수부를 비교하여 지수부의 차이만큼 분수부를 정렬하는 데이타 정렬과정과, 상기 데이타 정렬과정에서 정렬되어 얻어진 분수부를 가지고 덧셈과 뺄셈 연산을 수행하고 그 연산한 덧셈 및 뺄셈의 결과값에 따라 4가지 모드의 반올림을 수행하여 그 반올림된 값을 선택 출력하는 덧셈/뺄셈 및 반올림 연산과정과, 상기 덧셈/뺄셈 및 반올림연산과정에서 선텍되어얻어진 덧셈/뺄셈의 결과값과의 반올림된 값을 정규화하여 최종 연산출력을 얻는 정규화 과정으로 이루어짐으로써, 달성되는 것으로, 이하 본발명을 첨부한 도면에 의거 상세히 설명하면 다음과 같다.
제7도는 본 발명 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치 구성도로서, 이에 도시한 바와 같이, 입력되는 제1, 제2피연산자(A)(B)의 지수부(A_e1)(B_e2)를 비교하여 큰쪽의 지수부를 선택 출력하고 상기 비교한 지수부의 차이만큼 입력되는 두 제1, 제2피연산자(A)(B)의 분수부(A_f1)(B_f2)를 정렬하여 출력하는 데이타 정렬수단(300)과, 상기 데이타 정렬수단(300)에서 정렬된 제1, 제2피연산자의 분수부를 입력되는 올림수 및 피연산자의 제어신호에 의해 덧셈과 뺄셈연산을 하고 그 연산된 결과값에 따라 반올림을 동시에 수행하여 반올림된 값을 선택 출력하는 덧셈/뺄셈연산 및 반올림수단(301)과, 상기 덧셈/뺄셈연산 및 반올림수단(301)에서 얻어진 덧셈/뺄셈연산의 반올림값을 보충하고 정규화하여 분수부 및 지수부의 최종 연산값을 얻는 정규화수단(302)으로 구성한다.
상기에서, 데이타 정렬수단(300)은 입력되는 제1, 제2피연산자(A)(B)의 지수부(A_e1)(B_e2)를 비교하여 그 결과신호를 출력함과 아울러 그 지수부(A_e1)(B_e2)를 출력하는 지수비교부(300a)와, 상기 지수비교부(300a)에서 비교한 결과에따라 입력되는 제1, 제2피연산자(A)(B)의 분수부(A_f1)(B_f2)를 지수부가 큰쪽 또는 지수부가 작은쪽으로 정렬하여 출력하는 제1스웨퍼(300b)와, 상기 지수비교부(300a)에서 비교한 결과신호에 따라 입력되는 두 지수부(A_e1)(B_e2)를 큰쪽과 작은쪽으로 정렬하여 출력하는 제2스웨퍼(300e)와, 상기제2스웨퍼(300e)에서 정렬되어 입력되는 두 지수부중에 큰쪽의 지수부를 선택하여 출력하고 두 지수부와의 차값을 구하여 출력하는 제1지수부 덧셈기(300g)와, 상기 제2스웨퍼(300b)에서 정렬되어 입력되는 지수부가 작은쪽의 분수부를 상기 덧셈기(300g)에서 입력되는 차이만큼 하위 비트쪽으로 쉬프트하고 반올림에 필요한 자료인 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 발생하는 분수정렬부(300c)와, 상기 제1스웨퍼(300b)에서 정렬되어 입력되는 지수부가 큰쪽의 분수부를 피연산자 제어신호(Op)에 따라 반전역할을 수행하여 반전 출력하거나 또는 그 입력값을 바로 출력하는 제1배타적오아게이트(300d)와, 상기 제1배타적오아게이트(300d)에서 얻어진 결과값과 분수정렬부(300c)의 결과값을 외부로부터 입력되는 반올림모드(m1)(m2)와 연산의 종류에 따라 바이패스키거나 또는 반가산기로 동작하여 상기 분수정렬부(300c)의 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 최하위비트(LSB)에 넣어주는 반가산기 로직부(300f)로 구성한다.
상기에서 덧셈/뺄셈연산 및 반올림수단(301)은 상기 데이타 정렬수단(300)의 반가산기 로직부(300f)로부터 바로 바이패스된 분수부(A_f1)와 반전되어 입력되는 결과값을 가산하여 출력하고 올림수(C)를 출력하는 제1분수부 덧셈기(301a)와, 상기 반가산기 로직부(300f)로부터 바로 바이패스된 분수부(B_f1)와 제1배타적 오아게이트(300d)에서 논리합된 결과값을 반가산기 로직부(300f)를 통해 입력받아 가산하고 그 가산된 값에 1을 증가시켜 출력하는 제2분수부 덧셈기(301b)와, 상기 제1분수부 덧셈기(301a)로부터 얻어진 올림수(C)를 반전하고 피연산자 제어신호(Op)와 논리곱하여 얻어진 신호에 따라 반전기로써 동작하여 제1, 제2분수부 덧셈기(301a)(301b)의 출력 결과신호를 반전하여 출력하거나 그냥 바이패스시키는 제2, 제3배타적 오아게이트
(301c)(301d)와, 상기 제2, 제3배타적 오아게이트 (301c)(301d)에서 출력된 각각의 반올림된 결과값을 선택하여 출력하는 제1멀티플렉서(301e)와, 상기 제1멀티플렉서(301e)에서 반올림된 값을 선택하도록 반올림 제어신호를 발생하는 반올림 결정부(301f)로 구성한다.
그리고, 상기에서 정규화수단(302)은 뺄셈시 분수부 연산후 1의 보수체계에서 생성된 결과의 최상위 비트가 0이면 상위비트쪽으로 1비트 쉬프트할시 반올림 모드에 따라 최하위 비트로 쉬프되는 값(So*)을 각각 달리 발생하여 선택 출력하는 반올림 쉬프트값 결정부(302a)와, 상기 반올림 쉬프트값 결정부(302a)에서 생성된 반올립 모드(m1)(m2)에 따른 최하위 비트로의 쉬프트값(So*) 및 인에이블신호, 쉬프트방향신호에 따라 상기 반올림 결정부(301f)에 의해 제1멀티플렉서(301e)에서 선택되어 입력되는 반올림된 분수부의 결과값의 반올림을 보충하여 주는 양방향 쉬프터인 반올림 보충부(302b)와, 상기 반올림 결정부(301f)에 의해 제1멀티플렉서(301e)에서 선택된 반올림된 분수부의 결과값에서 정규화를 위해 선행 0을 계수하여 그 값을 출력하는 제로판독 카운터부(302c)와, 상기 제로판독 카운터부(302c)에서 계수된 값에 따라 뺄셈시 상기 반올림 보충부(302b)에서 보충된 반올림된 분수부의 결과값을 정규화하여 최종 덧셈/뺄셈 연산된 분수부를 출력하는 분수정규화부(302f)와, 상기 제로판독 카운터부(302c)에서 계수된 값에 따라 데이타 정렬수단(300)의 제1지수부 덧셈기(300g)에서 계산된 지수부의 차값과 0중에 하나를 선택하여 출력하는 제2멀티플렉서(302d)와, 상기 반올림 보충부(302b)에서 보충된 분수부의 결과값에 따라 제2멀티플렉서(302d)에서 선택된 결과값과 제로판독 카운터부(302c)에서 계수한 값과의 차를 구하여 최종 덧셈/뺄셈 연산의 지수부를 얻는 제2지수부 덧셈기(302e)로 구성되어 있다.
그리고, 상기에서 덧셈/뺄셈연산 및 반올림수단(301)의 반올림 결정부(301f)는 제8도에서와 같이, 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 1의 보수 체계에서 생성된 결과의 최상, 하위 비트(MSB)(LSB)인 So, Sn-1및 1의 보수 체계에서 생성된 결과의 1번째 비트(S1), 제1분수부 덧셈기(301a)에서 발생된 올림수(C)와 콘트롤러에서 입력되는 덧셈/뺄셈연산값(Add/Sub)을 논리화하여 가까운쪽으로의 반올림 제어값을 생성하는 제1반올림 생성부(400)와, 상기 분수정렬부(300c)에서 발생된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 제1분수부 덧셈기(300a)에서 발생된 올림수(C) 및 콘트롤러에서 입력되는 뺄셈 연산값(Sub)을 논리화하여 0으로의 반올림 제어값을 생성하는 제2반올림 생성부(401)와, 상기 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 콘트롤러에서 입력되는 덧셈/뺄셈 연산신호(Add/Sub), 제1분수부 덧셈기(301a)에서 입력되는 올림수(C), 1의 보수 체계에서 생성된 결과의 최상, 하위비트(MSB)(LSB)인 Sn-1, So및 연산의 결과에 대한 분수부의 부호비트(S)를 논리화하여 양의 무한대로의 반올림 제어값을 생성하는 제3반올림 생성부(402)와, 상기 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 콘트롤러에서 입력되는 뺄셈연산값(Sub), 제1분수부 덧셈기(301a)에서 입력되는 올림수(C), 1의 보수 체계에서 생성된 결과의 최상위비트(MSB)인 Sn-1및 부호비트(S)를 논리화하여 음의 무한대로의 반올림 제어값을 생성하는 제4반올림 생성부(403)와, 상기 제1내지 제4반올림 생성부(400내지 403)에서 생성된 가까운쪽으로의 반올림 제어값, 0으로의 반올림 제어값, 양의 무한대로의 반올림 제어값, 음의 무한대로의 반올림 제어값을 입력되는 반올림 모드(m1)(m2)에 따라 선택하여 제1멀티플렉서(301e)에 입력하는 반올림모드 선택부(404)로 구성한다.
상기에서, 제1반올림 생성부(400)는 덧셈/뺄셈시의 상기 제1멀티플렉서(301e)에 입력되는 반올림 제어값이Add*(*C*(So+R+Sy))+C*So*(S1또는G+R+Sy))+Sub*(*((R*Sy)+G)+Sn-1*((*G)+(G*Sy)+(G*R))+C)로, 생성되도록 제1내지 제7오아게이트(40 내지 46)와 제1내지 제8앤드게이트(47 내지 54)로 구성한다.
또한 상기에서 제2반올림 생성부(401)는 덧셈/뺄셈시 상기 제1멀티플렉서(301e)에 입력되는 반올림 제어값이 Sub*(G+R+Sy+C)로, 생성되도록 제8오아게이트(401a)와 제9앤드게이트(401b)로 구성한다.
또한 상기 제4반올림 제어부(402)는 덧셈/뺄셈시 상기 제1멀티플렉서(301e)에 입력되는 반올림 제어값이
Add*(C*(So+G+R+Sy))+Sub*(S*(*G)+S*(G+R+Sy)+C)로, 생성되도록 제9내지 제11오아게이트(402a 내지 402c)와 제10내지 제14앤드게이트(402d 내지 402h)로 구성한다.
또한 상기 제4반올리 제어부(403)는 덧셈/뺄셈시 상기 제1멀티플렉서(301e)에 입력되는 반올림 제어값이 Sub*(S*(*G)+S*(G+R+Sy)+C)로, 생성되도록 제12, 제13오아게이트(403a)(403b)와 제15내지 제18앤드게이트(403c 내지 403f)로 구성한다.
그리고, 상기 정규화수단(302)의 반올림 쉬프트값 결정부(302a)는 첨부한 도면 제9도에 도시한 바와 같이, 상기 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와를 (R*G)+(R*Sy*G)로 논리화하여 가까운쪽으로의 반올림 쉬프트값(S*)을 생성하는 제14오아게이트(500c), 제19, 제20앤드게이트(500a)(500b)로 이루어진 제1쉬프트값 생성부(500)와, 상기 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와를 (*R)+(*SY)+(G**)로 논리화하여 0으로의 반올림 쉬프트값(S*)을 생성하는 제15오아게이트(501d), 제21내지 제23앤드게이트(501a 내지 501c)로 이루어진 제2쉬프트값 생성부(501)와, 상기 분수정렬부(300c)에서 생성된 가드(G) 비트와 콘트롤러에서 입력되는 부호비트(S) 및 제2쉬프트값 생성부(501)에서 생성된 쉬프트값(S*)과를
(*G)+S*((*R)+(*Sy)+(G**)로 논리화하여 양의 무한대로의 쉬프트값(S*)을 생성하는 제16오아게이트(502c), 제24, 제25 앤드게이트(502a)(502b)로 이루어진 제3쉬프트값 생성부(502)와, 상기 분수정렬부(300c)에서 생성된 가드(G) 비트와 연산의 결과에 대한 분수부의 부호비트(S) 및 제2쉬프트값 생성부(501)에서 생성된 쉬프트값(S*)과를 (S*G)+ (*((*R)+(G*Sy)+(G**Sy))로 논리화하여 음의 무한대로의 쉬프트값(S*)을 생성하는 제17오아게이트(503c), 제26, 제27앤드게이트(503a)(503b)로 이루어진 제4쉬프트값 생성부(503)으로 구성한다.
그리고, 제7도에서의 도면중 미 설명부호 303 내지 307은 파이프라인을 구형해주기 위한 제1내지 제5레지스터이며 클럭(CK)에 의해 제어된다.
이와같이, 구성된 본 발명의 작용 효과를 제7내지 제12도를 참조하여 설명하면 다음과 같다.
먼저, 본 발명의 3과정을 통해 부동 소수점 덧셈/뺄셈 및 반올림을 동시에 수행하는 방법을 설명하기 전에 본 발명의 덧셈/뺄셈기의 구조와 덧셈/뺄셈 연산의 특성을 살펴보고 그후 이와같은 특성을 이용하여 연산과 동시에 수행하는 반올림 방법을 기술하겠다.
먼저, 두 피연산자(A)(B)가 데이타 정렬수단(300)의 비교기(300a) 및 제1스웨퍼(300b)로 입력되면, 상기한 지수비교기(300a)는 입력되는 두 피연산자(A)(B)의 지수분(A_e1)(B_e2)를 비교하여 만약 지수부(A_e1)가 지수부(B_e2)보다 크면 제1, 제2스웨퍼(300b)(300e)에게 스웨프(swap)하라는 신호를 인가함과 아울러 그 지수부(A_e1)(B_e2)를 제2스웨퍼(300e)에 제공하게 된다.
상기 제2스웨퍼(300e)는 지수비교부(300a)에서 비교한 결과의 스웨프신호(즉 두 지수부의 비교값)에 따라 지수부(A_e1)의 수가 지수부(B_e2)의 수보다 크지 않도록하여 제1지수부 덧셈기(300g)에 입력햐게 된다.
상기 제1스웨퍼(300b)는 지수비교부(300a)에서 입력되는 두지수부의 비교값에 따라 입력되는 두 피연산자(A)(B)의 분수부(A_f1)(B_f2)를 지수부가 큰쪽 또는 지수부가 작은쪽으로 정렬하여 지수부가 큰족의 분수부를 제1배타적 오아게이트(300d)에 입력하고 지수부가 작은쪽의 분수부를 분수정렬부(300c)에 입력한다.
상기 제1지수부 덧셈부(300g)는 분수부의 쉬프트할 양을 위해 제2스웨퍼(300e)로 부터 입력되는 두 지수부(A_e1)(B_e2)의 차이를 구하여 그 차값을 상기 분수정렬부(300c)에 입력함과 아울러 두 지수부(A_e1)(B_e2)중에서 큰수를 제1레지스터에(303)에 전달하게 되는데, 이때, 배정밀도 형식에 전술한 바와 같이, 분수부의 최대를 나타낼 수 있는 비트 수는 53비트 이므로 두 지수부의 차이는 6비트로 모두 표현될 수 있다.
따라서, 상기 제1지수부 덧셈기(300g)에서 구해진 두 지수부의 차값은 6비트로 분수정렬부(300c)에 전달된다.
상기 분수정렬부(300c)는 제1지수부 덧셈기(300g)에서 입력되는 두 지수부의 차값(쉬프트할 양) 만큼 제1스웨퍼(300b)로 부터 입력되는 지수부가 작은쪽의 분수부를 하위 비트 쪽으로 쉬프트를 수행하여 그 결과값을 반가산기 로직부(300f)에 전달하게 된다.
이때, 반올림에 필요한 자료인 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 생성하여 덧셈/뺄셈 연산 및 반올림수단(301)의 반올림 결정부(301f) 및 정규화수단(302)의 반올림 쉬프트값 결정부(302a)에 제공하게 된다.
그리고, 상기 제1배타적 오아게이트(300d)는 덧셈시 피연산자 제언신호(Op)가 0(양수) 임으로 상기 제1스웨퍼(300b)에서 입력된 지수부가 큰쪽의 분수부를 반가산기 로직부(300f)에 입력하고 뺄셈시에는 피연산자 제어신호(Op)가 1(음수)임으로 반전기로써 동작하여 제1스웨퍼(300b)에서 입력되는 지수부가 큰쪽의 분수부를 반전시켜 반가산기 로직부(300f)에 입력한다.
상기 반가산기 로직부(300f)는 연산이 덧셈이고 반올림 모드(m1)(m2)가 양의 무한대로의 반올림 일 때 상기 분수정렬부(300c)에서 입력되는 지수부가 큰쪽의 분수부와 제1배타적 오아게이트(300d)에서 입력되는 지수부가 작은쪽의 분수부에 대해 반가산기로 동작하여 상기 분수정렬부(300c)의 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 최하위비트(LSB)에 넣어주게 된다.
여기서, 상기 반가산기 로직부(300f)를 데이타 정렬수단(300)에 두는 이유는 보통 데이타 정렬수단(300)에서 걸리는 시간이 덧셈/뺄셈 연산 및 반올림수단(301)에서 걸리는 시간보다 적기 때문이다.
즉, 이를 구체적으로 설명하면, 이후에 설명될 반올림을 결정하는 반올림 결정부(301f)와 분수부의 뺄셈후 최상위 비트(MSB)가 0일 때 최하위 비트(LSB)로 쉬프트 되어지는 쉬프트값(S*)을 생성하는 반올림 쉬프트값 결정부(302a)를 통해 IEEE에서 지정한 4가지의 반올림 방법 즉, 가까운쪽으로의 반올림과 이를 응용하여 다른 반올림 방법, 즉 0으로의 반올림, 음의 무한대로의 반올림 방법은 해결할 수 있으나, 양의 무한대로의 반올림인 경우에는 분수부 덧셈후에 올림수(overflow)가 생기면 제7도에서의 제1, 제2분수부 덧셈기(301a)(301b) 및 제2, 제3배타적 오아게이트(301c)(301d)를 가지고는 양의 무한대로의 반올림에서 덧셈시에 가까운쪽으로의 반올림 방법을 응용하여 제1멀티플렉서(301e)에 올바른 제어신호를 발생하지 못하는 경우가 있다.
즉, 가까운쪽으로의 반올림과 같이, 덧셈시 제1분수부 덧셈기(301a)에서 올림수(C)가 생기면 반올림시 올림이 되기 위해서는 1의 보수체계에서 생성된 결과의 최하의 비트(LSB)인 So가 1이 되어야 하나, 양의 무한대로의 반올림 일때 덧셈시 올림수가 생길 때 상기 1의 보수체계에서 생성된 결과의 최하위 비트(LSB)인 So가 0일때에도 상기 데이타 정렬수단(300)의 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트로 인하여 반올림시 올림이 될수 있으므로 직접 1의 보수체계에서 생성된 결과의 1번째 비트(S1)에 1을 더하거나 1의 보수 체계에서 생성된 결과의 최하위 비트(LSB)인 So에 2를 더해야 한다.
이를 해결하기 위해서 상기한 양의 무한대로의 반올림에서 덧셈 연산시 반가산 로직부(300f)를 분수부 연산전에 추가한 것이다.
즉, 상기 데이타 정렬수단(300)의 반가산 로직부(300f)는 반올림 모드(m1)(m2) 및 피연산자 제어신호(Op)를 논리곱한 인에블신호가 로우신호(L) 이면, 즉 m1=0, m2=1, Op=로 입력되지 않으면 즉 분수정렬부(300c)에서 입력되는 지수부가 작은쪽의 분수부와 제1배타적 오아게이트(300d)에서 입력되는 지수부가 작은쪽의 분수부를 바로 바이패스시켜 제3, 제4레지스터(305)(306)에 입력하고, 인에이블신호가 하이신호(H)이면 반가산기로 동작하며 상기 입력되는 두 분수부(A_f1)(B_f2)중에서 지수부가 큰쪽의 분수부(A_f1)의 최하위 비트(LSB)에 상기 분수정렬부(300c)에서 생성되어 입력되는 가드(G) 비트 또는 라운드(R) 비트 또는 스티키(Sy) 비트를 넣어주어 각각 제3레지스터(305) 및 제4레지스터(306)에 입력하게 된다.
상기 제3, 제4레지스터(305)(306)는 데이타 정렬수단(300)의 반가산기 로직부(300f)에서 출력된 결과값을 입력 클럭(CLK)에 동기시켜 덧셈/뺄셈 연산 및 반올림수단(301)의 제1, 제2분수부 덧셈기(301a)(301b)에 각각 입력하게 된다.
먼저, 덧셈/뺄셈 연산기로 입력되는 두 개의 피연산자(A)(B)의 분수부를 f1, f2라 하고 뺄셈시의 그 결과값을 SM이라 할 때, SM=f1-f2와 SM=f2-f1을 구하여 두 개의 결과값중 양수를 선택한다.
이를 위하여 이후에 본 발명 제7도의 덧셈/뺄셈 연산 및 반올림수단(301)에서 설명될 1의 보수체계와 2의 보수체계를 병행하는 구조를 사용한다.
즉, 만약 f1f2일 경우, SM=f1-f2=f1++1
상기 조건이 아닐 경우에는,
SM=f2-f1=(f1-f2) 이때는 덧셈/뺄셈 연산 및 반올림수단(301)의 제2, 제3분수부 덧셈기(301c)(301d)가 반전기로써 동작한다.
상기 피연산자(A)(B)의 분수부 조건이 f1f2일 때 f1+에서는 올림수가 생성되며, 피연산자가 (A)(B)의 분수부 조건이 f1=f2일 때 f1+에서는 올림수가 생성되지 않는다.
즉, f1+연산후 올림수가 생성되면 f1f2임으로 f1++1을 선택하고, 올림수가 생성되지 않으면 f1f2임으로 f1+에서 반전된 값을 선택한다.
또한 상기 식은 이후에 설명될 본 발명의 1의 보수체계와 2의 보수체계를 병행하는 덧셈/뺄샘 연산 및 반올림수단(301)으로, 구현 가능하다.
제7도의 1의 보수체계와 2의 보수 체계를 병행하는 덧셈/뺄셈기의 구성으로써, 구현 가능하다.
이러한 구조는 뺄셈시 필요한 값인 f1++1을 동시에 계산함으로 1개의 덧셈 처리시간 만이 필요하며, 추가적인 지연은 없게 된다.
다음은 덧셈/뺄셈 연산의 특성이다.
덧셈의 경우 연산후에 정규화를 위한 쉬프트는 연산후에 발생한 올림수(carry)가 0이면 쉬프트가 필요하지 않고, 올림수가 1이면 하위비트로 1비트 쉬프트가 발생한다.
쉬프트가 일어나지 않으면 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트가 그대로 반올림의 판단자료가 되며, 쉬프트가 발생하면 최하위비트(LSB)가 가드(G) 비트로, 가드(G) 비트가 라운드(R) 비트로, 라운드(R) 비트가 스티키(Sy) 비트와 논리합되어서 반올림의 판단자료가 된다.
뺄셈의 경우에 있어서는 덧셈보다 복잡한 성질을 갖는다.
지수정렬 과정에서 즉 데이타 정렬과정에서 2비트 이상의 쉬프트가 발생했다면 정규화 과정에서 1비트 상위쪽으로 쉬프트 되거나 쉬프트가 발생하지 않는다.
하기의 예는 분수부에서 표현 가능한 가장 작은 값인 1.00…0에서 1.11…1의 두 비트 쉬프트된 값을 뺀 경우에도 1비트의 쉬프트만 필요한 것을 보여주고 있다.
예 1 :
또한, 정규화를 위한 쉬프트가 발생하지 않으면 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트를 가지고 반올림을 하며, 정규화를 위한 쉬프트가 발생하면 상위 비트쪽으로 1비트 쉬프트함으로 라운드(R) 비트가 가드(G) 비트로 쉬프트되고, 스티키(Sy) 비트가 라운드(R) 비트가 되어서 이것을 가지고 반올림을 한다.
지수 정렬 쉬프트가 1비트 이하로 발생하였을 경우에는 정규화 과정에서 많은 양의 쉬프트가 발생할 수 있다.
그러나, 이 경우에는 가드(G) 비트만 생성되며 라운드(R) 비트와 스티키(Sy) 비트는 0이 된다.
이때, 가드(G) 비트는 정규화를 위한 쉬프트가 발생하지 않으면 반올림 기능을 하고 쉬프트가 발생하면 분수부에 삽입된다.
하기의 예는 상기의 예에서 두 번째 피연산자가 1비트 쉬프트 한 경우이다.
예 2 :
상기의 뺄셈의 경우를 살펴보면, 정규화 전에 최상위비트(MSB) 값이 1인 경우 일반적인 반올림을 하고 최상위비트(MSB)가 0인 경우 연산의 결과를 1번의 상위 비트로의 쉬프트와 반올림을 해준 후 정규화를 해주면 올바른 값을 얻을 수 있다는 것을 알 수 있다.
상기의 결과를 살펴보면, 덧셈시 연산된 결과값에서 반올림할 위치는 올림수에 의하여 결정이 되고, 뺄셈시에는 정규화를 위해 쉬프트를 하여야 하는 여부, 즉 최상위비트(MSB)의 값에 따라 결정된다.
이와같은 결과를 분수부 덧셈/뺄셈기의 구조에 적용하면 반올림을 덧셈/뺄셈 연산과 병렬적으로 수행할 수 있다.
또한, 이러한 반올림 알고리즘은 정규화후 반올림으로 인하여 발생하는 제정규화를 제거하게 된다.
이와같은 성질을 이용하여 IEEE에서 지정한 4가지 방법의 구현을, 본 발명에서 제시한 3과정으로 부동 소수점 덧셈/뺄셈 및 반올림을 동시에 수행하는 방법을 제7도 내지 제12도를 참조하여 상세히 설명하면 다음과 같다.
전술한 덧셈/뺄셈 특성을 이용하여 상기 덧셈/뺄셈 연산 및 반올림수단(301)의 제1분수부 덧셈기(301a)는 제3, 제4레지스터(305)(306)로 부터 입력되는 두 피연산자(A)(B)의 분수부(A_f1)(B_f2)와를 가산하여 그 결과값을 제2배타적 오아게이트(301c)에 입력함과 아울러 올림수(C)를 출력하여 제2, 제3배타적 오아게이트(301c)(301d)에 입력하게 되고, 제2분수부 덧셈기(301b)는 제3, 제4레지스터(305)(306)에서 얻어진 피연산자(A)의 분수부(A_f1)의 결과값과 피연산자(B)의 분수부(B_f2)의 결과값과가산하고 그 가산된값에 1을 증가시켜 제3배타적 오아게이트(301d)에 입력하게 된다.
상기 제3, 제4배타적오아게이트(301c)(301d)는 제1분수부 덧셈기(301a)로 부터 올림수(C)가 생기지 않고 즉 올림수(C)가 0이고, 피연산자 제어신호(Op)가 뺄셈이며, 제1, 제2분수부 덧셈기(301a)(301b)의 출력 결과값이 음수임으로 반전기로써 동작하여 제1, 제2분수부 덧셈기(301a)(301b)의 출력값을 반전시켜 출력하게 된다.
즉, 상기 제1분수부 덧셈기(301a)로부터 올림수(C)가 0(올림이 없을 경우)으로 출력되고 가산된 결과값이 1로 출력되어 제2배타적 오아게이트(301c)에 입력되고, 또한 제2분수부 덧셈기(301b)로 부터의 가산된 결과값이 1로 출력되어 제3배타적 오아게이트(301d)로 입력될 경우에, 전술한 조건에서와 같이, 상기 올림수(C)의 0은 1로 반전되고 그 반전된 값 1은 뺄셈시의 피연산자 제어신호(Op)의 1과 논리곱된 1의 값으로 입력됨으로써, 제2배타적 오아게이트(301c)는 제1분수부 덧셈기(301a)의 출력 결과값 1과 논리곱된 1의 값과를 배타적 논리합하여 제1멀티플렉서(301e)에 0을 입력하고, 제3배타적 오아게이트(301d)는 논리곱된 1의 값과 제2분수부 덧셈기(301d)의 출력 결과값 1과를 배타적 논리합하여 제1멀티플렉서(301e)에 0을 입력하게 된다.
이를 뺄셈과 덧셈의 경우를 들어서 설명하면, 먼저, 뺄셈의 경우에 있어서, 두 피연산자(A)(B)의 분수부의 조건이 A_f1B_f2일때, 이때에는 올림수(C)가 생성이 되므로, 제2분수부 덧셈기(301b)를 거칠때 정확한 값이 생성되고, 제1분수부 덧셈기(301a)를 거칠 경우 정확한 값에 1이 작은 값이 생성된다.
그리고 A_f1 =B_f2일 경우, 이때에는 올림수(C)가 생성되지 않으므로 제1분수부 덧셈기(301a) 및 제2배타적 오아게이트(301c)를 거친 값이 정확한 값이 되고 제2분수부 덧셈기(301b) 및 제3배타적 오아게이트(301d)를 거친 값은 정확한 값에 1이 작은 값이 생성된다.
즉, 뺄셈의 경우 정확한 값과 1이 작은 값이 생성된다.
그리고, 덧셈의 경우에는 피연산자 제어신호(Op)가 0이므로, 올림수(C)와 관계없이 제2, 제3배타적 오아게이트(301c)(301d)가 반전기 역할을 하지 않으므로 제1분수부 덧셈기(301a)를 거친값인 정확한 값과 제2분수부 덧셈기(301b)를 거친값인 정확한 값보다 1인 큰값이 생성되어 덧셈과 뺄셈 연산이 수행되어 제1멀티플렉서(301e)에 입력된다.
따라서, 상기한 제1멀티플렉서(301e)는 제8도와 같은 반올림 결정부(301f)에서 입력되는 반올림 제어값에 따라 제2배타적 오아게이(301c) 및 제3배타적 오아게이트(301d)에서 출력되는 값중에서 반올림된 값을 선택하여 제5레지스터(307)에 입력하게 된다.
즉, 상기 반올림 결정부(301f)를 제8도를 참조하여 구체적으로 설명하면, 먼저, 제8도에서의 반올림모드 선택부(404)는 입력되는 반올림 모드(m1)(m2)에 따라 IEEE에서 지정한 4가지 반올림중 1가지를 선택하고, 그 선택된 값은 반올림 제어값으로 제7도의 제1멀티플렉서(301e)에 입력한다.
그리고, 상기에서 반올림 모드(m1)(m2)는 IEEE에서 지정한 반올림 방법이 4가지 임으로 2비트로 이루어졌다.
상기 반올림 모드(m1)(m2)가 모두 00이면 가까운쪽으로의 반올림이 선택되고, 10이면 0으로의 반올림이 선택되며, 01이면 양의 무한대로의 반올림, 11이면 음의 무한대로의 반올림이 선택된다.
그리고, 제8도의 제1반올림 생성부(400)는 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 1의 보수 체계에서 생성된 결과의 촤상, 하위 비트(MSB)(LSB)인 Sn-1, So와 1의 보수 체계에서 생성된 결과의 1번째 비트(S1), 제1분수부 덧셈기(301a)에서 발생된 올림수(C)와 콘트롤러에서 입력되는 덧셈/뺄셈 연산값(Add/Sub)을 논리화하여 가까운쪽으로의 반올림 제어값을 생성하게 된다.
그리고, 제2반올림 생성부(401)는 데이타 정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 제1분수부 덧셈기(301a)에서 발생된 올림수(C) 및 콘트롤러에서 입력되는 뺄셈 연산신호(Sub)을 논리화하여 0으로의 반올림 제어값을 생성하게 된다.
제3반올림 생성부(402)는 상기 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 콘트롤러에서 입력되는 덧셈/뺄셈 연산신호(Add/Sub), 제1분수부 덧셈기(301a)에서 입력되는 올림수(C) 및 1의 보수 체계에서 생성된 결과의 최상, 하위비트(MSB)(LSB)인 Sn-1, So와 연산의 결과에 대한 분수부의 부호비트(S)를 논리화하여 양의 무한대로의 반올림 제어값을 생성하게 되고, 제4반올림 생성부(403)는 상기 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 콘트롤러에서 입력되는 뺄셈연산신호(Sub), 제1분수부 덧셈기(301a)에서 입력되는 올림수(C), 1의 보수 체계에서 생성된 결과의 최상위비트(MSB)(LSB)인 Sn-1및 부호비트(S)를 논리화하여 음의 무한대로의 반올림 제어값을 생성하여 각각 상기 반올림모드 선택부(404)에 입력하게 된다.
그리고, 상기에서 제1분수부 덧셈기(301a)에서 생성된 올림수(C), 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1, 부호비트(S)는 분수부 연산 종료후에 알려지는 값, 즉 최상위 비트쪽의 변수들이므로 연산이 종료되어야 알 수 있으므로 나중에 처리하고, 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트, 1의 보수 체계에서 생성된 결과의 최하위 비트(LSB)인 So, 1의 보수 체계에서 생성된 결과의 1번째 비트(S1)는 분수부 연산 종료전에 알 수 있는 값, 즉 최하위 비트쪽의 변수들이므로 연산 종료전에 알 수 있으므로 먼저 처리한다.
그리고 상기 제1분수부 덧셈기(301a)에서의 덧셈시 양수인 두 분수부를 더함으로 인해 부호비트(S)는 0이 되고, 뺄셈시는 뺄셈의 결과가 음수일때는 올림수(C)가 생기지 않으며, 뺄셈의 결과가 양수일때는 올림수(C)가 생겨 전술한 제2, 제3 배타적 오아게이트(301c)(301d)에 입력하게 된다.
따라서, 상기 부호비트(S)를 결정하는 신호는 덧셈연산값(Sub)와 지수부 비교부(300a)에서 비교하여 얻어진 스웨프(두 지수부의 비교값) 신호(swap) 및 올림수(C)에 의해 결정된다.
즉, Sub**에 따라 결정된다.
반올림 판단자료인 변수들을 이용하여 IEEE에서 지정한 4가지의 반올림 방법을 제8도의 반올림 결정부(301f)를 통해 구체적으로 설명하면 다음과 같다.
먼저, 가까운쪽으로의 반올림 일 때, 덧셈에서의 반올림 위치는 전술한 바와 같이, 덧셈의 결과에 의한 올림수(C)의 여부에 따라 결정된다.
일반적인 가까운쪽으로 반올림 알고리즘을 올림수를 고려하여 변형하면 다음과 같다.
① 가까운쪽으로의 반올림에 있어서, 만약 올림수(C)가 0이고, 만약 가드 비트(G)가 0이면 버리고, 아니고 만약 라운드 비트(R)가 1 또는 스티키 비트(Sy)가 1이면 올림하하고, 아니고 만약 최하위 비트(So)가 0이면 버리고, 상기 모든 조건이 아니면 올림한다.
만약 최하위 비트(So)가 0이면 버리고, 아니고 만약 가드(G)비트 또는 라운드(R)비트 또는 스티키(Sy) 비트가 1이면 올림하고, 아니고 만약 1의 보수체계에서 생성된 결과의 1번째 비트(S1)가 0이면 버리고 아닐 경우에는 올림한다.
이와 같이, 덧셈 수행후 올림수(C)가 생기면 반올림의 위치가 1의 보수 체계에서 생성된 결과의 1번째 비트(S1)가 된다.
즉, 올림수가 생긴후 반올림시 올림이 생기면 1의 보수 체계에서 생성된 결과의 1번째 비트(S1)에 1을 더해야 한다.
올림수가 생긴 후 가까운쪽으로의 반올림에서는 1의 보수 체계에서 생성된 결과의 1번째 비트(S1)에 반올림으로 인한 올림이 생기기 위해서는 1의 보수 체계에서 생성된 결과의 최하위 비트(So)가 1이 되어야 한다.
따라서, 올림수(C)가 생겼고 반올림을 고려했을때 올림이 되면 1의 보수 체계에서 생성된 결과의 최하위 비트(So)에 1을 더하는 것은 So가 1임으로 결국 S1에 증가하는 것과 똑같은 효과를 얻는다.
따라서, 가까운쪽으로의 반올림은 덧셈시 덧셈/뺄셈 연산 및 반올림수단(301)의 제1멀티플렉서(301e)에 입력되는 제2배타적 오아게이트(301c), 제3배타적 오아게이트(301d)의 두 개의 출력 결과 값중에 반올림이 없으면 제2배타적 오아게이트(301c)에 입력되는 결과값을 선택하고 반올람이 있으면 제3배타적 오아게이트(301d)에서 입력되는 결과값을 선택하게 되는 것과 동일하다.
즉, 상기 반올림 결정부(301f)를 제8도를 참조하여 설명하면 다음과 같다.
즉, 제8도에서와 같이, 제1반올림 생성부(400)는 덧셈시에 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 1의 보수체계에서 생성된 결과의 최하위 비트(So), 1의 보수체계에서 생성된 결과의 1번째 비트(S1), 제1분수부 덧셈기(301a)에서 발생된 올림수(C) 및 콘트롤러에서 입력되는 덧셈 연산신호(Add)를 제1내지 제3오아게이트(40)(41)(44)와 제1내지 제4앤드게이트(47)(49)(50)(51)에서 논리화하여 덧셈시의 반올림 제어값을 반올림모드 선택부(404)를 통해 제1멀티플렉서(301e)에 입력하게 된다.
즉, 이를 논리화식으로 표현하면 다음과 같다.
Add*(*G*(So+R+Sy)+C*So*(S1+G+R+Sy))로 발생되어 제7오아게이트(46)를 통해 반올림모드 선택부(404)에 입력된다.
가까운쪽으로 반올림에서의 뺄셈시에 있어서는 덧셈의 경우보다 복잡한 양상을 갖는다.
본 발명에서 전술한 바와 같이, 뺄셈은 항상 지수정렬을 한 피연산자에서 다른 피연산자를 빼는 구조를 갖는다.
따라서, 두 피연산자의 지수가 같은 때에만 양수의 값이 생성될 수 있으며, 지수의 차이로 인한 지수정렬이 생길때에는 뺄셈연산이 결과는 항상 음수이다.
뺄셈의 결과가 양수일때는 지수정렬이 일어나지 않으므로 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트가 모두 0임으로 반올림시 올림이 일어나지 않는다.
따라서, 상기 제1멀티플렉시(301e)에 입력되는 제어신호는 1이 되며, 그 제1멀티플렉시(301e)는 제3배타적 오아게이트(301d)에서 출력되는 2의 보수 체계의 값을 선택하게 된다.
지수 정렬시 생기는 가드 비트, 라운드 비트, 스티키 비트를 G, R, Sy라 하면, 이것 또한 뺄셈의 경우 두 피연산자의 경우와같이, 식(1)에 적용하여 연산을 수행해야 한다.
그 수행결과를 G2, R2, Sy2라 하면 다음과 같다.
V1=오버플로우((G, R, Sy)+111) 이다.
상기에서 V1은 가드, 라운드, 스티키 비트에 대한 연산결과의 올림수이며, V1이 1일 경우는 뺄셈의 결과에서 1을 빌려오는 것을 뜻한다.
연산의 결과가 음수이고 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1이 1이면 정규화를 위한 쉬프트가 일어나지 않으므로 가드(G2)비트, 라운드(R2)비트, 스티키(Sy2) 비트를 가지고 반올림을 한다.
즉, V3=가까운쪽으로의 반올림(G2, R2, Sy2) 이다.
상기 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1이 0이면 정규화 수단(302)에서 1비트 이상의 쉬프트가 발생한다.
반올림을 고려하지 않을 경우 가드(G2) 비트는 정규화 수단(302)에서 분수부의 최하위 비트로 삽입된다.
그러나, 반올림을 고려하면 결국 가드(G2)비트가 최하위 비트(LSB)로 쉬프트 된 후에 라운드(R2) 비트와 스티키(Sy2) 비트를 가지고 반올림을 수행하게 되는데, 이때 올림 또는 버림이 발생하게 된다.
이 경우 반올림의 올림이나 버림에 따라 1비트 쉬프트를 하기 전의 최하위 비트(LSB)와 1비트 쉬프트를 수행한 후의 최하위 비트(LSB), 즉 가드(G2) 비트의 값에 영향을 주게 된다.
즉, 가드(G2) 비트가 1이고 라운드(R2) 비트와 스티키(Sy2) 비트를 가지고 반올림을 수행한 값이 올림을 나타낼 경우 1비트 쉬프트되기 전의 최하위 비트(LSB)로 올림수가 생성되는 것을 뜻한다.
이 경우 최하위 비트(LSB)로 쉬프트 되어지는 값은 가드(G2) 비트값인 1이 아니고 0이 된다.
1비트 쉬프트를 하기 전의 최하위 비트(LSB)로의 올림수를 V2라 하고 이후에 반올림 쉬프트값 결정부(302a)에서 설명한 1비트 쉬프트를 수행한 후의 최하위 비트(LSB)로 쉬프트되는 값 So*을 구하면 다음과 같다.
V2=G2*(가까운쪽으로의 반올림(R2, Sy2, 0)-올림))
S0*=G2 배타적 오아링(가까운쪽으로의 반올림(R2, Sy2, 0)=올림))
상기에서 V1은 연산의 결과에서 1을 빌려오는 것을 뜻하고 V2와 V3는 반올림으로 인한 1의 올림을 뜻하며, V1이 0이고 V2 또는 V3가 1인 경우는 없다.
따라서, 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1이 0인 경우 V1과 V2를 배타적 오아링한 값이 제7도의 제1멀티플렉서(301e)의 제어신호가 된다.
그리고, 상기 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1이 0인 경우 V1과 V2를 배타적 오아링한 값이 제1멀티플렉서(301e)의 제어신호가 된다.
그리고, 상기 정규화수단(302)의 반올림 쉬프트값 결정부(302a)에서 생성되는 쉬프트값(So*)은 상기 제1멀티플렉서(301e)에서의 선택후 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1이 0인 경우 정규화수단(302)의 반올림 보충부(302b)에서 상위비트로 1비트 쉬프트시 삽입된다.
제10도는 뺄셈의 결과가 음수일때를 나타낸 것이다.
뺄셈시에 분수정렬부(300c)에서 생성된 가드(G)비트, 라운드(R) 비트, 스티키(Sy) 비트와 1의 보수 체계에서 생성된 결과의 최하위 비트(LSB)인 So와 1의 보수체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1, 제1분수부 덧셈기(301a)에서 생성된 올림수(C) 및 콘트롤러에서 입력되는 뺄셈 연산신호(Add)를 제4내지 제6오아게이트(42)(43)(44)와 제5내지 제8앤드게이트(48)(52)(53)(54)에서 논리화하여 뺄셈시의 반올림 제어값을 반올림 선택부(404)를 통해 제1멀티플렉서에 입력하게 된다.
즉, 이를 논리화식으로 표현하면 다음과 같다.
+(G*R))+C)로 발생되어 제7오아게이트(46)를 통해 반올림모드 선택부(404)에 입력된다.
따라서, 가까운쪽으로의 반올림시 상기 반올림 결정부(301f)의 제1반올림 생성부(400)에서 덧셈/뺄셈시 발생되어 제1멀티플렉서(301e)에 입력되는 반올림 제어값은 하기와 같다.
R))+C로 발생되어 반올림모드 선택부(404)를 통해 제1멀티플렉서(301e)에 제어신호로 입력된다.
상기에서 제1반올림 생성부(400)는 분수부 연산후에 생기는 올림수(C)와 1의 보수 체계에서 생성된 최상위 비트(MSB)인 Sn-1가 결정된 후 3개의 게이트, 즉 제6앤드게이트(52), 제6, 제7오아게이트(45)(46)의 지연후에 올바른 반올림 제어값이 발생되어 제1멀티플렉서(301e)에 입력된다.
이는 가드(G) 비트, 라운드(R) 비트, 스티키(Sy)는 미리 알려진 값이고 Sn-1, C는 연산후에 알려지는 값이기 때문에 3개의 게이트 지연후에 상기 Sn-1, C를 얻은 후에 반올림 제어값을 제1멀티플렉서(301e)에 공급하게 된다.
이에따라 상기한 제1멀티플렉서(301e)는 제2배타적 오아게이트(301c)의 출력 결과값과 제3배타적 오아게이트(302d)에서 출력되는 결과값 중에서 가까운쪽으로 반올림된 값을 선택하여 제5레지스터(307)를 통해 정규화수단(302)의 반올림 보충부(302b)에 입력하게 된다.
이때, 뺄셈시 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1가 0일 때 최하위 비트(LSB)로 쉬프트 되어지는 값 So*는 제9도의 정규화수단(302)에 구성된 반올림 쉬프트값 결정부(302a)의 제1쉬프트값 생성부(500)에서 발생되어 반올림 모드(m1)(m2)에 따라 반올림모드 선택부(504)를 통해 정규화수단(302)의 반올림 보충부(302b)에 입력된다.
즉, 상기 최상위 비트(MSB)인 Sn-1가 0일때 최하위 비트(LSB)로 쉬프트 되어지는 값 So*는 가까운쪽으로의 반올림일 경우에 상기 제1쉬프트값 생성부(500)의 제19, 제20앤드게이트(500a)(500b)와 제14오아게이트(500c)에서 가드(G) 비트, 라운드(R), 스티키(Sy) 비트를 논리화하여 얻어진다.
이를 논리식으로 표현하면 다음과 같다.
로 얻어져 반올림모드 선택부(404)를 통해 선택되어 상기한 반올림 보충부(302b)에 입력된다.
그리고, 상기 반올림 판단자료인 변수들을 이용하여 IEEE에서 지정한 4가지의 반올림 방법중에 0으로의 반올림일때를 제7도내지 제9도를 참조하여 설명하면 다음과 같다.
즉, 0으로의 반올림 일 때, 덧셈 연산시 반올림의 결과는 전술한 바와 같이, 버림임으로 제8도의 제2반올림 생성부(401)에서 생성되어 반올림모드 선택부(404)를 통해 선택되어 제7도의 제1멀티플렉서(301e)에 입력되는 반올림 제어값은 0이다.
그리고, 뺄셈 연산시 반올림의 결과는 버림임으로 반올림으로 인한 최하위 비트(LSB)로의 1의 올림수 V2, V3은 0이 되고, 반올림 쉬프트값 결정부(302a)의 제1쉬프트값 생성부(401)에서 발생되어 반올림 보충부(302b)에 입력되는 0으로의 반올림시 쉬프트값 So*는 G2가 된다.
따라서, 0으로의 반올림일 때 제1멀티플렉서(301e)에 입력되는 쉬프트값, 덧셈/뺄셈 연산의 결과 및 반올림값은 제11도와 같다.
상기에서 뺄셈시의 제1멀티플렉서(301e)에 입력되는 반올림 제어값은 제8도의 제2반올림 생성부(401)의 제8오아게이트(401a)와 제9앤드게이트(401b)에서 분수정렬부(300c)로부터 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 제1분수덧셈기(301a)로부터 입력되는 올림수(C) 콘트롤러로부터 입력되는 뺄셈연산신호(Sub)를 논리화되어 얻어진다.
이를 논리화식으로 표현하면 다음과 같다.
Sub*(G+R+Sy+C)로 논리화되어 반올림 결정부(301f)의 반올림모드 선택부(404)를 통해 선택되어 제1멀티플렉시(301e) 입력된다.
따라서, 덧셈/뺄셈시 제1멀티플렉서(301e)에 입력되는 반올림 제어값은 Sub*(G+R+Sy+C)이다.
그리고, 뺄셈시 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1가 0일 때 최하위 비트(LSB)로 쉬프트 되어지는 값 So*는 제9도의 정규화수단(302)에 구성된 반올림 쉬프트값 결정부(302a)의 제2쉬프트값 생성부(500)에서 발생되어 반올림 모드(m1)(m2)에 따라 반올림모드 선택부(504)를 통해 정규화수단(302)의 반올림 보충부(302b)에 입력된다.
즉, 상기 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1가 0일 때 최하위 비트(LSB)로 쉬프트 되어지는 값 So*는 0으로의 반올림일 경우에 있어서, 상기 제2쉬프트값 발생부(500)의 제21내지 제23앤드게이트(501a)(501b)(501c)와 제15오아게이트(501d)에서 가드(G) 비트, 라운드(R), 스티키(Sy) 비트를 논리화하여 얻어진다,
이를 논리식으로 표현하면 다음과 같다.
얻어져 반올림모드 선택부(404)를 통해 선택되어 상기한 반올림 보충부(302b)에 입력된다.
그리고, 상기 반올림 판단자료인 변수들을 이용하여 IEEE에서 지정한 4가지의 반올림 방법중에 양의 무한대로의 반올림일때를 제7도내지 제9도를 참조하여 설명하면 다음과 같다.
즉, 양의 무한대로의 반올림 일 때, 덧셈에서의 반올림 위치는 덧셈의 결과에 의한 올림수의 여부에 따라 결정된다.
일반적인 양의 무한대로의 반올림 알고리즘을 올림수를 고려하여 변형하면 다음과 같다.
② 양의 무한대로의 반올림에 있어서,
만약 부호비트(S)가 0이고, 만약(G=1 또는 R=1 또는 Sy=1이면 올림이고 아니면 버림이다.
그리고 만약 (So=1 또는 G=1 또는 R=1 또는 Sy=1)이면 올림이고 아니면 버림이다.
상기 모든 조건이 아니면 버림한다.
이와같이, 양의 무한대로의 반올림에서 덧셈시에 전술한 바와 같이, 가까운쪽으로의 반올림 방법을 응용하여 제1멀티플렉서(301e)에 올바른 제어신호를 발생하지 못하는 경우가 있다.
즉, 가까운쪽으로의 반올림과 같이, 덧셈시 올림수(C)가 생기면 반올림시 올림이 되기 위해서는 1의 보수체계에서 생성된 결과의 최하위 비트(LSB)인 So가 1이 되어야 하나, 양의 무한대로의 반올림 일때 덧셈시 올림수가 생길때 상기 1의 보수체계에서 생성된 결과의 최하위 비트(LSB)인 So가 0일때에도 상기 데이타 정렬수단(300)의 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트로 인하여 반올림시 올림이 될 수 있으므로 직접 1의 보수체계에서 생성된 결과의 1번째 비트인 S1에 1을 더하거나 1의 보수 체계에서 생성된 결과의 최하위 비트(LSB)인 So에 2를 더해야 한다.
이를 위해 전술한 양의 무한대로의 반올림에서 덧셈 연산시 데이타 정렬수단(300)에 반가산기 로직부(300f)를 부수부 연산전에 추가하였다.
따라서, 전술한 바와 같이, 데이타 정렬수단(300)의 분수정렬부(300c)에서 입력되는 분수부와 제1배타적오아게이트(300d)에서 입력되는 분수부가 상기한 반가사나기 로직부(300f)를 거치면 새로운 분수부 A1, B1이 되며, 상기 A1에서 최하위 비트(LSB)는 0이 된다.
그리고, 상기 반가산기 로직부(300f)를 통한 분수부 A1의 최하위 비트(LSB)에 가드(G) 비트 또는 라운드(R) 비트 또는 스티키(Sy) 비트 값을 넣어준다.
이때, 상술한 제1, 제2분수부 덧셈기(301a)(301b)로이루어진 올림수 선택 덧셈기에 의해 분수부에 대한 덧셈시 올림수(C)가 0일 때, 분수부 A1의 최하위 비트(LSB)에 반올림 제어값인 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트값을 넣어 주었기 때문에 반올림 결정부(301f)의 제3반올림 생성부(402)에서 발생되어 반올림 모드 선택부(404)를 통해 제1멀티플렉서(301e)에 입력되는 반올림 제어신호는 0이다.
상기 제1분수부 덧셈부(301a)에서 발생된 올림수(C)가 1일때는 양의 무한대로 반올림에서 올림수(C)가 1일때 반올림을 결정하는 1의 보수 체계에서 생성된 결과의 1번째 비트인 So또는 분수정렬부(300c)의 가드(G) 비트 또는 라운드(R) 비트 또는 스티키(Sy) 비트 값을 제8도에 도시한 제3반올림 생성부(402)를 통해 논리화하고 반올림모드 선택부(404)를 통해 제1멀티플렉서(301e)를 제어하게 된다.
따라서, 1의 보수 체계에서 생성된 결과의 1번째 비트인 So가 0이고 덧셈의 결과로 올림수(C)가 생겼고 가드(G) 비트, 라운드(R) 비트, 스티키(Sy)에 의해 반올림이 올림일때 1의 보수 체계에서 생성된 결과의 1번째 비트인 So에 2를 더할 수 있다.
즉, 제8도에서와 같이, 반올림 결정부(301f)의 제1반올림 생성부(402)는 덧셈시의 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 1의 보수 체계에서 생성된 결과의 최하위 비트(LSB)인 So와 제1분수부 덧셈기(301a)에서 발생된 올림수(C) 및 콘트롤러에서 발생된 덧셈연산신호(Add)를 제9오아게이트(402a)와 제10앤드게이트(402d)를 통해 논리화하여 덧셈시의 반올림 제어값을 제11오아게이트(402c) 및 반올림모드 선택부(404)를 통해 제1멀티플렉시(301e)에입력하여 제어하게 된다.
즉, 양의 무한대로의 반올림에서 덧셈시 상기 제3반올림 생성부(402)에서 발생되는 반올림 제어값을 논리화식으로 표현하면 다음과 같다.
Add*(C*(So+G+R+Sy))로 발생되어 제11오아게이트(402c) 및 반올림모드 선택부(404)를 통해 제1멀티플렉서(301e)를 제어하게 된다.
그리고, 뺄셈 연산시의 반올림은 전술한 바와 같이, 부호비트(S:Sign)가 0일 경우는 올림이고 부호비트(S)가 1일 경우는 버림이다.
상기 부호비트(S)가 0일 경우 양의 무한대로의 반올림에서 반올림 제어값은 제12도의 (a)와 같다.
그리고상기 부호비트(S)가 1일 경우 양의 무한대로의 반올림에서 반올림 제어값은 제12도의 (b)와 같다.
양의 무한대로의 반올림에서의 뺄셈시에는 분수정렬부(300c)에서 생성된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy) 비트와 연산의 결과에 대한 분수부의 부호비트(S), 1의 보수 체계에서 생성된 결과 의 최상위 비트(MSB)인 Sn-1, 제1분수부 덧셈기(301a)에서 발생된 올림수(C) 및 콘트롤러에서 발생된 뺄셈연산신호(Sub)를 제3반올림 생성부(402)의 제11내지 제14앤드게이트(402e 내지 402h)와 제10오게이트(402b)에서 논리화하여 뺄셈시의 반올림 제어값을 제11오아게이트(402c) 및 반올림모드 선택부(404)를 통해 제1멀티플렉서(301e)에 입력하여 제어하게 된다.
즉, 양의 무한대로의 반올림에서 뺄셈시 상기 제3반올림 생성부(402)에서 발생되는 반올림 제어값을 논리화식으로 표현하면 다음과 같다.
발생되어 제11오아게이트(402c), 반올림모드 선택부(404)를 통해 제1멀티플렉서(301e)를 제어하여 제2, 제3배타적 오아게이트(301c)(301d)에서 출력되는 값중에서 반올림된 값을 선택하도록 한다.
따라서, 양의 무한대로의 반올림에서의 반올림 결정부(301f)의 제3반올림 생성부(402)에서 덧셈/뺄셈시 발생되어 상기 제1멀티플렉서(301e)에 입력되는 반올림 제어값은 하기와 같다.
(G+R+Sy)+C)로 발생되어 반올림모드 선택부(404)를 통해 제1멀티플렉서(301e)를 제어하여 덧셈/뺄셈시 제2, 제3배타적 오아게이트(301c)(301d)에서 출력되는 분수부의 결과값중에 양의 무한대로의 반올림된 분수부의 결과값을 선택하도록 한다.
이때, 뺄셈시 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1가 0일 때 최하위 비트(LSB)로 쉬프트 되어지는 값 So*는 제9도의 정규화수단(302)에 구성된 반올림 쉬프트값 결정부(302a)의 제3쉬프트값 생성부(502)에서 발생되어 반올림모드(m1)(m2)에 따라 반올림모드 선택부(504)를 통해 정규화수단(302)의 반올림 보충부(302b)에 입력된다.
즉, 상기 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1가 0일 때 최하위 비트(LSB)로 쉬프트 되어지는 값 So*는 양의 무한대로의 반올림일 경우에 상기 제3쉬프트값 생성부(502)의 제24, 제25앤드게이트(502a)(502b)와 제16오아게이트(502c)에서 가드(G) 비트, 부호비트(S) 및 제2쉬프트값 생성부(501)의 반올림 제어값이 논리화되어 얻어진다.
이를 논리식으로 표현하면 다음과 같다.
얻어져 반올림모드 선택부(404)를 통해 선택되어 상기한 반올림 보충부(302b)에 입력된다.
상기 반올림 파단자료인 변수들을 이용하여 IEEE에서 지정한 4가지 반올림 방법중에서 마지막으로 음의 무한대로의 반올림 일때를 설명하면 다음과 같다.
즉, 음의 무한대로의 반올림일 때, 덧셈 연산시 두 양수의 덧셈은 양수임으로 버림이다.
따라서, 제8도의 제4반올림 생성부(403)에서 발생되어 반올림모드 선택부(404)를 통해 선택되어 제7도의 제1멀티플렉서(301e)에 입력되는 반올림 제어값은 0이다.
그리고, 뺄셈 연산시 반올림은 부호비트(S)가 0일때는 양의 무한대로의 반올림에서 부호비트(S)가 1일때와 동일하고, 부호비트(S)가 1일때는 양의 무한대로의 반올림에서 부호비트(S)가 0일때와 동일하다.
따라서, 덧셈/뺄셈시 제1멀티플렉서(301e)에 입력되는 반올림 제어값은 제8도의 제4반올림 생성부(403)의 제15내지 제18앤드게이트(403c 내지 403f)와 제12, 제13 오아게이트(403a)(403b)에서 분수정렬부(300c)로 부터 발생된 가드(G) 비트, 라운드(R) 비트, 스티키(Sy)비트와 연산의 결과에 대한 분수부의 부호비트(S) 및 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1, 제1분수부 덧셈기(301a)에서 발생된 올림수(C), 콘트롤러에서 발생된 뺄셈연산신호(Sub)가 논리화되어 얻어진다.
이를 논리화식으로 표현하면 다음과 같다.
논리화되어 반올림 결정부(301f)의 반올림보드 선택부(404)를 통해 제1멀티플렉서(301e)에 입력되어 제2, 제3배타적 오아게이트(301c)(301d)에서 출력되는 분수부의 결과값중에 음의 무한대로의 반올림된 분수부의 결과값을 선택하도록 한다.
그리고, 뺄셈의 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1가 0일 때 최하위 비트(LSB)에 쉬프트 되어지는 값 So*는 제9도의 정규화수단(302)에 구성된 반올림 쉬프트값 결정부(302a)의 제4쉬프트값 생성부(503)에서 발생되어 반올림되어 반올림모드 선택부(504)를 통해 정규화수단(302)의 반올림 보충부(302b)에 입력된다.
즉, 상기 1의 보수 체계에서 생성된 결과의 최상위 비트(MSB)인 Sn-1가 0일 때 최하위 비트(LSB)에 쉬프트 되어지는 값 So*는 음의 무한대로의 반올림일 경우에 있어서, 상기 제4쉬프트값 발생부(503)의 제26, 제27 앤드게이트(503a)(503b)와 제17 오아게이트(503c)에서 가드(G) 비트, 부호비트(S) 및 제2쉬프트값 생성부(501)에서 발생된 쉬프트 제어값이 논리화되어 얻어진다.
이를 논리화식으로 표현하면 다음과 같다.
발생되어 반올림모드 선택부(504)를 통해 상기한 반올림 보충부(302b) 및 제로판독 카운터부(302c)에 입력된다.
그리고, 상기 정규화수단(302)의 반올림 보충부(302b)는 인에어블신호, 피연산자 제어신호(Op), 반올림 쉬프트값 결정부(302a)에서 발생된 쉬프트제어신호에 의해 가까운쪽으로의 반올림, 0으로의 반올림, 양의 무한대로의 반올림, 음의 무한대로의 반올림시 제1멀티플렉서(301e)에서 입력되는 분수부의 결과값의 반올림을 보충하게 된다.
즉, 상기 반올림 보충부(302b)는 덧셈 연산시 오버플로우인 올림수(C)가 생겼을 때 이거나 뺄셈시 최하위 비트(LSB)인 Sn이 0이될 때 인에이블 된다.
덧셈시, 즉 피연산자 제어신호(Op)가 0일때에는 오버플로우가 생겼을 때 즉, 제1분수부 덧셈기(301a), 제2분수부 덧셈기(301b)에서 생성된 결과중에 반올림 결정부(301f)에 의해 제1멀티플렉서(301e)에서 선택된 값에서의 올림수(C)가 1일 때, 1비트 하위 비트쪽으로 쉬프트되고 최상위 비트(MSB)는 라이트 마스트(right mask)인 1이 되고, 제2지수부 덧셈기(302e)에 1을 더하라는 신호를 주게된다.
그리고, 뺄셈시에는 상위 비트쪽으로 1비트 쉬프트 하면서 반올림 쉬프트값 결정부(302a)에서 가까운쪽으로 반올림, 0으로의 반올림, 양의 무한대로의 반올림, 음의 무한대로의 반올림에 따라 생성되는 레프트 마스크(left mask)값을 최하위 비트(LSB)에 삽입하여 분수정규화부(302f)에 입력하게 된다.
상기 제로판독 카운터부(302c)는 제1멀티플렉서(301e)를 통해 선택되어 입력되는 분수부 출력값에서 정규화를 위해 선행 0수를 계수하고 이 계수값을 분수부의 정규화를 위해 분수정규화부(302f ) 및 제2지수부 덧셈기(302e)에 입력함과 아울러 선택신호를 제2멀티플렉서(302d)에 입력하게 된다.
상기 제2멀티플렉서(302d)는 상기 제로판독 카운터부(302c)에서 입력되는 선택신호에 의해 데이타 정렬수단(300)의 제1지수부 덧셈기(300g)의 출력값과 0중에서 하나를 선택하여 제2지수부 덧셈기(302e)에 입력하게 된다.
상기 제2지수부 덧셈기(302e)는 상기 반올림 보충부(302b)에 의해 상기 제2멀티플렉서(302d)를 통해 선택된 값에서 제로판독카운터부(302c)의 선행 0의 수만큼 뺄셈을 하게 되는데, 배정밀도형식에서 분수부의 최대 나타날 수 있는 비트 수는 53비트 이므로 지수부의 차이는 6이다.
그리고 부동 소수점에서 0의 표현은 부호비트(S)가 0이고, 지수부가 0이고, 분수부가 0이다.
부동 소수점 덧셈/뺄셈에서 0은 분수부의 덧셈/뺄셈 연산후 분수부가 0일때를 뜻한다.
그런데 이경우에 있어서, 지수부가 0이 아닌수가 될 수 있다.
따라서, 부동 소수점 0을 처리해 주기위해 제1멀티플렉서(301e)에서 선택된 분수부의 출력값이 모두0이고 가드(G) 비트가 0일 경우 제로판독 카운터부(302c)는 제2멀티플렉서(302d)에서의 입력중 0을 선택하게 하고 제2지수부 덧셈기(302e)에 0을 전달함으로써, 결국 지수부의 결과인 제2분수부 덧셈기(302e)의 출력값은 0이 된다.
또한 상기 분수정규화부(302f)는 상기 반올림 보충부(302b)에서 입력되는 분수부의 출력값을 뺄셈일 경우에 한해서 정규화를 수행하고 제로판독 카운터부(302c)에서 입력되는 선행 0만큼을 상위 비트쪽으로 쉬프트하여 최종 분수부의 결과를 출력하게 된다.
이상에서 상세히 설명한 바와같이, 본 발명에 따르면 부동소수점 덧셈/뺄셈 연산과 반올림을 동시에 수행함으로써, 일반적 4과정의 연산단계를 지수정렬, 연산 및 반올림, 정규화의 3단계로 줄여 덧셈/뺄셈의 특성과 연산시 사용되는 올림수 선택 덧셈기를 이용하여 반올림 처리를 연산과 동시에 처리함으로 인해 반올림을 위한 별도의 시간을 요하지 않고 신속하게 연산처리할 수 있으며, 또한 반올림 수행시에 발생되는 재정규화 처리도 근본적으로 해결될뿐 아니라 반올림을 위한 증가기나 덧셈기 대신 간단한 논리회로를 사용함으로 인하여 하드웨어의 비용이 현저히 줄어드는 효과가 있다.
Claims (28)
- 입력되는 제1, 제2피연산자의 지수부를 비교하여 지수부의 차이만큼 분수부를 정렬하는 데이타 정렬과정과, 상기 데이타 정렬과정에서 정렬되어 얻어진 분수부를 가지고 덧셈과 뺄셈 연산을 수행하고 그 연산한 덧셈 및 뺄셈의 결과값에 따라 IEEE에서 지정한 4가지 모드의 반올림을 수행하여 그 반올림된 값을 선택 출력하는 덧셈/뺄셈 및 반올림연산과정과, 상기 덧셈/뺄셈 및 반올림 연산과정에서 선택되어 얻어진 덧셈/뺄셈의 결과값과의 반올림된 값을 정규화하여 최종 연산출력을 얻는 정규화과정으로 이루어짐을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법.
- 제1항에 있어서, 덧셈/뺄셈 및 반올림 연산과정은 덧셈시 연산된 결과값에서 반올림할 위치를 올림수에 따라 결정함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법.
- 제1항에 있어서, 덧셈/뺄셈 및 반올림 과정은 뺄셈시 정규화를 위해 1의 보수 체계에서 생성된 결과의 최상위 비트의 값에 따라 쉬프트를 하여야 하는 여부를 결정하는 것을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법.
- 제1항에 있어서, 덧셈/뺄셈 및 반올림 과정은 덧셈/뺄셈 연산시 1의 보수체계와 2의 보수체계를 병행하여 연산하는 것을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법.
- 제1항에 있어서, 정규화과정은 상기 분수부에 대한 부동소수점 뺄셈시 분수부 뺄셈과 반올림 된 값을 선택받아 최상위비트 여부에 따른 상위 비트로의 1비트 쉬프트와 최하위 비트에 반올림 모드에 따라 반올림 쉬프트값을 삽입하여 정규화하는 것을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법.
- 입력되는 두 피연산자의 지수부를 비교하여 지수부의 차이만큼 분수부를 정렬하는 데이타 정렬수단과, 상기 데이타 정렬수단에서 정렬된 분수부를 가지고 덧셈과 뺄셈을 연산하고 그 연산값에 따라 반올림을 동시에 처리하여 그 값들을 선택 출력하는 덧셈/뺄셈 및 반올림수단과, 상기 덧셈/뺄셈 및 반올림수단에서 선택된 반올림된 연산 결과값을 정규화하여 최종 연산출력을 얻는 정규화수단으로 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치
- 제6항에 있어서, 데이타 정렬수단은 상기 두 피연산자의 지수부를 비교하여 그 결과값을 출력하는 지수비교부와, 상기 지수비교부에서 비교한 결과에 따라 입력되는 상기 두 피연산자의 분수부를 지수부가 큰쪽 또는 지수부가 작은쪽으로 정렬하여 출력하는 제1스웨퍼와, 상기 지수비교부에서 비교한 결과신호에 따라 입력되는 두 지수부를 큰쪽과 작은쪽으로 정렬하여 출력하는 제2스웨퍼와, 상기 제2스웨퍼에서 정렬된 두 지부수중에 큰쪽의 지수부를 선택하여 출력하고 두 지수부와의 차값을 구하여 출력하는 제1지수부 덧셈기와, 상기 제1스웨퍼에서 정렬된 지수부가 작은쪽의 분수부를 상기 제1지수부 덧셈기에서 입력되는 차이만큼 하위 비트쪽으로 쉬프트하고 반올림에 필요한 자료인 가드(G)비트, 라운드(R)비트, 스티키(Sy)비트를 발생하는 분수정렬부와, 상기 제1스웨퍼에서 정렬된 지수부가 큰쪽의 분수부를 피연산자 제어신호에 따라 반전역할을 수행하여 반전 출력하거나 또는 그 입력값을 바로 출력하는 제1배타적오아게이트와, 상기 제1배타적오아게이트에서 얻어진 결과값과 분수정렬부의 결과값을 반올림모드에 따라 바이패스키거나 또는 상기 분수정렬부의 가드(G)비트, 라운드(R)비트, 스티키(Sy) 비트를 최하위비트에 넣어주는 반가산기 로직부로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제6항에 있어서, 덧셈/뺄셈연산 및 반올림수단은 상기 데이타 정렬수단의 반가산기 로직부로부터 바로 바이패스된 분수부(A-f1)와 반전되어 입력되는 결과값을 가산하여 출력하고 올림수를 출력하는 제1분수부 덧셈기와, 상기 반가산기 로직부로부터 바로 바이패스된 분수부(B-f1)와 제1배타적 오아게이트에서 논리합된 결과값을 반가산기 로직부를 통해 입력받아 가산하고 그 가산된 값에 1을 증가시켜 출력하는 제2분수부 덧셈기와, 상기 반가산기 로직부로부터 바로 바이패스된 분수부(B-f1)와 제1배타적 오아게이트에서 논리합된 결과값을 반가산기 로직부를 통해 입력받아 가산하고 그 가산된 값에 1을 증가시켜 출력하는 제2분수 덧셈기와, 상기 제1분수부 덧셈기로부터 얻어진 올림수를 반전하고 피연산자 제어신호와 논리곱하여 얻어진 신호에 따라 제1, 제2분수부 덧셈기의 출력 결과신호를 반전하여 출력하거나 그냥 바이패스시키는 제2, 제3배타적 오아게이트와, 상기 제2, 제3 배타적 오아게이트에서 출력된 각각의 반올림된 결과값을 선택하여 출력하는 제1멀티플렉서와, 상기 제1멀티플렉서에서 반올림된 값을 선택하도록 반올림 제어신호를 발생하는 반올림 결정부로 구성함을 특징으로 한 부동소수점 덧셈/뺄셈 연산기의 반올림 장치
- 제6항에 있어서, 정규화수단은 뺄셈시 분수부 연산후 1의 보수체계에서 생성된 결과의 최상위 비트가 0이면 상위비트쪽으로 1비트 쉬프트할시 반올림 모드에 따라 최하위 비트로 쉬프되는 값(SO*)을 각각 달리 발생하여 선택 출력하는 반올림 쉬프트값 결정부와, 상기 반올림 쉬프트값 결정부에서 생성된 반올림 모드에 따른 최하위 비트로의 쉬프트값(SO*) 및 인에어블신호, 쉬프트방향신호에 따라 상기 반올림 결정부에 의해 제1멀티플렉서에서 선택되어 입력되는 반올림된 분수부의 결과값의 반올림을 보충하여 주는 반올림 보충부와, 상기 반올림 결정부에 의해 제1멀티플렉서에서 선택된 반올림된 분수부의 결과값에서 정규화를 위해 선행 0을 계수하여 그 값을 출력하는 제로판독 카운터부와, 상기 제로판독 카운터부에서 계수된 값에 따라 뺄셈시 상기 반올림 보충부에서 보충된 반올림된 분수부의 결과값을 정규화하여 최종 덧셈/뺄셈 연상된 분수부를 출력하는 분수정규화부와, 상기 제로판독 카우터부에서 계수된 값에 따라 데이타 정렬수단의 제1지수부 덧셈기에서 계산된 지수부의 차값과 0중에 하나를 선택하여 출력하는 제2멀티플렉서와, 상기 반올림 보충부에서 보충된 분수부의 결과값에 따라 제2멀티플렉서에서 선택된 결과값과 제로판독 카운터부에서 계수한 값과의 차를 구하여 최종 덧셈/뺄셈 연산의 지수부를 얻는 제2지수부 덧셈기로 구성함을 특징으로 한 부동 소수점/뺄셈 연산기의 반올림 장치.
- 제8항에 있어서, 반올림 결정부는 상기 분수정렬부에서 생성된 가드(G)비트, 라운드(R) 비트, 스티키(Sy) 비트와 1의 보수체계에서 생성된 결과의 최상, 하위 비트 So, Sn-1및 1의 보수 체계에서 생성된 결과의 1번째 비트(S1), 제1분수부 덧셈기에서 발생된 올림수(C)와 콘트롤러에서 입력되는 덧셈/뺄셈 연산값(Add/Sub)을 논리화하여 가까운쪽으로의 반올림 제어값을 생성하는 제1반올림 생성부와, 상기 분수정렬부에서 발생된 가드(G)비트, 라운드(R)비트, 스티키(Sy)비트와 제1분수부 덧셈기의 올림수(C) 및 콘트롤러의 뺄셈 연산값(Sub)을 논리화하여 0으로의 반올림 제어값을 생성하는 제2반올림 생성부와, 상기 분수정렬부에서 생성된 가드(G)비트, 라운드(R)비트, 스티키(Sy)비트와 콘트롤러에서 입력되는 덧셈/뺄셈 연산값(Add/Sub), 제1분수부 덧셈기(301a)의 올림수(C), 1의 보수 체계에서 생성된 결과의 최상, 하위비트 Sn-1, So및 연산의 결과에 대한 분수부의 부호비트(S)를 논리화하여 양의 무한대로의 반올림 제어값을 생성하는 제3반올림 생성부와, 상기 분수정렬부의 가드(G)비트, 라운드(R)비트, 스티키(Sy)비트와 콘트롤러의 뺄셈연산값(Sub), 제1분수부 덧셈기의 올림수(C), 1의 보수 체계에서 생성된 결과의 최상위비트 Sn-1및 부호비트(S)를 논리화하여 음의 무한대로의 반올림 제어값을 생성하는 제4반올림 생성부와, 상기 제1내지 제4반올림 생성부에서 생성된 4가지 반올림 제어값을 반올림 모드에 따라 선택하여 제1멀티플렉서를 제어하는 반올림모드 선택로 구성함을 특징으로 한부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제10항에 있어서, 제1반올림 생성부는 덧셈시의 상기 제1멀티플렉서에 입력되는 반올림 제어값이 Add*(C*G*(So+R+S)로 생성되도록 세개의 오아게이트와 네 개의 앤드게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제10항에 있어서, 제2반올림 생성부는 덧셈시 상기 제1멀티플렉서에 입력되는 반올림 제어값이 Sub*(G+R+Sy+C)로, 생성되도록 하나의 오아게이트와 앤드게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제10항에 있어서, 제3반올림 생성부는 덧셈시 상기 제1멀티플렉서에 입력되는 반올림 제어값이 Add*(C*(So+G+R+Sy))로, 생성되도록 하나의 오아게이트와 앤드게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림장치.
- 제10항에 있어서, 제4반올림 생성부는 덧셈시 상기 제1멀티플렉서에 입력되는 반올림 제어값이 0으로 생성됨을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제10항에 있어서, 제1반올림 생성부는 뺄셈시 제1멀티플렉서에 입력되는 반올림 제어값이+C)로 생성되도록 세 개의 오아게이트와 네 개의 앤드게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제10항에 있어서, 제2반올림 생성부는 뺄셈시 제1멀티플렉서에 입력되는 반올림 제어값이 덧셈시의 반올림 제어값과 동일한 것임을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제10항에 있어서, 제3반올림 생성부는 뺄셈시 제1멀티플렉서에 입력되는 반올림 제어값이 생성되도록 하나의 오아게이트와 네 개의 앤드게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림장치.
- 제10항에 있어서, 제4반올림 생성부는 뺄셈시 제1멀티플렉서에 입력되는 반올림 제어값이R+Sy)+C)로, 생성되도록 두 개의 오아게이트와 네 개의 앤드게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제10항에 있어서, 제1반올림 생성부는 덧셈과 뺄셈시의 반올림 제어값을 논리합하는 하나의 오아게이트를 더 포함하여 구성한 것을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제10항에 있어서, 제3반올림 생성부는 덧셈과 뺄셈시의 반올림 제어값을 논리합하는 하나의 오아게이트를 더 포함하여 구성한 것을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제9항에 있어서, 반올림 쉬프트값 결정부는 상기 분수정렬부에서 생성된 가드(G)비트, 라운드(R)비트, 스티키(Sy)비트를 논리화하여 가까운쪽으로의 반올림 쉬프트값을 생성하는 제1쉬프트값생성부와, 상기 분수정렬부(300c)에서 생성된 가드(G)비트, 라운드(R)비트, 스티키(Sy)비트와의 논리화하여 0으로의 반올림 쉬프트값을 발생하는 제2쉬프트값 생성부와, 상기 분수정렬부의 가드(G)비트와 콘트롤러의 부호비트(S) 및 제2쉬프트값 생성부에서 생성된 쉬프트값과의 논리화하여 양의 무한대로의 반올림 쉬프트값을 생성하는 제3쉬프트값 생성부와, 상기 분수정렬부의 가드(G)비트와 콘트롤러의 부호비트(S) 및 제2쉬프트값 생성부의 쉬프트값과를 논리화하여 음의 무한대로의 반올림 쉬프트값을 생성하는 제4쉬프트값 생성부로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제21항에 있어서, 제1쉬프트값 생성부는 뺄셈시 가까운쪽으로의 반올림 쉬프트값이(R*G)+(R*Sy*G)로 생성되도록 두 개의 앤드게이트와 하나의 오아게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제21항에 있어서, 제2쉬프트값 생성부는 뺄셈시 0으로의 반올림 쉬프트값이생성되도록 세 개의 앤드게이트와 하나의 오아게이트로 구성함을 특징으로 한부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제21항에 있어서, 제3쉬프트값 생성부는 뺄셈시 양의 무한대로의 반올림 쉬프트값이 생성되도록 두 개의 앤드게이트와 하나의 오아게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림장치.
- 제21항에 있어서, 제4쉬프트값 생성부는 뺄셈시 음의 무한대로의 반올림 쉬프트값이 생성되도록 두 개의 앤드게이트와 하나의 오아게이트로 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림장치.
- 제22항 내지 제25항의 어느 한 항에 있어서, 쉬프트값은 뺄셈시 1의 보수체계에서 생성된 결과의 최상위 비트가 0일 때 최하위 비트로 쉬프트되는 값인 것을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제9항에 있어서, 반올림 보충부는 양방향 쉬프터인 것을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
- 제6항에 있어서, 데이타 정렬수단과 덧셈/뺄셈 연산 및 반올림수단, 정규화수단 사이에 분수부 및 지수부의 파이프라인을 구현하기 위한 제1내지 제5레지스터를 더 포함하여 구성함을 특징으로 한 부동 소수점 덧셈/뺄셈 연산기의 반올림 장치.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1019940009331A KR0139733B1 (ko) | 1994-04-29 | 1994-04-29 | 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법 및 장치 |
US08/350,981 US5568412A (en) | 1994-04-29 | 1994-11-29 | Rounding-off method and apparatus of floating point arithmetic apparatus for addition/subtraction |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1019940009331A KR0139733B1 (ko) | 1994-04-29 | 1994-04-29 | 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR950029924A KR950029924A (ko) | 1995-11-24 |
KR0139733B1 true KR0139733B1 (ko) | 1998-07-01 |
Family
ID=19382137
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019940009331A KR0139733B1 (ko) | 1994-04-29 | 1994-04-29 | 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법 및 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5568412A (ko) |
KR (1) | KR0139733B1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20170138143A (ko) * | 2016-06-07 | 2017-12-15 | 목원대학교 산학협력단 | 단일 곱셈-누산 방법 및 장치 |
Families Citing this family (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5684729A (en) * | 1994-09-19 | 1997-11-04 | Hitachi, Ltd. | Floating-point addition/substraction processing apparatus and method thereof |
RU95107478A (ru) * | 1995-05-18 | 1997-02-10 | А.И. Грушин | Способ устранения старших незначащих цифр при вычислениях с плавающей запятой и устройство для его осуществления |
US5808926A (en) * | 1995-06-01 | 1998-09-15 | Sun Microsystems, Inc. | Floating point addition methods and apparatus |
DE69626596T2 (de) * | 1995-10-20 | 2003-12-18 | Kabushiki Kaisha Toshiba, Kawasaki | Logische Schaltung, die nach dem Carry select Prinzip arbeitet |
US5633819A (en) * | 1995-10-24 | 1997-05-27 | Exponential Technology, Inc. | Inexact leading-one/leading-zero prediction integrated with a floating-point adder |
JPH09204295A (ja) * | 1996-01-29 | 1997-08-05 | Kofu Nippon Denki Kk | スティッキービット検出回路 |
US6058410A (en) * | 1996-12-02 | 2000-05-02 | Intel Corporation | Method and apparatus for selecting a rounding mode for a numeric operation |
GB2323189B (en) * | 1997-03-14 | 2001-11-21 | Nokia Mobile Phones Ltd | Processing multi-bit signals representing floating-point numbers |
US6151615A (en) * | 1997-09-02 | 2000-11-21 | Intrinsity, Inc. | Method and apparatus for formatting an intermediate result for parallel normalization and rounding technique for floating point arithmetic operations |
US6094668A (en) * | 1997-10-23 | 2000-07-25 | Advanced Micro Devices, Inc. | Floating point arithmetic unit including an efficient close data path |
US6085212A (en) * | 1997-10-23 | 2000-07-04 | Advanced Micro Devices, Inc. | Efficient method for performing close path subtraction in a floating point arithmetic unit |
US6088715A (en) * | 1997-10-23 | 2000-07-11 | Advanced Micro Devices, Inc. | Close path selection unit for performing effective subtraction within a floating point arithmetic unit |
US6298367B1 (en) * | 1998-04-06 | 2001-10-02 | Advanced Micro Devices, Inc. | Floating point addition pipeline including extreme value, comparison and accumulate functions |
KR100290906B1 (ko) | 1998-03-10 | 2001-07-12 | 김영환 | 부동소수점곱셈기에서반올림과덧셈을동시에수행하는장치및방법 |
JP2000010762A (ja) * | 1998-06-19 | 2000-01-14 | Mitsubishi Electric Corp | 浮動小数点演算装置 |
US6148314A (en) * | 1998-08-28 | 2000-11-14 | Arm Limited | Round increment in an adder circuit |
US6205461B1 (en) * | 1998-09-18 | 2001-03-20 | Ati International Srl | Floating point arithmetic logic unit leading zero count using fast approximate rounding |
US6557021B1 (en) * | 1999-11-04 | 2003-04-29 | Intrinsity, Inc. | Rounding anticipator for floating point operations |
US6668268B1 (en) * | 2000-11-09 | 2003-12-23 | Sun Microsystems, Inc. | Method and apparatus for compiling dependent subtraction operations on arithmetic intervals |
KR100465371B1 (ko) * | 2001-01-26 | 2005-01-13 | 학교법인연세대학교 | 덧셈 및 반올림 연산을 동시에 수행하는 부동 소수점alu 연산 장치 |
FI20010924A (fi) * | 2001-05-03 | 2002-11-04 | Nokia Corp | Mikroprosessorin muistinkäsittely |
US6952711B2 (en) | 2001-06-01 | 2005-10-04 | Microchip Technology Incorporated | Maximally negative signed fractional number multiplication |
US6976158B2 (en) | 2001-06-01 | 2005-12-13 | Microchip Technology Incorporated | Repeat instruction with interrupt |
US6601160B2 (en) | 2001-06-01 | 2003-07-29 | Microchip Technology Incorporated | Dynamically reconfigurable data space |
US6934728B2 (en) | 2001-06-01 | 2005-08-23 | Microchip Technology Incorporated | Euclidean distance instructions |
US6937084B2 (en) | 2001-06-01 | 2005-08-30 | Microchip Technology Incorporated | Processor with dual-deadtime pulse width modulation generator |
US6985986B2 (en) | 2001-06-01 | 2006-01-10 | Microchip Technology Incorporated | Variable cycle interrupt disabling |
US7020788B2 (en) | 2001-06-01 | 2006-03-28 | Microchip Technology Incorporated | Reduced power option |
US7007172B2 (en) | 2001-06-01 | 2006-02-28 | Microchip Technology Incorporated | Modified Harvard architecture processor having data memory space mapped to program memory space with erroneous execution protection |
US6604169B2 (en) | 2001-06-01 | 2003-08-05 | Microchip Technology Incorporated | Modulo addressing based on absolute offset |
US20020184566A1 (en) | 2001-06-01 | 2002-12-05 | Michael Catherwood | Register pointer trap |
US6728856B2 (en) | 2001-06-01 | 2004-04-27 | Microchip Technology Incorporated | Modified Harvard architecture processor having program memory space mapped to data memory space |
US6975679B2 (en) | 2001-06-01 | 2005-12-13 | Microchip Technology Incorporated | Configuration fuses for setting PWM options |
US7003543B2 (en) | 2001-06-01 | 2006-02-21 | Microchip Technology Incorporated | Sticky z bit |
US7467178B2 (en) | 2001-06-01 | 2008-12-16 | Microchip Technology Incorporated | Dual mode arithmetic saturation processing |
US6552625B2 (en) | 2001-06-01 | 2003-04-22 | Microchip Technology Inc. | Processor with pulse width modulation generator with fault input prioritization |
US7003539B1 (en) | 2001-08-08 | 2006-02-21 | Pasternak Solutions Llc | Efficiently determining a floor for a floating-point number |
US6552567B1 (en) | 2001-09-28 | 2003-04-22 | Microchip Technology Incorporated | Functional pathway configuration at a system/IC interface |
US20040021483A1 (en) * | 2001-09-28 | 2004-02-05 | Brian Boles | Functional pathway configuration at a system/IC interface |
US7062525B1 (en) | 2002-08-30 | 2006-06-13 | Lsi Logic Corporation | Circuit and method for normalizing and rounding floating-point results and processor incorporating the circuit or the method |
US7373369B2 (en) * | 2003-06-05 | 2008-05-13 | International Business Machines Corporation | Advanced execution of extended floating-point add operations in a narrow dataflow |
US7356553B2 (en) * | 2004-03-18 | 2008-04-08 | Arm Limited | Data processing apparatus and method for determining a processing path to perform a data processing operation on input data elements |
US8589258B2 (en) * | 2006-09-14 | 2013-11-19 | Microsoft Corporation | Declining balance financial calculation with no remainder |
US8005884B2 (en) * | 2007-10-09 | 2011-08-23 | Advanced Micro Devices, Inc. | Relaxed remainder constraints with comparison rounding |
US8402075B2 (en) * | 2009-03-16 | 2013-03-19 | Advanced Micro Devices, Inc. | Mechanism for fast detection of overshift in a floating point unit of a processing device |
JP2012221188A (ja) * | 2011-04-08 | 2012-11-12 | Fujitsu Ltd | 演算回路、演算処理装置、及び演算回路の制御方法 |
US8898214B2 (en) | 2012-04-23 | 2014-11-25 | Lsi Corporation | Method and apparatus to perform floating point operations |
US8954833B2 (en) * | 2012-06-06 | 2015-02-10 | International Business Machines Corporation | Half width counting leading zero circuit using comparators |
CN103677742B (zh) * | 2013-12-13 | 2016-08-17 | 广西科技大学 | 多浮点操作数加/减运算控制器 |
RU2686628C1 (ru) * | 2017-12-25 | 2019-04-29 | Акционерное общество "Ангстрем" (АО "Ангстрем") | Устройство сложения-вычитания чисел для цифро-сигнального процессора |
US10684824B2 (en) | 2018-06-06 | 2020-06-16 | Nvidia Corporation | Stochastic rounding of numerical values |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4562553A (en) * | 1984-03-19 | 1985-12-31 | Analogic Corporation | Floating point arithmetic system and method with rounding anticipation |
JP2558669B2 (ja) * | 1986-12-29 | 1996-11-27 | 松下電器産業株式会社 | 浮動小数点演算装置 |
US4926370A (en) * | 1989-04-17 | 1990-05-15 | International Business Machines Corporation | Method and apparatus for processing postnormalization and rounding in parallel |
EP0973089B1 (en) * | 1990-08-24 | 2002-07-17 | Matsushita Electric Industrial Co., Ltd. | Method and apparatus for computing floating point data |
-
1994
- 1994-04-29 KR KR1019940009331A patent/KR0139733B1/ko not_active IP Right Cessation
- 1994-11-29 US US08/350,981 patent/US5568412A/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20170138143A (ko) * | 2016-06-07 | 2017-12-15 | 목원대학교 산학협력단 | 단일 곱셈-누산 방법 및 장치 |
Also Published As
Publication number | Publication date |
---|---|
KR950029924A (ko) | 1995-11-24 |
US5568412A (en) | 1996-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR0139733B1 (ko) | 부동 소수점 덧셈/뺄셈 연산기의 반올림 방법 및 장치 | |
KR920005226B1 (ko) | 부동 소수점 연산장치 | |
EP0472148B1 (en) | Method and apparatus for computing floating point data | |
JP2508912B2 (ja) | 浮動小数点加算装置 | |
US5027308A (en) | Circuit for adding/subtracting two floating point operands | |
US5010508A (en) | Prenormalization for a floating-point adder | |
WO2001046795A2 (en) | Method and apparatus for performing single-cycle addition or subtraction and comparison in redundant form arithmetic | |
JP4388543B2 (ja) | 3項入力の浮動小数点加減算器 | |
KR100203468B1 (ko) | 부동소수점수를 위한 산술연산장치 | |
KR100465371B1 (ko) | 덧셈 및 반올림 연산을 동시에 수행하는 부동 소수점alu 연산 장치 | |
KR19980041799A (ko) | 결합된 선두 1 및 선두 제로 예상기 | |
US5623435A (en) | Arithmetic unit capable of performing concurrent operations for high speed operation | |
US5282156A (en) | Leading one anticipator and floating point addition/subtraction apparatus employing same | |
JP2511527B2 (ja) | 浮動小数点演算器 | |
US20030115236A1 (en) | Elimination of rounding step in the short path of a floating point adder | |
US6571264B1 (en) | Floating-point arithmetic device | |
US5432727A (en) | Apparatus for computing a sticky bit for a floating point arithmetic unit | |
JPH086766A (ja) | 正弦余弦演算装置 | |
KR20010018956A (ko) | 부동소수점 병렬 반올림 방법 및 연산장치 | |
JP3257278B2 (ja) | 冗長なシフト数予測とシフト誤り補正を用いた正規化装置 | |
JPS63158626A (ja) | 演算処理装置 | |
JPH0383126A (ja) | 浮動小数点乗算器 | |
Sohn et al. | Enhanced Floating-Point Multiply-Add with Full Denormal Support | |
JP3124286B2 (ja) | 浮動小数点数演算装置 | |
JPH05100825A (ja) | 正規化浮動小数点加減算器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20051201 Year of fee payment: 9 |
|
LAPS | Lapse due to unpaid annual fee |