KR20010067275A - 벡터화 데이터에 대한 연산 동작 방법 및 장치 - Google Patents

벡터화 데이터에 대한 연산 동작 방법 및 장치 Download PDF

Info

Publication number
KR20010067275A
KR20010067275A KR1020000057808A KR20000057808A KR20010067275A KR 20010067275 A KR20010067275 A KR 20010067275A KR 1020000057808 A KR1020000057808 A KR 1020000057808A KR 20000057808 A KR20000057808 A KR 20000057808A KR 20010067275 A KR20010067275 A KR 20010067275A
Authority
KR
South Korea
Prior art keywords
bit
data
output
circuit
multiplication
Prior art date
Application number
KR1020000057808A
Other languages
English (en)
Inventor
쿠이제프리
로사이놀스테판
츄아-이오안류지.
Original Assignee
가나이 쓰토무
가부시키가이샤 히타치세이사쿠쇼
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 가나이 쓰토무, 가부시키가이샤 히타치세이사쿠쇼 filed Critical 가나이 쓰토무
Publication of KR20010067275A publication Critical patent/KR20010067275A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49921Saturation, i.e. clipping the result to a minimum or maximum value

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

32 비트값을 승산하는 방법은 각 피승수를 16 비트 성분으로 분해하는 단계를 포함한다. 이 방식에 의해 승산 장치 내의 많은 논리 회로를 재사용할 수 있는 프로세서 코어의 설계가 가능해진다. 승산 장치는 여러 가지 크기의 데이터 포맷을 동일한 승산기 회로에 공급할 수 있는 선택기를 포함한다. 다중 데이터 변환 경로가 구비되며 이들은 단일 압축 회로와 단일 구성 가능 전 가산기 회로에 공급된다.

Description

벡터화 데이터에 대한 연산 동작 방법 및 장치{METHOD AND APPARATUS FOR ARITHMETIC OPERATIONS ON VECTORED DATA}
본 출원은 발명의 명칭이 "정수 명령어 세트 구조 및 구현(AN INTEGER INSTRUCTION SET ARCHITECTURE AND IMPLEMENTATION)"(Attorney Docket No. 16869A-003700US)인 출원 계속중인 미국 출원 제--/---,---호(1999년 10월 1일 출원)와 발명의 명칭이 "벡터화 데이터에 대한 연산 동작을 위한 명령어(INSTRUCTIONS FOR ARITHMETIC OPERATIONS ON VECTORED DATA)"(Attorney Docket No. 16869A-005000US)인 출원 계속중인 미국 출원 제--/---,---호(1999년 10월 1일 출원)에 관련된 것으로, 이들 출원들은 모두 본 출원의 양수인 소유이며, 여기에 참조로서 포함된다.
본 발명은 마이크로프로세서에 관한 것으로, 특히 벡터화 데이터(vectored data)를 조작하기 위한 기술에 관한 것이다.
현대의 디지털 서비스를 위해서는 더 증가된 컴퓨터 처리 능력이 요구된다. 예컨대, 인터넷은 영상을 표시하고 비디오 및 오디오 콘텐트를 플레이시키기 위해 과다한 멀티미디어 애플리케이션을 만들어 왔다. 이들 애플리케이션은 정지(still) 그래픽 영상과 풀 모션(full motion) 비디오 형태의 복잡한 데이터의 조작을 수반한다. 디지털 영상은 엄청난 양의 저장 공간을 소비한다는 것은 주지의 사실이다. 예컨대 480 × 640 화소와 화소당 24 비트(화소당 3개의 8-비트 바이트)의 풀 컬러 해상도를 갖는 하나의 비교적 간소한 크기의 영상은 거의 메가바이트 데이터를 차지한다. 1024 × 768 화소의 해상도에서 24-비트 컬러 영상을 표시하기 위해서는 2.3 MB의 메모리가 필요하다. 인치당 300도트에서 8.5 인치 × 11 인치 페이지의 24-비트 컬러 영상은 2 MB 정도의 저장 공간을 필요로 한다. 비디오 영상은, 고품질 고객 애플리케이션을 위해서 초당 적어도 30 프레임의 속도로 영상이 발생되어야 하는 것으로 주지되어 있기 때문에 데이터량이 훨씬 더 많다. 고품위 텔레비젼(HDTV)에 대한 현재의 제안들은 초당 약 15억 비트의 데이터 전송율로 변환되는 프레임당 1920 × 1035 또는 그 이상의 화소를 요구한다. 원격 화상 회의나 홈 엔터테인먼트 시스템과 같은 디지털 영상 및 멀티미디어 애플리케이션에서의 다른 진보는 훨씬 더 높은 대역폭과 그에 따른 훨씬 큰 처리 능력에 대한 요구를 더욱 커지게 하고 있다.
디지털 영상과 비디오 정보를 무손실 압축하기 위한 종래의 기술로는 허프만 인코딩(Huffman encoding), 런 렝스 인코딩(run lenth encoding), 및 렘펠-지브-웰치 알고리즘(Lempel-Ziv-Welch algorithm)과 같은 방법들이 있다. 이들 방법들은화질을 보존하는데는 좋지만 고속처리 시스템의 요구를 충족시키는데는 미흡하다. 이 때문에 통상적으로 약간의 정보 손실을 수반하는 압축 기술들이 고안되었다. 이 기술들로는 이산 코사인 변환(DCT) 기술, 적응성 DCT(ADCT) 기술, 및 웨이브렛(wavelet) 변환 기술 등이 있다.
조인트 포토그래픽 전문가 그룹(Joint Photographic Experts Group; JPEG)은 JPEG 표준이라고 알려져 있는 정지 영상 압축 표준을 만들어 내었다. 이 표준은 이산 코사인 변환(DCT)에 기초하여 알고리즘을 정의한다. JPEG 알고리즘을 이용한 인코더는 영상을 선형 변환, 양자화, 런 렝스 인코딩, 및 허프만 인코딩의 4단계로 처리한다. 디코더는 이 단계들을 반대로 행하여 영상을 재구성한다. 선형 변환 단계에 있어서는 영상은 8 × 8 화소의 블럭들로 분할되고 각 블럭에 대해 공간 치수 모두에서 DCT 동작이 가해진다. 영상을 블럭들로 분할하는 목적은 DCT가 고도로 비국지성(non-local)이라는 DCT 알고리즘의 결점을 극복하는 것이다, 영상을 소영역으로 한정하고 각 블럭에 대해 각자의 변환을 행함으로써 이 비국지성을 극복하기 위하여 영상은 블럭들로 분할된다. 그러나, 이러한 타협은 영상의 농담(blockiness)이 고르지 않은 타일형 모양을 나타내게 된다는 단점이 있다.
양자화 단계는 비록 영상 정보의 손실이 있기는 하지만 정보의 전송량을 줄이는데 필수적이다. 각 변환 성분은 각 8 × 8 블럭 내의 그 위치로부터 선택된 임의의 값을 이용하여 양자화된다. 이 단계는 많은 작은 값들을 제로 또는 다른 작은 수로 줄이기 때문에 지정해야 할 정보수를 훨씬 줄일 수 있는 효과가 있다.
런 렝스 인코딩 단계는 제로와 같은 동일값의 실행(run)을 코딩하여 어떤 값을 반복하는 회수와 반복하는 그 값을 식별하는 코드를 생성한다. 예컨대 "8 제로"와 같은 단일 코드는 8개의 제로열보다 표현 공간을 덜 필요로 한다. 이 단계는 통상적으로 양자화 단계로부터 도출되는 많은 제로에 의해 정당화된다.
허프만 코딩(엔트로피 코딩의 널리 보급된 형태)은 런 렝스 인코딩 단계로부터의 각 심볼을 그 심볼의 발생 빈도수에 따라 선택되는 가변 길이 비트열로 변환한다. 즉, 발생 빈도수가 많은 심볼은 발생 빈도수가 적은 심볼보다 더 짧은 코드로 코딩된다. 코딩은 미리 설정된 테이블로부터 또는 필요한 비트 총수를 최소화하기 위해 영상에 대해 특히 구성된 것으로부터 행해질 수 있다.
JPEG와 마찬가지로 동영상 전문가 그룹(MPEG)도 영상 계열 코딩을 위한 두가지 표준을 공표하였다. 이 표준은 MPEGⅠ과 MPEGⅡ로 알려져 있다. MPEG 알고리즘은 프레임간 비교적 작은 변화의 공통 발생을 이용한다. MPEG 표준에서는 전(full) 영상이 압축되어 12 프레임마다 한번씩만 전송된다. 이들 기준 프레임(소위 인트라 프레임에 대한 "I-프레임")은 통상적으로 JPEG 압축을 이용하여 압축된다. 중간 프레임에 대해서는 예측 프레임(P-프레임)이 계산되고, 실제 프레임과 각 예측 프레임 간의 차이만 압축되어 전송된다.
예측 프레임을 계산하는데는 몇가지 알고리즘이 이용될 수 있다. 특정 블럭에 대해 어느 예측기 알고리즘이 가장 잘 작동하는가에 따라서 블럭 바이 블럭 방식(block-by-block basis)으로 알고리즘이 선택된다. 일시적 리던던시를 감소시키는데는 "동작 추정"이라 불리는 기술이 이용된다. 일시적 리던던시는 프레임 간에 영상의 큰 부분이 변하지 않고 그대로 남아 있는 영화에서 관측된다. 카메라 팬과같은 많은 상황에서 영상 내의 모든 화소는 프레임마다 변할 것이나, 이전 영상에서 거의 모든 화소가 찾아질 수 있다. 이전(및 장래) 프레임에서 화소의 카피를 "찾는" 프로세스는 동작 추정이라 불린다. H.261 및 MPEG 1 & 2와 같은 비디오 압축 표준에 따라서 영상 인코더(영상 압축 엔진)는 영상 내의 16 × 16 화소 블럭의 동작을 규정함으로써 리던던시를 제거할 수 있다. 압축되는 영상은 16 × 16 화소의 블럭으로 분할된다. 영상 내의 각 블럭에 대해서 압축된 계열에 있는 다른 영상에서 정합(matching) 블럭을 찾는 검색이 실행된다. 정합을 판단하는데는 2가지 방식이 통상적으로 이용된다. 한 가지는 수학적으로로 표시되는 절대차의 합(SAD)이고, 다른 하나는 수학적으로로 표시되는 차제곱의 합(SDS)이다. SAD 방식은 하드웨어로 구현하기가 쉽다. 그러나, SDS 동작은 발생시키기에 더 큰 정밀도를 요구하지만 그 결과는 더 우수하다.
실시간 고품질 비디오 영상 복원 을 위해서는 복원 알고리즘은 초당 복원 영상의 30 프레임을 생성할 수 있을 정도로 간단해야 한다. 많은 경우에 영상은 오프라인 압축되기 때문에 종종 압축에 대한 속도 요구는 복원의 경우만큼 엄격하지는 않다. 그러나, 압축 시간은 상업적으로 경쟁력이 있을 정도는 되어야 한다. 게다가 많은 응용 분야에서는 예컨대 원격 화상 회의와 같은, 복원은 물론 실시간 압축을 필요로 한다.
디지털 신호 처리기(DSP)는 이런 종류의 작업을 수행하는데 일반적으로 사용된 전통적인 장치이다. 넘버 크런칭(number crunching)에 최적화된 DSP는 종종 사운드 카드, 음성 인식 카드, 비디오 캡처 카드 등과 같은 멀티미디어 장치에 내포된다. DSP는 통상적으로 보조 처리기(coprocessor)로서 기능하여 데이터 압축 알고리즘에 의해 요구되는 복잡하고 반복적인 수학적 계산을 수행하며 범용 마이크로프로세서보다 훨씬 효율적으로 특정의 멀티미디어형 알고리즘을 수행한다.
그러나, 퍼스널 컴퓨터 시스템의 가격/성능비를 향상시키고자 하는 끝없는 요구는 전통적으로 DSP에 의해 제공되는 처리 능력의 많은 부분을 효과적으로 복제하는 범용 마이크로프로세서를 출현시켰다. 개발의 한가지 방향은 축소 명령 집합 컴퓨터(RISC)이다. RISC 프로세서의 특징은 디코딩하기에 간단한 명령어수가 적다는 것과 모든 연산/논리 동작은 레지스터-레지스터 방식으로 수행되어야 한다는 것이다. 다른 특징은 복잡한 메모리 억세스 동작이 없다는 것이다. 모든 메모리 억세스는 레지스터 로드/저장 동작이고, 어드레싱 모드가 더욱 간단하면서도 그 수가 더욱 적다. 즉 오퍼랜드 어드레스를 규정하는 방식의 수가 극히 적다. 명령어들은 1 렝스만으로 되어있으며, 메모리 억세스는 표준 데이터 폭으로 되어 있다. 명령어 실행은 마이크로코딩과 비교해서 직접 하드웨어형이다. 고정 명령 사이클 타임이 있으며, 명령들은 모두 하나 또는 몇 개의 사이클에서 실행되도록 비교적 간단하게 되도록 정의된다. 통상적으로 복수의 명령들은 병렬 처리의 결과로서 동시에 여러 가지 실행 상태에 있다.
MPEG, JPEG, H.320, 등을 데이터 압축 표준으로서 더욱 실용적으로 되게 만들기 위해서, 기존의 RISC 구조 프로세서와 기존의 명령 집합에 대한 향상이 이루어졌다. 종래에 DSP 방식을 이용하여 구현된 광대역 네트워크, 셋톱 박스 CPU, 케이블 시스템, 보이스 오버(voice-over) IP 장비, 및 무선 제품과 같은 다른 현대적 디지털 서비스들도 단일 범용 프로세서의 처리 능력 증가에 의해 수혜를 입을 것이다. 더 일반적으로는, 종래에 DSP 방식에 의해 구현된 디지털 필터 응용은 DSP 능력을 갖는 범용 프로세서에 의해 제공되는 추가적인 처리 능력으로부터 수혜를 입을 것이다.
많은 RISC 프로세서의 명령 집합 구조(ISA)는 단일 명령 다중 데이터(SIMD) 명령을 포함한다. 이들 명령에 의해서 다른 벡터의 대응 요소를 갖는 데이터의 벡터의 복수 요소에 대해 병렬 동작이 수행될 수 있다. 이런 형태의 벡터 동작은 영상 처리와 같은 많은 디지털 응용에 공통적이다. 다른 중요한 영역은 데이터 암호 및 해독 시스템 분야이다. 정보의 코딩은 인터넷을 통한 거래의 보안과 무선 통신 시스템에 중요하다.
그러므로, RISC 구조의 성능을 더 향상시킬 필요가 있다. 향상된 멀티미디어 응용을 제공하고 일반적으로 차세대 고객 제품이 요구하는 컴퓨팅 파워를 충족시키기 위하여 RISC 프로세서 코어의 성능을 향상시킬 필요가 있다. 필요한 것은 벡터화 처리 명려에 대한 ISA의 향상이다. 또한 벡터화 데이터 처리 분야에서 RISC 방식 프로세서에 대한 개량된 마이크로구조를 제공할 필요가 있다.
32비트 값을 곱하는 방법은 각 피승수를 두 개의 16 비트 값으로 분할하는 것을 포함한다. 각 피승수에 대해서 두 개의 16 비트 값은 합산되어 원래의 32 비트 데이터를 생성할 수 있다. 따라서, 각 32 비트 값은 (an+ bn)의 형태를 갖는다. 곱은 (a1a2+ a1b2+ a2b1+ b1b2)이다. 이런 방식으로 두 개의 피승수를 곱하는 것은 단지 16 비트 승수만을 요구한다. 중간 항들은 올바른 결과를 얻기 위해서는 합산하기 전에 2의 급수로 곱해질 필요가 있다.
본 발명에 따라서 처리 코어는 범용 레지스터 파일로부터 데이터를 수신하기 위한 제1, 제2, 및 제3 입력을 포함하는 승산 장치를 포함한다. 승산 장치는 상기 입력들을 수신하도록 결합된 제1 선택기, 상기 제1 선택기의 출력을 수신하도록 결합된 승산 회로 세트, 제1, 제2, 및 제3 변환 경로, 상기 변환 경로를 수신하도록 결합된 제2 선택기, 상기 제2 선택기의 출력과 상기 제3 입력을 수신하도록 결합된 압축 회로, 및 상기 제2 선택기의 출력을 수신하도록 결합된 가산기 회로를 더 포함한다.
제1 선택기는 그 입력들의 서브세트를 선택하여, 디코딩된 명령에 따라서 그들을 여러 가지 계열로 발생시켜 승산 회로로 보낸다. 각 변환 경로는 승산 회로의 출력들에서 상이한 데이터 변환을 발생시킨다. 제2 선택기는 역시 디코딩된 명령에 기초하여 3개의 변환 경로 중에서 선택하여 선택된 경로를 압축 회로에 공급한다. 가산기 회로는 역시 디코딩된 명령에 따라서 넷, 둘, 또는 하나의 전(full) 가산기를 제공하기 위하여 선택적으로 구성된다.
승산 회로는 오버플로우 검출 논리를 포함한다. 마찬가지로 가산기 회로도 오버플로우 검출 논리를 포함한다. 승산 회로와 가산기 회로에는 오버플로우 검출시 포화를 제공하기 위하여 포화값 발생기가 구비된다.
제1 선택기의 입력들을 여러 가지 계열로 만들어 승산 회로로 보낼 수 있는 구성에 의해서 여러 가지 명령을 수용하는 유연한 회로를 만들 수 있다. 특히, 각 포맷에 대해 주문 제작된 회로를 제공할 필요없이 다양한 크기의 데이터 포맷에 대해서 동일한 명령이 구현될 수 있다. 이중 오버플로우 검출 논리도 다중 데이터 포맷을 지원한다. 게다가, 오버플로우 검출은 중간 결과로서 발생되기 때문에 오버플로우 상황은 더욱 정확히 조절될 수 있다.
본 발명의 이들 및 다른 이점들은 첨부 도면을 참조한 이하의 각종 바람직한 실시예들에 대한 설명으로부터 더욱 완전히 이해될 것이다.
도 1은 본 발명의 특정 멀티미디어 명령에 관련된 벡터화 승산 장치를 도시한 도면.
도 2는 도 1에 도시된 오버플로우 검출 논리의 상세도.
도 3은 도 1의 승산 장치에 도시된 승산 회로의 상세도.
도 4는 도 1에 도시된 가산기 회로의 계통도.
도 5는 본 발명의 특정 멀티미디어 명령에 관련된 도 1의 승산 장치에 도시된 승산 회로의 다른 실시예를 도시한 도면.
도 6은 본 발명의 특정 멀티미디어 명령에 관련된 도 1의 승산 장치에 대한 추가적 논리를 도시한 도면.
도 7은 본 발명의 특정 멀티미디어 명령에 관련된 벡터 교차 장치를 도시한 도면.
도 8은 본 발명의 특정 멀티미디어 명령에 관련된 비트 조작 회로도.
도 9 및 도 10은 본 발명의 특정 멀티미디어 명령의 실행 중에 도 8에 관한 조작을 설명하기 위한 도면.
도 11은 본 발명의 특정 멀티미디어 명령에 관련된 도 8에 도시된 매트릭스에서 사용된 논리를 도시한 도면.
<도면의 주요 부분에 대한 부호의 설명>
100 : 승산 장치
110, 112, 114, 116, 118 : 선택기 회로
120-126 : 승산기 회로
130-136 : 오버플로우 검출 논리 회로
152, 154, 156 : 교차 회로
RISC 구조의 특징은 그 동작이 레지스터-레지스터이라는 것이다. 데이터 소오스는 레지스터이며 데이터 목적도 레지스터이다. 그 결과, 레지스터 파일은 중앙 처리 장치에 의해 통상적으로 수행되는 여러 가지 정수 동작을 위한 범용 레지스터의 저장소(fool)로서 제공된다. 본 발명에 따라서, 레지스터 파일을 포함하는 범용 레지스터는 이하에서 개시되고 설명되는 각종 벡터화 동작을 위한 데이터 소오스 및 데이터 목적이다. 이 사실을 강조하기 위하여, 도 1은 N개의 범용 레지스터(R0- Rn-1)의 레지스터 파일(102)을 함축적으로 보여준다.
본 발명의 일 양상은 벡터화 데이터의 승산 동작에 관련된 영역에서의 개선을 포함한다. 도 1은 본 발명에 따른 승산 장치(100)의 단순화된 계통을 보여준다. 이와 같은 단순화를 위해서 승산 장치의 주요 기능 블록만이 강조된다. 본 기술 분야의 통상의 전문가라면 본 발명의 설명에 밀접한 관계는 없지만 각종 제어 신호와 기타 다른 지원 논리도 포함됨을 이해할 것이다.
승산 장치(100)는 3단 파이프라인형 처리 장치이다. 각 단은 파이프라인 래치(P1, P2, P3)에 의해 서로 분리된다. 통상적으로 파이프라인 래치는 플립 플롭 뱅크를 포함한다. 파이프라인 래치는 클럭 사이클 사이에 이전 단으로부터의 데이터를 일시적으로 보유한다. 이것은 한 단으로부터 다음 단으로의 데이터 흐름을 동기화시키는 작용을 한다. 파이프라인 래치는 또한 단들 간에 데이터를 격리시키는 작용을 한다. 이것은 파이프라인 처리의 이점이 여러 가지 다른 명령들이 파이프라인 단 각각에서 실행될 수 있다는 것이기 때문에 중요하다.
승산 장치(100)는 오퍼랜드(A, B, C)를 통해 그 입력 및 출력 데이터를 제공한다. 각 오퍼랜드는 64 비트 버스이다. 각 64 비트 버스는 논리 회로(미도시)를 통해 레지스터 파일(102)로부터 범용 레지스터들 중 어느 하나에 결합된다. 이에 따라 승산 장치와 레지스터 파일 간에 데이터 통신이 설정된다. 통상적으로 이것은 프로세서 동작의 명령 디코딩 단계 중에 일어난다.
도 1에서 알 수 있는 바와 같이, 오퍼랜드(A, B, C)의 64 비트 버스는 파이프라인 래치(P1)을 통해 단 1로 공급된다. 클럭킹 신호를 수신하면, A, B, 및 C는 클록 인되어(clocked in) 소오스 라인(src1, src2, src3)이 된다. 각 소오스 '라인'은 64 비트라인을 포함한다. 소오스 라인(src1, src2)은 통상적으로 멀티플렉서 회로인 선택기 회로(110)에 공급된다. 소오스 라인(src3)은 단 1을 통과하고파이프라인 래치(P2)를 거쳐 제2 단에 공급된다. 선택기 회로(110)는 각 소오스 라인(src1, src2)을 4그룹의 워드라인으로 그룹짓는다. 따라서, 소오스 라인(src1)의 64 비트라인은 종래대로 src1[63:0], 비트 위치 63-0으로 나타낼 수 있다. 선택기 회로(110)는 src1을 다음과 같이 그룹짓는다.
src1[63:48], src1[47:32], src1[31:16], 및 src1[15:0]
마찬가지로, src2의 64 비트라인은 다음과 같이 그룹지어진다.
src2[63:48], src2[47:32], src2[31:16], 및 src2[15:0]
이 적용을 위해, "리틀 인디언(little endian)" 비트, 바이트(8비트), 및 워드(16비트) 오더링(ordering)이 이용된다. 이 관례에서 고차(higher order) 요소는 고순번(higher numbered) 비트 위치에 저장된다. 다른 관례는 "빅 인디언"인데, 여기서는 고차 요소는 저순번 비트 위치에 저장된다.
도 1을 가지고 계속 설명하면, 선택기 회로(110)는 네쌍의 출력 라인(x3/y3, x2/y2, x1/y1, x0/y0)를 제공한다. 각 출력 라인은 16 비트라인을 포함한다. 선택기 회로(110)는 src1 및 src2로부터의 8개의 16 비트 그룹을 8개의 워드라인(xn, yn)으로 맵핑하도록 설계된다. 선택기 회로(110)는 다음 계열, 즉 16 비트 승산을 위해 한 계열과 32 비트 승산을 위해 다른 한 계열을 제공한다. 이들 계열의 중요성은 명령들의 설명에서 명백하게 될 것이다.
16 비트 계열 32 비트 계열 32 비트 계열
src1[63:48] ⇒x3src1[31:16] ⇒x3src1[63:48] ⇒x3
src1[47:32] ⇒x2src1[31:16] ⇒x2src1[63:48] ⇒x2
src1[31:16] ⇒x1src1[15:0] ⇒x1src1[47:32] ⇒x1
src1[15:0] ⇒x0src1[15:0] ⇒x0src1[47:32] ⇒x0
src2[63:48] ⇒y3src2[31:16] ⇒y3src2[63:48] ⇒y3
src2[47:32] ⇒y2src2[15:0] ⇒y2src2[47:32] ⇒y2
src2[31:16] ⇒y1src2[31:16] ⇒y1src2[63:48] ⇒y1
src2[15:0] ⇒y0src2[15:0] ⇒y0src2[47:32] ⇒y0
8개의 워드라인(xn, yn)은 4개의 16 × 16 승산기 회로(120-126)에 공급된다. 워드라인(x0/y0)은 회로(120)에 공급되고, 워드라인(x1/y1)은 회로(122)에 공급되는 식으로 공급된다. 각 승산기 회로(120-126)는 각자 오버플로우 검출 논리(130-136)를 포함한다. 승산기 회로는 4개의 33 비트 합 라인(s3-s0)과 4개의 대응 33 비트 캐리(carry) 라인(c3-c0)을 생성한다. 합 및 캐리 라인 상의 잉여 비트는 승산기 회로(102-126)에서 생성된 부호 비트이다. 합 및 캐리 라인은 파이프라인 래치(P2)로 공급되어 승산 장치(100)의 단 1을 다음 단인 단 2로부터 분리시킨다.
단 2에서, 4쌍의 합/캐리 라인(s3/c3, s2/c2, s1/c1, s0/c0) 각각은 16 비트 교차(transposing) 회로(152), 32 비트 교차 회로(154), 및 64 비트 교차 회로(156)에 결합된다. 교차 회로들 각각은 입력되는 33 비트 합/캐리 쌍을 재정렬하여 이들을 64 비트 합/캐리 출력쌍으로 묶는다. 교차 회로에 따라서 추가적인 처리가 수행된다. 교차의 중요성은 명령 집합의 설명에서 명백하게 될 것이다.
교차 회로(152)는 16 비트 정수 및 고정점 승산 동작에 사용된다. 그 출력(153)은 64 비트 합 라인과 대응 64 비트 캐리 라인을 포함한다. 회로(152)는 33 비트 합/캐리 입력을 교차시켜 64 비트 합/캐리 출력쌍(153)으로 만드는데 2가지 교차 방식을 제공한다. 정수 승산을 위해서는 4개의 입력 33 비트 합/캐리쌍 중에 최하위의 16 비트만이 64 비트 합/캐리 출력쌍(153), 즉 비트(0 -15)으로 묶여진다. 고정점의 경우에 있어서는 4개의 33 비트 합/캐리쌍 중에 상위 부분만이 출력(153)으로 묶여진다. 특히, 비트 위치(15-30)는 전송된다.
정수 교차-
s3[15:0] ⇒ 합 출력의 비트 위치[63:48]
c3[15:0] ⇒ 캐리 출력의 비트 위치[63:48]
s2[15:0] ⇒ 합 출력의 비트 위치[47:32]
c2[15:0] ⇒ 캐리 출력의 비트 위치[47:32]
s1[15:0] ⇒ 합 출력의 비트 위치[31:16]
c1[15:0] ⇒ 캐리 출력의 비트 위치[31:16]
s0[15:0] ⇒ 합 출력의 비트 위치[15:0]
c0[15:0] ⇒ 캐리 출력의 비트 위치[15:0]
고정점 교차-
s3[30:15] ⇒ 합 출력의 비트 위치[63:48]
c3[30:15] ⇒ 캐리 출력의 비트 위치[63:48]
s2[30:15] ⇒ 합 출력의 비트 위치[47:32]
c2[30:15] ⇒ 캐리 출력의 비트 위치[47:32]
s1[30:15] ⇒ 합 출력의 비트 위치[31:16]
c1[30:15] ⇒ 캐리 출력의 비트 위치[31:16]
s0[30:15] ⇒ 합 출력의 비트 위치[15:0]
c0[30:15] ⇒ 캐리 출력의 비트 위치[15:0]
바람직하게는 교차 회로(152)는 비트 레벨 먹스(mux) 집합을 포함한다. 그러나 다른 구현도 가능하다.
교차 회로(154)는 전 폭(full-width) 16 비트 승산 동작에 이용된다. 그 출력(155)은 64 비트 합 라인과 64 비트 캐리 라인을 포함한다. 회로(154)는 하위의 2쌍의 입력 33 비트 합/캐리 입력이나 상위의 2쌍의 입력 33 비트 합/캐리 입력을 교차시켜 64 비트 합/캐리 출력쌍을 만든다. 따라서,
s3[31:0] ⇒ 합 출력의 비트 위치[63:32]
c3[31:0] ⇒ 캐리 출력의 비트 위치[63:32]
s2[31:0] ⇒ 합 출력의 비트 위치[31:0]
c2[31:0] ⇒ 캐리 출력의 비트 위치[31:0]
또는,
s1[31:0] ⇒ 합 출력의 비트 위치[63:32]
c1[31:0] ⇒ 캐리 출력의 비트 위치[63:32]
s0[31:0] ⇒ 합 출력의 비트 위치[31:0]
c0[31:0] ⇒ 캐리 출력의 비트 위치[31:0]
바람직하게는 교차 회로(154)는 상위 또는 하위의 입력 합/캐리 라인쌍을 선택하여 이들을 조합하여 64 비트 출력(155)을 만드는 멀티플렉서 집합을 포함한다. 이 회로의 이용은 명령 집합에 관한 논의에서 명백해질 것이다. 입력 합 및 캐리 라인들은 각각 33 비트임이 관측된다. 단 2에서 여분의 부호 비트인 최상위 비트(비트 위치 32)는 교차 동작 중에 제거된다. MACFX.WL 및 MACNFX.WL 명령에 있어서는 s0/c0 및 s1/c1의 비트 [30:0]은 전송되고, '0'은 합 및 캐리 출력의 비트 [0]에 로드된다.
교차 회로(156)는 전 폭 32 비트 승산 동작에 사용된다. 그 출력은 4쌍의 합 및 캐리 라인(sx3/cx3, sx2/cx2, sx1/cx1, sx0/cx0)을 포함한다. 각 라인은 64 비트라인 폭이다. 회로(156)는 입력 합/캐리쌍(s3/c3, s2/c2, s1/c1, s0/c0)을 각자의 출력 64 비트 합/캐리쌍(sx3/cx3, sx2/cx2, sx1/cx1, sx0/cx0)로 맵핑한다. 그러나, 입력 합/캐리쌍은 출력 합/캐리쌍에서 다른 비트 위치를 점유한다. 이 맵핑은 다음과 같은 방식으로 일어난다. 이 맵핑의 중요성은 명령 집합의 논의에서 명백해 질 것이다.
s3[31:0], c3[31:0] ⇒ sx3[63:48],cx3[63:48] s1[31:0], c1[31:0] ⇒ sx1[47:16],cx1[47:16]
s2[31:0], c2[31:0] ⇒ sx2[47:16],cx2[47:16] s0[31:0], c0[31:0] ⇒ sx0[31:0],cx0[31:0]
바람직하게는 회로(156)는 단순히 입력 합/캐리 라인을 출력 라인의 적당한 비트 위치로 경로 지정하는 와이어 집합을 포함한다. 상기 회로(154)의 경우 처럼 입력 라인들 각각의 최상위 부호 비트는 승산 장치(100)의 단 2와 3에서 여분의 비트이므로 무시된다.
단 2는 선택기 회로(114)를 포함한다. 회로(154)의 출력(153)은 선택기 회로(114)의 'a' 입력에 공급된다. 마찬가지로 회로(154)의 출력(155)은 선택기 회로(114)의 'b' 입력에 공급된다. 선택기 회로는 'a' 입력 또는 'b' 입력을 그 출력 라인(115)으로 출력한다. 출력(115)은 다른 선택기 회로(116)의 'a' 입력에 공급된다.
회로(156)의 8개 출력(sxn/cxn)은 8:2 압축 회로(140)에 공급된다. 이 압축 회로는 한쌍의 64 비트 합/캐리 출력(141)을 생성한다. 이들 출력은 선택기 회로(116)의 'b' 입력에 공급된다. 이 선택기 회로는 그 'a' 또는 'b' 입력 라인을 선택하여 그 선택된 라인을 3:2 압축 회로(160)의 입력에 공급한다.
대안으로서, 출력들(153, 155)은 선택기 회로(116) 내로 직접 묶여질 수 있음을 알 수 있다. 그러나 선택기(114)의 존재는 데이터 흐름의 타이밍을 압축기(140)를 통한 데이터 흐름과 동기화시키기 때문에 도 1에 도시된 구성이 바람직하다. 효과적으로, 선택기(114, 116)는 공동 작업하여 3개의 데이터 변환 경로 중 어느 하나로부터 데이터를 선택하는 단일의 3:1 선택기로서 작용한다.
또 다른 선택기(112)는 그 'a' 입력에서 입력 라인(src3)을 수신한다. 그 'b' 입력에는 상수값 "0.5"이 공급된다 그 'c' 입력에는 상수값 "0"이 공급된다. 선택기(112)의 선택된 입력은 압축 회로(160)의 제3 입력에 공급된다. 압축 회로(160)는 그 3개의 입력을 조합하여 2개의 64 비트 출력(161)을 생성한다. 이들 출력은 파이프라인 래치(P3)에 공급되어 단 2를 단 3으로부터 분리시킨다.
단 3에서, 파이프라인(P3)의 출력(163)은 단 2로부터의 합 및 캐리 라인으로 구성된다. 합 및 캐리 라인은 캐리 전파 가산기 회로(170)에 공급된다. 가산기 회로(170)의 출력은 64 비트이다. 상부 절반인 비트[63:32]는 선택기 회로(118)의 'a' 입력에 공급된다. 하부 절반인 비트[31:0]은 선택기 회로(119)의 'b' 입력에 공급된다. 포화값 발생기(182)는 선택기 회로(118, 119)의 'a' 입력에 공급된다.
파이프라인 래치(P3)의 출력(163)도 오버플로우 검출 논리 회로(180, 186)에 공급된다. 출력(163)의 하위 비트[31:0]는 검출 논리 회로(180)에 공급된다. 상위 비트[63:32]는 검출 논리 회로(186)에 공급된다. 각 회로(180, 186)의 출력은 각 선택기 회로(118, 119)의 입력에 공급된다.
검출 논리 회로(180, 186)는 그 입력에 기초하여 가산기 회로(170)에서 일어나는 가산 동작 중에 오버플로우가 생길 것인지 여부를 예측한다. 도 2는 회로(180)의 상세도이다. 합 및 캐리 입력(181)들 각각의 하위 비트, 즉 비트[31:0]는 캐리 발생 회로(202)에 공급된다. 이 회로는 단순히 가산기 회로의 캐리 발생 논리 회로이다. 회로(202)의 출력은 32 비트 캐리이다. 상위 2비트 c[31] 및 c[30]는 XOR 게이트(206)에 의해 XOR 연산된다. 게이트(206)의 출력은 제어 신호(MAC)에 따라 AND 연산된다. MAC 제어 신호는 MMACFX.WL 또는 MACNFX.WL 명령이 실행을 위해 디코딩될 때에 발생된다. 그러지 않으면 MAC 제어 신호는 발생되지 않는다. 회로(180)는 오버플로우가 일어날 것으로 예측될 때에 출력(183)을 발생시킨다. 검출 논리 회로(186)도 마찬가지로 구성되어 동일한 방식으로 동작한다. 출력(187)은 합 및 캐리 라인(163)의 상위 32 비트에 따라서 오버플로우가 일어날려고 할 때에 발생될 것이다.
도 1로 되돌아가서 설명하면, 만일 논리 회로(180)에 의해 오버플로우 상태가 예측된다면, 선택기 회로(118)는 그 출력(188)에서 'a' 입력을 생성할 것이다. 그러지 않으면, 선택기 회로(118)는 그 출력(188)에서 'b' 입력을 생성할 것이다. 보는 바와 같이, 출력(188)은 승산 장치(100)의 출력을 포함하는 출력(190)의 상위 32 비트를 포함한다. 마찬가지로 만일 논리 회로(186)에 의해 오버플로우 상태가 예측된다면, 선택기 회로(119)는 그 출력(189)에서 'a' 입력을 생성할 것이다. 그러지 않으면, 선택기 회로(119)는 그 출력(189)에서 'b' 입력을 생성할 것이다. 출력(189)는 출력(190)의 하위 32 비트를 포함한다.
이제 도 3을 참조로 설명하면, 승산기 회로(120-126)의 상세한 것이 승산기(120)을 예시적으로 하여 도시되어 있다. 회로(122-126)도 마찬가지로 구성됨은 물론이다. 회로(120)는 16 × 16 비트 승산을 제공하는 왈라스 가산기 트리(Wallace adder tree)(310)를 포함한다. 선택기 회로(110)로부터의 16 비트 입력 라인(x0, y0)는 왈라스 가산기 트리에 의해 조합된다. 출력은 33 비트 캐리 라인(304) 및 33 비트 합 라인(302)이다. 합 및 캐리 라인 각각에서의 33번째 비트는 부호 비트이다. 합 및 캐리 라인은 선택기 회로(330)의 'b' 입력에 공급된다. 통상적으로는 선택기 회로(330)는 승산기 회로(120)의 c0및 s0출력으로서 'b' 입력을 선택할 것이다.
본 발명에 따라서, 각 승산기 회로(120-126)는 오버플로우 검출 논리 회로(130)를 포함한다. 왈라스 트리(310)에 공급된 16 비트 입력 라인(x0, y0)은 또한 검출 논리 회로(130)에 공급된다. 검출 논리 회로는 선택기 회로(330)의 'a' 입력에 공급되는 출력을 갖고 있다. 포화값 발생기(300)는 선택기 회로(330)의 'a' 입력에도 결합된 출력을 갖고 있다. 검출 논리 회로는 x0및 y0에 기초하여 16 비트 고정점 승산에 있어서 오버플로우가 일어날 것인지 여부를 예측한다. 만일 오버플로우 상태가 예측된다면, 선택기 회로(330)는 'a' 입력을 승산기 회로(120)의 c0및 s0출력으로서 선택할 것이다. 본 발명에 따라서, 단 1에서의 검출 논리 회로는 x0및 y0모두가 -1인가를 검출한다. 이것은 고정점 표시를 이용한 최대 양수값이 16 비트 데이터에 대해서는 1-2-15이고 32 비트에 대해서는 1-2-32이기 때문에 고정점 승산에 대한 오버플로우 상태이다.
도 4를 참조로 설명하면, 단 3의 가산기 회로(170)는 4개의 가산기 단을 포함한다. 입력 64 비트 합 및 캐리 라인(163)은 4개 세트의 16 비트 라인으로 그룹지어진다. 각 가산기 단은 전(full) 가산기 단(400-403)을 포함한다. 하위 16 비트 합/캐리 라인 그룹인 s[15:0]와 c[15:0]은 전 가산기(400)의 입력에 공급되고, 다음의 16 비트 합/캐리 라인 그룹인 s[31:16]와 c[31:16]은 전 가산기(401)의 입력에 공급되고, 합/캐리 라인 그룹 s[47:32]와 c[47:32]은 전 가산기(402)의 입력에 공급되고, 고위 16 비트 합/캐리 라인 그룹은 전 가산기(403)에 공급된다.
전 가산기들은 선택기 회로(420-424)를 통해 함께 결합되어 선택 가능 리플 캐리(selectable ripple-carry) 구성을 제공한다. 가산기(400)의 캐리 아웃은 선택기 회로(420)의 'a' 입력에 공급된다. 선택기 회로(420)의 출력은 가산기(401)의 캐리 인에 공급된다. 이어서, 가산기(401)의 캐리 아웃은 선택기 회로(422)의 'a' 입력에 공급되며, 그 출력은 가산기(402)의 캐리 인에 공급된다. 가산기(402)의 캐리 아웃은 선택기 회로(424)의 'a' 입력에 공급된다. 선택기 회로(424)의 출력은 가산기(403)의 캐리 인에 공급된다. 선택기 회로(420-424)의 'b' 입력에는 상수 "0"가 공급된다. 가산기(400)의 캐리 인에도 상수 "0"가 공급된다. 가산기 회로들의 16 비트 출력은 조합되어 가산기(170)의 64 비트 출력을 생성한다. 전술한 바와 같이, 가산기(170)의 출력은 선택기 회로(118, 119)에 공급된다.
본 발명의 다른 실시예에서는 도 1에서의 단 1의 승산기 회로(120-126)은 다른 구성을 갖는다. 도 5는 회로(120-126)를 대체하는 다른 승산기 회로(120'-126')의 일례를 도시한 것이다. 도 5에 도시된 구성은 이하 설명될 특정 명령을 구현하는데 사용된다.
승산기(120')의 상세한 것은 변형된 16 × 16 왈라스 트리 가산기(530)를 보여준다. 선택기 회로(110)의 출력 라인(x0)은 왈라스 트리 가산기에 대한 일 입력이다. 왈라스 트리 가산기에 대한 다른 입력은 선택기 회로(520)로부터 나온다. 선택기 회로(520)의 'a' 입력은 선택기 회로(110)의 출력 라인(y0)에 공급된다. 출력 라인(y0)은 반전되어 1의 보수 출력을 생성하며, 이것은 선택기 회로(520)의 'b'입력에 공급된다. 반전 논리 회로(510)는 16개의 인버터로 구비될 수 있다. 선택기 회로(520)와 변형된 왈라스 트리 가산기는 제어 신호(CTL1)를 수신한다.
제어 신호(CTL1)은 MNACNFX.WL 명령의 디코딩에 응답하여 생성된다. CTL1이 발생되면, 선택기 회로(520)는 'b' 입력을 생성하며, 이 입력은 y0의 1의 보수를 변형된 왈라스 트리 가산기에 공급한다. 더욱이, 왈라스 트리 가산기는 CTL1이 발생될 때에 상수 "1"이 그 입력들의 곱에 가산되도록 변형된다. 실제로는 이것은 y0를 반전시킨 다음에 "1"을 가산하는 것과 같다. 이 동작에 의해 y0의 2의 보수를 생성한다. 따라서 CTL1을 발생하는 것은 x0에 -y0를 곱하는 것이 된다.
도 3에 도시된 구성에서처럼, 왈라스 트리 입력도 오버플로우 검출 논리 회로(130)에 공급된다. 도 3과 관련하여 설명된 바와 같이, 포화값 발생기(300)는 선택기 회로(330)의 'a' 입력에 공급되는 출력을 생성한다. 검출 논리 회로(130)가 오버플로우가 발생할 것이라고 판단하면, 선택기 회로(330)는 그 'a' 출력으로부터 포화값을 생성할 것이다.
이제 도 6을 참조로 본 발명의 도 다른 실시예에 대해 설명한다. 승산 장치(100)의 단 1에 있는 추가적인 논리 회로가 도시되어 있다. 승산기 회로(120-126) 외에도 감산 장치(601-608)가 도시되어 있다. 더 상세한 것은 감산 장치(601)와 관련하여 설명한다. 감산 장치(601)는 2개의 8 비트 입력(x0, y0)를 수신한다. x0입력은 전 가산기(621)와 8개의 인버터로 된 인버터 뱅크(611)에 공급된다. 인버터 뱅크(611)의 출력은 제2 전 가산기(641)에 공급된다. y0입력은 전 가산기(641)의 제2 입력과 8개의 인버터(631)로 된 다른 뱅크에 공급된다. 인버터(631)의 출력은 전 가산기(621)의 제2 입력에 공급된다. 전 가산기 모두의 캐리 인에는 상수 "1"이 공급된다. 전 가산기(621)의 출력은 선택기 회로(651)의 'a' 입력에 공급되고, 선택기 회로의 'b' 입력은 전 가산기(641)의 출력을 수신한다.
전 가산기(621)에 관해서는, y0를 반전시키고 "1"을 캐리 인에 공급하는 결합 효과는 y0의 2의 보수의 생성이며 따라서 -y0를 생성하는 것이다. 그러므로, 전 가산기(621)는 양 (x0- y0)을 계산한다. 마찬가지로 전 가산기(541)에 관해서도, x0를 반전시키고 "1"을 캐리 인에 공급하는 결합 효과는 x0의 2의 보수를 생성하는 것이다. 그러므로, 전 가산기(641)는 양 (-x0+ y0)을 계산한다.
선택기 회로의 선택 입력은 전 가산기의 캐리 아웃들 중 하나에 공급되고, 나머지 다른 캐리 아웃은 무시된다. 전 가산기들 중의 하나의 적당한 캐리 아웃을 선택기 회로(651)의 선택기에 연결함으로써 감산 장치(601)의 출력에서 (x0- y0)의 절대값이 생성된다.
도 6은 8개의 감산 장치(601-608)를 보여준다. 각 장치는 선택기 회로(110)의 x3/y3, x2/y2, x1/y1, x0/y0의 8 비트 그룹에서 동작한다. 예컨대, 감산장치(601)는 8 비트 집합 x0[7:0]와 y0[7:0]에서 동작하고, 감산 장치(602)는 8 비트 집합 x0[15:8]와 y0[15:8]에서 동작하는 식으로 동작한다.
선택기 회로(660)는 승산기 회로(120-126)의 합 및 캐리 출력을 수신한다. 선택기 회로(660)도 감산 장치의 출력을 수신한다. 그러므로 선택기 회로(660)의 출력은 파이프라인 래치(P2)에 8개의 합/캐리 라인(s3/c3, s2/c2, s1/c1, s0/c0)이나 감산 장치(601-608)의 8개 출력을 제공한다. 그러나, 합/캐리 라인들은 각각 33 비트이다. 그러므로, 감산 장치의 8 비트 결과는 33 비트로 맞추어지도록 제로 연장된(zero-extended) 후에 파이프라인 래치(P2)로 래치된다.
본 발명의 다른 양상으 벡터화 데이터의 각종 교차 동작에 관한 명령 영역의 개선에 있다. 도 7에는 본 발명에 따라서 구비된 셔플(shuffle) 논리 회로(700)가 개략적으로 도시되어 있다. 한 쌍의 범용 레지스터는 레지스터 파일(102)로부터 억세스되어 64 비트 src1 및 src2 입력 라인에 공급된다. 입력 라인들은 비트 시프팅 회로(702)에 공급된다. 더 상세히 설명할 것이지만, 비트 시프터(702)는 src1의 비트 레벨 시프팅을 제공한다. 더욱이, 비트 시프터(702)는 좌우 방향 시프팅과 이들 방향 각각에서의 1 내지 7 비트 위치의 시프팅을 제공한다. 비트 시프터(702)는 좌우 시프팅을 선택하는 좌/우 제어 입력(752)을 포함한다. 다른 제어 입력(754)은 시프트량을 정하는 3 비트 시프트 입력이다. 시프트 량은 시프트 입력(754)에 공급되는 src2에 포함된다.
비트 시프터(702)의 2개의 64 비트 출력은 0 - 7 비트 위치들 사이의 임의의위치만큼 좌 또는 우로 시프트된 후의 src1 및 src2이다. 이 출력들은 매트릭스(704)에 공급된다. src2로부터 도출된 제어 입력(756)은 매트릭스(704)에 공급된다. 매트릭스(704)는 128(2 × 64)개의 입력 비트라인들 중 64개를 선택하여 이 들을 임의의 순서로 64 출력 비트라인에서 생성한다. 64 비트 라인들 각각은 선택기 회로(740)의 'a' 입력에 공급된다.
소오스 라인(src1)들 중 일부도 부호 발생기(708)에 공급된다. 부호 발생기의 64 출력 비트라인들 각각은 선택기 회로(740)의 'b' 입력에 공급된다. 마스크 발생기(710)는 src2에서의 시프트량을 수신한다. 마스크 발생기는 선택기 회로(740)를 동작시키는 출력을 생성한다. 부호 발생기(708)와 마스크 발생기(710)의 중요성은 명령 집합과 관련하여 후술될 것이다.
선택기 회로(740)의 출력은 래치(712) 내로 래치된다. 래치(712)는 또한 비트 시프터(702)의 출력을 수신한다. 래치는 비트 시프터(702)와 매트릭스(704)로부터의 데이터 도달을 동기화시키는 작용을 한다. 선택기(740)의 출력은 선택기 회로(724)의 'a' 입력과 오버플로우 검출 회로(720)의 입력에 공급된다. 비트 시프터(702)의 출력도 오버플로우 검출 회로(720)에 공급된다. 포화값 발생 회로(722)는 검출 회로(720)에 어떤 입력을 공급하며 이 입력은 선택기 회로(724)의 'b' 입력에 공급된다. 선택기 회로(724)는 검출 회로(720)의 입력에 응답하여 'a' 입력 또는 'b' 입력을 생성한다.
이제 도 8을 참조로 설명하면, 본 발명에 따른 교차 동작을 위한 추가적인 논리 회로(800)는 범용 레지스터 파일(102)로부터 3개의 소오스 src1, src2, src3에 래치하기 위한 래치(870)를 포함한다. src1 및 src3 각각의 64 비트라인들 각각은 각자 선택기 회로(801-863)의 단일 비트 'a' 입력 및 'b' 입력에 공급된다. 선택기 회로(863)은 그와 같은 2:1 선택기 회로의 전형적인 설계의 일례이다. 선택기 회로의 선택기 제어 신호는 src2의 64 비트라인에 의해 공급된다. 선택기 회로들은 조합되어 64 비트 출력(880)을 생성한다.
지금까지는 본 발명의 회로에 대해서 설명하였고, 이제는 명령 집합과 관련하여 이들 회로의 동작에 대해서 설명한다. 명령에 의해 지원되는 각종 데이터 포맷을 나타내는데 다음의 표시 규약을 사용한다. 소오스 레지스터는 Rm과 Rn으로 지정되며, 목적 레지스터는 Rd로 지정된다. 데이터 크기는 64 비트이고 데이터 정렬 규약은 저순번 위치에 하위 데이터를 둔다.
비트 레벨 동작-
Rx: Rx63, Rx62, ... Rx1, Rx0, x = 1, 2, 3
바이트 레벨(8 비트) 동작-
Rx: Rxb7, Rxb6, Rxb5, Rxb4, Rxb3, Rxb2, Rxb1, Rxb0, x = 1, 2, 3
워드 레벨(16 비트) 동작-
Rx: Rxw3, Rxw2, Rxw1, Rxw0, x = 1, 2, 3
롱 워드(32 비트) 동작-
Rx: RxL1, RxL0, x = 1, 2, 3
각각의 명령은 다음의 어셈블리 레벨 명령 포맷을 갖고 있다.
OP-CODE(6 비트): Rm(6 비트): OP-EXT(4 비트): Rn(6 비트): Rd(6 비트)
OP-EXT 필드는 기능에 있어서는 동일하지만 어떤 수치, 예컨대 MEXTR*만큼 차이가 나는 명령에 대해 사용된다. 각 어셈블리 레벨 명령은 일련의 1과 0으로 구성된 대응하는 기계어 레벨 명령으로 번역된다. 기계어 레벨 명령은 디코드되어 각종 제어 신호를 생성하며, 이들 제어 신호는 디코드된 명령의 실행을 수행하도록 각종 논리 회로를 동작시킨다.
명령에 따라서는 오퍼랜드는 묶여진(벡터화) 데이터를 포함할 수 있다. 이것은 관례로서 2 또는 그 이상의 N 비트의 독립적인 데이터 요소가 하나의 오퍼랜드에 포함된다. 각 데이터는 크기가 N 비트이다. 각 데이터에 대해 수행된 동작은 동일한 동작이라도 서로 독립적으로 실행된다.
MMUL.W
이것은 묶여진(벡터화) 16 비트 승산 명령이다. 2개의 오퍼랜드(Rm, Rn) 각각은 독립적인 4개의 16 비트 워드를 포함한다. 결과 Rd는 4개의 16 비트 값을 포함한다.
Rm: Rmw3, Rmw2, Rmw1, Rmw0
Rn: Rnw3, Rnw2, Rnw1, Rnw0
Rd: Rmw3×Rnw3, Rmw2×Rnw2, Rmw1×Rnw1, Rmw0×Rnw0
16 비트 × 16 비트 승산 결과는 32 비트 량이다. 그 결과, 이 명령을 위해서는 각 승산 결과가 모듈 연산을 이용하여 16 비트 포맷으로 다운 컨버트된다.
도 1과 관련하여, 이 명령의 디코딩은 Rm의 내용을 src1 데이터 라인으로 그리고 Rn의 내용을 src2 데이터 라인으로 출력하는 적당한 제어 신호들(도시 않됨)을 생성할 것이다. 데이터는 파이프라인 래치(P1)내로 래치되어 선택기 회로(110) 내로 클록된다. 선택기 회로(110)는 다음의 x 및 y 라인의 출력을 제공하도록 제어된다.
x3-src1[63-48](Rmw3), x2-src1[47-32](Rmw2), x1-src1[31-16](Rmw1), x0-src1[15-0](Rmw0)
y3-src2[63-48](Rnw3), y2-src2[47-32](Rnw2), y1-src2[31-16](Rnw1), y0-src2[15-0](Rnw0)
x와 y 라인은 각자의 승산기 회로(120-126)로 공급된다. 합/캐리 출력들(s3/c3, s2/c2, s1/c1, s0/c0)은 승산기들(120-126)의 출력에서 생성되어 P2로 래치된다.
각 합/캐리 쌍(예컨대 s0/c0)은 오퍼랜드 Rm 및 Rn(예컨대 Rmw0×Rnw0)의 16×16 곱을 포함한다. MMUL.W 명령을 위해서는, 비록 단 2에서의 합/캐리 쌍이 교차 회로(152, 154, 156)에 공급되지만, 회로(152)를 통한 경로만이 관계한다. 합/캐리 라인 쌍들 각각의 상위 17개 비트들은 합/캐리 쌍이 33 비트 라인이라는 것을 상기하면 하위 16개 비트들을 남기고 마스크 아웃(masked out) 된다. 이 마스킹 아웃 단계는 32 비트의 다운 컨버젼이라고 하며, 모듈 연산을 통해 16 비트 량으로 변환된다. 게다가 회로(152)는 4쌍의 16 비트 결과를 64 비트 캐리 및 합 라인(153)으로 묶는다.
라인(153)은 선택기 회로(114)와 선택기 회로(116)를 통해 압축 회로(160)에 공급된다. 선택기 회로(112)는 "0" 상수를 생성하도록 동작되며 따라서 "0"을 압축 회로(160)에 공급한다. "0"을 압축 회로(160)에 공급하는 것은 그 입력(117)을 그 출력(161)에 직접 보내는 효과가 있다. 따라서 압축 회로는 효과적으로 바이패스되고 통과(pass-through) 장치처럼 행동하며 그 입력(117)을 압축없이 직접 P3에 공급한다.
도 1 및 4와 관련하여, P3 래치로부터의 출력(163)은 가산기 회로(170)에 공급된다. 선택기 회로(420-424)는 각자 선택기 회로 출력에서 'b' 입력을 생성하도록 제어된다. 따라서 상수 "0"은 전 가산기(400-403) 각각의 캐리 인으로 보내진다. 이것을 하는 것은 전 가산기를 4개의 독립적인 전 가산기 장치로서 구성하며, 따라서 그 입력에서 4개의 독립적인 가산 동작을 제공한다. 더욱이, 각 회로가 자기 포함(self-contained) 전 가산기이므로 4개의 독립적인 가산 동작은 동시에 실행된다. 이것은 정확히 MMUL.W 명령에서 바라던 효과이다. 4개의 묶여진 워드는 독립적인 값이기 때문에 그 결과는 4개의 독립적인 곱 항이어야 한다. 더욱이 각회로는 자기 포함 전 가산기이므로 4개의 독립적인 가산 동작은 동시에 실행된다. MMUL.W 명령에 있어서 도 1에 도시된 검출 논리 회로(180, 186)는 사용되지 않는다. 그러므로 선택기 회로(118, 119)는 MMUL.W 명령의 디코딩 중에 생성된 제어 신호에 응답하여 그들의 'b' 입력을 생성하며 따라서 64 비트 결과를 형성한다.
MMULFX.W
MULFXRP.W
이들은 묶여진(벡터화) 16 비트 고정점 승산 명령이다. 2개의 오퍼랜드 Rm, Rn 각각은 4개의 독립적인 16 비트 워드를 포함한다. 결과 Rd는 4개의 16 비트 값을 포함한다. MMULFXRP.W 명령은 라운딩(rounding)을 포함한다.
Rm: Rmw3, Rmw2, Rmw1, Rmw0
Rn: Rnw3, Rnw2, Rnw1, Rnw0
Rd: Rmw3×Rnw3, Rmw2×Rnw2, Rmw1×Rnw1, Rmw0×Rnw0
이들 명령들은 MMUL.W에 대해 전술한 것과 동일한 방식으로 처리되며, 다만 MMULFX.W와 MMULFXRP.W의 오퍼랜드의 고정점 포맷에 있어 다음 설명과 같은 차이가 있다.
16 비트 × 16 비트 승산은 32 비트량으로 되기 때문에 고정점 승산의 결과는 포화 상태로 16 비트로 다운 컨버트된다. 다운 컨버젼은 32 비트 결과의 최상위 16 비트만을 보유한다. 포화는 공지된 프로세스이다. 연산 동작의 결과가 주어진 데이터형이 유지될 수 있는 것보다 더 많은 비트를 요구할 때는 그 결과는 그 데이터형에 의해 나타내어질 수 있는 최대수 또는 최소수로 고정된다. 예컨대, 그 결과가 16 비트 부호화 정수와 맞추어져야하나 20 비트 값인 경우에는 그 결과의 포화는 그 결과의 부호에 따라서 215-1의 값(16 비트 부호화 정수에 대한 최대값) 또는 -2-15의 값(16 비트 부호화 정수에 대한 최소값)을 생성할 것이다. 16 비트 고정점 값의 경우에는 범위는 -1 내지 (1-2-15)이다.
따라서, 이들 고정점 승산에 있어서는, 단 1의 승산 회로(120-126)에서 오버플로우 검출이 수행된다. 도 3과 관련하여 설명된 바와 같이, 검출 논리 회로(130)는 그 입력 모두가 -1인 때를 판단한다. 이 판단이 일어나면 선택기 회로(330)는 그 'a' 입력을 생성한다. 포화 발생기는 MMULFX.W 및 MMULFXRP.W에 대해 (1-2-15)를 출력하기 때문에 합 및 캐리 라인(s0, c0)은 각각 "0"과 (1-2-15) 또는 그 반대로 설정될 것이다. 이것은 또한 다른 합 및 캐리 라인(s3/c3, s2/c2, s1/c1)에 대해서도 일어난다. 이런 방식으로 4개의 곱 항 각각에 대해 오버플로우 상태가 검출되고 조정된다.
단 2에서 s3/c3, s2/c2, s1/c1, 및 s0/c0라인은 교차 회로(152)에 의해 64 비트 라인(153)으로 묶여진다. MMULFX.W 및 MMULFXRP.W 명령을 위해서는 비록 단 2에서의 합/캐리 쌍이 교차 회로(152, 154, 156)에 공급되지만, 회로(152)를 통한경로만이 관계한다. 그 다음 라인(153)은 선택기 회로(114, 116)를 통해 압축 회로(160)에 공급된다. MMULFX.W에 대해서는 회로(112)는 상수 "0"을 압축 회로에 공급한다. 그 결과, MMULFX.W 명령에 대한 입력의 압축이 없다. 고정점 동작에 있어서는 결과는 결과의 고정점 표현을 유지하기 위하여 1만큼 좌로 시프트된다. 압축 회로의 출력은 P3으로 래치된다.
MMULFXRP.W 명령에 관해서는 단 2에서 라운딩이 일어난다. 선택기 회로(112)는 "0.5" 상수를 발생시킨다. 명령은 16 비트 데이터 상에서 동작하므로 선택기(112)는 4개의 "0.5" 카피를 고정점 포맷으로 발생시키고 이들을 묶어서 64 비트 출력(113)으로 만든다. 각 상수는 회로(152)로부터의 대응 합 및 캐리 라인(s3/c3, s2/c2, s1/c1, 및 s0/c0)을 갖고서 압축 회로(160)에서 조합된다. 이것은 MMULFXRP.W에 대한 라운딩 동작을 발생시킨다. 그 다음 프로세싱은 더 나아가서 단 3에서 계속된다.
도 1 및 4와 관련하여, P3 래치로부터의 출력(163)은 가산기 회로(170)에 공급된다. 선택기 회로(420-424)는 각자 선택기 회로 출력에서 'b' 입력을 생성하도록 제어된다. 따라서 상수 "0"은 전 가산기(400-403) 각각의 캐리 인으로 보내진다. 그러므로 전 가산기는 4개의 독립적인 전 가산기 장치로서 구성되며, 따라서 그 입력에서 4개의 독립적인 가산 동작을 제공한다. 이것은 정확히 MMULFX.W 및 MMULFXRP.W에서 바라던 효과이다. 4개의 묶여진 워드는 독립적인 값이기 때문에 그 결과는 4개의 독립적인 곱 항이어야 한다.
MMUL.L
이것은 묶여진(벡터화) 32 비트 승산 명령이다. 2개의 오퍼랜드 Rm, Rn 각각은 2개의 독립적인 32 비트 워드를 포함한다. 결과 Rd는 2개의 32 비트 값을 포함한다.
Rm: RmL1, RmL0
Rn: RnL1, RnL0
Rd: RmL1×RnL1, RmL0×RnL0
32 비트 × 32 비트 승산은 64 비트량으로 된다. 그 결과 이 명령을 위해서는 각 승산의 결과는 모듈 연산을 이용하여 32 비트 포맷으로 다운 컨버트된다.
본 발명에 따라서, 32 비트 승산은 각 32 비트 오퍼랜드를 2개의 16 비트 요소로 분할함으로써 수행된다. 그러면 승산은 독립적인 16 비트 동작으로서 진행될 수 있고 중간 결과는 조합되어 64 비트 결과를 산출한다. 이에 의해서 도 1에 도시된 기존의 16 비트 승산기(120-126)를 재사용하여 32 비트 승산을 제공할 수 있다.
32 비트수 A는 다음의 형태를 갖는다.
Ah×216+A1, 여기서 Ah는 A의 최상위 워드, A[31:16]
A1은 A의 하위 워드, A[15:0]
따라서, A×B는 다음과 같이 표현될 수 있다.
대수학을 차용하면, 위 수학식은 2개의 이항식의 곱의 다항식 전개로서 볼 수 있다. 첫 번째 이항식 항은 (Ah×216+ A1)이고 두 번째 이항식 항은 (Bh×216+B1)이다. 이 다항식 전개는 수학식 3으로 표현된다.
도 1과 관련하여, MMUL.L 명령의 디코딩은 Rm의 내용을 src1 데이터 라인으로 그리고 Rn의 내용을 src2 데이터 라인으로 출력하는 적당한 제어 신호들(도시 않됨)을 생성할 것이다. 데이터는 파이프라인 래치(P1)내로 래치되어 명령 실행의 제1 사이클 중에 선택기 회로(110) 내로 클록된다. MMUL.L에 대응하는 제어 신호는 선택기 회로(110)를 동작시켜 다음과 같은 방식으로 src1 및 src2 데이터 라인을 x 및 y 라인에 맵핑한다.
32 비트 맵핑 32 비트 맵핑(대체) 레지스터 내용(대체)
src1[31:16] ⇒x3Rmh0
src1[31:16] ⇒x2src1[15:0] ⇒x2Rmh0(Rm10)
src1[15:0] ⇒x1src1[31:16] ⇒x1Rm10(Rmh0)
src1[15:0] ⇒x0Rm10
src2[31:16] ⇒y3Rnh0
src2[15:0] ⇒y2src2[31:16] ⇒y2Rn10(Rnh0)
src2[31:16] ⇒y1src2[15:0] ⇒y1Rnh0(Rn10)
src2[15:0] ⇒y0Rn10
"대체(alternative)" 맵핑은 수학식 3에서의 항 (Ah×B1+Bh×A1)에 대한 가산 동작의 교환 성질을 인식한다.
제1 파이프라인 실행 사이클에서는 src1 및 src2 각각으로부터 하위 롱워드만이 선택되어 단 1의 승산기 회로에 공급된다. 하위 롱워드 기준은 레지스터명들(예컨대 Rmh0)에서 "0" 첨자 지정으로 표시된다. 파이프라인 실행의 제2 사이클 중에, 제1 사이클로부터의 합/캐리 출력이 단 2로 진행되면 src1과 src2의 상위 롱워드가 선택되어 승산기 회로(120-126)에 공급된다. 그 결과, MMUL.L 명령은 완료시키는데 여분의 사이클을 필요로 한다. 따라서 제2 사이클 중에 단 1에는 다음의 데이터 선택이 일어난다.
32 비트 맵핑 32 비트 맵핑(대체) 레지스터 내용(대체)
src1[63:48] ⇒x3Rmh1
src1[63:48] ⇒x2src1[47:32] ⇒x2Rmh1(Rm11)
src1[47:32] ⇒x1src1[63:48] ⇒x1Rm11(Rmh1)
src1[47:32] ⇒x0Rm11
src2[63:48] ⇒y3Rnh1
src2[47:32] ⇒y2src2[63:48] ⇒y2Rn11(Rnh1)
src2[63:48] ⇒y1src2[47:32] ⇒y1Rnh1(Rn11)
src2[47:32] ⇒y0Rn11
계속해서 x 및 y 라인은 각자의 승산기 회로(120-126)에 공급된다. 합/캐리 출력(s3/c3, s2/c2, s1/c1, s0/c0)은 도 3과 관련하여 설명된 방식으로 생성된다.
승산기(120-126)로부터의 출력은 P2에 래치된다. 단 2로 들어가는 합/캐리 라인은 다음의 곱 항을 나타낸다.
s3/c3=Ah×Bh, s2/c2=Ah×B1, s1/c1=Bh×A1, s0/c0=A1×B1
그러나, 수학식 3은 상기 항들 중 일부에 2의 급수가 곱해질 것을 필요로 한다. 이것은 교차 회로(156)에 의해 제공된다. MMUL.L 명령을 위해서는 비록 단 2의 합/캐리 쌍이 교차 회로(152, 154, 156)에 공급되지만 회로(156)를 통한 경로만이 관계한다.
전술한 바와 같이, 입력 합/캐리 쌍(s3/c3, s2/c2, s1/c1, s0/c0)은 다음과 같은 방식으로 각자의 출력 64 비트 합/캐리 쌍(sx3/cx3, sx2/cx2, sx1/cx1, sx0/cx0)로 맵핑한다.
s3[31:0], c3[31:0] ⇒ sx3[63:48],cx3[63:48] (×232)
s1[31:0], c1[31:0] ⇒ sx1[47:16],cx1[47:16] (×216)
s2[31:0], c2[31:0] ⇒ sx2[47:16],cx2[47:16] (×216)
s0[31:0], c0[31:0] ⇒ sx0[31:0],cx0[31:0]
sx3/cx3, sx2/cx2, sx1/cx1를 상위 위치로 시프팅하는 것은 2의 급수에 의한 승산을 시행하는 것이다. sx3/cx3은 32 비트만큼 시프트되기 때문에 Ah×Bh는 232만큼 곱해지게 된다. sx2/cx2, sx1/cx1에 대해서도 마찬가지이지만 대신에 곱해지는 것은 216이다.
그러므로 합/캐리 라인(sx3/cx3, sx2/cx2, sx1/cx1)은 수학식 3의 중간 곱 항들을 나타낸다. 이 8개 라인은 8:2 압축 회로에 공급되어 한 쌍의 캐리 및 합 라인(141)을 생성한다. 라인(141)은 선택기 회로(116)를 통해 3:2 압축기(160)에 공급된다. 선택기 회로(112)는 압축기(160)에 "0" 상수를 공급하여 장치를 기본적으로 통과 장치로 만든다. 따라서 MMUL.L 명령과 같은 32 비트 승산기에 있어서는 압축 회로(160)는 효과적으로 바이패스된다. 출력(141)은 압축없이 P3에 래치되며 제3 사이클 중에 단 3내로 클록된다.
단 3에서 제3 사이클 중에 합/캐리 라인(163)으로 표현된 중간 곱 항은 가산기 회로(170)에 공급된다. 도 4를 참조로 설명하면, 가산기 회로(170)에서는 그 구성 요소인 선택기 회로(420-424)는 MMUL.L 명령의 디코딩에 응답하여 생성된 제어 신호에 의해 'a' 입력을 생성하도록 제어된다. 이에 따라 각 전 가산기(400-402)의 캐리 아웃은 후속 가산기로 전파된다. 이에 의해 가산기(170)는 단일 4단 캐리 전파 가산기로 구성된다. 따라서 입력 합 및 캐리 라인(163)의 단일 64 비트 가산 동작이 수행된다. 그에 비해, 4개의 독립 16 비트 가산 동작은 MMUL.W 및 MMULFX.W 명령의 디코딩에 응답하여 구성된 가산기(170)에 의해 수행된다. 32 비트 승산에 이용하는 가산기(170)의 이와 같은 구성 가능성은 각각의 데이터 크기에 대해 주문 제작되는 논리 회로를 설계 및 구비할 필요없이 서로 다른 크기의 데이터 포맷에 대해서 회로의 재사용을 가능하게 한다.
마지막으로, MMUL.L 명령에 따라서 합의 하위 32 비트(예컨대 합[32:0])SMS가산기(170)의 출력에서 생성된다. 상위 32 비트의 마스킹 아웃은 64 비트 합의 32 비트량으로의 모듈로 다운 컨버젼이다.
상위 롱워드 Rm1및 Rn1은 유사한 방식으로 동시에 처리되나 한 사이클 늦어진다는 것을 상기한다. 프로세싱이 제4 사이클에서 단 3에 도달하면 가산기 회로(170)에 의해 64 비트 결과(Rm1×Rn1)가 생성된다. 합은 32 비트 결과로 다운 컨버트되어 제3 사이클로부터의 32 비트 결과(Rm0×Rn0)와 조합되어 64 비트 결과로 묶여진다.
MMULFX.L
이것은 묶여진 32 비트 고정점 승산 명령이다. 2개의 오퍼랜드 Rm, Rn 각각은 2개의 독립적인 32 비트 워드를 포함한다. 결과 Rd는 2개의 32 비트 값을 포함한다.
Rm: RmL1, RmL0
Rn: RnL1, RnL0
Rd: RmL1×RnL1, RmL0×RnL0
이들 명령들은 MMUL.W에 대해 전술한 것과 동일한 방식으로 처리되며, 다만 오퍼랜드의 고정점 수 포맷에 있어 다음 설명과 같은 차이가 있다.
32 비트×32 비트 승산은 64 비트량으로 되기 때문에 각 승산의 결과는 포화상태로 32 비트로 다운 컨버트된다. 다운 컨버젼은 64 비트 결과의 최상위 32 비트만을 보유한다.
MMUL.L의 경우와 마찬가지로, 32 비트 승산은 수학식 3에 의해 16 비트 승산으로 감소된다. 그 결과, 단 1의 승산 회로(120-126)에서 각 16 비트 동작에 대해 오버플로우 검출이 필요하다. 따라서 도 3과 관련하여 검출 논리 회로(130)는 그 입력 모두가 -1인 때를 판단한다. 이 판단이 일어나면 선택기 회로(330)는 그 'a' 입력을 생성한다. 포화 발생기는 MMULFX.L에 대해 (1-2-32)를 출력하기 때문에 합 및 캐리 라인(c0, s0)은 각각 "0"과 (1-2-32) 또는 그 반대로 설정될 것이다. 이것은 또한 다른 합 및 캐리 라인(s3/c3, s2/c2, s1/c1)에 대해서도 일어난다. 이런 방식으로 수학식 3의 중간 곱 항에 대해 오버플로우 상태가 검출된다. 그 다음 프로세싱은 단 3으로 진행된다.
단 3에서는 4개의 승산 곱 항이 함께 합산될 때에 오버플로우될 수 있기 때문에 오버플로우 검출 논리 회로(180, 186)는 포화가 필요한가 여부에 대해 더 판단한다. 포화값 발생기(182)는 MMULFX.L에 대해 1-2-32을 생성하도록 제어된다. 논리 회로(180, 186)에 의한 판단 결과 포화가 요구되면, 선택기 회로(118, 119)는 'a' 입력을 생성하여 가산기(170)의 출력이 아닌 포화값을 출력한다.
MMULLO.WL
MMULHI.WL
이들은 묶여진 16 비트 전대역 승산 명령이다. 각 명령은 오퍼랜드(Rm, Rn)의 로우("LO") 2개 워드나 하이("HI") 2개 워드에 대해 동작한다. 결과 오퍼랜드 Rd는 2개의 32 비트 곱 항을 포함한다. 이들 동작은 승산의 전 32 비트 결과를 보존한다.
Rm: Rmw3, Rmw2, Rmw1, Rmw0
Rn: Rnw3, Rnw2, Rnw1, Rnw0
Rd: Rmw1×Rnw1, Rmw0×Rnw0(MMULLO.WL)
Rd: Rmw3×Rnw3, Rmw2×Rnw2(MMULHI.WL)
도 1과 관련하여, 이들 명령의 디코딩은 Rm의 내용을 src1 데이터 라인으로 그리고 Rn의 내용을 src2 데이터 라인으로 출력하는 적당한 제어 신호들(도시 않됨)을 생성할 것이다. 데이터는 P1로 래치되어 선택기 회로(110) 내로 클록된다. 선택기 회로(110)는 다음의 x 및 y 라인의 출력을 제공하도록 제어된다.
x3=src1[63-48](Rmw3), x2=src1[47-32](Rmw2), x1=src1[31-16](Rmw1), x0=src1[15-0](Rmw0)
y3=src2[63-48](Rnw3), y2=src2[47-32](Rnw2), y1=src2[31-16](Rnw1), y0=src2[15-0](Rnw0)
x와 y 라인은 각자의 승산기 회로(120-126)로 공급된다. 합/캐리출력들(s3/c3, s2/c2, s1/c1, s0/c0)은 승산기들(120-126)의 출력에서 생성되어 P2로 래치된다. MMULLO.WL 및 MMULHI. WL 명령을 위해서는, 비록 단 2에서의 합/캐리 쌍이 교차 회로(152, 154, 156)에 공급되지만, 회로(154)를 통한 경로만이 관계한다.
교차 회로(154)는 MMULLO.WL 및 MMULHI.WL의 디코딩에 응답하여 생성된 제어 신호에 의해 동작된다. MMULLO.WL에 있어서는 교차 회로(154)는 s1/c1및 s0/c0합/캐리 라인만이 선택되어 64 비트 출력 라인(155)으로 묶여지도록 동작된다. s1/c1라인쌍은 곱 Rm1×Rn1을 나타내고 s0/c0라인쌍은 곱 Rm0×Rn0을 나타낸다. MMULHI.WL에 있어서는 교차 회로(154)는 s3/c3및 s2/c2합/캐리 라인만이 선택되어 64 비트 출력 라인(155)으로 묶여지도록 동작된다. s3/c3라인쌍은 곱 Rm3×Rn3을 나타내고 s2/c2라인쌍은 곱 Rm2×Rn2를 나타낸다. 선택기 회로(114, 116)는 출력(155)을 압축 회로(160)에 공급하는데 공동으로 작용한다. 선택기 회로(112)는 상수 "0"을 압축 회로(160)에 공급한다. 전술한 바와 같이 이것은 압축 회로(160)를 바이패스시키며, 따라서 압축 없이 출력(155)을 P3에 직접 래치시킨다.
단 3에서 합/캐리 라인(163)은 가산기 회로(170)에 공급된다. 도 4를 참조로 설명하면, 가산기 회로(170)는 MMULLO.WL 및 MMULHI.WL 명령의 디코딩에 응답하여 생성된 제어 신호에 의해 4단 캐리 전파 가산기로 구성된다. 따라서 선택기 회로(420-424)는 'a' 입력들을 생성한다. 이에 따라 각 전 가산기(400-402)의 캐리아웃은 후속 가산기로 전파된다. 단 2로부터의 곱은 32 비트량이므로 단 2개의 전 가산기만이 직렬 접속될 필요가 있음에 유의한다. 입력 합 및 캐리 라인(163)은 조합되어 최종 결과를 생성한다. MMULHI.WL에 있어서는 도출된 32 비트 합은 가산기(170)의 출력의 상위 32 비트에 놓여지고, 반면에 MMULLO.WL에 있어서는 32 비트 합은 가산기의 출력의 하위 32 비트에 놓여진다.
MMACFX.WL
MMACNFX.WL
이들은 누산기(Rd)와 조합된 묶여진 고정점 16 비트 전대역 승산 명령이다. 이들 명령은 오퍼랜드(Rm, Rn)의 하위 2개 워드만에 대해 동작한다. 곱은 (MMACFX.WL)와 합산되거나 (MMACNFX.WL)으로부터 감산되어 제3 오퍼랜드(Rd)로 된다. 최종 결과는 Rd(여기서는 Rd'로 표시함)로 된다.
Rm: Rmw1, Rmw0
Rn: Rnw1, Rnw0
Rd: RdL1, RdL0(입력 Rd)
Rd': RdL1+Rmw1×Rnw1,RdL0+Rmw0×Rnw0(MMACFX.WL)
Rd': RdL1-Rmw1×Rnw1,RdL0-Rmw0×Rnw0(MMACNFX.WL)
이들 명령은 다음의 차이를 갖고서 MMULLO.WL과 유사한 방식으로 실행된다. 단 1에서는 오버플로우 검출 및 포화는 MMULFX.W 명령과 유사한 방식으로 수행된다. 단 1로부터의 출력은 단 2의 교차 회로(152, 154, 156)에 공급된다. 그러나, MMACFX.WL와 MMACNFX.WL 명령에 있어서는 회로(154)가 관계한다. 회로(154)는 s1/c1및 s0/c0합/캐리 라인을 선택하여 이들을 64 비트 출력 라인(155)으로 묶는다. 이 출력은 선택기 회로(114, 116)를 통해 압축 회로(160)에 공급된다. 입력 라인(117)은 곱 Rmw1×Rnw1을 나타내는 s1/c1과 곱 Rmw0×Rnw0를 나타내는 s0/c0를 포함한다.
선택기 회로(112)는 src3 라인인 'a' 입력을 생성한다. MMACFX.WL와 MMACNFX.WL 명령에 대응하는 제어 신호는 오퍼랜드(Rd)에 의해 규정된 레지스터 파일(102)로부터의 범용 레지스터와의 데이터 통신을 제공할 것이다. 선택기 회로(112)의 출력은 압축 회로(160)에 공급된다. 압축 회로(160)는 Rd의 상위 절반에 s1/c1과 더하고 Rd의 하위 부분에 s0/c0를 더한다. 그 결과는 P3 래치를 통해 단 3으로 진행한다. Rd의 각 절반은 고정점 수이므로 Rm과 Rn의 승산 결과는 이들의 고정점과 누산기의 고정점이 정렬되도록 1만큼 좌로 시프트되어야 함에 유의한다.
도 1 및 4와 관련하여, P3의 출력(163)은 가산기 회로(170)에 공급된다. 선택기 회로(420, 424)는 각자의 'a' 입력을 생성하도록 제어되며, 선택기 회로(422)는 자신의 'b' 입력을 생성한다. 이에 따라 가산기(400, 401)가 가산기(402, 403)와 분리되어 2개의 독립적인 직렬 접속 가산기가 만들어진다. 따라서 전 가산기(400, 401)는 직렬 접속되어 32 비트 합, 즉 RdL0+Rmw0×Rnw0를 제공하며, 전가산기(402, 403)는 직렬 접속되어 다른 32 비트 합, 즉 RdL1+Rmw1×Rnw1을 제공한다. 독립적인 가산 동작 모두는 동시에 일어난다. 게다가 논리 회로(180, 186)를 통한 오버플로우 검출이 제공되어, 오버플로우가 예측되는 경우에 포화 발생기(182)로부터 (1-2-15)가 출력된다.
MMACNFX.WL 명령에 관련하여, 도 5에 도시된 승산 장치(120-126)내의 추가적 회로는 이 명령의 디코딩에 응답하여 생성된 제어 신호(CTL1)에 의해 동작된다. CTL1을 발생시키는 것은 x0에 -y0를 승산하는 결과를 가져온다는 것을 상기한다. 이것은 MMACNFX.WL에서 바라던 효과이다. Rd에 -(x0×y0)를 합산하는 것은 Rd로부터 감산하는 원하는 효과를 제공한다.
MSHLL(R)D.W(L)
MSHARD.W(L)
MSHALDS.W(L)
이들은 묶여진 16 비트(32 비트) 데이터의 좌(우) 시프트이다. 제1 오퍼랜드(Rm)는 4개(2개)의 독립적인 16 비트(32 비트) 값을 포함한다. 각각은 Rn에서 규정된 동일량만큼 시프트된다. 그 결과는 Rn에 위치된다.
Rm: Rmw3, Rmw2, Rmw1, Rmw0(16 비트)
Rm: RmL1, RmL0(32 비트)
Rn: n (시프트량)
Rd: Rmw3≪n, Rmw2≪n, Rmw1≪n, Rmw0≪n(좌측 시프트, 16 비트)
Rd: Rmw3≫n, Rmw2≫n, Rmw1≫n, Rmw0≫n(우측 시프트, 16 비트)
Rd: RmL1≪n, RmL0≪n(좌측 시프트, 32 비트)
Rd: RmL1≫n, RmL0≫n (우측 시프트, 32 비트)
논리적 시프트 MSHLL(R)D.W(L)은 포화를 포함하지 않는다. 마찬가지로 연산 우측 시프트 MSHARD.W(L)에 대해서도 포화가 문제되지 않는다. 우측 시프트는 2 분할 동작(divide-by-two operation)이며, 그래서 최종값은 항상 시작값보다 작다. 그러나 우측 시프트에 대해서는 부호가 부연되어야 한다. 연산 좌측 시프트 MSHARDS.W(L)에 대해서는 필요한 경우에 포화가 제공된다.
도 7을 참조로 설명하면, 임의의 논리적 시프트 명령(MMSHLLD.W, MMSHLRD.W, MMSHLLD.L, MMSHLRD.L)의 디코딩은 비트 시프터(702)와 매트릭스(704)를 동작시키는 제어 신호를 생성한다. 시프트량은 src2내의 최하위 바이트에 포함되어 있다. src2의 3개의 최하위 비트(src22, src21, src20)는 시프트량 입력(754)에 공급된다. 최하위의 3개 비트는 시프트량 모듈로(8)임을 알 수 있다. 명령에 따라 적당한 업/다운 제어 신호가 발생되어 제어부(752)에 공급된다. 그 결과, 비트 시프터(702)는 시프트량 입력(754)에 의해 규정된 량만큼(0-7 위치) src1 입력의 비트 레벨 좌측 또는 우측 시프트를 행할 것이다. 비트 시프터(702)의 출력은 매트릭스(704)에 공급된다. src2 바이트 내의 다음 3개 비트(src25, src24, src23)는 매트릭스(704)의 제어 입력(756)에 공급된다. 이 제어 입력은 그 입력에서 수행될 8 비트(바이트 레벨) 시프트의 수를 규정한다.
바이트 레벨 시프트가 이어지는 비트 레벨 시프트의 이와 같은 2단계 구성은 16 비트 시프트와 32 비트 시프트 모두를 수용한다. 예컨대, 21 비트 위치의 시프트를 생각해 보면, 입력 src2는 21 베이스(base) 10인 0101012을 포함한다. 따라서 비트 시프터(702)는 1012비트 위치, 즉 5 비트 위치를 시프트시킬 것이다. 매트릭스(704)는 추가적인 0102바이트 레벨 시프트, 즉 16 비트 위치의 시프트를 제공하여 총 21 비트 위치의 시프트를 제공한다. 매트릭스(704)의 출력은 선택기 회로(740)의 'a' 입력에 공급된다. 선택기 회로(740)의 'b' 입력은 부호 발생기(708)로부터의 출력을 수신한다. 선택기들은 마스크 발생기(710)로부터의 출력에 의해 제어된다.
이제 도 7 및 9를 참조로 부호 발생기(708)와 마스크 발생기(710)으?? 기능에 대해서 설명한다. 3개의 8 비트 요소로 분할된 도 9의 24 비트 레지스터를 생각해 본다. 이하의 설명은 명령 MMSHLLD.W, MMSHLRD.W, MMSHLLD.L, MMSHLRD.L의 16 비트 및 32 비트 데이터 포맷에도 적용된다. 단계(1)에서 3개의 초기치는 B2=10111001, B1=00011100, B0=11010101이다. 3 비트 우측 시프트를 원한다고 가정한다. 단순히 레지스터를 3 비트만큼 시프트하면 단계(2)에서 도시된 내용이 생성된다. B2는 올바르게 10111을 포함하나, B1은 00100011을 포함하고 B0은10011010을 포함한다. B1과 B0은 레지스터를 단순히 시프팅하는 것이 요소 B2, B1, B0의 독립적인 양상을 고려하지 않기 때문에 올바르지 못하다. 그 결과, 바이트 B1 및 B0은 인접 바이트로부터 '스필 오버(spill-over)' 비트를 수신한다.
본 발명에 따라서, 마스크 발생기(710)는 선택기 회로(740)를 제어하는 (3)에 도시된 마스크 패턴을 생성한다. 더욱이 본 발명에 따라서, 부호 발생기(708)는 선택기 회로(740)의 'b' 입력 각각에 0을 공급하는 64 비트라인에서 0들을 출력한다. 따라서 마스크 패턴에서 '1'이 발생하는 곳에서는 선택기 회로는 '0'인 'b' 입력을 생성한다. 마스크 패턴에서 '0'이 발생하는 곳에서는 선택기 회로는 시프트된 레지스터 내용인 'a' 입력을 생성한다. 선택기 회로(740)의 출력에서의 비트 패턴(도 9의 단계 4에 도시됨)은 주어진 데이터 포맷에 대해 시프트된 요소, 예컨대 16 비트, 32 비트 등을 적절히 나타낸다. 마스크 발생기(710)와 부호 발생기(708)는 공동으로 작용하여 인접 요소로부터 스필 오버 비트를 효과적으로 마스크 아웃한다.
명령 MMSHLLD.W, MMSHLRD.W, MMSHLLD.L, MMSHLRD.L에 있어서, 부호 발생기는 항상 모든 '0'을 출력한다. 이런 이유로, 부호 발생기는 논리적 시프트 명령에 대한 "부호"의 개념이 없기 때문에 "대체값" 발생기로서 더욱 정확하게 설명된다. 마스크 발생기(710)는 이들 명령에 대응하는 제어 신호에 응답하여 정확한 패턴 크기(예컨대 16 비트, 32 비트)를 생성한다. 패턴 그 자체는 마스크 발생기로 공급되는 src2 바이트에 포함된 시프트량에 기초하여 생성된다. 도 9의 (3)d0서 알 수 있듯이, 우측 시프트에 대한 패턴은 src2 내의 시프트량으로 규정된 것만큼 인접한'0' 계열을 가질 것이며, 적당한 데이터 크기의 패턴을 완성하기 위해 인접한 '1' 계열로 좌측이 메워진다. 도 9를 참조로, 바이트 B2에 대한 마스크 패턴은 5개의 인접 '0' 계열(시프트량)과 3개의 '1' 계열을 보여준다. 짐작될 수 있듯이, 좌측 시프트에 대한 패턴은 시프트량으로 규정된 만큼의 '0'을 가지나 주어진 데이터 크기에 대한 패턴을 완성하기 위해서는 충분한 '1'로 우측이 메워진다.
이제 부호화된 시프트 명령 MSHARD.W 및 MSHARD.L에 관하여 도 7 및 10을 참조로 설명한다. 다시, 3개의 8 비트 요소로 구성된 24 비트 레지스터를 생각해 본다. 단계(1)에서 3개의 초기치는 B2=10111001, B1=00011100, B0=11010101이다. 3 비트 연산 우측 시프트를 원한다고 가정한다. 전에처럼 레지스터의 전체 내용을 3개의 위치만큼 단순히 시프팅하면 인접 바이트로부터의 스필 오버 비트 때문에 단계(2)에서 도시된 잘못된 결과를 생성한다. 더욱이, 바이트 B2 및 B0는 우측 시프트될 때에 부호 부연을 필요로 하는 음수이다. 도 10은 B2 및 B0가 (2)에서 양수임을 보여준다.
MSHARD.W 및 MSHARD.L에 있어서, 마스크 발생기(710)는 동일한 방식으로 동작하여 도 9에서 전술한 것과 동일한 비트 패턴을 출력한다. 반면에 부호 발생기(708)는 다르게 동작한다. 도 10에서 알 수 있듯이, 부호 발생기 출력(4)은 B2 및 B0 각각에 대응하는 8개의 '1'의 패턴과 B1에 대응하는 '0'의 패턴이다. 알 수 있는 바와 같이, 부호 패턴을 선택기(740)의 'b' 입력에 공급하고 마스크 패턴에 따라 각 선택기를 동작시키는 것은 B2, B1, 및 B0에 대한 적절히 시프트된 출력을 생성할 뿐만 아니라 적당한 부호 부연을 갖게 한다.
도 7을 참조로 설명하면, 비트 src163, src147, src131, src115는 부호 발생기(708)에 공급된다. 이 들은 16 비트 데이터 포맷에 대한 부호 비트이다. 32 비트 데이터 포맷에 대해서는 부호 비트는 src163, src131이다. 부호 발생기는 이들 부호 비트에 따라서 '1' 또는 '0' 패턴을 출력한다. 패턴의 길이는 디코딩된 MSHARD.W(16 비트) 및 MSHARD.L(32 비트) 명령에 대응하는 제어 신호에 의해 결정된다.
MSHALDS.W 및 MSHALDS.L 명령과 관련한 도 7을 참조 설명하면, 오버플로우 검출기(720)는 도출된 좌측 시프트 동작이 오버플로우를 발생할 것인지 여부에 대해 매트릭스(704)의 출력으로부터 판단한다. 포화값 발생기(722)는 데이터 크기, 216-1(16 비트) 또는 232-1(32 비트)에 따라서 검출기(720)에서 이용되는 상한을 규정한다. 만일 오버플로우가 예측되면 선택기 회로(730)에 의해 포화값이 생성된다.
MSHARDS.Q
이것은 부호화된 64 비트 소오스 Rm에 대한 연산 우측 시프트 명령이다. 시프트량은 Rn에서 규정된다. 결과는 포화를 갖고서 부호화된 16 비트값으로 다운 컨버트된 다음에 Rd에 위치된다. 이 명령은 전술한 논리적 및 연산 시프트와 거의 동일한 방식으로 실행된다. 부호 발생기(708)는 모든 '0' 또는 모든'1'의 64 비트 패턴에 대한 단일 부호 비트로서 src1`을 사용한다. 마스크 발생기(710)는 다른시프트 동작과 관련하여 전술한 바와 같이 동작한다. 오버플로우 검출은 216-1의 오버플로우값과 비교하는 검출기(720)에 의해 제공된다.
MCNVS.WB
MCNVS.WUB
이 들은 오퍼랜드 Rm 및 Rn 각각의 4개의 부호화된 16 비트 데이터를 8 비트값으로 변환시키는 다운 컨버젼 명령이다. 다운 컨버트된 데이터는 Rm' 및 Rn'으로 표현된다. 8개의 8 비트 결과는 부호화되거나(MCNVS.WB) 부호화되지 않은(MCNVS.WUB)이며 Rd에 위치된다. 8 비트 결과에 대한 포화는 필요에 따라 수행된다.
Rm: Rmw3, Rmw2, Rmw1, Rmw0
Rn: Rnw3, Rnw2, Rnw1, Rnw0
Rd: Rn'w3, Rn'w2, Rn'w1, Rn'w0, Rm'w3, Rm'w2,Rm'w1,Rm'w0
도 7을 참조로 설명하면, src1 및 src2는 다운 컨버젼에 대한 오퍼랜드이다. 비트 시프터(702)는 이들 명령의 실행에는 참여하지 않고 매트릭스(704)에 영향을 주지 않은 채로 src1 및 src2를 통과시킨다. 반면에 매트릭스(704)는 다운 컨버젼을 수행하는데 필요한 맵핑을 수행한다. 각 명령에 관련된 제어 신호에 응답하여 매트릭스(704)는 src1 및 src2 각각의 4개의 16 비트 그룹 각각으로부터 하위 8개 비트를 그 출력에서 생성한다. 8개 비트는 매트릭스의 64 비트 출력으로 묶여진다. 오버플로우 검출이 수행되며 8개 비트 필드 각각에 대한 포화가 제공된다.
MCNVS.W
이것은 오퍼랜드 Rm 및 Rn 각각의 2개의 32 비트 데이터를 16 비트값으로 변환시키는 다운 컨버젼 명령이다. 다운 컨버트된 데이터는 Rm' 및 Rn'으로 표현된다. 4개의 부호화된 16 비트 결과는 Rd에 위치된다. 16 비트 결과에 대한 포화는 필요에 따라 수행된다.
Rm: RmL1, RmL0
Rn: RnL1, RnL0
Rd: Rn'L1, Rn'L0, Rm'L1,Rm'L0
이 명령은 MCNVS.WB 및 MCNVS.WUB에 대해 전술한 것과 기본적으로 동일한 방식으로 실행되나, 32 비트 묶여진 소오스, src1 및 src2에서 실행되어 16 비트 결과를 생성한다.
MSHFHI.B
MSHFLO.B
이 들 명령은 오퍼랜드 Rm 및 Rn의 상위(HI) 또는 하위(LO) 절반에서의 8 비트 데이터를 뒤섞은(인터리브한) 다음에 결과를 Rd에 위치시킨다.
Rm: Rmb7, Rmb6, Rmb5, Rmb4, Rmb3, Rmb2, Rmb1, Rmb0
Rn: Rnb7, Rnb6, Rnb5, Rnb4, Rnb3, Rnb2, Rnb1, Rnb0
Rd: Rnb7, Rmb7, Rnb6, Rmb6, Rnb5, Rmb5, Rnb4, Rmb4(MSHFHI.B)
Rd: Rnb3, Rmb3, Rnb2, Rmb2, Rnb1, Rmb1, Rnb0, Rmb0(MSHFLO.B)
도 7을 참조로 설명하면, src1 및 src2는 다운 컨버젼에 대한 오퍼랜드이다. 비트 시프터(702)는 이들 명령의 실행에는 참여하지 않고 매트릭스(704)에 영향을 주지 않은 채로 src1 및 src2를 통과시킨다. 반면에 매트릭스(704)는 인터리브를 수행하는데 필요한 맵핑을 수행한다. 각 명령에 관련된 제어 신호에 응답하여 매트릭스(704)는 src1 및 src2 각각의 하위(MSHFLO.B) 또는 상위(MSHFHI.B) 절반 각각에서의 4개 바이트를 그 출력에서 인터리브한다. 그 다음 매트릭스의 출력은 출력(730)쪽으로 통과한다.
MSHFHI.W
MSHFLO.W
이 들 명령은 오퍼랜드 Rm 및 Rn의 상위(HI) 또는 하위(LO) 절반에서의 16 비트 데이터를 뒤섞은(인터리브한) 다음에 결과를 Rd에 위치시킨다.
Rm: Rmw3, Rmw2, Rmw1, Rmw0
Rn: Rnw3, Rnw2, Rnw1, Rnw0
Rd: Rnw3, Rmw3, Rnw2, Rmw2(MSHFHI.W)
Rd: Rnw1, Rmw1, Rnw0, Rmw0(MSHFLO.W)
이들 명령은 MSHFHI(LO).B에 대해 전술한 것과 기본적으로 동일한 방식으로실행되나, src1 및 src2 각각의 상위(하위) 절반에서의 2개의 16 비트 워드에서 실행된다.
MSHFHI.L
MSHFLO.L
이 들 명령은 오퍼랜드 Rm 및 Rn의 상위(HI) 또는 하위(LO) 절반에서의 32 비트 데이터를 뒤섞은(인터리브한) 다음에 결과를 Rd에 위치시킨다.
Rm: RmL1, RmL0
Rn: RnL1, RnL0
Rd: RnL1, RmL1(MSHFHI.L)
Rd: RnL1, RmL0(MSHFLO.L)
이들 명령은 MSHFHI(LO).B 및 MSHFHI(LO).W에 대해 전술한 것과 기본적으로 동일한 방식으로 실행되나, src1 및 src2 각각의 상위(하위) 절반에서의 32 비트 롱워드에서 실행된다.
MPERM.W
이 명령은 제어 오퍼랜드 Rn에 규정된 교환에 따라서 소오스 오퍼랜드 Rm내의 4개의 묶여진 16 비트 데이터의 순서를 교환한다. 그 결과는 결과 오퍼랜드 Rd로 간다. 결과 오퍼랜드에서의 4개의 16 비트 필드 각각에 대해서 제어 오퍼랜드내의 2 비트 식별자는 소오스 오퍼랜드로부터의 어느 16 비트 필드가 그 결과 필드에 카피되었는가를 판단한다. 일 실시예에서는 src2의 최하위 8개 비트는 4개의 2비트 식별자를 포함한다. 따라서 만일 src1이 4개의 16 비트 필드, src1w3, src1w2, src1w1, 및 src1w0를 포함한다면,
src2:101100012src3에서의 결과: src1w2, src1w3, src1w0, 및 src1w1,
src2:001011012src3에서의 결과: src1w0, src1w2, src1w3, 및 src1w1,
src2:111000112src3에서의 결과: src1w3, src1w2, src1w0, 및 src1w3, 등
마지막 예는 소오스에서의 16 비트 필드가 목적지에서 여러번 복제될 수 있음을 보여준다.
이제 도 7을 참조로 설명한다면, 비트 시프터(702)는 MPERM.W에는 참여하지 않고 src1 및 src2는 변경되지 않은 채로 비트 시프터를 통과하여 매트릭스(704)로 들어간다. src2에서의 id 비트는 매트릭스(704)의 제어 입력(756)에 공급된다. MPERM.W 명령의 디코딩에 응답하여 생성된 제어 신호는 매트릭스(704)에 공급된다. id 비트에 기초하여 매트릭스(704)는 그 출력에서 규정된 교환을 생성한다.
도 11은 MPERM.W 명령에 대해 일어나는 선택을 보여준다. 입력 src1의 64 비트라인은 선택기 회로(1103-1100) 각각에 공급된다. 더 구체적으로, 각 선택기는 4개의 16 비트 입력을 포함한다. src1의 4개의 16 비트 필드 각각은 대응 입력에 공급된다. src2 id 비트는 선택기의 선택 입력에 공급된다. 비트 1, 0은 선택기(1100)을, 비트 3, 2는 선택기(1101)를, 비트 5, 4는 선택기(1102)를, 그리고 비트 7, 6은 선택기(1103)를 제어한다. 각 선택기 출력은 도 11에서 대응 비트 위치로 표시된 16 비트 결과 필드 중 어느 한 필드에 대응한다. 그러므로 각 선택기(1103-1100)는 src1의 4개 16 비트 필드 내지 src3의 4개 16 비트 필드 중 임의의 필드를 생성할 수 있다. 이들 라인은 궁극적으로 조합되어 MPERM.W 명령에 대한 단일 64 비트 출력이 된다.
MEXTRm - MEXTR7
이들 명령은 2개의 연결된 레지스터 Rm 및 Rn에 걸쳐 8 바이트를 추출하여 1-7 바이트만큼 우측으로부터 오프셋시킨다. 추출된 바이트들은 Rd에 위치된다.
Rm, Rn: Rmb7, Rmb6, Rmb5, Rmb4, Rmb3, Rmb2, Rmb1, Rmb0,Rnb7, Rnb6, Rnb5, Rnb4, Rnb3, Rnb2, Rnb1, Rnb0
Rd: Rmb0, Rnb7, Rnb6, Rnb5, Rnb4, Rnb3, Rnb2, Rnb1(MEXTR1)
Rd: Rmb1, Rmb0, Rnb7, Rnb6, Rnb5, Rnb4, Rnb3, Rnb2(MEXTR2)
Rd: Rmb2, Rmb1, Rmb0, Rnb7, Rnb5, Rnb5, Rnb4, Rnb3(MEXTR3)
Rd: Rmb3, Rmb2, Rmb1, Rmb0, Rnb7, Rnb6, Rnb5, Rnb4(MEXTR4)
Rd: Rmb4, Rmb3, Rmb2, Rmb1, Rmb0, Rnb7, Rnb6, Rnb5(MEXTR5)
Rd: Rmb5, Rmb4, Rmb3, Rmb2, Rmb1, Rmb0, Rnb7, Rnb6(MEXTR6)
Rd: Rmb6, Rmb5, Rmb4, Rmb3, Rmb2, Rmb1, Rmb0, Rnb7(MEXTR7)
도 7을 참조로 설명하면, Rm은 src1에 공급되고 Rn은 src2에 공급된다. 비트 시프터(702)는 src1과 src2에 대해 아무런 동작을 취하지 않고 이들을 변경시키지 않은 채로 매트릭스(704)로 보낸다. 매트릭스(704)는 src1로부터 적당한 수의 인접 바이트를 선택하여 이들을 그 출력의 상위 부분의 대응 위치에서 생성한다. 그 다음, 매트릭스(704)는 src2로부터 적당한 수의 인접 바이트를 선택하여 이들을 그 출력의 하위 부분의 대응 위치에서 생성한다. MEXTR* 명령 각각에 대응하는 제어 신호는 src1 및 src2 각각에서 얼마나 많은 바이트가 선택되어 있는가 하는 것을 규정한다.
MCMV
이 명령은 마스크 Rn 내의 대응 비트의 비트 세팅에 기초하여 목적지 Rd 내의 대응 비트 위치로의 오퍼랜드 Rm으로부터의 비트의 종래의 비트와이즈 카피를 수행한다.
Rm: Rm63, Rm62... Rm1,Rm0
Rd: Rdn,이 설정되면 Rdn←Rmn
도 8에 도시된 논리 회로를 참조로 설명하면, 오퍼랜드 레지스터 Rm은 src1에 공급되고 마스크 레지스터 Rn은 src2에 공급된다. 목적지 레지스터 Rd도 논리 회로에 src3로서 공급된다. src1 및 src3의 각 대응 비트쌍은 각각 선택기 회로(801-863)의 'a' 입력 및 'b' 입력에 공급된다. src2의 각 비트는 선택기 회로를 제어한다.
동작에 있어, 각 선택기 회로(801-863)는 src2의 대응 비트, 즉 비트 위치 n이 제1 논리 상태에 있다면 'a' 입력, 즉 src1n을 생성할 것이다. 마찬가지로 src2의 비트 위치 n에서의 비트가 제2 논리 상태에 있다면 'b' 입력, 즉 src3n을 생성할 것이다. 선택기 회로(801-863)의 출력은 조합되어 64 비트 출력(880)을 구성한다.
따라서 src1 및 src3으로부터의 비트는 src2 내의 대응하여 위치된 비트의 논리 상태에 따라서 출력(880)에 조건부로 카피된다. 출력(880)은 목적지 레지스터 Rd에 다시 공급된다. 그 결과, 이것은 마스크 레지스터 Rn의 내용에 기초하여 소오스 레지스터 Rm으로부터 목적지 레지스터 Rd로 비트를 조건부로 이동시키는 명령을 제공하는 효과를 갖는다.
MSAD
이 기능은 Rm 및 Rn에 포함된 8 바이트에 대한 합-차(sum-of-differences) 동작을 수행한다. 이 동작은 다음과 같이 표현된다.
도 6을 참조로 설명하면, 오퍼랜드 Rm 및 Rn은 각각 src1 및 src2에 공급된다. MSAD 명령에 있어서, 선택기(110)는 src1 및 src2의 16 비트 x 및 y 데이터 라인으로의 다음의 16 비트 맵핑을 생성한다.
16 비트 맵핑
src1[63:48] ⇒x3src2[63:48] ⇒y3
src1[47:32] ⇒x2src2[47:32] ⇒y2
src1[31:16] ⇒x1src2[31:16] ⇒y1
src1[15:0] ⇒x0src2[15:0] ⇒y0
그러나 MSAD 명령에 있어서 src1 및 src2 각각은 8개의 8 비트 데이토 요소를 포함한다. 그 결과, 도 6에 도시된 바와 같이 16 비트 xn및 yn데이터 라인 각각은 8 비트 라인으로 더 분할된다. 이것은 이 명령에 대한 src1 및 src2에서 8 비트 데이터 요소를 생성한다.
각각의 8 비트 라인쌍 x/y는 감산 장치(601-608) 중 하나에 공급된다. 도 6과 관련하여 전술한 바와 같이, 각 감산 장치는 그 입력들 간의 차이의 절대값을 생성한다. 감산기(601-608)의 출력은 회로(120-126)의 승산 결과라기보다는 선택기 회로(660)에 의해 선택되어 단 2에서의 프로세싱을 위해 P2에 래치된다.
도 1을 참조로 설명하면, 감산기 출력은 교차 회로(152)에 의해 묶여져 64 비트 합 및 캐리 라인쌍(153)으로 된다. 선택기 회로(114, 116)는 라인(153)을 압축 회로(160)에 공급한다. MSAD 명령에 있어서 오퍼랜드 Rd는 src3에 공급되며 이것은 선택기 회로(112)에 의해 추출되어 압축기(160)에 공급된다. 압축 회로는 그 입력들을 조합하여 출력(161)을 생성하며, 이것은 P3 래치를 통해 단 3에 공급된다.
단 3에서, 가산기 회로(170)는 최종 합을 생성한다. 이 회로의 32 비트 출력은 선택기 회로(118, 119)에 의해 조합되어 Rd와 조합된 절대차 출력의 원하는64 비트 합을 생성한다. 도 4를 참조로 설명하면, 가산기 회로(170)는 MSAD 명령에 대응하는 제어 신호에 의해 단일 4 단 캐리 전파 가산기로 구성된다. 따라서 선택기 회로(420-424)는 그들의 'a' 입력을 생성하도록 제어된다. 이에 의해 각 전 가산기(400-402)의 캐리 아웃은 후속되는 가산기로 전파된다. 그 결과, 입력 합 및 캐리 라인(163)의 64 비트 가산이 수행된다.
제1 선택기의 입력들을 여러 가지 계열로 만들어 승산 회로로 보낼 수 있는 구성에 의해서 여러 가지 명령을 수용하는 유연한 회로를 만들 수 있다. 특히, 각 포맷에 대해 주문 제작된 회로를 제공할 필요없이 다양한 크기의 데이터 포맷에 대해서 동일한 명령이 구현될 수 있다. 이중 오버플로우 검출 논리도 다중 데이터 포맷을 지원한다. 게다가, 오버플로우 검출은 중간 결과로서 발생되기 때문에 오버플로우 상황은 더욱 정확히 조절될 수 있다.

Claims (33)

  1. 프로세싱 코어에서 L 비트 데이터를 승산하기 위한 방법에 있어서,
    기계어 레벨 명령을 수신하는 단계;
    상기 명령을 디코딩하는 단계;
    상기 명령의 상기 디코딩에 응답하여,
    제1의 L 비트 데이터를 제공하는 단계;
    제2의 L 비트 데이터를 제공하는 단계;
    상기 제1 데이터의 L 비트를 N개의 세그먼트(segment) - 세그먼트 각각은 제1의 N항 다항식에서 항으로 취급됨 -로 그룹짓는 단계;
    상기 제2 데이터의 L 비트를 M개의 세그먼트 - 세그먼트 각각은 제2의 M항 다항식에서 항으로 취급됨 -로 그룹짓는 단계;
    상기 제1의 데이터의 상기 N개의 세그먼트에 상기 제2의 데이터의 상기 M개의 세그먼트를 다항식 형태로 승산하여 다수의 중간 곱 항을 생성하는 단계; 및
    상기 중간 곱 항들을 합산하는 단계
    를 포함하는 것을 특징으로 하는 비트 데이터 승산 방법.
  2. 제1항에 있어서, 데이터를 리틀 인디언(little endian) 포맷으로 저장하는 단계를 더 포함하며, 상기 합산 단계는 상기 중간 곱 항들 중 일부를 최대 L 비트 위치만큼 좌측으로 시프트시키는 단계를 포함하는 것을 특징으로 하는 비트 데이터승산 방법.
  3. 제1항에 있어서, 상기 N개의 세그먼트는 동일 크기의 세그먼트이며, 상기 M개의 세그먼트는 동일 크기의 세그먼트인 것을 특징으로 하는 비트 데이터 승산 방법.
  4. 제1항에 있어서, L은 32인 것을 특징으로 하는 비트 데이터 승산 방법.
  5. 제4항에 있어서, N은 2이고 M은 2인 것을 특징으로 하는 비트 데이터 승산 방법.
  6. 제1항에 있어서, 데이터를 빅(big) 인디언 포맷으로 나타내는 단계를 더 포함하는 것을 특징으로 하는 비트 데이터 승산 방법.
  7. 제1항에 있어서, N은 2이고, M은 2이고, 상기 제1의 데이터와 상기 제2의 데이터 각각은 상위(high order) 세그먼트와 하위 세그먼트를 포함하고,
    상기 승산 단계는
    상기 제1의 데이터의 상기 상위 세그먼트에 상기 제2의 데이터의 상기 상위 세그먼트를 승산하여 제1의 중간 곱 항을 생성하는 단계;
    상기 제1의 데이터의 상기 상위 세그먼트에 상기 제2의 데이터의 상기 하위세그먼트를 승산하여 제2의 중간 곱 항을 생성하는 단계;
    상기 제1의 데이터의 상기 하위 세그먼트에 상기 제2의 데이터의 상기 상위 세그먼트를 승산하여 제3의 중간 곱 항을 생성하는 단계; 및
    상기 제1의 데이터의 상기 하위 세그먼트에 상기 제2의 데이터의 상기 하위 세그먼트를 승산하여 제4의 중간 곱 항을 생성하는 단계
    를 포함하는 것을 특징으로 하는 비트 데이터 승산 방법.
  8. 제7항에 있어서, 데이터를 리틀 인디언 포맷으로 나타내는 단계를 더 포함하며, 상기 합산 단계는 상기 제1의 중간 곱 항을 L 비트 위치만큼 좌측으로 시프트시키고 상기 제2 및 제3의 중간 곱 항 각각을 L/2 비트 위치만큼 좌측으로 시프트시키는 단계를 포함하는 것을 특징으로 하는 비트 데이터 승산 방법.
  9. 제8항에 있어서, L은 32인 것을 특징으로 하는 비트 데이터 승산 방법.
  10. 중앙 처리 장치를 구비한 데이터 처리 시스템의 승산 방법에 있어서,
    단일 명령을 수신하는 단계;
    상기 단일 명령을 디코딩하는 단계;
    상기 디코딩에 응답하여,
    상위 L/2 비트인 Ah와 하위 L/2 비트인 Al로 표현되는 제1의 L 비트 데이터를제공하는 단계;
    상위 L/2 비트인 Bh와 하위 L/2 비트인 Bl로 표현되는 제2의 L 비트 데이터를 제공하는 단계;
    Ah×Bh×2L인 제1의 곱 항을 발생시키는 단계;
    Ah×B1×2L/2인 제2의 곱 항을 발생시키는 단계;
    Al×Bh×2L/2인 제3의 곱 항을 발생시키는 단계;
    Al×Bl인 제4의 곱 항을 발생시키는 단계; 및
    상기 제1, 제2, 제3, 및 제4의 곱 항을 합산하는 단계
    를 포함하는 것을 특징으로 하는 승산 방법.
  11. 제10항에 있어서, 상기 제1의 곱 항을 발생시키는 단계는 중간 곱 Ah×Bh를 발생시킨 다음에 이 중간 곱을 나타내는 비트를 L 비트만큼 시프트시키는 단계를 포함하는 것을 특징으로 하는 승산 방법.
  12. 제11항에 있어서, 상기 시프트시키는 단계는 2×L 비트를 갖는 출력을 생성하고 중간 곱을 나타내는 비트를 상기 출력의 상위 L 비트에 공급하는 단계를 포함하는 것을 특징으로 하는 승산 방법.
  13. 제12항에 있어서, 상기 제2의 곱 항을 발생시키는 단계는 중간 곱 Ah×B1을 발생시킨 다음에 이 중간 곱을 나타내는 비트를 L/2 비트만큼 시프트시키는 단계를 포함하는 것을 특징으로 하는 승산 방법.
  14. 제13항에 있어서, 상기 제3의 곱 항을 발생시키는 단계는 중간 곱 Al×Bh를 발생시킨 다음에 이 중간 곱을 나타내는 비트를 L/2 비트만큼 시프트시키는 단계를 포함하는 것을 특징으로 하는 승산 방법.
  15. 제10항에 있어서, L은 32인 것을 특징으로 하는 비트 데이터 승산 방법.
  16. RISC 방식 컴퓨팅 장치에서 승산하기 위한 방법에 있어서,
    제1 형태의 명령을 수신하는 단계;
    상기 제1의 명령을 디코딩하는 단계;
    상기 제1의 명령의 디코딩에 응답하여,
    ⅰ) 제1의 범용(general purpose) L 비트 레지스터와의 데이터 통신을 제공하는 단계;
    ⅱ) 제2의 범용 L 비트 레지스터와의 데이터 통신을 제공하는 단계;
    ⅲ) 상기 제1의 레지스터의 하위 L/2 비트와 상기 제2의 레지스터의 하위L/2 비트를 판독하는 단계;
    ⅳ) 상기 제1의 레지스터의 상기 하위 L/2 비트에 상기 제2의 레지스터의 상기 하위 L/2 비트를 승산하여 제1의 곱 항을 생성하는 단계;
    ⅴ) 상기 제1의 레지스터의 상위 L/2 비트와 상기 제2의 레지스터의 상위 L/2 비트를 판독하는 단계;
    ⅵ) 상기 제1의 레지스터의 상기 상위 L/2 비트에 상기 제2의 레지스터의 상기 상위 L/2 비트를 승산하여 제2의 곱 항을 생성하는 단계;
    ⅶ) 상기 제2의 곱 항을 L 비트만큼 시프트시키는 단계; 및
    ⅷ) 상기 제1의 곱 항을 상기 시프트된 제2의 곱 항에 합산하는 단계
    를 포함하는 것을 특징으로 하는 승산 방법.
  17. 제16항에 있어서, 상기 단계 (ⅳ)와 (ⅵ)은 오버플로우 검출 단계를 포함하는 것을 특징으로 하는 승산 방법.
  18. 제17항에 있어서, 상기 단계 (ⅷ)은 오버플로우 검출 단계를 포함하는 것을 특징으로 하는 승산 방법.
  19. 제16항에 있어서,
    제2 형태의 명령을 수신하는 단계;
    상기 제2의 명령을 디코딩하는 단계;
    상기 제2의 명령의 디코딩에 응답하여,
    ⅸ) 제3의 범용 L 비트 레지스터와의 데이터 통신을 제공하는 단계;
    ⅹ) 제4의 범용 L 비트 레지스터와의 데이터 통신을 제공하는 단계;
    xi ) 상기 제3의 레지스터의 N개의 세그먼트와 상기 제4의 레지스터의 N개의 세그먼트를 판독하는 단계; 및
    xii) 상기 제3의 레지스터의 상기 세그먼트에 상기 제4의 레지스터의 대응 세그먼트를 승산하여 N개의 곱 항을 생성하는 단계
    를 더 포함하는 것을 특징으로 하는 승산 방법.
  20. 제19항에 있어서, 상기 단계 (ⅳ)와 (ⅵ)은 상기 하위 비트와 상기 상위 비트를 승산기 회로에 공급하는 단계를 포함하는 것을 특징으로 하는 승산 방법.
  21. 제20항에 있어서, 상기 단계 (xii)는 상기 세그먼트를 상기 승산기 회로에 공급하는 단계를 포함하는 것을 특징으로 하는 승산 방법.
  22. 레지스터 파일과 연산 장치를 구비한 프로세싱 코어의 연산 장치에 있어서,
    상기 레지스터 파일로부터 선택된 제1의 레지스터의 내용을 수신하는데 효과적인 제1 세트의 입력 데이터 라인;
    상기 레지스터 파일로부터 선택된 제2의 레지스터의 내용을 수신하는데 효과적인 제2 세트의 입력 데이터 라인;
    먹스 입력 라인과 먹스 출력 라인을 구비하며, 상기 먹스 입력은 상기 제1 및 제2 세트의 입력 데이터 라인과 데이터 통신하며, 상기 먹스 입력은 서브세트의 먹스 입력 라인으로 그룹지워지며, 상기 먹스 출력은 서브세트의 먹스 출력 라인으로 그룹지워지는 제1의 멀티플렉서;
    각각이 상기 서브세트의 먹스 출력 라인 중 하나와 데이터 통신하는 입력을 구비하며, 각각이 중간 출력을 구비한 다수의 승산 회로;
    상기 중간 출력과 데이터 통신하는 입력과 출력을 구비하며, 상기 중간 출력 각각에 대응하는 곱 항을 출력하는데 효과적인 제1의 가산기 회로;
    상기 중간 출력과 데이터 통신하는 입력과 출력을 구비하며, 상기 중간 출력으로부터 단일 곱 항을 출력하는데 효과적인 제2의 가산기 회로; 및
    상기 제1의 가산기의 출력 및 상기 제2의 가산기의 출력과 데이터 통신하는 입력과 출력을 구비하는 제2의 멀티플렉서 - 상기 제1의 가산기의 출력이나 상기 제2의 가산기의 출력은 상기 제2의 멀티플렉서의 출력에서 생성됨 -
    를 포함하는 것을 특징으로 하는 연산 장치.
  23. 제22항에 있어서, 상기 승산 회로 각각은 캐리 출력과 합 출력을 생성하는 왈라스 트리 승산기(Wallace tree multiplier)인 것을 특징으로 하는 연산 장치.
  24. 제23항에 있어서, 상기 제1의 가산기 회로는 캐리 전파 가산기 회로인 것을 특징으로 하는 연산 장치.
  25. 제24항에 있어서, 상기 제2의 가산기 회로는 압축 회로와 상기 압축 회로의 출력과 데이터 통신하는 캐리 전파 가산기를 포함하는 것을 특징으로 하는 연산 장치.
  26. 제22항에 있어서, 상기 승산 회로 각각은 관련 오버플로우 예측 회로를 포함하며, 상기 오버플로우 예측 회로는 관련 승산 회로의 입력과 데이터 통신하는 입력과 출력을 구비하며, 상기 승산 회로 각각은 그 중간 출력값이나 소정의 값을 출력하기 위한 관련 선택기를 더 포함하며, 상기 선택기는 오버플로우/언더플로우 예측 회로의 출력에 공급되는 선택기 입력을 포함하는 것을 특징으로 하는 연산 장치.
  27. 제22항에 있어서, 상기 제2의 가산기 회로는 관련 제2의 오버플로우 예측 회로를 포함하며, 상기 제2의 오버플로우 예측 회로는 상기 제2의 가산기 회로의 입력과 데이터 통신하는 입력과 출력을 구비하며, 상기 제2의 가산기 회로는 상기 제2의 가산기 회로의 출력이나 소정의 값을 출력하기 위한 관련 제2의 선택기를 더 포함하며, 상기 선택기는 상기 제2의 오버플로우 예측 회로의 출력에 공급되는 선택기 입력을 포함하는 것을 특징으로 하는 연산 장치.
  28. 제1, 제2, 및 제3의 입력을 가지며, 상기 입력들을 수신하기 위해 결합된제1의 선택기, 상기 제1의 선택기의 출력을 수신하기 위해 결합된 승산 회로 세트, 각각이 상기 승산 회로의 출력에 대해 상이한 데이터 변환을 생성하는 제1, 제2, 및 제3 변환 경로, 상기 변환 경로들을 수신하기 위해 결합된 제2의 선택기, 상기 제2의 선택기의 출력과 상기 제3의 입력을 수신하기 위해 결합된 압축 회로, 및 상기 제2의 선택기의 출력을 수신하기 위해 결합된 가산기 회로를 포함하는 승산 장치를 구비한 프로세싱 코어에서 승산하기 위한 방법에 있어서,
    제1의 제어 신호를 생성하기 위하여 제1의 명령을 디코딩하는 단계;
    상기 제1의 제어 신호에 응답하여,
    제1 및 제2의 데이터를 상기 제1의 선택기 - 상기 제1의 선택기는 상기 제1 및 제2의 데이터를 서브그룹으로 분할함 -에 공급하는 단계;
    상기 서브그룹을 제1의 계열(sequence)에 따라서 상기 승산 회로에 인가하는 단계;
    상기 제1의 변환 경로로부터 상기 압축 회로로 데이터를 선택하는 단계;
    상기 압축 회로를 바이패스시키는 단계; 및
    상기 가산기 회로에서 단일 가산 동작을 수행하는 단계
    를 포함하는 것을 특징으로 하는 승산 방법.
  29. 제28항에 있어서, 상기 제1의 명령은 32 비트 승산 명령인 것을 특징으로 하는 승산 방법.
  30. 제29항에 있어서, 상기 제1 및 제2의 데이터 서브그룹의 상기 제1의 계열은 2개의 이항식 항으로 승산되는 것을 특징으로 하는 승산 방법.
  31. 제29항에 있어서,
    제2의 제어 신호를 생성하기 위하여 제2의 명령을 디코딩하는 단계;
    상기 제2의 제어 신호에 응답하여,
    제3 및 제4의 데이터를 상기 제1의 선택기 - 상기 제1의 선택기는 상기 제3 및 제4의 데이터를 서브그룹으로 분할함 - 에 공급하는 단계;
    상기 서브그룹을 제2의 계열에 따라서 상기 승산 회로에 인가하는 단계;
    상기 제2의 변환 경로에서 상기 압축 회로까지 데이터를 선택하는 단계;
    상기 압축 회로를 바이패스시키는 단계; 및
    상기 가산기 회로에서 단일 가산 동작을 수행하는 단계
    를 더 포함하는 것을 특징으로 하는 승산 방법.
  32. 제31항에 있어서,
    제3의 제어 신호를 생성하기 위하여 제3의 명령을 디코딩하는 단계;
    상기 제3의 제어 신호에 응답하여,
    제5 및 제6의 데이터를 상기 제1의 선택기 - 상기 제1의 선택기는 상기 제5 및 제6의 데이터를 서브그룹으로 분할함 -에 공급하는 단계;
    상기 서브그룹을 제2의 계열에 따라 상기 승산 회로에 인가하는 단계;
    상기 제3의 변환 경로로부터 상기 압축 회로로 데이터를 선택하는 단계;
    상기 압축 회로를 바이패스시키는 단계; 및
    상기 가산기 회로에서 4개의 독립적인 가산 동작을 동시에 수행하는 단계
    를 더 포함하는 것을 특징으로 하는 승산 방법.
  33. 제31항에 있어서,
    제3의 제어 신호를 생성하기 위하여 제3의 명령을 디코딩하는 단계;
    상기 제3의 제어 신호에 응답하여,
    제7 및 제8의 데이터를 상기 제1의 선택기 - 상기 제1의 선택기는 상기 제7 및 제8의 데이터를 서브그룹으로 분할함 -에 공급하는 단계;
    상기 서브그룹을 제2의 계열에 따라서 상기 승산 회로에 인가하는 단계;
    상기 제2의 변환 경로로부터 상기 압축 회로로 데이터를 선택하는 단계;
    상기 압축 회로를 동작시켜 상기 제2의 변환 경로로부터의 데이터를 상기 제3의 입력과 조합하는 단계; 및
    상기 가산기 회로에서 2개의 독립적인 가산 동작을 동시에 수행하는 단계
    를 더 포함하는 것을 특징으로 하는 승산 방법.
KR1020000057808A 1999-10-01 2000-10-02 벡터화 데이터에 대한 연산 동작 방법 및 장치 KR20010067275A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/411,620 1999-10-01
US09/411,620 US6574651B1 (en) 1999-10-01 1999-10-01 Method and apparatus for arithmetic operation on vectored data

Publications (1)

Publication Number Publication Date
KR20010067275A true KR20010067275A (ko) 2001-07-12

Family

ID=23629667

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000057808A KR20010067275A (ko) 1999-10-01 2000-10-02 벡터화 데이터에 대한 연산 동작 방법 및 장치

Country Status (4)

Country Link
US (1) US6574651B1 (ko)
JP (1) JP2001147798A (ko)
KR (1) KR20010067275A (ko)
TW (1) TW564368B (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7206800B1 (en) 2000-08-30 2007-04-17 Micron Technology, Inc. Overflow detection and clamping with parallel operand processing for fixed-point multipliers
US6959316B2 (en) * 2001-02-01 2005-10-25 Nokia Mobile Phones Limited Dynamically configurable processor
US6882685B2 (en) * 2001-09-18 2005-04-19 Microsoft Corporation Block transform and quantization for image and video coding
US7107305B2 (en) * 2001-10-05 2006-09-12 Intel Corporation Multiply-accumulate (MAC) unit for single-instruction/multiple-data (SIMD) instructions
JP4073721B2 (ja) 2002-06-28 2008-04-09 株式会社ルネサステクノロジ データ処理装置
JP3940714B2 (ja) * 2003-09-25 2007-07-04 株式会社東芝 演算装置、および、暗号・復号演算装置
JP4502662B2 (ja) * 2004-02-20 2010-07-14 アルテラ コーポレイション 乗算器−累算器ブロックモード分割
US7987222B1 (en) * 2004-04-22 2011-07-26 Altera Corporation Method and apparatus for implementing a multiplier utilizing digital signal processor block memory extension
US20060004903A1 (en) * 2004-06-30 2006-01-05 Itay Admon CSA tree constellation
US7513702B2 (en) * 2005-11-16 2009-04-07 Va, Inc. Non-contact shutter activation system and method
US8082287B2 (en) * 2006-01-20 2011-12-20 Qualcomm Incorporated Pre-saturating fixed-point multiplier
KR20070088190A (ko) * 2006-02-24 2007-08-29 삼성전자주식회사 멀티미디어 데이터 처리를 위한 서브워드 병렬 처리 방법
WO2008022307A2 (en) * 2006-08-18 2008-02-21 Conexant Systems, Inc. Systems and methods for implementing a double precision arithmetic memory architecture
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8942289B2 (en) * 2007-02-21 2015-01-27 Microsoft Corporation Computational complexity and precision control in transform-based digital media codec
GB0716158D0 (en) * 2007-08-17 2007-09-26 Imagination Tech Ltd Data compression
JP2009169709A (ja) * 2008-01-17 2009-07-30 Nec Computertechno Ltd ベクトル演算装置
JP2009134745A (ja) * 2009-01-30 2009-06-18 Renesas Technology Corp データ処理装置
CN102201815B (zh) * 2010-03-25 2015-03-18 承景科技股份有限公司 高运算频率的二进制运算解码装置
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US9910670B2 (en) * 2014-07-09 2018-03-06 Intel Corporation Instruction set for eliminating misaligned memory accesses during processing of an array having misaligned data rows

Family Cites Families (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4467444A (en) 1980-08-01 1984-08-21 Advanced Micro Devices, Inc. Processor unit for microcomputer systems
EP0165600B1 (en) 1984-06-20 1991-11-21 Convex Computer Corporation Input/output bus for computer
US4935867A (en) 1986-03-04 1990-06-19 Advanced Micro Devices, Inc. Signal processor memory management unit with indirect addressing using selectable offsets and modulo values for indexed address calculations
US4814981A (en) 1986-09-18 1989-03-21 Digital Equipment Corporation Cache invalidate protocol for digital data processing system
CA1311063C (en) * 1988-12-16 1992-12-01 Tokumichi Murakami Digital signal processor
US5483518A (en) 1992-06-17 1996-01-09 Texas Instruments Incorporated Addressable shadow port and protocol for serial bus networks
JPH0666056B2 (ja) 1989-10-12 1994-08-24 甲府日本電気株式会社 情報処理システム
JPH03217949A (ja) 1990-01-23 1991-09-25 Hitachi Ltd 計算機システム
US5452432A (en) 1990-08-14 1995-09-19 Chips And Technologies, Inc. Partially resettable, segmented DMA counter
JP2984463B2 (ja) 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
US5423050A (en) 1991-11-27 1995-06-06 Ncr Corporation Intermodule test across system bus utilizing serial test bus
US5724549A (en) 1992-04-06 1998-03-03 Cyrix Corporation Cache coherency without bus master arbitration signals
GB2266606B (en) 1992-04-27 1996-02-14 Intel Corp A microprocessor with an external command mode
US5448576A (en) 1992-10-29 1995-09-05 Bull Hn Information Systems Inc. Boundary scan architecture extension
JP3231429B2 (ja) 1992-11-06 2001-11-19 株式会社日立製作所 中央処理装置と乗算器とを有する半導体集積回路装置
JP3524110B2 (ja) 1992-11-06 2004-05-10 株式会社ルネサステクノロジ マイクロコンピュータシステム
JPH06150023A (ja) 1992-11-06 1994-05-31 Hitachi Ltd マイクロコンピュータ及びマイクロコンピュータシステム
US5627842A (en) 1993-01-21 1997-05-06 Digital Equipment Corporation Architecture for system-wide standardized intra-module and inter-module fault testing
JP2731692B2 (ja) 1993-04-28 1998-03-25 日本電気アイシーマイコンシステム株式会社 デバッグ装置
US5598551A (en) 1993-07-16 1997-01-28 Unisys Corporation Cache invalidation sequence system utilizing odd and even invalidation queues with shorter invalidation cycles
DE69415600T2 (de) 1993-07-28 1999-07-15 Koninkl Philips Electronics Nv Mikrokontroller mit hardwaremässiger Fehlerbeseitigungsunterstützung nach dem Boundary-Scanverfahren
JP3904244B2 (ja) 1993-09-17 2007-04-11 株式会社ルネサステクノロジ シングル・チップ・データ処理装置
EP0652516A1 (en) 1993-11-03 1995-05-10 Advanced Micro Devices, Inc. Integrated microprocessor
US5596734A (en) 1993-12-17 1997-01-21 Intel Corporation Method and apparatus for programming embedded memories of a variety of integrated circuits using the IEEE test access port
US5828825A (en) 1993-12-22 1998-10-27 Intel Corporation Method and apparatus for pseudo-direct access to embedded memories of a micro-controller integrated circuit via the IEEE test access port
US5535405A (en) 1993-12-23 1996-07-09 Unisys Corporation Microsequencer bus controller system
US5434804A (en) 1993-12-29 1995-07-18 Intel Corporation Method and apparatus for synchronizing a JTAG test control signal to an on-chip clock signal
WO1995019006A1 (en) 1994-01-10 1995-07-13 The Dow Chemical Company A massively miltiplexed superscalar harvard architecture computer
US5488688A (en) 1994-03-30 1996-01-30 Motorola, Inc. Data processor with real-time diagnostic capability
JPH07287668A (ja) 1994-04-19 1995-10-31 Hitachi Ltd データ処理装置
GB9417602D0 (en) 1994-09-01 1994-10-19 Inmos Ltd A controller for implementing scan testing
JP3672634B2 (ja) 1994-09-09 2005-07-20 株式会社ルネサステクノロジ データ処理装置
JPH08329687A (ja) 1995-06-05 1996-12-13 Hitachi Ltd 半導体集積回路
JP3713312B2 (ja) 1994-09-09 2005-11-09 株式会社ルネサステクノロジ データ処理装置
JP3740195B2 (ja) 1994-09-09 2006-02-01 株式会社ルネサステクノロジ データ処理装置
US5848247A (en) 1994-09-13 1998-12-08 Hitachi, Ltd. Microprocessor having PC card interface
US5613153A (en) 1994-10-03 1997-03-18 International Business Machines Corporation Coherency and synchronization mechanisms for I/O channel controllers in a data processing system
US5751621A (en) 1994-11-17 1998-05-12 Hitachi, Ltd. Multiply-add unit and data processing apparatus using it
TW330265B (en) 1994-11-22 1998-04-21 Hitachi Ltd Semiconductor apparatus
JP2752592B2 (ja) 1994-12-28 1998-05-18 日本ヒューレット・パッカード株式会社 マイクロプロセッサ、マイクロプロセッサ−デバッグツール間信号伝送方法及びトレース方法
US5778237A (en) 1995-01-10 1998-07-07 Hitachi, Ltd. Data processor and single-chip microcomputer with changing clock frequency and operating voltage
US5664197A (en) 1995-04-21 1997-09-02 Intel Corporation Method and apparatus for handling bus master channel and direct memory access (DMA) channel access requests at an I/O controller
US5867726A (en) 1995-05-02 1999-02-02 Hitachi, Ltd. Microcomputer
US5570375A (en) 1995-05-10 1996-10-29 National Science Council Of R.O.C. IEEE Std. 1149.1 boundary scan circuit capable of built-in self-testing
US5860127A (en) 1995-06-01 1999-01-12 Hitachi, Ltd. Cache memory employing dynamically controlled data array start timing and a microcomputer using the same
US5774701A (en) 1995-07-10 1998-06-30 Hitachi, Ltd. Microprocessor operating at high and low clok frequencies
US5708773A (en) 1995-07-20 1998-01-13 Unisys Corporation JTAG interface system for communicating with compliant and non-compliant JTAG devices
US5737516A (en) 1995-08-30 1998-04-07 Motorola, Inc. Data processing system for performing a debug function and method therefor
US5704034A (en) 1995-08-30 1997-12-30 Motorola, Inc. Method and circuit for initializing a data processing system
JP3655403B2 (ja) 1995-10-09 2005-06-02 株式会社ルネサステクノロジ データ処理装置
US5751622A (en) * 1995-10-10 1998-05-12 Chromatic Research, Inc. Structure and method for signed multiplication using large multiplier having two embedded signed multipliers
JP3623840B2 (ja) 1996-01-31 2005-02-23 株式会社ルネサステクノロジ データ処理装置及びマイクロプロセッサ
US5950012A (en) 1996-03-08 1999-09-07 Texas Instruments Incorporated Single chip microprocessor circuits, systems, and methods for self-loading patch micro-operation codes and patch microinstruction codes
US5978874A (en) 1996-07-01 1999-11-02 Sun Microsystems, Inc. Implementing snooping on a split-transaction computer system bus
JPH09311786A (ja) 1996-03-18 1997-12-02 Hitachi Ltd データ処理装置
JP3579205B2 (ja) 1996-08-06 2004-10-20 株式会社ルネサステクノロジ 半導体記憶装置、半導体装置、データ処理装置及びコンピュータシステム
GB9617033D0 (en) 1996-08-14 1996-09-25 Int Computers Ltd Diagnostic memory access
US5768152A (en) 1996-08-28 1998-06-16 International Business Machines Corp. Performance monitoring through JTAG 1149.1 interface
WO1998013759A1 (fr) 1996-09-27 1998-04-02 Hitachi, Ltd. Machine de traitement de donnees et systeme de traitement de donnees
JPH10177520A (ja) 1996-10-16 1998-06-30 Hitachi Ltd データプロセッサ及びデータ処理システム
JP3790307B2 (ja) 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
JP3641327B2 (ja) 1996-10-18 2005-04-20 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
GB9622686D0 (en) 1996-10-31 1997-01-08 Sgs Thomson Microelectronics A test port controller and a method of effecting communication using the same
US5983017A (en) 1996-11-12 1999-11-09 Lsi Logic Corporation Virtual monitor debugging method and apparatus
US5953538A (en) 1996-11-12 1999-09-14 Digital Equipment Corporation Method and apparatus providing DMA transfers between devices coupled to different host bus bridges
US5771240A (en) 1996-11-14 1998-06-23 Hewlett-Packard Company Test systems for obtaining a sample-on-the-fly event trace for an integrated circuit with an integrated debug trigger apparatus and an external pulse pin
US5956477A (en) 1996-11-25 1999-09-21 Hewlett-Packard Company Method for processing information in a microprocessor to facilitate debug and performance monitoring
US5896550A (en) 1997-04-03 1999-04-20 Vlsi Technology, Inc. Direct memory access controller with full read/write capability
US5978902A (en) 1997-04-08 1999-11-02 Advanced Micro Devices, Inc. Debug interface including operating system access of a serial/parallel debug port
US5944841A (en) 1997-04-15 1999-08-31 Advanced Micro Devices, Inc. Microprocessor with built-in instruction tracing capability
JP3479438B2 (ja) * 1997-09-18 2003-12-15 株式会社東芝 乗算回路
US6038583A (en) * 1997-10-23 2000-03-14 Advanced Micro Devices, Inc. Method and apparatus for simultaneously multiplying two or more independent pairs of operands and calculating a rounded products
GB9802097D0 (en) 1998-01-30 1998-03-25 Sgs Thomson Microelectronics DMA controller
GB9806184D0 (en) 1998-03-23 1998-05-20 Sgs Thomson Microelectronics A cache coherency mechanism
GB9809203D0 (en) 1998-04-29 1998-07-01 Sgs Thomson Microelectronics Packet distribution in a microcomputer

Also Published As

Publication number Publication date
US6574651B1 (en) 2003-06-03
TW564368B (en) 2003-12-01
JP2001147798A (ja) 2001-05-29

Similar Documents

Publication Publication Date Title
US6546480B1 (en) Instructions for arithmetic operations on vectored data
KR20010067275A (ko) 벡터화 데이터에 대한 연산 동작 방법 및 장치
US6629115B1 (en) Method and apparatus for manipulating vectored data
US5801975A (en) Computer modified to perform inverse discrete cosine transform operations on a one-dimensional matrix of numbers within a minimal number of instruction cycles
US5893145A (en) System and method for routing operands within partitions of a source register to partitions within a destination register
US6173366B1 (en) Load and store instructions which perform unpacking and packing of data bits in separate vector and integer cache storage
US5909572A (en) System and method for conditionally moving an operand from a source register to a destination register
US6154831A (en) Decoding operands for multimedia applications instruction coded with less number of bits than combination of register slots and selectable specific values
Kohn et al. The visual instruction set (VIS) in UltraSPARC
US6009505A (en) System and method for routing one operand to arithmetic logic units from fixed register slots and another operand from any register slot
KR100329339B1 (ko) 압축데이터에의한승산-가산연산수행장치
US6098163A (en) Three input arithmetic logic unit with shifter
US5594679A (en) Adaptive video signal processing apparatus
US5742538A (en) Long instruction word controlling plural independent processor operations
US5960193A (en) Apparatus and system for sum of plural absolute differences
US6116768A (en) Three input arithmetic logic unit with barrel rotator
KR20220054681A (ko) 재구성가능한 연산 엔진 회로
US5880979A (en) System for providing the absolute difference of unsigned values
US5596519A (en) Iterative division apparatus, system and method employing left most one&#39;s detection and left most one&#39;s detection with exclusive OR
US6026484A (en) Data processing apparatus, system and method for if, then, else operation using write priority
US20030172254A1 (en) Instructions for manipulating vectored data
US5742529A (en) Method and an apparatus for providing the absolute difference of unsigned values
US7076105B2 (en) Circuit and method for performing a two-dimensional transform during the processing of an image
Tung et al. MMX-based DCT and MC algorithms for real-time pure software MPEG decoding
Shahbahrami et al. Matrix register file and extended subwords: two techniques for embedded media processors

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid