KR20170008149A - 공유 하드웨어 로직 유닛 및 그것의 다이 면적을 줄이는 방법 - Google Patents
공유 하드웨어 로직 유닛 및 그것의 다이 면적을 줄이는 방법 Download PDFInfo
- Publication number
- KR20170008149A KR20170008149A KR1020160068224A KR20160068224A KR20170008149A KR 20170008149 A KR20170008149 A KR 20170008149A KR 1020160068224 A KR1020160068224 A KR 1020160068224A KR 20160068224 A KR20160068224 A KR 20160068224A KR 20170008149 A KR20170008149 A KR 20170008149A
- Authority
- KR
- South Korea
- Prior art keywords
- source input
- divisor
- logic unit
- integer
- floating
- 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/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/487—Multiplying; Dividing
- G06F7/4873—Dividing
-
- 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/535—Dividing only
-
- 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/544—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 for evaluating functions by calculation
- G06F7/552—Powers or roots, e.g. Pythagorean sums
- G06F7/5525—Roots or inverse roots of single operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/535—Indexing scheme relating to groups G06F7/535 - G06F7/5375
- G06F2207/5353—Restoring division
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/552—Indexing scheme relating to groups G06F7/552 - G06F7/5525
- G06F2207/5523—Calculates a power, e.g. the square, of a number or a function, e.g. polynomials
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Nonlinear Science (AREA)
- Executing Machine-Instructions (AREA)
Abstract
본 발명에 따른 공유 하드웨어 로직 유닛은, 동 소수점 나눗셈 연산 및 정수 나눗셈 연산을 수행하는 복수의 공유 로직부들, 상기 부동 소수점 나눗셈 연산에 연관된 제 1 제수 소스 입력과 제 1 피제수 소스 입력을 입력 받고, 그리고, 상기 정수 나눗셈 연산에 연관된 제 2 제수 소스 입력과 제 2 피제수 소스 입력을 입력 받는 상기 복수의 공유 로직부들 중에서 첫번째 스테이지 로직부, 및 상기 부동 소수점 나눗셈 연산의 몫 결과 및 상기 정수 나눗셈 연산의 몫 결과를 출력하는 상기 복수의 공유 로직부들 중에서 마지막 스테이지 로직부를 포함할 수 있다.
Description
본 발명은 공유 하드웨어 로직 유닛 및 그것의 다이 면적 줄이는 방법에 관한 것이다.
본 발명은 셀이링 판별(ceiling determination), 플로우 판별(floor determination), 및 셀 특성 가중 기준(cell attribute weighting criteria)을 근거로 한 셀 교환 기술들, 장치들, 및 시스템들에 대한 셀 설계들에 관한 것이다.
일반적인 정수 나눗셈 하드웨어는 면적과 성능의 트레이드 오프를 결정해야 한다. 일반적인 기술들을 이용하면서 적은 다이 사용 면적과 적은 레이턴시에 도달하는 것은 어렵다. 일반적으로, 부동 소수점(floating point) 가능성 및 관련 하드웨어는, 다이 면적을 증가시키는 정수 나눗셈 하드웨어로부터 분리된다. 본 발명의 실시 예들은 종래 기술의 이러한 제약들을 해결한다.
본 발명의 목적은 다이 면적을 줄이는 공유 하드웨어 로직 유닛 및 그것의 방법을 제공하는 데 있다.
본 발명의 실시 예에 따른 공유 하드웨어 로직 유닛을 이용하는 부동 소수점 나눗셈, 정수 나눗셈, 및 제곱근 연산들을 처리하기 위한 컴퓨터 구현 방법은, 상기 공유 하드웨어 로직 유닛에 의해, 제 1 제수 소스 입력 및 제 1 피제수 소스 입력을 수신하는 단계, 상기 공유 하드웨어 로직 유닛에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력을 이용하여 부동 소수점 나눗셈 연산을 수행하는 단계, 상기 공유 하드웨어 로직 유닛에 의해, 상기 부동 소수점 나눗셈 연산의 몫 결과를 출력하는 단계, 상기 공유 하드웨어 로직 유닛에 의해, 제 2 제수 소스 입력 및 제 2 피제수 소스 입력을 수신하는 단계, 상기 공유 하드웨어 로직 유닛에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력을 이용하여 정수 나눗셈 연산을 수행하는 단계, 및 상기 공유 하드웨어 로직 유닛에 의해, 상기 정수 나눗셈 연산의 결과를 출력하는 단계를 포함할 수 있다.
본 발명의 실시 예에 따른 공유 하드웨어 로직 유닛은, 동 소수점 나눗셈 연산 및 정수 나눗셈 연산을 수행하는 복수의 공유 로직부들, 상기 부동 소수점 나눗셈 연산에 연관된 제 1 제수 소스 입력과 제 1 피제수 소스 입력을 입력 받고, 그리고, 상기 정수 나눗셈 연산에 연관된 제 2 제수 소스 입력과 제 2 피제수 소스 입력을 입력 받는 상기 복수의 공유 로직부들 중에서 첫번째 스테이지 로직부, 및 상기 부동 소수점 나눗셈 연산의 몫 결과 및 상기 정수 나눗셈 연산의 몫 결과를 출력하는 상기 복수의 공유 로직부들 중에서 마지막 스테이지 로직부를 포함할 수 있다.
본 발명의 실시 예에 따른 공유 하드웨어 로직 유닛은 공유 하드웨어 정수/부동 소수점 나눗셈 혹은 제곱근 연산 로직 유닛 (105) 내의 수많은 하드웨어 구성들 및 데이터 경로들이 정수 나눗셈 연산들, 부동 소수점 나눗셈 연산들, 및 제곱근 연산들을 중에서 공유하기 때문에, 다이 면적을 줄일 수 있다.
도 1은 본 발명의 실시 예에 따른 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛의 예시적인 블록도이다.
도 2는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛(110)의 제 1 스테이지 로직부의 블록 다이어그램을 예시적으로 보여준다.
도 3은 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 2 스테이지 로직부의 블록 다이어그램을 예시적으로 보여준다.
도 4는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 3 스테이지 로직부의 블록 다이어그램을 예시적으로 보여준다.
도 5는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 4 스테이지 로직부의 블록 다이어그램을 예시적으로 보여준다.
도 6a, 도 6b, 및 도 6c는 본 발명의 실시 예에 따른 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛에서 정수 나눗셈 연산, 부동 소수점 나눗셈 연산, 및 제곱근 연산을 공유하는 방법들을 예시적으로 보여주는 도면들이다.
도 7은 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛을 포함하는 컴퓨팅 시스템에 대한 블록 다이어그램이다.
도 2는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛(110)의 제 1 스테이지 로직부의 블록 다이어그램을 예시적으로 보여준다.
도 3은 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 2 스테이지 로직부의 블록 다이어그램을 예시적으로 보여준다.
도 4는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 3 스테이지 로직부의 블록 다이어그램을 예시적으로 보여준다.
도 5는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 4 스테이지 로직부의 블록 다이어그램을 예시적으로 보여준다.
도 6a, 도 6b, 및 도 6c는 본 발명의 실시 예에 따른 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛에서 정수 나눗셈 연산, 부동 소수점 나눗셈 연산, 및 제곱근 연산을 공유하는 방법들을 예시적으로 보여주는 도면들이다.
도 7은 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛을 포함하는 컴퓨팅 시스템에 대한 블록 다이어그램이다.
아래에서는 도면들을 이용하여 본 발명의 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있을 정도로 본 발명의 내용을 명확하고 상세하게 기재할 것이다.
본 발명의 개념에 따른 실시 예들은 다양한 변경들을 가할 수 있고 여러 가지 형태들을 가질 수 있으므로 실시 예들을 도면에 예시하고 본 명세서에서 상세하게 설명하고자 한다. 이는 본 발명의 개념에 따른 실시 예들을 특정한 개시 형태들에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물, 혹은 대체물을 포함한다.
제 1 혹은 제 2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만, 예컨대 본 발명의 개념에 따른 권리 범위로부터 벗어나지 않은 채, 제 1 구성 요소는 제 2 구성 요소로 명명될 수 있고 유사하게 제 2 구성 요소는 제 1 구성 요소로도 명명될 수 있다.
어떤 구성 요소가 다른 구성 요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성 요소에 직접적으로 연결되어 있거나 혹은 접속되어 있을 수도 있지만, 중간에 다른 구성 요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성 요소가 다른 구성 요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는 중간에 다른 구성 요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성 요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 혹은 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로서, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 혹은 "가지다" 등의 용어는 본 명세서에 기재된 특징, 숫자, 단계, 동작, 구성 요소, 부분품 혹은 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 혹은 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 혹은 이들을 조합한 것들의 존재 혹은 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 나타낸다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.===
본 발명의 실시 예들은 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛을 포함할 수 있다. 여기서 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛은, 하나의 공유 하드웨어 설계에 부동 소수점 나눗셈, 부동 소수점 제곱근 연산들, 및/혹은 정수 나눗셈을 결합할 수 있다.
마이크로프로세서들 및 다른 로직 구성 요소들은, 기능 유닛의 이용을 개선하고, 전력 소비를 줄이고, 및/혹은 적어도 50%의 면적을 줄이기 위하여 공유된 로직 유닛을 포함시킬 수 있다. 예를 들어, 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 연산 로직 유닛은, 전체 부분 나머지 나눗셈 (PD; full partial remainder divisor) 테이블, 하나 이상의 OTF(on-the-fly) 상태 머신들, 및/혹은 데이터 패스(정수 나눗셈, 부동 소수점 나눗셈, 및 제곱근 연산들을 위함)를 대신하여 sparse RAM (random access memory)을 공유할 수 있다. 비정규(subnormal) 숫자들의 정규화 및 부호/비부호(signed/unsigned) 정수들의 정규화는, 공유 하드웨어로 처리할 수 있다.
나눗셈 연산들 및 제곱근 연산들은 동일한 기수(radix)일 수 있다. 예를 들어, 특수 기수 (예, 4, 8, 16, 등)는 나눗셈 연산과 제곱근 연산들 모두에서 지속적으로 사용될 수 있다. 모든 고차 기수들은 설계를 통하여 사용될 수 있다. 조기 아웃 예외들 (early out exceptions) 및 특수 케이스들은 자동적으로 처리될 수 있다. 본 발명의 실시 예에 따르면 향상된 레이턴시 및 적은 다이 면적이 달성될 수 있다.
나눗셈 연산들은, 제수(divisor), 비제수(dividend), 하나 이상의 부분 나머지들, 등을 포함할 수 있다. 제수, 피제수, 부분 나머지들, 및 그와 같은 것의 서로 다른 조합들은 정규화되거나(normalized), 제로 스킵 되거나(zero skipped), 프리스케일드 되거나(prescaled), 및/혹은 포스트스케일드 될 수 있다(postscaled). 나눗셈 연산들은 정수 나눗셈, 부동 소수점 나눗셈, 혹은 모두를 포함할 수 있으며, 아래에서 더 자세히 설명된다.
정수는 음이거나 음이 아닌 부호 숫자로써, 소수부(fractional component)를 가지지 않는다. 반면에, 부동 소수점 숫자는 소수부를 갖는 실수의 표현 혹은 근사이다. 실수는 고정된 개수의 유효자릿수(정수부(significand) 혹은 가수 (mantissa))로 표현되거나 및 지수(exponent)를 이용하여 스케일드 될 수 있다. 이러한 표현은 또한, 부호 (즉, 음 또는 양), 및 베이스(base) 혹은 기수 (radix)를 포함할 수 있다. 여기서 기수는 일반적으로 2뿐만 아니라, 4, 8, 10, 16 등과 같을 수 있다.
실수 내의 소수점(decimal point)은 기수 포인트(radix point)로 지칭된다. 기수 포인트는 일반적으로 정수부의 제 1 디지트(혹은 최상위 디지트)의 직전 혹은 뒤에 배치될지라도, 기수 포인트는 정수부(significand)의 임의의 두 디지트들 사이에 임의의 위치에 배치될 수 있다. 예를 들어, 실수 3.52641는 352,641 x 10-5에 의해 표현될 수 있다. 여기서 "352641"는 정수부이고, "10"은 기수이고, "-5"는 부호 지수이다. 이 표현은 기수 10의 실시 예일지라도, 상술 된 바와 같이, 기수는 2, 4, 8, 16, 등이 될 수 있다. 예를 들어, 기수 2 부동 소수점 숫자는 {(부호) ? (1 + 정수부) x 2 ^ (지수-바이어스)}로써 표현될 수 있다.
정수부(부호 포함) 및 지수(부호 포함)는 특별한 컴퓨터 구현에 따라 다양한 방법들로 저장 될 수 있다. 일반적으로, 단정밀 부동소수점 수(single precision floating point number)은 32 비트들(즉, 4 바이트들)을 차지하고, 그리고 그의 정수부는 일반적으로 32 비트들 중 24 비트들을 차지 하거나 그 정도의 정밀도를 갖는다. 반면에, 배정밀 부동소수점 수(double precision floating point number)은 64 비트들(즉, 8 바이트들)을 차지하고, 그리고 그의 정수부는 일반적으로 64 비트들 중 53 비트들을 차지 하거나 그 정도의 정밀도를 갖는다. 다시 말해, 단정밀 및 배정밀 부동소수점 포맷들은 24 및 53 비트들로 각각 정규화 될 수 있다. 부동 소수점 및 정수 모두에 대해서, 정수부는 정규화된 양을 포함 할 수 있다. 정규화된 양은 암시적인 바이너리 혹은 기수 포인트의 왼쪽 편에 표현된 혹은 암시적인 선두 (leading) 비트와 뒤따르는 크기를 표시함으로써 나타낼 수 있다. 상이한 정밀도를 갖는 다른 더 큰 혹은 더 작은 부동 소수점 수들이 본 발명의 사상에서 벋어남 없이 사용 될 수 있다는 것이 이해 될 것이다.
본 발명의 실시 예들은 나눗셈 연산들을 위한 정규화 및 반복 예측을 위한 기술들을 포함할 수 있다. 이러한 기술들은, CLZ(counting leading zero) 기수 (radix) 카운트들을 유도하기 위해, 기수 및 포스트 조절(post adjustment)를 갖는 CLZ 연산을 이용하는 것을 포함할 수 있다. CLZ 기수 카운트들 사이의 거리는, "round[(CLZ 기수 피제수 - CLZ 기수 제수)]=CLZ 기수 거리"와 같은 라운딩 연산(rounding operation)을 이용하여 판별될 수 있다. 피제수 및 제수를 갖는 소스 값들은 처리를 위해 수신 될 수 있다. CLZ 양만큼 이동하는 것은 정규화된 소스 값들을 산출할 수 있다. 포스트 조절은 정규화된 소스 값들에 적용될 수 있다. CLZ 기수 거리는 나눗셈 연산 내에 반복들 각각에 이용될 수 있다. 정수 및 부동 소수점 나눗셈 연산들 모두를 위하여 이러한 접근법이 사용된다. 제곱근 반복들은 정밀도에 의해 판별될 수 있다. 이동 정보는 저장되고 나중에 사용될 수 있다.
부동 소수점 및 정수 정규화 반복 계산들은 동일한 공유 하드웨어 로직 유닛을 이용하여 처리될 수 있다. 정수가 부호화가 되었는가(signed)와 부호화가 되지 않았는가(unsigned)의 정보는 서로 무관한 것으로 되게 된다. 이는 정수 연산을 부동 소수점 정수부 연산들과 유사하게 만든다. 본 발명의 실시 예들은, 기수가 확장됨에 따라 직관적인(straight forward) 스케일링을 제공할 수 있다. 반복들의 정확한 숫자는 나눗셈 연산들에 의해 알려질 수 있다. 제곱근 최대 반복들은 정밀도 한계들일 수 있다. 반복들의 정확한 숫자를 아는 것은 정밀한 횟수 제어 및 연산들의 더 좋은 레이턴시를 허용할 수 있다.
반복들이 각 소스 값을 위해 수행되기 전에, 조절들은 각 소스 값을 만들 수 있다. 예를 들어, 4의 기수를 갖는 정수 피제수는 000.{2의 보수 피제수}일 수 있다. 4의 기수를 갖는 부동 소수점 피제수는 "0001"이 앞에 붙은 0001.피제수 일 수 있다. 4의 기수를 갖는 부동 소수점 래더캔드(radicand)는 001000.radicand (짝수) 및 / 또는 000100.radicand (홀수)일 수 있다. 이러한 실시 예 및 다른 적절한 조절들이 이루어질 수 있다고 이해되어야 할 것이다. 바이너리 포인트를 위한 조절들이 완료되면, 차이들이 최소화되고, 정수부는 부동 소수점 및 정수 연산들을 갖는 후속적인 모든 연산들에서 동일한 방법으로 처리될 수 있다. 소스 값들의 초기 패딩(initial padding)이 적용될 수 있고, 이는 멀티플렉싱에 의해 처리될 수 있다. 전통적인 지수 계산들은 필요성이 있고 레이턴시를 변화시키지 않을 때 병렬로 수행될 수 있다. 라운딩 및 지수 계산들은 정수 연산들에는 적용하지 않고, 단지 부동 소수점 연산들을 위해서만 수행될 것이다.
앞에서 언급한 바와 같이, 조기 아웃 예외들 및 특수 케이스들은 자동적으로 처리될 수 있다. 초가 아웃 예외들 및 특수 케이스들은 타입 I 조기 아웃과 타입 II 조기 아웃으로 구분될 수 있다. 타입 I 및/또는 II 조기 아웃들은 기술의 시작 부분에서 체크될 수 있고, 처리로부터 반복들을 중단시키는데 이용될 수 있다. 타입 I 조기 아웃은 소스 값들을 검사함으로써 판별될 수 있다. 몇몇 특수 케이스들 및 예외들은 정수 및 부동 소수점 연산들 모두에 의해 공유될 수 있다. 예를 들어, 타입 I 조기 아웃들은 아래의 상황들을 포함할 수 있다. 여기서 (i) 제수는 1, -1, 혹은 0 이고, (ii) 피제수는 제수와 동일하고, (iii) CLZ 기수 (피제수)는 CLZ 기수 (제수)와 동일하고, (iv) 제로에 의해 나누는 것과 같은 부동 소수점 예외들, 및/혹 (v) 2의 파워(power)와 같은 부동 소수점의 특별한 경우들, 기타 등등이다. 타입 II 조기 아웃들은, 반복들을 중단시키도록 야기하는 제로 나머지(zero remainder)와 같은 상황들을 포함할 수 있다. 타입 II 조기 아웃들은 정수 및 부동 소수점 연산들 모두에 적용될 수 있다.
정수 및 부동 소수점 연산들은 동일한 스파스(sparse) RAM (random access memory)을 이용하여 구현될 수 있다. 스파스 RAM은 부분 나머지 제수 (partial remainder divisor; PD) 테이블에 유사한 방법으로 기능을 수행할 수 있다. 한편, 스파스 RAM은, 아래에서 추가로 설명된 바와 같이, 로우(row)들 및 개인 키(personality key)에 대하여 전체 PD 테이블을 이용하는 것보다 더 간단하고 효율적이다. 또한, 하나 이상의 OTF(on-the-fly) 상태 머신들은 정수 및 부동 소수점 연산들 모두를 위하여 공유될 수 있다.
전 가산기는 정수 및 부동 소수점 연산들 모두를 위해 공유될 수 있고, 두 개의 32 비트 소스들 대해 분할될 수 있다. 2의 보수 및 라운딩 연산들은, 동일한 전 가산기에서 수행 될 수 있다. 하나의 쉬프터는 전체 데이터 경로 폭(full data path width)에 걸쳐 공유 될 수 있다. 멀티플(multiple, 배수)은 모든 연산들을 위해 동일한 방법으로 판별될 수 있고, 동일한 하드웨어를 이용할 수 있다. 아래에서 추가로 자세하게 설명된 CLZ 기수 접근 때문에 스케일링 업(scaling up)이 가능하지만, 정규화는 모든 연산들을 위해 수행될 수 있고 그리고 작은 조절들이 이루어질 수 있다.
하나 이상의 결과들은 하나 이상의 포스트-조절 연산들에서 조절될 수 있다. 몫은 상술한 저장된 오리지널 쉬프팅(original shifting) 정보를 이용하여 정수 및 부동 소수점 연산들 모두를 위해 정규화 될 수 있다. 오리지널 CLZ 양은 쉬프트들의 개수를 판별하는데 사용될 수 있다. CLZ 기수 양들 및 CLZ 기수 차이는, 기수가 증가함에 따라 스케일링 업 될 수 있다. 피제수와 제수 사이의 쉬프트들의 차이는 정수 나눗셈을 위한 최대 반복들을 조절하기 위해 사용될 수 있다. 지수 계산들은 전통적인 방법으로 계속 사용할 수 있다. 특수한 케이스 "구조화된"(architected) 혹은 디폴트 결과들은 아래에 설명된 바와 같이 공유 로직(shared logic)을 이용하여 최종 단계에서의 다중화(mux)될 수 있다. 예를 들어, 정수가 1에 의해 나눗셈을 할 때, 최종 단계에서, 결과는 이미 공지되고 다중화될 수 있다.
도 1은 본 발명의 실시 예에 따른 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 예시적인 블록도이다. 공유 하드웨어 로직 유닛 (105)은 아래에 상세히 설명되는, 제 1 스테이지(stage one) 로직부 (110), 제 2 스테이지(stage two) 로직부 (115), 제 3 스테이지(stage three) 로직부 (120) 및/또는 제 4 스테이지(stage four) 로직부 (125)를 포함할 수 있다. 공유 하드웨어 로직 (105)은 입력들로써 제수 (135) 및 피제수 (140)를 제공 받을 수 있다. 공유 하드웨어 로직 유닛 (105)은 정수 나눗셈 연산들, 부동 소수점 나눗셈 연산, 및/혹은 제곱근 연산들과 같은 다양한 동작들을 수행할 수 있다. 이러한 연산들은 최종 결과 혹은 솔루션에 도달하기 위한 소스 값들 (예, 제수 (135) 및/혹은 피제수 (140))에 적용될 수 있는 하나 이상의 반복들을 포함할 수 있다. 예를 들어, 나눗셈 연산의 경우에, 최종 결과는 부동 소수점/정수 부분 (145) 및 지수부 (150)와 같은 복수의 부분들 (multiple parts)을 가질 수 있는 몫일 수 있다.
제 1 스테이지 로직부 (110)는 제수 (135) 및 피제수 (140)을 수신 및 처리할 수 있다. 제 1 스테이지 로직부 (110)는 제 2 스테이지 로직부 (115)에 의해 수신될 수 있는 값들 (102)을 발생 및 출력할 수 있다. 제 2 스테이지 로직부 (115)는 값들(102)을 수신 및 처리할 수 있다. 제 2 스테이지 로직부 (115)는 제 3 스테이지 로직부 (120)에 의해 수신 및 처리될 수 있는 하나 이상의 출력 신호들(104)을 발생 및 출력할 수 있다. 제 2 스테이지 로직부 (115)는 제 3 스테이지 로직부 (120)로부터 하나 이상의 값들 (104)을 수신할 수 있다. 제 3 스테이지 로직부 (120)는 제 4 스테이지 로직부 (125)에 의해 수신될 수 있는 값들 (106)을 발생 및 출력할 수 있다.
제 4 스테이지 로직부 (125)는 값들 (106)을 수신 및 처리할 수 있다. 제 4 스테이지 로직부 (125)는 몫 결과와 같은 솔루션 값들 (108)을 발생 및 출력할 수 있다. 정수 나눗셈 연산의 경우에 있어서, 제 4 스테이지 로직부 (125)는 정수 값 (145) 및/혹은 지수 (150)를 출력할 수 있다. 부동 소수점 나눗셈 연산의 경우에 있어서, 제 4 스테이지 로직부 (125)는 부동 소수점 값 (145) 및/혹은 지수 (150)를 출력할 수 있다. 제곱근 연산의 경우에 있어서, 제 4 스테이지 로직부 (125)는 정수 값 (145), 부동 소수점 값 (145), 및/혹은 지수 (150)를 출력할 수 있다.
4개의 로직부들 (110, 115, 120, 125)의 각각의 다양한 구성들은, 정수 나눗셈 연산들, 부동 소수점 나눗셈 연산들, 및/혹은 제곱근 연산들을 처리하기 위하여 사용되거나 공유될 수 있다. 여기서는 4개의 로직부들이 도시되어 설명되고 있지만, 로직부의 적합한 개수는 본 발명의 개념을 벗어나지 않고 사용될 수 있다고 이해되어야 할 것이다. 로직부들과 스테이지들의 각각의 자세한 설명은 아래에서 설명된다.
도 2는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛(105)의 제 1 스테이지 로직부(110)의 블록 다이어그램을 예시적으로 보여준다. 제 1 스테이지 로직부(110)는 소스 값들로 언급되는, 제수 (135) 및 피제수 (140)을 수신하고, 그리고 출력신호들(102)을 출력할 수 있다. 제 1 스테이지 로직부(110)는 제수 (135)에 관련된 예외들 및 특수 케이스들을 업-프론트 검출 및 처리하기 위한 예외들 및 특수 케이스들 핸들러(230)를 포함할 수 있다.
유사하게, 제 1 스테이지 로직부(110)는 피제수 (140)에 관련된 예외들 및 특수 케이스들을 업-프론트 검출 및 처리하기 위한 예외들 및 특수 케이스들 핸들러(280)를 포함할 수 잇다. 예외들 및 특수 케이스들 핸들러(230)는 제수 (135)에 관련된 하나 이상의 예외 및/혹은 특수 케이스들 (232)을 검출 및/혹은 저장할 수 있다. 예외들 및 특수 케이스들 핸들러(280)는 피제수 (140)에 관련된 하나 이상의 예외 및/혹은 특수 케이스들 (282)를 검출 및/혹은 저장할 수 있다.
하나 이상의 플립플롭들 (270)은 제수 (135)에 관련된 하나 이상의 예외 및/혹은 특수 케이스들 (232)을 임시로 저장할 수 있고, 서클 'B'에 의해 도시된 하나 이상의 예외 및/혹은 특수 케이스들 (232)를 출력할 수 있다. 하나 이상의 플립플롭들 (270)은 클록 신호 (240)에 의해 클로킹 될 수 있다. 하나 이상의 플립플롭들 (285)는 피제수 (140)에 관련된 하나 이상의 예외 및/혹은 특수 케이스들 (282)를 임시로 저장할 수 있고, 서클 'C'에 의해 도시된 하나 이상의 예외 및/혹은 특수 케이스들 (282)를 출력할 수 있다. 하나 이상의 플립플롭들 (285)은 클록 신호 (240)에 의해 클로킹 될 수 있다.
하나 이상의 예외 및/혹은 특수한 케이스들 (232)은 때때로 타입 I 조기 아웃들로 부르겠다. 예를 들어 타입 I 조기 아웃들 (232)은, 제로 나눗셈에 의한 조기 아웃, -1 나눗셈에 의한 조기 아웃, 3 나눗셈에 의한 조기 아웃, 서브노멀 숫자(subnormal number) 조기 아웃, 혹은 그와 같은 것에 의한 나눗셈을 포함할 수 있다. "구조화" 혹은 디폴트 결과는 공유 하드웨어 로직 유닛 (105)에 출력으로 실제 몫 값을 대신하여 형성되거나 제공될 수 있다.
또한, 하나 이상의 예외 및/혹은 특수 케이스들 (282)은 타입 I 조기 아웃들로 언급될 수 있다. 예를 들어, 타입 I 조기 아웃들 (282)은, 제로 제곱근 조기 아웃, 음수 (negative number) 제곱근 조기 아웃, 무한수 (infinite number) 조기 아웃, 혹은 그와 같은 것의 제곱근을 포함할 수 있다. 타입 I 조기 아웃들 (232)와 유사하게, "구조화" 혹은 디폴트 결과는 공유 하드웨어 로직 유닛 (105)에 출력으로 실제 몫 값을 대신하여 타입 I 조기 아웃들 (282)을 위하여 형성되거나 제공될 수 있다.
부동 소수점 연산의 경우에 있어서, 서클 'A'로 표현된 제수 지수 및/혹은 피제수 지수는, 각각 제수 및/혹은 피제수로부터 도출될 수 있고, 하나 이상의 플립플롭들 (290)에 저장 될 수 있다. 하나 이상의 플립플롭들 (290)은 임시로 저장된 제수 지수 및/혹은 피제수 지수 값들 (296)을 출력할 수 있다. 하나 이상의 플립플롭들 (290)은 FP_EN 신호에 의해 활성화될 수 있다. 하나 이상의 플립플롭들 (290)은 클록 신호 (240)에 의해 클로킹 될 수 있다.
멀티플렉서와 같은 선택기 (220)는, 제수 (135)에 관련된 복수의 값들 (245)로부터 하나 이상의 값들 (247)을 선택할 수 있다. 제어 신호 (225)는 선택기 (220)을 제어할 수 있다. 값들 (245)은 정수 연관 값, 부동 소수점 연관 값, 및/혹은 제곱근 연관 값을 포함할 수 있다. 값들 (245)는 64 비트 연관 값들 혹은 32 비트 연관 값일 수 있다. 값들 (245)은 나눗셈 연산 혹은 제곱근 연산에 관련될 수 있다. 제곱근 연산의 경우에 있어서, 제곱근 로직 유닛(205)은 제곱근 테이블(210)에 값을 검색할 수 있고, 선택기 (220)에 값을 출력할 수 있다. 제곱근 추정은 연산을 위한 출발점(starting place)을 제공함으로써 동일 기수를 이용하는 나눗셈 연산처럼 보이는 연산을 만드는데 이용될 수 있다. 하나 이상의 플립플롭들 (235)은 하나 이상의 값들 (247)을 수신하고 임시로 저장할 수 있다. 하나 이상의 플립플롭들 (235)은 하나 이상의 값들 (247)을 제수(135)에 대한 프리엠블(236)로써 출력할 수 있다. 프리엠블 (236)은 적절하게 제수 (135)의 최상위 비트들로써 추가될 수 있다. 하나 이상의 플립플롭들 (235)은 클록 신호 (240)에 의해 클로킹 될 수 있다.
멀티플렉서로써 선택기 (260)는, 피제수 (140)와 관련된 복수의 값들 (255)로부터 하나 이상의 값들 (267)을 선택할 수 있다. 제어 신호 (265)는 선택기 (260)를 제어할 수 있다. 값들 (255)은 정수 연관 값, 부동 소수점 연관 값, 및/혹은 제곱근 연관 값을 포함할 수 있다. 값들 (255)는 64 비트 연관 값들 혹은 32 비트 연관 값들일 수 있다. 값들 (255)은 나눗셈 연산 혹은 제곱근 연산에 연관될 수 있다. 하나 이상의 플립플롭들 (275)은 하나 이상의 값들 (267)을 수신하고 임시로 저장할 수 있다. 하나 이상의 플립플롭들 (275)은 피제수 (140)에 대한 프리엠블(276)으로써 하나 이상의 값들 (267)을 출력할 수 있다. 프리엠블(276)은 적절하게 피제수 (140)의 최상위 비트들로써 추가될 수 있다. 하나 이상의 플립플롭들 (275)은 클록 신호 (240)에 의해 클로킹 될 수 있다.
도 3은 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 2 스테이지 로직부(115)의 블록 다이어그램을 예시적으로 보여준다. 제 2 스테이지 로직부(115)는 신호들 (102)를 수신하고, 신호들 (104)을 출력할 수 있다. 신호들 (102)은, 프리엠블 (236) 및 대응하는 제수 (135), 서클 'B'로 나타낸 하나 이상의 예외 및/혹은 특수 케이스들, 프리엠블(276) 및 대응하는 피제수 (140), 서클 'C'로 나타낸 하나 이상의 예외 및/혹은 특수 케이스들, 및/혹은 제수 지수 및/혹은 피제수 지수 값들 (296)을 포함할 수 있다.
공유 하드웨어 로직 유닛 (105)의 제 2 스테이지 로직부(115)는 CLZ 쉬프트 로직부 (305)를 포함할 수 있다. CLS 쉬프트 로직부 (305)는 소스 값들을 정규화하는데 이용될 수 있다. 예를 들어, CLZ 쉬프트 로직부 (305)는 모든 입력들을 정규화시킬 수 있고, CLZ 차이를 저장할 수 있다. 멀티플렉서와 같은 선택기 (310)는, 복수의 값들 (320)로부터 하나 이상의 값들 (312)을 선택할 수 있다. 복수의 값들 (320)는 프리엠블 (236) 및 대응하는 제수 (135), CLZ 쉬프트 로직부 (305)로부터 수신된 쉬프트된 값 (325), 및/혹은 서클 'D'로 표시된 QV 값을 포함할 수 있다. 쉬프트된 값 (325)는 제수 값 (355)을 정규화 및/또는 재조절하도록 왼쪽으로 쉬프트된 제수 값 (355)일 수 있다. 서클 'D'로 표시된 QV 값은 양의 Q 벡터일 수 있다. 양의 Q 벡터는, 예를 들어, 몫 벡터 마이너스 1(예, Q-1 혹은 QVM)과 1 ULP(unit in last place)만큼 다를 수 있다. 제어 신호 (315)는 선택기 (310)을 제어할 수 있다. 하나 이상의 플립플롭들 (330)은 하나 이상의 값들 (312)를 수신하고 임시로 저장할 수 있다. 하나 이상의 플립플롭들 (330)는 제수 (355)로써 하나 이상의 값들 (312)을 출력할 수 있다. 하나 이상의 플립플롭들 (330)은 클록 신호 (240)에 의해 클로킹 될 수 있다.
추가로, 멀티플렉서로서 선택기 (360)은 복수의 값들 (370)로부터 하나 이상의 값들 (364)을 선택할 수 있다. 복수의 값들 (370)은 프리엠블(276) 및 대응하는 피제수 (140), CLZ 쉬프트 로직부 (305)로부터 수신된 쉬프트된 값 (375), 및/혹은 아래에서 설명된 제 3 스테이지 로직부 (120)로부터 수신된 쉬프트된 값 (362)을 포함할 수 있다. 쉬프트된 값 (375)은 부분 나머지 값 (382)을 정규화시키거나 및/혹은 재조절하도록 왼쪽으로 쉬프트된 부분 나머지 값 (382)일 수 있다. 쉬프트된 값 (362)는, 예를 들어, 4만큼 왼쪽으로 쉬프트될 수 있다. 하지만, 쉬프트된 값 (362)이 적절한 양만큼 쉬프트될 수 있다고 이해되어야 할 것이다.
제어 신호 (365)는 선택기 (360)를 제어할 수 있다. 하나 이상의 플립플롭(380)은 하나 이상의 값들 (364)을 수신하고 임시로 저장할 수 있다. 하나 이상의 플립플롭들 (380)은 부분 나머지 (382)로서 하나 이상의 값들 (364)을 출력할 수 있다. 하나 이상의 플립플롭들 (380)은 클록 신호 (240)에 의해 클로킹 될 수 있다. CLZ 쉬프트 로직부 (305)는 제수 (355) 및 부분 나머지 (382)를 수신할 수 있다. 동일한 플립플롭들 (예, 330, 380)은 CLZ 거리 정규화들을 위해 이용될 수 있다. 이로써, 다이 면적이 절약될 수 있다. 여기서 플립플롭들 (330, 380) 각각은, 하나 이상의 제수 연관 값들 (312) 및 하나 이상의 피제수 연관 값들 (364)를 을 유지할 수 있다.
CLZ 쉬프트 로직부 (305)는 서클 'E'로 도시된 CLZ 거리를 판별할 수 있다. CLZ 거리는 부동 소수점 연산에서 지수를 조절하는데 이용될 수 있다. 또한, CLZ 거리는 얼마나 많은 비트들이 정규화되는 지를 판별하는데 이용될 수 있다. 추가로, CLZ 거리는 정수 나눗셈에서 얼마나 많은 사이클들이 반복되는 지를 판별하는데 이용될 수 있다. 멀티플렉서와 같은 선택기 (390)는 제수 지수 및/혹은 피제수 지수 값들 (296)와 함께, 서클 'E'로 표시된 CLZ 거리를 포함하는 복수의 값들 (394)을 수신할 수 있다. 제어 신호 (395)는 복수의 값들 (394) 중에서 하나 이상의 값 (392)을 선택할 수 있다. 가산기 (397)는 하나 이상의 선택된 값들 (392)을 더할 수 있다. 하나 이상의 플립플롭들 (399)은 지수 값 (396)으로 출력될 수 있는 더해진 값을 수신하고 임시로 저장할 수 있다. 하나 이상의 플립플롭들 (399)은 FP_EN 신호에 의해 활성화 될 수 있다. 하나 이상의 플립플롭들 (399)은 클록 신호 (240)에 의해 클록킹 될 수 있다.
하나 이상의 플립플롭들 (385)은 서클 'B'로 도시된 하나 이상의 예외 및/혹은 특수 케이스들, 및/또는 서클 'C'로 도시된 하나 이상의 예외 및/혹은 특수 케이스들을 수신하고 임시로 저장할 수 있다. 하나 이상의 플립플롭들 (385)는 클록 신호 (240)에 의해 클록킹 될 수 있다.
제 2 스테이지 로직부(115)는 하나 이상의 개인키들 (350)을 발생할 수 있는 스태틱 로직부(335)를 포함할 수 있다. 개인키들 (350)의 각각은 16 비트, 24 비트, 혹은 28 비트 키와 같은 다중 비트 키일 수 있다. 개인키들 (350)의 각각은, 컬럼들에 대한 PD 테이블로부터 이전에 합성된 스태틱(static) 값일 수 있다. 다른 말로, 일단 초기화되거나 생성될 때, 개인키들 (350)은 개인키들 (350)을 추가로 계산할 필요 없이 스태틱을 유지할 수 있다. 그 결과로써 큰 PD 테이블 룩업 스킴의 필요성을 제거할 수 있다. 하나 이상의 플립플롭들 (345)은 하나 이상의 개인키들 (350)을 수신하고 임시로 저장할 수 있다. 하나 이상의 플립플롭들 (345)은 클록 신호 (240)에 의해 클로킹될 수 있다.
도 4는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 3 스테이지 로직부 (120)의 블록 다이어그램을 예시적으로 보여준다. 제 3 스테이지 로직부 (120)는 서클 'F'로 표시된 바와 같이 부분 나머지 (382)를 수신할 수 있다. 부분 나머지 (382)는 피제수로부터 (제수 * 배수)를 빼는 것에서부터 각 반복 후의 남은 양을 포함할 수 있다. 또한, 이는 부분 나머지로써 지칭될 수 있다. 부분 나머지의 최상위 비트들은 스파스 RAM (405)에 인덱스 시키는데 이용될 수 있다. Qbit로써 언급된 추정은 대응하는 개인키(350) 및/혹은 스파스 RAM (405)의 인덱스된 값에 근거로 하여 판별될 수 있다. Qbit는 각 반복에서 몫 및/혹은 루트를 트래킹할 수 있다. 하나 이상의 Qbits이 각 반복을 위해 생성될 수 있다.
스파스 RAM (405)는 서클 'F'로 표시된 부분 나머지를 수신할 수 있고 및/혹은 상술된 바와 같이 부분 나머지의 최상위 비트들을 수신할 수 있다. 또한 스파스 RAM (405)은 하나 이상의 개인키들 (350)을 수신하고 및/혹은 저장할 수 있다. 각 개인키는 하나의 컬럼에 대한 모든 PD값들을 나타낼 수 있다. 스파스 RAM (405)는 멀티플렉서와 같은 선택기 (410)에 하나 이상의 Qbits(415)을 발생할 수 있다(즉, 0, 1, 2로 나타내어져 있음). 또한, 선택기 (410)는 제수 (355)를 수신할 수 있고, Qbits(415) 및 제수 (355) 중에서 선택할 수 있다. 제어 신호 (427)는 선택기 (410)를 제어할 수 있다. 가산기 (430)는 서클 'F'로 표시된 부분 나머지(382)와 선택기 (410)의 출력 값을 더할 수 있다. 가산기 (430)는 프리-라운디드 결과(pre-rounded result, 470)를 발생할 수 있다. 또한, 가산기 (430)는 도 3의 에 언급된 바와 같이 쉬프트된 값 (362)을 발생할 수 있다.
하나 이상의 OTF(on-the-fly) 상태 머신들 (435)은 동작의 각 반복에 연관된 스파스 RAM (405)으로부터 Qbit를 수신할 수 있다. SRT 나눗셈 구현에서, 예를 들어, Qbit의 최소 중복 형태(minimally redundant form)는 실제 Qbit를 추정하는데 이용될 수 있다. 실제 Qbit는 각 반복의 끝에서 바이너리로 다시 변환될 수 있다. 하나 이상의 OTF 상태 머신들 (435)은 반복마다 각각의 Qbit를 택할 수 있고, Qbit를 두 개의 벡터들 각각에 왼쪽에서 오른쪽으로 추가할 수 있다. 두 개의 벡터들 각각은 Q (양수) 및 Q-1 (음수)로써 언급될 수 있다. Q-1 (음수)는 몫 벡터 마이너스 원(QVM)으로 언급될 수 있다. Q (양수)는 QV로써 언급될 수 있다. 두 개의 벡터들 (QV 및 QVM)은 1 ULP 만큼 떨어져 유지 될 수 있다.
하나 이상의 OTF 상태 머신들 (435)은, 클록 신호 (240)에 의해 클로킹 되는 하나 이상의 플립플롭들 (440 혹은 445)을 포함할 수 있다. 하나 이상의 플립플롭들 (440 혹은 445)은 두 개의 벡터들 (QV 및 QVM)을 임시로 저장할 수 있다. 하나 이상의 OTF 상태 머신들 (435)은 서클 'D'로 표시된 벡터 (QV)와 서클 'G'로 표시된 벡터 (QVM)을 출력할 수 있다. ?F티플렉서와 같은 선택기(450)는 벡터들(QV, QVM)을 수신할 수 있다. 제어 신호 (455)는 선택기 (450)를 제어할 수 있다. 선택기 (450)는 QV 벡터 혹은 QVM 벡터 중 어느 하나를 선택 및 출력할 수 있다.
하나 이상의 플립플롭들 (465)는 서클 'B'로 표시된 하나 이상의 예외 및/혹은 특수한 케이스들, 및/혹은 서클 'C'로 표시된 하나 이상의 예외 및/혹은 특수한 케이스들을 수신하고 임시로 저장 할 수 있다. 하나 이상의 플립플롭들 (465)는 클록 신호 (240)에 의해 클로킹 될 수 있다. 하나 이상의 플립플롭들 (460)은 지수 값 (396)을 수신하고 임시로 저장할 수 있다. 하나 이상의 플립플롭들 (460)은 FP_EN 신호에 의해 활성화 될 수 있다. 하나 이상의 플립플롭들 (460)은 클록 신호 (240)에 의해 클로킹 될 수 있다.
도 5는 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)의 제 4 스테이지 로직부 (125)의 블록 다이어그램을 예시적으로 보여준다. 제 4 스테이지 로직부 (125)는 라운딩 로직부 (505)를 포함할 수 있다. 연산이 부동 소수점 나눗셈 연산일 때, 라운딩 로직부 (505)는 몫을 라운딩 할 수 있다. 부동 소수점의 경우에 있어서, 만일 마지막 몫이 비정규일(subnormal) 때(예, 제로의 엑스트라 최상위 비트가 발생될 수 있다), 라운딩 로직부 (505)는 몫을 쉬프트 조절할 수 있다. 멀티플렉서와 같은 선택기 (510)은 라운딩 로직부 (505)로부터 라운드 되거나 조절된 값을 수신할 수 있다. 또한, 선택기(510)는 서클 'B'로 표시된 하나 이상의 예외 및/혹은 특수 케이스들, 및/혹은 서클 'C'로 표시된 하나 이상의 예외 및/혹은 특수 케이스들을 수신할 수 있다.
또한 선택기 (510)는 상수들(515)을 수신할 수 있다. 상수들 (515)은 상술된 특수 케이스들 및 예외들을 포함할 수 있다. 제어 신호(520)는 선택기 (510)를 제어할 수 있고, 라운딩 로직부 (505)로부터 수신된 라운드 되거나 조절된 값, 상수들(515), 서클 'B'로 표시된 하나 이상의 예외 및/혹은 특수 케이스들, 및/혹은 서클 'C'로 표시된 하나 이상의 예외 및/혹은 특수 케이스들로부터 선택하기 위하여 선택기 (510)를 제어할 수 있다. 선택기 (510)는 부동 소수점 및/혹은 정수 값(145), 혹은 예외 혹은 특수 케이스의 이벤트에서 디폴트 솔루션을 출력할 수 있다.
제 4 스테이지 로직부 (125)는 멀티플렉서와 같은 선택기(525)를 포함할 수 있다. 선택기(525)는 지수 값(396)을 수신할 수 있다. 또한 선택기(525)는 서클 'B'로 표시된 하나 이상의 예외 및/혹은 특수 케이스들, 및/혹은 서클 'C'로 표시된 하나 이상의 예외 및/혹은 특수 케이스들을 수신할 수 있다. 제어 신호(530)는 선택기(525)를 제어할 수 있고, 지수 값(396), 서클 'B'로 표시된 하나 이상의 예외 및/혹은 특수 케이스들, 및/혹은 서클 'C'로 표시된 하나 이상의 예외 및/혹은 특수 케이스들 중에서 선택하도록 선택기(525)를 제어할 수 있다. 선택기(525)는 지수(150)를 출력할 수 있다.
도 6a, 도 6b, 및 도 6c는 본 발명의 실시 예에 따른 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)에서 정수 연산, 부동 소수점 연산, 및 제곱근 연산을 공유하는 방법들을 예시적으로 보여주는 도면들이다. 605 단계에서 방법이 시작된다. 제수 소스 입력 및 피제수 소스 입력은 공유 하드웨어 로직 유닛(예, 105)에 수신될 수 있다. 610 단계에서, 공유 하드웨어 로직 유닛 (105)는 상술된 바와 같이, 타입 I 특수 케이스들 및/혹은 예외들을 검출 및/또는 저장할 수 있다. 615 단계에서, 제수 및/혹은 피제수 소스 입력들은 정규화 될 수 있다. 620 단계에서, CLZ 차이는, 예를 들어, 도 3의 CLZ 쉬프트 로직부 (305)에 의해 저장될 수 있다. 625 단계에서, 프리엠블은 제수 및/혹은 피제수의 최상위 비트들에 적절히 추가될 수 있다. 630 단계에서, 하나 이상의 OTF 상태 머신들(예, 도 4의 435)는 초기화될 수 있다. 635 단계에서, 특수 연산을 위한 최대 반복 회수는 특수 연산을 수행하기 전에 계산될 수 있다. 640 단계에서, 하나 이상의 개인키들(예, 도 3의 350)은 판별 및/또는 저장될 수 있다.
645 단계에서, 타입 I 조기 아웃이 존재하는 지에 대한 판별이 이루어질 수 있다. 만일, YES 라면, 650 단계가 진행될 수 있다. 여기서 디폴트 솔루션은 결과로서 출력될 수 있다. 또한, 추가적인 소스 입력들을 수신 및 처리하기 위하여 605 단계로 돌아갈 수 있다. 반면에, NO 라면, 타입 I 조기 아웃들이 존재하지 않는다는 의미이다. 이후, 서클 'I'을 통하여 도 6b로 처리될 것이다. 도 6b에 도시된 바와 같이, 본 방법은 두 개의 병렬 패스들로 분리 될 수 있다. 하나의 패스에서 수행되는 작업들이 다른 패스에서 수행되는 작업들과 병렬로 이루어질 수 있다. 652 단계에서, 추정(예, Qbit)은 스파스 RAM(도 4 의 405)으로부터 선택될 수 있다. 654 단계에서, 멀티플(multiple)이 Qbit에 근거로 하여 선택될 수 있다.
658 단계에서, 현재의 연산이 제곱근 연산인 지 판별이 이루어 질 수 있다. 만일, YES 라면, 예를 들면 하나 이상의 OTF 상태 머신들(예, 도 4의 435)에 의해 트레일러(trailer)가 출력 될 수 있고, 그리고 트레일러(trailer)는 Qbit가 알려진 이후에 제곱근 멀티플에 부가 될 수 있는 660 단계가 진행될 수 있다. 반면에, NO 라면, 현재 연산이 제곱근 연산이 아니라는 의미이다. 다라서 피제수 및 제수가 더해지는 662 단계가 진행될 수 있다. 664 단계에서, 바이너리 Qbit는 QVM 벡터 및 QV 벡터에 추가될 수 있다. 668 단계에서, 'r' 비트들은 왼쪽으로 쉬프트 될 수 있다. 'r' 비트들은 각 반복에 폐기 될 수 있는 비트의 개수로 참조될 수 있다.
다른 기수에 대하여, 비트들의 개수가 변화된다. 예를 들어, 방정식으로써 2r 에 있어서, 기수 4의 경우, 이는 22에 대응하고, 따라서 r은 2이다. 다른 실시 예에 있어서, 기수 8의 경우에, 이는 23에 대응하고, 따라서 r은 3이다. 또 다른 실시 예에 있어서, 기수 16의 경우에, 이는 24에 대응하고, 따라서 r은 4이다. 670 단계에서, 최대 혹은 문턱 반복 회수가 도달 했는지 및/또는 타입 II 조기 아웃 존재하는 지에 대한 판별이 이루어질 수 있다. 만일, YES(도면 수정요) 라면, 다른 추정 (예, Qbit)이 스파스 RAM(예, 도 4의 405)로부터 선택되고, 추가 반복들이 수행되는 652 단계가 진행될 수 있다. 반면에, NO 라면, 서클 'II'을 통하여 도 6c가 진행될 수 있다.
한편, 흐름도는 현재 동작이 부동 소수점 연산인지 여부가 판별되는 672 단계로 진행할 수 있다. 만약 YES 라면, 새로운 지수가 계산되는 674 단계로 진행할 수 있다. 만약 NO 라면, CLZ 차이가 판별될 수 있는 676 단계로 바로 진행할 수 있다. 678 단계에서 지수가 작은지 여부에 대한 또 다른 판별이 진행될 수 있다. 작음(tininess)은 부동 소수점 연산들에 대해서만 일어나고 그리고 관련되어 있다. 예를 들어, 만약 지수가 어떤 미리 정해진 범위 내에 있지 않을 경우, 이는 유효하지 않다. 달리 말하면, 만약 정상적인 연산의 지수가 최소 정상("Min Normal") 값보다 작은 경우, 지수는 작은 결과를 갖는다. 최소 정상 값은 연산의 크기에 따라 달라질 수 있다. 예를 들면, 64 비트 연산은 32 비트 연산과 다른 최소 정상 값을 가질 수 있다. 작음의 문턱 값들은 IEEE(the Institute of Electrical and Electronics Engineers)와 같은 표준 제정 조직들에 의해 정의될 수 있다. 다시 흐름도로 돌아가서, 만약 YES 라면, 지수가 작음을 의미하고, 지수가 조정 및/혹은 저장될 수 있는 680 단계로 진행 할 수 있다. 반대로 만약 NO 라면, 지수 혹은 대안적으로 디폴트 솔루션이 출력될 수 있는 682 단계로 진행 할 수 있다. 이후 서클 'III'을 통하여 도 6c가 진행될 수 있다
도 6c에 도시된 바와 같이, 서클 'II'을 통한 흐름도는 684 단계를 진행할 수 있다. 여기서, 몫은 부분 나머지 값(예, 도 3의 382)의 부호에 근거로 하여 선택될 수 있다. 686 단계에서, 현재 연산이 부동 소수점 연산인 지에 대한 판별이 이루어질 수 있다. 만일, 그렇다면, 688 단계가 진행될 수 있다. 여기서 몫은, 예를 들어 라운딩 로직부(505, 도 5 참조)에 의해 라운드 될 수 있다. 반면에, 그렇지 않다면, 690 단계가 진행될 수 있다. 여기서 특수 케이스 혹은 예외가 존재하는 지가 판별될 수 있다. 만일, 그렇다면, 692 단계가 진행될 수 있다. 여기서 디폴트 솔루션이 제공될 수 있다. 반면에 그렇지 않다면, 693 단계가 진행될 수 있다. 여기서 지수가 작은지(부동 소수점 연산의 경우에 있어서) 혹은 현재 연산이 정수 연산인 지에 대한 판별이 이루어질 수 있다. 만일 그렇다면, 694 단계가 진행 될 수 있다. 여기서 지수가 쉬프트 조정될 수 있다. 반면에, 그렇지 않다면, 696단계가 진행될 수 있다. 여기서 현재 연산이 정수 연산인 지에 대한 판별이 이루어질 수 있다. 또한, 서클 'III'로부터의 흐름도는 696 단계에서 만날 수 있다. 만일 그렇다면, 697 단계가 진행될 수 있다. 여기서 포스트-쉬프티드 몫 혹은 디폴트 솔루션 중 어느 하나가 공유 하드웨어 로직 유닛(도 1의 105)에 의해 출력될 수 있다. 반면에, 그렇지 않다면, 698 단계가 진행될 수 있다. 여기서 부호, 지수, 정규화 몫, 혹은 디폴트 솔루션은 공유 하드웨어 로직 유닛(도 1의 105)에 의해 출력될 수 있다.
도 6a, 도 6b, 및 도 6c의 단계들 및 요소들이 특정 순서로 도시되고 설명되지만, 이러한 단계들 및/혹은 요소들이, 본 발명의 개념을 벗어나지 않는 범위 내에서 다른 순서로 배치될 수 있고, 중간 단계들을 포함할 수 있다고 이해 되어야 할 것이다.
본 발명의 실시 예에 따라, 다이 면적이 보존될 수 있고, 연산의 레이턴시를 향상시킬 수 있다. 예를 들어, 64 비트 값 연산들에 대하여, 레이턴시는 14 사이클 정도를 향상시킬 수 있다. 32 비트 값 연산의 경우, 레이턴시는 6 사이클 정도를 향상시킬 수 있다. 공유 하드웨어 정수/부동 소수점 나눗셈 혹은 제곱근 연산 로직 유닛 (105) 내의 수많은 하드웨어 구성들 및 데이터 경로들이 정수 나눗셈 연산들, 부동 소수점 나눗셈 연산들, 및 제곱근 연산들을 중에서 공유되기 때문에, 다이 면적이 줄어들 수 있다.
도 7은 도 1에 도시된 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)을 포함하는 컴퓨팅 시스템 (700)에 대한 블록 다이어그램이다. 도 7를 참조하면, 컴퓨팅 시스템 (700)은, 시스템 버스 (705)에 임의로 혹은 전체로 결합될 수 있는, 클록 (710), RAM(random access memory, 715), 사용자 인터페이스 (720), 베이스밴드 칩과 같은 모뎀 (725), SSD (solid state drive/disk, 740), 및/혹은 프로세서 (735)를 포함할 수 있다. 컴퓨팅 시스템 (700)은 시스템 버스 (705)에 전기적으로 연결될 수 있는, 도 1의 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)을 포함할 수 있다. 다른 실시 예에 있어서, 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛 (105)은 클록(710), RAM(715), 사용자 인터페이스 (720), 모뎀 (725), SSD (740), 및/혹은 프로세서 (735)를 포함하거나 혹은 다르게는 이들과 인터페이스할 수 있다.본 발명의 실시 예에 따른 공유 하드웨어 로직 유닛을 이용하는 부동 소수점 나눗셈, 정수 나눗셈, 및 제곱근 연산들을 처리하기 위한 컴퓨터 구현 방법은: 상기 공유 하드웨어 로직 유닛에 의해, 제 1 제수 소스 입력 및 제 1 피제수 소스 입력을 수신하는 단계; 상기 공유 하드웨어 로직 유닛에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력을 이용하여 부동 소수점 나눗셈 연산을 수행하는 단계; 상기 공유 하드웨어 로직 유닛에 의해, 상기 부동 소수점 나눗셈 연산의 몫 결과를 출력하는 단계; 상기 공유 하드웨어 로직 유닛에 의해, 제 2 제수 소스 입력 및 제 2 피제수 소스 입력을 수신하는 단계; 상기 공유 하드웨어 로직 유닛에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력을 이용하여 정수 나눗셈 연산을 수행하는 단계; 및 상기 공유 하드웨어 로직 유닛에 의해, 상기 정수 나눗셈 연산의 결과를 출력하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 공유 하드웨어 로직 유닛에 의해, 상기 제 1 제수 소스 입력, 상기 제 1 피제수 소스 입력, 상기 제 2 제수 소스 입력, 및 상기 제 2 피제수 소스 입력 중 적어도 하나를 이용하여 제곱근 연산을 수행하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 부동 소수점 나눗셈 연산, 상기 정수 나눗셈 연산, 및 상기 제곱근 연산 중에서 전체 부분 나머지 제수 (partial remainder divisor, PD) 테이블의 상기 공유 하드웨어 로직 유닛의 동일한 스파스 랜덤 액세스 메모리(sparse RAM) 테이블을 공유하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 부동 소수점 나눗셈 연산, 상기 정수 나눗셈 연산, 및 상기 제곱근 연산 모두를 위한 일치하는 기수 (radix)을 이용하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 OTF(on-the-fly) 상태 머신을 초기화시키는 단계; 상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산 중 적어도 하나를 위한 반복 카운트를 판별하는 단계; 상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산 중 적어도 하나의 특수 반복 동안에, 상기 sparse RAM으로부터 Qbit 추정을 선택하는 단계; 상기 OTF 상태 머신에 의해, 상기 Qbit 추정을 수신하는 단계; 및 상기 특수 반복 동안에, 상기 Qbit 추정에 근거로 하여 멀티플(multiple)을 선택하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 공유 하드웨어 로직 유닛의 가산기에 의해, 상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산 중 적어도 하나를 위하여 적어도 정규화된 제수 혹은 정규화된 피제수를 더하는 단계; 상기 OTF 상태 머신에 의해, 상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산 중 적어도 하나를 위하여 QV(quotient vector), 및 QVM (quotient vector minus one) 벡터 (vectorO)의 각각에 상기 Qbit 추정을 첨부하는 단계; 및 상기 더하는 단계 및 상기 첨부하는 단계에 병렬로, 상기 부동 소수점 나눗셈 연산의 상기 몫 결과 및 상기 정수 나눗셈 연산의 상기 몫 결과 중 적어도 하나의 지수 (exponent)를 결정하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 공유 하드웨어 로직 유닛의 CLZ(count leading zero) 쉬프트 로직부에 의해, 상기 부동 소수점 나눗셈 연산에서 사용되는 상기 제 1 제수 소스 입력과 상기 제 1 피제수 소스 입력을 정규화시키는 단계; 및 상기 공유 하드웨어 로직 유닛의 상기 CLZ 쉬프트 로직부에 의해, 상기 정수 나눗셈 연산에서 사용되는 제 2 제수 소스 입력과 상기 제 2 피제수 소스 입력을 정규화시키는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 공유 하드웨어 로직 유닛의 제 1 예외 및 특수 케이스 핸들러에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력 중 적어도 하나에 연관된 제 1 타입의 조기 아웃(early out) 조건을 검출하는 단계; 및 상기 공유 하드웨어 로직 유닛의 제 2 예외 및 특수 케이스 핸들러에 의해, 상기 제 2 제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 제 1 타입의 조기 아웃(early out) 조건을 검출하는 단계를 더 포함한다.
실시 예에 있어서, 상기 공유 하드웨어 로직 유닛의 상기 제 1 예외 및 특수 케이스 핸들러에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 1 타입의 조기 아웃 조건을 저장하는 단계; 상기 공유 하드웨어 로직 유닛의 상기 제 2 예외 및 특수 케이스 핸들러에 의해, 상기 제 2 제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 1 타입의 조기 아웃 조건을 저장하는 단계; 및 상기 제 1 예외 및 특수 케이스 핸들러 및 상기 제 2 예외 및 특수 케이스 핸들러 중 적어도 하나에 의해 검출된 상기 제 1 타입의 조기 아웃 조건에 응답하여, 디폴트 솔루션을 출력하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 공유 하드웨어 로직 유닛의 상기 제 1 예외 및 특수 케이스 핸들러에 의해, 상기 제 1 제수 소스 입력 및 상기 제 2 제수 소스 입력 중 적어도 하나에 연관된 제 2 타입의 조기 아웃 조건을 검출하는 단계; 및 상기 공유 하드웨어 로직 유닛의 상기 제 2 예외 및 특수 케이스 핸들러에 의해, 상기 제 2 피제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 제 2 타입의 조기 아웃 조건을 검출하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 공유 하드웨어 로직 유닛의 상기 제 1 예외 및 특수 케이스 핸들러에 의해, 상기 제 1 제수 소스 입력 및 상기 제 2 제수 소스 입력 중 적어도 하나에 연관된 상기 제 2 타입의 조기 아웃 조건을 저장하는 단계; 상기 공유 하드웨어 로직 유닛의 상기 제 2 예외 및 특수 케이스 핸들러에 의해, 상기 제 2 피제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 2 타입의 조기 아웃 조건을 검출하는 단계; 및 상기 제 1 예외 및 특수 케이스 핸들러 및 상기 제 2 예외 및 특수 케이스 핸들러 중 적어도 하나에 의해 검출된 상기 제 2 타입의 조기 아웃 조건에 응답하여, 디폴트 솔루션을 출력하는 단계를 더 포함할 수 있다.
본 발명의 실시 예에 따른 공유 하드웨어 로직 유닛은, 부동 소수점 나눗셈 연산 및 정수 나눗셈 연산을 수행하는 복수의 공유 로직부들; 상기 부동 소수점 나눗셈 연산에 연관된 제 1 제수 소스 입력과 제 1 피제수 소스 입력을 입력 받고, 그리고, 상기 정수 나눗셈 연산에 연관된 제 2 제수 소스 입력과 제 2 피제수 소스 입력을 입력 받는 상기 복수의 공유 로직부들 중에서 첫 번째 스테이지 로직부; 및 상기 부동 소수점 나눗셈 연산의 몫 결과 및 상기 정수 나눗셈 연산의 몫 결과를 출력하는 상기 복수의 공유 로직부들 중에서 마지막 스테이지 로직부를 포함할 수 있다.
실시 예에 있어서, 상기 복수의 공유 로직부들은 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력을 이용하여 상기 부동 소수점 나눗셈 연산을 수행하고; 및 상기 복수의 공유 로직부들은 상기 제 2 제수 소스 입력 및 상기 제 2 피제수 소스 입력을 이용하여 상기 정수 나눗셈 연산을 수행할 수 있다.
실시 예에 있어서, 상기 복수의 공유 로직부들은 상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산에서 사용되는 일치하는 기수를 이용하여 제곱근 연산을 수행할 수 있다.
실시 예에 있어서, 전체 PD(partial remainder divisor) 테이블의 위치에서 사용되고, 상기 부동 소수점 나눗셈 연산, 상기 정수 나눗셈 연산, 및 상기 제곱근 연산 중에 공유되는 공유된 sparse RAM (random access memory)테이블을 더 포함할 수 있다.
실시 예에 있어서, 상기 부동 소수점 나눗셈 연산, 상기 정수 나눗셈 연산, 및 상기 제곱근 연산 중에 공유된 OTF(on-the-fly) 상태 머신을 더 포함할 수 있다.
실시 예에 있어서, 상기 부동 소수점 나눗셈 연산, 상기 정수 나눗셈 연산, 및 상기 제곱근 연산 중에 공유된 공유 가산기를 더 포함할 수 있다.
실시 예에 있어서, 상기 부동 소수점 나눗셈 연산, 상기 정수 나눗셈 연산, 및 상기 제곱근 연산 중에 공유된 공유 CLZ(count leading zero) 쉬프트 로직부를 더 포함할 수 있다.
실시 예에 있어서, 제 1 제수 소스 입력 및 제 2 제수 소스 입력 중 적어도 하나에 연관된 제 1 타입의 조기 아웃 조건을 검출하는 제 1 예외 및 특수 케이스 핸들러; 및 제 1 피제수 소스 입력 및 제 2 피제수 소스 입력 중 적어도 하나에 연관된 제 1 타입의 조기 아웃 조건을 검출하는 제 2 예외 및 특수 케이스 핸들러를 포함하고, 상기 제 1 예외 및 특수 케이스 핸들러는 제 1 제수 소스 입력 및 제 2 제수 소스 입력 중 적어도 하나에 연관된 상기 제 1 타입의 조기 아웃 조건을 저장하고; 상기 마지막 스테이지 로직부는 상기 제 1 제수 소스 입력 및 상기 제 2 제수 소스 입력 중 적어도 하나에 연관된 상기 제 1 타입의 조기 아웃 조건에 근거로 하여 제 1 디폴트 솔루션을 출력하고, 상기 제 2 예외 및 특수 케이스 핸들러는 제 1 피제수 소스 입력 및 제 2 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 1 타입의 조기 아웃 조건을 저장하고; 상기 마지막 스테이지 로직부는 상기 제 1 피제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 1 타입의 조기 아웃 조건에 근거로 하여 제 2 디폴트 솔루션을 출력할 수 있다.
실시 예에 있어서, 상기 제 1 예외 및 특수 케이스 핸들러는 상기 제 1 제수 소스 입력 및 상기 제 2 제수 소스 입력 중 적어도 하나에 연관된 제 2 타입의 조기 아웃 조건을 검출하고; 그리고, 상기 제 2 예외 및 특수 케이스 핸들러는 제 1 피제수 소스 입력 및 제 2 피제수 소스 입력 중 적어도 하나에 연관된 제 2 타입의 조기 아웃 조건을 검출하고, 상기 제 1 예외 및 특수 케이스 핸들러는 상기 제 1 제수 소스 입력 및 상기 제 2 제수 소스 입력 중 적어도 하나에 연관된 상기 제 2 타입의 조기 아웃 조건을 저장하고; 상기 마지막 스테이지 로직부는 상기 제 1 제수 소스 입력 및 상기 제 2 제수 소스 입력 중 적어도 하나에 연관된 상기 제 2 타입의 조기 아웃 조건에 근거로 하여 제 3 디폴트 솔루션을 출력하고, 상기 제 2 예외 및 특수 케이스 핸들러는 상기 제 2 피제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 2 타입의 조기 아웃 조건을 저장하고; 상기 마지막 스테이지 로직부는 상기 제 1 피제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 2 타입의 조기 아웃 조건에 근거로 하여 제 4 디폴트 솔루션을 출력할 수 있다.
아래의 설명은 본 발명의 개념의 특정 양상들이 구현 될 수 있는 적합한 머신 혹은 머신들의 간략한 일반적인 설명을 제공하도록 의도된다. 일반적으로, 머신 혹은 머신들은, 프로세서들, RAM(random access memory), ROM(read only memory), 혹은 다른 상태 유지 매체와 같은 메모리, 저장 장치들, 비디오 인터페이스, 및 입출력 인터페이스들을 부착한 시스템 버스를 포함할 수 있다. 머신 혹은 머신들은, 키보드, 마우스와 같은 종래의 입력 장치로부터의 입력뿐 아니라, 다른 머신으로부터 수신된 출력들, VR(virtual reality) 환경과의 상호 작용, 바이오메트릭(biometric) 피드백, 혹은 다른 입력 신호에 의해 적어도 일부를 제어할 수 있다. 여기서 용어 "머신"은 대체로 단일 머신, 가상 머신, 혹은 함께 머신들, 가상 머신들, 혹은 함께 동작하는 장치들로 연결된 시스템을 포함할 수 있다고 이해되어야 할 것이다. 예시적인 머신들은, 사설 혹은 공공 교통 수단, 예를 들어, 자동차, 기차, 택시, 등 등의 퍼스널 컴퓨터, 워크 스테이션, 서버, 휴대용 컴퓨터, 휴대용 기기, 전화기, 태블릿과 같은 컴퓨팅 장치들뿐만 아니라, 반송 장치를 포함할 수 있다.
머신 혹은 머신들은, 프로그래머블 혹은 논-프로그래머블 장치들 혹은 어레이들, ASICs(application specific integrated circuits), 내장 컴퓨터들, 스마트 카드들, 및 그와 같은 것을 포함할 수 있다. 머신 혹은 머신들은 네트워크 인터페이스, 모뎀, 혹은 통신 연결과 같은 하나 이상의 원격 컴퓨터들에 하나 이상의 연결들을 이용할 수 있다. 머신들은, 인트라넷, 인터넷, 근거리 네트워크, 광역 네트워크와 같은 물리적 및/혹은 논리적 네트워크를 통하여 내부 접속 될 수 있다. 네트워크 통신을 본 기술 분야의 당업자는, RF(radio frequency), 위성, 마이크로웨이브, IEEE(institute of electrical and electronics engineers) 545.11, 블루투스, 광학, 적외선, 케이블, 레이저 등을 포함하는 다양한 유무선 단거리 혹은 장거리 캐리어들 및 프로토콜들을 이용할 수 있다.
본 발명의 실시 예들은, 작업들을 수행하거나 추상 데이터 타입들 혹은 로-레벨 하드웨어 콘텍스트를 정의하는 머신에서 머신 결과들을 액세스할 때, 기능들, 절차들, 데이터 구조들, 응용 프로그램 등을 포함하는 관련된 데이터와 함께 참조하여 설명될 수 있다. 관련된 데이터는, 예를 들어, RAM, ROM와 같은 휘발성 및/혹은 비휘발성 메모리에 저장될 수 있거나, 혹은 하드 드라이버들, 플로피 디스크들, 광학 저장 장치, 테이프들, 플래시 메모리, 메모리 스틱들, 디지털 비디오 디스크들, 바이오 저장 장치 등을 포함하는 다른 저장 장치들 및 연관된 저장 매체에 저장될 수 있다. 관련된 데이터는, 패킷들, 직렬 데이터, 병렬 데이터, 전파 신호 등과 같은 형태로, 물리적 및/혹은 논리적 네트워크를 갖는 전송 환경들에서 전달될 수 있고, 압축되거나 암호화된 포맷으로 사용될 수 있다. 관련된 데이터는 분산 환경에 사용될 수 있고, 머신 액세스를 위하여 국부적 및/혹은 원격으로 저장될 수 있다.
도시된 실시 예들을 참조하여 본 발명의 개념의 원리를 설명 하였지만, 도시 된 실시 예들은 이러한 원리를 벗어나지 않고 배열 및 세부 사항에 있어서 변경될 수 있고, 임의의 방식으로 조합될 수 있다고 이해되어야 할 것이다. 상술 된 논의는 특정한 실시 예들에 집중되었지만, 다른 구성이 고려되어야 할 것이다. 특히, 다음과 같은 "발명의 실시 예에 있어서"는 본 명세서에서 이용되는 경우에도, 이 어구가 일반적으로 실시 가능성을 참조하는 것을 의미하고, 특정 실시 예 구성에 본 발명의 개념을 제한하고자 하는 것은 아니다. 본원에서 이용된 바와 같이, 이러한 용어들은 다른 실시 예들에 결합 될 수 있는 동일한 또는 상이한 실시 예를 참조 할 수 있다.
본 발명의 개념의 실시 예들은 하나 이상의 프로세서에 의해 실행 가능한 명령들을 포함하는 비 일시적 머신-판독 가능 매체를 포함할 수 있으며, 본원에 기재된 바와 같은 본 발명의 개념의 구성 요소를 수행하는 명령들을 포함하는 명령을 포함할 수 있다.
상술 된 예시적인 실시 예들은 그 발명의 개념을 제한하는 것으로 해석되지 않는다고 이해 되어야 할 것이다. 몇 가지 실시 예들이 설명되었지만, 당업자는 많은 변형이 본 발명의 신규한 교시 및 이점을 벗어나지 않고 이들 실시 예에 가능하다는 것을 쉽게 이해할 것이다. 따라서, 그러한 모든 변형은 청구 범위에 기재된 본 발명의 개념의 범위 내에 포함되는 것으로 의도될 것이다.
105: 공유 하드웨어 정수/부동 소수점 나눗셈 및 제곱근 로직 유닛
110: 제 1 스테이지 로직부
115: 제 2 스테이지 로직부
120: 제 3 스테이지 로직부
125: 제 4 스테이지 로직부
260: 선택기
110: 제 1 스테이지 로직부
115: 제 2 스테이지 로직부
120: 제 3 스테이지 로직부
125: 제 4 스테이지 로직부
260: 선택기
Claims (10)
- 공유 하드웨어 로직 유닛을 이용하는 부동 소수점 나눗셈, 정수 나눗셈, 및 제곱근 연산들을 처리하기 위한 컴퓨터의 다이 면적을 줄이는 방법에 있어서:
상기 공유 하드웨어 로직 유닛에 의해, 제 1 제수 소스 입력 및 제 1 피제수 소스 입력을 수신하는 단계;
상기 공유 하드웨어 로직 유닛에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력을 이용하여 부동 소수점 나눗셈 연산을 수행하는 단계;
상기 공유 하드웨어 로직 유닛에 의해, 상기 부동 소수점 나눗셈 연산의 몫 결과를 출력하는 단계;
상기 공유 하드웨어 로직 유닛에 의해, 제 2 제수 소스 입력 및 제 2 피제수 소스 입력을 수신하는 단계;
상기 공유 하드웨어 로직 유닛에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력을 이용하여 정수 나눗셈 연산을 수행하는 단계; 및
상기 공유 하드웨어 로직 유닛에 의해, 상기 정수 나눗셈 연산의 결과를 출력하는 단계를 포함하는 방법. - 제 1 항에 있어서,
상기 공유 하드웨어 로직 유닛에 의해, 상기 제 1 제수 소스 입력, 상기 제 1 피제수 소스 입력, 상기 제 2 제수 소스 입력, 및 상기 제 2 피제수 소스 입력 중 적어도 하나를 이용하여 제곱근 연산을 수행하는 단계를 더 포함하는 방법. - 제 2 항에 있어서,
상기 부동 소수점 나눗셈 연산, 상기 정수 나눗셈 연산, 및 상기 제곱근 연산 중에서 전체 부분 나머지 제수 (partial remainder divisor, PD) 테이블의 상기 공유 하드웨어 로직 유닛의 동일한 스파스 랜덤 액세스 메모리(sparse RAM) 테이블을 공유하는 단계를 더 포함하는 방법. - 제 3 항에 있어서,
상기 부동 소수점 나눗셈 연산, 상기 정수 나눗셈 연산, 및 상기 제곱근 연산 모두를 위한 일치하는 기수 (radix)을 이용하는 단계를 더 포함하는 방법. - 제 3 항에 있어서,
상기 OTF(on-the-fly) 상태 머신을 초기화시키는 단계;
상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산 중 적어도 하나를 위한 반복 카운트를 판별하는 단계;
상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산 중 적어도 하나의 특수 반복 동안에, 상기 sparse RAM으로 부터 Qbit 추정을 선택하는 단계;
상기 OTF 상태 머신에 의해, 상기 Qbit 추정을 수신하는 단계; 및
상기 특수 반복 동안에, 상기 Qbit 추정에 근거로 하여 멀티플(multiple)을 선택하는 단계를 더 포함하는 방법. - 제 5 항에 있어서,
상기 공유 하드웨어 로직 유닛의 가산기에 의해, 상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산 중 적어도 하나를 위하여 적어도 정규화된 제수 혹은 정규화된 피제수를 더하는 단계;
상기 OTF 상태 머신에 의해, 상기 부동 소수점 나눗셈 연산 및 상기 정수 나눗셈 연산 중 적어도 하나를 위하여 QV(quotient vector), 및 QVM (quotient vector minus one) 벡터 (vectorO)의 각각에 상기 Qbit 추정을 첨부하는 단계; 및
상기 더하는 단계 및 상기 첨부하는 단계에 병렬로, 상기 부동 소수점 나눗셈 연산의 상기 몫 결과 및 상기 정수 나눗셈 연산의 상기 몫 결과 중 적어도 하나의 지수 (exponent)를 결정하는 단계를 더 포함하는 방법. - 제 1 항에 있어서,
상기 공유 하드웨어 로직 유닛의 CLZ(count leading zero) 쉬프트 로직부에 의해, 상기 부동 소수점 나눗셈 연산에서 사용되는 상기 제 1 제수 소스 입력과 상기 제 1 피제수 소스 입력을 정규화시키는 단계; 및
상기 공유 하드웨어 로직 유닛의 상기 CLZ 쉬프트 로직부에 의해, 상기 정수 나눗셈 연산에서 사용되는 제 2 제수 소스 입력과 상기 제 2 피제수 소스 입력을 정규화시키는 단계를 더 포함하는 방법. - 제 1 항에 있어서,
상기 공유 하드웨어 로직 유닛의 제 1 예외 및 특수 케이스 핸들러에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력 중 적어도 하나에 연관된 제 1 타입의 조기 아웃(early out) 조건을 검출하는 단계; 및
상기 공유 하드웨어 로직 유닛의 제 2 예외 및 특수 케이스 핸들러에 의해, 상기 제 2 제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 제 1 타입의 조기 아웃(early out) 조건을 검출하는 단계를 더 포함하는 방법. - 제 8 항에 있어서,
상기 공유 하드웨어 로직 유닛의 상기 제 1 예외 및 특수 케이스 핸들러에 의해, 상기 제 1 제수 소스 입력 및 상기 제 1 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 1 타입의 조기 아웃 조건을 저장하는 단계;
상기 공유 하드웨어 로직 유닛의 상기 제 2 예외 및 특수 케이스 핸들러에 의해, 상기 제 2 제수 소스 입력 및 상기 제 2 피제수 소스 입력 중 적어도 하나에 연관된 상기 제 1 타입의 조기 아웃 조건을 저장하는 단계; 및
상기 제 1 예외 및 특수 케이스 핸들러 및 상기 제 2 예외 및 특수 케이스 핸들러 중 적어도 하나에 의해 검출된 상기 제 1 타입의 조기 아웃 조건에 응답하여, 디폴트 솔루션을 출력하는 단계를 더 포함하는 방법. - 부동 소수점 나눗셈 연산 및 정수 나눗셈 연산을 수행하는 복수의 공유 로직부들;
상기 부동 소수점 나눗셈 연산에 연관된 제 1 제수 소스 입력과 제 1 피제수 소스 입력을 입력 받고, 그리고, 상기 정수 나눗셈 연산에 연관된 제 2 제수 소스 입력과 제 2 피제수 소스 입력을 입력 받는 상기 복수의 공유 로직부들 중에서 첫번째 스테이지 로직부; 및
상기 부동 소수점 나눗셈 연산의 몫 결과 및 상기 정수 나눗셈 연산의 몫 결과를 출력하는 상기 복수의 공유 로직부들 중에서 마지막 스테이지 로직부를 포함하는 공유 하드웨어 로직 유닛.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562191993P | 2015-07-13 | 2015-07-13 | |
US62/191,993 | 2015-07-13 | ||
US14/996,216 US9983850B2 (en) | 2015-07-13 | 2016-01-14 | Shared hardware integer/floating point divider and square root logic unit and associated methods |
US14/996,216 | 2016-01-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170008149A true KR20170008149A (ko) | 2017-01-23 |
KR102581403B1 KR102581403B1 (ko) | 2023-09-21 |
Family
ID=57774994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160068224A KR102581403B1 (ko) | 2015-07-13 | 2016-06-01 | 공유 하드웨어 로직 유닛 및 그것의 다이 면적을 줄이는 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9983850B2 (ko) |
KR (1) | KR102581403B1 (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10209959B2 (en) | 2016-11-03 | 2019-02-19 | Samsung Electronics Co., Ltd. | High radix 16 square root estimate |
CN107193530B (zh) * | 2017-04-28 | 2020-04-24 | 广州酷狗计算机科技有限公司 | 一种生成随机数的方法和装置 |
CN108334305B (zh) * | 2018-01-18 | 2020-06-30 | 上海达梦数据库有限公司 | 一种除法运算方法、装置、设备和存储介质 |
US10985906B2 (en) * | 2018-01-26 | 2021-04-20 | Macau University Of Science And Technology | Method and system for secure encryption |
US11494163B2 (en) * | 2019-09-06 | 2022-11-08 | Intel Corporation | Conversion hardware mechanism |
US11314482B2 (en) | 2019-11-14 | 2022-04-26 | International Business Machines Corporation | Low latency floating-point division operations |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4939686A (en) * | 1987-05-18 | 1990-07-03 | Weitek Corporation | Method and apparatus for shared radix 4 division and radix 4 square root |
US5272660A (en) * | 1992-06-01 | 1993-12-21 | Motorola, Inc. | Method and apparatus for performing integer and floating point division using a single SRT divider in a data processor |
US5309383A (en) * | 1991-03-13 | 1994-05-03 | Fujitsu | Floating-point division circuit |
US20060129625A1 (en) * | 2004-12-15 | 2006-06-15 | Sun Microsystems, Inc. | Low latency integer divider and integration with floating point divider and method |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4878190A (en) * | 1988-01-29 | 1989-10-31 | Texas Instruments Incorporated | Floating point/integer processor with divide and square root functions |
US5128891A (en) | 1990-04-02 | 1992-07-07 | Advanced Micro Devices, Inc. | High speed divider with square root capability |
US6487575B1 (en) | 1998-08-31 | 2002-11-26 | Advanced Micro Devices, Inc. | Early completion of iterative division |
US6847985B1 (en) | 2001-08-10 | 2005-01-25 | Lsi Logic Corporation | Floating point divide and square root processor |
US7016930B2 (en) * | 2002-10-25 | 2006-03-21 | Arm Limited | Apparatus and method for performing operations implemented by iterative execution of a recurrence equation |
US20160313976A1 (en) * | 2015-04-21 | 2016-10-27 | Qualcomm Incorporated | High performance division and root computation unit |
-
2016
- 2016-01-14 US US14/996,216 patent/US9983850B2/en active Active
- 2016-06-01 KR KR1020160068224A patent/KR102581403B1/ko active IP Right Grant
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4939686A (en) * | 1987-05-18 | 1990-07-03 | Weitek Corporation | Method and apparatus for shared radix 4 division and radix 4 square root |
US5309383A (en) * | 1991-03-13 | 1994-05-03 | Fujitsu | Floating-point division circuit |
US5272660A (en) * | 1992-06-01 | 1993-12-21 | Motorola, Inc. | Method and apparatus for performing integer and floating point division using a single SRT divider in a data processor |
US20060129625A1 (en) * | 2004-12-15 | 2006-06-15 | Sun Microsystems, Inc. | Low latency integer divider and integration with floating point divider and method |
Also Published As
Publication number | Publication date |
---|---|
US9983850B2 (en) | 2018-05-29 |
US20170017467A1 (en) | 2017-01-19 |
KR102581403B1 (ko) | 2023-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20170008149A (ko) | 공유 하드웨어 로직 유닛 및 그것의 다이 면적을 줄이는 방법 | |
RU2412462C2 (ru) | Процессор с плавающей запятой с пониженной потребляемой мощностью для выбираемой субточности | |
AU2018388451B2 (en) | System and method of floating point multiply operation processing | |
US20070078923A1 (en) | Floating-point processor with selectable subprecision | |
WO2007012179A2 (en) | Karatsuba based multiplier and method | |
US20160313976A1 (en) | High performance division and root computation unit | |
US9904512B1 (en) | Methods and apparatus for performing floating point operations | |
US7725522B2 (en) | High-speed integer multiplier unit handling signed and unsigned operands and occupying a small area | |
KR102437767B1 (ko) | 높은 기수 16 제곱근 추정 | |
Asadi et al. | CORLD: In-stream correlation manipulation for low-discrepancy stochastic computing | |
Haritha et al. | Design of an enhanced array based approximate arithmetic computing model for multipliers and squarers | |
US10216481B2 (en) | Digit recurrence division with scaling and digit selection using intermediate value | |
Jamadagni et al. | An asynchronous divider implementation | |
JP2006172035A (ja) | 除算・開平演算器 | |
CN113254072B (zh) | 数据处理器、数据处理方法、芯片、计算机设备及介质 | |
Liu | Design and analysis of approximate adders and multipliers | |
Piestrak | Design of multi-residue generators using shared logic | |
CN114201140A (zh) | 指数函数处理单元、方法和神经网络芯片 | |
Jaiswal et al. | High performance reconfigurable architecture for double precision floating point division | |
US8868634B2 (en) | Method and apparatus for performing multiplication in a processor | |
EP1710690A1 (en) | Multiplication circuitry | |
Jeon et al. | New Approximate 4: 2 Compressor for High Accuracy and Small Area Using MUX Logic | |
THUAN | A NOVEL QUOTIENT PREDICTION FOR FLOATING-POINT DIVISION | |
Pal et al. | FPGA implementation of DSP applications using HUB floating point technique | |
Rahman et al. | Design of High Performance Floating Point SRT Divider Using Divisor and Partial Remainders Estimates |
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 |