KR20060070576A - 저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘 - Google Patents

저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘 Download PDF

Info

Publication number
KR20060070576A
KR20060070576A KR1020067007925A KR20067007925A KR20060070576A KR 20060070576 A KR20060070576 A KR 20060070576A KR 1020067007925 A KR1020067007925 A KR 1020067007925A KR 20067007925 A KR20067007925 A KR 20067007925A KR 20060070576 A KR20060070576 A KR 20060070576A
Authority
KR
South Korea
Prior art keywords
instruction
dependency
instruction operation
dependencies
queue
Prior art date
Application number
KR1020067007925A
Other languages
English (en)
Other versions
KR100611341B1 (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
Priority claimed from US09/138,886 external-priority patent/US6212622B1/en
Priority claimed from US09/139,178 external-priority patent/US6212623B1/en
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20060070576A publication Critical patent/KR20060070576A/ko
Application granted granted Critical
Publication of KR100611341B1 publication Critical patent/KR100611341B1/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
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

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)
  • Complex Calculations (AREA)

Abstract

프로세서는 저장 어드레스 명령어 연산들에 대한 적재 명령어 연산들의 순서 의존성을 이용한다. 이 프로세서는 저장 명령어들을 저장 어드레스 명령어 연산들 및 저장 데이터 명령어 연산들로 분할한다. 상기 저장 어드레스 명령어 연산들은 저장의 어드레스를 생성하고, 상기 저장 데이터 명령어 연산들은 대응하는 데이터를 적재/저장 유닛에 전달한다. 상기 프로세서는 미실행 저장 어드레스들 각각을 지시하는 저장 어드레스 의존성 벡터를 유지하고, 저장 어드레스 명령어 연산들에 대한 각 적재 명령어 연산의 순서 의존성들을 기록한다. 이에 따라, 적재 명령어 연산은 각각의 이전 저장 어드레스 명령어 연산이 스케쥴링될 때까지 스케쥴링되지 않는다. 저장 어드레스들은 적재 명령어 연산의 실행시 적재 어드레스에 대한 의존성 검사에 이용될 수 있다. 메모리 의존성이 존재하면, 이는 적재 명령어 연산의 실행시 검출될 수 있다.

Description

저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘{MECHANISM FOR LOAD BLOCK ON STORE ADDRESS GENERATION}
도 1은 프로세서의 일 실시예의 블록도이다.
도 2는 도 1의 명령어 큐의 일 실시예의 블록도이다.
도 3은 의존성 벡터의 일 실시예의 블록도이다.
도 4는 한 쌍의 의존성 벡터 큐들의 일 실시예의 블록도이다.
도 5는 의존성 벡터 큐의 일 실시예의 일부분의 회로도이다.
도 6은 의존성 벡터 큐의 일 실시예의 다른 부분의 회로도이다.
도 7은 도 1에 도시된 맵 유닛의 일 실시예의 블록도 및 저장/적재 전송 검출 유닛의 일 실시예이다.
도 8은 도 7의 의존성 벡터 생성 유닛의 일 실시예의 동작을 나타내는 순서도이다.
도 9는 도 8에 도시된 단계의 일 실시예를 나타내는 순서도이다.
도 10은 도 1의 한 쌍의 명령어 큐들의 일 실시예의 동작을 나타내는 타이밍도이다.
도 11은 도 1의 프로세서를 포함하는 컴퓨터 시스템의 일 실시예의 블록도이다.
본 발명은 프로세서들의 분야에 관한 것으로서, 특히 프로세서들 내에서의 명령어 스케쥴링 메커니즘(instruction scheduling mechanisms)에 관한 것이다.
슈퍼스칼라 프로세서들은 클록 사이클당 다수의 명령어들을 발행(issue)하여 실행하고 설계에 모순되지 않는 가능한 가장 높은 클록 주파수를 이용함으로써 고성능을 달성하고자 한다. 클록 사이클당 실행되는 명령어들의 수를 증가시키는 한 방법은 순서를 벗어난 실행(out of order execution)이다. 순서를 벗어난 실행에서, 명령어들은 프로그램 시퀀스(또는 "프로그램 순서")에 특정된 순서와 다른 순서로 실행될 수 있다. 프로그램 시퀀스에서 서로 가까이 있는 소정의 명령어들은 그들의 동시 실행을 금지하는 의존성(dependency)을 갖는 반면, 프로그램 시퀀스의 이후의 명령어들은 이전 명령어들에 대한 의존성을 갖지 않을 수 있다. 따라서, 순서를 벗어난 실행은 동시에 실행되는 명령어들의 수를 (평균적으로) 증가시킴으로써 슈퍼스칼라 프로세서의 성능을 향상시킬 수 있다.
불행히도, 순서를 벗어난 실행을 위한 스케쥴링 명령어들(scheduling instructions)은 프로세서에 하드웨어의 복잡성을 부가하게 된다. "스케쥴링"이란 용어는 일반적으로 명령어들을 실행하는 순서를 선택하는 것을 말한다. 전형적으로, 상기 프로세서는 (예를 들어, 다양한 명령어 타입들에 대한 하드웨어 유용성 및 의존성을 다루기 위해 명령어들을 순서를 벗어나 실행시킴으로써) 평균 명령어 실행 속도를 최대화하기 위해 가능한한 빠르게 명령어들을 스케쥴링하고자 한다. 이러한 복잡성은 프로세서가 동작할 수 있는 클록 주파수를 제한할 수 있다. 특히, 명령어들 간의 의존성은 스케쥴링 하드웨어에 의해 고려되어야 한다. 일반적으로, 본원에서 이용되는 "의존성"이라는 용어는 제 1 명령어 및 프로그램 순서에서 이에 후속하는 제 2 명령어 간의 관계를 말하는바, 상기 제 2 명령어는 이 제 2 명령어의 실행 이전에 제 1 명령어의 실행을 요구한다. 다양한 의존성들이 정의될 수 있다. 예를 들어, 오퍼랜드 의존성은, 제 2 명령어의 소스 오퍼랜드가 제 1 명령어의 목적지 오퍼랜드인 경우 발생한다.
일반적으로, 명령어들은 1개 이상의 소스 오퍼랜드들 및 1개 이상의 목적지 오퍼랜드들을 가질 수 있다. 소스 오퍼랜드들은 (목적지 오퍼랜드들인) 1개 이상의 결과들을 생성하기 위해 명령어 정의에 따라 조작되는 입력값들이다. 소스 및 목적지 오퍼랜드들은 프로세서의 외부의 메모리 위치에 저장되는 메모리 오퍼랜드들이거나, 프로세서 내에 포함되는 레지스터 저장 위치들에 저장되는 레지스터 오퍼랜드들일 수 있다. 프로세서에 의해 이용되는 명령어 세트 아키텍쳐는 다수의 아키텍쳐된 레지스터들을 정의한다. 이러한 레지스터들은 명령어 세트 아키텍쳐에 의해 존재하는 것으로 정의되고, 명령어들은 아키텍쳐된 레지스터들을 소스 오퍼랜드 및 목적지 오퍼랜드로서 이용하기 위해 코드화될 수 있다. 명령어는 상기 명령어의 오퍼랜드 필드 내의 레지스터 번호(또는 레지스터 어드레스)를 통해 특정 레지스터를 소스 오퍼랜드 또는 목적지 오퍼랜드로서 특정한다. 레지스터 번호는 아키텍쳐된 레지스터들 중에서 선택된 레지스터를 유일하게 식별한다. 소스 오퍼랜드는 소스 레지스터 번호에 의해 식별되고, 목적지 오퍼랜드는 목적지 레지스터 번호에 의해 식별된다.
오퍼랜드 의존성에 부가하여, 1개 이상의 타입의 순서 의존성(ordering dependency)들이 프로세서에 의해 실시될 수 있다. 순서 의존성들은, 예를 들어 이용되는 하드웨어를 단순화하거나 정확한 프로그램 실행이 이루어지도록 하는 데에 이용될 수 있다. 소정 명령어들을 다른 명령어들에 대해 순서대로 실행되도록 함으로써, 명령어들의 순서를 벗어난 실행의 결과들을 다루는 하드웨어는 생략될 수 있다. 예를 들어, 적재 메모리 연산들이 저장 메모리 연산들에 관해 순서를 벗어나 실행될 수 있다면, 하드웨어는 (순서를 벗어나 수행되는) 후속하는 적재 메모리 연산에 의해 액세스되는 동일한 메모리 위치를 갱신하는 이전 저장 메모리 연산을 검출해야 한다. 일반적으로, 순서 의존성들은 마이크로아키텍쳐(microarchitecure) 마다 변할 수 있다.
스케쥴링은, 보다 많은 수의 명령어들이 "비행중(in flight)"(즉, 상기 프로세서 내에서 처리중)이 될 수 있기 때문에, 고주파수에서 실행하는 것이 점차 어려워지고 있다. 명령어들 간의 의존성들은 이미 완료된 보다 많은 수의 명령어들로 인해 더욱 빈번하게 될 수 있다. 또한, 의존성들이 충족되는 때(즉, 의존성이 제 2 명령어의 스케쥴링을 금지할 필요가 없는 시점(point)으로 제 1 명령어의 진행이 나아가는 때)를 검출하는 것이 어려워지는 것과 마찬가지로, 보다 많은 수의 명령어들 간의 의존성들을 검출하는 것 또한 더욱 어려워질 수 있다. 따라서, 고주파 동작에 대해 수정가능한 스케쥴링 메커니즘이 바람직하다.
또한, 마이크로아키텍쳐에 의해 부과될 수 있는 많은 다양한 순서 의존성들을 다룰 수 있는 스케쥴링 메커니즘이 바람직하다. 상기 오퍼랜드 의존성에 부가하여 상기 순서 의존성들은 상대적으로 많은 수의 이전 명령어들에 의존하는 특정 명령어를 야기시킬 수 있다. 따라서, 다양한 의존성들을 허용하는 유연한 스케쥴링 메커니즘이 바람직하다.
상기 문제점들은 저장 어드레스 명령어 연산들에 대한 적재 명령어 연산들의 순서 의존성들을 실시하는 프로세서에 의해 해결된다.
이 프로세서는 저장 연산들을 저장 어드레스 명령어 연산들 및 저장 데이터 명령어 연산들로 나눈다. 저장 어드레스 명령어 연산들은 저장 어드레스를 생성하고, 저장 데이터 명령어 연산들은 대응하는 데이터를 적재/저장 유닛에 보낸다. 상기 프로세서는 미실행(outstanding) 저장 어드레스들 각각을 지시하는 저장 어드레스 의존성 벡터를 유지하고, 저장 어드레스 명령어 연산들에 대한 각 적재 명령어 연산의 순서 의존성들을 기록한다. 따라서, 적재 명령어 연산은 각각의 이전 저장 어드레스 명령어 연산이 스케쥴링될 때까지 스케쥴링되지 않는다. 유익하게는, 저장 어드레스들은 적재 명령어 연산의 실행시 적재 어드레스에 대한 의존성 검사에 이용될 수 있다. 메모리 의존성이 존재하면, 이는 적재 명령어 연산의 실행시에 검출될 수 있다.
대체로 말하여, 본 발명은 저장 어드레스 레지스터 및 이에 결합된 의존성 벡터 생성 유닛을 포함하는 프로세서를 고려한다. 상기 저장 어드레스 레지스터는 프로세서 내의 미실행의 저장 어드레스 명령어 연산들을 식별하는 저장 어드레스 의존성 벡터를 저장하도록 구성된다. 상기 의존성 벡터 생성 유닛은 명령어 연산에 대한 의존성 벡터를 생성하도록 구성된다. 적재 명령어 연산들에 대해, 상기 의존성 벡터 생성 유닛은 의존성 벡터 내에 상기 저장 어드레스 의존성 벡터를 포함하도록 구성된다.
본 발명은 또한 프로세서 내에서 적재 명령어 연산을 수행하는 방법을 고려한다. 프로세서 내의 미실행의 각 저장 어드레스 명령어 연산을 지시하는 저장 어드레스 의존성 벡터가 유지된다. 적재 명령어 연산에 대한 의존성 벡터는 저장 어드레스 의존성 벡터를 포함하여 생성된다. 적재 명령어 연산은 의존성 벡터에 표시된 각 명령어 연산이 완료될 때까지 스케쥴링이 금지된다.
본 발명은 다양한 변형들 및 대안적인 형태들을 갖지만, 본원에서는 특정 실시예들에 대해 예시적으로 설명할 것이다. 그러나, 이해될 사항으로서, 도면들 및 상세한 설명은 본 발명을 개시된 특정 형태로 한정하지 않으며, 본 발명은 첨부된 청구항들에 의해 정의되는 본 발명의 정신 및 범위 내에 포함되는 모든 변형들, 등가들 및 대안들을 포함한다.
본 발명의 다른 목적들 및 장점들은 하기의 도면들 및 상세한 설명으로부터 명확해질 것이다.
도 1은 프로세서(10)의 일 실시예의 블록도이다. 다른 실시예들이 가능하고 고려된다. 도 1의 실시예에서, 프로세서(10)는 라인 예측기(12), 명령어 캐시(I-캐 시)(14), 정렬 유닛(16), 분기 히스토리 테이블(branch history table)(18), 간접 어드레스 캐시(20), 리턴 스택(22), 디코드 유닛(24), 예측기 미스 디코드 유닛(predictor miss decode unit)(26), 마이크로코드 유닛(28), 맵 유닛(map unit)(30), 맵 사일로(map silo)(32), 아키텍쳐 재명명 블록(architectural renames block)(34), 한 쌍의 명령어 큐들(36A-36B), 한 쌍의 레지스터 파일들(38A-38B), 한 쌍의 실행 코어들(40A-40B), 적재/저장 유닛(42), 데이터 캐시(D-캐시)(44), 외부 인터페이스 유닛(46), PC 사일로 및 리다이렉트 유닛(48), 및 명령어 TLB (ITB)(50)을 포함한다. 라인 예측기(12)는 ITB(50), 예측기 미스 디코드 유닛(26), 분기 히스토리 테이블(18), 간접 어드레스 캐시(20), 리턴 스택(22), PC 사일로 및 리다이렉트 유닛(48), 정렬 유닛(16) 및 I-캐시(14)에 연결된다. I-캐시(14)는 정렬 유닛(16)에 연결된다. 정렬 유닛(16)은 또한 예측기 미스 디코드 유닛(26) 및 디코드 유닛(24)에 연결된다. 디코드 유닛(24)은 또한 마이크로코드 유닛(28) 및 맵 유닛(30)에 연결된다. 맵 유닛(30)은 맵 사일로(32), 아키텍쳐 재명명 블록(34), 명령어 큐들(36A-36B), 적재/저장 유닛(42), 실행 코어들(40A-40B), 및 PC 사일로 및 리다이렉트 유닛(48)에 연결된다. 명령어 큐들(36A-36B)은 서로 연결되고, 각각의 실행 코어들(40A-40B) 및 레지스터 파일들(38A-38B)에 연결된다. 레지스터 파일들(38A-38B)은 서로 연결되고, 각각의 실행 코어들(40A-40B)에 연결된다. 실행 코어들(40A-40B)은 또한 적재/저장 유닛(42), 데이터 캐시(44), 및 PC 사일로 및 리다이렉트 유닛(48)에 연결된다. 적재/저장 유닛(42)은 PC 사일로 및 리다이렉트 유닛(48), D-캐시(44) 및 외부 인터페이스 유닛(46)에 연결된다. D-캐 시(44)는 레지스터 파일들(38)에 연결되고, 외부 인터페이스 유닛(46)은 외부 인터페이스(52)에 연결된다. 문자가 뒤에 붙은 참조 부호로 나타낸 요소들은 집합적으로 그 참조 부호 만으로 나타낼 것이다. 예를 들어, 명령어 큐들(36A-36B)은 집합적으로 명령어 큐들(36)로 지시된다.
도 1의 실시예에서, 프로세서(10)는 가변 바이트 길이, 복합 명령어 세트 컴퓨팅(CISC) 명령어 세트 아키텍쳐를 이용한다. 예를 들어, 프로세서(10)는 x86 명령어 세트 아키텍쳐(IA-32라고도 칭해진다)를 이용할 수 있다. 다른 실시예들은 고정된 길이 명령어 세트 아키텍쳐 및 감소된 명령어 세트 컴퓨팅(RISC) 명령어 세트 아키텍쳐를 포함하는 다른 명령어 세트 아키텍쳐들을 이용할 수 있다. 도 1에 도시된 특정한 특징들(features)은 이러한 아키텍쳐들에서 생략될 수 있다.
라인 예측기(12)는 I-캐시(14)에 대한 페치 어드레스들을 생성하도록 구성되고, 또한 명령어 연산들의 라인에 대한 정보를 정렬 유닛(16)에 제공하도록 구성된다. 일반적으로, 라인 예측기(12)는 프로세서(10)에 의해 이전에 추론적으로 페치된 명령어 연산들의 라인들 및 상기 라인의 페치시 선택되는 각 라인에 대응하는 1개 이상의 다음 페치 어드레스들을 저장한다. 일 실시예에서, 라인 예측기(12)는 1K의 엔트리들을 저장하도록 구성되는바, 상기 각 엔트리는 명령어 연산들의 한 라인을 정의한다. 라인 예측기(12)는 바람직한 경우 서브 유닛들(예를 들어 256개의 4개 뱅크들)로 뱅크될 수 있는바, 이들은 각각 듀얼 포팅(dual porting)없이 동시 판독 및 갱신을 허용한다.
라인 예측기(12)는 상기 다음 페치 어드레스를 I-캐시(14)에 제공하여 대응 하는 명령어 바이트들을 페치한다. I-캐시(14)는 명령어 바이트들을 저장하기 위한 고속의 캐시 메모리이다. 일 실시예에 따르면, I- 캐시(14)는, 예를 들어 64 바이트의 캐시 라인들을 이용하는 256 Kbyte의 4 방향 세트 어소시에이티브 구성(four way set associative organization)을 포함할 수 있다. 그러나, 어떠한 I-캐시 구조라도 적합하다. 또한, 명령어 연산들의 대응하는 라인들에 대한 정보를 페치하기 위해, 다음 페치 어드레스가 라인 예측기(12)에 입력으로서 되돌려진다. 다음 페치 어드레스는 PC 사일로 및 리다이렉트 유닛(48)에 보고된 예외 조건들에 응답하여 ITB(50)에 의해 제공되는 어드레스에 의해 무효화(override)될 수 있다.
라인 예측기에 의해 제공되는 다음 페치 어드레스는 (라인이 비 분기 명령어에서 종료하는 경우) 그 라인의 내의 마지막 명령어에 순차적인 어드레스가 될 수 있다. 또한, 다음 페치 어드레스는 그 라인을 종료하는 분기 명령의 타겟 어드레스가 될 수 있다. 또 다른 대안에서, 상기 라인은 리턴 명령어에 의해 종료될 수 있는바, 이 경우 다음 페치 어드레스는 리턴 스택(22)으로부터 얻어진다.
페치 어드레스에 응답하여, 라인 예측기(12)는 페치 어드레스에서 시작하는 명령어 연산들의 라인에 관한 정보를 정렬 유닛(16)에게 제공한다. 정렬 유닛(16)은 I-캐시(14)로부터 그 페치 어드레스에 대응하는 명령어 바이트들을 수신한 다음, 제공되는 명령어 연산 정보에 따라 한 세트의 발행 위치들(issue positions)로의 명령어 바이트들을 선택한다. 보다 구체적으로, 라인 예측기(12)는 라인 명령어 연산들 내의 각 명령어에 대한 시프트량 및 명령어들의 맵핑을, 그 라인을 포함하는 명령어 연산들의 세트에 제공한다. 명령어는 다수의 명령어 연산들 에 대응하기 때문에, 그 명령어에 대응하는 시프트량은 다수의 발행 위치들로의 명령어 바이트들을 선택하는 데에 이용될 수 있다. 발행 위치는 라인 내의 각각의 가능한 명령어 연산에 대해 제공된다. 일 실시예에서, 명령어 연산들의 라인은 최대 6개의 명령어들에 대응하는 최대 8개의 명령어 연산들을 포함할 수 있다. 일반적으로, 본원에서 이용되는 명령어 연산들의 라인은 디코드 유닛(24)에 동시에 발행되는 명령어 연산들의 그룹을 말한다. 명령어 연산들의 라인은 유닛으로서 마이크로프로세서(10)의 파이프라인을 통해 명령어 큐들(36)로 진행한다. 명령어 큐들(36)에 저장될 때, 개별적인 명령어 연산들은 어느 순서로든 실행될 수 있다.
디코드 유닛(24) (및 명령어 큐들(36)까지의 순차 파이프라인 스테이지들) 내의 발행 위치들은 파이프라인 스테이지들 내의 하드웨어에 대한 라인 내의 명령어 연산들의 프로그램 순서를 정의한다. 정렬 유닛(16)에 의해 발행 위치로 정렬된 명령어 연산은 명령어 큐들(36A-36B) 내에 저장될 때까지 그 발행 위치 내에 머문다. 따라서, 제 1 발행 위치는, 제 1 발행 위치 내의 명령어 연산이 프로그램 순서에서 제 2 발행 위치 내에 동시에 있는 명령어 연산 보다 이전이라면, 제 2 발행 위치 보다 이전인 것으로서 설명된다. 유사하게, 제 1 발행 위치는, 제 1 발행 위치 내의 명령어 연산이 프로그램 순서에서 제 2 발행 위치 내에 동시에 있는 명령어 연산에 후속하면, 제 2 발행 위치에 후속하는 것으로서 설명된다. 발행 위치들 내의 명령어 연산들은 또한 그 라인 내의 다른 명령어 연산들 보다 이전이거나 또는 후속하는 것으로서 설명될 수 있다.
본원에서 이용되는 명령어 연산(또는 ROP)은 실행 코어들(40A-40B) 내의 실 행 유닛이 단일 엔티티로서 실행하도록 구성되는 연산이다. 단순한 명령어들은 단일 명령어 연산에 대응하고, 보다 복잡한 명령어들은 다수의 다수의 명령어 연산들에 대응한다. 보다 복잡한 명령어들중 어떠한 것들은 마이크로코드 루틴들로서 마이크로코드 유닛(28) 내에서 구현될 수 있다. 또한, 비-CISC 명령어 세트를 이용하는 실시예들은 각 명령어에 대해 단일 명령어 연산을 이용할 수 있다(즉, 이러한 실시예들에서는, 명령어와 명령어 연산이 동의어가 될 수 있다). 일 특정 실시예에서, 라인은 최대 6개의 명령어들에 대응하는 최대 8개의 명령어 연산들을 포함할 수 있다. 또한, 상기 특정 실시예는 분기 명령어가 검출되는 경우, 6개의 명령어들 그리고/또는 8개의 명령어 연산들보다 적은 곳에서 라인을 종료시킬 수 있다. 필요한 경우, 라인에 대한 명령어 연산들에 관한 부가적인 제한들이 이용될 수 있다.
라인 예측기(12)에 의해 생성되는 다음 페치 어드레스는 분기 히스토리 테이블(18), 간접 어드레스 캐시(20) 및 리턴 스택(22)으로 보내진다. 분기 히스토리 테이블(18)은 다음 페치 어드레스에 의해 식별되는 라인을 종료시킬 수 있는 조건 분기 명령어에 대한 분기 히스토리를 제공한다. 라인 예측기(12)는 분기 히스토리 테이블(18)에 의해 제공되는 예측을 이용하여, 라인을 종료시키는 조건 분기 명령어가 테이큰(taken)으로 예측되는지 아니면 낫테이큰(not taken)으로 예측되는 지를 결정한다. 일 실시예에서, 라인 예측기(12)는 테이큰 또는 낫테이큰을 선택하는 데에 이용되는 분기 예측을 저장하고, 분기 히스토리 테이블(18)은 라인 예측기 예측을 취소하고 다른 다음 페치 어드레스가 선택되게 하는 보다 정확한 예측을 제공하는 데에 이용된다. 간접 어드레스 캐시(20)는 빈번하게 변경되는 간접 분기 타켓 어드레스들을 예측하는 데에 이용된다. 라인 예측기(12)는 다음 페치 어드레스로서, 이전에 생성된 간접 타켓 어드레스를 저장할 수 있다. 간접 어드레스 캐시(20)는, 대응하는 라인이 간접 분기 명령어에 의해 종료되는 경우, 라인 예측기(12)에 의해 제공되는 다음 페치 어드레스를 무효화할 수 있다. 또한, 명령어 연산들의 라인 내의 마지막 명령어에 후속하는 어드레스는, 그 라인이 서브루틴 호출 명령어에 의해 종료되는 경우, 리턴 스택(22) 상에 푸쉬될 수 있다. 리턴 스택(22)은 리턴 명령어에 의해 종료된 라인들에 대한 잠재적인 다음 페치 어드레스로서, 그 최상부에 저장된 어드레스를 라인 예측기(12)에 제공한다.
다음 페치 어드레스 및 명령어 연산 정보를 상기 설명한 블록들에 제공하는 것에 부가하여, 라인 예측기(12)는 다음 페치 어드레스 및 명령어 연산 정보를 PC 사일로 및 리다이렉트 유닛(48)에 제공하도록 구성된다. PC 사일로 및 리다이렉트 유닛(48)은 페치 어드레스 및 라인 정보를 저장하고, 명령어들의 순서에 따른 폐기 뿐 아니라 예외들을 페치하는 명령어의 리다이렉트를 담당한다. PC 사일로 및 리다이렉트 유닛(48)은 프로세서(10) 내에서 미실행인 명령어 연산들의 다수의 라인에 대응하는 명령어 연산 정보 및 페치 어드레스를 저장하는 원형 버퍼를 포함할 수 있다. 명령어들의 라인의 폐기시, PC 사일로 및 리다이렉트 유닛(48)은 조건 분기 및 간접 분기의 각각의 실행에 따라 분기 히스토리 테이블(18) 및 리다이렉트 어드레스 캐시(20)를 갱신한다. 예외를 처리할 때, PC 사일로 및 리다이렉트 유닛(48)은 예외 야기 명령어에 후속하는 리턴 스택(22)으로부터 엔트리들을 제거할 수 있다. 또한, PC 사일로 및 리다이렉트 유닛(48)은 상기 예외 야기 명령어의 표시를 맵 유닛(30), 명령어 큐들(36) 및 적재/저장 유닛(42)에 전송하며, 이에 따라 상기 유닛들은 상기 예외 야기 명령어에 후속하는 명령어들을 취소하고, 그에 따라 추론적인 상태를 복구할 수 있다.
일 실시예에서, PC 사일로 및 리다이렉트 유닛(48)은 시퀀스 번호(R#)를 각 명령어 연산에게 할당함으로써, 프로세서(10) 내의 미실행 명령어 연산들의 순서를 식별한다. PC 사일로 및 리다이렉트 유닛(48)은 라인을 이용하여 1R#들을 각각의 가능한 명령어 연산에 할당할 수 있다. 라인이 명령어 연산들의 최대 수 보다 적은 명령어 연산을 포함한다면, 할당된 R#들의 일부는 그 라인에 대해 이용되지 않을 것이다. 그러나, PC 사일로 및 리다이렉트 유닛(48)은 다음 세트의 R#들을 명령어 연산들의 다음 라인에 할당함으로써, 할당되었지만 이용되지 않은 R#들이 명령어 연산들의 대응하는 라인들이 폐기될 때까지 이용되지 않은 채로 유지되도록 구성될 수 있다. 이러한 방식으로, 소정 라인에 할당된 R#들의 일부는 프로세서(10) 내의 라인을 식별하는 데에 이용된다. 일 실시예에서는, 최대 8개의 ROP들이 한 라인에 할당될 수 있다. 따라서, 각 라인 내의 제 1 ROP는 8의 배수인 R#가 할당될 수 있다. 이에 따라, 이용되지 않은 R#들은 자동으로 스킵된다.
상기에서는, 다음 어드레스들을 예측하고 명령어 연산들의 라인들에 대한 명령어 연산 정보를 제공하는 라인 예측기(12)를 설명하였다. 이러한 연산은 각 페치 어드레스가 라인 예측기(12)에서 히트(hit)하는한 발생한다. 라인 예측기(12)에서 미스를 검출하면, 정렬 유닛(16)은 I-캐시(14)로부터의 대응하는 명령어 바이트들을 예측기 미스 디코드 유닛(26)으로 보낸다. 예측기 미스 디코드 유닛(26)은 미스 한 페치 어드레스에 의해 특정되는 오프셋에서 시작하는 명령어들을 디코드하고, 명령어 연산 정보의 라인 및 다음 페치 어드레스를 생성한다. 예측기 미스 디코드 유닛(26)은 (예를 들어, 명령어 연산들의 최대 수, 명령어들의 최대 수, 분기 명령어들에서의 종료 등)에 대해 프로세서(10)가 설계된 명령어 연산들의 라인에 대한 어떠한 제한들을 실시한다. 라인 디코드의 완료시, 예측기 미스 디코드 유닛(26)은 저장을 위해 라인 예측기(12)에 정보를 제공한다. 주목할 사항으로서, 예측기 미스 디코드 유닛(26)은 명령어들이 디코드될 때 이들을 디스패치하도록 구성될 수 있다. 또한, 예측기 미스 디코드 유닛(26)은 명령어 정보의 라인을 디코드한 다음, 저장을 위해 이를 라인 예측기(12)에 제공할 수 있다. 이후, 미스하는 페치 어드레스는 라인 예측기(12)에서 재시도될 수 있고, 히트가 검출될 수 있다. 또한, 라인 예측기(12) 내에서의 히트가 검출될 수 있고, I-캐시(14) 내에서 미스가 발생할 수 있다. 대응하는 명령어 바이트들은 외부 인터페이스 유닛(46)을 통해 페치되어 I-캐시(14)에 저장될 수 있다.
일 실시예에서, 라인 예측기(12) 및 I-캐시(14)는 물리적인 어드레싱을 이용한다. 그러나, 예외를 검출하게 되면, PC 사일로 및 리다이렉트 유닛(48)은 논리(또는 가상) 어드레스를 제공받을 것이다. 따라서, 리다이렉트 어드레스들이 ITB(50)에 의해 변환되어 라인 예측기(12)에 전송된다. 또한, PC 사일로 및 리다이렉트 유닛(48)은 상대적 분기 타켓 어드레스들과 같은 PC 상대적 계산들에서 이용하기 위한 가상의 룩어헤드 PC 값을 보유한다. 각 라인에 대응하는 가상 룩어헤드 PC는 ITB(50)에 의해 변환되어, 대응하는 물리 어드레스가 라인 예측기(12)에 의해 생성된 물리 페치 어드레스와 일치하는 지를 검증한다. 일치하지 않으면, 라인 예측기(12)는 정확한 물리적 어드레스에 의해 갱신되고, 정확한 명령어들이 페치된다. PC 사일로 및 리다이렉트 유닛(48)은 또한 보호 경계를 넘어 페치하는 것에 관련된 예외들을 다룬다. PC 사일로 및 리다이렉트 유닛(48)은 또한 가장 최근에 폐기된 명령어들의 어드레스를 지시하는 폐기 PC 값을 보유한다.
상기 설명한 바와 같이, 디코드 유닛(24)은 다수의 발행 위치들에서 정렬 유닛(16)으로부터 명령어 연산들을 수신하도록 구성된다. 디코드 유닛(24)은 (명령어 바이트들에 대응하는 명령어 연산이 특정 발행 위치에서 생성될 것인 지의 표시와 함께) 각 발행 위치에 정렬된 명령어 바이트들을 동시에 디코드한다. 디코드 유닛(24)은 각 명령어 연산에 대해 소스 및 목적지 오퍼랜드들을 식별하고, 실행 코어들(40A-40B)에 의해 이용되는 명령어 연산 엔코딩을 생성한다. 디코드 유닛(24)은 또한 마이크로코드로 구현되는 명령어들에 대해 마이크로코드 유닛(28)으로부터 마이크로코드 루틴들을 페치하도록 구성된다.
일 특정 실시예에 따르면, 다음과 같은 명령어 연산들, 즉 정수, (멀티미디어를 포함하는) 부동 소수점 덧셈, (멀티미디어를 포함하는) 부동 소수점 곱셈, 분기, 적재, 저장 어드레스 생성 및 저장 데이터가 프로세서(10)에 의해 지원된다. 각 명령어 연산은 최대 2개의 소스 레지스터 오퍼랜드들 및 1개의 목적지 레지스터 오퍼랜드를 이용할 수 있다. 일 특정 실시예에 따르면, 단일 목적지 레지스터 오퍼랜드는 정수 결과 및 조건 코드(또는 플래그들) 갱신을 저장하기 위해 정수 ROP들에 할당될 수 있다. 대응하는 논리 레지스터들은 정수 연산의 폐기시 대응하는 PR# 를 모두 수신할 것이다. 어떠한 명령어들은 2개의 목적지 레지스터들을 갱신하기 위해 동일한 타입의 2개의 명령어 연산들을 생성할 수 있다(예를 들어, ESP 및 특정된 목적지 레지스터를 갱신하는 POP).
디코드된 명령어 연산들과 소스 및 목적지 레지스터 번호가 맵 유닛(30)에 제공된다. 맵 유닛(30)은 물리적 레지스터 번호(PR#)들을 각 명령어 연산의 각 목적지 레지스터 오퍼랜드 및 소스 레지스터 오퍼랜드에 할당함으로써 레지스터 재명명을 수행하도록 구성된다. 물리적 레지스터 번호들은 레지스터 파일들(38A-38B) 내의 레지스터들을 식별한다. 또한, 맵 유닛(30)은 큐 번호(IQ#)를 각 명령어 연산에 할당함으로써, 명령어 연산을 저장하도록 할당된 명령어 큐들(36A-36B) 내의 위치를 식별한다. 맵 유닛(30)은 또한 명령어 연산의 소스 오퍼랜드에 할당된 각각의 물리적 레지스터 번호를 갱신하는 명령어들의 큐 번호들을 제공함으로써, 각 명령어 연산에 대한 의존성들의 표시를 제공한다. 맵 유닛(30)은 물리 레지스터 번호들, 및 (대응하는 논리 레지스터 번호들 뿐 아니라) 각 명령어 연산에 할당된 번호들에 대한 명령어에 의해 맵 사일로(32)를 갱신한다. 또한, 맵 사일로(32)는 명령어들의 라인 이전의 논리 레지스터들에 대응하는 룩어헤드 상태 및 PC 사일로에 대해 명령어들의 라인을 식별하는 R#를 저장하도록 구성될 수 있다. 상기 설명한 PC 사일로와 유사하게, 맵 사일로(32)는 엔트리들의 원형 버퍼를 포함할 수 있다. 각 엔트리는 명령어 연산들의 한 라인에 대응하는 정보를 저장하도록 구성될 수 있다.
맵 유닛(30) 및 맵 사일로(32)는 또한 PC 사일로(48)로부터 퇴거 표시를 수신하도록 구성된다. 명령어 연산들의 라인의 퇴거시, 맵 사일로(32)는 라인에 할당 된 목적지 물리 레지스터 번호들 및 대응하는 물리 레지스터 번호들을 저장을 위해 아키텍쳐 재명명 블록(34)에 전달한다. 이 아키텍쳐 재명명 블록(34)은 각 논리 레지스터에 대응하는 물리 레지스터 번호를 저장함으로써, 각 논리 레지스터에 대한 커미트(commit)된 레지스터 상태를 지시한다. 대응하는 논리 레지스터의 갱신시 새로운 물리 레지스터 번호에 의해 아키텍쳐 재명명 블록(34)으로부터 배제(displace)되는 물리 레지스터 번호들은 이후의 명령들로의 할당을 위해 물리 레지스터 번호들의 자유 리스트에 리턴된다. 일 실시예에서, 물리 레지스터 번호를 프리 리스트(free list)에 리턴시키기 전에, 물리 레지스터 번호들은 아키텍쳐 재명명 블록(34) 내의 나머지 물리 레지스터 번호들과 비교된다. 물리 레지스터 번호는 배제된 후에도 아키텍쳐 재명명 블록(34) 내에 여전히 나타나며, 물리 레지스터 번호는 프리 리스트에 부가되지 않는다. 이러한 실시예는 동일한 물리 레지스터 번호가 1개 이상의 명령어 결과를 저장하는 데에 이용되는 경우들에 이용될 수 있다. 예를 들어, x86 명령어 세트 아키텍쳐를 이용하는 실시예는 부동 소수점 오퍼랜드들을 저장하기에 충분히 큰 물리 레지스터를 제공할 수 있다. 이러한 방식으로, 어떠한 물리 레지스터라도 어떠한 타입의 오퍼랜드를 저장하는 데에 이용될 수 있다. 그러나, 정수 오퍼랜드들 및 조건 코드 오퍼랜드들은 소정의 물리 레지스터 내의 공간을 충분히 이용하지 않는다. 이러한 실시예에서, 프로세서(10)는 명령의 정수 결과 및 조건 코드 결과 둘다를 저장하기 위해 단일 물리 레지스터를 할당할 수 있다. 이후의 물리 레지스터에 대응하는 조건 코드 결과를 오버라이트하는 명령어의 퇴거는 동일한 정수 레지스터를 갱신하지 않을 수 있으며, 이에 따라 물리 레지스 터는 새로운 조건 코드 결과를 커미트할 때 비워지지 않을 수 있다. 유사하게, 이후의 물리 레지스터에 대응하는 정수 레지스터를 갱신하는 명령의 퇴거는 조건 코드 레지스터를 갱신하지 않을 수 있으며, 이에 따라 물리 레지스터는 새로운 정수 결과를 커미트할 때 비워지지 않을 수 있다.
또한, 맵 유닛(30) 및 맵 사일로(32)는 PC 사일로(48)로부터 예외 표시들을 수신하도록 구성된다. 예외 야기 명령어 연산을 포함하는 라인에 후속하는 명령어연산들의 라인들은 맵 사일로(32) 내에 무효로 마크된다. 명령어 연산들의 후속 라인들에 대응하는 물리 레지스터 번호들은 퇴거를 위해 대응하는 라인들의 선택시 프리해지며, (아키텍쳐 재명명 블록(34)은 무효화된 목적지 레지스터들에 의해 갱신되지 않는다). 또한, 맵 유닛(30)에 의해 유지되는 룩어헤드 레지스터 상태는 예외 야기 명령어에 대응하는 룩어헤드 레지스터 상태로 복구된다.
명령어 연산들의 라인, 소스 물리 레지스터 번호들, 소스 큐 번호들 및 목적지 물리 레지스터 번호들은 맵 유닛(30)에 의해 할당된 큐 번호들에 따라 명령어 큐들(36A-36B)에 저장된다. 일 실시예에 따르면, 명령어 큐들(36A-36B)은 대칭적이고, 모든 명령어들을 저장할 수 있다. 또한, 특정 명령어 연산에 대한 의존성들은 어느 명령어 큐에 저장되어 있는 다른 명령어 연산들에 대한 의존성이 발생할 수 있다. 맵 유닛(30)은, 예를 들어 명령어 연산들의 라인을 명령어 큐들(36A-36B) 중의 어느 하나에 저장하고, 명령어 연산들의 다음 라인을 명령어 큐들(36A-36B) 내의 다른 하나에 저장한다. 명령어 연산은 적어도 명령어가 스케쥴링될 때까지 적어도 명령어 큐들(36A-36B)에 유지된다. 일 실시예에서, 명령어 연산들은 폐기될 때 까지 명령어 큐들(36A-36B)에 유지된다.
명령어 큐들(36A-36B)은, 실행을 위해 특정 명령어 연산을 스케쥴링할 때, 이 특정 명령어 연산이 레지스터 파일들(38A-38B)를 갱신하는 클록 사이클을 결정한다. 실행 코어들(40A-40B) 내의 서로 다른 실행 유닛들은 서로 다른 수의 파이프라인 스테이지들(및 이에 따라 서로 다른 레이턴시들)을 이용할 수 있다. 또한, 어떠한 명령어들은 다른 명령어들 보다 파이프라인 내에서 보다 긴 레이턴시를 경험할 수 있다. 따라서, 특정 명령어 연산에 대한 레이턴시를 (클록 사이클들의 수로) 측정하는 카운트다운이 생성된다. 명령어 큐들(36A-36B)은 (레지스터 파일을 판독하는 의존성 명령어 연산들 보다 이전에 또는 이와 동시에 갱신이 일어날 때까지) 특정수의 클록 사이클들을 기다린 다음, 그 특정 명령어 연산에 의존하는 명령어 연산들이 스케쥴링될 수 있음을 지시한다. 예를 들어, 일 특정 실시예에서, 의존성 명령어 연산들은 이들이 의존하는 명령어 연산이 레지스터 파일들(38A-38B)을 갱신하기 2 클록 사이클 이전에 스케쥴링될 수 있다. 다른 실시예들은 의존성 명령어 연산들이 의존하는 명령어 연산을 완료하고 레지스터 파일들(38A-38B)을 갱신하기 이전 또는 이후에 서로 다른 수의 클록 사이클들에서 상기 의존성 명령어 연산들을 스케쥴링할 수 있다. 각 명령어 큐들(36A-38B)은 그 명령어 큐 내의 명령어 연산들에 대한 카운트다운들을 유지하고, 의존성 명령어 연산들이 상기 카운트다운의 만료시 스케쥴링될 수 있도록 내부적으로 허용한다. 또한, 명령어 큐는 상기 카운트다운 만료시 다른 명령어 큐에 표시들을 제공한다. 이어서, 다른 명령어 큐는 의존성 명령어 연산들을 스케쥴링할 수 있다. 다른 명령어 큐로의 명령어 동작 완료의 이러한 지연된 전송은 레지스터 파일들(38A-38B)로 하여금 실행 코어들(40A-40B)중 하나에 의해 제공된 결과들을 다른 레지스터 파일에 전달할 수 있게 한다. 레지스터 파일들(38A-38B) 각각은 프로세서(10)에 의해 이용되는 물리 레지스터들의 세트를 구현하고, 실행 코어들(40A-40B)중 하나에 의해 갱신된다. 이 갱신들은 이후 다른 레지스터 파일에 전달된다. 주목할 사항으로서, 명령어 큐들(36A-36B)은 일단 그의 의존성들이 충족되면(즉, 큐 내의 자신의 순서에 대해 순서를 벗어나), 명령어를 스케쥴링할 수 있다.
명령어 큐(36A)로부터 스케쥴링된 명령어 연산들은 레지스터 파일(38A)로부터의 소스 물리적 레지스터 번호들에 따라 소스 오퍼랜드들을 판독한 다음, 실행을 위해 실행 코어(40A)로 전달한다. 실행 코어(40A)는 명령어 연산을 실행하고 레지스터 파일(38A) 내의 목적지에 할당된 물리 레지스터를 갱신한다. 일부 명령어 연산들은 목적지 레지스터들을 갖지 않고, 실행 코어(40A)는 이러한 경우 목적지 물리 레지스터를 갱신하지 않는다. 또한, 실행 코어(40A)는 명령어 연산의 R# 및 (만일 있는 경우) 명령어 연산에 관한 예외 정보를 PC 사일로 및 리다이렉트 유닛(48)에 보고한다. 명령어 큐(36B), 레지스터 파일(38B) 및 실행 코어(40B)도 유사한 방식으로 동작할 수 있다.
일 실시예에서, 실행 코어들(40A 및 40B)은 대칭적이다. 각 실행 코어(40)는, 예를 들어 부동 소수점 덧셈 유닛, 부동 소수점 곱셈 유닛, 2개의 정수 유닛들, 분기 유닛, 적재 어드레스 생성 유닛, 저장 어드레스 생성 유닛 및 저장 데이터 유닛을 포함한다. 실행 유닛들의 다른 구성들이 가능하다.
목적지 레지스터들을 갖지 않는 명령어 연산들에는, 저장 어드레스 생성들, 저장 데이터 연산들 및 분기 연산들이 있다. 저장 어드레스/저장 데이터 연산들은 결과들을 적재/저장 유닛(42)에 제공한다. 이 적재/저장 유닛(42)은 메모리 데이터 동작들을 실행하기 위해 인터페이스를 D-캐시(44)에 제공한다. 실행 코어들(40A-40B)은 명령어들의 어드레스 오퍼랜드들에 기초하여, 적재 ROP들을 실행하고 어드레스 ROP들을 저장함으로써 적재 및 저장 어드레스들을 각각 생성한다. 보다 구체적으로, 적재 어드레스들 및 저장 어드레스들은 실행 코어들(40A-40B)에 의해 생성될 때 (실행 코어들(40A-40B)과 D-캐시(44) 간의 연결에 의해 직접) D-캐시(44)에 전달된다. D-캐시(44)를 히트하는 적재 어드레스들은 데이터가 D-캐시(44)로부터 레지스터 파일들(38)로 전송되게 한다. 다른 한편으로, 히트한 저장 어드레스들은 저장 큐 엔트리에 할당된다. 또한, 저장 데이터가 저장 데이터 명령어 연산(이는 저장 데이터를 레지스터 파일들(38A-38B)로부터 적재/저장 유닛(42)으로 전송하는 데에 이용된다)에 의해 제공된다. 이 저장 명령어의 퇴거시, 상기 저장 데이터는 D-캐시(44)로 저장된다. 또한, 적재/저장 유닛(42)은 적재/저장 버퍼를 포함하는바, 이는 (외부 인터페이스(46)를 통해) 이후의 캐시 필(cache fill)을 위해, D-캐시(44)를 미스하는 적재/저장 어드레스들을 저장하고, 미스한 적재/저장 연산들을 재시도한다. 적재/저장 유닛(42)은 또한 적재/저장 메모리 의존성들을 처리하도록 구성된다.
도 2는 명령어 큐(36A)의 일 실시예를 도시한 블록도이다. 명령어 큐(36B)는 유사하게 구성될 수 있다. 다른 실시예들이 가능하고 고려된다. 도 2의 실시예에 서, 명령어 큐(36A)는 의존성 벡터 큐(60A), 큐 제어 유닛(62A), 오피코드/상수 저장소(64A) 및 픽 로직(pick logic)(66A)을 포함한다. 의존성 벡터 큐(60A)는 맵 유닛(30)으로부터의 의존성 벡터 버스(68), 큐 제어 유닛(62A), 픽 로직(66A) 및 명령어 큐(36B)에 연결된다. 큐 제어 유닛(62A)는 맵 유닛(30)으로부터의 테일 포인터(tail pointer) 제어 버스(70), 맵 유닛(30)으로부터의 IQ# 버스(72A), 및 오피코드/상수 저장소(64A)에 연결된다. 오피코드/상수 저장소(64A)는 픽 로직(66A), 맵 유닛(30)으로부터의 소스/목적지 PR# 버스(72B), 맵 유닛(30)으로부터의 오피코드들/R#들/즉시 필드들 버스(74), 및 PC 사일로(48)에 연결된다. 오피코드/상수 저장소(64A)는 또한 버스(76)에 연결되는바, 이 버스(76)를 통해 선택된 오피코드들, 즉시 데이터, PR#들, R#들 및 IQ#들이 레지스터 파일(38A) 및 실행 코어(40A)로 전달될 수 있다. 픽 로직(66A)은 저장 어드레스 IQ# 버스(78A)에 연결된다.
일반적으로, ROP는 맵 유닛(30)에 의해 그 ROP에 할당된 IQ#에 대응하는 오피코드/상수 저장소(64A) 및 의존성 벡터 큐(60A) 내의 엔트리에 할당된다. 다시 말해, IQ#는 ROP에 대응하는 정보가 저장되는 오피코드/상수 저장소(64A) 및 의존성 벡터 큐(60A) 내의 엔트리를 식별한다. 할당된 IQ#들은 IQ# 버스(72A)를 통해 명령어 큐(36A)에 제공된다. 큐 제어 유닛(62A)은 할당된 IQ#들을 수신하고 대응하는 기록 인에이블 신호들을 표명(assert)하여, 의존성 벡터 큐(60A) 및 오피코드/상수 저장소(64A)가 할당된 엔트리에 수신된 정보를 저장하게 한다.
의존성 벡터 큐(60A)는 명령어 큐(36A) 내에 나타나는 각 ROP에 대응하는 의존성 벡터를 저장한다. 일반적으로, "의존성 벡터"는 대응하는 ROP에 대해 나타나 는 의존성을 기록한다. 의존성들은 오퍼랜드 의존성들 또는 순서 의존성들이 될 수 있다. 의존성 벡터의 일 실시예가 하기에서 설명되지만, 다른 실시예들은 다른 의존성 벡터들을 이용할 수 있다. ROP는 대응하는 의존성 벡터에 기록된 의존성들 각각이 충족될 때까지는 스케쥴링에는 부적합하다. 일단 상기 의존성들 각각이 충족되면, 엔트리에 대응하는 스케쥴링 요구 라인 상의 스케쥴링 요구 신호가 의존성 벡터 큐(60A)에 의해 픽 로직(66A)에 표명되어, 실행을 위해 명령어 큐(36A) 내의 ROP들을 스케쥴링한다. 명령어 큐(36A)에 의해 수신된 ROP들의 라인에 대응하는 의존성 벡터들은 의존성 벡터 버스(68)를 통해 의존성 벡터 큐(60A)에 전달된다.
오피코드/상수 저장소(64A)는 ROP들을 스케쥴링하는 데에 이용되는 의존성 정보가 아닌 명령어 정보를 저장한다. 예를 들어, ROP에 의해 특정되는 오피코드 및 어떠한 즉시 데이터는 오피코드/상수 저장소(64A)에 저장된다. 또한, PC 사일로(48)에 의해 ROP에 할당된 R#는 오피코드/상수 저장소(64A)에 저장된다. 오피코드들, 즉시 데이터, 및 ROP들의 라인에 대응하는 R#들은 맵 유닛(30)으로부터 오피코드들/R#들/즉시 필드들 버스(74)를 통해 수신된다. 또한, 맵 유닛(30)에 의해 ROP에 할당된 소스 및 목적지 PR#들은 오피코드/상수 저장소(64A)에 저장된다. ROP들의 라인에 대응하는 소스 및 목적지 PR#들은 맵 유닛(30)으로부터 소스/목적 PR#들 버스(72B)를 통해 수신된다. 오피코드/상수 저장소(64A)는, 예를 들어 임의 접근 메모리(RAM)를 포함할 수 있다. 또한, 다양한 다른 저장소들(예를 들어, 일련의 레지스터들 또는 다른 클록된 저장 디바이스들)이 이용될 수 있다.
픽 로직(66A)은 실행을 위해 스케쥴링된 ROP들의 IQ#들을 오피코드/상수 저 장소(64A)에 전송한다. 오피코드/상수 저장소(64A)는 선택된 IQ#들에 의해 특정되는 엔트리들을 읽고, 오피코드들, 즉시 데이터, PR#들, R#들, 및 대응하는 ROP들의 IQ#들을 버스(76)를 통해 실행 코어(40A) 및 레지스터 파일(38A)에 제공한다. 레지스터 파일(38A)은 소스 PR#들을 수신하여 소스 오퍼랜드들을 판독한다. 실행 코어(40A)는 나머지 정보를 수신하여 ROP를 실행한다. 픽 로직(66A)은 실행 코어(40A) 내의 각 실행 유닛에 대해 클록 사이클당 최대 1개의 명령어 연산을 스케쥴링하도록 구성된다.
일 실시예에서, 맵 유닛(30)은 소정의 ROP가 실행되는 실행 코어(40A) 내의 실행 유닛을 할당한다. 어떠한 ROP들은 명령어 유닛들중 하나에 의해서만 실행될 수 있으며, 이에 따라 그 실행 유닛에 할당된다. 다른 ROP들은 다수의 실행 유닛들에 의해 실행될 수 있기 때문에, 다수의 실행 유닛들에게 가능한한 균등하게 분할될 수 있다. 예를 들어, 일 실시예에서는, 실행 코어(40A)에 2개의 정수 실행 유닛이 포함된다. 맵 유닛(30)은 ROP들의 라인 내의 정수 ROP들을 2개의 정수 실행 유닛들에게 교대로 할당할 수 있다. 픽 로직(66A)은 일단 그 ROP의 의존성들이 충족되면 할당된 실행 유닛에 대해 각 ROP를 스케쥴링한다. 일 실시예에서, 픽 로직(66A)은 의존성 벡터 큐(60A) 및 오피코드/상수 저장소(64A)에 의해 수신된 ROP들의 라인과 동시에, ROP들의 라인에 대해 할당된 실행 유닛들을 수신한다. 또한, 상기 할당된 실행 유닛은 의존성 벡터 큐(60A) 또는 오피코드/상수 저장소(64A)에 저장되고, 스케쥴링에 이용하기 위해 픽 로직(66A)에 전달된다.
픽 로직(66A)은 또한 상기 설명한 카운트다운 회로를 포함할 수 있는바, 이 는 스케쥴링된 ROP가 명령어 큐들(36A-36B) 내의 의존성 ROP들에 대해 충족되는 것으로 간주될 수 있는 클록 사이클을 결정한다. 본 실시예에서, 의존성은 이 의존성이 나타나는 ROP의 완료 전에 어느 정도 충족된다. 특히, 1개 이상의 파이프라인 스테이지들이 명령어 큐들(36A-36B)로부터의 ROP의 스케쥴링과 ROP 판독 레지스터 파일들(36A-36B) 사이에 존재할 수 있다(예를 들어, 일 특정 실시예에서는 2개의 스테이지들이 존재한다). 다른 실시예들은, 스테이지가 없는 것(즉, 레지스터 파일들(36A-36B)의 갱신시 카운트다운이 만료된다)을 포함하여 그 보다 많거나 또는 적은 스테이지들을 가질 수 있다. 카운트다운의 만료시, 기록 유효 라인 상의 기록 유효 신호는 완료 ROP에 할당된 명령어 큐(36A) 내의 엔트리에 대응하는 픽 로직(66A)에 의해 표명된다. 기록 유효 신호는 대응하는 큐 엔트리가 또 다른 ROP에 할당될 때까지 표명된 상태로 남는다. 기록 유효 신호는 대응하는 의존성이 충족되었는 지를 알아보기 위해 의존성 벡터 큐(60A)에 의해 이용된다. 다시 말해, 완료된 ROP에 대해 기록된 의존성을 갖는 각 ROP는 그 의존성이 충족된 것으로 인식할 수 있다. 그 밖의 기록되는 각 의존성이 충족되면, 의존성 큐(60A)는 스케쥴링을 요구하기 위해 픽 로직(66A)에 그 ROP에 대응하는 스케쥴링 요구 라인 상의 스케쥴링 요구 신호를 표명할 수 있다.
각 클록 사이클에서, 의존성 벡터 큐(60A) 내의 각 엔트리는 저장된 의존성 벡터를 평가(evaluate)하여, 의존성들이 총족되었는 지의 여부를 결정한다. 기록된 의존성들이 충족되었으면, 대응하는 스케쥴링 요구 라인 상의 대응하는 스케쥴링 요구 신호가 표명된다. 본원에서 이용되는 의존성 벡터의 "평가"는, 어느 ROP들이 완료되었는 지를 지시하는 기록 유효 신호들과 함께 의존성 벡터에 기록된 의존성들을 검사함으로써, 어느 의존성 벡터들이 충족된 의존성들 만을 기록하는 지를 결정하는 것을 말한다. 충족된 의존성들 만을 기록하는 의존성 벡터들에 대응하는 ROP들은 실행에 적합하며, 스케쥴링 요구 신호를 픽 로직(66A)에 표명한다.
본 실시예에서, ROP들은 최대 2개의 소스 오퍼랜드들을 가질 수 있으며, 이에 따라 대응하는 의존성 벡터에서 나타나는 최대 2개의 소스 오퍼랜드 의존성들을 가질 수 있다. 또한, 몇 개의 순서 의존성들은 본 실시예에서 적재 ROP들에 대해 정의된다. 첫번째로, 적재 ROP들은 각각의 이전 저장 어드레스 ROP에 의존하는 순서이다. 이러한 의존성은 적재/저장 유닛(42)에 의해 이용되는 의존성 검사 로직을 단순화하기 위해 부과된다. 이전 저장들의 어드레스들이 적재 ROP의 실행시 이용될 수 없다면, (저장의 어드레스와 적재의 어드레스를 비교함으로써 결정되는) 이전 저장들중 하나에 대한 의존성을 검출하는 로직은 어떻게 해서든지 이후의 시간에서의 의존성을 인식한 다음 이 의존성을 정확하게 처리할 수 있어야 한다. 반면, 각각의 이전 저장 어드레스 ROP에 대한 순서 의존성을 실시함으로써, 저장 어드레스들이 이용가능해지며, 의존성 검사는 적재의 실행시 완료될 수 있다. 또한, 적재 ROP들은, 특정 저장에 대한 의존성이 하기 설명되는 저장/적재 전송 메커니즘에 의해 예측되는 경우, 보다 이전의 저장 데이터 ROP들에 대한 순서 의존성들을 경험할 수 있다. 바람직한 경우, 다른 타입의 순서 의존성들이 이용될 수 있다. 예를 들어, 특정 명령어들은 동기 명령어들이다(즉, 상기 동기 명령어 이전의 각 명령어는 상기 동기 명령어를 실행하기 전에 완료되고, 상기 동기 명령어 이후의 각 명령어 는 상기 동기 명령의 실행 이전에 실행되지 않는다). 동기 명령어들은, 각각의 이전 ROP에 있어서 동기 명령에 대한 순서 의존성을 주목하고 각각의 이후 ROP에 대해 동기 명령에 대한 순서 의존성을 주목함으로써 달성될 수 있다.
적재 ROP들에 대한 저장 어드레스 ROP 순서 의존성들을 기록하기 위해, 맵 유닛(30)은 저장 어드레스 의존성 벡터(하기에서 설명됨)를 유지한다. 저장 어드레스 의존성 벡터는 이후의 적재 ROP들에 대해 의존성 벡터에 포함하기 위한 각각의 미실행 저장 어드레스 ROP를 기록한다. 이에 따라, 저장 어드레스 ROP가 성공적으로 완료되었음을 결정할 때, 픽 로직(66A)은 저장 어드레스 ROP의 IQ#를 저장 어드레스 IQ# 버스(78A)를 통해 맵 유닛(30)에 전송한다.
도 2에 도시된 바와 같이, 의존성 벡터 큐(60A)의 본 실시예는 명령어 큐(36B)(보다 특정하게는 하기의 도 4에 도시한 바와 같이 유사한 유사한 의존성 벡터 큐)에 연결된다.
의존성 벡터 큐(60A)는 픽 로직(66A)에 의해 제공되는 기록 유효 라인들을 명령어 큐(36B) 내의 대응하는 의존성 벡터 큐로 전달하고, 명령어 큐(36B)에 저장된 ROP들에 대응하는 기록 유효 라인들을 수신한다. 논리적으로, 명령어 큐들(36A-36B)은 명령어 큐(36A) 내의 엔트리들과 명령어 큐(36B) 내의 엔트리들의 합과 같은 다수의 엔트리들을 갖는 단일 명령어 큐로서 간주된다. IQ#들의 절반은 명령어 큐(36A) 내의 엔트리들을 식별하고, IQ#들의 나머지 절반은 명령어 큐(36B) 내의 엔트리들을 식별한다. 예를 들어, IQ#의 최상위 비트는 명령어 큐(36A) 또는 명령어 큐(36B) 내에 있는 엔트리를 식별한다.
의존성은 명령어 큐들(36A-36B)중 하나의 ROP와 다른 명령어 큐 내의 ROP 사이에 존재할 수 있다. 따라서, 의존성 벡터들은 어느 한 쪽의 명령어 큐로부터의 ROP들에 대응하는 의존성들을 기록할 수 있다. 어느 한 쪽의 명령어 큐에 대응하는 기록 유효 라인들은 그 내에 저장된 의존성 벡터들을 평가하는 데에 이용하기 위해 각각의 의존성 벡터 큐로 전달된다.
큐 제어 유닛(62A)은 테일 포인터 제어 버스(70)를 통해 맵 유닛(30)과 통신한다. 일반적으로, 큐 제어 유닛(62A)은 (프로그램 순서에 있어서) 명령어 큐(36A) 내의 제 1 유효 명령어 및 (프로그램 순서에 있어서) 명령어 큐 (36A) 내의 마지막 유효 명령어를 각각 지시하는 헤드 및 테일 포인터들을 유지하도록 구성된다. 큐 제어 유닛(62A)은 현재의 테일 포인터를 테일 포인터 제어 버스(70)을 통해 맵 유닛(30)에 전달한다. 맵 유닛(30)이 명령어 큐(36A) 내의 큐 엔트리들을 할당한다면, 맵 유닛(30)은 테일 포인터 제어 버스(70)를 통해 할당된 큐 엔트리들의 번호를 리턴시키며, 이에 따라 큐 제어 유닛(36A)은 테일 포인터를 갱신할 수 있다. 큐 제어 유닛(36A)은 또한, ROP들의 라인에 대한 헤드 포인터와 테일 포인터 사이에 불충분한 공간이 있는 경우, 큐 풀 신호(queue full signal)를 전송할 수 있다. 주목할 사항으로서, 본 실시예에서, 명령어 큐(36A)에 저장되기 이전에 ROP들에는 IQ#, 파이프라인 스테이지들의 수가 할당될 수 있다. 따라서, 할당된 IQ#는 ROP들과 함께 명령어 큐(36A)로 파이프라인될 수 있다. 맵 유닛(30) 내에 IQ#들을 할당하고 테일 포인터를 갱신할 때, 맵 유닛(30) 및 명령어 큐(36A)는 파이프라인 내의 ROP들에 대한 큐 엔트리들을 실제로 예약한다.
PC 사일로(48)는 이후의 명령어들을 취소하기 위해 예외를 경험하는 ROP의 R#를 프로세서(10) 내의 다양한 파이프라인 스테이지들에 전송하도록 구성된다. 따라서, 오피코드/상수 저장소(64A)는 PC 사일로(48)로부터 예외 R#을 수신할 수 있다. 오피코드/상수 저장소(64A)는 그 내에 저장된 R#들과 예외 R#을 비교한다. 오피코드/상수 저장소(64A)는 큐 제어 유닛(62A)에게, 어느 엔트리들이 대응하는 ROP가 상기 예외를 경험하는 ROP에 후속함을 지시하는 R#들을 저장하는 지를 표시한다. 이렇게 되면, 표시된 엔트리들은 무효화되고, 테일 포인터는 큐로부터 상기 표시된 엔트리들을 삭제하기 위해 리셋될 수 있다.
도 3은 의존성 벡터(80)의 일 실시예를 도시한 블록도이다. 다른 실시예들이 가능하고 고려된다. 도 3에 도시된 바와 같이, 의존성 벡터(80)는 각 IQ#(0-N-1, 여기서 명령어 큐들(36A-36B) 내의 총 엔트리들의 수는 N개이다)에 대응하는 표시를 포함한다. 일 특정 실시예에서, N은 128개이지만, 다른 어떠한 적절한 갯수가 이용될 수 있다. 각 IQ#에 대응하는 표시는 ROP에 대응하는 IQ#가 할당될 때 의존성 벡터(80)에 대응하는 ROP에 대한 의존성이 존재하는 지의 여부를 기록한다. 따라서, 의존성 벡터(80)는 대응하는 IQ#에 대해 임의 수의 의존성들(그 밖의 각각의 미실행 ROP에 대한 의존성까지)을 기록할 수 있다. 일 실시예에서, 각 표시는, 세트되면, 대응하는 IQ#가 할당된 ROP에 대한 의존성을 지시하고, 클리어되면, 대응하는 IQ#가 할당된 ROP에 대한 의존성의 결여를 지시하는 비트를 포함한다.
의존성 벡터(80)는 유익하게는 ROP들을 스케쥴링하기 위한 범용 메커니즘을 제공한다. 의존성 벡터(80)는 임의수의 의존성들을 기록하도록 구성되기 때문에, 소정의 ROP는 어떠한 다른 ROP에 대해 순서가 정해질 수 있다. 따라서, 동시 실행 또는 실행시 특정한 ROP들의 순서에 대한 어떠한 아키텍쳐 또는 마이크로아키텍쳐 제한들이 실시될 수 있다. 프로세서 구현을 개발하는 동안, (예를 들어, 구현을 단순화하기 위해) 추가적인 실행 순서 제한들을 부가하는 것이 바람직하다면, 이러한 추가적인 제한들은 의존성 벡터(80) 내에 순서 의존성들을 표시함으로써 수용될 수 있다. 유연성이 강화되면, 다양한 프로세서 구현들에 대해 명령어 큐들(36A-36B)의 적합성을 개선할 수 있다.
도 4는 명령어 큐(36B)로부터의 의존성 벡터 큐(60A) 및 의존성 벡터 큐(60B)를 나타내는 블록도이다. 다른 실시예들은 가능하고 고려된다. 도 4의 실시예에서, 의존성 벡터 큐(60A)는 PH2 래치(92A) 및 PH1 래치(94A) 뿐 아니라, 제 1 저장소(90A) 및 제 2 저장소(90B)를 포함한다. 유사하게, 의존성 벡터 큐(60B)는 PH2 래치(92B) 및 PH1 래치(94B) 뿐 아니라, 제 1 저장소(90C) 및 제 2 저장소(90D)를 포함한다. 제 1 저장소(90A)는 PH2 래치(92A)에 연결되고, PH2 래치(92A)는 제 2 저장소(90B)에 연결된다. 제 2 저장소(90B)는 또한 PH1 래치(94A)에 연결되고, PH1 래치(94A)는 픽 로직(66A)(도 2에 도시됨)에 연결된다. 유사하게, 제 2 저장소(90D)는 PH1 래치(94B)에 연결되고, PH1 래치(94B)는 제 1 저장소(90C)에 연결된다. 제 1 저장소(90C)는 PH2 래치(92B)에 연결된다.
보다 구체적으로, PH1 래치(94A)는 스케쥴링 요구 라인들(96A)의 세트 및 기록 유효 라인들(98A)의 세트에 연결된다. 스케쥴링 요구 라인들(96A)은 제 2 저장소(90B)로부터 PH1 래치(94A)를 통해 전달되고, 기록 유효 라인들(98A)은 PH1 래 치(94A)를 통해 제 2 저장소(90B) 및 제 2 저장소(90D)에 전달된다. 한 세트의 중간 스케쥴링 요구 라인들(100A)이 PH2 래치(92A)를 통해 제 1 저장소(90A)로부터 제 2 저장소(90B)로 전달된다. 스케쥴링 요구 라인들(96B)의 세트 및 기록 유효 라인들(98B)의 세트는 유사하게 PH2 래치(92B)를 통해 픽 로직(66B) 및 제 1 저장소(90C)에 각각 전달된다. 기록 유효 라인들(98B)은 유사하게 제 1 저장소(90A)에 전달된다. 중간 스케쥴링 요구 라인들(100B) 상의 중간 스케쥴링 요구 신호들의 세트는 제 2 저장소(90D)에 의해 생성되어, PH1 래치(94B)를 통해 제 1 저장소(90C)에 전달된다. 각 PH2 래치(92A-92B)는 PH2 클록 입력을 수신하고, 각 PH1 래치(94A-94B)는 PH1 클록 입력을 수신한다. 의존성 벡터 큐들(60A-60B)은 회전자(rotator)(102)에 연결되는바, 이 회전자(102)는 또한 맵 유닛(30)으로부터 의존성 벡터 버스들(68)(예를 들어, 발행 위치 0에 대한 의존성 벡터를 제공하는 의존성 벡터 버스(68A), 발행 위치 1에 대한 의존성 벡터를 제공하는 의존성 벡터 버스(68B) 등)에 연결된다. 회전자(102)는, 큐 제어 유닛들(62)로부터 입력을 수신하는 멀티플렉서(mux)(104)로부터 회전 제어를 수신하도록 연결된다. 또한, 의존성 벡터 큐(60A)는 큐 제어 유닛들(62A)로부터 기록 인에이블들(106)의 세트를 수신하고, 의존성 벡터 큐(60B)는 유사하게 큐 제어 유닛(62B)로부터 기록 인에이블들(108)의 세트를 수신한다.
도 4에 도시된 의존성 벡터 큐들(60A 및 60B)은 명령어 큐들(36A-36B)이 동작하는 클록 주파수를 개선할 수 있는 몇 개의 특징들을 이용한다. 지원될 수 있는 비교적 큰 수(예를 들어, 일 실시예에서는 128)의 명령어 큐 엔트리들로 인해, 의 존성 벡터 평가는 몇 개의 부분들로 분할되고, 연속적인 클록 페이즈들(clock phases) 동안 수행된다. 의존성 벡터의 제 1 부분은 제 1 페이즈 동안에 평가되어, 예를 들어 의존성 벡터 큐(60A) 내의 중간 스케쥴링 요구 라인들(100A)에 대한 중간 스케쥴링 요구 신호들을 생성한다. 계속되는 클록 페이즈 동안, 의존성 벡터의 제 2 부분이 (중간 스케쥴링 요구 신호와 함께) 평가되어, 픽 로직(66A)에 대한 스케쥴링 요구 신호들을 생성한다. 예를 들어, 일 실시예에서 중간 스케쥴링 요구 라인들 및 스케쥴링 요구 라인들은 와이어 OR된 라인들(wire ORed lines)로서, 이들은 (어떠한 의존성도 없음을 지시하는) 하이 상태로 프리챠지(precharge)되며, 의존성 벡터의 대응하는 부분 내의 1개 이상의 의존성들이 충족되지 않은 채로 유지되면 방전된다. 따라서, 평가를 부분 마다 수행함으로써, 와이어 OR 라인 상의 적재가 감소하며, 이에 따라 와이어 OR 라인들의 방전은 의존성에 응답하여 보다 진속하게 진행될 수 있다. 유익하게는, 전체 클록 주파수는 증가할 수 있다. 동작 주파수를 개선시킬 수 있는 다른 특징은 명령어 큐들(36A-36B)로의 단일 논리 명령어 큐의 분할이다. 각 큐에 대한 픽 로직은 보다 덜 복잡하며, 이에 따라 픽 로직이 실제로 단일 로직 명령어 큐 내의 명령어들의 일부 만을 고려하기 때문에 명령어들의 스케쥴링을 보다 신속하게 할 수 있다. 또한, 명령어 큐들은 서로 다른 클록 페이즈들 동안 명령어들을 스케쥴링함으로써, 반대측의 명령어 큐 내의 ROP에 대한 의존성의 충족에 의해 (전체 클록 사이클에 반대되는) 1/2 클록 사이클 동안 명령어 큐로 전달할 수 있게 한다. 이러한 전달의 1/2 클록 사이클은 또한 데이터를 반대 레지스터 파일로부터 스케쥴링 명령어 큐에 대응하는 레지스터 파일로 이동시키 는 데에 이용될 수 있다.
본원에서 이용되는 클록 신호의 "페이즈"는 클록 신호의 주기의 일부를 말한다. 각 페이즈는 그 페이즈에 대응하는 클록 신호의 상승 및 하강에 의해 범위가 정해진다. 일반적으로, (래치, 레지스터, 플립 플롭 등과 같은) 클록된 저장 디바이스는 페이즈들중 하나의 종료시 값을 획득한다. 또한, 상기 페이즈들은 전형적으로 겹치지 않는다. 도 4의 실시예에서, 클록 사이클은 2개의 페이즈들(PH1 및 PH2)로 분할되는바, 각 페이즈는 클록 신호에 의해 표현된다. PH1 래치들(94A-94B)은 PH1 래치 페이즈의 끝에서 값들을 획득하고, PH2 래치들(92A-92B)은 PH2 페이즈의 끝에서 값들을 획득한다.
일반적으로, 제 1 저장소(90A)는, 명령어 큐(36A) 내의 ROP에 대응하는 각 의존성 벡터에 대해, IQ#들 N-1에서 N/2에 대응하는 의존성 벡터의 부분을 저장한다. 유사하게, 제 1 저장소(90C)는, 명령어 큐(36B) 내의 ROP에 대응하는 각 의존성 벡터에 대해, IQ#들의 N-1에서 N/2에 대응하는 의존성 벡터의 부분을 저장한다. 제 2 저장소(90B)는, 명령어 큐(36A) 내의 ROP에 대응하는 각 의존성 벡터에 대해, IQ#들의 N/2-1에서 0에 대응하는 의존성 벡터의 부분을 저장한다. 따라서, 제 1 저장소(90A) 및 제 1 저장소(90C)는 명령어 큐(36B) 내의 엔트리들에 대응하는 각 의존성 벡터의 부분들을 저장하고, 제 2 저장소(90B) 및 제 2 저장소(90C)는 명령어 큐(36A) 내의 엔트리들에 대응하는 각 의존성 벡터의 부분들을 저장한다.
이제, 도 4에 도시된 의존성 벡터 큐(60A)의 동작에 대해 설명한다. PH2 페이즈 동안, 제 1 저장소(90A)는 그 내에 저장된 각 의존성 벡터의 부분("제 1 부 분")을 평가하여, 중간 스케쥴링 요구 라인들(100A) 상에 중간 스케쥴링 요구 신호들을 생성한다. 중간 스케쥴링 요구 라인은 의존성 벡터 큐(60A) 내의 각 엔트리에 대해 포함된다. 상기 중간 스케쥴링 요구 신호는, 대응하는 의존성 벡터의 제 1 부분 내에 기록된 각 의존성이 충족되는 경우에는 표명되고, 제 1 부분 내에 기록된 적어도 하나의 의존성이 충족되지 않는 경우에는 비표명(deassert)된다. 일 실시예에서, 상기 설명한 바와 같이, 중간 스케쥴링 요구 라인들(100A)은 와이어 OR된다. 중간 스케쥴링 요구 라인들은 (제 1 저장소(90A)에 대한 PH1 페이즈 동안) 표명된 상태로 프리챠지된 다음, 1개 이상의 의존성들이 충족되지 않은 채로 남는 경우 (제 1 저장소(90A)에 대한 PH2 페이즈 동안) 비표명 상태로 방전된다. PH2 래치(92A)는 중간 스케쥴링 요구 라인들(100A) 상의 중간 스케쥴링 요구 신호들을 획득한 다음, 이들을 PH1 페이즈 동안 제 2 저장소(90B)에 전달한다.
제 1 저장소(90A)와 유사하게, 제 2 저장소(90B)는 의존성 벡터의 제 2 부분을 평가하여, 스케쥴링 요구 라인들(96A) 상에 한 세트의 스케쥴링 요구 신호들을 생성한다. 스케쥴링 요구 신호들의 세트를 생성하기 위해 각 의존성 벡터의 제 2 부분에서의 의존성들을 평가하는 것에 부가하여, 대응하는 중간 스케쥴링 요구 신호들이 평가에 포함된다. 대응하는 중간 스케쥴링 요구 신호가 표명되고 의존성 벡터의 제 2 부분에 기록된 의존성들 각각이 충족되면, 스케쥴링 요구 신호가 표명된다. 대응하는 중간 스케쥴링 요구 신호가 비표명되거나 의존성 벡터의 제 2 부분에 기록된 1개 이상의 의존성들이 충족되지 않으면, 스케쥴링 요구 신호는 비표명된다. PH1 래치(94A)는 이 스케쥴링 요구 신호들을 획득한 다음, 픽 로직(66A)에 전 달한다.
픽 로직(66A)은 PH1 래치(94A)에 기록 유효 신호들을 제공한다. 기록 유효 신호는 명령어 큐(36A) 내의 각 큐 엔트리에 대해 제공되는바, 이는 대응하는 ROP에 대한 의존성이 충족되었음을 지시한다. 다시 말해, 표명된 기록 유효 신호는 대응하는 ROP에 대한 의존성이 충족되었다는 표시이다. 따라서, 픽 로직(66A)으로부터의 기록 유효 신호들은 제 2 저장소들(90B 및 90D)로 전달된다. 유사하게, 픽 로직(66B)으로부터의 기록 유효 신호들은 제 1 저장소들(90A 및 90C)에 전달된다.
의존성 벡터 큐(60B)는 의존성 벡터 큐(60A)와 유사한 방식으로 의존성 벡터들을 평가한다. 그러나, 제 2 저장소(90D)는 의존성 벡터의 제 2 부분을 평가하여 PH1 페이즈 동안 중간 스케쥴링 요구 신호들을 생성하며, 이후 제 1 저장소(90C) 내에서의 의존성 벡터의 제 1 부분의 평가 및 중간 스케쥴링 요구 신호들이 계속되어, PH2 페이즈 동안 스케쥴링 요구 신호들을 생성한다.
의존성 벡터 큐들(36A-36B)을 형성하는 트랜지스터들의 수를 줄이기 위해서는, 각 엔트리에 한 개의 기록 라인(즉, 엔트리에 데이터를 전송하기 위한 한 라인)을 제공하는 것이 바람직하다. 일반적으로, 맵 유닛(30)에 의해 제공되는 (의존성 벡터 버스(68A) 상에 대응하는 의존성 벡터를 갖는, 발행 위치 0의) 제 1 ROP는 할당 시간에 큐의 테일 포인터에 기초하여 어떠한 큐 엔트리에 할당될 수 있다. 이후의 ROP들은 (최대 8의 수 보다 작을 수 있는) 제공되는 마지막 ROP까지 다음의 연속적인 큐 엔트리들에 할당된다. 이에 따라, 회전자(102)가 제공된다. 회전자의 각 출력은 큐 엔트리들의 한 세트에 연결되는바, 세트 내의 각 엔트리는 발행 위치 들의 수와 같은 다수의 엔트리들에 의해 세트 내의 이웃하는 엔트리들과 공간이 떨어져있다. 예를 들어, 8개의 발행 위치들을 이용하는 본 실시예에서, 제 1 출력은 엔트리들 0, 8, 16 등에 연결될 수 있다. 제 2 출력은 엔트리들 1, 9, 17 등에 연결될 수 있다. 의존성 벡터들이 할당된 큐 엔트리로의 기록 입력 라인들 상에 제공될 수 있도록, 회전자(102)는 발행 위치 0에 할당되는 IQ#의 하위 비트들에 따라 의존성 벡터 버스(68) 상에 제공되는 의존성 벡터들을 회전시킨다. 8개의 발행 위치들을 이용하는 본 실시예에서, 2개의 하위 비트들은 회전량을 제공한다. 예를 들어, IQ# 0, 8, 또는 16이 발행 위치 0에 할당된다면, 제로 위치들의 회전이 수행되고 발행 위치 0에 대응하는 의존성 벡터는 회전자의 제 1 출력 상에 제공된다. 반면, IQ# 1, 9, 또는 17이 제공되면, 하나의 발행 위치의 회전이 수행되고 발행 위치 0에 대응하는 의존성 벡터는 회전자의 제 2 출력 상에 제공된다. 제 2 출력은 엔트리들 1, 9, 17 등에 연결되기 때문에, 발행 위치 0에 대응하는 의존성 벡터는 할당된 큐 엔트리에 연결된 기록 라인들 상에 제공된다. 나머지 의존성 벡터들은 할당된 큐 엔트리들에 연결된 기록 라인들 상에 대응하게 제공된다.
상기 회전자(102)는, 명령어 큐들(36A-36B)중 어느 것이 현재의 클록 사이클 동안 ROP들을 수신하는 지에 의존하여, 큐 제어 유닛들(62)중 하나로부터 회전량을 수신하도록 연결된다. Mux(104)는 명령어 큐(36A)내의 큐 제어 유닛(82A) 및 명령어 큐(36B) 내의 큐 제어 유닛(82B)으로부터 (발행 위치 0 내의 ROP에 할당된 IQ#에 대응하는) 회전량 입력을 교대로 선택한다. 또한, 큐 제어 유닛(82A 또는 82B)은 (어떤 명령어 큐가 ROP들을 수신하는 지에 의존하여) 할당된 IQ#들에 대응하는 기록 인에이블 신호들을 표명함으로써, 할당된 큐 엔트리들은 제공되는 의존성 벡터들을 저장한다.
도 5는 의존성 벡터 큐(60A) 내의 의존성 벡터 큐 엔트리(엔트리 번호 M)의 일 실시예의 부분을 나타낸 회로도이다. 다른 실시예들이 가능하고 고려된다. 도시된 부분은 엔트리 M에 저장된 의존성 벡터 내의 하나의 의존성 표시(예를 들어, IQ#N에 대한 의존성의 표시)에 대응한다.
IQ#N에 대한 의존성 표시는 회전자(102)로부터 기록 라인(110) 상에 제공된다. 기록 인에이블 라인(112) 상의 기록 인에이블 신호가 큐 제어 유닛(62A)에 의해 표명되면, 상기 의존성 표시는 교차 결합된 인버터들(114A-114B)에 의해 표현되는 저장 셀 내에 저장된다. 기록 라인(110)을 통해 수신되는 의존성 표시는 실제 의존성 표시의 반대이기 때문에, 노드(116) 상의 논리 하이는 IQ#N의 ROP에 대한 의존성이 존재함을 지시한다.
스케쥴링 요구 라인(96AA)(도 4에 도시된 스케쥴링 요구 라인들(96A)중의 하나)은 또한 도 5에 도시된다. 프리챠지 트랜지스터(미도시)는 와이어 OR 라인(96AA)을 표명된 상태로 프리챠지시킨다. 방전 트랜지스터(118)는 스케쥴링 요구 라인(96AA)과 접지 사이에 연결된다. 방전 트랜지스터(118)에 연결된 게이트(120)의 출력이 논리 1이면, 이 방전 트랜지스터(118)는 스케쥴링 요구 라인(96AA)을 방전시키고 IQ#N에 저장된 ROP는 스케쥴링되지 않는다. 반면, 게이트(120)의 출력이 논리 0이면, 이 방전 트랜지스터(118)는 스케쥴링 요구 라인(96AA)를 방전시키지 않는다. 의존성 벡터 내의 다른 의존성 표시들에 대응하는 다른 유사한 방전 트랜 지스터들이 스케쥴링 요구 라인(96AA)을 방전시키지 않으면, IQ#M에 저장된 ROP는 스케쥴링될 수 있다.
상기 게이트(120)는 도 5에 도시된 NOR 게이트이다. 따라서, 의존성이 인버터들(114A-114B)에 의해 표현되는 저장 셀에 표시되지 않으면, 저장 셀로부터 게이트(120)로의 입력은 논리 1이고 게이트(120)의 출력은 논리 0이 됨으로써, 방전 트랜지스터(118)가 스케쥴링 요구 라인(96AA)를 비표명 상태로 방전시키는 것을 막는다. 이러한 방법으로, 소정의 IQ#에 대한 의존성의 결여는 IQ#N 내의 ROP가 완료되는 지의 여부에 상관없이 IQ#M 내의 ROP의 스케쥴링을 막지 않는다. 반면, 의존성이 저장 셀 내에 나타나면, 저장 셀로부터의 입력은 논리 0이 되고, 게이트(120)의 출력은 기록 유효 라인(98AA)(도 4에 도시된 기록 유효 라인들(98A)중 하나)이 로우로 표명될 때까지 논리 1이 될 것이다. 도 5의 실시예에서, 의존성은 기록 유효 라인 상의 논리 로우에 의해 충족되는 것으로 표시된다. 일단 기록 유효 라인이 표명되면, 게이트(120)의 출력은 논리 0으로 스위치되고, 방전 트랜지스터(118)은 활성화되지 않는다.
도 6은 제 2 저장소(90D)로부터 제 1 저장소(90C) 내의 대응하는 스케쥴링 요구 라인(96BA)(도 4에 도시된 스케쥴링 요구 라인들(96B)중 하나)으로의 중간 스케쥴링 요구 라인(100BA)(도 4에 도시된 중간 스케쥴링 요구 라인들(100B)중 하나)을 통한 중간 스케쥴링 요구 신호의 전달의 일 실시예를 나타낸 회로도이다. 다른 실시예들이 고려되고 가능하다.
도 6의 실시예에서, 중간 스케쥴링 요구 라인(100BA) 상의 중간 스케쥴링 요 구 신호는 교차 결합된 인버터들(122A-122B)에 의해 표현되는 저장 셀에 포획된다. 중간 스케쥴링 요구 신호의 인버트된 형태는 PH1 페이즈 동안 통과 트랜지스터(126)를 통해 트랜지스터(124)에 전달된다. PH1 페이즈의 끝에서, 중간 스케쥴링 요구 신호의 반전은 트랜지스터(124)의 게이트에 존재하고, 트랜지스터(126)에 의해 저장 셀로부터 분리된다. PH2 페이즈의 시작에서, 트랜지스터(128)가 활성화된다. 트랜지스터(124)의 게이트가 논리 1이면(즉, 중간 요구 신호가 PH1 페이즈의 끝에서의 포획시 비표명되었다면), 스케쥴링 요구 라인(96BA)은 트랜지스터들(124 및 128)을 통해 비표명된 상태로 방전된다. 반면, 트랜지스터(124)의 게이트가 논리 0이면(즉, 매개 요구 라인이 PH1 페이즈의 끝에서의 포획시 표명되었다면), 스케쥴링 요구 라인(96BA)은 트랜지스터들(124 및 128)을 통해 방전되지 않는다. 스케쥴링 요구 라인(96BA)은 의존성 벡터의 제 1 부분의 평가에 따라 비표명되거나, 엔트리(P) 내의 ROP가 스케쥴링될 수 있음을 나타내기 위해 표명된 채로 남을 수 있다.
주목할 사항으로서, 인버터들(122A-122B) 및 트랜지스터들(124, 126 및 128)은 PH1 래치(94B)의 일부를 포함할 수 있다. 또한, 주목할 사항으로서, 상기 설명은 표명 및 비표명된 신호들에 대해 설명한다. 신호는 논리 1의 상태에 있을 때 표명되고, 논리 0의 상태에 있을 때 비표명되는 것으로 정의되지만, 사정에 따라 그 반대 또한 가능하다. 예를 들어, 도 5 및 6에서, 스케쥴링 요구 라인들은 논리 1 상태에서 표명되지만, 기록 유효 라인들은 논리 0 상태에서 표명된다. 다른 실시예들은 바람직한 경우 어떠한 신호의 의미를 반대로 할 수 있다.
도 7은 맵 유닛(30) 및 저장/적재 전송 검출 유닛(148)의 일 실시예의 블록도이다. 다른 실시예들이 가능하며 고려될 수 있다. 도 7의 실시예에서, 맵 유닛(30)은 레지스터 스캔 유닛(register scan unit)(130), IQ#/PR# 제어 유닛(132), 가상/물리 레지스터 맵 유닛(136), 의존성 벡터 생성 유닛(134) 및 저장 어드레스 레지스터(138)를 포함한다. 레지스터 스캔 유닛(130)은 버스(140)를 통해 디코드 유닛(24)으로부터 소스 및 목적지 레지스터 번호들(그리고 각각에 대한 유효 표시)을 수신하도록 연결된다. 레지스터 스캔 유닛(130)은 목적지 레지스터 번호들 및 소스 가상 레지스터 번호들을 가상/물리 레지스터 맵 유닛(136)에 전달하도록 구성된다. IQ#/PR# 제어 유닛(132)은 목적지 레지스터 번호들 및 이 목적지 레지스터 번호들에 대응하는 유효 표시들을 수신하기 위해 버스(142)에 연결된다. 명령어 큐들(36A-36B)은 테일 포인터 버스(70A)(도 2에 도시된 테일 포인터 제어 버스(70)의 일부) 상에 테일 포인터들을 제공하여, 각 큐 내의 어느 엔트리가 현재 그 큐의 테일인지를 지시한다. IQ#/PR# 제어 유닛(132)은 또한 ROP 할당 버스(70B)(도 2에 도시된 테일 포인터 제어 버스(70)의 일부)에 연결된다. 부가적으로, IQ#/PR# 제어 유닛(132)은 목적 PR#/IQ# 버스(144)에 연결된다. 가상/물리인 레지스터 맵 유닛(136)은 맵 사일로(32)에 연결되고, 라인 내의 각 ROP에 대한 소스 PR#들, 소스 IQ#들, 목적지 PR#들 및 IQ#를 소스/목적 PR# 및 IQ# 버스(72)을 통해 명령어 큐들(36A-36B)에 제공한다. 프리 리스트 제어 유닛(미도시)은 다음의 프리 PR# 버스(146)를 통해 IQ#/PR# 제어 유닛(132)에 연결된다. 의존성 벡터 생성 유닛(134)은 소스/목적 IQ#들을 수신하기 위해서 가상/물리적 레지스터 맵 유닛(136)에 연결 되고, 저장 어드레스 레지스터(138) 및 저장/적재 전송 검출 유닛(148)에 연결된다. 의존성 벡터 생성 유닛(134)은 ROP 타입 버스(150)를 통해 ROP들의 라인 내의 ROP 타입들의 표시를 수신하도록 연결되고, (명령어 큐(36A)로부터의 저장 어드레스 IQ# 버스(78A)를 포함하는) 저장 어드레스 IQ# 버스(78)에 연결된다. 또한, 의존성 벡터 생성 유닛(134)은 의존성 벡터 버스(68)에 연결된다. 저장/적재 전송 검출 유닛(148)은 PC 사일로(48)로부터의 적재 히트 저장 데이터 버스(152), 저장 데이터 IQ#/PR# 제어 유닛(132)로부터의 IQ# 버스(154), 및 디코드 유닛(24)으로부터의 ROP 타입 및 PC 버스(156)에 연결된다.
일반적으로, 의존성 벡터 생성 유닛(134)은 명령어 큐들(36A-36B)(즉, 라인 내의 각 발행 위치)로 디스패치되는 각 ROP에 대한 의존성 벡터를 생성한 다음, 이 의존성 벡터를 의존성 벡터 버스(68)를 통해 명령어 큐들(36A-36B)로 전달하도록 구성된다. 의존성 벡터 생성 유닛(134)은 디코드 유닛(24)으로부터 라인 내의 각 ROP에 대한 ROP 타입의 표시를 수신한다. 어떠한 ROP 타입에 대해, 의존성 벡터 생성 유닛(134)은 각 소스 오퍼랜드에 대해 의존성 벡터 내의 오퍼랜드 의존성들을 기록하도록 구성된다. 의존성 벡터 생성 유닛(134)은 가상/물리 레지스터 맵 유닛(136)으로부터 각 소스 오퍼랜드에 대응하는 IQ#들을 수신하고, 소스 IQ#들을 디코드하여 의존성 벡터 내의 대응하는 의존성 표시를 세트시킨다.
상기 설명한 바와 같이, 의존성 벡터는 특정한 ROP에 대해 임의수의 의존성들이 표시될 수 있게 하는 유연한 의존성 메커니즘이다. 본 실시예에서, 예를 들어, 적재 ROP들은 보다 이전의 저장 어드레스 ROP들에 대해 순서 의존성인 것으로 정의된다. 따라서, 의존성 벡터 생성 유닛(134)은 저장 어드레스 레지스터(138)에 저장 저장 어드레스 의존성 벡터를 유지한다. 이 저장 어드레스 의존성 벡터는 (본 실시예에서는 IQ#에 의해) 각의 미실행 저장 어드레스 ROP의 표시들을 기록한다. 의존성 벡터 생성 유닛(134)은 (디코드 유닛(24)으로부터 수신되는 ROP 타입들에 의해 식별되는) 라인 내의 각 저장 어드레스 ROP에 할당되는 IQ#들의 표시에 의해 저장 어드레스 의존성 벡터를 갱신한다. 목적지 IQ#들은 가상/물리 맵 유닛(136)으로부터 수신된다. 각 저장 어드레스 ROP는, 대응하는 IQ#가 저장 어드레스 IQ#들 버스(78)(이를 통해 의존성 벡터 생성 유닛(134)은 대응하는 IQ#를 삭제하기 위해 저장 어드레스 의존성 벡터를 갱신한다)를 통해 명령어 큐들(36A-36B)에 의해 제공될 때까지 미실행 상태로 유지된다.
ROP 타입 버스(150) 상에 표시되는 각 적재 ROP에 있어서, 의존성 벡터 생성 유닛(134)은 그 적재 ROP에 대해 생성되는 의존성 벡터 내의 저장 어드레스 의존성 벡터를 포함한다. 보다 구체적으로, 일 실시예에서, 의존성 벡터들은 각 IQ#에 대한 비트를 포함한다. 비트가 세트되면, 의존성은 대응하는 IQ#에 할당된 ROP에 기록된다. 이러한 실시예에서, 저장 어드레스 의존성 벡터는 소스 오퍼랜드에 대응하는 의존성 벡터들과 OR링될 수 있다. 저장 어드레스 레지스터(138)에 저장된 저장 어드레스 의존성 벡터에 부가하여, 의존성 벡터 생성 유닛(134)은 특정한 적재 ROP에 대해 ROP들의 라인 내에 있으며 그 라인 내의 상기 특정한 적재 ROP 이전의 저장 어드레스 ROP들을 검출할 수 있다. 또한, 상기 특정한 ROP에 대해 저장 어드레스 ROP들이 검출되면, 의존성이 의존성 벡터에 기록된다.
특정한 적재 ROP는 또한, 저장/적재 전송 검출 유닛(148)이 상기 특정한 적재 ROP가 적재 히트 저장 데이터 상황을 경험할 것임을 예측하는 경우, 저장 데이터 ROP에 의존하는 것으로서 기록될 수 있다. 상기 설명한 바와 같이, 적재 ROP들은 이전 저장 어드레스 ROP들에 대해 오더링(ordering) 의존한다. 이러한 오더링을 실시함으로써, 동일한 메모리 위치를 액세스하는 적재 ROP들과 이전 저장 ROP들 간의 의존성들이 결정될 수 있다. 그러나, 이전 저장 데이터 ROP들에 대한 적재 ROP들의 어떠한 오더링도 (일반적으로) 없기 때문에, 적재/저장 유닛(42)에 의한 의존성의 검출이 저장 데이터의 전송을 즉시 일으키지 못한다(즉, 저장 데이터 ROP가 아직 실행되지 않았으면, 데이터는 아직 이용할 수 없다). 저장 데이터가 아직 전송될 수 없다면, 적재 ROP는 취소되고 이후의 클록 사이클에서 재스케쥴링된다. 불행히도, 취소된 적재 ROP에 의존하는 ROP들 또한 취소된다. 간소화를 위해, 명령어 큐들(36A-36B)은 취소된 적재 ROP 이후에 스케쥴링된 모든 ROP들을 취소할 수 있다. 저장 데이터 ROP들에 대한 적재 ROP들의 부당한 지연없이 ROP들의 취소를 피하기 위해, 저장/적재 전송 검출 유닛(148)은 (이용불가능한 저장 데이터를 갖는) 적재 히트 저장 데이터 상황을 예측하고, 필요한 경우 이 예측에 응답하여 의존성을 기록하는 데에 이용된다. 적재 히트 저장 데이터 상황이 예측되면, 저장 데이터 ROP의 IQ#는 저장/적재 전송 검출 유닛(148)에 의해 의존성 벡터 생성 유닛(134)에 제공된다. 의존성 벡터 생성 유닛(134)은 대응하는 적재 ROP의 의존성 벡터 내의 저장 데이터 ROP에 대한 오더링 의존성을 기록한다.
저장/적재 전송 검출 유닛(148)은 본 실시예에서 한 쌍의 테이블들을 유지할 수 있다. 제 1 테이블은 적재 PC 어드레스에 의해 인덱스되고, 적재 히트 저장 데이터 상황이 이전에 검출되었던 저장 데이터 PC 어드레스를 저장한다. 제 2 테이블은 저장 데이터 PC 어드레스에 의해 인덱스되고, 저장 데이터 ROP에 할당되는 IQ#을 저장한다. 따라서, 저장/적재 전송 검출 유닛(148)은 (디코드 유닛(24)으로부터 버스(156) 상에 표시되는) 맵 유닛(30)에 의해 맵핑되는 각 적재 ROP의 PC들로 제 1 테이블을 인덱스한다. 인덱스된 엔트리가 적재 히트 저장 데이터 상황이 예측되었음을 나타내면, 인덱스된 엔트리에 저장된 저장 PC 어드레스는 제 2 테이블을 인덱스하는 데에 이용된다. 인덱스된 엔트리의 제 2 테이블의 IQ#는 대응하는 적재 ROP의 의존성 벡터에 포함시키기 위해 저장/적재 전송 검출 유닛(148)에 의해 의존성 벡터 생성 유닛(134)에 전달된다.
적재 ROP를 실행하는 동안 적재 히트 저장 데이터를 검출할 때, 적재/저장 유닛(42)은 의존성이 검출되는 적재 ROP의 R# 및 저장 데이터 ROP의 R#를 PC 사일로(48)에 보고한다. PC 사일로(48)는 적재 히트 저장 데이터 버스(152)를 통해 적재 ROP 및 저장 데이터 ROP의 대응하는 물리 PC 어드레스들을 제공한다. 저장/적재 전송 검출 유닛(148)은 적재 히트 저장 데이터 상황이 검출되었던 저장 데이터 ROP의 저장 데이터 PC 어드레스에 의해, 적재 PC 어드레스에 의해 인덱스된 엔트리의 제 1 테이블을 갱신하고 (적재 히트 저장 데이터 상황이 검출되었다는 표시를 세트시킨다). 일 실시예에서, 제 1 테이블은 2Kbyte의 2 방향 세트 어소시에이티브 테이블인바, 여기서 각 엔트리는 6비트의 저장 PC 어드레스 및 대응하는 적재 히트 저장 데이터 표시를 저장한다.
저장/적재 전송 검출 유닛(148)은 버스(154)를 통해 IQ#/PR# 제어 유닛(132)으로부터 디스패치되는 저장 데이터 ROP들의 IQ#들 및 PC 어드레스들을 수신하고, 대응하는 저장 데이터 PC 어드레스들에 의해 인덱스되는 제 2 테이블의 엔트리들에 IQ#들을 기록한다.
도 7의 실시예에서, 맵 유닛(30)은 2 스테이지 파이프라인 설계를 이용하여 레지스터 재명명을 수행한다. 다른 실시예들은 필요에 따라 단일 파이프라인 스테이지 또는 추가적인 스테이지들로 레지스터 재명명을 수행할 수 있다. 제 1 스테이지에서, 레지스터 스캔 유닛(130)은 가상 레지스터 번호들을 각 소스 레지스터에 할당한다. 이와 동시에, IQ#/PR# 제어 유닛(132)은 (명령어 큐(36A-36B)에 의해 제공되는 테일 포인터에 기초하는) IQ#들을 각 ROP에 할당하고, PR#들을 목적지 레지스터를 갖는 ROP들에 할당한다. 제 2 스테이지에서, 가상/물리 레지스터 맵 유닛(136)은 (현재의 룩어헤드 상태 및 할당된 PR#들에 기초하여) 가상 레지스터 번호들을 물리 레지스터 번호들에 맵핑시키고, IQ#/PR# 제어 유닛(132)에 의해 할당된 물리 레지스터 번호들을 대응하는 ROP의 발행 위치로 전달한다.
레지스터 스캔 유닛(130)에 의해 할당되는 가상 레지스터 번호들은 물리 레지스터 번호에 대한 소스를 식별한다. 예를 들어, 본 실시예에서, 소스 레지스터들에 대응하는 물리 레지스터 번호들은 (맵 유닛(30)에 의해 이전에 처리된 ROP들의 라인들에 대응하는 갱신들을 나타내고, 가상/물리 레지스터 맵 유닛(136)에 의해 유지되는) 룩어헤드 레지스터 상태로부터 얻어지거나, (이전 ROP의 목적지 오퍼랜드가 소스 오퍼랜드와 같다면, 즉 라인내 의존성(intraline dependency)이 존재하 는 경우에는) ROP들의 라인 내의 이전 발행 위치로부터 얻어질 수 있다. 다시 말해, 소스 레지스터 번호에 대응하는 물리 레지스터 번호는 라인내 의존성이 검출되지 않는 한 룩어헤드 레지스터 상태 내의 물리 레지스터 번호이다. 레지스터 스캔 유닛(130)은 라인내 의존성 검사를 효과적으로 수행한다. 다른 실시예들은 필요에 따라 소스 오퍼랜드들의 다른 소스들을 제공할 수 있다.
IQ#/PR# 제어 유닛(132)은 명령어 큐(36A-36B)중 하나의 테일 포인터에서 시작하는 명령어 큐 번호들을 할당한다. 다시 말해, 라인 내의 제 1 ROP는 선택된 명령어 큐의 테일 포인터를 IQ#으로서 수신하고, 다른 ROP들은 테일 포인터로부터 증가하는 순서로 IQ#을 수신한다. 제어 유닛(132)은 라인의 ROP들 각각을 동일한 명령어 큐(36A-36B)에 할당하고, ROP들의 다음 라인을 다른 명령어 큐(36A-36B)에 할당한다. 제어 유닛(132)은 명령어 큐(36A-36B)에 할당된 ROP들의 번호의 표시를 ROP 할당 버스(70B)(도 2에 도시된 테일 포인터 제어 버스(70)의 일부)를 통해 전달한다. 이에 따라, 수신 명령어 큐는 그의 테일 포인터를 갱신하여 그 큐로의 ROP들의 할당을 지시한다.
제어 유닛(132)은 다음 프리 PR# 버스(146)를 통해 프리 리스트 제어 유닛으로부터 프리 PR#들의 세트를 수신한다. 프리 PR#들의 세트는 명령어 연산들의 라인 내의 목적지 레지스터들에 할당된다. 일 실시예에서, 프로세서(10)는 라인 내의 논리적 레지스터 갱신들의 수를 4개로 제한한다(즉, 예측기 미스 디코드 유닛(26)이 5번째 논리 레지스터 갱신을 만나면, 상기 라인은 이전 명령어에서 끝난다). 이에 따라, 프리 리스트 제어 유닛은 프리 리스트로부터 4개의 PR#들을 선택하고, 선택 된 레지스터들을 다음 프리 PR# 버스(146)를 통해 제어 유닛(132)에 전달한다. 다른 실시예들은, 어떠한 제한도 없음(즉, 각 ROP가 갱신될 수 있다)을 포함하여, 라인 내의 갱신들의 수에 대한 서로 다른 한정들을 이용할 수 있다.
프리 리스트 제어 유닛은 물리적인 레지스터들의 자유화(freeing)를 관리하고, 이후의 명령어들에 할당하기 위한 레지스터들을 선택한다. 프리 리스트 제어 유닛은 아키텍쳐 재명명 블록(34)으로부터 팝핑(popping)된 이전 물리 레지스터 번호들을 수신하고, 상기 아키텍쳐 재명명 블록(34)은 갱신된 아키텍쳐 재명명 세트에 대해 이전 물리 레지스터 번호들을 캠(cam)한다. 대응하는 캠 매치가 검출되지 않는 각각의 이전 PR#가 프리 리스트에 추가된다.
가상/물리 레지스터 맵 유닛(136)은, PR#의 소스가 룩어헤드 레지스터 상태임을 지시하는 가상 레지스터 번호를 갖는 각 소스 레지스터에 대해 룩어헤드 레지스터 상태에 의해 표시되는 대응하는 논리 레지스터의 PR# 및 IQ#을 제공한다. 가상 레지스터 번호가 이전 발행 위치를 지시하는 소스 레지스터들은 제어 유닛(132)에 의해 할당된 대응하는 PR# 및 IQ#를 제공받는다. 또한, 가상/물리 레지스터 맵 유닛(136)은 ROP들의 라인들에 의해 특정되는 논리 목적지 레지스터들 및 제어 유닛(132)에 의해 할당되는 목적지 PR#들/IQ#들에 따라 룩어헤드 레지스터 상태를 갱신한다.
가상/물리 레지스터 맵 유닛(136)은 또한 예외 조건에 응답하여 맵 사일로(32)에 의해 제공되는 복구 룩어헤드 레지스터 상태를 수신하도록 구성된다. 가상/물리 레지스터 맵 유닛(136)은 맵 사일로(32)에 의해 제공되는 복구 룩어헤드 상태에 의해, 레지스터 스캔 유닛(130) 및 IQ#/PR# 제어 유닛(132)으로부터의 입력들에 따라 생성되는 다음 룩어헤드 레지스터 상태를 무효화할 수 있다.
주목할 사항으로서, 본 실시예에서, IQ#들은 대응하는 ROP가 어떤 큐 엔트리들에 의존하는 지를 나타내기 위해 각 소스 오퍼랜드에 대해 경로가 정해진다. 명령어 큐들(36A-36B)은 실행을 위해 의존성 ROP를 스케쥴링하기 이전에, 대응하는 명령어 큐 엔트리들의 ROP들의 완료를 기다린다.
도 8은, 의존성 벡터 생성 유닛(134) 일 실시예의 동작을 나타낸 순서도이다. 다른 실시예들이 가능하며 고려될 수 있다. 도 8에서는 이해를 돕기 위해 단계들이 특정한 순서로 도시되었지만, 어떠한 순서라도 적합하다. 또한, 의존성 벡터 생성 유닛(134) 내의 조합 논리에서 다양한 단계들이 동시에 수행될 수 있다.
의존성 벡터 생성 유닛(134)은 1개 이상의 저장 어드레스 IQ#들이 명령어 큐들(36A-36B)로부터 수신되는 지를 결정한다(결정 블록 160). 저장 어드레스 IQ#가 수신되면, 의존성 벡터 생성 유닛(134)은 저장 어드레스 의존성 벡터 내의 대응하는 의존성 표시를 삭제한다(단계 162). 예를 들어, 의존성 벡터가, 세트될 때 의존성을 지시하는 각 IQ#에 대한 비트를 포함하는 일 실시예에서, 수신된 IQ#에 대응하는 비트는 리셋(또는 클리어)된다.
의존성 벡터 생성 유닛(134)은 라인내 저장 어드레스 의존성 벡터를 형성한다(단계 164). 이 라인내 저장 어드레스 의존성 벡터는 의존성 벡터 생성 유닛(134)에 의해 처리되는 ROP들의 라인 내의 각 저장 어드레스 ROP에 대한 의존성 표시들을 기록한다. 의존성 벡터 생성 유닛(134)은 ROP들의 라인 내의 각 ROP에 대 한 의존성 벡터(즉, 유효 ROP를 갖는 각 발행 위치에 대응하는 의존성 벡터)를 형성한다(단계 166). 의존성 벡터 생성 유닛(134)의 일 실시예에 따른 특정 발행 위치에 대한 의존성 벡터의 형성은 하기의 도 9에서 설명된다. 마지막으로, 의존성 벡터 생성 유닛(134)은 저장 어드레스 레지스터(138)에 저장된 저장 어드레스 의존성 벡터와 라인내 저장 어드레스 의존성 벡터를 합친 다음, 그 결과로 저장 어드레스 레지스터(138)를 갱신한다(단계 168).
도 9는 의존성 벡터 생성 유닛(134)의 일 실시예에 따른 ROP에 대한 의존성 벡터의 형성(즉, 도 8의 단계 166)을 지시하는 흐름도이다. 도 9에 도시된 단계들은 라인 내의 각 ROP에 대해 수행될 수 있다. 다른 실시예가 가능하며 고려될 수 있다. 도 8에서는 이해를 돕기 위해 단계들이 특정한 순서로 도시되었지만, 어떠한 순서라도 적합하다. 또한, 의존성 벡터 생성 유닛(134) 내의 조합 논리에서 다양한 단계들이 동시에 수행될 수 있다.
의존성 벡터 생성 유닛(134)은 의존성 벡터가 생성되는 ROP가 적재 ROP인지를 결정한다(결정 블록 170). 상기 설명한 바와 같이, 라인 내의 각 ROP의 타입은 디코드 유닛(24)에 의해 의존성 벡터 생성 유닛(134)에 제공되며, 이 의존성 벡터 생성 유닛(134)은 이로부터 어떠한 ROP들이 적재 ROP들인지를 결정할 수 있다. ROP가 적재 ROP이면, 의존성 벡터 생성 유닛(134)은 적재 ROP 이전의 발행 위치에 대해 라인내 저장 어드레스 의존성 벡터를 마스크하고, 의존성 벡터에 마스크된 표시들을 기록한다(단계 172). 다시 말해, 라인 내의 적재 ROP 이전의 저장 어드레스 ROP들에 대응하는 의존성 표시들이 의존성 벡터에 포함된다. 적재 ROP 이후의 저장 어드레스 ROP들에 대응하는 의존성 표시들은 포함되지 않는다. 이후의 저장 어드레스 ROP들에 대한 어떠한 의존성도 없다는 것이 적재 ROP에 대해 주목되어야 하기 때문에, 적재 ROP 이후의 저장 어드레스 ROP에 대응하는 의존성 표시들은 마스크 오프된다.
또한, 저장 어드레스 레지스터(138)에 저장된 저장 어드레스 의존성 벡터는, ROP가 적재 ROP인 경우 의존성 벡터에 기록된다(단계 174). 또한, 적재 히트 저장 데이터 상황이 저장/적재 전송 검출 유닛(148)에 의해 예측된다면, 의존성이 예측된 저장 데이터 ROP에 기록된다(단계 176).
각 ROP에 대해, 가상/물리 레지스터 맵 유닛(136)에 의해 제공되는 소스 IQ#들에 대한 의존성이 기록된다(단계 178). 주목할 사항으로서, 일 실시예에서, 각 의존성 벡터는 각 IQ#에 대해, 세트되면 그 IQ#가 할당된 ROP에 대한 의존성을 지시하고, 클리어되면 그 IQ#가 할당된 ROP에 대한 의존성의 결여를 지시하는 비트를 포함한다. 따라서, 다양한 소스들로부터의 의존성들의 기록은 이 다양한 소스들로부터의 의존성 벡터들의 OR링을 포함할 수 있다. 또한, 의존성의 각 소스는 의존성 벡터 내의 어느 비트들이 세트되어야 하는 지를 나타낼 수 있다.
도 10은 명령어 큐들(36A-36B)의 일 실시예의 동작을 나타낸 타이밍도이다. 클록 사이클의 위상들은 수직 점선들에 의해 범위가 정해진다. 각 위상과 각 클록 사이클은 범위가 정해진 영역의 상부의 라벨들로 표시된다. 도 10의 타이밍도는 기록 유효 라인의 표명 및 각 명령어 큐의 의존성 ROP의 스케쥴링에 의해 완료된 것으로서(이에 따라 의존성 ROP들이 스케쥴링될 수 있다) 표시되는 ROP의 타이밍도를 도시한다.
클록 0의 PH2 위상 동안, 명령어 큐(36A) 내의 픽 로직은 ROP에 대한 기록 유효 신호를 표명한다(참조 부호 180). 클록 1의 PH1 위상 동안, 제 1 의존성 ROP에 대한 스케쥴링 요구 신호는 제 2 저장소(90B)에 평가되고 표명된다(어떠한 다른 의존성도 아직 액티브하지 않다고 가정한다-참조 부호 182). 또한, 제 2 의존성 ROP에 대한 중간 스케쥴링 요구 신호는 제 2 저장소(90D)에서 평가되어 표명된다(어떠한 다른 의존성도 아직 액티브하지 않다고 가정한다). PHI 래치(94B)는 표명된 중간 스케쥴링 요구 신호를 래치한다(참조 부호 184).
클록 1의 PH2 위상 동안, 명령어 큐(36A) 내의 픽 로직은 실행을 위해 명령어 큐(36A)로부터 제 1 의존성 ROP를 스케쥴링한다(참조 부호 186). 또한, 제 2 의존성 ROP는 명령어 큐(36B)의 제 1 저장소(90C)에서 평가되고, 대응하는 요구 신호가 표명된다(어떠한 다른 의존성들도 액티브하지 않다고 가정한다-참조 부호 188).
클록 2의 PH1 위상 동안, 레지스터 파일(38A)은 제 1 의존성 ROP의 소스 오퍼랜드에 대한 레지스터 파일 판독을 시작한다. 이러한 레지스터 파일 판독은 클록 2의 PH2 위상에서 완료된다(참조 부호 190). 또한, 클록 2의 PH1 위상 동안, 명령어 큐(36B) 내의 픽 로직은 실행을 위해 명령어 큐(36B)로부터 제 2 의존성 ROP를 스케쥴링한다(참조 부호 192). 레지스터 파일(38B)은 클록 2의 PH2 위상 동안 제 2의존성 ROP의 소스 오퍼랜드에 대한 레지스터 파일 판독을 시작하고, 레지스터 파일 판독은 클록 3의 PH1 위상 동안 완료된다(참조 부호 194). 실행 코어(40A)는 클록 3의 PH1 위상 동안 제 1 의존성 ROP의 실행을 시작하고, 클록 3의 PH2 위상 동 안 실행을 완료한다(참조 부호 196). 유사하게, 실행 코어(40B)는 클록 3의 PH2 위상 동안 의존성 ROP의 실행을 시작하고, 클록 4의 PH1 위상 동안 실행을 완료한다(참조 부호 198).
(도 4 및 도 10에 도시된 바와 같이) 의존성 벡터들을 부분적으로 평가함으로써, 전체 의존성 벡터가 동시에 평가되는 경우 보다 높은 주파수 동작을 달성할 수 있다. 부분들중 하나가 평가되는 동안, 다른 부분들은 프리챠지될 수 있다. 프로세서(10)의 성능은 보다 높은 주파수의 결과로서 개선될 수 있다. 명령어 큐(36A)를 명령어 큐(36B)로부터 1/2 클록 사이클 오프시켜 연산시킴으로써(그리고, 유사하게 레지스터 파일(38A)을 레지스터 파일(38B)로부터 1/2 클록 사이클 오프시켜 연산시키고, 실행 코어(40A)를 실행 코어(40B)로부터 1/2 클록 사이클 오프시켜 연산시킴으로써), 반대측 명령어 큐에 저장되는 의존성 ROP에 ROP의 완료를 전달하는 데에 단지 1/2 클록 사이클 만을 이용함으로써 보다 높은 주파수를 구현할 수 있다. 또한, 1/2 클록 사이클 시간이 ROP의 결과를 레지스터 파일로 전달하는 데에 이용되며, 의존성 ROP는 결과를 액세스하기 위해 상기 레지스터 파일을 판독할 것이다. 큐들 간에 전달에 완전한 클록 사이클을 이용하는 실시예에 비해, 전체적인 명령어 쓰루풋이 향상될 수 있다.
주목할 사항으로서, 본 실시예에서 명령어 큐는 명령어 큐들(36A-36B)로 물리적으로 분할되지만, 다른 실시예들은 명령어 큐를 독립적으로 동작할 수 있는 더욱 큰 수의 물리적인 큐들로 분할할 수 있다. 예를 들어, (4개의 레지스터 파일들 및 4개의 명령어 코어들과 함께) 4개의 명령어 큐들을 이용하는 실시예가 이용될 수 있다. 명령어 큐들의 수는 어떠한 적절한 수가 될 수 있다. 또한, 의존성 벡터들의 평가는 필요에 따라 연속적인 위상들에서 평가되는 2개 이상의 부분들로 분할될 수 있다.
도 11은 버스 브리지(202)를 통해 다양한 시스템 구성요소들에 결합된 프로세서(10)를 포함하는 컴퓨터 시스템(200) 일 실시예의 블록도이다. 다른 실시예들도 가능하며 고려될 수 있다. 도시된 시스템에서, 주 메모리(204)는 메모리 버스(206)를 통해 버스 브리지(202)에 결합되고, 그래픽 제어기(208)는 AGP 버스(210)를 통해 버스 브리지(202)에 결합된다. 마지막으로, 다수의 PCI 디바이스들(212A-212B)은 PCI 버스(214)를 통해 버스 브리지(202)에 결합된다. 제 2 버스 브리지(216)가 또한 제공되어, EISA/ISA 버스(220)를 통해 1개 이상의 EISA 또는 ISA 디바이스들(218)에 대한 전기적인 인터페이스를 제공한다. 프로세서(10)는 외부 인터페이스(52)를 통해 버스 브리지(202)에 결합된다.
버스 브리지(202)는 프로세서(10), 주 메모리(204), 그래픽 제어기(208), 및 PCI 버스(214)에 연결되는 디바이스들 간에 인터페이스를 제공한다. 버스 브리지(202)에 연결된 디바이스들중 하나로부터 연산이 수신되면, 버스 브리지(202)는 상기 연산의 타겟(예를 들어, 특정한 디바이스, 또는 PCI 버스(214)의 경우, 타겟은 PCI 버스(214) 상에 있다)을 식별한다. 버스 브리지(202)는 상기 연산을 타겟 디바이스에 전달한다. 버스 브리지(202)는 일반적으로 소스 디바이스 또는 버스에 의해 이용되는 프로토콜로부터 타겟 디바이스 또는 버스에 의해 이용되는 프로토콜로 상기 연산을 변환한다.
PCI 버스(214)에 대해 ISA/EISA 버스로의 인터페이스를 제공하는 것에 부가하여, 제 2 버스 브리지(216)는 필요한 경우 부가적인 기능을 포함시킬 수 있다. 제 2 버스 브리지(216)의 외부에 있거나 또는 이에 통합되는 입력/출력 제어기(미도시)가 또한 컴퓨터 시스템(200) 내에 포함되어, 필요한 경우 키보드 및 마우스(222) 그리고 다양한 직렬 및 병렬 포트들에 대한 동작을 지원할 수 있다. 다른 실시예들에서는, 외부 캐시 유닛(미도시)이 또한 버스 브리지(202)와 프로세서(10) 사이의 외부 인터페이스(52)에 결합될 수 있다. 또한, 외부 캐시는 버스 브리지(202)에 결합될 수 있고, 이 외부 캐시에 대한 캐시 제어 로직이 버스 브리지(202) 내에 통합될 수 있다.
주 메모리(204)는 응용 프로그램들이 그에 저장되고 프로세서(10)가 주로 그로부터 실행하는 메모리이다. 적절한 주 메모리(204)는 DRAM(동적 임의 접근 메모리), 바람직하게는 SDRAM(동기 DRAM)의 다수의 뱅크들을 포함한다.
PCI 디바이스들(212A-212B)은, 예를 들어 네트워크 인터페이스 카드들, 비디오 액셀러레이터들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브들 또는 드라이브 제어기들, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터들 및 전화 카드들과 같은 다양한 주변 장치들을 예시한다. 유사하게, ISA 디바이스(218)는, 예를 들어, 모뎀, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 수집 카드와 같은 다양한 타입의 주변 장치들을 예시한다.
그래픽 제어기(208)는 디스플레이(226) 상에서의 텍스트 또는 이미지들의 렌더링을 제어하기 위해 제공된다. 그래픽 제어기(208)는 주 메모리(204)로/로부터 효과적으로 시프트될 수 있는 3차원 데이터 구조들을 제공하기 위해 당업계에 일반적으로 알려진 전형적인 그래픽 액셀러레이터를 구현할 수 있다. 이에 따라, 그래픽 제어기(208)는, 버스 브리지(202) 내의 타겟 인터페이스로의 액세스를 요구 및 수신하여 주 메모리(204)에 대한 액세스를 얻을 수 있다는 점에서, AGP 버스(210)의 마스터가 될 수 있다. 전용 그래픽 버스는 주 메모리(204)로부터의 신속한 데이터 검색을 가능하게 한다. 특정한 연산들에 대해, 그래픽 제어기(208)는 또한 AGP 버스(210) 상에 PCI 프로토콜 트랜잭션들을 생성하도록 구성될 수 있다. 이에 따라, 버스 브리지(202)의 AGP 인터페이스는 AGP 프로토콜 트랜잭션들 뿐 아니라 PCI 프로토콜 타겟 및 개시 트랜잭션들 모두를 지원하는 기능을 포함할 수 있다. 디스플레이(226)는 이미지 또는 텍스트가 표시될 수 있는 어떠한 전자 디스플레이이다. 적절한 디스플레이(226)로는 음극선관("CRT"), 액정 표시 장치("LCD") 등이 있다.
주목할 사항으로서, 상기 설명에서는 AGP, PCI, 및 ISA 또는 EISA 버스들이 예들로서 이용되었지만, 필요에 따라 어떠한 버스 아키텍쳐들이라도 이용될 수 있다. 또한, 주목할 사항으로서, 컴퓨터 시스템(200)은 추가적인 프로세서들(예를 들어, 컴퓨터 시스템(200)의 선택적인 구성 요소로서 도시된 프로세서(10a))을 포함하는 멀티프로세싱 컴퓨터 시스템이 될 수 있다. 프로세서(10a)는 프로세서(10)와 유사할 수 있다. 보다 구체적으로, 프로세서(10a)는 프로세서(10)의 동일한 카피가 될 수 있다. 프로세서(10a)는 (도 11에 도시한 바와 같이) 프로세서(10)와 외부 인터페이스(52)를 공유하거나, 독립적인 버스를 통해 버스 브리지(202)에 연결될 수 있다.
상기 설명을 통해 다양한 변형들 및 수정들이 당업자에게 명백해질 것이다. 하기의 청구항들은 이러한 모든 변형들 및 수정들을 포함하는 것으로 의도된다.
본 발명은 프로세서 및 컴퓨터 시스템들에 적용될 수 있다.
저장 어드레스 명령어 연산들에 대한 적재 명령어 연산들의 순서 의존성들을 실시하는 프로세서를 제공하여 전술한 종래 기술의 문제점을 해결하는 효과가 있다.

Claims (17)

  1. 명령어 연산에 상응하는 의존성 벡터를 생성하도록 구성된 의존성 벡터 생성 유닛과;
    상기 의존성 벡터와 상기 명령어 연산을 수신하도록 결합된 명령어 큐-여기에서 상기 명령어 큐는 상기 명령어 연산과 상기 의존성 벡터를 저장하도록 구성되고 상기 의존성 벡터 내에 지시된 각각의 의존성이 충족될 때까지 상기 명령어 연산의 스케줄링을 금지하도록 추가로 구성되고, 상기 의존성 벡터는 상기 명령어 큐 내의 각각의 다른 명령어 연산에 대한 의존성들을 지시할 수 있으며, 상기 의존성들은 적어도 하나의 순서 의존성을 포함함-를 포함하는 프로세서.
  2. 제 1항에 있어서,
    상기 순서 의존성은 상기 명령어 연산이 적재 명령어 연산인 경우 각각의 이전의 저장 어드레스 명령어 연산에 대해 검출되는 것을 특징으로 하는 프로세서.
  3. 제 2항에 있어서,
    상기 각각의 이전 저장 어드레스 명령어 연산에 대해 검출된 순서 의존성은 상기 각각의 이전 저장 어드레스 명령어 연산을 실행할 때 충족되는 것을 특징으로 하는 프로세서.
  4. 제 1항에 있어서,
    상기 순서 의존성은 저장-적재 포워드 의존성(store-load forward dependency)을 포함하는 것을 특징으로 하는 프로세서.
  5. 제 4항에 있어서,
    상기 저장-적재 포워드 의존성은 상기 저장-적재 포워드 의존성에 의해 식별된 저장 데이터 명령어 연산의 실행시에 충족되는 것을 특징으로 하는 프로세서.
  6. 제 1항에 있어서,
    상기 의존성들은 적어도 하나의 오퍼랜드(operand) 의존성을 추가로 포함하는 것을 특징으로 하는 프로세서.
  7. 제 6항에 있어서,
    상기 오퍼랜드 의존성은 상기 오퍼랜드가 상기 명령어 연산에서 이용가능하게 될 때 충족되는 것을 특징으로 하는 프로세서.
  8. 제 7항에 있어서,
    상기 오퍼랜드는 결과적으로 상기 오퍼랜드를 생성하는 명령어 연산의 실행시에 이용가능하게 되는 것을 특징으로 하는 프로세서.
  9. 프로세서에서 명령어 연산들을 스케줄링하는 방법으로서,
    각각의 명령어 연산에 상응하는 의존성 벡터를 생성하는 단계로서, 상기 의존성 벡터는 명령어 큐 내에서 각각의 다른 명령어 연산에 대한 의존성들을 지시할 수 있고, 상기 의존성들은 하나 이상의 순서 의존성들을 포함하는 단계와;
    상기 의존성 벡터 및 상응하는 명령어 연산을 상기 명령어 큐에 저장하는 단계와;
    상기 의존성 벡터에 의해 지시된 상기 의존성들 각각의 충족하는 단계와;
    상기 충족 단계에 응답하여 상기 상응하는 명령어 연산을 스케줄링하는 단계를 포함하는 스케줄링 방법.
  10. 제 9항에 있어서,
    상기 충족 단계는 상기 순서 의존성이 검출될 때 이전의 명령어 연산의 실행을 완료하는 단계를 포함하는 것을 특징으로 하는 스케줄링 방법.
  11. 제 9항에 있어서,
    상기 하나 이상의 순서 의존성들은 상기 명령어 연산이 적재 명령어 연산인 경우 각각의 이전의 저장 어드레스 명령어 연산에 대해 검출된 순서 의존성들을 포함하는 것을 특징으로 하는 스케줄링 방법.
  12. 제 11항에 있어서,
    상기 각각의 이전의 저장 어드레스 명령어 연산에 대해 검출된 순서 의존성은 상기 각각의 이전의 저장 어드레스 명령어 연산을 실행할 때 충족되는 것을 특징으로 하는 스케줄링 방법.
  13. 제 12항에 있어서,
    상기 하나 이상의 순서 의존성들은 저장-적재 포워드 의존성을 포함하는 것을 특징으로 하는 스케줄링 방법.
  14. 제 13항에 있어서,
    상기 저장-적재 포워드 의존성은 상기 저장-적재 포워드 의존성에 의해 식별된 저장 데이터 명령어 연산의 실행시에 충족되는 것을 특징으로 하는 스케줄링 방법.
  15. 제 9항에 있어서,
    상기 의존성들은 적어도 하나의 오퍼랜드 의존성을 추가로 포함하는 것을 특징으로 하는 스케줄링 방법.
  16. 제 15항에 있어서,
    상기 오퍼랜드 의존성은 상기 오퍼랜드가 상기 명령어 연산에서 이용가능하게 될 때 충족되는 것을 특징으로 하는 스케줄링 방법.
  17. 제 16항에 있어서,
    상기 오퍼랜드는 결과적으로 상기 오퍼랜드를 생성하는 상기 명령어 연산의 실행시에 이용가능하게 되는 것을 특징으로 하는 스케줄링 방법.
KR1020067007925A 1998-08-24 1999-03-24 저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘 KR100611341B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US09/138,886 US6212622B1 (en) 1998-08-24 1998-08-24 Mechanism for load block on store address generation
US09/139,178 1998-08-24
US09/138,886 1998-08-24
US09/139,178 US6212623B1 (en) 1998-08-24 1998-08-24 Universal dependency vector/queue entry

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020017002379A Division KR100608389B1 (ko) 1998-08-24 1999-03-24 저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘

Publications (2)

Publication Number Publication Date
KR20060070576A true KR20060070576A (ko) 2006-06-23
KR100611341B1 KR100611341B1 (ko) 2006-08-14

Family

ID=26836653

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020017002379A KR100608389B1 (ko) 1998-08-24 1999-03-24 저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘
KR1020067007925A KR100611341B1 (ko) 1998-08-24 1999-03-24 저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020017002379A KR100608389B1 (ko) 1998-08-24 1999-03-24 저장 어드레스 생성에 대한 적재 블록을 위한 메커니즘

Country Status (5)

Country Link
EP (2) EP1122639A3 (ko)
JP (2) JP3866921B2 (ko)
KR (2) KR100608389B1 (ko)
DE (1) DE69922238T2 (ko)
WO (1) WO2000011548A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101511837B1 (ko) * 2012-04-02 2015-04-13 애플 인크. 벡터 분할 루프들의 성능 향상

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6122727A (en) 1998-08-24 2000-09-19 Advanced Micro Devices, Inc. Symmetrical instructions queue for high clock frequency scheduling
US6212623B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Universal dependency vector/queue entry
CN1210649C (zh) * 2000-01-03 2005-07-13 先进微装置公司 能够发送及重新发送附属链接的排程器、包括该排程器的处理器以及排程方法
US6542984B1 (en) 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
US6622235B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
US6564315B1 (en) 2000-01-03 2003-05-13 Advanced Micro Devices, Inc. Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
GB0023698D0 (en) * 2000-09-27 2000-11-08 Univ Bristol Instruction issue in a processor
US6862676B1 (en) * 2001-01-16 2005-03-01 Sun Microsystems, Inc. Superscalar processor having content addressable memory structures for determining dependencies
GB0302602D0 (en) * 2003-02-04 2003-03-12 Young Arthur P Equipment and methods for real time application
EP1462934A1 (en) * 2003-03-29 2004-09-29 Deutsche Thomson-Brandt Gmbh Method and apparatus for forwarding of results
US7321964B2 (en) 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US7506132B2 (en) * 2005-12-22 2009-03-17 International Business Machines Corporation Validity of address ranges used in semi-synchronous memory copy operations
US7380104B2 (en) * 2006-04-25 2008-05-27 International Business Machines Corporation Method and apparatus for back to back issue of dependent instructions in an out of order issue queue
US8639889B2 (en) 2011-01-31 2014-01-28 International Business Machines Corporation Address-based hazard resolution for managing read/write operations in a memory cache
US9424041B2 (en) * 2013-03-15 2016-08-23 Samsung Electronics Co., Ltd. Efficient way to cancel speculative ‘source ready’ in scheduler for direct and nested dependent instructions
CN111694675B (zh) * 2019-03-15 2022-03-08 上海商汤智能科技有限公司 任务调度方法及装置、存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5201057A (en) * 1987-01-22 1993-04-06 Uht Augustus K System for extracting low level concurrency from serial instruction streams
US5655096A (en) * 1990-10-12 1997-08-05 Branigin; Michael H. Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
JPH0820949B2 (ja) * 1991-11-26 1996-03-04 松下電器産業株式会社 情報処理装置
US5465336A (en) * 1994-06-30 1995-11-07 International Business Machines Corporation Fetch and store buffer that enables out-of-order execution of memory instructions in a data processing system
US5710902A (en) * 1995-09-06 1998-01-20 Intel Corporation Instruction dependency chain indentifier
US5835747A (en) * 1996-01-26 1998-11-10 Advanced Micro Devices, Inc. Hierarchical scan logic for out-of-order load/store execution control

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101511837B1 (ko) * 2012-04-02 2015-04-13 애플 인크. 벡터 분할 루프들의 성능 향상

Also Published As

Publication number Publication date
DE69922238T2 (de) 2005-11-03
EP1121635B1 (en) 2004-11-24
DE69922238D1 (de) 2004-12-30
EP1122639A2 (en) 2001-08-08
KR20010085584A (ko) 2001-09-07
JP3866921B2 (ja) 2007-01-10
JP3919802B2 (ja) 2007-05-30
WO2000011548A1 (en) 2000-03-02
EP1121635A1 (en) 2001-08-08
EP1122639A3 (en) 2002-02-13
KR100611341B1 (ko) 2006-08-14
JP2006228241A (ja) 2006-08-31
KR100608389B1 (ko) 2006-08-09
JP2002527798A (ja) 2002-08-27

Similar Documents

Publication Publication Date Title
US6122727A (en) Symmetrical instructions queue for high clock frequency scheduling
US6212623B1 (en) Universal dependency vector/queue entry
US6212622B1 (en) Mechanism for load block on store address generation
JP3919802B2 (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
US6141747A (en) System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US6247106B1 (en) Processor configured to map logical register numbers to physical register numbers using virtual register numbers
US6119223A (en) Map unit having rapid misprediction recovery
EP1116102B1 (en) Method and apparatus for calculating indirect branch targets
US6260134B1 (en) Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US20070033385A1 (en) Call return stack way prediction repair
US8171240B1 (en) Misalignment predictor
US20030074530A1 (en) Load/store unit with fast memory data access mechanism
US6332191B1 (en) System for canceling speculatively fetched instructions following a branch mis-prediction in a microprocessor
US6393546B1 (en) Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
US6212621B1 (en) Method and system using tagged instructions to allow out-of-program-order instruction decoding
US6230262B1 (en) Processor configured to selectively free physical registers upon retirement of instructions
US6175909B1 (en) Forwarding instruction byte blocks to parallel scanning units using instruction cache associated table storing scan block boundary information for faster alignment

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120727

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20130723

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20140722

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20160630

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee