KR100586057B1 - 프리디코드 정보를 저장하기 위해 ecc/패리티 비트들의 이용 - Google Patents

프리디코드 정보를 저장하기 위해 ecc/패리티 비트들의 이용 Download PDF

Info

Publication number
KR100586057B1
KR100586057B1 KR1020007014659A KR20007014659A KR100586057B1 KR 100586057 B1 KR100586057 B1 KR 100586057B1 KR 1020007014659 A KR1020007014659 A KR 1020007014659A KR 20007014659 A KR20007014659 A KR 20007014659A KR 100586057 B1 KR100586057 B1 KR 100586057B1
Authority
KR
South Korea
Prior art keywords
cache
predecode
instruction
information
level
Prior art date
Application number
KR1020007014659A
Other languages
English (en)
Other versions
KR20010025123A (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 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20010025123A publication Critical patent/KR20010025123A/ko
Application granted granted Critical
Publication of KR100586057B1 publication Critical patent/KR100586057B1/ko

Links

Images

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Detection And Correction Of Errors (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

명령 캐시(16)에서 제거된 프리디코드 정보를 저장하도록 구성된 마이크로프로세서(10)를 개시한다. 일 실시예에서, 상기 마이크로프로세서(10)는 프리디코드 유닛(12)과 명령 캐시(16)를 포함한다. 상기 프리디코드 유닛(12)은 레벨 2 캐시(50)로부터 명령을 수신하고 대응 프리디코드 정보를 생성하도록 구성된다. 상기 명령 캐시(16)는 프리디코드 유닛(12)과 연결되고, 두개의 다수 저장 위치들(62와 64)을 포함하는데, 하나는 명령 바이트들의 저장을 위함이고, 두번째는 상기 명령 바이트들에 대응하는 프리디코드 정보를 저장하기 위한 것이다. 상기 명령 캐시(16)는 상기 명령 바이트들을 수신 및 저장하고 상기 프리디코드 유닛(12)에서 정보를 프리디코드하도록 구성될 수 있다. 상기 명령 캐시(16)는 상기 명령 바이트들과 대응 프리디코드 정보가 상기 명령 캐시(16)에서 대체되면 상기 대응 프리디코드 정보의 적어도 일부를 레벨 2 캐시(50)에 저장하기 위해 출력하도록 구성될 수 있다. 상기 프리디코드 정보는 패리티와/또는 에러 검사 및 정정 정보를 저장하도록 구성된 상기 레벨 2 캐시(50)내의 저장 위치들(60)에 저장될 수 있다. 프리디코드 정보가 명령 캐시(16)에서 오버라이트된 경우 레벨 2 캐시(50)에 프리디코드 정보를 저장하기 위한 방법도 개시된다. 레벨 2 캐시(50)에 프리디코드 정보를 저장하도록 구성된 컴퓨터 시스템(200)도 개시된다.

Description

프리디코드 정보를 저장하기 위해 ECC/패리티 비트들의 이용{USING ECC/PARITY BITS TO STORE PREDECODE INFORMATION}
본 발명은 마이크로프로세서들에 관한 것으로서, 특히 마이크로프로세서 내에서의 가변 길이 명령들의 디코딩에 관한 것이다.
EP-A-0 798 632는 다중-레벨 캐시 시스템(multi-level cache system)에서의 분기 예측을 개시한다. 레벨1 캐시의 하나의 캐시 엔트리(entry)가 상기 엔트리 대신에 오버라이트되는 경우, 대응하는 분기 예측 정보는 소실되고, 상기 엔트리는 레벨 2 캐시에 저장된다. 상기 레벨 2 캐시는 또한 부분적으로 디코드된 명령 정보를 저장할 뿐 아니라 분기 예측 정보에 대한 유효 비트를 저장한다.
EP-A-0 651 324는 가변 바이트 길이 명령에 대한 추론적 명령 큐를 개시한다. 상기 큐 내의 각 바이트 위치는 상기 명령 정보에 대한 유효 비트를 포함한다. 시작 바이트, 종료 바이트 및 연산코드(opcode) 바이트를 나타내는 프리디코드 비트들 또한 개시된다.
1994년 12월, 아이비엠(IBM) 기술 설명 보고서, 37권, 제 12호에 발표된 제목이 "고속 프로세서들의 이중 온-칩 명령 캐시 구성(Dual On-Chip Instruction Cache Organization in High Speed Processors)"은 서로 다른 구성을 갖는 2개의 온칩 캐시들을 개시한다. 제 2 캐시는 캐시 미스 레이트(cache miss rate)를 최소화하기 위해 디자인이 허용하는한 크게 설계된다. 2개의 캐시들은 모두 각 주기 마다 액세스된다.
x86 명령 세트에 대해 기록된 소프트웨어 애플리케이션들의 수는 상당히 많다. 결과적으로, 보다 새롭고 보다 진보한 명령 세트들의 도입에도 불구하고, 마이크로프로세서 설계자들은 계속해서 마이크로프로세서들이 상기 x86 명령 세트를 실행할 수 있도록 설계해왔다.
상기 x86 명령 세트는 비교적 복잡하고, 다수의 가변 길이 명령들을 갖는 특성이 있다. 상기 x86 명령 세트의 전체적인 포맷의 예를 도 1에 나타낸다. 도시된 바와 같이, 어떤 x86 명령은 1 내지 5개의 선택적인 프리픽스 바이트들(102), 연산 코드(operation code) 필드(104), 선택적인 어드레싱 모드(MOD R/M) 바이트(106), 선택적인 스케일 인덱스 베이스(scale-index-base:SIB) 바이트(108), 선택적인 변위 필드(110) 및 선택적인 즉시 데이터 필드(112)로 구성된다.
상기 연산코드 필드(104)는 특정 명령에 대한 기본 연산을 정의한다. 특정 연산코드의 디폴트(default) 연산은 1개 이상의 프리픽스 바이트들(102)에 의해 변경될 수 있다. 예를 들어, 프리픽스 바이트들(102)중 하나를 이용하여 명령어에 대한 어드레스 또는 피연산자의 크기를 변경하여, 메모리 어드레싱에 이용되는 디폴트 세그먼트를 무효화하거나, 또는 일련의 연산을 다수회 반복하도록 상기 프로세서에 명령한다. 프리픽스 바이트들이 존재하는 경우 상기 연산코드 필드(104)는 프리픽스 바이트들(102)의 뒤에 오며, 1 또는 2 바이트 길이를 갖는다. 상기 어드레싱 모드(MOD R/M) 바이트(106)는 이용되는 레지스터들 뿐 아니라 메모리 어드레싱 모드들을 특정한다. 상기 스케일 인덱스 베이스(SIB) 바이트(108)는 스케일과 인덱스 인수들을 이용하는 32비트 베이스 상대 어드레싱(32-bit base-relative addressing) 방식에만 전용된다. SIB 바이트(108) 내의 베이스 필드는 어느 레지스터가 어드레스 계산을 위한 베이스 값을 갖는 지를 결정하고, SIB 바이트(108) 내의 인덱스 필드는 어느 레지스터가 상기 인덱스 값을 갖는 지를 결정한다. SIB 바이트(108) 내의 스케일 필드는 상기 인덱스 값이 제곱되어, 그 다음 임의의 변위와 함께 상기 베이스 값에 더해지는 것을 특정한다. 다음 명령 필드는 변위 필드(110)인바, 이는 선택적이고 1 내지 4바이트의 길이를 가질 수 있다. 변위 필드(110)는 어드레스 계산에 쓰이는 상수를 포함한다. 또한 1 내지 4 바이트의 길이를 갖는 상기 선택적인 즉시 필드(112)는 명령 피연산자로 이용되는 상수를 포함한다. 가장 짧은 x86 명령들은 단지 1 바이트 길이이며 단일 연산코드 바이트를 포함한다. 80286은 명령 바이트에 대한 최대 길이를 10바이트로 설정하는 반면, 80386 및 80486 모두는 최대 15바이트 길이의 명령을 허용한다.
상기 x86 명령 세트의 복잡성은 고성능의 x86 호환가능한 마이크로프로세서들을 구현하는데 많은 문제들을 제기한다. 구체적으로, x86 명령들의 가변 길이는 명령들의 디코딩을 어렵게 한다. 명령의 디코딩은 전형적으로 명령의 경계를 결정한 다음, 예를 들어 연산코드 및 피연산자 필드들과 같은 명령 내의 각 필드를 식별하는 것을 포함한다. 전형적으로 디코딩은 실행 전에 명령 캐시로부터 명령을 페치(fetch)할 때 이루어진다.
명령들의 경계를 결정하기 위한 한 방법은, 명령 바이트가 주 메모리로부터 판독되고 명령 캐시 내에 저장될 때 각 명령 바이트들에 대한 1개 이상의 프리디코드 비트들을 발생시키고 저장하는 것을 포함한다. 상기 프리디코드 비트들은 명령 바이트가 관련된 상기 명령 바이트에 대한 정보를 제공한다. 예를 들어, 표명(assertion)된 프리디코드 시작 비트는 상기 관련된 명령 바이트가 명령의 제 1 바이트임을 나타낸다. 특정 명령 바이트에 대한 시작 비트가 연산되면, 이는 상기 명령 바이트와 함께 상기 명령 캐시에 저장된다. "페치"가 수행되면, 다수의 명령 바이트들은 상기 명령 캐시로부터 판독되어 실행하기 위해 디코드된다. 임의의 관련된 시작 비트들이 상기 페치와 함께 상기 개별적인 명령들에 대한 유효 마스크들을 생성하기 위해 주사(scan)된다. 유효 마스크는 일련의 비트들이며, 여기서 각 비트는 특정 명령 바이트에 대응한다. 명령의 제 1 바이트, 마지막 바이트, 및 제 1 바이트와 마지막 바이트 간의 모든 바이트들과 관련된 유효 마스크 비트들이 표명된다. 다른 모든 유효 마스크 비트들은 표명되지 않는다. 일단 유효 마스크가 계산되면, 이는 다른 명령들로부터 바이트들을 마스크 오프(mask off)하는 데에 이용될 수 있다.
도 2는 예시적인 유효 마스크를 도시한다. 이 도면은 페치(120)의 일부 및 그와 관련된 시작 비트들(122)을 예시한다. 명령(B)(128)에 대한 유효 마스크(126)가 발생되었다고 가정하면, 시작 비트(122A)와, 그리고 이 시작 비트(122A)와 다른 시작 비트(122B) 간의 모든 비트들이 표명되어 마스크(126)를 발생시킨다. 일단 발생되면, 유효 마스크(126)는 명령(B)(128) 부분이 아닌 페치(120) 내의 모든 바이트들을 마스크 오프하는 데에 이용될 수 있다.
상기 설명한 바와 같이, 프리디코드 정보는 디코드 시간을 줄이는 데에 특히 유용하다. 명령 캐시 내에 명령 바이트들과 함께 상기 프리디코드 정보를 저장함으로써, 대응하는 명령이 (예를 들어, 루프 내에서) 여러 번 수행되더라도, 상기 프리디코드 정보는 단지 한번만 계산되면 된다. 그러나, 불행하게도, 상기 명령이 상기 명령 캐시로부터 오버라이트되거나 버려지는 경우, 대응하는 프리디코드 정보는 모두 소실된다. 다음번에, 상기 명령이 상기 명령 캐시 내로 판독되는 경우, 프리디코드 정보는 다시 한번 발생 되어야만 한다. 상기 프리디코드 정보가 계산되기를 기다리는 시간 지연은, 분기 오예측 또는 캐시 미스(cache miss)에 의해 상기 명령 캐시로 상기 명령을 판독하는 경우 성능에 악영향을 줄 수 있다. 요구되기 전에 추론적으로 프리페치되는 명령들과 달리, 분기 오예측 또는 캐시 미스로부터 야기되는 페치는 요청된 명령의 수신을 대기하는 동안 마이크로프로세서의 디코더들과 기능 유닛들을 정체(stall)시킬 수 있다. 이러한 경우, 상기 프리디코드 정보를 생성하는 데에 필요한 시간은 마이크로프로세서의 성능에 상당한 영향을 줄 수 있다.
상기 및 다른 이유들로 인해, 프리디코드 시간을 줄이는 방법 및 장치가 필요하다. 특히, 명령 캐시로부터 이전에 버려진 명령들에 대한 프리디코드 정보를 발생시키는 데에 필요한 시간을 줄이는 방법 및 장치가 필요하다.
상기 문제들은 레벨 2 캐시 내에 프리디코드된 정보를 저장할 수 있는 마이크로프로세서에 의해 해결된다. 일 실시예에서, 상기 마이크로프로세서는 프리디코드 정보 또는 대응하는 명령 바이트들중 어느 하나가 상기 명령 캐시에서 오버라이트될 때 프리디코드 정보를 레벨 2 캐시 내에 저장하도록 구성될 수 있다.
일 실시예에서, 상기 마이크로프로세서는 프리디코드 유닛 및 명령 캐시를 포함한다. 상기 프리디코드 유닛은 레벨 2 캐시로부터 명령 바이트를 수신하고 대응하는 프리디코드 정보를 발생시키도록 구성된다. 상기 명령 캐시는 프리디코드 유닛에 결합되고, 2개의 복수의 저장 위치들을 포함하는바, 그중 하나는 명령 바이트들을 저장하기 위한 것이고, 다른 하나는 상기 명령 바이트들에 대응하는 프리디코드 정보를 저장하기 위한 것이다. 상기 명령 캐시는 상기 프리디코드 유닛으로부터 상기 명령 바이트들 및 프리디코드 정보를 수신 및 저장하도록 구성될 수 있다. 상기 명령 캐시는 또한 상기 명령 바이트들 및 대응하는 프리디코드 정보가 상기 명령 캐시 내에서 오버라이트될 때 대응하는 프리디코드 정보의 적어도 일부를 출력하도록 구성될 수 있다. 상기 프리디코드 정보는 레벨 2 캐시 내에 저장하기 위한 출력이 될 수 있다. 만일 명령 캐시 내에서 오버라이트된 후 및 레벨 2 캐시 내에서 오버라이트되기 전에 동일한 명령 바이트들이 필요하다면, 명령 바이트들 및 그 명령들에 수반되는 프리디코드 정보가 레벨 2 캐시로부터 검색될 수 있다. 유익하게는, 일부 경우들에서, 명령 바이트들의 프리디코드 지연은 무시(bypass)될 수 있다.
다른 실시예에서, 상기 프리디코드 정보는 패리티, 및 에러 검사 및 정정 정보를 저장하도록 구성된 레벨 2 캐시 내의 저장 위치들에 저장될 수 있다. 패리티, 및 에러 검사 및 정정 저장 위치들을 이용함으로써, 상기 레벨 2 캐시 구성에 대한 변경들을 감소시키거나 없앨 수 있다.
또 다른 실시예에서, 무효화 상수(invalidation constant)는 아직 유효한 프리디코드 정보를 갖지 않는 명령 바이트들에 대해 레벨 2 캐시 내에 저장될 수 있다. 상기 프리디코드 유닛은 상기 레벨 2 캐시로부터 명령 바이트들을 판독할 때 상기 무효화 상수를 검출하고, 이에 응답하여 새로운 프리디코드 정보를 계산하도록 구성될 수 있다.
가변 길이 명령들을 프리디코드하는 방법이 또한 고려된다. 일 실시예에서, 상기 방법은 주 시스템 메모리에서 명령 바이트들을 판독하는 단계, 및 상기 명령 바이트들에 대응하는 프리디코드 정보를 발생시키는 단계를 포함한다. 상기 명령 바이트들과 프리디코드 정보는 명령 캐시에 저장된다. 상기 프리디코드 정보의 적어도 일부는 상기 프리디코드 정보에 대응하는 명령 바이트들이 상기 명령 캐시 내에서 오버라이트될 때 저장을 위해 레벨 2 캐시로 출력된다. 다시 한번, 상기 프리디코드 정보는 패리티, 및 에러 검사 및 정정 데이터를 저장하도록 구성된 레벨 2 캐시 내의 저장 위치들에 저장될 수 있다.
프리디코드 데이터를 저장하도록 구성된 컴퓨터 시스템이 또한 고려된다. 일 실시예에서, 이 컴퓨터 시스템은 레벨 2 캐시와 마이크로프로세서를 포함할 수 있다. 상기 마이크로프로세서는 레벨 2 캐시에 결합되고, 상기 설명한 바와 같이 프리디코드 유닛 및 명령 캐시로 구성될 수 있다. 상기 프리디코드 유닛은 상기 레벨 2 캐시로부터 명령 바이트들을 수신하고, 대응하는 프리디코드 정보를 발생시키도록 구성될 수 있다. 상기 명령 캐시는 상기 프리디코드 유닛에 결합되고, 상기 명령 바이트들이 오버라이트될 때 상기 레벨 2 캐시에 저장하기 위해 상기 명령 캐시에 저장된 프리디코드 정보의 적어도 일부를 출력하도록 구성될 수 있다. 상기 레벨 2 캐시는 패리티 그리고/또는 에러 검사 및 정정 데이터를 저장하도록 구성된 저장 위치들에 상기 명령 캐시로부터의 프리디코드 정보를 저장하도록 구성될 수 있다.
본 발명의 다른 목적들과 이점들은 첨부 도면들과 함께 설명되는 하기의 상세한 설명으로부터 명백해질 것이다.
도 1은 일반적인 x86 명령 포맷의 블록도이다.
도 2는 유효 마스크의 일 실시예를 도시한 블록도이다.
도 3은 마이크로프로세서의 일 실시예의 블록도이다.
도 4는 도 3의 명령 캐시와 레벨 2 캐시 간의 인터페이스의 일 실시예를 상세히 예시한 다이어그램이다.
도 5는 도 4에서 설명한 명령 캐시의 일 실시예와 도 4의 레벨 2 캐시의 일 실시예 간의 관계를 상세히 예시한 다이어그램이다.
도 6은 프리디코드 정보를 레벨 2 캐시에 저장하기 위한 방법의 일 실시예를 나타낸 흐름도이다.
도 7은 도 3의 마이크로프로세서를 이용하는 컴퓨터 시스템의 일 실시예를 나타낸 다이어그램이다.
본 발명은 다양한 변경들과 대안적인 형태들을 가질 수 있지만, 도면들 및 상세한 설명에는 그 특정한 실시예들을 예로 들어 설명할 것이다. 그러나, 본 발명은 이와같은 개시된 형태들에 한정되지 않는다. 본 발명은 첨부된 청구항에 의해 정의되는 본 발명의 범위 내에 있는 모든 변경들, 등가물들 및 대안들을 포함한다.
도 3은 마이크로프로세서(10)의 일 실시예의 블록도이다. 마이크로프로세서(10)는 프리페치/프리디코드 유닛(12), 분기 예측 유닛(14), 명령 캐시(16), 명령 정렬 유닛(18), 복수의 디코드 유닛들(20A-20C), 복수의 예약 스테이션들(22A-22C), 복수의 기능 유닛들(24A-24C), 적재/저장(load/store) 유닛(26), 데이터 캐시(28), 레지스터 파일(30), 재배열 버퍼(32) 및 MROM 유닛(34)을 포함한다. 여기서 문자가 병기되어 특정한 참조 부호로서 언급되는 소자들은 상기 참조 부호 만으로 집합적으로 칭해질 수 있다. 예를 들어, 예약 스테이션들(22A-22C)은 집합적으로 예약 스테이션들(22)이라 칭할 수 있다.
프리페치/프리디코드 유닛(12)은 주 메모리 서브시스템(미도시)에서 명령을 수신하도록 연결됨과 아울러, 명령 캐시(16)와 분기 예측 유닛(14)에도 연결된다. 유사하게, 분기 예측 유닛(14)은 명령 캐시(16)에 연결된다. 분기 예측 유닛(14)은 명령 정렬 유닛(18)과 기능 유닛들(24A-C)에도 연결된다. 명령 캐시(16)는 MROM 유닛(34)과 명령 정렬 유닛(18)에도 연결된다. 명령 정렬 유닛(18)은 또한 적재/저장 유닛(26) 및 각각의 디코드 유닛들(20A-C)에 연결된다. 각각의 디코드 유닛들(20A-C)은 예약 스테이션들(22A-C)에 연결되고, 이 예약 스테이션들(22A-C)은 각각의 기능 유닛들(24A-C)에 연결된다. 또한, 명령 정렬 유닛(18)과 예약 스테이션들(22)은 레지스터 파일(30) 및 재배열 버퍼(32)에 연결된다. 기능 유닛들(24)은 적재/저장 유닛(26), 레지스터 파일(30) 및 재배열 버퍼(32)에 연결된다. 데이터 캐시(28)는 적재/저장 유닛(26) 및 주 메모리 서브시스템에 연결된다. 마지막으로, MROM 유닛(34)은 명령 정렬 유닛(18)에 연결된다.
명령들은 프리페치/프리디코드 유닛(12)을 통해 주 메모리로부터 프리페치된다. 프리페치/프리디코드 유닛(12)은 가변 길이 명령들을 고정 길이 명령들로 프리디코드하고, 이를 명령 캐시(16)에 저장한다. 명령들은 프리페치 방식을 이용하여 실질적으로 요청되기 전에 프리페치되고 프리디코드된다. 다양한 프리페치 방식들이 프리페치/프리디코드 유닛(12)에 의해 이용될 수 있다. 프리디코드 유닛(12)과 명령 캐시(16)에 대해 보다 상세히 설명하기 전에, 도면에 도시된 예시적인 마이크로프로세서(10)의 실시예에 대한 일반적인 양상을 설명한다.
마이크로프로세서(10)는 조건부 분기 명령들에 이어 명령들을 추론적으로 페치하기 위해 분기 예측을 이용할 수 있다. 분기 예측 유닛(14)은 분기 예측 연산들을 수행하기 위해 포함된다. 일 실시예에서, 최대 2개의 분기 타겟 어드레스들이 명령 캐시(16)의 각 캐시 라인의 각 16-바이트 부분에 저장된다. 프리페치/프리디코드 유닛(12)은 특정 라인이 프리디코드될 때, 초기 분기 타겟들을 결정한다. 캐시 라인 내의 명령들의 실행으로 인해, 상기 캐시 라인에 대응하는 상기 분기 타겟들에 대한 후속 업데이트가 이루어질 수 있다. 명령 캐시(16)는 페치되는 명령 어드레스의 표시를 분기 예측 유닛(14)에 제공한다. 이에 의해, 분기 예측 유닛(14)은 분기 예측 형성시 어떠한 분기 타겟 어드레스들을 선택할 것인지를 결정할 수 있다. 명령 정렬 유닛(18)과 기능 유닛들(24)은 업데이트 정보를 분기 예측 유닛(14)에 제공한다. 분기 예측 유닛(14)은 상기 캐시 라인의 16-바이트 부분당 2개의 타겟 어드레스들을 저장하기 때문에, 상기 라인 내의 몇몇 분기 명령들에 대한 예측들은 분기 예측 유닛(14)에 저장되지 않을 수 있다. 명령 정렬 유닛(18)은 분기 예측 유닛(14)에 의해 예측되지 않는 분기 명령을 검출하도록 구성될 수 있다. 기능 유닛(24)은 상기 분기 명령들을 실행하고, 예측된 분기 방향이 오예측되었는지 여부를 결정한다. 분기 방향은 "테이큰(taken)" 될 수 있는바, 이 경우 후속 명령들은 분기 명령의 타겟 어드레스로부터 페치된다. 반대로, 분기 방향은 "낫테이큰(not taken)" 될 수 있는바, 이 경우 후속 명령들은 상기 분기 명령에 일관된 메모리 위치들로부터 페치된다. 오예측된 분기 명령이 검출되면, 오예측된 분기에 대한 후속 명령들은 마이크로프로세서(10)의 다양한 유닛들로부터 버려진다. 많은 적절한 분기 예측 알고리즘들이 분기 예측 유닛(14)에 의해 이용될 수 있다.
명령 캐시(16)는 프리페치/프리디코드 유닛(12)으로부터 수신된 명령들을 저장하기 위해 제공되는 고속의 캐시 메모리이다. 저장된 명령들은 이후 명령 캐시(16)로부터 페치되어 명령 정렬 유닛(18)으로 전달된다. 일 실시예에서, 명령 캐시(16)는 세트 어소시에이티브 구조(set-associative structure)로 구성될 수 있다. 또한, 명령 캐시(16)는 고속의 액세스를 달성하기 위해 방향 예측 방식(way prediction scheme)을 적용할 수 있다. 예를 들어, 명령 캐시(16)는 각 명령들의 라인을 식별하는 태그(tag)들을 액세스하여 그 태그들을 상기 페치 어드레스와 비교하여 방향을 선택하는 대신에, 명령 캐시(16)는 액세스되는 방향을 예측할 수 있다. 이러한 방식으로, 상기 방향은 상기 어레이를 액세스하기 전에 추론적으로 선택될 수 있다. 방향 예측을 이용하면, 명령 캐시(16)의 상기 액세스 시간은 직접 맵핑(direct-mapped) 캐시와 유사할 수 있다. 상기 명령 바이트가 판독된 후, 검증을 위해 태그 비교가 수행된다. 만일 상기 방향 예측이 틀렸다면, 정확한 명령 바이트들이 페치되고 상기 틀린 명령 바이트들(이들은 또한 처리 파이프라인(pipeline)을 다운시킨다)은 버려진다. 주목할 사항으로서, 명령 캐시(16)는 완전 어소시에이티브, 세트 어소시에이티브, 또는 직접 매핑 구성으로 구현될 수 있다.
MROM 유닛(34)은 판독 전용 메모리로서, "고속 경로 명령들(fast-path instructions)"의 시퀀스들을 저장하도록 구성된다. 고속 경로 명령들은 디코더들(20A-C) 및 기능 유닛들(24A-C)에 의해 디코드되고 실행되는 명령들이다. 반면, "MROM 명령들"은 디코더들(20A-C) 및 기능 유닛들(24A-C)에 의해 디코딩 또는 실행되기에는 너무 복잡한 명령들이다. 명령 캐시(16)가 MROM 명령을 출력하면, MROM 유닛(34)은 이에 응답하여 고속 경로 명령들의 시퀀스를 출력한다. 보다 구체적으로, MROM 유닛(34)은 원하는 연산을 수행하기 위해 상기 MROM 명령을 소정의 고속 경로 명령들의 서브세트로 파싱(parse) 및 변환한다. MROM 유닛(34)은 상기 고속 경로 명령들의 서브세트를 디코드 유닛들(20A-C)로 디스패치(dispatch)한다.
명령 캐시(16)로부터 명령 바이트들이 페치되면, 이들은 명령 정렬 유닛(18)으로 전송된다. 명령 정렬 유닛(18)은 상기 명령들을 디코드 유닛(20A-C)중 하나로 라우팅한다. 레지스터 피연산자 정보가 또한 검출되어 레지스터 파일(30) 및 재배열 버퍼(32)로 라우팅된다. 또한, 만일 상기 명령들이 1개 이상의 메모리 연산들이 수행될 것을 요구하면, 명령 정렬 유닛(18)은 상기 메모리 연산들을 적재/저장 유닛(26)에 디스패치한다. 각각의 디코드된 명령이 상기 명령과 함께 포함된 피연산자 어드레스 정보 및 변위 또는 즉시 데이터와 함께 예약 스테이션들(22)로 디스패치된다.
마이크로프로세서(10)는 순서를 벗어난(out-of-order) 실행을 지원하고, 이를 위해 재배열 버퍼(32)를 이용하여 레지스터 판독 및 기록 연산을 위한 상기 본래 프로그램 시퀀스를 기억하고, 레지스터 재명명(renaming)을 실행하고, 추론적 명령 실행 및 분기 오예측을 복구하고, 정밀한 예외(precise exception)들을 용이하게 한다. 재배열 버퍼(32) 내의 임시 저장 위치는 레지스터의 업데이트를 포함하는 명령들의 디코드에 대해 예약된다. 상기 임시 저장 위치는 명령의 추론적 실행의 결과인 상기 추론적 레지스터 상태를 저장한다. 만일 분기 예측이 틀린다면, 상기 오예측된 경로를 따라 추론적으로 실행된 명령들의 결과는 이들이 레지스터 파일(30)에 기록되기 전에 상기 재배열 버퍼(32)에서 무효화될 수 있다. 마찬가지로, 만일 특정 명령이 예외를 유발하면, 예외 유발 명령에 후속하는 명령들은 버려질 수 있다. 이러한 방식으로, 예외들은 "정밀하다"(즉, 예외 유발 명령에 후속하는 명령들은 그 예외 이전에 완료되지 않는다). 주목할 사항으로서, 만일 프로그램 순서에서 특정 명령이 그 특정 명령에 선행하는 명령 보다 먼저 실행되면, 상기 특정 명령은 추론적으로 실행된다. 선행 명령들은 분기 명령이거나 예외 유발 명령일 수 있고, 이러한 경우, 상기 추론적 결과는 재배열 버퍼(32)에 의해 버려질 수 있다.
명령 정렬 유닛(18)의 출력에 제공되는 상기 디코드된 명령들과 즉시 또는 변위 데이터는 각각의 예약 스테이션들(22)에 직접 전달된다. 일 실시예에서, 각 예약 스테이션(22)은 대응하는 기능 유닛에 발행(issue)되기를 대기하는 최대 3개의 펜딩(pending) 명령들에 대한 명령 정보(즉, 디코드된 명령들 및 피연산자 값들, 피연산자 태그들 및/또는 즉시 데이터)를 홀딩할 수 있다. 주목할 사항으로서, 상기 도면에 도시된 실시예에서, 각 예약 스테이션(22)은 전용 기능 유닛(24)과 결합된다. 따라서, 3개의 전용 "발행 위치(issue position)들"이 예약 스테이션들(22)과 기능 유닛들(24)에 의해 형성된다. 즉, 발행 위치(0)는 예약 스테이션(22A) 및 기능 유닛(24A)에 의해 형성된다. 예약 스테이션(22A)으로 정렬되고 디스패치된 명령들은 기능 유닛(24A)에 의해 실행된다. 마찬가지로, 발행 위치(1)는 예약 스테이션(22B) 및 기능 유닛(24B)에 의해 형성되고, 발행 위치(2)는 예약 스테이션(22C) 및 기능 유닛(24D)에 의해 형성된다.
특정 명령의 디코드시, 요구된 피연산자가 레지스터 위치라면, 레지스터 어드레스 정보는 재배열 버퍼(32) 및 레지스터 파일(30)에 동시에 전송된다. 당업자라면, 상기 x86 레지스터 파일이 8개의 32비트 실제 레지스터들(real registers)(즉, 전형적으로 EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP 라함)을 포함한다는 것을 알 수 있을 것이다. 상기 x86 마이크로프로세서 아키텍쳐를 이용하는 마이크로프로세서(10)의 실시예에서, 레지스터 파일(30)은 상기 각 32-비트 실제 레지스터들에 대해서 저장 위치들을 포함한다. 또한 레지스터 파일(30) 내에는 MROM 유닛(34)에 의해 이용되기 위한 저장 위치들이 포함될 수 있다. 재배열 버퍼(32)는 이러한 레지스터들의 내용들을 변경하는 결과들을 위한 임시 저장 위치들을 포함하며, 이에 의해 순서를 벗어난 실행이 가능해진다. 재배열 버퍼(32)의 임시 저장 위치는 디코드시에 상기 실제 레지스터들중 하나의 내용을 변경하는 것으로 결정되는 각 명령에 대해 예약된다. 따라서, 특정 프로그램을 실행하는 동안의 다양한 지점들에서, 재배열 버퍼(32)는 소정의 레지스터의 추론적으로 실시된 내용을 포함하는 1개 이상의 위치들을 가질 수 있다.
만일 소정의 명령의 디코드에 이어서, 재배열 버퍼(32)가 상기 소정 명령 내의 피연산자로서 이용되는 레지스터에 할당된 이전 위치 또는 위치들을 갖는 것으로 결정되면, 재배열 버퍼(32)는 대응하는 예약 스테이션에 1) 가장 최근에 할당된 위치의 값, 또는 2) 만약 상기 값이 언젠가는 이전의 명령을 실행할 기능 유닛에 의해 아직 생성되지 않은 경우라면 상기 가장 최근에 할당된 위치에 대한 태그를 전송한다. 만일 재배열 버퍼(32)가 소정의 레지스터에 대해 예약된 위치를 갖는 경우, 상기 피연산자 값(또는 재배열 버퍼 태그)은 레지스터 파일(30)이 아닌 재배열 버퍼(32)로부터 제공된다. 만일 재배열 버퍼(32) 내에 요청된 레지스터에 대해 예약된 위치가 없는 경우, 상기 값은 레지스터 파일(30)로 부터 직접 획득된다. 만일 상기 피연산자가 메모리 위치에 대응하면, 상기 피연산자 값은 적재/저장 유닛(26)을 통해 상기 예약 스테이션으로 제공된다.
일 특정 실시예에서, 재배열 버퍼(32)는 동시에 디코드되는 명령들을 한 단위로서 저장 및 취급하도록 구성된다. 이러한 구성은 여기서 "라인 지향(line-oriented)"이라 칭한다. 몇몇 명령들을 함께 취급함으로써, 재배열 버퍼(32) 내에서 이용되는 하드웨어가 단순화될 수 있다. 예를 들어, 본 실시예에 포함되는 라인 지향 재배열 버퍼는 1개 이상의 명령들이 명령 정렬 유닛(18)에 의해 디스패치될 때마다 3개의 명령들에 대한 명령 정보에 대해 충분한 저장부를 할당한다. 반면, 가변적인 양을 갖는 저장부가, 실질적으로 디스패치되는 명령들의 수에 따라 종래 재배열 버퍼들에 할당된다. 가변량의 저장부를 할당하는데 비교적 많은 수의 논리 게이트들이 필요할 수 있다. 동시에 디코드된 명령들 각각이 실행되는 경우, 상기 명령 결과들은 동시에 레지스터 파일(30)에 저장된다. 이후, 상기 저장부는 동시에 디코드된 명령들의 다른 세트에 자유롭게 할당될 수 있다. 즉, 비워진다. 또한, 제어 로직이 여러 개의 동시에 디코드된 명령들에 분할되기 때문에 명령마다 적용되는 제어 로직 회로부의 양은 줄어든다. 특정 명령을 식별하는 재배열 버퍼 태그는 두개의 필드들, 즉 라인 태그 및 오프셋(offset) 태그로 분류된다. 상기 라인 태그는 특정 명령을 포함하는 동시에 디코드된 명령들의 세트를 식별하고, 그리고 상기 오프셋 태그는 세트 내의 어떤 명령이 상기 특정 명령에 대응하는 지를 식별한다. 주목할 사항으로서, 레지스터 파일(30) 내에 명령 결과들을 저장하고 상기 대응 저장부를 비우는 것은 상기 명령들을 "퇴출(retiring)"하는 것으로 칭한다. 또한, 주목할 사항으로서, 어떠한 재배열 버퍼 구조라도 다양한 마이크로프로세서(10)의 실시예들에서 이용될 수 있다.
상기 설명한 바와 같이, 예약 스테이션들(22)은 명령들이 대응하는 기능 유닛(24)에 의해 실행되기까지 상기 명령들을 저장한다. 만일 (i)명령의 피연산자가 제공된 경우, 그리고 (ii) 상기 피연산자가 프로그램 순서에서 상기 명령에 선행하며 동일한 예약 스테이션(22A-22C) 내에 있는 명령들에 대해 아직 제공되지 않은 경우 상기 명령은 실행을 위해 선택된다. 주목할 사항으로서, 명령이 상기 기능 유닛들(24)중 하나에 의해 실행되는 경우, 그 명령의 결과는 상기 결과가 재배열 버퍼(32)를 업데이트하도록 전달됨과 동시에, 상기 결과를 기다리는 임의의 예약 스테이션들(22)로 직접 전달된다(이러한 기법을 일반적으로 "결과 전송(result forwarding)"이라 칭한다). 상기 관련된 결과가 전달되는 클럭 주기 동안 명령이 실행을 위해 선택되고 기능 유닛(24A-24C)으로 전달될 수 있다. 이러한 경우, 예약 스테이션들(22)은 상기 전달된 결과를 상기 기능 유닛(24)으로 라우팅한다.
일 실시예에서, 각 기능 유닛들(24A-C)은 덧셈과 뺄셈의 정수 산술 연산들뿐 아니라 시프트, 회전, 논리 연산 및 분기 연산을 수행하도록 구성된다. 또한, 주목할 사항으로서, 부동 소수점 유닛(미도시)이 또한 부동 소수점 연산들을 수용하기 위해 적용될 수 있다. 상기 부동 소수점 유닛은 코프로세서(coprocessor)로서 동작하며, MROM 유닛(34)에서 명령들을 수신하고, 그리고 후속으로 명령들을 완결하기 위해 재배열 버퍼(32)와 통신한다. 또한, 기능 유닛들(24)은 적재/저장 유닛(26)에 의해 수행되는 적재 및 저장 메모리 연산들에 대한 어드레스 생성을 수행하도록 구성될 수 있다.
각 기능 유닛들(24) 역시 조건부 분기 명령들의 실행에 관한 정보들을 상기 분기 예측 유닛(14)에 제공한다. 만일 분기 예측이 틀리다면, 그로 인해, 분기 예측 유닛(14)은 명령 처리 파이프라인에 들어간 오예측된 분기에 후속하는 명령들을 버리게 되고, 명령 캐시(16) 또는 주 메모리로부터 상기 요구된 명령들을 페치하게 된다. 주목할 사항으로서, 이러한 경우, 본래 프로그램 순서에서 상기 오예측된 분기 명령 다음에 발생하는 명령들의 결과들이, 추론적으로 실행되었던 것들과 적재/저장 유닛(26) 및 재배열 버퍼(32)에 임시로 저장되었던 것들을 포함하여 모두 버려진다.
기능 유닛들(24)에 의해 생성되는 결과들은, 레지스터의 값이 업데이트되는 경우에는 재배열 버퍼(32)로 전달되고, 상기 메모리 위치들의 내용이 변경되는 경우에는 적재/저장 유닛(26)으로 전달된다. 만일 상기 결과가 레지스터에 저장되면, 재배열 버퍼(32)는 상기 명령이 디코드되는 경우 상기 레지스터 값에 대해 예약된 위치에 그 결과를 저장한다. 복수의 결과 버스들(38)이 기능 유닛들(24)과 적재/저장 유닛(26)으로부터의 결과들을 전달하기 위해 포함된다. 결과 버스들(38)은 생성된 결과뿐 아니라 실행되고 있는 상기 명령을 식별하는 재배열 버퍼 태그들을 전달한다.
적재/저장 유닛(26)은 기능 유닛(24)과 데이터 캐시(28) 간에 인터페이스를 제공한다. 일 실시예에서, 적재/저장 유닛(26)은 펜딩 적재 및 저장들에 대한 데이터 및 어드레스 정보들을 저장하기 위해 8개의 저장 위치들을 갖는 적재/저장 버퍼를 이용하여 구성된다. 상기 버퍼가 가득차면, 명령 정렬 유닛(18)은 적재/저장 유닛(26)이 상기 펜딩 적재 또는 저장 요청 정보를 저장하기 위한 공간을 가질 때까지 대기한다. 적재/저장 유닛(26)은 또한, 데이터 코히런시의 유지를 보장하기 위해 펜딩 저장 메모리 연산들에 대한 적재 메모리 연산들의 종속성 검사를 수행한다. 메모리 연산은 마이크로프로세서(10)와 상기 주 메모리 서브시스템 간의 데이터 전송이다. 메모리 연산들은 메모리에 저장된 피연산자를 이용하는 명령의 결과이거나, 추가의 연산 없이 상기 데이터의 전달만을 야기하는 적재/저장 명령의 결과일 수 있다. 또한, 적재/저장 유닛(26)은 예를 들어, 세그먼트 레지스터들과, 상기 x86 마이크로프로세서 아키텍쳐에 의해 정의되는 어드레스 변환 메커니즘에 관련된 다른 레지스터들과 같은 특별한 레지스터를 저장하기 위한 특별 레지스터 저장부를 포함할 수 있다.
일 실시예에서, 적재/저장 유닛(26)은 추론적으로 적재 메모리 연산들을 수행하도록 구성될 수 있다. 저장 메모리 연산들은 프로그램 순서로 수행될 수 있지만, 예측된 방향으로 추론적으로 저장될 수 있다. 만일 상기 예측된 방향이 틀렸다면, 상기 저장 메모리 연산에 선행하는 상기 데이터는 상기 예측된 방향으로 후속으로 복귀되고, 상기 저장 메모리 연산은 정확한 방향으로 수행된다. 다른 실시예에서, 저장들은 역시 추론적으로 수행될 수 있다. 추론적으로 실행된 저장들은 업데이트 전에 상기 캐시 라인의 복사본과 더불어 저장 버퍼에 위치된다. 만일 상기 추론적으로 실행된 저장이 분기 오예측 또는 이상 때문에 추후에 버려진다면, 상기 캐시 라인은 상기 버퍼에 저장된 상기 값으로 복귀될 수 있다. 또한, 주목할 사항으로서, 적재/저장 유닛(26)은 임의의 크기의 추론적 실행(어떠한 추론적 실행도 수행하지 않는 것을 포함함)을 수행하도록 구성될 수 있다.
데이터 캐시(28)는 적재/저장 유닛(26)과 상기 주 메모리 서브시스템 간에 전송되는 데이터를 임시적으로 저장하기 위해 구비되는 고속 캐시 메모리이다. 일 실시예에서, 데이터 캐시(28)는 8 방향(way) 세트 어소시에이티브 구조로 최대 16킬로 바이트까지 저장할 수 있는 용량을 갖는다. 명령 캐시(16)와 마찬가지로, 데이터 캐시(28)는 방향 예측 메커니즘을 적용할 수 있다. 데이터 캐시(28)가 다양한 특정 메모리 구성, 예를 들어 세트 어소시에이티브 및 직접 맵핑 구성으로 구현될 수 있다.
x86 마이크로프로세서 아키텍쳐를 적용하는 마이크로프로세서(10)의 특정 일 실시예에서, 명령 캐시(16) 및 데이터 캐시(28)는 선형으로 어드레스가 지정된다. 상기 선형 어드레스는 상기 명령에 의해 특정된 오프셋과, 상기 x86 어드레스 변환 메커니즘의 세그먼트 부분에 의해 특정된 기본 어드레스로부터 형성된다. 선형 어드레스들은 주 메모리를 액세스하기 위해 물리적인 어드레스들로 선택적으로 변환될 수 있다. 상기 물리적 변환에 대한 선형성은 상기 x86 어드레스 변환 메커니즘의 페이징(paging) 부분에 의해 특정된다. 또한, 주목할 사항으로서, 선형으로 어드레스 지정된 캐시는 선형 어드레스 태그들을 저장한다. 한 세트의 물리적 태그들(미도시)은 상기 선형 어드레스들을 물리적 어드레스들로 매핑시키기 위해, 그리고 변환 앨리어스(alias)를 검출하기 위해 적용될 수 있다. 또한, 상기 물리적 태그 블록은 선형 어드레스를 물리 어드레스로 변환할 수 있다.
프리페치/프리디코드 유닛과 명령 캐시 구성
앞서 특기한 바와 같이, 마이크로프로세서들에 대한 외부 캐시들로서 이용하기 위해 설계된 많은 메모리 디바이스들 예를 들어, 인텔(Intel)의 82491/82492 캐시 SRAM들은 패리티 정보를 저장하도록 구성된다. 일 실시예에서, 1 패리티 비트가 매 8 데이터 비트마다 저장될 수 있다. 짝수 패리티가 필요한 것으로 가정하면, 011010112의 데이터 바이트는 표명된 패리티 비트를 가져야 하며, 그로 인해 전체 설정된 비트들의 수는 짝수가 된다. 상기 패리티 비트는 상기 마이크로프로세서에 의해 생성된 다음, 상기 데이터 바이트와 함께 상기 외부 캐시에 저장된다. 상기 마이크로프로세서는 상기 캐시로부터 상기 데이터를 다시 판독할 때, 표명된 데이터와 패리티 비트를 카운트할 수 있다. 만일 상기 결과 값이 상기 선택된 패리티와 일치하지 않으면, 패리티 에러가 발생하고 상기 마이크로프로세서는 적절한 동작, 예를 들어 상기 연산 시스템에 메모리 에러의 발생을 신호하는 것과 같은 동작을 취한다. 다른 메모리 디바이스 구성에서는 에러 검사 및 정정(ECC)을 위한 추가 비트들을 할당할 수 있다.
서버들과 같은 고급 말단 시스템들은 전형적으로 패리티와 ECC를 지원하겠지만, 중저급 시스템 설계자들은 이러한 특징들을 활성화 시키지 않는데, 이는 데이터 에러가 발생할 가능성이 비교적 낮기 때문이다. 이러한 시스템들에서, 레벨 2 캐시들의 상기 패리티 및 ECC 비트들은 프리디코드 정보를 저장하는데 이용될 수 있다. 이는 시스템 레벨에서 광범위한 하드웨어 변경 없이 성능을 개선할 수 있어 유리하다.
이제, 도 4는 프리디코드 유닛(12)과 명령 캐시(16)의 일 실시예를 상세히 예시한 다이어그램이다. 이러한 실시예에서, 프리디코드 유닛(12)은 버스 인터페이스 로직(52)을 통해 캐시(50)와 연결된다. 캐시(50)는 마이크로프로세서(10)와 동일한 실리콘 상에, 또는 도터카드(daughtercard) 또는 마이크로 프로세서(10)에 근접한 마더보드에 인접하여 연결되는 개별 실리콘 상에 존재하며, 대기시간(latency)이 짧은 고대역폭 메모리를 포함한다. 캐시(50)는 정적 랜덤 액세스 메모리들(SRAMs), 동기식 동적 액세스 메모리들(SDRAMs), 또는 기타 다른 종류의 대기시간이 짧은 메모리들을 포함할 수 있다. 캐시(50)는 마이크로프로세서(10)와 동일한 실리콘 또는 개별 실리콘 상에 존재할 수 있다. 일 실시예에서, 캐시(50)는 상기 마이크로프로세서(10)의 기능 유닛들에 두 번째로 가까운 캐시이기 때문에, 즉, 어떠한 명령 캐시(16) 및 데이터 캐시(28)의 레벨 1 캐시의 배후에 있기 때문에, "레벨 2" 캐시로 호칭될 수 있다. 캐시(50)는 또한 상기 마이크로프로세서의 외부에 있기 때문에 "외부 캐시"라고도 호칭될 수 있다.
버스 인터페이스 로직(52)은 멀티플렉서들, 버퍼들, 송수신기들, 드라이버들을 포함할 수 있고, 또는 마이크로프로세서(10)와 캐시(50) 간의 데이터, 어드레스 및 제어 신호들의 전송을 가능하게 하거나 또는 개선할 수 있는 다른 종류의 버스 인터페이스 로직을 포함할 수 있다. 일 실시예에서, 마이크로프로세서(10)와 레벨 2 캐시(50) 간에 어떠한 버스 인터페이스 로직(52)도 필요하지 않을 수도 있다. 예를 들어, 만일 마이크로프로세서(10)와 레벨 2 캐시(50)가 서로 물리적으로 충분히 가깝고, 그 출력 트랜지스터들의 구동 능력이 충분히 높다면, 마이크로프로세서(10) 및 캐시(50)는 버스 인터페이스 로직(52) 없이 서로 연결될 수 있다.
프리디코드 유닛(12)은 분기 예측 유닛(14)으로부터 프리페치될 명령 어드레스들을 수신하고, 이들을 버스(68), 버스 인터페이스 로직(52), 그리고 메모리 버스(56)를 통해 캐시(50)로 전달하도록 구성된다. 만일 레벨 2 캐시(50)가 상기 요청된 어드레스에 대응하는 명령 바이트들을 저장하고 있는 경우, 소정수의 명령 바이트들(예를 들어, 32 바이트들의 1 캐시 라인)은 버스(56), 버스 인터페이스 로직(52) 및 버스(68)를 통해 프리디코드 유닛(12)으로 전달된다. 만일 요청된 명령 바이트들이 레벨 2 캐시(50) 내에 저장되어 있지 않으면, 캐시(50)는 상기 주 메모리 서브시스템으로부터 상기 요청된 명령 바이트들을 검색할 수 있도록 구성된다. 상기 요청된 명령 바이트들이 상기 주 메모리 서브시스템에서 이송되면, 이들은 명령 캐시(16)로 전달된다. 이들은 또한 캐시(50)에 저장된다.
프리디코드 유닛(12)이 상기 요청된 명령 바이트들을 수신하면, 상기 프리디코드 유닛(12)은 각 명령 바이트에 대한 프리디코드 정보를 생성한다. 도시된 실시예에서, 프리디코드 유닛(12)은 각 명령 바이트들에 대해 하나의 시작 비트를 생성한다. 프리디코드 유닛(12)이 요청된 어드레스를 출력하는 것에 대한 응답으로 32바이트(예를 들어, 하나의 캐시 라인)를 수신한다고 가정하면, 프리디코드 유닛(12)은 총 32개의 시작 비트를 위해 각 명령 바이트에 대해 하나의 시작 비트를 생성하도록 구성된다. 일단 생성되면, 상기 시작 비트들은 명령 캐시(16)로 전달되고, 여기서 상기 시작 비트들은 관련된 명령 바이트들과 함께 저장된다. 명령 캐시(16)는 복수의 캐시 라인 저장 위치들(64)과 복수의 프리디코드 정보 저장 위치들(62)로 국부적으로 편성될 수 있고, 여기서 하나의 프리디코드 정보 저장 위치는 각 캐시 라인 저장 위치에 대응한다. 상기 명령 바이트들과 프리디코드 비트들은 또한 명령 정렬 유닛(18)에 직접 라우팅될 수 있다.
명령 캐시(16) 내의 모든 캐시 라인 저장 위치들(64)이 가득차면, 캐시 미스에 대해 어떤 캐시 라인이 오버라이트되어야 하는지를 결정하기 위해, 다수의 서로 다른 알고리즘들이 이용될 수 있다. 예를 들어, 가까운 장래에 필요하게 될 정보를 버리는 경우를 줄이기 위해, 캐시 액세스의 시퀀스를 기록하는 최저 사용 빈도(least-recently used:LRU) 오버라이트 방식이 이용될 수 있다. 오버라이트될 캐시 라인이 선택되면, 대응하는 프리디코드 저장 위치(62)에 저장된 관련 프리디코드 정보는 프리디코드 유닛(12)과 버스 인터페이스 로직(52)에 의해 명령 캐시(16)로부터 캐시(50)로 출력된다. 프리디코드 유닛(12)은 또한 오버라이트된 명령 캐시 정보에 대응하는 어드레스를 전달한다.
캐시(50)가 프리페치 유닛(12)과 명령 캐시(16)로부터 상기 프리디코드 비트들과 상기 대응하는 어드레스를 수신하는 경우, 캐시(50)는 상기 대응하는 어드레스와 관련된 상기 패리티 비트 저장 위치들(60)에 상기 프리디코드 비트들을 저장하도록 구성된다. 일부 실시예들에서, 명령 캐시(16)의 오버라이트될 상기 실제 명령 바이트들은 또한 상기 프리디코드 비트들과 함께 저장을 위해 캐시(50)로 출력될 수 있다. 이러한 구성은 자체 수정 코드(self-modifying code)를 지원하는 마이크로프로세서(10)의 몇몇 실시예들에서 유리할 수 있다. 예를 들어, 저장 어드레스들은 만일 저장 명령이 명령 캐시(16) 내에 저장된 명령 바이트들을 오버라이트할 것인지를 결정하기 위해 명령 캐시(16)에 의해 "탐색(snooped)" 될 수 있다. 만일 그렇다면, 상기 저장 명령은 명령 캐시(16)와 데이터 캐시(28)에 대해 수행될 수 있고, 그로 인해, 상기 원하는 명령 바이트들을 변경할 수 있다. 이러한 구성에서, 프리디코드 유닛(12)은 변경된 명령에 대한 프리디코드 정보를 재계산한 후 상기 재계산된 프리디코드 비트들을 명령 캐시(16)에 저장하도록 구성될 수 있다. 만일 캐시(50)가 라이트백(write-back) 캐시로서 구성되면, 상기 변경된 명령 바이트들은 나중에, 상기 변경된 명령 바이트들을 저장하는 상기 캐시 라인 저장 위치가 명령 캐시(16)에 오버라이트될 때, 캐시(50)에 기록될 수 있다.
상기 프리디코드 정보(그리고 명령 바이트들, 만일 그렇게 구성되었다면)가 캐시(50)에 기록된 후에, 명령 캐시(16) 내의 상기 캐시 라인 저장 위치 및 프리디코드 정보 저장 위치는 안전하게 새로운 명령 바이트들과 새로운 프리디코드 정보들로 오버라이트된다. 프리디코드 유닛(12)이 캐시(50)로 이미 출력된 명령 바이트들에 대한 프리페치 요구 또는 페치 요구를 수신하는 경우, 프리디코드 유닛(12)은 상기 요청된 어드레스를 캐시(50)로 출력한다. 만일 캐시(50)가 여전히 대응하는 명령 바이트들 및 프리디코드 정보를 저장하고 있다면(즉, 이들이 오버라이트되지 않았다면), 캐시(50)는 이들을 프리디코드 유닛(12)으로 전달하도록 구성될 수 있다. 프리디코드 유닛(12)은 상기 명령 바이트들과 대응하는 프리디코드 정보를 명령 정렬 유닛(18)과 명령 캐시(16)로 전달시킬 수 있다. 유리하게도, 이러한 실시예에서는, 상기 요청된 명령 바이트들에 대한 새로운 프리디코드 정보를 생성하는 과정이 생략될 수 있는 이점이 있다. 앞서 특기한 바와 같이, 이는 분기 오예측 및/또는 캐시 미스가 발생하고 기능 유닛들(24A-C)이 정체할 위험이 있는 경우, 몇몇 실시예들의 마이크로프로세서(10)에 있어 특히 유리할 수 있다.
하지만, 만일 캐시(50)가 원하는 명령 바이트들을 다른 어드레스에 위치하는 다른 명령 바이트들로 오버라이트했다면, 캐시(50)는 상기 요청된 바이트들을 주 메모리에서 검색하고, 이들을 프리디코드 유닛(12)으로 전달하도록 구성될 수 있다. 캐시(50)는 명령 캐시(50)가 전송되고 있는 명령 바이트들에 대한 유효한 프리디코드 정보를 가지고 있지 않음을 표시하기 위해 상기 명령 바이트들을 프리디코드 유닛(12)으로 전송할 때, 특정 제어 신호를 표명하도록 구성될 수 있다.
다른 실시예에서, 제어 유닛(80)은 캐시(50)를 감시하고, 주 메모리로부터 새로운 명령 바이트들과 오버라이트되는 명령 저장 위치(58)에 대응하는 패리티/ECC 저장 위치(60)들에 프리디코드 비트들의 특정 무효화 시퀀스를 저장할 수 있다. 이는 효율적으로 새로운 명령 바이트들에 대한 프리디코드 정보를 "초기화"한다. 이러한 구성에서, 캐시(50)는 대응하는 명령 바이트들이 프리디코드 유닛(12)에 의해 요청되는 경우 프리디코드 비트들의 상기 무효화 시퀀스를 출력하도록 구성될 수 있다. 유리하게도, 이러한 구성의 캐시(50)는 패리티/ECC를 지원하는 표준 캐시로 할 수 있고, 출력되는 상기 프리디코드 비트들이 유효한지 무효한지를 인식하도록 어떻게든 변경할 필요가 없는 이점이 있다. 대신에, 프리디코드 유닛(12)은 캐시(50)로부터 수신한 상기 프리디코드 비트들을 검사하도록 구성되어야 한다. 만일 프리디코드 비트들이 소정의 무효화 시퀀스와 일치하면, 프리페치 유닛(12)은 새로운 프리디코드 정보를 계산하도록 구성될 수 있다. 만일 상기 프리디코드 비트들이 상기 소정의 무효화 시퀀스와 일치하지 않으면, 프리페치 유닛(12)은 상기 프리디코드 비트들을 레벨 2 캐시(50)에서 명령 캐시(16)(그리고, 만일 필요하면 정렬 유닛(16)/디코드 유닛들(20A-C))로 전송하도록 구성될 수 있다.
또한, 주목할 사항으로서, 버스들(56과 68)은 임의의 편리한 크기, 예를 들어 16, 32, 64 또는 128 비트들일 수 있다는 점이다. 상기 이용되는 버스 라인들의 수는 데이터, 어드레스, 그리고 제어 버스들을 멀티플렉싱함으로써 줄일 수 있다. 일부 실시예들에서, 프리디코드 유닛(12)과 레벨 2 캐시(50)는 전송되고 수신되는 어드레스들에 대한 패리티 비트들을 생성하도록 구성될 수 있다. 그러나, 이러한 패리티 비트들은 저장될 필요가 없고, 각 어드레스가 전송된 다음 버려질 수 있다.
또 다른 실시예에서, 시작 비트들에 더하여 프리디코드 정보는 프리디코드 유닛(12)에 의해 생성되고 명령 캐시(16)에 저장된다. 예를 들어, 관계되는 명령 바이트가 명령의 마지막 바이트인지를 식별하는 종료 비트들, 그리고 관계되는 명령 바이트가 연산코드 바이트인지를 식별하는 연산코드 비트들 역시 프리디코드 유닛(12)에 의해 생성되고 명령 캐시(16)에 저장될 수 있다. 상기 명령 바이트들이 캐시(16)에서 오버라이트될 경우에, 캐시(50) 내에서 이용 가능한 패리티 및/또는 ECC 비트들(60)의 수에 따라, 이러한 몇몇 또는 모든 프리디코드 비트들이 캐시(50)로 전달될 수 있다.
몇몇 실시예들에서, 디코드 유닛들(20A-C)은 프리디코드 유닛(12)에 의해 제공되거나 명령 캐시(16)로부터 판독된 프리디코드 정보가 틀린 경우를 검출하도록 구성될 수 있다. 프리디코드 정보를 생성하는 데에 이용되는 방법에 따라 서로 다른 이유들에 의해 상기 프리디코드 정보의 부정확성이 발생할 수 있다. 부정확한 프리디코드 정보가 발생한 경우, 디코드 유닛들(20A-C)은 프리디코드 유닛(12)이 상기 프리디코드 정보를 다시 생성하는 동안 정지하도록 구성될 수 있다. 그 다음, 상기 새로운 프리디코드 정보는 명령 캐시(16) 내의 상기 부정확한 프리디코드 정보에 오버라이트된다. 다른 실시예에서, 디코드 유닛들(20A-C)은 단순히 부정확한 프리디코드 정보를 버리고 스스로 디코딩을 완료하도록 구성될 수 있다.
도 5에서, 명령 캐시(16) 및 캐시(50)의 일실시예를 보다 상세히 도시한다. 상기 설명한 바와 같이, 명령 캐시(16)는 명령 저장 위치들(62)과 프리디코드 정보 저장 위치들(64)로 구성될 수 있다. 각 프리디코드 정보 저장 위치는 하나의 명령 저장 위치에 대응한다. 예를 들어, 저장 위치(80)에 저장된 상기 프리디코드 정보는 명령 저장 위치(82)에 저장된 명령 바이트들에 대응한다. 상기 도시된 실시예에서, 저장 위치(80)는 위치(82)에 저장된 각 명령 바이트에 대응하는 시작 비트들을 저장한다.
도시된 바와 같이, 캐시(50)는 명령 캐시(16)와 같이 동일한 명령 바이트들을 저장할 수 있다. 예를 들어, 코드 세그먼트(72)로부터 명령들이 제일 먼저 요구되는 경우, 이들은 주 메모리로부터 레벨 2 캐시(50) 및 명령 캐시(16)로 판독될 수 있다. 그러나, 레벨 2 캐시(50)는 코드 세그먼트(72)에 대한 프리디코드 데이터를 가지지 않는다는 것을 유의한다. 따라서, 소정의 무효화 상수(이 경우, 00000000....)가 위치(90)에 저장된다. 프리디코드 유닛(12)이 상기 명령 바이트들을 수신하는 경우, 상기 프리디코드 유닛(12)은 상기 무효화 상수를 검출하고, 코드 세그먼트(72)에 대한 프리디코드 정보를 계산한다. 그 다음, 이러한 프리디코드 정보는 명령 캐시(16) 내부의 저장 위치(80)에 저장된다.
코드 세그먼트(78)에서 명령들이 제일 처음 요구되었을 경우 상기와 동일한 절차가 실시된다. 그러나, 코드 세그먼트(78)에 대한 상기 명령 바이트들이 일단 명령 캐시(16)에서 오버라이트되면, 상기 프리디코드 정보는 레벨 2 캐시(50)로 다시 기록되어 위치(94)에 저장된다. 만일 코드 세그먼트(78)가, 자신이 레벨 2 캐시(50)에서 오버라이트되기 전에 그리고 명령 캐시(16)에서 교체되고 난 후에 요구되면, 코드 세그먼트(78)에 대한 상기 명령 바이트들 및 상기 프리디코드 정보 모두는 위치들(94-96)로부터 판독되어 명령 캐시(16)에 저장된다. 이러한 상태가 도면에 예시된다.
임의의 소정의 비트들 시퀀스가 무효화 상수로 이용될 수 있지만, 일부 실시예에서는, 프리디코드 유닛(12)에 의해 생성되지 않는 프리디코드 비트 시퀀스를 선택하는 것이 유리할 수 있다. 예를 들어, 최대 명령 길이가 16바이트이고 캐시라인의 길이가 32바이트라고 가정하면, 프리디코드 유닛(12)은 적어도 한개의 시작 바이트도 없이 32개의 연속적인 명령 바이트들을 갖는 캐시라인을 수신하지 않을 것이다. 따라서, 32개의 0들로 이루어지는 무효화 상수를 선택하는 것은 거짓 무효화의 수를 줄일 수 있으므로 유리할 수 있다. 거짓 무효화는 프리디코드 유닛(12)에 의해 계산된 상기 프리디코드 비트들이 소정의 무효화 상수와 같을 경우 발생할 수 있다. 만일 이것이 발생하면, 비록 원래의 프리디코드 비트들이 정확하였다 할지라도, 캐시(50)로부터 판독된 상기 원래 프리디코드 비트들은 버려질 것이고, 새로운 프리디코드 비트들이 계산될 것이다.
일 실시예에서, 상기 설명된 특징들은 마이크로프로세서(10) 내에서 단독으로 적용될 수 있다. 예를 들어, 제어 유닛(80)의 기능이 생략되거나 마이크로프로세서(10) 내에 포함될 수 있다. 마찬가지로, 버스 인터페이스 로직(52) 역시 생략되거나 몇몇 실시예에서 마이크로프로세서(10) 내에 포함될 수 있다. 상기 전체적으로 설명된 기능들을 적용하는 마이크로프로세서(10)는 설명한 바와 같이 프리디코드 정보를 저장하는 컴퓨터 시스템을 구현하는 비용을 줄이는 이점이 있다. 다른 실시예에서, 원하는 기능들은 마이크로프로세서(10)와 1개 이상의 인터페이스 또는 지원 칩들 간에 분산될 수 있다.
도 6은 프리디코드 정보를 레벨 2 캐시에 저장하기 위한 방법의 일 실시예를 설명하는 흐름도를 보인다. 먼저, 명령 바이트들이 명령 캐시(16)로부터 요청된다(단계 140). 만일 상기 요청된 바이트들이 명령 캐시(16) 내에 저장되어 있으면, 이들은 그들에 대응하는 프리디코드 정보와 함께 정렬 유닛(16)과 디코드 유닛들(20 A-C)로 전달된다(단계 142와 152). 반면에, 만일 상기 요청된 명령 바이트들이 명령 캐시(16) 내에 저장되어 있지 않으면, 상기 요청된 어드레스는 레벨 2 캐시(50)로 전달된다(단계 142, 144). 만일 상기 요청된 명령 바이트들이 레벨 2 캐시(50)에 저장되어 있지 않으면, 이들은 주 메모리 서브시스템에서 판독된다(단계 146, 148). 상기 요청된 명령 바이트들이 상기 주 메모리 서브시스템으로부터 수신되면, 이들은 무효화 상수와 함께 레벨 2 캐시(50)에 저장된다(단계 148, 150). 앞서 특기한 바와 같이, 상기 무효화 상수는 레벨 2 캐시(50) 내의 프리디코드 저장 위치를 효율적으로 초기화하고, 그로 인해, 새로운 프리디코드 정보가 생성되어야 한다고 프리디코드 유닛(12)에 신호를 보낸다. 프리디코드 유닛(12)이 상기 명령 바이트들과 프리디코드 비트들을 수신하는 경우, 상기 프리디코드 비트들은 이들이 상기 무효화 상수들과 동일한지를 결정하기 위해 검사된다(단계154, 156). 만일 상기 프리디코드 비트들이 상기 무효화 상수와 동일하면, 프리디코드 유닛(12)은 새로운 프리디코드 정보를 생성하도록 구성된다(단계 156, 164). 그 다음, 상기 명령 바이트들과 새로운 프리디코드 정보는 명령 캐시(16)에 저장된다(단계 158). 만일 상기 명령 바이트들과 새로운 프리디코드 정보를 저장하는 것이 명령 캐시(16) 내부의 이전에 저장된 캐시 라인을 오버라이트하는 것을 수반하면, 오버라이트될 상기 이전에 저장된 캐시라인에 대응하는 프리디코드 정보는 레벨 2 캐시(50)에 다시 저장된다(단계 160, 166).
상기 도면의 단계들은 설명을 위한 목적으로 일련의 순서로 표현했음을 주의해야 한다. 다른 실시예들도 가능하고 고려될 수 있다. 상기 다수의 단계들은 조합되거나 동시에 실시될 수 있다. 예를 들어, 단계 150과 154는 병행하여 수행될 수 있다. 또한, 앞서 특기한 바와 같이, 상기 단계들은 무효화 상수들의 이용을 선택적으로 포함할 수 있다.
예시적인 컴퓨터 시스템
도 7은 마이크로프로세서(10)를 이용하는 컴퓨터 시스템(200)의 일 실시예의 블록도이다. 상기 도시된 시스템에서, 주 메모리(204)는 메모리 버스를 통해 버스 브리지(202)와 연결되고, 그래픽 콘트롤러(208)는 AGP 버스(210)를 통해 버스 브리지(202)와 연결된다. 마지막으로 다수의 PCI 디바이스들(212A-212B)이 PCI 버스(214)를 통해 버스 브리지(202)와 연결된다. 제 2버스 브리지(216)는 EISA/ISA 버스(220)를 통해서 1개 이상의 EISA 또는 ISA 디바이스들과의 전기적 인터페이스를 수용할 수 있도록 제공된다. 마이크로프로세서(10)는 CPU 버스(224)를 통해 버스 브리지(202)와 연결된다.
버스 브리지(202)는 마이크로프로세서(10), 주 메모리(204), 그래픽 콘트롤러(208), 그리고 PCI 버스(214)에 부착된 디바이스들 간에 인터페이스를 제공한다. 버스 브리지(202)와 연결된 어떤 디바이스들 중 하나에서 연산이 수신되면, 버스 브리지(202)는 상기 연산의 타겟(예를 들어, 특정 디바이스 또는 PCI 버스(214)의 경우, 그 타겟이 PCI 버스(214)에 있는 특정 디바이스)를 식별한다. 버스 브리지(202)는 상기 연산을 상기 타겟 디바이스로 라우팅한다. 버스 브리지(202)는 일반적으로 소스 디바이스 또는 버스에 의해 이용되는 프로토콜로부터 상기 타겟 디바이스 또는 버스에 의해 이용되는 프로토콜로 연산을 변환한다.
PCI 버스(214)에 대해 ISA/EISA 버스에 인터페이스를 제공하는 것 외에, 필요한 경우 제 2버스 브리지(216)는 부가적인 기능을 편입할 수 있다. 예를 들어, 일 실시예에서, 제 2버스 브리지(216)는 PCI 버스(214)의 소유권을 중재하기 위해 마스터 PCI 중재기(master PCI arbiter)(미도시)를 포함할 수 있다. 제 2버스 브리지(216)에 내부적으로 통합되는 또는 외부의 입출력 콘트롤러(미도시)는 또한 필요한 경우 키보드 및 마우스(222) 그리고 다양한 직렬 및 병렬 포트들을 동작 지원하도록 컴퓨터 시스템(200) 내에 포함될 수 있다. 다른 실시예에서는, 외부 캐시 유닛(미도시)에 마이크로프로세서(10)와 버스 브리지(202) 간의 CPU 버스(224)를 더 연결할 수 있다. 대안적으로, 상기 외부 캐시는 버스 브리지(202)와 연결될 수 있고, 상기 외부 캐시에 대한 캐시 제어 논리가 버스 브리지(202)에 통합될 수 있다.
주 메모리(204)는 응용 프로그램들이 저장되고 마이크로프로세서(10)가 주로 실행하는 메모리이다. 적절한 주 메모리(204)는 DRAM(동적 랜덤 액세스 메모리)을 포함하고, 바람직하게는 다수의 SDRAM(동기 DRAM)의 뱅크(bank)들을 포함하는 것이 좋다.
PCI 디바이스들(212A-212B)은 예를 들어 네트워크 인터페이스 카드들, 비디오 가속기들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브 또는 드라이브 콘트롤러들, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터들 그리고 전화기 카드들과 같은 다양한 주변 디바이스들이다. 마찬가지로, ISA 디바이스(218)는 모뎀, 음악 카드, 그리고 예를 들어 GPIB 또는 필드 버스 인터페이스 카드들 같은 다양한 데이터 수집 카드들과 같은 다양한 종류의 주변 디바이스들이다.
그래픽 콘트롤러(208)는 표시부(226) 상에 문자나 그림들의 표시를 제어하기 위해 제공된다. 그래픽 콘트롤러(208)는 당업계에서 잘 알려진 바와 같이 주 메모리(204)에서 또는 그로부터 효율적으로 이동시킬 수 있는 3차원 데이터 구조들을 렌더링(rendering)하기 위한 그래픽 가속기로 구현될 수 있다. 따라서, 그래픽 콘트롤러(208)는 AGP 버스(210)의 마스터일 수 있고, 여기서, 버스 브리지(202) 내의 타겟 인터페이스에 대해 액세스를 요청 및 수신할 수 있어 주 메모리(204)에 대해 액세스할 수 있다. 전용 그래픽 버스는 주 메모리(204)로 부터 데이터를 빨리 검색할 수 있다. 특정한 연산들을 위해, 그래픽 콘트롤러(208)는 또한 AGP 버스(210)상에서 PCI 프로토콜 트랜잭션들을 생성하도록 구성될 수 있다. 따라서, 버스 브리지(202)의 상기 AGP 인터페이스는 AGP 프로토콜 처리 및 PCI 프로토콜 타겟 및 초기화 처리들 모두를 지원하기 위한 기능을 포함할 수 있다. 표시부(226)는 그림과 문자가 표시될 수 있는 임의의 전자 표시부이다. 적절한 표시부(226)는 캐소드 광선 튜브("CRT"), 액정 표시기("LCD") 등을 포함한다.
주목할 사항으로서, AGP, PCI, 그리고 ISA 또는 EISA 버스들이 상기 설명에서 예제로 이용되어졌지만, 원하는 어떠한 버스 구조들도 대신 이용될 수 있다. 또한, 주목할 사항으로서, 컴퓨터 시스템(200)은 부가적인 마이크로프로세서들을 포함하는 다중프로세서 컴퓨터 시스템일 수 있다.
또한, 본 설명은 다양한 신호들의 표명을 인용할 수 있다는 것을 유의하자. 여기서 이용된 바와 같이, 신호들은 만일 특정 조건을 나타내는 값을 전달하면 "표명된다(asserted)"라고 한다. 꺼꾸로, 신호들이 만일 특정 조건의 결핍을 나타내는 값을 전달하면 "비표명된다(disasserted)" 또는 "표명되지 않는다(not asserted)"라고 한다. 신호들은 논리적 0의 값을 전달하거나 또는, 반대로 논리적 1의 값을 전달하면 표명되는 것으로 정의될 수 있다. 또한, 상기 설명에서 많은 값들이 버려지는 것으로 설명된다. 값들은 다수의 방식으로 버려질 수 있는데, 값들의 변경은 일반적으로 포함하지 않으며, 이는 신호를 수신하는 논리회로에 의해 무시된다. 예를 들어, 만일 상기 값이 한 비트로 이루어지면, 그 값의 논리 상태는 그 값을 버리는 것으로 반전될 수 있다. 만일 상기 값이 n 비트라면, n 비트 인코딩들 중의 하나는 상기 값이 무효하다는 것을 나타낼 수 있다. 상기 값을 무효 인코딩으로 설정하면 그 값은 버려진다. 또한, 상기 n-비트 값은 유효임이 설정되면, n 비트 값은 유효 비트 표지를 포함할 수 있다. 상기 유효 비트를 재설정(reset)한다는 것은 그 값을 버리는 것도 포함할 수 있다. 값을 버리는 다른 방법들도 이용할 수 있다.
본 발명은 마이크로프로세서들, 컴퓨터 시스템들, 개인용 디지털 지원장비들(PDA들), 컴퓨터 네트워크들, 단일 및 다중프로세서 시스템들, 단일 칩에 집적된 시스템들, 내장형 프로세서 및 마이크로콘트롤러 시스템들, 그리고 디지털 신호 프로세서들을 포함하는(그러나 이에 제한되지는 않는다) 다수의 상이한 산업 분야에 적용될 수 있다.
삭제

Claims (25)

  1. 마이크로프로세서에 있어서,
    레벨 2 캐시(50)로부터 명령 바이트들을 수신하고 대응하는 프리디코드 정보를 발생시키도록 구성된 프리디코드 유닛과; 그리고
    상기 프리디코드 유닛에 결합된 명령 캐시를 포함하며,
    상기 명령 캐시는 상기 프리디코드 유닛으로부터 상기 프리디코드 정보와 상기 명령 바이트들을 수신 및 저장하고, 상기 명령 바이트들 및 상기 프리디코드 정보가 오버라이트는 것에 응답하여 레벨 2 캐시 내에 저장하기 위해 상기 프리디코드 정보의 적어도 일부를 출력하며, 그리고 상기 레벨 2 캐시는 패리티 정보를 저장하도록 지정된 저장 위치들 내에 상기 프리디코드 정보를 저장하는 것을 특징으로 하는 마이크로프로세서.
  2. 제 1 항에 있어서, 상기 프리디코드 유닛은 또한, 상기 레벨 2 캐시로부터 상기 명령 바이트에 대응하는 프리디코드 정보를 수신하도록 구성되는 것을 특징으로 하는 마이크로프로세서.
  3. 제 1 항에 있어서, 상기 프리디코드 정보는 시작 비트들, 종료 비트들 및 연산코드 비트들 중에서 하나 이상을 포함하는 것을 특징으로 하는 마이크로프로세서.
  4. 제 1 항에 있어서, 상기 프리디코드 정보는 명령 길이 정보를 포함하는 것을 특징으로 하는 마이크로프로세서.
  5. 제 1 항에 있어서, 상기 프리디코드 유닛은, 소정의 무효화 상수와 동일한 프리디코드 정보를 상기 레벨 2 캐시로부터 수신할 때, 상기 명령 바이트들에 대한 프리디코드 정보를 발생시키도록 구성되는 것을 특징으로 하는 마이크로프로세서.
  6. 제 5 항에 있어서, 상기 레벨 2 캐시에 결합되며, 주 메모리로부터 수신되는 명령 바이트들의 검출시에 상기 레벨 2 캐시 내에 상기 무효화 상수를 저장하도록 구성되는 제어 유닛을 더 포함하는 것을 특징으로 하는 마이크로프로세서.
  7. 마이크로프로세서에 있어서,
    레벨 2 캐시로부터 명령 바이트들을 수신하고 대응하는 프리디코드 정보를 발생시키도록 구성된 프리디코드 유닛과; 그리고
    상기 프리디코드 유닛과 연결되는 명령 캐시를 포함하며;
    상기 명령 캐시는 상기 프리디코드 유닛으로부터 상기 프리디코드 정보와 상기 명령 바이트들을 수신 및 저장하고, 상기 명령 바이트들과 상기 프리디코드 정보가 오버라이트되는 것에 응답하여 상기 레벨 2 캐시 내에 저장하기 위해 상기 프리디코드 정보의 적어도 일부를 출력하며, 그리고 상기 레벨 2 캐시는 에러 검사 및 정정(ECC) 정보를 저장하도록 지정된 저장 위치들에 상기 프리디코드 정보를 저장하는 것을 특징으로 하는 마이크로프로세서.
  8. 제 7 항에 있어서, 상기 프리디코드 유닛은 또한, 상기 레벨 2 캐시로부터 상기 명령 바이트에 대응하는 프리디코드 정보를 수신하도록 구성되는 것을 특징으로 하는 마이크로프로세서.
  9. 제 7 항에 있어서, 상기 프리디코드 정보는 시작 비트들, 종료 비트들 및 연산코드 비트들 중 하나 이상을 포함하는 것을 특징으로 하는 마이크로프로세서.
  10. 제 7 항에 있어서, 상기 프리디코드 정보는 명령 길이 정보를 포함하는 것을 특징으로 하는 마이크로프로세서.
  11. 제 7 항에 있어서, 상기 프리디코드 유닛은, 소정의 무효화 상수와 동일한 프리디코드 정보를 상기 레벨 2 캐시로부터 수신할 때, 상기 명령 바이트들에 대한 프리디코드 정보를 발생시키도록 구성되는 것을 특징으로 하는 마이크로프로세서.
  12. 제 11 항에 있어서, 상기 레벨 2 캐시에 결합되고, 주 메모리로부터 수신되는 명령 바이트들의 검출시에 상기 레벨 2 캐시 내에 상기 무효화 상수를 저장하도록 구성되는 제어 유닛을 더 포함하는 것을 특징으로 하는 마이크로프로세서.
  13. 주 시스템 메모리로부터 명령 바이트들을 판독하는 단계와;
    상기 명령 바이트들에 대응하는 프리디코드 정보를 발생시키는 단계와;
    상기 명령 바이트들과 프리디코드 정보를 명령 캐시에 저장하는 단계와; 그리고
    상기 프리디코드 정보에 대응하는 명령 바이트들이 상기 명령 캐시 내에서 오버라이트될 때 상기 프리디코드 정보의 적어도 일부를 저장을 위해 레벨 2 캐시로 출력하는 단계를 포함하며,
    상기 출력 단계는 패리티 정보를 저장하도록 구성된 저장 위치들 내에 저장하기 위해 상기 레벨 2 캐시로 상기 프리디코드 정보를 출력하는 단계를 포함하는 것을 특징으로 하는 방법.
  14. 제 13 항에 있어서, 상기 발생시키는 단계는 상기 명령 바이트들에 대한 프리디코드 비트들, 즉 시작 비트들, 종료 비트들 및 연산코드 비트들 중 하나 이상을 발생시키는 단계를 포함하는 것을 특징으로 하는 방법.
  15. 제 13 항에 있어서, 상기 레벨 2 캐시 내에 무효화 상수를 저장함으로써 상기 레벨 2 캐시 내에 저장된 프리디코드 정보를 초기화하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  16. 제 13 항에 있어서, 대응하는 상기 명령 바이트들이 변경되는 경우 상기 프리디코드 정보를 재계산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  17. 주 시스템 메모리로부터 명령 바이트들을 판독하는 단계와;
    상기 명령 바이트들에 대응하는 프리디코드 정보를 발생시키는 단계와;
    상기 명령 바이트들과 프리디코드 정보를 명령 캐시에 저장하는 단계와; 그리고
    상기 프리디코드 정보에 대응하는 상기 명령 바이트들이 상기 명령 캐시에서 오버라이트될 때, 저장을 위해 상기 프리디코드 정보의 적어도 일부를 상기 레벨 2 캐시로 출력하는 단계를 포함하며,
    상기 출력 단계는 에러 검사 및 정정(ECC) 정보를 저장하도록 구성된 저장 위치들(60) 내에 저장하기 위해 상기 레벨 2 캐시로 상기 프리디코드 정보를 출력하는 단계를 포함하는 것을 특징으로 하는 방법.
  18. 제 17 항에 있어서, 상기 발생하는 단계는 명령 바이트들에 대한 프리디코드 비트들, 즉 시작 비트들, 종료 비트들 및 연산코드 비트들 중 하나 이상을 발생시키는 단계를 포함하는 것을 특징으로 하는 방법.
  19. 제 17 항에 있어서, 상기 레벨 2 캐시 내에 상기 무효화 상수를 저장함으로써 상기 레벨 2 캐시 내에 저장된 프리디코드 정보를 초기화하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  20. 제 17 항에 있어서, 대응하는 상기 명령 바이트들이 변경되는 경우 상기 프리디코드 정보를 재계산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  21. 다수의 캐시 메모리들을 구비하는 컴퓨터 시스템의 운영 방법으로서,
    명령 프리디코드 정보를 제 1 캐시 메모리 내에 저장하는 단계와;
    상기 제 1 캐시 메모리 내의 구(old) 캐시 엔트리에 새로운 캐시 엔트리를 기록하는 단계와; 그리고
    상기 구 캐시 엔트리에 대응하는 상기 명령 프리디코드 정보를 상기 제 1 캐시로부터 제 2 캐시 메모리의 에러 검사 및 정정부에 세이브(save)하는 단계를 포함하는 것을 특징으로 하는 다수의 캐시 메모리들을 구비하는 컴퓨터 시스템의 운영 방법.
  22. 제 21 항에 있어서, 상기 제 2 캐시 메모리의 상기 에러 검사 및 정정부는 상기 제 2 캐시 메모리의 패리티부인 것을 특징으로 하는 다수의 캐시 메모리들을 구비하는 컴퓨터 시스템의 운영 방법.
  23. 제 21 항에 있어서, 상기 명령 프리디코드 정보는 시작 비트들, 종료 비트들 및 연산코드 비트들 중 하나 이상을 포함하는 것을 특징으로 하는 다수의 캐시 메모리들을 구비하는 컴퓨터 시스템의 운영 방법.
  24. 레벨 2 캐시와; 상기 레벨 2 캐시에 결합된 마이크로프로세서를 포함하는 컴퓨터 시스템으로서,
    상기 마이크로프로세서는:
    상기 레벨 2 캐시로부터 명령 바이트들을 수신하고 대응하는 프리디코드 정보를 발생시키는 프리디코드 유닛과; 그리고
    상기 프리디코드 유닛으로부터 상기 명령 바이트들 및 상기 프리디코드 정보를 수신 및 저장하는 명령 캐시를 포함하며,
    상기 명령 캐시는 상기 명령 바이트들이 오버라이트될 때 상기 레벨 2 캐시 내에 저장하기 위해 상기 대응하는 프리디코드 정보의 적어도 일부를 출력하며, 상기 레벨 2 캐시는 복수의 명령 저장 위치들 및 대응하는 복수의 에러 검사 및 정정(ECC) 저장 위치들을 포함하며, 상기 레벨 2 캐시는 상기 ECC 저장 위치들 내에 상기 프리디코드 정보를 저장하는 것을 특징으로 하는 컴퓨터 시스템.
  25. 제 24 항에 있어서, 상기 ECC 저장 위치들은 패리티 저장 위치들인 것을 특징으로 하는 컴퓨터 시스템.
KR1020007014659A 1998-06-24 1999-01-25 프리디코드 정보를 저장하기 위해 ecc/패리티 비트들의 이용 KR100586057B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/103,956 1998-06-24
US09/103,956 US6092182A (en) 1998-06-24 1998-06-24 Using ECC/parity bits to store predecode information

Publications (2)

Publication Number Publication Date
KR20010025123A KR20010025123A (ko) 2001-03-26
KR100586057B1 true KR100586057B1 (ko) 2006-06-07

Family

ID=22297907

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020007014659A KR100586057B1 (ko) 1998-06-24 1999-01-25 프리디코드 정보를 저장하기 위해 ecc/패리티 비트들의 이용

Country Status (6)

Country Link
US (1) US6092182A (ko)
EP (1) EP1090345B1 (ko)
JP (1) JP3836322B2 (ko)
KR (1) KR100586057B1 (ko)
DE (1) DE69902392T2 (ko)
WO (1) WO1999067705A1 (ko)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6401118B1 (en) * 1998-06-30 2002-06-04 Online Monitoring Services Method and computer program product for an online monitoring search engine
US6460132B1 (en) * 1999-08-31 2002-10-01 Advanced Micro Devices, Inc. Massively parallel instruction predecoding
US6463506B1 (en) 2000-04-29 2002-10-08 Hewlett-Packard Company Arrangement of data within cache lines so that tags are first data received
RU2004115730A (ru) * 2000-11-27 2005-02-27 Макровижн Юроп Лимитед (Gb) Диск dvd с защитой от копирования и способ его производства и проверки достоверности
US6804799B2 (en) * 2001-06-26 2004-10-12 Advanced Micro Devices, Inc. Using type bits to track storage of ECC and predecode bits in a level two cache
US7043679B1 (en) 2002-06-27 2006-05-09 Advanced Micro Devices, Inc. Piggybacking of ECC corrections behind loads
US7415638B2 (en) * 2004-11-22 2008-08-19 Qualcomm Incorporated Pre-decode error handling via branch correction
US7421568B2 (en) * 2005-03-04 2008-09-02 Qualcomm Incorporated Power saving methods and apparatus to selectively enable cache bits based on known processor state
US20080148020A1 (en) * 2006-12-13 2008-06-19 Luick David A Low Cost Persistent Instruction Predecoded Issue and Dispatcher
US7945763B2 (en) * 2006-12-13 2011-05-17 International Business Machines Corporation Single shared instruction predecoder for supporting multiple processors
US8001361B2 (en) * 2006-12-13 2011-08-16 International Business Machines Corporation Structure for a single shared instruction predecoder for supporting multiple processors
US7840786B2 (en) * 2007-04-16 2010-11-23 Advanced Micro Devices, Inc. Techniques for storing instructions and related information in a memory hierarchy
US8898437B2 (en) * 2007-11-02 2014-11-25 Qualcomm Incorporated Predecode repair cache for instructions that cross an instruction cache line
US7814300B2 (en) 2008-04-30 2010-10-12 Freescale Semiconductor, Inc. Configurable pipeline to process an operation at alternate pipeline stages depending on ECC/parity protection mode of memory access
US8291305B2 (en) * 2008-09-05 2012-10-16 Freescale Semiconductor, Inc. Error detection schemes for a cache in a data processing system
US8145985B2 (en) 2008-09-05 2012-03-27 Freescale Semiconductor, Inc. Error detection schemes for a unified cache in a data processing system
US8356239B2 (en) * 2008-09-05 2013-01-15 Freescale Semiconductor, Inc. Selective cache way mirroring
US8364896B2 (en) * 2008-09-20 2013-01-29 Freescale Semiconductor, Inc. Method and apparatus for configuring a unified cache based on an associated error rate
US8316186B2 (en) * 2008-09-20 2012-11-20 Freescale Semiconductor, Inc. Method and apparatus for managing cache reliability based on an associated error rate
US8266498B2 (en) * 2009-03-31 2012-09-11 Freescale Semiconductor, Inc. Implementation of multiple error detection schemes for a cache
US9608826B2 (en) 2009-06-29 2017-03-28 Jpmorgan Chase Bank, N.A. System and method for partner key management
US9218286B2 (en) * 2012-09-27 2015-12-22 Apple Inc. System cache with partial write valid states
US20140244932A1 (en) * 2013-02-27 2014-08-28 Advanced Micro Devices, Inc. Method and apparatus for caching and indexing victim pre-decode information
US9348598B2 (en) 2013-04-23 2016-05-24 Arm Limited Data processing apparatus and method for pre-decoding instructions to be executed by processing circuitry
US9710324B2 (en) 2015-02-03 2017-07-18 Qualcomm Incorporated Dual in-line memory modules (DIMMs) supporting storage of a data indicator(s) in an error correcting code (ECC) storage unit dedicated to storing an ECC
US10296416B2 (en) 2016-07-02 2019-05-21 Intel Corporation Read from memory instructions, processors, methods, and systems, that do not take exception on defective data
US10291258B2 (en) 2017-05-25 2019-05-14 Advanced Micro Devices, Inc. Error correcting code for correcting single symbol errors and detecting double bit errors
US20220100516A1 (en) * 2020-09-26 2022-03-31 Intel Corporation Circuitry and methods for power efficient generation of length markers for a variable length instruction set

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0651324A1 (en) * 1993-10-29 1995-05-03 Advanced Micro Devices, Inc. Speculative instruction queue for variable byte length instructions
EP0798632A2 (en) * 1996-03-25 1997-10-01 Sun Microsystems, Inc. Branch prediction method and apparatus in a multi-level cache system

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4747043A (en) * 1984-02-10 1988-05-24 Prime Computer, Inc. Multiprocessor cache coherence system
JPS62151971A (ja) * 1985-12-25 1987-07-06 Nec Corp マイクロ・プロセツサ装置
US5214769A (en) * 1987-12-24 1993-05-25 Fujitsu Limited Multiprocessor control system
US5265004A (en) * 1991-10-15 1993-11-23 Allen-Bradley Company, Inc. Sequence controller with combinatorial Boolean logic
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US5721854A (en) * 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions
US5752264A (en) * 1995-03-31 1998-05-12 International Business Machines Corporation Computer architecture incorporating processor clusters and hierarchical cache memories
US5828895A (en) * 1995-09-20 1998-10-27 International Business Machines Corporation Methods and system for predecoding instructions in a superscalar data processing system
US5819067A (en) * 1996-02-23 1998-10-06 Advanced Micro Devices, Inc. Computer system configured to translate a computer program into a second computer program prior to executing the computer program
US5748978A (en) * 1996-05-17 1998-05-05 Advanced Micro Devices, Inc. Byte queue divided into multiple subqueues for optimizing instruction selection logic

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0651324A1 (en) * 1993-10-29 1995-05-03 Advanced Micro Devices, Inc. Speculative instruction queue for variable byte length instructions
EP0798632A2 (en) * 1996-03-25 1997-10-01 Sun Microsystems, Inc. Branch prediction method and apparatus in a multi-level cache system

Also Published As

Publication number Publication date
JP2002519755A (ja) 2002-07-02
EP1090345B1 (en) 2002-07-31
EP1090345A1 (en) 2001-04-11
DE69902392T2 (de) 2003-03-20
WO1999067705A1 (en) 1999-12-29
US6092182A (en) 2000-07-18
JP3836322B2 (ja) 2006-10-25
DE69902392D1 (de) 2002-09-05
KR20010025123A (ko) 2001-03-26

Similar Documents

Publication Publication Date Title
KR100586057B1 (ko) 프리디코드 정보를 저장하기 위해 ecc/패리티 비트들의 이용
KR100884351B1 (ko) 타입 비트들을 이용한, 레벨 2 캐시에서의 ecc 및프리디코드 비트들의 저장 추적
US6041405A (en) Instruction length prediction using an instruction length pattern detector
US6279106B1 (en) Method for reducing branch target storage by calculating direct branch targets on the fly
US6427192B1 (en) Method and apparatus for caching victimized branch predictions
US6519682B2 (en) Pipelined non-blocking level two cache system with inherent transaction collision-avoidance
US6125441A (en) Predicting a sequence of variable instruction lengths from previously identified length pattern indexed by an instruction fetch address
US6349365B1 (en) User-prioritized cache replacement
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
US6571318B1 (en) Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism
US6510508B1 (en) Translation lookaside buffer flush filter
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US6088789A (en) Prefetch instruction specifying destination functional unit and read/write access mode
EP0795828A2 (en) Dynamic set prediction method and apparatus for a multi-level cache system
US6157986A (en) Fast linear tag validation unit for use in microprocessor
KR100698493B1 (ko) 좁은 피연산자들에서 계산을 수행하는 방법 및 장치
US6542986B1 (en) Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor
US6240506B1 (en) Expanding instructions with variable-length operands to a fixed length
US20030074530A1 (en) Load/store unit with fast memory data access mechanism
US7133975B1 (en) Cache memory system including a cache memory employing a tag including associated touch bits
US6460132B1 (en) Massively parallel instruction predecoding
US6212621B1 (en) Method and system using tagged instructions to allow out-of-program-order instruction decoding
US6446189B1 (en) Computer system including a novel address translation mechanism
US5951671A (en) Sharing instruction predecode information in a multiprocessor system
US6704854B1 (en) Determination of execution resource allocation based on concurrently executable misaligned memory 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: 20130429

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20140508

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160427

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20170504

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20180427

Year of fee payment: 13

EXPY Expiration of term