KR100958224B1 - 사전-포화 고정-소수점 곱셈기 - Google Patents
사전-포화 고정-소수점 곱셈기 Download PDFInfo
- Publication number
- KR100958224B1 KR100958224B1 KR1020087020038A KR20087020038A KR100958224B1 KR 100958224 B1 KR100958224 B1 KR 100958224B1 KR 1020087020038 A KR1020087020038 A KR 1020087020038A KR 20087020038 A KR20087020038 A KR 20087020038A KR 100958224 B1 KR100958224 B1 KR 100958224B1
- Authority
- KR
- South Korea
- Prior art keywords
- operands
- multiplier
- overflow
- multiplication operation
- value
- Prior art date
Links
Images
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
- 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
-
- 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/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49921—Saturation, i.e. clipping the result to a minimum or maximum value
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/533—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
-
- 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/533—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
- G06F7/5334—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
- G06F7/5336—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm
- G06F7/5338—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm each bitgroup having two new bits, e.g. 2nd order MBA
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
- Processing Of Color Television Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Picture Signal Circuits (AREA)
Abstract
사전-포화(pre-saturating) 곱셈기가 임의의 곱셈을 수행하기 전에 곱셈 연산에 대한 피연산자(operand)들을 조사한다. 상기 피연산자들이 포화를 요구하는 오버플로(overflow)를 야기할 것이라면, 곱셈기는 본래의 피연산자들을 곱하지 않고 포화된 값을 출력한다. 일 실시예로, 상기 피연산자들로부터 유도되는 파라미터들은 곱셈 연산이 변경된 파라미터들에 수행될 때, 곱셈기가 포화된 결과를 산출하도록 변경된다. 이는 부분 적(product)으로서 영 대신 음의 영(negative zero)을 선택하도록 부스 리코딩(Booth recode)된 비트 그룹을 변경하는 단계, 및 상기 부분 적들에 대한 값 일(one)의 가산을 억제(따라서 상기 값 일을 효과적으로 차감)하는 단계를 포함할 수 있다. 다른 실시예로, 오버플로를 야기할 피연산자들이 검출될 때, 곱셈기의 출력은 미리 결정된 포화 값으로 강제된다.
Description
본 발명은 일반적으로 디지털 회로들의 분야 그리고 특정하게는 사전-포화, 고정-소수점 곱셈기에 관한 것이다.
고정-소수점(fixed-point) 곱셈은 프로세서들과 같은, 디지털 계산 회로들에 의해 수행되는 기본적인 산술 연산이다. 대부분의 프로세서 명령 세트 구조들은 다양한 고정-소수점 곱셈 명령들을 포함한다. 고정-소수점 곱셈의 공지된 위험성은 일부 조건들 하에서(여기서 더 완전히 기재되는 바와 같이), 적(product)이, 오버플로(overflow)로 알려진 상황인, 이용가능한 비트 폭으로 나타내어질 수 있는 수 값(numeric value)을 초과할 수 있다는 것이다. 이 경우, 상기 적의 상당한 잘못된 표현(misrepresentation)을 회피하기 위해, 곱셈 명령(instruction)은 "포화된(saturated)" 출력을 규정할 것이며, 이는 가용 비트 필드에서 표현될 수 있는 최대 수 값, 사실상, 실제 적에 가능한 가장 가까운 근사(approximation)이다. 이는 포화 고정-소수점 곱셈 명령(saturating fixed-point multiply instruction)으로 알려져 있다. 그러한 명령들은 일반적으로 피연산자들의 비트 폭의 두배인 상기 적에 대한 비트 폭을 규정한다.
정수 및 소수(fraction) 값들 모두가, 이용되는 협약(convention)에 따라, 고정-소수점 디지털 형태로 표현될 수 있다. 흔히 모든 현대 프로세서들은 2(two)의 보수(complement) 포맷을 이용하여 고정-폭 디지털 표현(representation)들로 양 및 음의 정수들을 표현한다. 상기 2의 보수 포맷이 통상적이다. 2의 보수 표현에서, 정수들은 "부호화된다(signed)". 즉, 정수가 양 또는 음인지 여부는 최상위 비트(Most Significant Bit, MSB), 즉 "부호 비트(sign bit)"의 검사에 의해 결정될 수 있다. 추가적으로, 2의 보수 표현에서, 부호화된 정수들에 대한 이진 산술 연산들은 정확한 2의 보수 결과들을 산출한다.
양의 2의 보수들은, 영(zero) 부호 비트를 갖는, 간소한 이진 형태로 표현된다. 결과적으로, 2의 보수 포맷으로 표현될 수 있는 가장 큰 양수는 2n-1이며, 여기서 n은 디지털 표현의 비트 폭이다. 음의 2의 보수들은 동일한 크기의 양의 수에 가산될 때 영이 되는 이진 수로서 표현된다. 음의 2의 보수들은 1의 부호 비트를 갖는다. 상기 음수들의 2의 보수 표현이 디지털 표현의 모든 n개의 비트들을 활용할 수 있기 때문에, 2의 보수 포맷으로 표현될 수 있는 가장 큰 음수는 2n-1이며, 이는 상기 최대 양의 2의 보수보다 크기에 있어서 일(one)만큼 더 크다. 따라서, 예를 들어, 32-비트 필드로 표현될 수 있는 부호화된 정수 값들의 범위는 -231 (0x8000 0000) 내지 +231-1(0x7FFF FFFF)이다.
임의의 2의 보수의 부정(negation)은 비트-마다(bit-wise) 상기 수를 반전(invert)시키고(1의 보수를 산출한다), 그리고 일(one)을 가산함으로써 형성될 수 있다. 그러므로, 음수의 2의 보수 표현을 계산하는 한 가지 방법은 대응하는 양수의 이진 표현을 반전시키고(이는 상기 양수의 1의 보수 형태이다) 1을 가산하는 것이다. 부정을 위한 본 알고리듬에 대한 유일한 예외는 표현될 수 있는 것보다 가장 큰 음수이다. 상기 수에 대한 2의 보수 부정을 수행하는 것은 동일한 수를 가져오며, 이는 오버플로 오류이다. 또한 영(zero)의 2의 보수를 부정(negate)하는 것은 영(zero)을 산출한다 - 모든 비트들을 반전시키는 것은 모두 일(one)들을 산출하며, 1을 가산하는 것은 영을 산출한다(자리올림(carry) 출력이 폐기될 때).
소수(fractional) 값들은 소위 Q 포맷 기수법(notation)을 이용하여 고정-폭 디지털 형태로 표현될 수 있다. Qn.x 포맷 기수법에서, 어떠한 값의 비트들은: 하나의 부호(sign) 비트, n개의 정수 비트들 및 x개의 소수 비트들로서 해석된다. 디지털 신호 처리에 대한 공통 Q 포맷은 하나의 부호 비트가 존재하고, 정수 비트들이 없으며 x개의 소수 비트들이 존재함을 지시하는 Q0.x(또는 단순히 Q.x)이다. Q.31 기수법의 수는 32비트로 표현될 것이며 -1 (0x8000 0000) 내지 1-2-31(ox7FFF FFFF)의 범위의 값들을 가질 것이다.
Q 포맷의 수들을 곱할 때, 이진 포인트(binary point)를 참작하는 것이 중요하다. 예를 들어, Q.15를 Q.15 번 곱하는 것은 Q2.30의 결과를 가져올 것이다. 그러나, 상기 값을 Q.x 포맷으로 유지하는 것이 바람직하다. 이를 처리하기 위해, 상기 곱 연산들은 2의 인수(factor)에 의한 곱셈을 포함한다 - 이는 좌측 시프트 연산(left shift operation)에 상당하다 - 그리하여 Q.31 결과를 생성한다. 2개의 n-비트 값들을 함께 곱하는 것은 항상 2n 개의 비트들로 표현될 수 있는 값을 산출할 것이다. 본 적(product)을 두배(double)하는 것은 하나를 제외한 모든 경우에서 2n 개의 비트들로 표현될 수 있는 값을 생성할 것이다: 최대 음의 값. 2의 보수의 상기 최대 음의 값은 모든 다른 비트들이 영인 하나의 부호 비트(MSB)이다. 상기 값을 좌측으로 시프트하는 것은 오버플로를 가져온다.
32-비트 적을 생성하기 위해 2개의 16-비트 피연산자들의 다음 곱셈이 한 가지 예시이다. 상기 피연산자들 각각은 음(1의 부호 비트)이며, 이들의 적은 양수이어야 한다.
0x8000 x 0x8000 = 0x4000 0000 곱셈(Multiplication)
0x4000 0000 x 0x2 = 0x8000 0000 두배(Doubling)(부정확한 결과; 양이어야 함)
0x8000 0000 - 1 = 0x7FFF FFFF 포화된 결과(가장 큰 양의 값)
본 예시에서, 상기 두 개의 피연산자들은 각각 2의 보수 포맷으로 16비트로 표현될 수 있는 가장 큰 음수이다. 이들의 적은 큰 양의 값을 산출하여야 한다. 그러나, 상기 두배(doubling) 곱셈 명령의 실제 결과는 가장 큰 음의 값이다. 그러므로, 0x7FFFFFFF의 포화 값을 얻기 위해 이 값으로부터 '1'이 차감(subtract)되어야만 한다 - 다른 비트 위치들에서 모두 일(one)들인 영 부호 비트.
종래의 포화 곱셈기들은 상기 곱셈이 수행된 후에만 오버플로 상태를 검출하며, 그리고 나서 출력을 포화시킴으로써 상기 오버플로 상태를 정정하는 단계들을 밟아야만 한다. 일부 구현들에서, 이는 예외를 야기시킴으로써와 같이, 프로세서를 정지(halt)시킬 것을 요구할 수 있다. 이는 프로세서 성능에 불리한 영향을 미치며 전력 소모를 증가시킨다. 오버플로가 하드웨어에서 포화되는 경우에조차, 상기 곱셈이 완료된 후에 그렇게 하는 것은 성능에 불리하게 영향을 미친다.
하나 이상의 실시예들에 따르면, 사전-포화 곱셈기는 임의의 곱셈을 수행하기 전에 곱셈 연산에 대한 피연산자들을 검사한다. 상기 피연산자들이 포화를 요구하는 오버플로를 야기할 것이라면, 상기 곱셈기는 상기 피연산자들을 곱하지 않고 포화된 값을 출력한다.
일 실시예로, 상기 피연산자들로부터 유도되는 파라미터들은 상기 곱셈 연산이 변경되는 파라미터들에 수행될 때, 상기 곱셈기가 포화된 결과를 생성하도록 변경된다. 이는 부분 적(product)으로서 영 대신 음의 영을 선택하도록 부스 리코딩된 비트 그룹을 변경하는 것과, 값 1을 상기 부분 적들에 가산하는 것을 억제(따라서 효과적으로 값 1을 차감함)하는 것을 포함할 수 있다. 다른 실시예로, 오버플로를 야기할 피연산자들이 검출될 때, 상기 곱셈기의 출력은 미리 결정된 포화 값으로 강제된다.
일 실시예는, 승수(multiplier) 및 피승수(multiplicand)를 포함하는, 적어도 하나의 알려진 피연산자들의 세트가 포화를 필요로하는 오버플로를 야기할 고정 소수점 포화 곱셈 연산(fixed point saturating multiply operation)을 수행하는 방법에 관한 것이다. 오버플로를 야기할 피연산자들이 임의의 곱셈 연산을 수행하기에 앞서 검출되며, 포화된 결과는 상기 피연산자들을 곱하지 않고 출력된다.
다른 실시예는, 승수 및 피승수를 포함하는, 두 개의 피연산자들을 곱하고, 그리고 이들의 적을 출력하도록 동작하는 곱셈기 회로를 포함하는 사전-포화 곱셈기에 관한 것이다. 또한 상기 사전-포화 곱셈기는 곱셈기 회로에서 오버플로를 야기할 피연산자들을 검출하도록 동작하는 오버플로 사전-검출 회로를 포함한다.
도 1은 일 실시예에 따른 사전-포화 곱셈기의 기능 블록도이다.
도 2는 다른 실시예에 따른 사전-포화 곱셈기의 기능 블록도이다.
도 3은 사전-포화 곱셈 연산을 수행하는 방법의 흐름도이다.
곱셈기는 곱셈이 수행된다면 오버플로 상태(condition)를 야기할 곱셈 연산에 대한 피연산자들을 검출한다. 본 검출에 응답하여, 상기 곱셈기는 포화된(saturated) 값을 출력한다. 일 실시예로, 상기 곱셈기는 곱셈 연산이 적(product)으로서 포화된 값을 산출할 그러한 방식으로 상기 피연산자들을 변경(alter)함으로써 상기 포화된 값을 출력한다. 도 1은 본 실시예에 따른 사전-포화 곱셈기(40)를 나타낸다. GPR 레지스터(42)는 승수(multiplier, MR) 및 피승수(multiplicand, MD) 피연산자들을 포함한다. 상기 승수는 부스 리코더(Booth recoder) 회로(44)에 대한 입력이다.
부스 리코딩(recoding)(종종 수정된 부스 리코딩으로 지칭됨)은 곱셈 연산을 수행하는데 있어서 가산될 부분 적(product)들의 수를 감소시키기 위한 기술이다. 상기 피승수의 각 비트를 고려하여 상기 피승수 또는 영(zero) 중 하나를 포함하는 대응하는 시프트된 부분 적을 생성하기 보다, 상기 승수 비트들은 그룹(group)들로 고려되며, 상기 피승수의 +/- 배수들을 포함하는 시프트된 부분 적들이 가산된다. 본 기술은 가산될 부분 적들의 수를 감소시킨다. 예를 들어, radix-4 부스 리코딩에서, 상기 승수 비트들은, 이전 그룹(상기 제 1 그룹에 영(zero)이 추가됨))의 MSB와 함께, 2의 그룹들로 고려된다. 그리고 나서 부분 적들이, 다음의 표에 따라, 상기 비트 그룹들의 값에 기초하여 생성된다:
비트 그룹(Bit Group) | 부분 적(Partial Product) |
000 | 0 |
001 | 1 x 피승수 |
010 | 1 x 피승수 |
011 | 2 x 피승수 |
100 | -2 x 피승수 |
101 | -1 x 피승수 |
110 | -1 x 피승수 |
111 | 0 |
표 1: Radix-4 부스 리코딩
상기 승수에서 각각의 부스 리코딩되는 비트 그룹에 대해, 피승수는 상기 지시되는 인수에 의해 곱해지며, 그 결과적인 부분 적은 상기 승수(multiplier) 내부의 비트 그룹의 위치로 시프트된다. 그리고 나서 상기 부분 적들이 합산되어 상기 적을 산출한다. 부호화된(signed) 값들을 곱할 때, radix-4 부스 리코딩은 부분 적들의 수를 최대 절반까지 감소시킬 수 있다.
본 구현에서, 부스 리코더(44)의 출력들은 부스 멀티플렉서(Booth multiplexer)(48)들을 통해 월리스 트리(Wallace Tree)(50)에 대한 부분 적들을 선택한다. 상기 부스 멀티플렉서(48)는 시프트/반전 논리(shift/invert logic)(49) 로부터 적절히 수정된 피승수를 선택하며, 각 mux(48)는 상기 곱셈기에서 상기 리코딩된 비트 그룹 위치로 정렬(align)된다. 시프트/반전 논리(49)는 다음과 같이 표 1에 규정되는 수정된 피승수들을 생성한다:
0은 피승수 비트들에 대해 모든 영(zero)들을 대체한다;
x1은 피승수 비트들을 직접 통과(pass)시킨다;
x2는 피승수 비트들을 1 비트 위치만큼 좌측-시프트(left-shift) 시킨다; 그리고
부정(negation)은 상기 피승수, 시프트된 피승수, 또는 영 값에 비트마다(bit-wise)의 반전(1의 보수(one's compliment)을 수행한다.
상기 부정은 월리스 트리(50) 내의 부분 적들에 LSB에서 '1'이 가산될 때까지 완전하지 않음에 유의하라(부정에 대한 2의 보수 규칙마다: 1의 보수 +1). 월리스 트리(50)는 상기 부분 적들을 합산하여, 합(sum)과 자리올림(carry)을 출력하며, 이들은 자리올림 전파 가산기(carry propagate adder)(52)에서 가산되고, 상기 적은 54에서 래칭(latch)된다. 당해 기술분야에서 통상의 지식을 가진 자는 상기 부스 리코더의 출력 및 상기 부스 멀티플렉서(48)의 출력(또는 피승수 값)이 파이프라이닝(pipelining)을 허용하도록 래칭될 수 있음을 알 것이다.
오버플로 검출 회로(56)는 각각의 곱셈 동작의 시작에서 상기 승수 및 피승수를 모니터링하여, 포화를 요구하는 오버플로를 야기할 피연산자들의 값을 검출한다. 임박한(pending) 오버플로가 검출될 때, 오버플로 검출 회로(56)는, 상기 곱셈 동작이 적에 대한 포화된 값을 산출할 방식으로, 상기 부분 적들의 합산을 변경 하도록 부스 리코더(44)에 신호를 보낸다(signal). 이는 제한된 수의 피연산자들이 오버플로를 야기할 것이며, 이러한 피연산자들이 사전에 알려지기 때문에 가능하다.
특히, 일 실시예로, 상기 승수 및 피승수 모두가 가장 큰 음의 값을 포함하는 경우만 포화를 요구하는 오버플로를 야기할 것이다. 이 조건이 검출될 때, 오버플로 검출 회로(56)는 부스 리코딩을 변경하도록 부스 리코더(44)에 신호를 보낸다. 응답적으로, 상기 부스 리코더(44)는 최하위(least significant) 부스 리코딩된 비트 그룹(Booth recoded bit group)을 수정하여(이는, 000의 값을 가지며, 통상 영(zero)을 선택할 것이다) 음의 영(negative zero)을 선택한다. 시프트/반전 논리(49)는 영의 1의 보수(one's compliment)(즉, 모두 일(one)들)를 제공하며, 월리스 트리(50)에게 상기 부분 적들에 '1'을 가산하도록 신호(signal)한다. 오버플로 검출 회로(56)는 추가적으로 상기 월리스 트리(50)에 억제 신호(suppression signal)를 보내어 상기 영의 부정(negation)에 관련되는 '1'을 가산하는 것을 억제한다(파이프라이닝된 구현에서, "억제 +1(suppress +1)"신호가 래칭될 것임에 유의하라). 따라서, 영(zero)의 부호-연장된(sign-extended) 1의 보수(0xFFFF FFFF)가 부분 적으로서 가산되지만, 상기 대응하는 '1'은 상기 결과로부터 '1'을 효과적으로 차감(subtract)하지 않는다. 예를 들어:
0x8000 x 0x8000 = 0x40000000 두 개의 최대 음의 값들의 곱
0x40000000 x 0x2 = 0x80000000 두배(doubling)
0x80000000 + 0xFFFFFFFF = 0x7FFFFFFF 포화된 결과(효과적으로 '1'을 차감)
본 포화된 결과는 자리올림 전파 가산기(carry propagate adder)(52)에 의해 출력되며, 54에서 적(product)으로서 래칭된다. 본 실시예에 따라, 곱셈 연산을 포화시키는 타이밍은 오버플로를 야기하지 않으며 따라서 포화를 요구하지 않는 피연산자들에 대해서와 동일하다. 특히, 곱셈기(40)의 출력에 지연이 추가되지 않는다. 그러므로, 본 실시예는 곱셈 연산의 타이밍이 중요하고, 곱셈기(40) 출력에서 추가적인 지연이 허용되지 않을 수 있는 경우에 특별한 적용가능성을 찾을 수 있다.
도 2는 사전-포화 곱셈기(40)의 다른 실시예를 나타내며, 여기서 관련되는 구성요소들이 그에 따라 번호매겨진다. 본 실시예에서, 오버플로 검출 회로(56)는, 포화를 요구하는 오버플로를 야기할 알려진 피연산자들을 검출하는, 승수 및 피승수를 모니터링한다. 이러한 피연산자들이 검출될 때, 상기 오버플로 검출 회로(56)는 곱셈기(40) 적 출력에 대한 포화된 결과를 대체하는 신호를 출력한다. 예를 들어, 상기 오버플로 검출 회로(56)는 멀티플렉서(60)로 하여금 자리올림 전파 가산기(52)의 출력 대신 미리 결정된 포화 출력을 선택하도록 감독하는 멀티플렉서 선택 신호를 출력할 수 있다. 상기 미리 결정된 포화 출력은 하드웨어-내장(hard-wired) 값(즉, 고(high) 또는 저(low) 전압 레일(rail)들에 결속되는 비트 위치들을 갖는)을 포함할 수 있거나, 또는 대안적으로 레지스터와 같은 스토리지 위치의 출력을 포함할 수 있다. 복수의 피연산자들이 상이한 포화 값들을 요구하는 오버플로를 야기할 수 있는 실시예로, 오버플로 검출 회로(56)는 멀티-비트 멀 티플렉서 선택 신호를 출력할 수 있으며, 이는 복수의 미리 결정된 포화 값들 및 가산기(52)의 출력 중에서 선택한다. 상기 오버플로 검출 회로(56) 출력은 파이프라이닝된 구현에서 래칭될 수 있다.
본 실시예에서, 곱셈 연산이 억제되어(즉, 부스 리코더(44), 논리 블록(49), 월리스 트리(50), 자리올림 전파 가산기(52), 및 다른 곱셈기 회로들이 불능화될 수 있다) 전력 소모를 감소시킬 수 있다. 대안적으로, 상기 피연산자들의 곱셈은, 곱셈기(40)를 통해 진행될 수 있으며, 그 결과는 포화된 결과가 54에서 대신 래칭됨에 따라, 단순히 폐기(discard)될 수 있다. 본 실시예에서 멀티플렉서(60)의 지연이 상기 곱셈기(40)에 의해 수행되는 모든 곱셈 연산에 추가된다(비록 이러한 지연이 기존 멀티플렉서의 이용되지 않는 레그(leg)를 이용하거나, mux-latch를 이용하거나, 또는 당해 기술분야에 공지된 다른 기술들에 의해 완화될 수 있을지라도). 오버플로 조건이 매우 조기에 결정되며, 포화 값을 선택하는 결정은 주경로(critical path)의 일부가 아니다.
도 3은 피연산자들의 적어도 하나의 알려진 세트가 포화를 요구하는 오버플로를 야기할 고정-소수점 포화 곱셈 연산을 수행하는 방법을 도시한다. 초기에(즉, 임의의 곱셈을 수행하기 전에), 상기 피연산자들이 조사된다(블록(70)). 상기 피연산자들은 오버플로를 야기할 알려진 값들에 비교된다(블록(72)). 예를 들어, 일부의 경우, 피연산자들 모두가 피연산자 비트 필드(operand bit field) 내에서 표현될 수 있는 최대 음의 값을 포함한다면, 오버플로가 발생할 것이다. 상기 피연산자들을 곱하는 것이 오버플로를 야기하지 않을 것이라면(블록(72)), 상기 곱 셈이 수행되며 그 결과들이 출력된다(블록(74)). 상기 피연산자들을 곱하는 것이 포화를 요구하는 오버플로를 가져올 것이라면(블록(72)), 하나 이상의 실시예들에 따라, 포화된 결과가 본래의 피연산자들을 곱하지 않고 출력된다(블록(76)).
일 실시예로, 이는 변경되는 파라미터들에 대한 곱셈 연산을 수행하는 것이 곱셈 연산의 적으로서 포화된 값을 산출하는 방식으로 상기 피연산자들로부터 발생되는 파라미터들을 변경하는 단계를 포함한다. 다른 실시예로, 포화된 결과를 출력하는 단계는 상기 곱셈 연산으로부터의 적 대신 미리 결정된 포화 값을 출력으로서 선택하는 단계를 포함한다.
두 실시예들 모두에서(즉, 도 1 및 2에 도시된 것들), 오버플로를 야기할 피연산자들이 조기에 검출되며, 곱셈기(40)는 포화된 결과를 직접 출력한다. 이는 단지 상기 적을 검사함으로써 오버플로를 검출하고, 그리고 이후에 상기 적에 대한 포화된 값을 대체시키는 종래의 방법론에 비해 현저한 성능 개선 및 전력 절감을 나타낸다. 여기 개시되는 하나 이상의 실시예들에 따른 곱셈기(40)는 특히 고-속 프로세서들, 및/또는 배터리-전원공급 휴대용 전자 장치들과 같이, 저 전력 소모가 중요한 요소인 프로세서들에 특히 적합하다.
본 진보적 개념들이 특정한 특징들, 양상들 및 이들의 실시예들에 관련하여 여기에 기재되었을지라도, 수많은 변형들, 수정들 및 다른 실시예들이 본 제시사항의 광범위한 범위 내에서 가능함은 명백할 것이다. 그러므로 본 실시예들은 설명적인 것으로서 모든 양상들에 있어서 해석되어야 하고 제한적인 것으로 해석되어서는 안되며 첨부된 청구의 범위들의 의미와 균등의 범의 내에 따르는 모든 변경들은 이들에 포함되는 것이다.
Claims (15)
- 승수(multiplier) 및 피승수(multiplicand)를 포함하는, 피연산자(operand)들의 적어도 하나의 알려진 세트가 포화(saturation)를 요구하는 오버플로(overflow)를 야기할 고정 소수점 포화 곱셈 연산(fixed point saturating multiply operation)을 수행하는 방법으로서:임의의 곱셈 연산을 수행하기 전에 오버플로를 야기할 상기 피연산자들을 검출하는 단계; 및상기 피연산자들을 곱하지 않고 포화된(saturated) 결과를 출력하는 단계를 포함하는 고정 소수점 포화 곱셈 연산을 수행하는 방법.
- 제 1 항에 있어서,오버플로를 야기할 상기 피연산자들은 상기 피연산자 비트 필드(operand bit field)에 표현될 수 있는 가장 큰 음수(negative number)들인, 고정 소수점 포화 곱셈 연산을 수행하는 방법.
- 제 1 항에 있어서,곱셈 연산이 상기 포화된 결과를 발생시키도록 상기 피연산자들로부터 유도되는 하나 이상의 파라미터들을 조정(adjust)하는 단계; 및상기 조정된 파라미터들을 이용하여 곱셈 연산을 수행하는 단계를 더 포함하 는 고정 소수점 포화 곱셈 연산을 수행하는 방법.
- 제 3 항에 있어서,상기 피연산자들로부터 유도되는 하나 이상의 파라미터들을 조정하는 단계는 상기 승수(multiplier)로부터 유도되는 하나 이상의 부스 리코딩된 비트 그룹(Booth recoded bit group)들을 변경(alter)하는 단계를 포함하는, 고정 소수점 포화 곱셈 연산을 수행하는 방법.
- 제 4 항에 있어서,부스 리코딩된 비트 그룹을 변경하는 단계는 부스 리코딩된 비트 그룹의 선택을 영에서 음의 영(negative zero)으로 변경하는 단계 및 상기 피연산자로부터 유도되는 부분 적(partial product)들로의 값 1의 가산(addition)을 억제(suppress)하는 단계를 포함하는, 고정 소수점 포화 곱셈 연산을 수행하는 방법.
- 제 3 항에 있어서,상기 피연산자들로부터 유도되는 하나 이상의 파라미터들을 조정하는 단계는 음의 값 1(negative one)을 상기 피연산자들로부터 유도되는 부분 적들에 가산(add)하는 단계를 포함하는, 고정 소수점 포화 곱셈 연산을 수행하는 방법.
- 제 1 항에 있어서,상기 포화된 결과를 출력하는 단계는 상기 곱셈 연산의 적(product)에 관계없이 곱셈 연산의 출력을 포화된 결과로 강제(force)하는 단계를 포함하는, 고정 소수점 포화 곱셈 연산을 수행하는 방법.
- 제 7 항에 있어서,상기 곱셈 연산의 출력을 포화된 결과로 강제하는 단계는 오버플로를 야기할 상기 피연산자들의 검출에 응답하여 상기 곱셈 연산 출력과 상기 포화된 결과 사이에서 선택하는 단계를 포함하는, 고정 소수점 포화 곱셈 연산을 수행하는 방법.
- 승수(multiplier)와 피승수(multiplicand)를 포함하는, 두 개의 피연산자들을 곱하고, 그리고 이들의 적(product)을 출력하도록 동작하는 곱셈기 회로; 및상기 곱셈기 회로에서 오버플로를 야기할 피연산자들을 검출하도록 동작하는 오버플로 사전-검출 회로(overflow pre-detect circuit)를 포함하는 사전-포화 곱셈기(pre-saturating multiplier).
- 제 9 항에 있어서,상기 오버플로 사전-검출 회로는 상기 피연산자 비트 필드들에서 표현될 수 있는 가장 큰 음의 값들을 검출하는, 사전-포화 곱셈기.
- 제 9 항에 있어서,상기 곱셈기 회로는 상기 승수를 비트 그룹(bit group)들로 리코딩(recode)하도록 동작하는 부스 리코더(Booth recoder)를 포함하고, 각각의 비트 그룹은 상기 피승수의 양 또는 음의 배수를 부분 적(partial product)으로서 선택하며, 상기 부스 리코더는 상기 오버플로 사전-검출 회로에 응답하여, 상기 곱셈기에서 포화된 결과를 생성하기 위해 하나 이상의 비트 그룹들을 변경(alter)하도록 추가로 동작하는, 사전-포화 곱셈기.
- 제 11 항에 있어서,상기 부스 리코더는 상기 오버플로 사전-검출 회로에 응답하여 최하위 리코딩된 비트 그룹(the least significant recoded bit group)이 음의 영(negative zero)을 선택하게끔 강제하도록 동작하는, 사전-포화 곱셈기.
- 제 11 항에 있어서,상기 부분 적들을 가산하고 그리고 상기 부스 리코딩된 비트 그룹들에 의해 선택되는 음의 부분 적들에 대해 값 1(one)을 가산하도록 동작하는 병렬 가산기(parallel adder)를 더 포함하며, 상기 병렬 가산기는 상기 오버플로 사전-검출 회로에 응답하여 음의 영(negative zero)에 대해 값 1(one)의 가산을 억제(suppress)하도록 추가로 동작하는, 사전-포화 곱셈기.
- 제 9 항에 있어서,상기 곱셈기 회로는 상기 오버플로 사전-검출 회로에 응답하여 상기 적으로부터 값 1(one)을 차감(subtract)하도록 동작하는, 사전-포화 곱셈기.
- 제 9 항에 있어서,상기 오버플로 사전-검출 회로에 응답하여 상기 곱셈기 회로로부터의 상기 적을 또는 미리 결정된 포화된 결과(saturated result)를 출력하도록 동작하는 출력 선택기(output selector)를 더 포함하는 사전-포화 곱셈기.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/336,358 US8082287B2 (en) | 2006-01-20 | 2006-01-20 | Pre-saturating fixed-point multiplier |
US11/336,358 | 2006-01-20 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20080089640A KR20080089640A (ko) | 2008-10-07 |
KR100958224B1 true KR100958224B1 (ko) | 2010-05-17 |
Family
ID=38015402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020087020038A KR100958224B1 (ko) | 2006-01-20 | 2007-01-22 | 사전-포화 고정-소수점 곱셈기 |
Country Status (10)
Country | Link |
---|---|
US (1) | US8082287B2 (ko) |
EP (1) | EP1974253A2 (ko) |
JP (2) | JP5203972B2 (ko) |
KR (1) | KR100958224B1 (ko) |
CN (1) | CN101371221B (ko) |
BR (1) | BRPI0707147A2 (ko) |
CA (1) | CA2635119C (ko) |
RU (1) | RU2408057C2 (ko) |
TW (1) | TWI396130B (ko) |
WO (1) | WO2007085012A2 (ko) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8316071B2 (en) * | 2009-05-27 | 2012-11-20 | Advanced Micro Devices, Inc. | Arithmetic processing unit that performs multiply and multiply-add operations with saturation and method therefor |
US8892621B2 (en) * | 2011-12-19 | 2014-11-18 | Lsi Corporation | Implementation of negation in a multiplication operation without post-incrementation |
KR20130111721A (ko) * | 2012-04-02 | 2013-10-11 | 삼성전자주식회사 | 부분 곱 생성기의 부스코드 생성방법, 컴퓨터 시스템 및 그 매체와 디지털 신호프로세서 |
US9323498B2 (en) * | 2013-03-13 | 2016-04-26 | Wisconsin Alumni Research Foundation | Multiplier circuit with dynamic energy consumption adjustment |
US9747074B2 (en) | 2014-02-25 | 2017-08-29 | Kabushiki Kaisha Toshiba | Division circuit and microprocessor |
KR101644039B1 (ko) * | 2015-06-11 | 2016-07-29 | 에스케이텔레콤 주식회사 | 고정소수점 연산 방법 및 고정소수점 연산 장치 |
US11327718B2 (en) * | 2020-03-19 | 2022-05-10 | Kabushiki Kaisha Toshiba | Arithmetic circuitry for power-efficient multiply-add operations |
JP7381426B2 (ja) | 2020-03-19 | 2023-11-15 | 株式会社東芝 | 演算回路 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6574651B1 (en) * | 1999-10-01 | 2003-06-03 | Hitachi, Ltd. | Method and apparatus for arithmetic operation on vectored data |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6162937A (ja) * | 1984-09-04 | 1986-03-31 | Toshiba Corp | 乗算器 |
JPH01267728A (ja) | 1988-04-19 | 1989-10-25 | Ricoh Co Ltd | 乗算器 |
US5220525A (en) | 1991-11-04 | 1993-06-15 | Motorola, Inc. | Recoded iterative multiplier |
US5793315A (en) * | 1996-05-31 | 1998-08-11 | Motorola, Inc. | Bit-serial digital expandor |
JP3315042B2 (ja) | 1996-11-20 | 2002-08-19 | 株式会社リコー | 乗算装置 |
JPH11126157A (ja) | 1997-10-24 | 1999-05-11 | Matsushita Electric Ind Co Ltd | 乗算方法および乗算回路 |
EP0992885B1 (en) | 1998-10-06 | 2005-12-28 | Texas Instruments Incorporated | Multiplier accumulator circuits |
EP0992916A1 (en) * | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Digital signal processor |
JP3530418B2 (ja) | 1999-05-13 | 2004-05-24 | Necエレクトロニクス株式会社 | 乗算装置 |
US7058830B2 (en) | 2003-03-19 | 2006-06-06 | International Business Machines Corporation | Power saving in a floating point unit using a multiplier and aligner bypass |
US7689641B2 (en) | 2003-06-30 | 2010-03-30 | Intel Corporation | SIMD integer multiply high with round and shift |
US20080098057A1 (en) * | 2004-08-26 | 2008-04-24 | Daisuke Takeuchi | Multiplication Apparatus |
-
2006
- 2006-01-20 US US11/336,358 patent/US8082287B2/en active Active
-
2007
- 2007-01-22 TW TW096102331A patent/TWI396130B/zh active
- 2007-01-22 BR BRPI0707147-7A patent/BRPI0707147A2/pt not_active Application Discontinuation
- 2007-01-22 CN CN2007800026442A patent/CN101371221B/zh active Active
- 2007-01-22 WO PCT/US2007/060816 patent/WO2007085012A2/en active Application Filing
- 2007-01-22 EP EP07710246A patent/EP1974253A2/en not_active Ceased
- 2007-01-22 RU RU2008134127/08A patent/RU2408057C2/ru active
- 2007-01-22 CA CA2635119A patent/CA2635119C/en active Active
- 2007-01-22 KR KR1020087020038A patent/KR100958224B1/ko active IP Right Grant
- 2007-01-22 JP JP2008551565A patent/JP5203972B2/ja active Active
-
2011
- 2011-06-08 JP JP2011128153A patent/JP5086466B2/ja active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6574651B1 (en) * | 1999-10-01 | 2003-06-03 | Hitachi, Ltd. | Method and apparatus for arithmetic operation on vectored data |
Also Published As
Publication number | Publication date |
---|---|
TW200736989A (en) | 2007-10-01 |
JP2009524169A (ja) | 2009-06-25 |
RU2008134127A (ru) | 2010-02-27 |
WO2007085012A2 (en) | 2007-07-26 |
US20070174379A1 (en) | 2007-07-26 |
JP5086466B2 (ja) | 2012-11-28 |
JP5203972B2 (ja) | 2013-06-05 |
CA2635119A1 (en) | 2007-07-26 |
RU2408057C2 (ru) | 2010-12-27 |
US8082287B2 (en) | 2011-12-20 |
CA2635119C (en) | 2013-07-30 |
TWI396130B (zh) | 2013-05-11 |
BRPI0707147A2 (pt) | 2011-04-19 |
JP2011248904A (ja) | 2011-12-08 |
WO2007085012A3 (en) | 2008-01-24 |
KR20080089640A (ko) | 2008-10-07 |
CN101371221A (zh) | 2009-02-18 |
EP1974253A2 (en) | 2008-10-01 |
CN101371221B (zh) | 2012-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100958224B1 (ko) | 사전-포화 고정-소수점 곱셈기 | |
JP3689183B2 (ja) | 正確な浮動小数点除算/平方根演算を実現する正確、かつ効果的なスティッキー・ビット計算 | |
US8965945B2 (en) | Apparatus and method for performing floating point addition | |
US5928316A (en) | Fused floating-point multiply-and-accumulate unit with carry correction | |
JPH0612229A (ja) | 乗累算回路 | |
US5796644A (en) | Floating-point multiply-and-accumulate unit with classes for alignment and normalization | |
US9146707B2 (en) | Generating a fast 3x multiplicand term for radix-8 booth multiplication | |
JP5640081B2 (ja) | 飽和を伴う整数乗算および乗算加算演算 | |
Takagi et al. | A hardware algorithm for integer division | |
JP4273071B2 (ja) | 除算・開平演算器 | |
JPH04355827A (ja) | 開平演算装置 | |
Ushasree et al. | VLSI implementation of a high speed single precision floating point unit using verilog | |
Isseven et al. | A dual-mode quadruple precision floating-point divider | |
Schwarz | Binary Floating-Point Unit Design: the fused multiply-add dataflow | |
Krishnan | A comparative study on the performance of FPGA implementations of high-speed single-precision binary floating-point multipliers | |
US6109777A (en) | Division with limited carry-propagation in quotient accumulation | |
Tsen et al. | Hardware designs for binary integer decimal-based rounding | |
Gök | A novel IEEE rounding algorithm for high-speed floating-point multipliers | |
CN113434115B (zh) | 一种浮点数尾数域余数运算电路及方法 | |
Dave et al. | Multiplication by complements | |
MX2008009315A (en) | Pre-saturating fixed-point multiplier | |
Min et al. | Fused floating-point magnitude unit | |
Min et al. | Fused floating-point two-term sum-of-squares unit | |
CN116382628A (zh) | 具有减少1求补延迟的浮点融合乘加 | |
Amaricai et al. | Hardware Support for Combined Interval and Floating Point Multiplication |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20130429 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20140430 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20160330 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20180329 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20190327 Year of fee payment: 10 |