KR20000023837A - 슈퍼 스칼라 마이크로프로세서 내에서의 가변 바이트 길이 명령어를 프리디코딩하기 위한 방법 및 장치 - Google Patents

슈퍼 스칼라 마이크로프로세서 내에서의 가변 바이트 길이 명령어를 프리디코딩하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20000023837A
KR20000023837A KR1019997000338A KR19997000338A KR20000023837A KR 20000023837 A KR20000023837 A KR 20000023837A KR 1019997000338 A KR1019997000338 A KR 1019997000338A KR 19997000338 A KR19997000338 A KR 19997000338A KR 20000023837 A KR20000023837 A KR 20000023837A
Authority
KR
South Korea
Prior art keywords
instruction
byte
decode
bit
command
Prior art date
Application number
KR1019997000338A
Other languages
English (en)
Other versions
KR100448676B1 (ko
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 토토라노 제이. 빈센트
Priority to KR10-1999-7000338A priority Critical patent/KR100448676B1/ko
Publication of KR20000023837A publication Critical patent/KR20000023837A/ko
Application granted granted Critical
Publication of KR100448676B1 publication Critical patent/KR100448676B1/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
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

명령어 캐쉬내에 저장하기 전에 가변 바이트 길이 명령어를 프리디코드하도록 구성된 프리디코드부를 포함하는 슈퍼스칼라 마이크로프로세서가 제공된다. 프리디코드부는 각 명령어 바이트에 대한 다수의 프리디코드 비트를 생성시키도록 구성된다. 각 명령어 바이트와 관련된 다수의 프리디코드 비트는 총칭적으로 프리디코드 태그라 칭한다. 명령어 정렬부는 그때 프리디코드 태그를 이용하여, 가변 바이트 길이 명령어를 슈퍼스칼라 마이크로프로세서내에 고정된 지시 위치를 형성하는 다수의 디코드부로 디스패치한다. 기능비트에 의해 전달된 정보에 의해, 디코드부는 연산코드, 변위, 즉시, 데지스터 및 스케일-인덱스 바이트의 정확한 장소를 검출할 수 있다. 따라서, 명령어 바이트를 통해 디코드부에 의한 어떤 시리얼 스캔도 요구된 않는다. 게다가, 기능비트는 디코드부가 슈퍼스칼라 마이크로프로세서내의 다른 서브유니트에 의해 사용하기 위해 (가산기 회로를 통해) 선형어드레스를 신속히 계산하게 한다. 따라서, 비교적 고속 디코딩이 지속될 수 있고, 고성능이 실행될 수 있다.

Description

슈퍼 스칼라 마이크로프로세서 내에서의 가변 바이트 길이 명령어를 프리디코딩하기 위한 방법 및 장치{METHOD AND APPARATUS FOR PREDECODING VARIABLE BYTE-LENGTH IN STRUCTIONS WITHIN A SUPERSCALAR MICROPROCESSOR}
슈퍼스칼라 마이크로프로세서는 복수개의 명령어를 동시에 실행함으로써 기존의 스칼라 프로세서의 성능을 능가하는 성능을 얻을 수 있다. x86급 마이크로프로세서의 광범위한 사용에 따라, x86 명령어를 실행하는 슈퍼스칼라 마이크로프로세서를 개발하기 위하여 마이크로프로세서 제조자들은 노력을 기울이고 있다. 상기와 같은 슈퍼스칼라 마이크로프로세서는 8086, 80286, 80386 및 80486과 같은 이전의 마이크로프로세서들 용으로 개발된 방대한 소프트웨어와 호환을 유지하면서, 상대적으로 높은 성능을 구현할 수 있다.
x86 명령어 세트는 상당히 복잡하고 복수개의 가변 바이트 길이 명령어로 이루어진다. 제1도의 A는 x86 명령어의 기본적인 포맷의 예를 도시하고 있다. 이에 도시된 바와 같이, x86 명령어는 연산 코드(opcode) 필드(104), 연산 어드레싱모드(Mod R/M) 바이트(106), 연산 스케일 인덱스 베이스(SIB) 바이트(l08), 옵션변위 필드(110), 및 옵션 즉시(immediate) 데이터 필드(112)로 구성되는 1개 내지 5개의 옵션 프리픽스 바이트(102)로 구성된다. 연산코드(opcode) 필드(104)는 특정 명령어를 위한 기본적인 연산을 정의한다. 특정 연산코드의 디폴트 연산은 하나 또는 그 이상의 프리픽스 바이트에 의하여 수정된다. 예를 들면, 프리픽스 바이트는 명령어를 위한 주소 또는 피연산자 크기를 변경시키기 위하여, 메모리 어드레싱에서 사용된 디폴트 세그먼트를 오버라이드(override)하기 위하여, 또는 프로세서가 스트링 연산을 복수회 반복하게 하기 위하여 사용될 수 있다. 연산코드 필드(104)는 프리픽스 바이트(102) 다음에 구성되며, 그리고 1 또는 2 바이트 길이가 될 수 있다. 어드레싱 모드(MODRM) 바이트(106)는 레지스터 및 메모리 어드레싱 모드를 정의한다. 스케일 인덱스 베이스(SIB) 바이트(108)는 스케일 및 인덱스팩터(factors)를 이용하여 32-비트 베이스 어드레싱으로 만 사용된다. SIB 바이트의 베이스 필드는 어떤 레지스터가 어드레스 계산을 위하여 베이스 값을 포함하고 있는지를 정의하며, 인덱스 필드는 어떤 레지스터가 인덱스 값을 구비하고 있는지를 정의한다. 스케일 필드는 그에 의하여 소정의 변위에 따라 인덱스 값이 베이스값으로 가산되기 전에 승산되는 2제곱 값을 정의한다. 다음 명령 필드는 1 내지 4바이트 길이로 이루어질 수 있는 옵션 변위 필드(110)이다. 변위 필드(110)는 어드레스 계산에 사용된 상수를 구비한다. 1 내지 4 바이트 길이가 될 수 있는 옵션 즉시(immediate)(112)는 명령 피연산자로써 사용된 상수를 구비하고 있다. 80286은 명령어 최대 길이를 10 바이트로 설정하며, 80386 및 80486은 15 바이트 명령어 길이까지 설정한다.
제1도의 B는 서로 다른 가변 바이트 길이 x86 명령어 포맷을 도시하고 있다. 가장 짧은 x86 명령어는 단지 1 바이트 길이이며, 포맷(a)에 도시된 바와 같이 단일 연산코드 바이트로 구성된다. 소정의 명령어를 위하여, 연산코드 필드를 구비하고 있는 바이트는 포맷(b), (c), 및 (e)에 도시된 바와 같이 레지스터 필드를 구비한다.
포맷(j)은 두 개의 연산코드 바이트로 이루어지는 명령어를 구비하고 있다. 옵션 M0DRM 바이트는 포맷(d), (f), (h) 및 (j)의 연산코드 바이트를 구현한다. 즉시(immediate) 데이터는 포맷(e), (g), (i) 및 (k)의 연산코드 바이트를 따르며, 그리고 포맷(f) 및 (h)의 MODRM 바이트를 따른다. 제1C도는 가능한 어드레싱 모드포맷(a) 내지 (h)를 도시하고 있다. 포맷(c), (d), (e) 및 (h)은 오프셋(예를 들면. 변위) 정보를 갖는 MODRM 바이트를 구비하고 있다. SIB 바이트는 포맷(f), (g) 및 (h)내에서 사용된다.
x86 명령어 세트의 복잡성으로 인하여, 고성능의 x86 슈퍼스칼라 마이크로프로세서를 구현하는데 어려움이 있다. 그 어려움 중의 하나는, 명령어들이 소정의 디코드가 구현되기 이전에 상기와 같은 프로세서들의 병렬 연결된 명령어 디코더들에 대하여 정렬되어야 한다는 사실이다. 대개의 RISC 명령어 포맷에 대조적으로, x86 명령어 세트는 가변 길이 명령어들로 이루어지기 때문에, 라인 내의 연속적인 명령어 스타트 바이트들은 동일한 간격으로 연결되지 않고, 그리고 라인 당 명령어의 수가 고정되지 않는다. 결과적으로, 고정된 길이 쉬프트(shift) 로직으로는 명령어 정렬의 문제를 해결 할 수 없다.
슈퍼스칼라 마이크로프로세서는 복수개의 가변 바이트 길이 명령어를 병렬로 빠른시간 내에 정렬하고, 디코딩하고 실행하는 문제점을 해결하기 위한 명령어 프리디코딩 방법을 구비하고 있다. 상기와 같은 슈퍼스칼라 마이크로프로세서에 있어서, 명령어들이 외부 메인 메모리로부터 명령 케쉬 내로 기록될 때, 프리디코더는 약간의 프리디코드 비트(프리디코드 테그)들을 각 바이트에 부가한다. 이와 같은 비트들은 바이트가 x86 명령어의 스타트 또는 엔드 바이트인지, x86 명령어를 구현하기 위하여 필요한 마이크로 명령어 갯수인지, 그리고 연산코드 및 프리픽스의 위치인지를 표시한다. 명령어들이 케쉬로부터 읽히고 난 이후에, 슈퍼스칼라 마이크로프로세서는 각 명령어를 ROPS에 해당하는 하나 또는 그 이상의 마이크로 명령어로 변환한다. ROPS는 그들이 고정 길이 및 단순하고 일관된 엔코딩과 관련되어 있다는 점에서 RISC 명령어들과 유사하다. 명령어 케쉬 내에서 x86 명령어들은 명령어들이 어디서 시작하고 그리고 끝나는지를 표시하고 그리고 얼마나 많은 ROPS가 필요한지를 표시하는 프리디코드 비트로 이미 테그되어 있기 때문에, 명령 경계의 위치를 결정하기 위하여, 각각의 x86 명령어를 하난 또는 그 이상의 ROPS로 번역하기 위하여, 그리고 ROPS의 고정 개수를 병렬 명령 디코더로 제공하기 위하여 바이트큐(벼queue)를 위한 단순한 업무이다.
상기에 기술된 바와 같이, 프리디코딩 기술이 성공적일지라도, 명령 캐쉬 어레이 내의 사용 가능한 저장 공간의 50% 이상이 프리디코드 비트용으로 할당되어야 한다. 따라서, 상기의 사실은 명령 코드용의 명령 캐쉬 내에서의 저장량을 제한하고 증가된 다이 크기로 인하여 프로세서의 비용을 증가시키는 문제점이 있다.
발명의 요약
상기에 기술된 문제점들은 본 발명에 따른 가변 바이트 길이 명령어를 프리디코딩하는 방법에 의하여 극복된다. 일 실시예에 따라, 프리디코드부는 명령 캐쉬 내에 저장되기 이전에 가변 바이트 길이 명령어를 프리디코딩한다. 상기 프리디코딩부는 각각의 명령 바이트용의 복수개의 프리디코드 비트를 발생할 수 있도록 구성된다. 각각의 명령 바이트와 관련한 복수개의 프리디코드 비트들은 프리디코드 테그라고 부른다. 명령 정렬부는 가변 바이트 길이 명령어를 슈퍼 스칼라 마이크로프로세서 내에 고정 지시 위치를 형성하는 복수개의 디코드부로 전송하기 위하여 프리디코드테그들을 이용한다.
일실예에서, 프리디코드부는 각각의 바이트 명령 코드, 즉 스타트 비트, 엔드 비트 및 기능 비트와 연관된 3개의 프리디코드 비트를 발생한다. 스타트 비트는 해당 바이트가 명령어의 제1 바이트일 때 설정된다. 이와 유사하게, 엔드 비트는 바이트가 명령어의 최종 바이트일 때 설정된다. 사용된 의미를 기능 비트로 연결시키기보다는, 프리디코드부는 기능 비트에 의한 또는 이와 관련된 의미가 그 상태(예를 들면, 기능 비트가 설정 또는 설정되지 않은가에 따라서) 및 상기 바이트용의 스타트비트의 상태에 따라 결정될 수 있도록 구성된다. 기능 비트의 의미는 이전 명령 바이트의 스타트 비트의 상태에 따라서 결정된다.
예를 들면, 만약 특정 바이트용 스타트 비트가 설정되면, 기능 비트는 명령이 직접적으로 디코딩 가능한 "고속 경로(fast path)" 명령인지 또는 MROM 명령어(예를 들면, 마이크로 코드로 통하여 시리얼화(serialized)되는 명령어인지를 표시한다. 다른 측면에서, 만약 특정 바이트용 스타트 비트가 클리어되고, 만약 상기 바이트가 스타트 바이트(예를 들면, 그의 스타트 비트가 설정된 명령 바이트)를 따른다면, 기능 비트는 이피코드가 명령어의 제1 바이트인지 또는 프리픽스가 명령어의 제1바이트인지를 나타낸다. 만약, 바이트 용 스타트 비트가 클리어되고, 바이트가 스타트 비트를 따르지 않는다면, 기능 비트는 관련된 바이트가 MODRM 또는 SIB 바이트 둥 중 하나라는 것을 의미하며, 또는 변위 또는 직접(immediate) 데이터라는 것을 의미한다.
프리디코드부로부터의 프리디코드 정보를 이용하여, 명령 정렬부는 작은 수의 로직 게이트로 구현되어, 대단히 높은 연산 주파수를 얻게 된다. 디코드하기 위하여 명령 정렬은 상대적으로 보다 적은 파이프라인 스테이지로 구현된다. 그리고, 가변바이트 길이 명령어가 정렬되는 복수개의 디코드부는 상당히 빠른 명령어 디코딩을 구현하기 위하여 프리디코드 테그들을 이용한다. 최종적으로, 프리디코드부는 특정 프리디코드 테그의 기능 비트가 스타트 비트의 상태에 의하여 결정되고 그리고 상당히 많은 양의 프리디코드 정보가 적은 개수의 프리디코드 비트를 구비할 수 있도록 구성된다. 따라서, 성능을 저하시키지 않고 명령 케쉬의 크기를 줄일 수 있도록한다.
나아가, 기능 비트에 의하여 전달된 정보에 따라, 디코드부는 연산코드의 정확한 위치, 변위, 즉시(immediate), 레지스터, 및 스케일 인덱스 바이트를 판단하게 된다. 따라서, 명령 바이트를 통한 디코드부에 의한 시리얼 스켄이 필요 없게 된다. 그리고, 기능 비트는 디코드부가 슈퍼 스칼라프로세서 내에서의 다른 서브유니트(subunit)의 이용을 위하여 8 비트 선형 주소(가산기 회로를 경유하여)를 계산하도록 한다. 따라서, 빠른 디코딩이 구현되며, 우수한 성능을 얻을 수 있다.
본 발명에 있어서, 슈퍼스칼라 마이크로프로세서 내에서 가변 바이트 길이 명령어를 프리디코딩하기 위한 방법은 명령 바이트가 스타트 바이트인지를 표시하는 스타트 비트를 발생하는 단계와, 상기 명령의 바이트가 엔드 바이트인지를 나타내는 엔드 비트를 발생하는 단계와, 상기 스타트 비트의 값에 따른 의미를 전달하는 기능비트를 발생하는 단계를 구비하고 있다.
본 발명은 슈퍼스칼라 마이크로프로세서에 관한 것으로, 구체적으로는 고성능 및 고주파수 슈퍼스칼라 마이크로프로세서 내에서의 가변 바이트 길이 컴퓨터 명령어의 프리디코딩에 관한 것이다.
본 발명의 다른 목적 및 장점들은 다음의 상세한 설명과 첨부된 도면에 따르 보다 분명해질 것이다.
제1A도는 일반적인 x86 명령 세트 포맷을 도시하는 도면.
제1B도는 복수개의 다른 가변 바이트 길이 x86 명령 포맷을 도시하는 도면.
제1C도는 복수개의 x86 어드레싱 모드 포맷을 도시하는 도면.
제2도는 목수개의 명령어를 6개의 디코드부로 전송하기 위하여 명령 정렬부를 구비하는 슈퍼스칼라 마이크로프로세서의 블록도.
제3도는 명령 정렬부 및 6개의 디코드부의 블록도.
제4A도 내지 4C도는 MROM 명령의 실행을 도시하는 블록도.
본 발명은 여러 가지 수정 및 다른 형태가 가능하며, 그 다른 실시들이 도면에 도시되어 있으며, 아래에 더욱 구체적으로 설명될 것이다. 도면 및 상세한 설명은 하기에 공개된 내용에 한정되지 않으며, 첨부된 청구항 인용된 바와 같이 본 발명의 정신 및 범위 내에서 모든 수정 등이 가능하다.
제2도는 본 발명의 방법에 따라 작동하는 프리디코드부(202)를 구비하는 슈퍼스칼라 마이크로프로세서(200)의 블록도이다. 이에 도시된 바와 같이, 슈퍼스칼라 마이크로프로세서(200)는 프리디코드(202) 및 명령 케쉬(204)에 연결된 브랜치 예측부(220)를 구비하고 있다. 프리페치부(203)는 프리디코드부(202)에 연결되어 있다. 명령 정렬부(206)는 명령 케쉬(204) 및 복수개의 디코드부(208A 내지 108F, 디코드부(208)이라 칭함) 사이에 연결되어 있다. 각각의 디코드부(208A 내지 208F)는 각각의 예약 스테이션(21OA 내지 21OF, 예약 스테이션(210)이라 칭함)에 연결되어 있으며, 각각의 예약 스테이션(21OA 내지 210F)은 각각의 기능부(212A 내지 212F, 기능부(212)라 칭함)에 연결되어 있다. 디코드부(208), 예약 스테이션(210) 및 기능부(212)는 리오더 버퍼(216), 레지스터 파일(218) 및 로드/저장부(222)에 연결되어있다. 데이터 케쉬(224)는 로드/저장부(222)에 연결되어 있으며, MROM부(209)는 명령 정렬부(206)에 연결되어 있다.
일반적으로, 명령 케쉬(204)는 디코드부(208)로 전송되기 전에 명령들을 일시적으로 저장하기 위하여 연결되는 고 속의 케쉬 메모리이다. 명령 케쉬(204)는 16 바이트(각각의 바이트는 8비트로 구성)의 라인에 형성된 명령 코드를 32 킬로바이트까지 케쉬할 수 있도록 구성된다. 작동 중에, 명령 코드는 프리페치부(203)를 경유하여 메인 메모리(미도시)로부터 코드를 프리페칭하여 명령 케쉬(204)에 제공된다. 명령 코드 각각의 바이트를 위하여, 명령 케쉬(204)는 그와 관련된 프리디코드 테그를 저장한다. 그리고, 명령 케쉬(204)는 설정, 완전 설정 또는 직접 구성에 의하여 구형될 수 있다.
프리페치부(203)는 명령 케쉬(204) 내에 저장하기 위하여 메인 메모리로부터 명령코드를 프리페취하기 위하여 사용된다. 프리페취(203)는 메인 메모리로부터의 64-비트 와이드 코드를 명령 케쉬(204) 내로 버스트하도록 구성된다. 여러 가지 다양한 코드 프리페칭 기술 및 알고리즘들이 프리페취부(203)에 의하여 사용될 수 있다. 프리페취부(203)가 메인 메모리로부터 명령들을 페취함으로써, 프리디코드부(202)는 스타트 비트, 엔드 비트 및 기능 비트의 명령 코드의 각 바이트와 관련한 3개의 프리코드 비트들을 발생한다.
스타트 비트 및 엔드 비트는 명령의 경계를 표시한다. 각 바이트의 기능 비트들은 명령이 디코드부(208)에 의하여 직접 디코딩될 수 있는지, 또는 명령이 MROM 우니트(209)(하기에 상세히 기술)에 의하여 제어되는 마이크로코드 정차에 의하여 실행되어야하는지, 또는 바이트가 MODRM 인지 SIB 인지, 또는 바이트가 변위인지 이메디에이트 인지와 같은 바이트 또는 명령에 관한 추가적인 정보를 전달한다. 기능비트는 연산코드 바이트의 위치를 표시하기 위하여 사용된다. 특정 명령 바이트의 기능 비트의 엔코딩은 해당하는 스타트 비트에 종속적이다.
테이블 1은 프리디코드부(202)에 의하여 구형되는 프리디코드 케그의 엔코딩을 나타내고 있다. 상기 테이블에 도시된 바와 같이, 만약 주어진 바이트가 명령의 첫바이트라면, 바이트가 메인 메모리로부터 페취되고 명령 케쉬(204)에 저장됨으로써, 상기 바이트를 위한 스타트 비트는 프리디코드부(202)에 의하여 설정된다. 만약, 상기 바이트가 명령의 최종 바이트라면, 상기 바이트를 위한 엔드 비트가 설정된다. 만약, 특정 명령이 디코드부(208)에 의하여 직접 디코드될 수 없다면, 명령의 제1 바이트와 관련된 기능 비트가 설정된다. 반대로, 만약 명령이 디코드부(208)에 의하여 직접 디코딩될 수 있다면, 명령의 제1 바이트와 관련한 기능 비트가 클리어된다. 만약 연산코드가 제1 바이트라면, 특정 명령의 제2 바이트용의 기능 비트가 클리어된다. 만약, 연산코드가 제2 바이트라면, 상기 기능 비트가 설정된다. 연산코드가 제2 바이트인 명령에서, 제1 바이트는 프리픽스 바이트이다. 명령 바이트 번호 3 내지 8용의 기능 비트 값은 바이트가 MODRM 또는 SIB라는 것을 표시하며, 그리고 바이트가 변위 또는 즉시 데이터를 구비한다는 것을 표시한다.
테이블 1에 도시된 바와 같이, 슈퍼스칼라 마이크로프로세서(200)의 프리코드부(202)는 명령 코드의 각 바이트를 위한 기능 비트를 발생하도록 구성된다. 기능 비트는 상기 바이트와 관련한 스타트 비트의 값에 다라 결정된다. 테이블1에 도시된 엔코딩을 구현하기 위하여, 기능 비트는 이전 명령 바이트와 관련한 스타트 비트의 값에 종속적이다.
보다 구체적으로는, 만약 상기 바이트를 위한 스타트 비트가 설정되어 있으면, 기능 비트는 명령이 직접적으로 디코딩 가능한 명령인지 또는 MROM 명령인지를 표시한다. 만약 명령 코드의 특정 바이트와 관련한 스타트 비트가 클리어되고, 그리고 스타트 비트가 설정되어 있는 명령 코드의 바이트를 즉시에 따르게 된다면, 기능비트는 연산코드가 제1 바이트인지 또는 프리픽스가 제1 바이트인지를 표시한다.
만약, 명령 코드의 바이트를 위한 스타트 비트가 클리어되고, 이전 바이트의 스타트 비트가 클리어된다면, 기능 비트는 바이트가 MODRM인지 또는 SIB 바이트인지를 표시하고, 또는 바이트가 변위인지 또는 즉시(immediate) 데이타인지를 표시한다. 특정 명령 내의 결과 바이트를 위하여, 바이트 3 내지 8 내에 설정된 제2 기능 비트는 즉시 데이터를 표시한다.
상기에 기술된 바와 같이, 슈퍼스칼라 마이크로프로세서(200)에 있어서, 프리디코드 테그는 명령 코드의 각 바이트과 관련되어 생성된다. 상기 프리디코드 테그 및 명령 코드는 슈퍼스칼라 마이크로프로세서에 의한 결과 처리를 위하여 명령케쉬(204) 내에 저장된다. 기능함수가 특정 바이트의 스타트 비트에 종속적이고 그리고 이전 바이트의 스타트비트에 종속적이기 때문에, 상당히 많은 양의 프리코드정보가 상당히 빠른 정렬 및 명령 디코드를 얻기 위하여 명령 정렬부(206) 및 디코드부(208)로 전달된다. 프리디코드 내에서 필요한 비트의 수는 작기 때문에, 명령케쉬(204)의 필요한 크기는 성능을 저하시키지 않고 감소될 수 있다.
기능 비트에 의하여 전송된 정보를 이용하며, 디코드부는 연산코드, 변위, 즉시(immediate), 레지스터 및 스케일 인덱스 바이트의 정확한 위치를 알수 있다.따라서, 명령 바이트를 통한 디코드부에 의한 시리얼 스캔이 필요하게 된다. 그리고, 기능 함수에 따라, 디코드부는 슈퍼스칼라 마이크로프로세서 내에서 다른 서브유니트(subunit)에 의한 사용을 위하여 8-비트 선형 어드레스(가산 회로를 경유하여)를 계산하게 된다. 따라서, 상당히 바른 디코딩이 얻어질 수 있으며, 고성능을 얻을 수 있다.
상기에 설명한 바와 같이, x86 명령 세트 내에서의 소정 명령은 디코드부(208)에 의하여 직접적으로 디코드될 수도 있다. 이와 같은 명령들을 "고속 경로(fastpath)" 명령으로 칭한다. x86 명령 세트의 나머지 명령은 MROM 명령이라 칭한다. MROM 명령은 MROM부(209)에 의하여 실행된다. MROM 명령이 얻어지면, MROM(209)는 명령을 소정의 작동을 구현하기 위하여 정의된 고속 경로 명령의 서브 세트로 명령을 시리얼화한다. x86 명령 카테고리 리스킹 및 고속 경로 및 MROM 명령을 다루는 방법을 하기에 설명한다.
명령 정렬부(206)는 명령 케쉬(204)로부터 디코드부(208A 내지 208F)에 의하여 형성되는 고정지지 위치로의 채널 또는 퍼널(funnel) 가변 바이트 길이 명령에 제공된다. 제3도 내지 제5도에 도시된 바와 같이, 명령 정렬부(206)는 명령 케쉬(204)에 의하여 기술된 바와 같은 선 내에서 명령의 스타트 바이트의 위치에 따라 지정된 디코드부(208A 내지 208F)로 명령 코드를 체널하기 위하여 구성된다. 소정의 명령이 전달되는 디코드부(208A 내지 208F)는 상기 명령의 스타트 바이트의 위치와 이전 명령 스타트 바이트의 위치에 다라 종속적이다. 소정의 바이트 위치에서의 명령 스타팅은 소정의 지시 위치로의 지시를 위하여 제한된다. 구체적인 내용은 다음과 같다.
명령 케쉬(204)로부터 디코드부(208)로의 명령 정렬을 기술하기 이전에, 제2도의 슈퍼스칼라 마이크로프로세서(200) 내에 설치된 다른 부시스템에 대한 일반적인 내용들이 기술된다. 제2도에 도시된 바와 같이, 디코드부(208) 각각은 고속 경로로 명령을 디코딩하기 위하여 디코딩 회로를 구비하고 있다. 각각의 디코드부(208A 내지 208F)는 변위 및 즉시 데이터를 해당하는 예약 스테이션부(21OA 내지 21OF)를 라우트한다. 디코드부(208)로부터의 출력 신호는 기능부(212)를 위한 비트 엔코드 실행 명령 및 피연산자 주소 정보, 즉시 데이터 및/또는 변위 데이터를 구비하고 있다.
제2도의 슈퍼스칼라 마이크로프로세서는 명령 실행을 하며, 레지스터 읽기 및 쓰기연산을 위한 프로그램 순서를 추적하기 위하여, 그리고 레지스터 재명명을 위하여, 그리고 명령 실행 및 브랜치 예측 오류 복구를 구현하고 그리고 정확한 익셉션(exception)을 구현하기 위하여 리오더 버퍼(216)를 이용한다. 리오더버퍼(216) 내의 임시 자장 위치는 리지스터의 업데이트를 구현하는 명령의 디코드에 따라서 예약되어, 레지스터 상태를 저장한다. 리오더 버퍼(216)는 FIF0 구성에 따라 구현되며, 각각의 결과는 레지스터 파일에 저장됨으로써 버퍼의 바닥부로 이동한다. 따라서, 버퍼의 상단부에 새로운 엔트리를 위하여 공간을 만든다. 하기에 기술된 바와 같이, 다른 구성의 리오더 버퍼(216)도 가능하다. 만약 브랜치 예측이 부정확하다면, 예측 오류 경로에 따른 명명의 결과는 레지스터 파일(218)에 쓰여지기 이전에 버퍼 내에서 무효화된다. 비트 엔코드 실행 명령 및 디코드부(208a 내지 208F)의 출력에 제공된 현재의 데이터는 각각의 예약 스테이션부(21Oa 내지 21OF)로 직접적으로 라우팅된다. 각각의 예약 스테이션부(210A 내지 21OF)는 해당하는 기능부로의 지시를 기다리는 세 개의 펜딩 명령 동안에 명령 정보(예를 들면, 비트엔코딩된 실행 미트 및 피연산자 값, 피연산자 테그 및/또는 즉시 데이터)를 홀딩할 수 있다. 제2도에 도시된 바와 같이, 각각의 디코드부(208A 내지 208F)는 예약 스테이션부(21OA 내지 21OF)와 관련이 있으며, 상기 각각의 예약 스테이션부(21OA 내지 210F)는 기능부(212A 내지 212F)와 유사하게 관련되어 있다.
따라서, 6개의 지시 위치들은 디코드부(208), 예약 스테이션부(210) 및 기능부(212)에 의하여 형성된다. 디코드부(208A)를 경유하여 위치0을 지시하기 위하여 정렬되고 전달된 명령들은 예약 스테이션부(210A)로 전달되며, 종국적으로는 실행을 위하여 기능부(212A)로 전달된다.
이와 유사하게, 디코드부(208B)로 정렬되고 전달된 명령들은 예약 스테이션부(21OB) 및 기능부(212B)로 전달된다.
특정 명령의 디코딩에 따라, 만약 소정의 피연산자가 레지스터 위치라면, 레지스터 정보는 리오더 버퍼(2l6) 및 레지스터 파일(218)로 동시에 라우팅된다. 그리고, x86 레지스터 파일은 EAX, EBX, ECX, EDX, EBP, ESI 및 ESP의 8개의 32 비트 실제 레지스터를 구비하고 있다. 리오더 버퍼(216)는 레지스터들의 내용을 변경시키는 결과에 대한 임시 저장 위치들을 구비하고 있다. 리오더 버퍼(216)의 임시 저장 위치는 디코드에 다라 실제 레지스터의 내용을 수정하는 각 명령에 대하여 예약되어 있다. 따라서, 소정 프로그램을 실행하는 동안에, 여러 가지 포인트에서, 리오더 버퍼(216)는 소정 레지스터의 실행된 내용을 구비하는 하나 또는 그 이상의 위치들을 구비할 수 있다. 만약 소정 명령의 디코드가 주어진다면, 리오더 버퍼(216)는 소정의 명령에서 피연산자로써 사용된 레지스터에 할당된 이전 위치들을 구비하고 있으며, 리오더 버퍼(216)는 가장 최근에 할당된 위치에서의 값(1) 또는 상기 값이 이전 명령을 실행하는 기능부에 의하여 만들어지지 않는다면 가장 최근에 할당된 위치에 대한 테그(2)를 해당하는 예약 스테이션으로 전송한다. 만약, 리오더 버퍼가 소정의 레지스터용으로 예약된 위치를 구비하고 있다면, 피연산자 값(또는 테그)는 레지스터 파일(218)로부터 보다는 리오더 버퍼(216)로부터 제공된다. 만약, 리오더 버퍼(216) 내에 필요한 레지스터용으로 저장된 위치가 없다면, 상기 값은 레지스터 파일(218)로부터 직접적으로 얻어진다. 만약, 피연산자가 메모리 위치에 해당한다면, 피연산자 값은 로드/저장부(222)를 통하여 예약 스테이션부로 제공된다.
작당한 리오더 버퍼 구현에 대한 상세한 내용은 Mike Johnson, Prentice-Hall, englewood Cliffs, New Jersey, 1991의 "Superscalae microprocessor Design" 및 Witt, et. al.에 의한 Serial No.08/146,382 0ctober 29, 1993의 공동 출원건인 "High Performance Superscalar Microprocessor"에 기술되어 있다. 상기의 내용들은 참조문헌으로 본 발명에 포함되어 있다.
예약 스테이션부(21OA 내지 21OF)는 해당하는 기능부(212A 내지 212F)에 의하여 실행되는 명령 정보를 일시적으로 저장한다. 상기에 기술한 바와 같이, 각각의 예약 스테이션부(210A 내지 21OF)는 세 개의 명령까지를 저장할 수 있다. 6개의 예약 스테이션(21OA 내지 21OF)의 각각은 해당하는 기능부 및 피연산자 값에 의하여 실행되는 비트 엔고딩된 실행 명령을 저장하기 위한 위치들을 구비하고 있다. 만약, 소정의 피연산자가 사용가능하지 않다면, 상기 피연산자를 위한 테그는 리오더 버퍼(216)로부터 제공되고, 그리고 결과(예를 들면, 이전의 명령이 실행을 완료함에 따라)가 발생할 때 까지 해당하는 예약 스테이션 내에 저장된다. 명령이 기능부(212A 내지 212F) 중 한 개에 의하여 실행된다면, 명령의 결과는 리오더 버퍼(216)(이 기술은 결과전송으로 일반적으로 칭한다)를 업데이트하기 위하여 전달되는 동시에 결과를 기다리는 예약 스테이션부(21OA 내지 210F)로 바로 전송된다.
명령들은 피연산자 값이 사용가능하게 된 이후에, 실행을 위하여 기능부들에 지시된다. 즉, 만약예약 스테이션부(21OA 내지 21OF) 중 한 개 내에 펜딩된 명령과 관련된 피연산자가 필요한 피연산자를 수정하는 명령에 해당하는 리오더 버퍼(216)내에 이전 결과 값의 위치로 테그된다면, 상기 명령은 이전 명령에 대한 피연산자 결과가 얻어질 때까지 해당하는 기능부(212)로 지시되지 않는다. 따라서, 명령들이 실행되는 오더는 원래의 프로그램 명령 순서와 동일하지 않는다. 리오더 버퍼(216)는 데이터가 "쓰기 이후 읽기"가 이루어지는 상황을 유지하게 된다.
기능부(212)의 각각은 가감 연산 및 쉬프트, 로테이트, 논리 연산 및 브렌치 연산의 정수 연산을 구현하기 위하여 구성된다. 부동 소숫점부(미도시)는 부동소숫점연산을 위하여 이용될 수 있다. 기능부(212) 각각은 조건 브랜치 명령의 실행에 대한 정보를 브랜치 예측부(220)에 제공한다. 만약, 브렌치 예측이 부정확하다면, 브렌치 예측부(220)는 명령 처리 파이프라인 내로 들어간 예측 요류 브렌치에 명령결과를 플러쉬(flushes)하며, 프리페치/프리디코드부(202)가 명령 케쉬(204) 또는 메인 메모리로부터 필요한 명령을 페치하도록 한다. 예측 오류 브렌치 명령이 버려지고 난 이후에 발생하는 그리고 로드/저장부(222) 및 리오더 버퍼(216) 내에 일시적으로 저장된 것을 구비하는 원래의 프로그램 순서 내에서 명령 결과들을 상기의 상황에서 얻을 수 있다. 상기 브렌치 예측 메커니즘은 잘 알려져 있다.
기능부(212)에 의하여 얻어진 결과는 레지스터 값이 업데이트된다면 리오더버퍼(216)로 보내지고, 그리고 메모리 위치의 내용이 변한다면 로드/저장부(222)로전송된다. 만약 결과가 레지스터에 저장된다면, 리오더 버퍼(216)는 명령이 디코딩될때 레지스터 값용으로 예약된 위치에 그 결과를 저장한다. 상기에 설명한 바와같이, 결과들은 필요한 피연산자 값들을 얻기 위한 이전 명령 실행의 결과들을 펜딩 명령들이 기다리는 예약 스테이션부(21OA 내지 21OF)로 전송된다.
일반적으로, 로드/저장부(222)는 기능부(212A 내지 212F) 및 데이터 케쉬(224) 사이에 인터페이스를 제공한다. 로드/저장부(222)는 펜딩 로드 또는 저장을 위한 데이터 및 어드레스 정보를 위하여 8개의 저정 위치를 구비하는 저장 버퍼로 구성된다. 기능부(212)는 로드/저장부(222)로의 억세스를 위하여 중재한다. 버퍼가 풀(full) 상태면, 기능부는 로드/저장부(222)가 펜딩된 로드 또는 저장 요청 정보를 위한 공간을 구비할 때까지 대기하게 된다. 로드/저장부(222)는 데이터 일관성이 유지되도록 하기 위하여 펜딩된 저장 명령에 대한 로드 명령을 체킹한다.
데이터 케쉬(224)는 로드/저장부(222) 및 메인 메모리 부시스템 사이에 전송되는 데이타를 일시적으로 저장하기 위하여 제공된다. 데이터 케쉬(224)는 8 킬로바이트 데이터를 저장할 수 있는 능력이 있다. 데이터 케쉬(224)는 해당 구성 및 여러 가지의 메모리 구성으로 구현된다.
명령 정렬부(206)를 통하여 명령 케쉬(204)로부터 디코드부(208)로의 명령 전송을 기술하면 다음과 같다. 제3도는 명령 정렬부(206)와 명령 케쉬(204)로부터 제공되는 명령 라인에 대한 디코드부(208a 내지 208F)의 내부 부분을 구비하는 블록도이다. 상기에 설명한 바와 같이, 명령 정렬부(206)는 가변 바이트 기이 명령(이 경우에 있어, x86 명령을 고속 경로 명령으로 칭함)을 디코드부(208A 내지 208F)로 채널하기 위하여 구성된다. 제3도에 도시된 바와 같이, 래칭부(302)는 명령케쉬(204)의 출력 버퍼 섹션(301)의 부분으로써 포함된다. 래칭부(302)는 디코드부(208)로 전송되기 이전에 명령 케쉬(204)의 저장 어레이(제3도에 미도시)로부터 제공되는 명령 코드 라인을 저장한다.
제3도의 명령 정렬부(206)는 레칭부(302) 및 디코드부(208) 사이에 연결된 멀티플렉서 채널(304a 내지 304G)이라 칭하는 복수개의 멀티플렉서 회로를 구비한다. 멀티플렉서 제어 회로(306)는 멀티플렉서 채널(304A 내지 304G) 각각에 연결되어 있다. 각각의 디코드부(208A 내지 208F)는 멀티플렉서 채널(304A 내지 304F)에 연결된 입력포트를 구비하는 명령 디코더(318A 내지 318F)를 구비하고 있다. 각각의 디코드부(108A 내지 208F)는 변위/즉시 데이터 버퍼(330A 내지 330F) 및 명령지시부(340A 내지 340F)를 구비하고 있다.
작동 중에, 실행되는 명령 라인이 명령 케쉬(204)의 저장 어레이로부터 래칭부에 제공된다. 명령 케쉬(204) 내의 명령 코드의 각각 바이트는 스타크 비트, 엔드 비트 및 기능 비트를 구비하는 프리디코드 테그와 관련되어 있다. 명령 코드 라인이 레칭부(302)로 제공된다면, 각각의 바이트와 관련된 프리디코드 테그가 멀티플렉서 제어 회로(306)의 입력에 제공된다. 레칭부(302) 내의 명령 코드 라인에 해당하는 프리디코딩 테그에 따라, 멀티플렉서 제어 회로(306)는 명령 바이트들이 지정된 명령 디코더(318A 내지 318F)로 선택적으로 라우팅될 수 있도록 멀티플렉서 채널(304A 내지 304g)을 제어한다. 디코드부(208A 내지 208F)에 의하여 형성되는 명령 경로들은 지지 위치라 칭한다. 멀티플렉서 채널(304A 내지 304G)를 통한 명령코드의 채널링은 래칭부(302)의 각 라인과 관련된 각 명령에 따른 스타트 비트의 위치에 종속적이다. 제3도에 도시된 바와 같이, 5개의 제1 멀티플렉서 채널(304A 내지 304F)의 각각은 래칭부(302)로부터의 명령 코드의 4개의 연속 바이트 라우팅한다. 멀티플렉서 채널(304G)은 명령 디코더(318)로의 병렬 코드를 연속 채널링할수 있다.
테이블 2는 스타트 비트들이 채널링되는 멀티플렉서 채널(304A 내지 304G)을 구비하고 있다. 기술된 바와 같이, 명령 코드의 채널링은 소정의 라인 내에서 스타트 바이트의 위치에 종속적이다. 그리고, 각각의 멀티플렉서 채널(304A 내지 304F)은 스타트 바이트가 하위 멀티플렉서 채널에 의하여 라우팅되기 위하여 선택될 때 할당된 것들 중에서 최하위의 스타트 바이트를 라우트할 수 있도록 구성된다.
테이블 2에 도시된 바와 같이, 멀티플렉서 채널(304A)은 바이트 위치 0-2에 위치하고 있는 스타트 바이트를 디코드부(318A)로 라우팅한다. 멀티플렉서 채널(304B)은 바이트 위치(1-4)에서 스타트 바이트를 디코드부(318B)로 라우팅한다. 멀티플렉서 채널(304C)은 바이트 위치(3-8)에 위치한 스타트 바이트를 디코드부(208C)에 전송한다. 이와 유사하게, 멀티플렉서 채널(304D)은 바이트 위치(6-10)에 위치한 스타트 바이트를 디코드부(208D)에 전송한다. 그리고, 멀티플렉서 채널(304E)은 바이트위치(9-12)에 위치한 스타트 바이트를 디코드부(208E)에 전송한다. 마지막으로, 멀티플렉서 채널(304F)은 바이트 위치(12-15)에 위치한 스타트 바이트를 디코드부(318F)에 전송한다. 바이트 위치(13-15)에 위치한 스타트 바이트는 멀티플렉서 채널(304G)을 경유하여 불완전한 명령(예를 들면, 다음 라인으로 연장되는 명령)의 바이트를 디코드를 위하여 다음 케쉬 라인으로 전송하기 위한 17개의 지시위치로 라우팅된다. 멀티플렉서 채널(304G)을 통하여 라우팅되는 명령 바이트는 명령의 나머지 바이트들이 래칭부(302) 내에서 사용 가능할 때 다음 클록 사이클에 따라 명령 디코더(304A)로 전송된다.
만약, 명령이 다음 케쉬 라인 근처에서 감싸지면, 지정된 위치로의 명령 전송은 다음 라인에서 나타나는 명령의 나머지 바이트의 성질에 종속적이다. 다음 케쉬 라인 근처에서 감싸지는 변위 또는 즉시 데이터를 위하여, 즉시 또는 변위 데이터는 멀티플렉서 채널(304A)을 통하여 변위/즉시 데이터 버퍼(330F)로 제공된다. 상기 명령(이전 케쉬 라인에서 나타나는)의 선행 바이트는 선행 클록 사이클 동안에 명령디코더(318F)로 전송된다. 프리픽스, 연산코드, MODRM 및/또는 SIB 바이트는 다음케쉬 라인 근처에서 감싸지며, 이전 라인으로부터의 명령 정보는 멀티플렉서 채널(304G)을 경유하여 명령 디코드(318A)로 라우팅되며, 그리고 다음 클록 사이클 동안에 나마지 명령 코드와 함께 합쳐진다.
라인의 소정 명령이 전송되는 지시 위치의 개수를 제한하여, 명령 정렬부(206)를 구현하기 위하여 필요한 로직의 계단씩 레벨의 갯수는 장점적으로 감소된다. 단일지시 위치(예를 들면, 바이트 위치 5 및 11)로의 라인 내에 바이트 위치의 선택 서버세트 중 한 개에 위치하는 스타트 바이트를 구비하는 명령의 전송을 제한하기 위하여, 명령 정렬을 위한 로직의 계단씩 레벨의 개수는 더 감소될 수 있다. 따라서, 상기에 기술한 명령 정렬부(206)는 파이프라인 스테이지 마다 상당히 적은 게이트 개수를 가지는 슈퍼스칼라 마이크로프로세서의 구현을 가능하게하여, 고주파수 연산을 가능하게 한다. 상당히 긴 명령을 위하여, 지시 위치가 스킵(skipped)된다 할지라도, 다른 지시 위치들이 케쉬 라인 내에 남아 있는 나머지 명령을 위하여 사용가능하기 때문에 높은 성능을 이울 수 있다.
정의된 고속 경로 명령은 길이로 8 바이트이며, 단일 프리픽스 바이트를 구비할 수 있다. 고속 경로 명령을 단일 프리픽스 바이트로 제한하여, 고속 경로 명령의 바이트(4 내지 7)는 변위 및/또는 즉시 데이터를 구비할 수 있다. 예를 들면, 명령이 4바이트 보다 큰 경우에 있어서, 명령의 4개의 제1 바이트는 명령 스타트 바이트에 할당된 멀티플렉서 채널을 통하여 라우팅된다. 명령의 나머지 바이트들은 다음 지시 위치 멀티플렉서 채널을 통하여 채널링된다. 상기와 같은 상황에서, 명령의 나머지 바이트를 수신하는 지시 위치(예를 들면, 명령 디코더)의 명령 디코더는 제1바이트 위치에서의 스타트 비트의 존재를 검출하며, 그리고 데이터를 선행하는 지시 위치의 변위/즉시 데이터 버퍼(330)로 전송하며, NOOP 명령을 발생한다.
즉, 만약 명령의 스타트 비트가 래칭부(302)의 바이트 위치 0에 위치하고 있다면, 상기 바이트는 바이트 위치 1, 2 및 3에 위치하는 세 개의 연속 바이트와 함께 디코드부(208A)에 제공된다. 만약 다음 스타트 바이트가 위치 2(예를 들면 제1명령이 2 바이트 길이일 때)에 위치할 때, 바이트 2 내지 5는 멀티플렉서 채널(304B)를 통하여 디코드부(208E)로 라우팅된다. 제3도에 도시된 바와 같이, 각각의 명령 디코더(318A 내지 318F)는 한 번에 단 한 개의 명령을 티코딩한다. 따라서, 한 개 이상의 명령의 스타트 바이트가 예를 들면 명령 디코더(318A)에 제공된다면, 제1 명령만이 디코딩된다. 소정의 명령 디코더 내의 추가 명령에 해당하는 제1 엔드 바이트를 넘어선 바이트가 이질적이고, 그리고 무시될 수 있다면, 명령 정렬부(206)의 멀티플렉서 채널(304)는 단지 한 개의 명령(또는 그 부분)이 명령 스타트 및 엔드 프리디코드 비트에 다라 주어진 명령 디코더(318)로 채널링될 수 있도록 구성된다.
상기의 기술 내용에 따라, 만약 바이트 위치 0에서 제1 명령이 스타트한다면, 바이트(0 내지 3)는 명령 디코더(318A)에 제공된다. 만약 명령이 4 바이트보다 길다면, 래칭부(302)의 바이트(4 내지 7)는 멀티플렉서 채널(304B)을 경유하여 명령디코더(318B)로 제공되며, 결과적으로 데이터를 변위/즉시 데이터 버퍼(330A)로 전송한다. 멀티플렉서 채널(308C)은 코드에 나타나는 다음 스타트 바이트를 명령 디코더(318C)로 전송한다. 만약, 바이트 위치O에서 스타팅하는 제1 명령이 4개의 바이트 또는 그보다 적다면, 다음 명령은 제2 명령의 스타트 바이트로 시작하는 멀티플렉서 채널(304B)을 통하여 라우팅된다. 만약 상기 명령이 4개의 바이트 길이보다 크다면, 상기 위치에 해당하는 즉시 또는 변위 데이터는 멀티플렉서 채널(3O4C)를 경유하여 변위/즉시 데이터 버퍼(33OB)로 라우팅된다. 나머지 멀티플렉서 채널들은 유사하게 작동한다.
만약 즉시 또는 변위 데이터가 이전 라인에서 시작하는 명령으로부터 다음 라인 근처에 감사지면, 상기 데이터는 즉시 또는 변위 데이터가 래칭부(302)에서 사용 가능할 때 멀티플렉서 채널(304A)을 통하여 변위/즉시 데이터 버퍼(340F)에 제공된다. 그리고, 명령 디코딩은 변위 및 즉시의 데이터를 위하여 디코딩이 필요하지 않기 때문에 영향을 받지 않는다. 다음 라인의 제1 명령은 멀티플렉서 채널(304B)를 경유하여 명령 디코더(318B)로 라우팅된다.
만약 프리픽스, MODRM 및/또는 SIB 정보가 이전 라인 상에서 시작하는 명령으로부터 그 근처에서 감싸진다면, 멀티플렉서 채널(304G)은 명령의 선행부를 명령 디코더(318A)로 라우팅한다. 그리고, 다음 명령(다음 클록 사이클 동안에 래칭부(302)내의 제1 스타트 비트에 해당하는)이 멀티플렉서 채널(304B)을 통하여 명령디코더(3l8B)로 라우팅된다.
주어진 스타트 바이트가 제공되는 지시 위치 중 아무것도 이전 명령의 지시 위치의 점령으로 인하여 사용가능하지 않는 곳에서 다음과 같은 상황이 발생할 수 있다.
상기와 같은 상황이 발생하면, 명령 및 소정의 명령이 전송을 위하여 다음 클록 사이클이 이루어질대 가지 유지되어야 한다.
x86 명령의 샘플이 아래 테이블 3에 도시되어 있다. 명령(8)의 제1 바이트에 더하여, 명령(1 내지 7)이 케쉬 라인(1)에 도시되어 있다. 케쉬 라인(2)은 명령(8)의 제2 바이트와 같이 시작하며, 명령(9 내지 16)을 구비하고 있다.
테이블 4는 테이블 3에서의 명령 시퀀스가 명령 정렬부(206)에 의하여 디코드부(208a 내지 208f)로 전송되는 방법을 도시하고 있다.
명령(1 내지 5)은 제1 클록 사이클 동안에 디코드부(318A 내지 318E)에 각각 해당하는 지시 위치(0 내지 4)로 전송된다. 래칭부(302)의 바이트 위치(11)에서 시작하는 명령(6)은 디코드부(318E)에 해당하는 지시위치(4)에 채널링된다. 그렇지만, 지시tm위치(4)는 명령(5)에 의하여 이미 차지되며, 명령(6)은 상기 사이클 동안에 전송되지 않는다. 따라서, 멀티플렉서 제어 회로(306)에 의하여, 디코드부(318F)는 명령(1 내지 4)이 디코딩될 때 디코드 단계 동안에 NOOP(비 연산)을지시한다.
클록 사이클(2) 동안에, 명령(6)은 지시 위치(4)에 전송되며, 명령(7)은 지시위치(5)로 전송된다. 상기와 같은 명령들이 디코딩될때, 멀티플렉서 제어 회로(306)에 의하여, 디코드부(318A 내지 318D)가 NOOP 명령을 지시한다. 명령(8)이 다음 케쉬 라인 근처에서 감쌀 때, 명령의 제1 바이트는 다음 클록 사이클 동안에 멀티플렉서 채널(304G)을 경유하여 명령 디코더(318) 근처에서 감싸진다.
클록 사이클(3) 동안에, 명령(8)은 지시 위치(0)로 전송된다. 명령(8)의 제1 바이트는 이전 라인의 바이트 위치(15)로부터 그 근처에 감싸진다. 명령(9 및 10)은 멀티플렉서 채널(304B 및 304C)을 경유하여 지시 위치(1 및 2)로 전송된다. 명령(8내지 10)의 디코드에 다라서, 명령 지시부(340D 내지 E)에 의하여 NOOP 명령이 지시된다.
명령(11 및 12)은 클록 사이클(4) 동안에 지시 위치(2 및 3)로 전송된다. 명령(13)은 바이트(7)에서 시작하며, 그리고 지시 위치(94)로 라우팅되지 않는다. 따라서, 명령(13)의 전송은 다음 클록 사이클 가지 유지되어야 한다.
클록 사이클(5) 동안에, 명령(13 내지 16)은 지시 위치(2 내지 5)로 전송된다. 상기와 유사하게, 명령(13 내지 16)의 디코드 동안에, 명령 지시부(340S 및 340B)에 의하여, 지시 위치(O 및 1)를 위하여 NOOP 명령이 지시된다.
제2도에 도시된 바와 같이, 고속 경로 명령으로써 지정된 x86 명령의 서브세트 내에 포함되지 않은 명령들은 저장된 마이크로코드를 이용하여 MROM부(209)의 제어하에 실행된다. MROM부(209)는 상기 명령을 하나 또는 그 이상의 사이클 동안에 전송되는 고속 명령으로 저장한다. 상기에 설명한 바와 같이, 프리디코드부(202)는 사전 지정된 MROM 명령이 얻어질 때, 명령과 관련한 기능 비트가 설정될 수 있도록 구성된다. 상기와 같은 조건은 명령의 시리얼화를 구현하기 위하여 MROM부(209)에 의하여 검출 가능하다.
래칭부(202) 내의 코드 라인 내의 MROM 명령이 MROM부(209)에 의하여 검출될 때, 상기 명령 및 그 다음의 명령은 현재의 사이클 동안에 전송되지 않는다. 선행하는 소정의 명령은 상기의 설명에 따라 전송된다.
그 다음의 클록 사이클 동안에, MROM부(209)는 MROM 명령을 위한 마이크로 코드에 다라 명령 정렬부(206)를 경유하여 고속 경유 명령을 디코드부(208)로 제공한다. 원하는 MROM 연산을 구현하기 위하여 일단 마이크로 코딩된 명령이 정렬부(206)를 경유하여 디코드부(208)로 전송되면, MROM 명령 이후의 명령이 전송된다.
테이블 5는 MROM 명령(REP MOVES)을 구비하는 x86 어셈블리 언어 코드 세그먼트의 샘플을 도시하고 있다.
테이블 5. VR0M 명령을 구비하는 x86 어셈블리 언어 코드 세그먼트
MOV CX, S_LEN ;스트링 길이를 구함
CLD ;증가 인덱스
REP MOVS ;스트링 이동
POP CX ;레지스터 재저장
POP DI
POP SI
제4A도 내지 4C는 클록 사이클 동안의 테이블 5의 명령의 전송 및 코드를 도시하는 슈퍼스칼라 프로세서(200)를 도시하고 있다. 제4A도에 도시된 바와 같이, 제1 클록사이클 동안에, 두 개의 제1 명령(MOVE CX,S LEN 및 CLD)은 멀티플렉서 채널(304A 및 304B)을 통하여 지시 위치(0 및 1)(예를 들면, 디코드부(318A 및 318B)로 라우팅된다. 디코드 MROM부(209)에 의하여, 디코드부(208C 내지 208F)는 NO0P 명령을 지시한다.
REP MOVSB 명령을 유효하게 하는 마이크로코드 명령이 제4B에 도시된 바와 같이, 사이클 2 내지 N을 동안에 전송된다. 상기의 사이클 동안에, MROM부(209)에 저장된 마이크로코드에 따른 고속 경로 명령은 명령 정렬부(206)를 통하여 디코드부(208A 내지 208F)로 전송된다. 상기 MROM 시퀀스는 여러개의 사이클을 필요로 한다.
MROM 명령의 전송에 따라, MR0M 명령을 따르는 라인의 나머지 명령은 멀티플렉서 채널(304D 내지 304F)을 통하여 지시 위치(3 내지 5)로 전송된다. 상기와 같은 명령의 디코드에 따라, MROM(209)에 의하여 디코드부(208A 내지 208C)는 NOOP 명령을 지시한다.
제2도 내지 제4도에 도시된 바와 같이, 상기 명령 정렬부(206)는 명령어를 테이블2에 도시된 지시 위치들로 선택적으로 라우팅하기 할 수 있도록 구성된다. 그리고, 다른 구성들 역시 가능하다. 즉, 메모리 라인 내의 주어진 명령이 전송되는 지시위치 또는 위치들은 상기 기술된 내용으로부터 변경될 수도 있다. 본 발명에 다른 디코드부를 구비하는 슈퍼스칼라 마이크로프로세서 내에 제공된 지시 위치의 갯수는 변할 수 있다. 명령들을 병렬 디코드부로 제공하기 위한 명령 정렬부의 다른 구성이 가능하며, 디코드부의 다른 구성 역시 가능하다.
프리디코드부(202)로 이용된 프리디코드 구성은 테이블 1에 도시된 구성으로부터 변경 가능하다. 예를 들면, 명령 코드의 특정 바이트의 스타트 비트 및 기능 비트의 값의 소정 콤비네이션에 의하여 전달된 정의는 테이블 1에 도시된 정의와 다를수가 있다. 상기에 기술된 실시예에 있어서, 명령 정렬부(206) 및 디코드부(208)는 소정의 원시 x86 명령(예를 들면, 고속 경로 명령)을 직접 전송 및 디코드하기 위하여 구성된다. 그리고, 명령 정렬부가 x86 원시 명령을 ROP와 같은 하나 또는 그 이상의 고정 길이 명령으로 번역하도록 구성되는데 있어서, 슈퍼스칼라 마이크로프로세서는 사용 가능하다. 상기와 같은 구성에 있어서, 복수개의 디코드부가 번역된 명령을 수신 및 디코드하기 위하여 사용 가능하다.
많은 변경 및 수정이 당업자에 의하여 가능하다. 다음의 청구항에서, 상기의 많은 변경 및 수정을 허용한다.

Claims (19)

  1. 슈퍼스칼라 마이크로프로세서내에서 가변 바이트길이 명령어를 프리디코딩하는 방법에 있어서, 명령어 바이트가 개시바이트인지를 나타내는 개시비트를 생성시키는 단계,
    상기 명령어 바이트가 종료 바이트인지를 나타내는 종료비트를 생성시키는 단계 및 상기 개시 비트의 값에 따른 의미(meaning)를 전달하는 기능비트를 생성시키는 단계로 이루어지는 것을 특징으로 하는 슈퍼 스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  2. 제 1항에 있어서,
    상기 기능 비트의 상기 의미는 이전 명령바이트의 대응 개시비트의 값에 의존하는 것을 특징으로 하는 슈퍼 스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  3. 제 1항에 있어서,
    상기 기능 비트는 연산 코드가 상기 명령어의 제 1 바이트인지를 나타내는 것을 특징으로 하는 슈퍼 스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  4. 제 1항에 있어서,
    상기 개시 비트, 상기 종료비트 및 상기 기능비트를 명령어 디코더에 제공하는 단계를 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로프로세서내의 가변 바이트 길이 명령어 프리디코딩 방법.
  5. 제 4항에 있어서,
    상기 명령어의 경계(boundary)를 결정하도록 상기 명령어 디코더 내에서 상기 개시비트, 상기 종료 트 및 상기 기능비트를 검출하는 단계를 포함하는 것을 특징으로 하는 슈퍼 스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  6. 슈퍼스칼라 마이크로프로세서로서,
    다수의 가변바이트 길이 명령어를 저장하는 명령 캐쉬,
    상기 명령어 캐수에 결합되고, 명령어 바이트와 관려된 프리디코드 태그를 생성시키도록 구성된 프리디코드부로서, 상기 프리디코드 태그는 상기 바이트가 상기 명령어의 개시 바이트인지를 나타내는 값을 가진 개시비트를 포함하고, 상기 개시비트의 상기 값에 의존하는 의미를 전달하는 기능비트를 더 포함하는 프리디코드부,
    상기 다수의 가변바이트 길이 명령어에 대응하는 지정된 명령어를 디코딩하는 다수의 디코드부와, 상기 명령어 캐쉬 및 상기 다수의 디코드부 사이에 결합되어, 디코드 가능 명령어를 상기 다수의 디코드부에 제공하는 명령어 정렬부를 구비하는 것을 특징으로 하는 슈퍼스칼라 마이크로 프로세서.
  7. 제 6항에 있어서,
    상기 명령어 정렬부는 상기 명령어를 상기 다수의 디코드부의 하나에 제공하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변 바이트 길이 명령어 프리디코딩 방법.
  8. 제 6항에 있어서,
    상기 다수의 상기 디코드부의 각각은 예정된 서부세트의 X86 명령어 세트를 디코드 하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  9. 제 6항에 있어서,
    상기 다수의 가변 바이트 길이 명령어는 상기 명령어 캐쉬 내의 라인에서 편성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  10. 제 6항에 있어서,
    상기 프리디코드 태그는 상기 바이트가 상기 명령어의 종료 바이트인지를 나타내는 종료 비트를 포함하는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변 바이트 길이 명령어 프리디코딩 방법.
  11. 제 6항에 있어서,
    상기 명령어 정렬부는 상기 프리디코드 태그를 상기 다수의 디코드부의 적어도 하나에 제공하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  12. 제 11항에 있어서,
    상기 다수의 디코드 유니트의 적어도 하나는 상기 명령어의 경계를 결정하도록 상기 프리디코드 태그를 검출하기 위해 구성되는 것을 특징으로 하는 슈퍼 스칼라 마이크로프로세서내의 가변 바이트 길이 명령어 프리디코딩 방법.
  13. 제 6항에 있어서,
    상기 다수의 디코드 유니트로부터 출력 신호를 수신하도록 구성된 다수의 기능부를 더 포함하는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  14. 제 13항에 있어서,
    상기 다수의 상기 디코드부로 부터의 상기 출력신호는 비트엔코드된 실행 명령어를 포함하는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  15. 제 13항에 있어서,
    상기 다수의 디코드부 및 상기 다수의 기능부에 결합된 다수의 예약 스테이션을 더 포함하는데, 상기 다수의 예약 스테이션은 상기 다수의 상기 기능부에 지시하기 전에 상기 다수의 디코드부로 부터 상기 출력신호를 일시 저장하도록 구성되는 것을 특징으로 하는 슈퍼 스칼라 마이크로프로세서내의 가변 바이트 길이 명령어 프리디코딩 방법.
  16. 제 13항에 있어서,
    전용 기능부는 상기 다수의 디코드부의 각각과 결합되는 것을 특징으로 하는 슈퍼 스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  17. 제 6항에 있어서,
    상기 다수의 디코드부에 결합되어, 순리적으로 실행된 명령어 결과를 저장하는 리오더(reorder)버퍼를 더 포함하는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  18. 슈퍼스칼라 마이크로 프로세서내에서 가변바이트 길이 명령어를 프리디코딩하는 방법에 있어서,
    명령어 바이트가 경계 바이트인지를 나타내는 경 비트를 생성시키는 단계,
    상기 경계비트의 값에 따른 의미를 전달하는 기능비트를 생성시키는 단계를 포함하는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서내의 가변바이트 길이 명령어 프리디코딩 방법.
  19. 슈퍼스칼라 마이크로프로세서로서,
    다수의 가변바이트 길이 명령어를 저장하는 명령 캐쉬,
    상기 명령어 캐수에 결합되고, 명령어 바이트와 관련된 리디코드 태그를 생성시키도록 구성된 프리디코드부로서, 상기 프리디코드 태그는 상기 바이트가 상기 명령어의 경계인지를 나타내는 값을 가진 경계 비트를 포함하고, 상기 경계 비트의 상기 밧에 의존하는 의미를 전달하는 기능 비트를 더 포함하는 프리디코드부와, 상기 다수의 가변 바이트 길이 명령어를 수진하도록 결합된 다수의 디코드부를 포함하는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
KR10-1999-7000338A 1999-01-16 1996-07-16 슈퍼스칼라 마이크로프로세서 내에서 가변 바이트 길이 명령어들을 프리디코딩하는 방법 및 장치 KR100448676B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR10-1999-7000338A KR100448676B1 (ko) 1999-01-16 1996-07-16 슈퍼스칼라 마이크로프로세서 내에서 가변 바이트 길이 명령어들을 프리디코딩하는 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-1999-7000338A KR100448676B1 (ko) 1999-01-16 1996-07-16 슈퍼스칼라 마이크로프로세서 내에서 가변 바이트 길이 명령어들을 프리디코딩하는 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20000023837A true KR20000023837A (ko) 2000-04-25
KR100448676B1 KR100448676B1 (ko) 2004-09-16

Family

ID=19635913

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-1999-7000338A KR100448676B1 (ko) 1999-01-16 1996-07-16 슈퍼스칼라 마이크로프로세서 내에서 가변 바이트 길이 명령어들을 프리디코딩하는 방법 및 장치

Country Status (1)

Country Link
KR (1) KR100448676B1 (ko)

Also Published As

Publication number Publication date
KR100448676B1 (ko) 2004-09-16

Similar Documents

Publication Publication Date Title
US5337415A (en) Predecoding instructions for supercalar dependency indicating simultaneous execution for increased operating frequency
JP3794917B2 (ja) 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ
US6049863A (en) Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US5758114A (en) High speed instruction alignment unit for aligning variable byte-length instructions according to predecode information in a superscalar microprocessor
US5748978A (en) Byte queue divided into multiple subqueues for optimizing instruction selection logic
JP3798404B2 (ja) 2レベルの分岐予測キャッシュによる分岐予測
US5303356A (en) System for issuing instructions for parallel execution subsequent to branch into a group of member instructions with compoundability in dictation tag
US5850532A (en) Invalid instruction scan unit for detecting invalid predecode data corresponding to instructions being fetched
US5845102A (en) Determining microcode entry points and prefix bytes using a parallel logic technique
JP3803723B2 (ja) 分岐予測を選択する分岐セレクタを採用する分岐予測機構
JPH04156613A (ja) 命令バッファ装置
JP2002508865A (ja) 高周波数での命令ディスパッチのための二重命令キューを用いた命令アライメントユニット
US5968163A (en) Microcode scan unit for scanning microcode instructions using predecode data
US5987235A (en) Method and apparatus for predecoding variable byte length instructions for fast scanning of instructions
US5740392A (en) Method and apparatus for fast decoding of 00H and OFH mapped instructions
KR100603067B1 (ko) 분기 예측의 타입을 분류하기 위해 복귀 선택 비트들을 이용하는 분기 예측
US5778246A (en) Method and apparatus for efficient propagation of attribute bits in an instruction decode pipeline
US5852727A (en) Instruction scanning unit for locating instructions via parallel scanning of start and end byte information
US5991869A (en) Superscalar microprocessor including a high speed instruction alignment unit
JP3732233B2 (ja) スーパースカラマイクロプロセッサ内で可変バイト長命令をプリデコードするための方法および装置
US6175908B1 (en) Variable byte-length instructions using state of function bit of second byte of plurality of instructions bytes as indicative of whether first byte is a prefix byte
US6047368A (en) Processor architecture including grouping circuit
US5940602A (en) Method and apparatus for predecoding variable byte length instructions for scanning of a number of RISC operations
KR20000023837A (ko) 슈퍼 스칼라 마이크로프로세서 내에서의 가변 바이트 길이 명령어를 프리디코딩하기 위한 방법 및 장치
US5898851A (en) Method and apparatus for five bit predecoding variable length instructions for scanning of a number of RISC operations

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20100827

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee