KR20010050804A - 정수 명령 세트 아키텍쳐 및 구현 - Google Patents

정수 명령 세트 아키텍쳐 및 구현 Download PDF

Info

Publication number
KR20010050804A
KR20010050804A KR1020000057804A KR20000057804A KR20010050804A KR 20010050804 A KR20010050804 A KR 20010050804A KR 1020000057804 A KR1020000057804 A KR 1020000057804A KR 20000057804 A KR20000057804 A KR 20000057804A KR 20010050804 A KR20010050804 A KR 20010050804A
Authority
KR
South Korea
Prior art keywords
result
register
bits
memory location
loading
Prior art date
Application number
KR1020000057804A
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 KR20010050804A publication Critical patent/KR20010050804A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/49994Sign extension

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 정수 명령 세트 아키텍쳐를 실행하도록 구성된, 마이크로프로세서 또는 마이크로컨트롤러와 같은 마이크로프로세서 요소에 관한 것이다. 한 실시예에서, 본 발명은 임의의 상수를, 순차 즉시 정수 명령을 통하여, 메모리 위치로 로딩하는 방법을 제공한다. 또 다른 실시예에서, 본 발명은 숫자를 정규화하는 방법을 제공한다. 이 방법에는 이진수의 부호 비트의 총 개수를 카운트 한 다음 이 총 개수에서 1을 빼서 결과를 결정하는 방법이 포함되어 있다. 이 결과를 사용하여, 이진 숫자를 이 결과만큼 좌측 쉬프트(shift)하여 숫자를 정규화할 수 있다.

Description

정수 명령 세트 아키텍쳐 및 구현{AN INTEGER INSTRUCTION SET ARCHITECTURE AND IMPLEMENTATION}
본 발명은 일반적으로, 마이크로프로세서/마이크로컨트롤러의 아키텍쳐에 관한 것으로, 보다 더 상세히 말하면, 정수 명령 세트 아키텍쳐에 관한 것이다.에 관한 것이다.
도 1은 전형적인 컴퓨터 시스템의 레이어링에 관한 도시로, 마이크로프로세서 설계 및 구현에 있어서, 소프트웨어를 사용하는 단계과 하드웨어를 사용하는 단계 사이의 장단점을 보여주고 있다. 도 1에서 도시하는 바와 같이, 마이크로프로세서의 기능에 있어서 하드웨어쪽으로 갈수록 일반적으로 속도(6)가 빨라지는 반면, 유연도(flexibility; 8)는 감소한다. 반대로 하드웨어의 기능을 소프트웨어로 대체하면 사용에 있어서 유연도는 증가하지만, 그 대가로 속도가 느려진다.
펌웨어(firmware)에 마이크로프로그램을 사용함으로써, 더 많은 하드웨어의 기능들이 소프트웨어에 의해 수행될 수 있게 되었다. 그 결과, 어셈블리어층에서의 명령 세트가 더 복잡해졌다. 하드웨어 비용의 감소로, 소프트웨어의 몇몇 기능이 특성화된 하드웨어, 예를 들어, 부동 소수점 프로세서에 의해 수행되는 방향으로 옮겨졌다. 이로 인해 그 성능이 증가되었다. 그러므로 소프트웨어의 기능이 특성화된 하드웨어에 의해 수행될 수 있는지를 평가해야 할 필요가 계속되고 있다.
하드웨어의 가격이 절감되던 시기에, 응용프로그램(20)이 점점 더 복잡해 졌고 다양해 졌다. 이것은 한편으로 성능의 저하 없이 응용프로그램(20)을 실행시킬 수 있게 하기 위해 전자 회로(10)가 더 복잡해 지는 경향을 낳았다. 예를 들어, 16비트를 사용하는 응용 프로그램(20)이 32비트를 사용하게 되면서 전자 회로(10)가 16비트, 32비트, 64비트 워드를 사용하게 되었다. 따라서 어셈블리어(16) 명령 세트는 이러한 응용 및 하드웨어의 복잡도를 다룰 수 있도록 설계되고 있다.
일반적인 컴퓨터 프로그램은 정수 숫자에 대한 계산을 수행하는 정수 명령어를 포함한다. 예를 들어, 이러한 연산에는 가산, 감산, 비교, 상수 로딩(loading), 쉬프팅(shifting), 논리합 연산(logically ORing), 논리적 NAND연산 등이 있는데 이는 하나 또는 두개 이상의 피연산자를 취하여 결과를 낸다. 이러한 정수 연산 중 어떤 것은 몇몇 어셈블리어(14) 명령어로 수행된다. 소프트웨어와 하드웨어 복잡도 증가의 이점을 충분히 사용하기 위해서는, 더 널리 퍼져 있는, 그리고 광대역 버스 마이크로프로세서(wider bus microprocessor)를 사용하는 복잡한 응용 프로그램에 대한 새로운 구조(architecture)가 필요하다.
그러므로, 더 복잡하고 다양한 응용프로그램을 실행시키기 위해서는, 더 넓은 폭의 워드를 효율적으로 사용하는 정수 명령 세트, 즉 64비트 구조가 필요하다. 여기에는 몇몇 명령어는 최적화된 하드웨어에서 실행되도록 설계하여 성능을 향상시키는 것이 포함된다.
도 1은 종래 기술의 컴퓨터 시스템의 여러 레벨들에 대한 도시.
도 2는 본 발명에 따른 SHORI 명령에 대한 구체적인 실시예에 대한 도시.
도 3은 본 발명에 따른 NSB 명령에 대한 단순화된 실시예에 대한 도시.
도 4는 본 발명에 따른 정수/멀티미디어부 실시예에 대한 블록도.
도 5는 본 발명에 따라 파이프라이닝(pipelining)에 의해 수행되는 XHW명령의 한 싸이클(cycle) 실시예에 대한 도시.
도 6은 본 발명에 따른 XHW의 구체적인 실시예에 대한 블록도.
〈도면의 주요 부분에 대한 부호의 설명〉
200: 코어
210: 명령어 흐름부
220: 정수/멀티미디어부
230: 명령 캐시부
240: 로드/저장부
250: 데이터 캐시부
〈정수 명령의 예〉
구체적인 실시예에서 정수 명령어 예의 리스트가 부록 1에 제공된다. 정수 명령 세트의 성격을 설명하기 위해 정수 명령어의 리스트로부터 몇개를 선택하여 설명하도록 한다.
하나의 예는 임의의 상수를 로딩하는 단계이다. 이런 타입의 명령어는 일반적으로 명령어 내에서 직접적으로 인코드 될 상수의 범위를 제공하기 위한 즉시 오퍼랜드(immediate operand)를 가진다. 만일 요구하는 상수가 명령에 의해 제공되는 공간 크기에 맞지 않는다면 상수는 명령과 따로 로드된다.
본 발명의 구체적인 실시예에서, 임의의 상수는 순차 즉시 명령(immediate instructions)에 의해 로드된다. 각 명령어는 임의의 상수값의 일부분을 포함한다. 예를 들어, 두 명령어가 상수 로딩을 수행한다면: MOVI가 부호 확장 16비트 즉시값(immediate value)을 가지고 레지스터를 로드하고, SHORI가 자신의 소스 오퍼랜드(source operand)를 왼쪽으로 16비트 쉬프트한다. 그리고 나서 'OR' 연산을 사용하여 이를 16비트 직접값과 결합한다. 임의의 길이의 상수는 MOVI 명령어를 가지고 로딩될 수 있다. 그 다음에 0개 이상의 SHORI명령어를 수행한다. 예를 들어, 32비트 명령어 및 64비트 목적지 레지스터(destination register), 부호 확장된 16비트 상수가 1 명령(MOVI) 내에서 로드될 수 있다. 2 명령(MOVI 다음 SHORI) 내에서 부호확장된 2비트 상수가, 3 명령(MOVI 다음 SHORI 다음 다른 SHORI) 내에서 48비트 상수가, 4 명령(MOVI 다음 3개의 SHORI) 내에서 64비트 상수가 로드될 수 있다. 표1은 MOVI 및 SHORI 명령어의 포맷을 예를 들어 설명하고 있다.
도 2는 본 발명에 따른 SHORI 명령에 대한 구체적인 실시예에 대한 도시이다. 도 2는 두개의 레지스터 A를 여러 단계: A0(30), A1(50), A2(52), A3(56)로 도시하고 있고 레지스터 B(54)가 도시되어 있다. 1단계에서 레지스터 A는 A0(30)으로 (32,34,36,38) 4개의 섹션(section)으로 구성되어 있는데 각각은 16비트이고 제1 섹션(32)에는 데이터 M1이, 제2 섹션(34)에는 데이터 M2이, 제3 섹션(36)에는 데이터 M3이, 네번째 섹션(37)에는 데이터 M4이 들어있다. 예로 들어 나와있는 상수(40)는 C1(42), C2(44), C3(46)의 세개의 16비트로 구분되어 있다.
MOVI명령은 C1(42)을 A1(50)의 네번째 위치(38)로 로드한다. SHORI 명령어는 몇몇 함수를 수행한다: 레지스터 A의 C1(42)을 쉬프트한다. 즉, A2(52)를 위치(38)로부터 위치(36)으로 쉬프트한다. 레지스터 B(53)의 네번째 위치(57)에 C2(44)를 로드하고 레지스터 B(53)의 위치 (54,55,56)에 0을 확장한다. 그리고, 레지스터 A2(52)를 레지스터 B(53)로 비트별(bitwise) "논리합(ORing)"하여 결과를 얻어낸다. 즉, C1(42)이 (36)에 위치하고 C2(44)가 (38)에 위치하는 A3(58)를 얻어낸다. 또 한번의 SHORI명령을 통해, C3(46)가 레지스터 B(53)의 위치(57)에 들어가서, 왼쪽으로 하나 쉬프트된 A3(58)와 논리합 연산을 수행한다. 이렇게 해서 상수(40)를 레지스터 A에 로딩하는 단계이다. 다른 실시예에서는 M1, M2, M3가 A1(50)에서 0으로 세팅되어 있을 수 있다.
표2는 본 발명에 따른 MOVI명령을 상세하게 설명한다. 마이크로프로세서는 64비트 레지스터와 길이 32비트인 명령어를 가진다. MOVI명령어는 작동코드(opcode)가 "110011"이고 부호 확장된 16비트 직접 필드(immediate field) "s"를 가지고, 연산결과를 레지스터 "d"즉 Rd에 저장한다. "r"필드는 4개의 역비트(reversed field)를 위한 것이다.
표3은 본 발명의 구체적인 실시예에서의 SHORI명령어의 상세한 설명이다. SHORI명령어는 작동코드가 "11010"이고, 레지스터 "w", 즉 Rw의 내용을 16비트 왼쪽으로 쉬프트하고, 16비트 직접 필트 "s"에 비트별 "논리합"연산을 수행하여 그 결과를 레지스터 Rw에 저장한다. 여기서 Rw는 본 실시예에서는 길이가 64비트가 될 수 있다.
정수 명령어가 부호 정수의 부호 비트를 세는 데 사용되는 또 다른 실시예이다. 이는 디지털 신호 처리(DSP) 알고리즘에 유용하게 사용될 수 있다. 명령 세트에는 부호화된 분수를 정규화하여 그 값이 [0.5-1.0], [-0.5--1.0]사이에 위치하도록 하는 효율적인 명령어를 포함해야한다. 마이크로프로세서 칩(chip)의 일반적인 정규화 함수는 순차 왼쪽 쉬프트와 비교연산을 수행한다. 효율적인 정규화 함수의 값은 DSP칩 상에서 그것을 사용함으로서 볼 수 있다. 예를 들어 ITU 스피치 코더(speech coder)의 표준 정규화 연산은 복잡도 30을 가진다. 이는, 정규화를 명령어로 제공하지 않는 DSP 상에서 정규화를 수행하려면 30번의 싸이클을 돌아야 한다는 것을 뜻한다. G.729E 스피치 코더에서는 정규화 함수가 초당 약 15000번 호출된다. 그러므로 DSP알고리즘을 응용프로그램(20)에 사용하면, 독자적인 DSP 칩을 필요로 하지는 않는다고 하더라고, NSB명령어와 같은 정규화를 돕는 명령어는 DSP알고리즘을 실행하는 범용 마이크로프로세서의 성능 향상에 도움을 줄 것이다.
본 발명의 구체적인 실시예에서, NSB명령어는 64비트 소스 레지스터 내의 부호 비트의 개수를 센다음 1을 빼서 그 결과를 자신의 목적지 레지스터에 저장한다. 부호비트의 숫자는 연속된 비트의 개수로, 가장 중요한 비트(most significant bit)에서부터 시작하여 가장 덜 중요한 비트(least significant bit)로 옮겨간다. 이 연속된 비트는 같은 비트값을 가진다. 만일 소스 레지스터가 그 다음에 NSB명령어의 결과만큼 왼쪽으로 쉬프트된다면, 그 결과는 64비트 부호 숫자 범위 내에서 정규화될 것이다.
도 3은 본 발명의 NSB명령어의 단순화된 실시예에 대한 도시이다. 정수 "+2"(66)가 2의 보수(two's complement) 표맷으로 1바이트, 즉 8비트, 한 니블(nibble, 4비트)은 (62), 한 니블은 (64)로 표현되어 있다. 이 예에서, 가장 큰 양의 정수가 니블 (68), (70)으로 표현된 "+7"(72)이다. 앞 단락의 방법을 적용시키면, "+7"(72)에는 5개의 부호비트가 있다. 그러므로 NSB는 5-1=4의 카운트 값을 리턴(return)한다. 그리고 나서 "+7"(72)을 네 비트 왼쪽으로 쉬프트하면 "정규화된 +7"(78)인 (74)니블과 (76)니블을 얻게 된다. "+2"를 정규화 하기 위해서는 니블(62), (64)을 네 비트 왼쪽으로 쉬프트하여 니블(80), (82)을 얻는다. 2의 보수가 사용되고 있기 때문에 니블(92), (94)인 "-3"(96)도 비슷하게 정규화하면 "정규화된 -3"(108)을 니블 (104), (106)으로 구할 수 있다. 이는 절대값이 가장 큰 음수가 -7이라고 가정한 것이다. 최대 절대값이 숫자를 정규화 하는 한 예이다. 다른 실시예에서는, 각 숫자에 대해 NSB를 계산한 다음 그 숫자를 NSB의 출력결과만큼 왼쪽으로 쉬프트할 수도 있다. 이것은 부동소수점 가수(floating point mantissa)를 정규화하고 지수를 같은 크기의 역수(opposite)로 바꾸는 것과 비슷하다. 이러한 다른 방법을 사용한 "정규화된 +2"(90)(니블 (86), (88))는 "+2"(66)를 NSB즉 5비트만큼 왼쪽으로 쉬프트한 것이다. 이 다른 방법을 사용한 "정규화된 +2"(90)는 [-128, +127]범위 내에서 정규화된 2의 보수, 또는 128(2**7)로 나눈 수라고 생각할 수 있다.
표 4는 본 발명의 구체적인 실시예에 따른 NSB 명령어에 대한 구체적인 도시이다. NSB명령어는 작동코드가 두 부분으로 잘라져 "000000"과 "1101"이다. 이는 레지스터 "m", 즉 Rm 내의 연속적인 부호비트의 개수를 세고 이 개수의 합에서 1을 뺀 다음 그 결과를 레지스터 "d"(Rd)에 저장한다. "r"은 예약된(reserved) 비트라는 뜻이며 64비트이다. 표4에 나오는 알고리즘은 NSB알고리즘의 또 다른 실시예이다.
〈몇몇 정수 명령어의 하드웨어적 구현에 대한 구체적인 실시예〉
구체적인 실시예에서, 본 발명은 0 또는 단계중에서 루트 레벨(root hierarchy level)에 코어 단위(200)를 가지도록 구현될 수 있다. 코어(200)는 계층 레벨 1에서 6개의 단위를 포함한다. 도 4는 코어(200)의 최상위 레벨에서의 분할의 예를 도시한다. 표5는 S5코어의 각 단위의 기능을 설명한다. 명령어 흐름 단위(IFU)(210)는 정수 명령어의 처리를 포함하는 단위로 부록 2에서 더 자세히 설명한다.
계층 레벨 단위 약자 설명
0 S5코어(200) S5 최상위 코어 블록
1 버스 인터페이스 단위(205) BIU 주변장치 모듈(peripheral module)이나 외부 메모리(external memory)와 같은 외부 모듈로의 버스 액세스를 제어함
1 명령어 흐름 단위(210) IFU CPU 파이프(pipe)의 전방(front end)으로 인출(fetch), 디코드(decode), 발행(issue) 및 분기(branch)등을 수행한다. 모드 B에 대한 에뮬레이션(emulation)도 포함한다.
1 명령어 멀티미디어 단위(220) IMU 모든 정수 및 멀티미디어(multimedia) 명령어를 구동(handle)한다. CPU의 주 데이터경로(datapath)이다.
1 명령어 캐시 단위(230) ICU 명령어 캐시 및 명령어 번역 룩어사이드 버퍼(Instruction Translation Lookaside Buffer, TLB)로 구성되어 있다.
1 로드/저장 단위(240) LSU 모든 메모리 명령어와 데이터 캐시 제어를 구동한다.
1 데이터 캐시 단위(250) DCU 데이터 캐시 및 데이터 번역 룩어사이드 버퍼(Data Translation Lookaside Buffer, TLB)로 구성되어 있다.
1 부동소수점 단위(265) FPU 분리가능한 부동소수점 단위 (도4에는 나와있지 않다.)
도 5는 정수/멀티미디어 단위(IMU)(220)의 블록도에 대한 도시이다. 구체적인 실시예에서, IMU(220)은 정수, 멀티미디어 산술연산 및 논리 명렁어를 포함한 cpu산술연산 명령어를 구동할 수 있고; 로드/저장의 주소 계산 및 범위를 벗어나는 것(out-of-range)(잘못된 주소, maladdress) 탐지; 분기 및 부분 분기 비교연산(partial branch comparisons); 분기 목적지 주소 계산 등과 같은 명령어를 구동할 수 있다. IMU(220)의 계산은 제1(exe1), 제2(exe2), 제3(exe3) 파이프라이닝 단계에서 일어날 수 있다. 부속단위(subunit)중 많은 것들이 하나의 싸이클 실행 시간을 가지는 반면 승산장치(multiplier)는 3싸이클의 지연을 가진다. 본 실시예의 IMU(220)는 단순한 파이프(pipe)일 수 있다. ifu_imu_stall신호(312) 또는 ifu_imu_invalidate 신호(314)를 수신하면, 그 파이프 내의 데이터가 의존하는 신호에 의해 블록(block)되지 않고 각 싸이클을 진행시킨다. IMU(200)은 IFU(210)으로부터 입력의 많은 부분을 전달받는다. 주 신호는 소스 피연산자(source operands)와 작동코드 워드가 될 수 있다. IMU(220) 각 파이프라이닝 단계마다 자신의 계산결과를 전송할 수 있는데, exe1 및 exe2 파이프라이닝 단계에는 하나 또는 두개의 싸이클 명령을, exe3 파이프라이닝 단계에서는 셋 또는 네개의 싸이클 명령을 전송할 수 있다.
구체적인 실시예에서, IMU(220)은 일곱개의 단위를 포함한다. 표6은 도 5의 IMU블록을 설명하고 있다. 부록3에서 IMU의 실시예에 대한 상사한 설명을 하도록 한다.
계층레벨 단위 기능 약자 설명
2 덧셈기(adder) ADA(316) 정수 및 주소 덧셈기
2 덧셈기 IMA(320) simd 덧셈기
2 선택기(selector) XSL(330) exe1 exe2 exe3 결과 먹스(mux)
2 부가적 실행 하드웨어(extra exe hw) XHW(340) 특정 명령어에 대한 지원
2 쉬프터/셔플(shifter/shuffle) SHF(350) 취프터 및 셔플
2 곱셈기(multiplier) MUL(360) 정수 및 simd 곱셈기
2 제어(control) XCT(370) 제어 블록
ADA(316)은 예를 들어 IFU(210)또는 LSU(240)의 주소 및 정수에 대한 가산, 감산 또는 비교연산을 한다. ADA(316)에는 64비트 가산기가 포함될 수 있다. 제2 입력은 감산이나 비교연산의 경우 인버트되어(inverted) 들어올 수 있다. 범위 체크도 할 수 있다.
IMA(320)은 예를 들어, 각각 32비트 가산, 두개의 16비트 가산이나 4개의 8비트 가산을 수행하는 두개의 가산기를 포함할 수 있다. 가산의 각 타입에는 반올림 숫자(carry-in)가 포함될 수 있는데 이는 모든 가산과 동시에 활성화된다. 이를 통해 바이트 처리를 할 수 있는데, 바이트 처리를 통해 8비트의 벡터가 결과로 나온다. 제2 소스 피연산자는 감산이나 비교연산의 경우에 인버트되어 들어올 수 있다.
구체적인 실시예에서, XHW(340)는 다른 하드웨어 블록을 재사용하여 구현되기 어려운 명령어를 구동한다. 이러한 명령어는 구현을 위해 자기 자신의 하드웨어를 가지는데, 이는 이 명령어 각각이 다른 명령어로는 부합(match)될 수 없는 동작을 한다. XHW(340)에는 MOVI, SHORI, NSB명령어가 포함될 수 있다.
SHF(350)은 예를 들어 쉬프트와 연관된 연산 및 64비트 소스의 바이트 크기(byte quantities)의 변위(displacement)를 포함한다. 대부분은 한 싸이클(exe1)에 수행할 수 있지만 포화(saturation)에 의해 발생된 하나의 싸이클 만큼 지연될 수 있다. 또한 포화 명령어가 exe2단계에서 발생된다면 이 포화값을 먹스(mux)하는 일도 한다.
셔플 및 바이트 변위 함수는 양호하게는 3단계에서 마찬가지로 SHF(350)에 의해 수행된다. 제1 단계에서 셔플 행렬에 대한 제어 신호를 만들어내고, 제2 단계에서는 바이트를 옮긴다. 마지막 단계에서 exe3에서 필요하다면 포화값을 먹싱한다.
포화 탐지는 SHF(350)과 별도로 수행될 수 있다. 이를 위해서는 쉬프트 경로로부터 피연산자와 마스크(mask)를 사용하고, 쉬프트와 셔플의 제2 싸이클(exe2)에 대한 포화 명령어를 생성할 수 있다.
MUL함수(360)는 예를 들어, 승산기와 연관된 명령어를 실행한다. 이 명령어에는 SIMD(단일 명령 승산 데이터, Single Instruction Multiple Data) 정수 승산이 포함된다. 이 명령어중 대부분은 세 싸이클에 완료되지만, 몇몇 소수의 명령어들은 완료되려면 네 싸이클이 필요하다. 부쓰 인코딩(Booth encoding)알고리즘이 이 승산을 수행하기 위해 사용될 수 있다.
XCT(370)은 다양한 제어 신호들을 버퍼링하고 방송하는 데 사용된다.이 신호들은 각 실행 블록당 복제되어야 하는 IFU(210)에 의해 제공된다. XCT(370)은 파이프 내의 명령어의 위치를 보관하는 작은 표를 유지함으로써 파이프 내에서 블록을 또한 제어할 수 있다. XCT(370)는 유효화(validation), 정지(stalling) 및 무효화(invalidation) 신호도 고려할 수 있다.
구체적인 실시예에서 XHW(340)은 복잡한 명령어를 구동하지는 않지만, 다른 블록 하드웨어를 재사용하여 구현하기는 어려운 명령어들을 구동한다. 이러한 명령어는 자기자신의 하드웨어를 구현해서 실행되어야 하는데 이는 각 명령어가 다른 명령어로는 부합(match)될 수 없는 동작을 하기 때문이다. XHW(340)으로 구현될 수 있는 명령어에는 MOVI, SHORI, NSB가 있다.
XHW(340)은 이동과 비슷한(move-like)명령어를 구동할 수 있다. 그 예로 MOVI가 있다. XHW(340)은 부가적인 먹스(mux)를 가지고 IMA(320)의 임계경로(critical path)에 과부하를 걸지 않는다. 그리고 몇몇 소스 피연산자가 0이 되도록 강요하지 않는다. 일반적으로는 3개의 입력 연산자를 받아 한 싸이클에 완료되기 때문에, 디코더의 임계경로에 영향을 주지 않고(레지스터 교체(register swap)없이) SHORI를 구동할 수 있다. XHW(340)은 단순한 작동코드를 가지고 있기 때문에, 이러한 명령어에 대한 디코더의 복잡도를 줄일 수 있다.
도 6은 파이프라인 내에서 수행되고 있는 본 발명에 따른 XHW명령어의 한 싸이클의 예에 대한 도시이다. 본 발명에서는 이 명령어가 MOVI, SHORI, NSB의 구체적인 실시예의 하나가 될 수 있다. 도 6의 "싸이클(cycle)"(405)은 파이프라인의 한 단계를 보여준다. "D"단계(410)는 실행 바로 직전 싸이클(405)내의 명령어를 도시한다. 실행 시작을 위한 제어신호(xct_xhw_start_ex1(432))가 XCT(370)으로 도시되어 있다. "E1"(412), "E2"(414), "E3"(416)는 각각 exe1, exe2, exe3 실행 단계, 즉 싸이클을 나타낸다. XHW(340)은 명령어를 실행하여 한 싸이클, E1(412)내에서 결과 (434-438)를 낸다.
도 7은 본 발명에 따른 XHW(340)의 구체적인 실시예의 블록도에 대한 도시이다. 표7은 XHW(340)의 외부 인터페이스의의 예를 설명한다.
구체적인 실시예에서 XHW는 7개의 모듈을 포함한다: RG1(530), LOG(540), LSD(550), MOV(560), CMV(570), MUX(580), CP(590). 여기에는 제어신호가 포함된다.
입력 래치(latch) 또는 플립플롭(flip-flop, RG1(530))은 세개의 소스 피연산자(ifu_src1, ifu_src2, ifu_src3)를 전달받아 저장한다.
논리 함수(LOG(540))는 논리 AND, OR, ANDC, XOR를 수행하고 하나의 결과를 선택한다.
선두 부호 카운터(leading sign counter, LSD(550)) 함수, 즉 NSB는 선두 0 카운터(leading zero counter)에 기초한다. 부호는 숫자가 음수일 때 인버트(invert)된다. NSB는 예를 들어 두 단계 프로세스를 가질 수 있다. 결과의 하위 3비트에 대한 바이트 포맷에서 비트의 개수를 센 다음, 결과의 상위 3비트에 완전 배정도 포맷(full double format)상의 바이트 단위로 개수를 센다. RTL코드를 부록 4에 첨부한다.
이동 함수(MOV(560))에는 피연산자(2)를 결과버스로 포워드할 수 있는 MOVI가 포함될 수 있다 (여기서 입력 소스는 이미 부호확장되어 있다). 그리고 SHORI도 포함될 수 있는데 이는 16비트만큼 쉬프트 연산을 하고 인접시킨다(abut). RTL코드를 부록 5에 첨부한다.
SHORI에 대해서: 16비트 직접 상수값 앞에 0을 확장하고, rg1_data3를 16비트만큼 외쪽으로 쉬프트시킨 다음, 이 두 값을 "OR"연산시킨다. 이를 수행하는 RTL명령이 다음과 같다: {48'b0, rg1_data2[15:0]}|{rg1_data3[47:0],16'b0}, 이는 부록 5의 {rg1_data3[47:0], rg2_data2[15:0]}와 같다.
조건부 이동(conditional move, CMV(570)은 비교 명령어를 포함하는데 이 비교명령어는 소스 피연산자의 전체 또는 부분을 선택하여 결과를 생성한다. 그 예가 EQ및 NE가 있는데 이는 피연산자(1)가 0인지 0이 아닌지를 탐지해 낸다.
결과 중 하나를 선택하는 출력 먹스(MUX(580))가 있을 수 있다.
지금까지의 설명을 통한 구체화를 통해, 구체적인 실시예를 가지고 본 발명을 설명하였다. 제시된 실시예 외의 다른 실시예들도 본 기술에 숙련된 자라면 분명히 알 수 있을 것이다. 예를 들어, 명령어는 16, 64, 128비트 길이가 될 수도 있고, 마이크로프로세서 및/또는 보조프로세서 역시 16, 32, 128비트 버스 및 워드에서 동작할 수 있다. 그러므로, 첨부된 특허청구범위 및 대응하는 모든 범위에서 제시되는 본 발명의 넓은 범위의 정신 및 사상을 벗어나지 않는 범위에서 다양한 수정 및 변경이 가능하다.
본 발명에 따라, 임의의 상수를, 순차 즉시 정수 명령을 통하여, 메모리 위치로 로딩하는 방법이 제공된다. 또한 본 발명에 따라, 숫자를 정규화하는 방법이 제공된다. 이 방법에는 이진수의 부호 비트의 총 개수를 카운트 한 다음 이 총 개수에서 1을 빼서 결과를 결정하는 방법이 포함되어 있다. 이 결과를 사용하여, 이진 숫자를 이 결과만큼 좌측 쉬프트(shift)하여 숫자를 정규화할 수 있다.
〈부록〉

Claims (23)

  1. 복수의 순차 섹션을 포함하는 메모리 위치로 상수를 로딩하는 방법에 있어서,
    상기 상수를 복수의 부분으로 분할하는 단계;
    상기 복수의 부분 중 제1 부분을 상기 복수의 순차 섹션 중 제1 섹션으로 로딩하는 단계;
    상기 제1 섹션 내의 제1 부분을 상기 복수의 순차 섹션 중 제2 섹션으로 이동시키는 단계; 및,
    상기 복수의 부분 중 제2 부분을 제1 섹션으로 로딩하는 단계;
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 메모리 위치는, 레지스터를 포함하는 방법.
  3. 복수의 부분으로 구성되는 상수를 목적지 메모리 위치로 로딩하는 방법에 있어서,
    복수의 순차 섹션을 포함하는 제1 메모리 위치를 상기 제1 메모리 위치의 한 섹션 내의 총 비트 수 만큼 쉬프하는 단계;
    상기 상수의 한 부분을 제2 복수의 순차 섹션을 포함하는 제2 메모리의 한 섹션으로 로딩하는 단계;
    상기 제1 메모리 위치와 상기 제2 메모리 위치를 논리적으로 조합(combining)함으로써 결과를 결정하는 단계; 및,
    상기 결과를 상기 목적지 메모리 위치로 저장하는 단계
    를 포함하는 방법.
  4. 제3항에 있어서,
    상기 논리적 조합은 비트별 논리합(bitwise ORing)인 방법.
  5. 제3항에 있어서,
    상기 쉬프팅은, 상기 제1 메모리 위치의 오른 쪽 끝에서 0이 쉬프트되는 좌측 쉬프팅인 방법.
  6. 제3항에 있어서,
    상기 제1 메모리 위치의 쉬프팅 전에 상기 상수의 제1 부분을 상기 제1 메모리 위치로 로딩하는 단계를 더 포함하는 방법.
  7. 제6항에 있어서,
    상기 상수의 제1 부분을 로딩하는 상기 단계는, 상기 제1 메모리 위치의 제1 부분을 부호 확장하는 단계를 포함하는 방법.
  8. 제3항에 있어서,
    상기 상수의 한 부분을 제2 메모리 위치의 한 섹션으로 로딩하는 상기 단계는, 상기 상수의 제2 부분을 상기 제2 메모리 위치의 제1 섹션으로 로딩하는 단계와 상기 제2 부분을 0으로 확장하는 단계를 포함하는 방법.
  9. 복수의 명령으로부터 레지스터로 상수를 로딩하는 방법에 있어서,
    상기 복수의 명령으로부터의 명령 데이터 필드는, 상부 상수의 일부로 구성되며,
    상기 방법은,
    상기 복수의 명령어로부터 상기 제1 명령 데이터 필드를 상기 레지스터의 제1 부분으로 로딩하는 단계;
    상기 레지스터의 상기 제2 부분이 제1 명령 데이터 필드를 포함하고, 상기 레지스터의 상기 제1 부분이 0으로 채워지도록, 상기 레지스터의 제1 부분으로부터 제2 부분으로 제1 명령 데이터 필드를 이동시키는 단계;
    상기 복수의 명령으로부터의 제3 명령 데이터 필드와 상기 레지스터의 상기 제1 부분에 대한 논리합 연산을 수행하여 제1 결과를 생성하는 단계; 및
    상기 제1 결과를 상기 레지스터의 제1 부분에 저장하는 단계
    를 포함하는 방법.
  10. 제9항에 있어서,
    상기 제1 명령 데이터 필드 쉬프팅 단계, 상기 논리합 연산 수행 단계, 및 상기 제1 결과 저장 단계가 한 싸이클로 처리되는 방법.
  11. 제9항에 있어서,
    상기 레지스터 길이는 64비트이고, 각 명령 데이터 필드는 최고 16비트 길이의 가지는 중간 필드(intermediate field)를 포함하는 방법.
  12. 제9항에 있어서,
    상기 레지스터의 제3 부분이 상기 제1 명령 데이터 필드를 포함하도록, 상기 제1 명령 데이터 필드를 상기 레지스터의 제2 부분으로부터 상기 레지스터의 제3 부분으로 이동시키는 단계;
    상기 레지스터의 제2 부분은 상기 제1 결과를 포함하고, 상기 레지스터의 상기 제1 부분은 0으로 채워지도록, 상기 제1 결과를 상기 레지스터의 제1 부분으로부터 상기 레지스터의 제2 부분으로 이동시키는 단계;
    상기 복수의 명령으로부터의 제3 명령 데이터 필드 및 상기 레지스터의 상기 제1 부분에 대해 논리합 연산을 수행하여 제2 결과를 생성하는 단계; 및
    상기 제2 결과를 상기 레지스터의 상기 제1 부분에 저장하는 단계
    를 더 포함하는 방법.
  13. 제12항에 있어서,
    상기 제1 명령 데이터 필드 이동 단계, 상기 제1 결과 이동 단계, 상기 논리합 수행 단계, 및 상기 제2 결과 저장 단계가 한 타이밍 사이클로 수행되는 방법.
  14. 컴퓨터를 사용하여 부호 비트의 개수를 결정하는 방법에 있어서,
    제1 메모리 위치에 저장된 이진수 내의 부호 비트의 총 개수를 세는 단계;
    상기 총 개수에서 1을 감산함으로써 결과를 결정하는 단계; 및,
    상기 결과를 제2 메모리 위치에 저장하는 단계;
    를 포함하는 방법.
  15. 제14항에 있어서,
    상기 부호 비트는, 상기 결과의 제1 복수 비트에 대해서는 바이트 포맷(a byte format) 상에서 부호 비트의 개수를 카운트하고, 다음에 상기 결과의 제1 복수 비트에 대해서는 바이트에 의에 완전 배정도 포맷(full double format) 상에서 카운트하는 방법.
  16. 제14항에 있어서,
    상기 결과는 하나의 파이프라인(pipeline) 실행 싸이클에서 결정되는 방법.
  17. 컴퓨터를 사용하여, 이진수를 정규화하는 방법에 있어서,
    제1 메모리 위치에 저장된 이진수 내의 부호 비트의 총 개수를 세는 단계;
    총 개수에서 1을 감산함으로써 결과를 결정하는 단계;
    상기 결과를 제2 메모리 위치에 저장하는 단계; 및
    상기 이진수를 상기 결과만큼 쉬프팅하여 정규화된 수를 얻는 단계
    를 포함하는 방법.
  18. 제17항에 있어서, 하나의 명령이, 상기 부호 비트의 총 개수를 카운트하는 단계; 상기 총 개수에서 1을 감산함으로써 상기 결과를 결정하는 단계; 상기 결과를 상기 제2 메모리 위치에 저장하는 단계를 포함하는 방법.
  19. 제17항에 있어서,
    상기 부호 비트는, 상기 결과의 하위 복수 비트에 대해서는 바이트 포맷 상에서 카운트되고, 다음에 상기 결과의 상위 복수 비트에 대해서는 바이트에 의해 완전 배정도 포맷 상에서 카운트되는 방법.
  20. 제17항에 있어서,
    상기 부호 비트의 총 개수를 카운트하는 단계는, 최상위 비트(most significant bit)와 동일한 비트값을 갖는 연속 비트의 총 개수를 카운트하는 단계를 포함하고, 상기 카운트 단계는, 최상위 비트에서부터 시작하여 상기 최상위 비트값을 갖는 최하위 비트까지 계속되는 방법.
  21. 제17항에 있어서,
    상기 정규화된 수는 디지털 신호 처리(DSP) 어플리케이션에 사용되는 방법.
  22. 컴퓨터 시스템의 명령에 있어서,
    제1 레지스터 내의 연속 부호 비트의 개수를 카운트함으로써 결과를 결정하는 단계;
    상기 결과에서 1을 감산하는 단계; 및
    상기 결과를 제2 레지스터에 저장하는 단계
    를 포함하는 명령.
  23. 제22항에 있어서, 상기 명령어는 32비트로 구성되어 있고, 상기 제1 및 제2 레지스터는 64비트로 구성되어 있는 명령.
KR1020000057804A 1999-10-01 2000-10-02 정수 명령 세트 아키텍쳐 및 구현 KR20010050804A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US41068399A 1999-10-01 1999-10-01
US9/410,683 1999-10-01

Publications (1)

Publication Number Publication Date
KR20010050804A true KR20010050804A (ko) 2001-06-25

Family

ID=23625785

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000057804A KR20010050804A (ko) 1999-10-01 2000-10-02 정수 명령 세트 아키텍쳐 및 구현

Country Status (4)

Country Link
EP (1) EP1089166A3 (ko)
JP (1) JP2001142695A (ko)
KR (1) KR20010050804A (ko)
TW (1) TW497074B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016064131A1 (ko) * 2014-10-20 2016-04-28 삼성전자 주식회사 데이터 처리 방법 및 장치

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3857614B2 (ja) 2002-06-03 2006-12-13 松下電器産業株式会社 プロセッサ
US7418574B2 (en) 2002-10-31 2008-08-26 Lockheed Martin Corporation Configuring a portion of a pipeline accelerator to generate pipeline date without a program instruction
US20060085781A1 (en) 2004-10-01 2006-04-20 Lockheed Martin Corporation Library for computer-based tool and related system and method
US20150227366A1 (en) * 2014-02-12 2015-08-13 Imagination Technologies Limited Processor with granular add immediates capability & methods
KR102484262B1 (ko) * 2016-03-14 2023-01-04 삼성전자주식회사 컴퓨팅 시스템, 이의 구동 방법 및 컴파일 방법

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5001662A (en) * 1989-04-28 1991-03-19 Apple Computer, Inc. Method and apparatus for multi-gauge computation
US6219779B1 (en) * 1997-06-16 2001-04-17 Matsushita Electric Industrial Co., Ltd. Constant reconstructing processor which supports reductions in code size
KR100322277B1 (ko) * 1998-11-20 2002-03-08 권 기 홍 확장 명령어를 가진 중앙처리장치

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016064131A1 (ko) * 2014-10-20 2016-04-28 삼성전자 주식회사 데이터 처리 방법 및 장치
US10915323B2 (en) 2014-10-20 2021-02-09 Samsung Electronics Co., Ltd. Method and device for processing an instruction having multi-instruction data including configurably concatenating portions of an immediate operand from two of the instructions

Also Published As

Publication number Publication date
EP1089166A2 (en) 2001-04-04
EP1089166A3 (en) 2004-10-20
JP2001142695A (ja) 2001-05-25
TW497074B (en) 2002-08-01

Similar Documents

Publication Publication Date Title
USRE38679E1 (en) Data processor and method of processing data
US5001662A (en) Method and apparatus for multi-gauge computation
US5222240A (en) Method and apparatus for delaying writing back the results of instructions to a processor
US6144980A (en) Method and apparatus for performing multiple types of multiplication including signed and unsigned multiplication
JP4344870B2 (ja) 特殊浮動小数点数の迅速な検出のための浮動小数点値のタグ付け
US6295599B1 (en) System and method for providing a wide operand architecture
US6560697B2 (en) Data processor having repeat instruction processing using executed instruction number counter
US6374346B1 (en) Processor with conditional execution of every instruction
US5619664A (en) Processor with architecture for improved pipelining of arithmetic instructions by forwarding redundant intermediate data forms
US6684323B2 (en) Virtual condition codes
EP0465322A2 (en) In-register data manipulation in reduced instruction set processor
US7917568B2 (en) X87 fused multiply-add instruction
US5440702A (en) Data processing system with condition code architecture for executing single instruction range checking and limiting operations
JPH1049368A (ja) 条件実行命令を有するマイクロプロセッサ
US5583806A (en) Optimized binary adder for concurrently generating effective and intermediate addresses
JP5719341B2 (ja) 浮動小数点ユニットにおけるオーバーシフトの高速検出のためのメカニズム
US20030037085A1 (en) Field processing unit
JPS6014338A (ja) 計算機システムにおける分岐機構
US6078940A (en) Microprocessor with an instruction for multiply and left shift with saturate
KR20010050804A (ko) 정수 명령 세트 아키텍쳐 및 구현
US5546551A (en) Method and circuitry for saving and restoring status information in a pipelined computer
US5822786A (en) Apparatus and method for determining if an operand lies within an expand up or expand down segment
KR100431726B1 (ko) 부호달린나눗셈을이행하는방법
US5655139A (en) Execution unit architecture to support X86 instruction set and X86 segmented addressing
US5754460A (en) Method for performing signed division

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