KR100459152B1 - 수퍼스칼라프로세서에서의순서를벗어난실행을위한통합된다중기능연산스케쥴러 - Google Patents

수퍼스칼라프로세서에서의순서를벗어난실행을위한통합된다중기능연산스케쥴러 Download PDF

Info

Publication number
KR100459152B1
KR100459152B1 KR10-1998-0702572A KR19980702572A KR100459152B1 KR 100459152 B1 KR100459152 B1 KR 100459152B1 KR 19980702572 A KR19980702572 A KR 19980702572A KR 100459152 B1 KR100459152 B1 KR 100459152B1
Authority
KR
South Korea
Prior art keywords
scheduler
column
operations
operand
execution
Prior art date
Application number
KR10-1998-0702572A
Other languages
English (en)
Other versions
KR19990064093A (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 US08/649,243 external-priority patent/US5884059A/en
Application filed by 어드밴스트 마이크로 디바이시즈 인코퍼레이티드 filed Critical 어드밴스트 마이크로 디바이시즈 인코퍼레이티드
Priority claimed from PCT/US1996/015743 external-priority patent/WO1997013201A1/en
Publication of KR19990064093A publication Critical patent/KR19990064093A/ko
Application granted granted Critical
Publication of KR100459152B1 publication Critical patent/KR100459152B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • G06F9/384Register renaming
    • 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/3854Instruction completion, e.g. retiring, committing or graduating

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)

Abstract

수퍼스칼라 프로세서(200)는 순서를 벗어난 실행을 위한 연산을 선택하는 스케쥴러(280)를 포함하고, 스케쥴러(280)는 연산에 대응하는 엔트리(540)로 분할되는 제어 논리 및 저장을 포함하며, 실행을 위해 요구되고 결과가 수행될 때까지 연산의 결과를 유지하는 재배열 버퍼로서 오퍼랜드를 제공하기 위해 병렬 파이프라인 실행을 위한 실행 유닛(251 내지 257)으로 연산을 발생하도록 엔트리를 사용하고, 실행 유닛(251 내지 257)에 강하게 연결되며, 파이프라인 병목을 최소화하고 실행 유닛(251 내지 257) 안으로 그리고 밖으로 유지하는 폭넓은 병렬 경로를 제공하며, 연산의 실행에 요구되는 모든 오퍼랜드들이 유효한 경우를 결정하기 위해 엔트리를 모니터하고 실행 유닛(251 내지 257)으로 요구된 오퍼랜드를 제공하며, 오퍼랜드는 레지스터 파일(290), 스케쥴러 엔트리, 또는 실행 유닛(251 내지 257)으로부터 얻어질 수 있고, 스캔 체인(530,532,534,536,538)은 엔트리를 함께 링크하며 실행을 위한 연산 및 오퍼랜드를 식별하는것을 특징으로 한다.

Description

수퍼스칼라 프로세서에서의 순서를 벗어난 실행을 위한 통합된 다중 기능 연산 스케쥴러{UNIFIED MULTI-FUNCTION OPERATION SCHEDULER FOR OUT-OF-ORDER EXECUTION IN A SUPERSCALAR PROCESSOR}
본 발명은 디지털 프로세서 시스템에 관한 것으로서, 특히 프로세서 성능을 최대화하기 위한 연산의 실행 순서 제어방법 및 회로에 관한 것이다.
일반적인 컴퓨터 프로그램은 컴파일되거나 또는 어셈블될 때 프로세서가 실행하는 기계 명령 또는 연산의 시퀀스를 생성하는 명령 리스트가 된다. 연산은 컴퓨터 프로그램의 논리에 의해 정의된 프로그램 순서를 갖고, 일반적으로 프로그램 순서대로 차례로 실행하려고 한다. 스칼라 프로세서는 다음 연산을 완료하기 전에 스칼라 프로세서가 하나의 연산을 완료하도록 제한하는 프로그램 순서로 연산을 실행한다. 수퍼스칼라 프로세서는 실행을 위해 동시에 연산하고, 다중 연산을 동시에 완료하는 복수의 실행 유닛을 포함한다. 따라서 수퍼스칼라 프로세서는 클럭 사이클당 다중 연산을 완료할 수 있기 때문에 동일한 클럭속도에서 연산하는 스칼라 프로세서보다 빠를 수 있다. 이에 반하여, 스칼라 프로세서는 이상적으로 사이클당 하나의 연산을 완료한다.
일반적으로 수퍼스칼라 프로세서는 연산이 동시에 실행될 수 있도록 연산의 실행을 스케쥴링하고 정상적인 프로그램 순서를 벗어나 완료한다. 컴퓨터 프로그램의 논리는 프로그램내 제 1 연산이 제 2 연산전에 실행되어야 함을 요구한다는 점에서 한 연산이 또다른 연산에 종속될 수 있기 때문에 순서를 벗어난 실행(out-of-order execution)에서 문제가 발생한다. 예를 들어, 연산이 실행되어야 하는지 여부는 때때로 분기 연산의 결과에 의존한다. 프로세서는 종종 분기 연산의 평가에 앞서 분기 연산의 결과를 예측하고, 그 예측에 기초하여 연산을 실행하게 된다. 분기 예측은 정확하지 않을 수 있고, 따라서 오류 연산이 실행되기 때문에 실행은 추론적(speculative)이어야만 한다. 또한, 많은 컴퓨터들은 연산이 에러, 인터럽트, 또는 트랩을 생성하기전 또는 후에 시스템의 상태가 알려지기를 요구한다. 그러나 연산이 순서를 벗어나 실행되는 경우, 프로그램 에러후 연산은 에러가 발생하기 전에 실행 완료되었을 수 있다. 따라서 프로세서는 실행되어서는 안되는 연산을 실행하지 않을 수 있어야 하고, 에러후 시스템의 상태를 구성할 수 있어야만 한다.
수퍼스칼라 구조는 연산을 스케쥴링하기 위해 일부 충돌하는 타겟을 성취하려고 시도한다. 하나의 목표는 프로그램의 완료에 실제 요구되는 연산의 동시 실행을 최대화하도록 효율적으로 스케쥴링 하는 것이다. 또 하나의 목표은 스케쥴링 회로가 복잡하지 않게 하는 것으로써 그 이유는 이러한 복잡성은 에러 없는 강건한(robust) 디자인을 제공하는데 있어 어려움을 증가시키고 회로 크기 및 비용을 증가시키기 때문이다. 또다른 하나의 목표는 프로세서가 높은 클럭율로 연산할 수 있도록 신속히 스케쥴링하는 것이다. 이러한 목표들을 실현하는 스케쥴링 회로가 요구된다.
도 1은 본 발명의 일 실시예에 따른 프로세서를 포함하고 있는 컴퓨터 시스템의 블록 다이어그램.
도 2는 본 발명의 일 실시예에 따른 프로세서를 보인 도면.
도 3은 본 발명의 일 실시예에 따른 순서를 벗어난 엔진에 의해 실행되는 RISC 명령들에 대한 예시적인 포맷의 설명도.
도 4A 내지 도 4D는 본 발명의 일 실시예에서의 4가지 타입의 RISC 연산들에 대한 파이프라인을 보인 도면.
도 5는 본 발명의 일 실시예에 따른 스케쥴러를 보인 도면.
도 6은 본 발명의 일 실시예에 따른 스케쥴러 저장소(scheduler reservior)의 일부분의 회로 다이어그램.
도 7은 도 5에 따른 스케쥴러에 저장된 연산 및 Op 쿼드(quad)에 대한 필드에 대한 예시적인 포맷의 설명도.
도 8A 및 도 8B는 빠른 선택을 위해 룩-어헤드(look-ahead)를 사용하는 스캔 체인의 설명도.
도 9A 내지 도 9C는 제2 실행 유닛을 위한 연산의 빠른 선택을 위해 룩-헤드를 사용하는 스캔 체인의 설명도.
도 10은 실행 유닛과 도 5의 스케쥴러 사이의 인터페이스의 블록 다이어그램.
도 11A 내지 도 11C는 본 발명의 프로세스 시스템 실시예들의 블록 다이어그램.
각 도면들에서 동일한 참조부호들은 유사하거나 동일한 구성요소를 나타낸다
본 발명에 따르면, 순서를 벗어난 실행 엔진은 동시에 연산할 수 있는 실행 유닛 세트 및 연산을 실행 유닛에 디스패치하는 스케쥴러를 포함한다. 스케쥴러는 실행될 연산에 대응하는 엔트리들을 포함한다. 각각의 엔트리는 관련 연산의 실행에 필요한 정보를 저장하는 저장부, 및 요구되는 경우 정확한 실행 유닛에 상기 정보를 전송하는 논리를 포함한다. 연산들은 첫째로는 연산 타입에 대한 실행 유닛의 타입 및 유효성에 따라 디스패치되고, 둘째로는 순차 프로그램 순서에 따라 디스패치된다. 따라서, 여러 타입의 연산들이 종종 정상적인 프로그램 순서를 벗어나서 실행된다. 동일한 타입의 연산들 역시 하나 이상의 실행 유닛이 특정 연산 타입에 대해서만 유효할 수 있기 때문에 순서를 벗어나 실행될 수 있고, 한 연산은 하나의 실행 파이프라인에서 유지될 수 있는데 반해, 다른 실행 유닛은 동일한 타입의 다음 연산들을 완료한다. 또한, 실행 파이프라인을 블록킹할 수도 있는 연산들이 파이프라인의 초기 단계로부터 범핑(bumping)되어, 단일 실행 유닛에 대한 연산들 조차도 프로그램 순서를 벗어나 실행될 수 있다.
스케쥴러내 엔트리들은 연산 타입에 따라 특화되지 않고, 실행 유닛들은 만일 임의의 실행 유닛이 정체(stall)되는 경우 블록킹될 수 있는 스테이션이나 큐들을 특화하지 않는다. 중단(abort) 가능한 연산의 실행 후, 그 연산의 결과는 관련스케쥴러 엔트리 및/또는 저장 큐내에 유지된다. 스케쥴러는 이 스케쥴러와 연결된 연산 커미트 유닛(operation commit unit)이 어떠한 폴트(fault)나 오예측을 갖지 않는 분기가 관련 연산을 진행하고 있는 것으로 결정할 때까지 결과를 유지한다. 만일 연산 커미트 유닛이, 가장 오래된 연산 실행의 결과들이 프로그램의 순차 실행으로 생성된다고 결정하는 경우, 그 결과들은 레지스터 파일, 상태 레지스터, 또는 메모리에 기입됨으로써 영구적으로 되며, 이 연산은 퇴거(retire)되어 스케쥴러로부터 제거된다. 만일 연산 커미트 유닛이 프로그램의 순차 실행에서 그 어떤 결과도 생성되지 않을 것이라고 결정하는 경우, 그 연산은 영구적 변경을 만듦이 없이 퇴거된다.
스케쥴링 기능 이외에, 이 스케쥴러는 또한 레지스터 재명명(register renaming)을 구현하는 재배열버퍼(re-order buffer)의 기능을 겸비하고 있다. 스케쥴러내 엔트리의 물리적 위치가 프로그램 순서를 나타내기 때문에 연산의 프로그램 순서를 나타내는 태그가 요구되지 않고, 엔트리내에 저장된 결과값이 프로그램 순서에서의 대응 포인트에 레지스터 및 상태값을 제공한다. 이것은 다양한 개별 실행 스테이션들간의 태그 정보 유지 또는 전송을 위해 요구되는 복잡성을 제거한다. 스케쥴러내 적절한 물리적 방향으로 향해지는 스캔 체인들이, 선행 연산들-이 선행 연산들은 후속 연산들을 위해 요구되는 레지스터 오퍼랜드에 영향을 미친다- 의 위치를 찾기 때문에, 연산 실행동안 실질적인 레지스터 재명명이 필요로 되지 않는다.
본 발명의 한 실시예에서, 스케쥴러는 계류중인 연산과 관련된 엔트리들의 열(rows)을 포함한다. 각각의 엔트리는 단일 연산에 대응하고, 엔트리들의 각각의 열은 다중 연산, 예컨대 4개의 연산에 대응한다. 스케쥴러를 열로 구성함으로써 스케쥴러 구조가 간단하게 되며, 연산들의 스케쥴링 및 실행이 연산들을 열로 그룹화하는 것으로부터 독립적이게 된다. 일부 방식에서 스케쥴러는 시프터 레지스터로서 연산하는데, 여기에서는 새로운 연산 그룹과 관련된 정보가 스케쥴러의 최상위 열에 로드되고, 오래된 연산들이 퇴거될 때 스케쥴러의 최하위 열을 향해 그룹으로 시프트다운된다. 따라서, 스케쥴러내에서의 연산의 위치는 그의 에이지(age)를 나타낸다. 새로운 연산들(즉, 프로그램 순서에서 나중의 것)은 스케쥴러의 최상위에 놓이고, 오래된 연산들(즉, 프로그램 순서에서 앞의 것)은 스케쥴러의 최하위에 놓인다.
대부분의 연산들은 스케쥴러의 최상위 열에 로드될때 즉시 실행될 수 있으나, 스케쥴러내 임의의 지점으로부터 실행 유닛들에 발행(issue)될 수도 있다. 연산을 위한 어떤 엔트리내의 상태 필드는, 그 연산이 발행되었는지, 실행 파이프라인의 특정 단계에 있는지, 또는 완료되었는지 여부를 나타낸다. 이 연산의 상태는 스케쥴러내 연산 위치와는 독립적이지만, 스케쥴러내에서 연산이 길어질수록 그 연산이 발행 및 완료될 기회는 더욱 커진다. 열에서의 연산들은 동시에 퇴거되어 다중 연산들이 각 클럭 사이클마다 완료될 수 있게 된다. 따라서, 다중 연산들은 스케쥴러에 로드될 수 있고, 다중 연산들은 각 클럭 사이클마다 스케쥴러로부터 제거될 수 있다.
조건부 분기 평가와 같은 그러한 일부 연산들 및 상태 플래그에 의존하는 레지스터 연산들은 이 연산들이 스케쥴러의 특정 열에 도달할 때 실행된다. 이것은 다른 열에서의 이러한 연산들의 실행을 지원하기 위한 범용 하드웨어를 제거함으로써, 상기 스케쥴러내의 하드웨어를 간략화하고, 비용을 줄이며, 그 속도를 빠르게 한다. 실행에 필요한 부수적인 오퍼랜드가 이용 가능하게 될 경우에 그에 따라 상기 연산들의 실행을 위해 열을 선택함으로써 스케쥴링 지연이 최소화된다. 예를 들어, 상태 플래그에 종속적인 연산들은, 오래된 연산들이 상태 플래그 종속 연산의 완료를 위해 요구되는 상태 플래그 값의 수정을 완료했을 가능성이 있는 지점에서, 스케쥴러에 의해 보다 하위적으로 프로세스된다. 상태 플래그 종속 연산의 실행을 스케쥴러내에서 보다 상위적으로 행할 수 있도록 하는 추가적인 회로는, 필요한 상태 플래그가 상태 플래그 종속 연산이 스케쥴러의 보다 높은 열에 있는 경우에 이용가능하게 될 가능성이 없기 때문에 실행속도 측면에서의 개선은 미약하게 된다.
스케쥴러는 실행 유닛과 긴밀히 연결되어 있고, 다중 실행 파이프라인에 연산에 관한 정보를 유지한다. 스케쥴러는 연산을 발행하고, 그 연산 정보를 요구될 때마다 연산 유닛에 제공하며, 결과들이 커미트 또는 중단될 때까지 완료된 연산으로부터의 결과들을 유지하여, 다른 연산의 실행을 위해 요구될 때 그 결과를 전송한다. 특히, 각각의 스케쥴러 엔트리는 관련 연산으로부터 발생된 레지스터 및 상태 결과들을 유지한다. 따라서 스케쥴러는 "논리" 레지스터(logic register)들에 대한 물리적 레지스터들로의 재명명 또는 맵핑없이 레지스터 재명명을 구현한다. 따라서, 스케쥴러는 연산들의 실행을 스케쥴링하는 단일의 통합된 구조를 제공하고, 실행동안 요구된 오퍼랜드 값을 제공하며, 레지스터 재명명을 구현하는 재배열 버퍼로서 역할을 한다.
본 발명은 개략적으로 다음의 순서로 기술된다.
Ⅰ. 개요
Ⅱ. 스케쥴러
A. 스케쥴러 로딩(Scheduler Loading)
1. 정적 엔트리 필드(Static Entry Field)
2. 동적 엔트리 필드(Dynamic Entry Field)
3. Op 쿼드 필드(Op Quad Field)
B. 로드/시프트 제어(Load/shift Control)
Ⅲ. 연산 실행
A. 발행 단계(Issue Stage)
1. 발행 선택 단계(Issue Selection Phase)
a. 발행 선택 스캔 체인(Issue Selection Scan Chains)
b. RUY용 발행 선택 스캔 체인(Issue Selection Scan Chains For RUY)
B. 오퍼랜드 전송 단계(Operand Forward Stage)
1. 오퍼랜드 선택 단계(Operand Selection Phase)
2. 오퍼랜드 전송 단계(Operand Transfer Phase)
3. 변위 전송(Displacement Forwarding)
4. 즉시 값 전송(Immediate Value Forwarding)
C. 데이터 오퍼랜드 인출(Data Operand Fetching)
D. 레지스터 연산 범핑(Resister Operation Bumping)
E. 로드/저장 순서화(Odering)
F. 중단 처리(Abort Handling)
Ⅳ. 글로벌 제어 논리
A. 외부 논리에 의해 사용되는 스케쥴러 정보
B. 글로벌 제어 기능
Ⅴ. 상태 플래그(Status Flags)
A. 상태 플래그 인출
B. cc-Dep RegOps에 상태 플래그 전송
C. 분기 예측 해결(Branch Prediction Resolution)
Ⅵ. 중단불가 연산의 동기화 (Synchronization of Non-Abortable Operations)
Ⅶ. 자체-수정 코드 처리 (Self-Modifying Code Handling)
Ⅷ. 연산 커미트 유닛 (Operation Commit Unit)
A. 커미트먼트 (Commitment)
1. 레지스터 커미트먼트
2. 상태 플래그 커미트먼트
3. 메모리 기입 커미트먼트
B. Op 쿼드 퇴거 (Op Quad Retirement)
C. 폴트 처리 (Fault Handling)
1. 로드 연산 폴트 처리(Load Operation Fault Handling)
2. FAULT 및 LDDHA/LDAHA Op 처리
3. 타겟 제한 위반 처리(Target Limit violation Handling)
4. 오예측 분기 처리(Mispredicted Branch Handling)
D. 중단 사이클 발생(Abort Cycle Generation)
Ⅸ. 프로세스 시스템(Processing Systems)
Ⅹ. 결론
부록 A : RISC86TM Syntax
부록 B : 의사-RTL 설명
Ⅰ. 개요
본 발명의 실시예에 따른 프로세서는 개인용 컴퓨터를 비롯한 다양한 애플리케이션에 적용될 수 있다. 도 1은 본 발명의 일 실시예에 따른 프로세서(200)가 포함되어 있는 컴퓨터 마더 보드(100)의 블록 다이어그램이다. 프로세서(200)는 복합 명령 세트를 실행할 수 있는 모놀리식 집적 회로이고, 0.35㎛ 디자인 규칙을 갖는 5 금속층 CMOS 공정과 같은 그러한 종래의 집적회로 공정을 사용하여 제조될 수 있다. 프로세서(200)와 연결된 칩셋에는 외부 레벨-2 캐쉬(125); 주 메모리(122)에 인터페이스를 제공하는 메모리 제어기(121); 및 PCI 버스(155) ISA 버스(165) 등의 로컬 버스에 인터페이스를 제공하는 버스 제어기(150,160)가 포함되어 있다.
도 2는 프로세서(200)의 실시예의 블록 다이어그램이다. 프로세서(200)에는 주 메모리(122) 및 로컬 버스(151,161)상의 디바이스들을 포함하는 컴퓨터 시스템의 어드레스 공간으로의 액세스를 제공하는 시스템 인터페이스(122)가 있다. 일 실시예에서, 시스템 인터페이스(205)는 수정(modified), 배타적(Exclusive), 공유(Shared), 및 효력없는(Invalid) 상태(MESI 상태) 및 구성 가능한 버스 스케일링(scaling)을 위한 멀티프로세서 캐쉬 코히어런시 지원을 갖는 64-비트 시스템 버스를 구비한다.
집적형의 레벨-2 캐쉬 제어 논리(210)는 레벨 2 캐쉬(125)를 형성하는 외부 SRAM 으로의 사설 버스와의 인터페이스를 제공한다. 시스템 인터페이스(205)로부터 분리된 레벨-2 캐쉬 인터페이스의 제공은, 상기 시스템 버스/칩셋으로부터 상기 레벨-2 캐쉬의 속도를 해제(uncouple)시켜 캐쉬를 더욱 빠르게 하고, 시스템 버스 및 캐쉬 버스의 사용을 감소시켜 각 버스에서 대역폭이 증가되게 한다. 레벨-2 캐쉬 제어 논리(210)는 또한 오프-더-쉘프 버스트 파이프라인 싱크로너스 SRAM들(off-the-shelf-burst pipelined synchronous SRAMs)에 최고 2MB 까지의 데이터 및 태그 저장을 위한 다중 클록 스케일링 및 구성 가능한 캐쉬 크기를 제공한다. 상기 레벨-2 캐쉬는 라이트백 방식(writeback policy) 및 32 바이트 라인 크기를 사용한다.
도 1에 도시된 구성의 대안으로서, 프로세서(200)는 시스템 및 캐쉬 액세스를 위한 단일 버스를 구비한다. 상기 버스는, 예를 들어, 펜티엄 등의 프로세서들을 위한 칩셋과 호환 가능한 핀-포-핀(pin-for-pin)일 수 있다.
레벨-1 명령 캐쉬(230) 및 레벨-1 데이터 캐쉬(220)는 프로세서(200)의 내부 자원으로서 레벨-1 캐쉬 제어 논리(215)를 통해 상기 레벨-2 캐쉬 및 시스템 버스와 연결된다. 일 실시예에서, 명령 캐쉬(230)는 16KB의 명령 및 추가를 프리디코드 정보를 저장할 수 있는 2-웨이 세트 연관 캐쉬(two-way set associative cache)이다. 데이터 캐쉬(220)는 32KB 데이터를 저장할 수 있는 2-웨이 세트 연관 캐쉬이다. 보다 빠른 연산을 제공함과 아울러 액세스 충돌을 피하기 위해, 데이터 캐쉬(220)는 사이클당 한 번의 판독 및 한 번의 기입을 허용하는 듀얼-포트 메모리(dual-ported memory)의 파이프라인 뱅크(pipelined bank)를 사용한다.
주 메모리(122)로부터의 명령은 명령 캐쉬(230)내로 로드된다. 일 실시예에 따르면, 상기 주 메모리(122)내의 명령은 PC 산업의 표준 x86 명령 세트와 같은 그러한 복합 명령 세트로부터의 CISC 명령이다. 상기 CISC 명령은 본 명세서에서 종종 매크로명령으로 언급되기도 한다. CISC 명령의 최고 16개 까지의 바이트가 사이클당 인출된다. 명령 캐쉬(230)의 로딩 시, 명령 바이트들은 매크로명령 경계의 빠른 식별을 위해 프리디코딩(predecoding)된다. 프리딩코딩은 코드 비트를 각 바이트에 첨가(append)하여, 상기 바이트로부터, 그 명령 바이트는 명령 내의 제1 바이트인 것으로 가정하는 후속 명령의 시점까지의 오프셋을 표시한다.
명령 디코더(240)는 무조건 분기 명령을 실행하고, 조건 분기 명령을 위한 분기 예측을 수행하며, 명령 캐쉬(230)에서 인출된 CISC 명령을 실행 엔진(250)을 위한 연산으로 변환한다. 실행 엔진(250)은 수퍼스칼라의 순서를 벗어난, 감소된 명령 세트 평가(RISC) 아키텍쳐를 구현한다. 명령 캐쉬(230)로부터의 단일 CISC 명령은 실행 엔진(250)을 위한 0(무조건 분기 명령에 해당함), 1, 또는 여러개의 연산으로 디코딩된다. 다중 CISC 명령은 매 사이클마다 디코딩되어, 실행 엔진(250)에 의해 실행되는 연산을 나타내는 RISC 명령 세트를 생성한다. 명령 디코더(240)는 가장 일반적인 CISC 명령을 위한 하드웨어 디코더(MacDec)(242) 및 일반적이지 않으며 더욱 복합적인 CISC 명령을 위한 벡터 디코더(244)를 포함하고 있다. 벡터 디코더(244)는 ROM(246)을 포함하는데, 이는 본 명세서에서 RISC 명령 시퀀스를 포함하는 엠코드(emcode) ROM(246)으로 언급되어지며, 때때로 엠코드로 언급되기도 한다. 벡터 디코더(244)는 디코딩되는 CISC 명령에 따라 엠코드 ROM(246) 내의 어드레스를 선택하고, 상기 CISC 명령을 대응 RISC 명령들로 변환하는 것이 요구될 때 엠코드 ROM(246)으로부터 판독되는 상기 RISC 명령들의 부분들을 대체 또는 수정한다.
도 3 및 부록 A는 x86 CISC 명령의 실행을 위해 최적화된 RISC 명령의 포맷 예를 설명하고 있는데, 이는 종종 RISC86 명령 세트로도 언급된다. 각각의 RISC86 명령은 레지스터 연산(RegOp), 로드-저장 연산(LdStOp), 또는 특별 연산(SpecOp) 중 하나이다. RegOp는 때때로 상기 RegOp 가 조건 코드(condition codes)를 수정하는 것을 나타내도록 '.cc' RegOp로서 지정되거나 상기 RegOp가 상태 코드에 의존하는 것을 나타내도록 'cc-dep' Reg로서 지정된다. LdStOp는 또한 로드 연산(LdOp)또는 저장 연산(StOp)으로 분류된다. 로드 즉시 값 연산(LIMMOp)은 기타 LdOp와는 다른 포맷을 갖는 LdOp의 타입이며, 때때로 다음에 오는 LdStOp 또는 RegOp에 대해 큰 즉시 값을 공급한다. SpecOp는 다른 포맷을 갖는 분기 연산(BrOp) 및 부동 소숫점 연산(FpOp)을 포함한다. 도 3 및 부록 A는 SpecOp의 예로서 단지 BrOp만을 설명하고 있다. 조건 분기 연산(BRCOND)은 조건 코드(도 3의 필드 cc)에 의존하는 BrOp의 타입이다.
본 발명의 일 실시예에서, 명령 디코더(240)는 x86 매크로명령을 RISC86 명령(또는 연산)으로 변환한다. MacDec(242)은 공통 매크로명령을 RISC86 연산의 짧은 시퀀스로 변환한다. 예를 들어, x86 매크로명령인 INC reg, PUSHreg, 및 Jcc tgt_addr이 RegOp, StOp 및 BRCOND 로 각각 디코딩되고; ADD reg, mem 매크로명령은 시퀀스에서 LdOp 및 RegOp 로 디코딩되고; ADD mem, reg 매트로명령은 시퀀스 에서 LdOp, RegOp 및 StOp 로 디코딩되며; 그리고 LEAVE 매크로명령은 시퀀스에서 RegOp, LdOp 및 RegOp 로 디코딩된다.
일 실시예에서, 명령 디코더(240)는 사이클당 두 개의 x86 매크로명령을 디코딩하여, 한 사이클에서 실행 엔진(250)내로 로드될 수 있는 네 개의 RISC86 연산의 세트를 생성한다. 만일 네 개의 연산 세트가 완료될 필요가 있다면, No-op 연산이 사용될 것이다. 만일 두 개의 연속 명령이 둘 또는 그 이상의 연산으로 각각 디코딩되는 명령으로 식별될 수 있다면, 사이클 동안 두 개의 매크로 명령이 디코딩된다. 대안적인 실시예에서, 세 개(또는 그 이상)의 매크로명령이 각 사이클에서 디코딩되어, 네 개(또는 그 이상) 연산의 세트를 형성할 수 있다. 벡터 디코더(244)는 비공통인 매크로명령을 디코딩하거나 또는 RISC86 연산의 긴 시퀀스로 디코딩하는데 사용된다. 그러한 시퀀스는 네 개 연산보다 더 길 수 있고, 실행 엔진(250)내로 로드되기 위해서 하나 이상의 클록 사이클을 요구하기도 한다.
무조건 분기 매크로명령에 대해, 명령 디코더(240)는 디코딩을 위해 인출된 다음 매크로명령을 결정하고 어떠한 연산도 발생하지 않는다. 조건 분기 매크로명령에 대해서, 디코더(240)는 조건 분기 명령을 뒤따르는 프로그램 카운터를 예측하는 분기 예측 논리(248)를 포함하고 있으며, 상기 예측이 올바른지 여부를 결정하기 위해 후에 평가되는 조건 분기(BRCOND)를 발생한다. 조건 분기(BRCOND)는 또한 디코딩되는 상기 매크로명령이 조건 분기가 아닌 경우 엠코드 ROM(246)로부터 RISC 명령 시퀀스에서도 발생될 수 있다. 엠코드 ROM(246)은 디코딩된 매크로명령에 대한 RISC 명령 시퀀스를 발생하는 때 벡터 디코더(244)가 사용하는 각각의 BRCOND를 위한 예측을 포함하고 있다. 상기 엠코드 ROM(244)으로부터 BRCOND를 위한 예측은 조건 분기 매크로명령으로부터 직접 발생된 BRCOND와 비슷한 방식으로 평가된다.
실행 엔진(250)은 병렬로 연산할 수 있는 7개의 실행 유닛(251 내지 257), 실행을 위한 연산을 발행하는 스케쥴러(280) 및 상기 스케쥴러(280)에 결합되어, 연산 결과를 커미트하는 연산 커미트 유닛(OCU)(260)을 구비한다. 각각의 실행 유닛은 자신이 실행될 수 있는 해당 연산을 갖는다. 로드 유닛(251) 및 저장 유닛(252)은 각각 LdOp와 StOp를 실행한다. 저장 큐(270)는 저장 유닛(252)에 의한 StOp의 추론적 실행으로부터 데이터를 일시적으로 저장한다. 저장 큐(270)로부터의 데이터는 StOp 결과가 아래에 설명되는 바와 같이, 커미트될 때 데이터 캐쉬(220)에 기입된다. 본 명세서에서 RUX 및 RUY 로도 언급되는 레지스터 유닛(253,254)은, 레지스터 파일(290)을 정상적으로 액세스하는 RegOp를 실행한다. 부동소숫점 유닛(255) 및 멀티미디어 유닛(256)은 부동소숫점연산(FpOp) 및 멀티미디어 애플리케이션을 위한 연산을 각각 실행하는 선택적 유닛이다. 일 실시예에서, 부동소숫점 유닛(255) 및 멀티미디어 유닛(256)은 생략된다.
스케쥴러(280)는 실행 유닛(251 내지 257)에 연산을 발행하고, 실행되는 동안 여러 실행 유닛에 의해 요구되는 정보를 디스패치하며, 연산들이 퇴거 될 때 연산 정보를 삭제한다. 스케쥴러(280)는 여러개의 엔트리로 분할되며, 각각의 엔트리는 연산과 관련된 저장장치 및 논리를 포함한다. 엔트리의 저장장치 내의 정보는 실행될, 실행되고 있는 또는 실행되었던 연산을 기술한다. 일 실시예에서, 네 개의 엔트리 세트가 그룹으로 구성되며, 비록 엔트리들이 물리적으로 열로 위치될 수 없을지라도 본 명세서에서는 열이라고 언급한다. 상기 열에서 네 개의 연산과 관련된 정보를 Op 쿼드로서 언급한다. 열은 개별 연산과 관련된 정보 및 논리에 부가적으로, 그룹으로서 Op 쿼드와 관련된 논리 및 저장 필드를 포함하고 있다.
스케쥴러(280)는 여러 면에서 시프트 레지스터처럼 연산한다. 일 실시예에서, 스케쥴러(280)는 6 개의 열로 된다. 디코더(240)는 매 클록 사이클마다 새로운 Op 쿼드를 스케쥴러(280)의 최상위 열에 로드시킬 수 있다. 상기 Op 쿼드는 상기 최상위 열로부터 상기 Op 쿼드가 퇴거되는 최하위 열로 시프트 다운된다. 상기 스케쥴러(280)내의 Op 쿼드의 위치는 Op 쿼드용 프로그램 순서에서 에이지(age) 또는 장소(place)를 나타낸다. 그러나 대부분의 연산에 대해, 상기 스케쥴러(280)내의 상기 위치는 실행 단계와는 독립적이다.
도 4A 내지 도 4D는 RegOps, LdOps, StOp 및 BrOp 와 관련된 멀티-단계 파이프라인을 보여주고 있다. 상기 파이프라인내의 각 단계는 초기 단계에서의 연산이 진행되는 것을 막는 단계들 중 하나에서 연산이 유지되지 않는 한 하나의 프로세서 클록 사이클을 필요로 한다. 두 개의 예비 단계(410,420)는 모든 실행 파이프라인에 공통이다. 단계(410) 동안, 최고 바이트의 CISC 명령이 명령 캐쉬(230)내로 인출 및 프리디코딩 되어, 명령 경계를 식별하고 후속 디코딩 시간을 감소시킨다. 단계(420) 동안, 명령 디코더(240)는 명령 캐쉬(230)로부터 최고 3개의 CISC 명령을 디코딩하고 상기 스케쥴러(280)의 최상위 열내로 로드되는 Op 쿼드를 형성한다.
그 후, 스케쥴러(280)는 발행 단계(430) 및 BrOp가 아닌 연산에 관련된 오퍼랜드 전송 단계(440)를 제어한다. 발행 단계(430) 동안, 스케쥴러(280)는 그의 엔트리들을 스캔하고, 해당 실행 유닛(251 내지 256)에 최고 6개의 연산을 발행한다. 스케쥴러(280)는 실행이 순서를 벗어나 추론적으로 되도록 오래된 연산 전에 발행을 위해 새로운 연산을 선택할 수도 있다. 발행 선택 동안, 오퍼랜드 종속성은 고려되지 않는다. 스케쥴러(280)는 발행 선택 단계(430) 동안 앞서 발행된 연산들을 위해, 오퍼랜드 전송 단계(440) 동안 오퍼랜드들을 실행 유닛(251 내지 256)에 전송한다. 단계(440) 동안, 레지스터 유닛(253 또는 254)에 발행된 일부 오퍼랜드는 만일 필요한 오퍼랜드가 여러 클록 사이클에서 이용가능하지 못하게 되는 경우 상기 파이프라인의 긴 차단을 회피하기 위해 파이프 라인으로부터 범핑(bumping)된다.
도 4A에 도시되어 있듯이, RegOp의 실행은 실행 단계(450)인 한 클록 사이클에서 완료된다. RegOp의 실행 단계(450)는 레지스터 유닛(253 또는 254) 내의 산술 논리 유닛(ALU)이, 실행되는 RegOp의 타입에 따라 RegOp의 소스 오퍼랜드를 프로세스하는 ALU 단계(451)와, 그리고 레지스터 유닛(253 또는 254)으로부터의 결과 및 상태값이 상기 RegOp에 해당하는 엔트리내로 다시 저장되는 결과 전송단계(452)를 포함한다. 상기 엔트리 내에 저장된 결과 및 상태 플래그는 레지스터 파일(290)에 커미트되고, 그리고 커미트하는 것이 안전하거나 안전하게 될 때 상기 구조적 상태 플래그에 후속적으로 커미트된다. 연산의 완료 후 또는 완료 시에, 상기 연산의 결과는 커미트될 수 있고, 상기 연산은 그 연산을 포함하는 Op쿼드를 스케쥴러(280)부터 시프트시킴으로써 퇴거될 수 있다. 완료와 커미트사이에서, 연산으로부터의 상기 결과 및 상태 플래그들은 다른 명령의 실행을 위해 스케쥴러(280) 내에서 이용가능하다.
도 4B 및 도 4C는 LdOp 및 StOp가 두 개의 실행 단계(450,460)를 필요로 함을 보여주고 있다. 실행 단계(450,460)는 데이터 액세스를 위한 가상 어드레스를 결정하는 어드레스 평가 단계(453), 데이터 캐쉬를 액세스하기 위해 어드레스를 맵핑하는 DTLB 매핑 단계(455), 및 연산에 대응하는 엔트리 내의 저장장치를 위해 그 연산의 결과를 리턴시키는 결과 전송 단계를 포함한다. 연산이 완료되면 스케쥴러(280)는 그 결과- 이 결과는 추론적이고 그리고 커미트 하는 것이 안전하거나 안전하게 될 때 만이 커미트된다- 를 수신한다.
도 4D는 BrOp의 프로세스를 설명한다. 명령 디코더(240)가 CISC 분기 명령을 디코딩하고 BrOp를 발생하면, 디코더(240)는 다음 CISC 명령이 디코딩될 새로운 프로그램 카운터를 결정한다. 무조건 분기에 대해, 상기 새로운 프로그램 카운터 내에는 불확실성이 없으며, 디코더(240)는 상기 프로그램 카운터를 변경시킴으로서 무조건 분기를 완료한다. 명령 디코더(240)는 새로운 프로그램 카운터 값을 평가하기 위해 오래된 프로그램 카운터 값 및 오프셋의 신속한 가산을 위한 병렬 가산기를 포함한다. 명령 디코더(240)는 또한 16-엔트리 리턴 어드레스 스택을 포함하는 바, 리턴 명령 후 명령 어드레스들의 나중의 예측을 위해 서브루틴 호출(subroutine calls)을 뒤따르는 명령 어드레스들이 상기 스택에 푸쉬(push)된다.
조건 분기에 대해, 디코더(240)는 조건 분기 다음에 오는 프로그램 카운터 값을 예측하고, Op 쿼드내의 BRCOND를 스케쥴러(280)에 삽입시킨다. 일 실시예에서, 상기 분기 예측은 당 기술분야에서는 종종 2-레벨 분기 예측이라 언급되는 분기 상관 프로세스이다. 발명의 명칭이 "Configurable Branch Prediction for a Processor Performing Speculative Execution"인 미국 특허 제5,454,117호는 분기 상관 프로세스의 사용예를 개시하고 있다. 상기 분기 상관은 분기 명령 이후 실행된 명령의 어드레스를 예측한다.
명령 디코더(240)내의 분기 예측 논리(248)는 8,912-엔트리 분기 이력 표(BHT)를 사용하는데, 각 BHT 엔트리는 분기가 취해질 또는 취해지지 않을 경향을 나타내는 두 개의 표준 이력 비트를 포함하고 있다. 상기 엔트리는 프로그램 카운터(PC)로부터의 4 비트 및 글로벌 분기 이력의 9 비트의 조합을 사용하여 인덱스(index)되어, 분기가 취해질지 아닐지는 상기 분기의 어드레스로부터 뿐만 아니라 프로그램 실행이 상기 분기에 이르는데 있어 취하게 되는 경로로부터 예측되게 된다. 이것은 하기에 설명하는 바와 같이 스케쥴러(280)를 플러쉬(flush)해야만 하는 경우를 감소시키는 개선된 분기 예측을 제공한다.
만일 예측 또는 변경된 프로그램 카운터가 디코더(240)의 16-엔트리 분기 타겟 캐쉬에서 히트(hit)하면, 다음 CISC 명령은 x86 명령 디코더 단계(420)의 끝까지 디코딩할 위한 준비에 놓이게 된다. 그렇지 않은 경우, 어드레스를 평가하고 그리고 디코딩을 위한 다음 CISC 명령을 인출하기 위해, 클록 사이클(424)이 팔요로 된다.
다른 모든 연산과 마찬가지로, 스케쥴러(280)에 로드된 조건 분기 연산(BRCOND)은, 오래된 연산이 퇴거될 때 스케쥴러(280)의 최하위를 향해 시프트되지만, 그러나 BRCOND에 대해 그 어떠한 발행 선택 스캔도 사용되지는 않는다. BRCOND는 상기 BRCOND가 스케쥴러(280)의 열(4)에 도달하게 될 때 분기 조건 평가 단계(464)로 들어간다. 분기 평가 유닛(257)은 각 BRCOND에 대해 요구되는 조건 코드(cc)가 유효한 경우 사이클당 하나의 BRCOND를 평가할 수 있다. 분기 평가 유닛(257)은 BRCOND를 뒤따르는 정확한 프로그램 카운터를 결정함과 아울러 이 BRCOND가 정확히 예측되었는지를 결정한다. 이 요구된 조건 코드들은 오래된 연산(열(4) 및 열(5)내의 연산)이 완료되었을 것 같기 때문에 상기 BRCOND가 열(4)에 도달하게 될 때 유효하게 될 것이다. 만일 상기 요구된 조건 코드가 아직 유효하지 않다면, 상기 BRCOND는 상기 Op 쿼드가 열(4)로부터 시프트 되는 것을 차단함으로써 정체(hold up)된다. BRCOND가 정체되면, 열(4) 위의 Op쿼드들은 열 0 내지 3 중 하나 또는 그 이상이 빈(즉, 유효하지 않은) Op 쿼드가 아닌 한 시프트 되는 것이 차단된다. 만일 열(0 내지 3) 각각이 유효한 Op 쿼드를 포함하고 있다면, 명령 디코더(240)는 새로운 Op 쿼드를 스케쥴러(280)로 로드시킬 수 없으며, 상기 BRCOND는 정체된다. 만일 열(3)의 시프트가 정체되면 열(4 및 5)의 시프트 역시 정체되는 바, 이는 열(4) 또는 열(5)의 시프팅이 빈 Op쿼드를 만드는 것을 요구할 수도 있기 때문이며, 상기 실시예에서 상기 스케쥴러(280)의 최상위 열 내에 빈 Op-쿼드만을 생성할 수 있다.
만일 분기가 올바르게 예측되었다면, 인출, 디코딩 및 실행 연산이 중단 없이 지속될 것이다. 만일 분기가 올바르게 예측되지 않았다면, 스케쥴러(280)는 BRCOND를 뒤따르는 정확한 명령 어드레스에서 디코더(240)를 재연산시키며, 디코더(240)는 정확한 명령을 인출 및 디코딩 하게되고, 오예측된 분기보다 더 오래된 연산들로부터의 결과는 스케쥴러(280)로부터 커미트 및 퇴거되게 된다. 스케쥴러(280)에 새로운 명령을 로딩하는 것은, 상기 오예측된 BRCOND가 퇴거되고 스케쥴러(280)가 플러쉬될 때까지 중단된다. 상기 오예측된 분기가 퇴거되면, 실행 유닛(250)는 스케쥴러(280) 및 실행 유닛(251 내지 257) 내의 모든 연산을 무효화함으로써 플러쉬된다. 모든 연산은 무효화될 수 있는데, 이는 상기 오예측된 분기에 앞선 모든 연산이 상기 오예측된 분기가 상기 스케쥴러(280)의 최하위 열로부터 시프트되기 전에 완료 및 퇴거되고, 그리고 상기 오예측된 분기가 퇴거되기 전에는 스케쥴러(280)에 로드되는 그 어떠한 새로운 명령도 없기 때문이다. 모든 연산의 무효화는 퇴거해야 하는 연산의 식별이 요구되지 않기 때문에 프로세스를 간단하게 해준다. 새로운 명령의 로딩을 지연시키는 것은 성능의 개선 효과가 별로 없는바, 이는 일반적으로 상기 오예측된 분기가 최하위 열로 시프트하고 그리고 디코더(240)가 상기 새로운 제1 명령을 인출하여 사용 가능하게 하는데 요구되는 시간과 거의 같은 양의 2 개의 클록 사이클 다음에 퇴거되기 때문이다.
실행 엔진(250)은 중단 가능한 연산 및 중단가능하지 않은 연산을 실행한다. 중단가능하지 않은 연산은 추리적으로 실행될 수 없고, 결과가 안전하게 커미트될 때만 실행된다. 중단 가능한 연산은 추론적으로 실행된다. 중단 가능한 연산이 그 파이프 라인의 최종 단계에 도달하고 완료된 후, 그 실행의 모든 결과는 연산 커미트 유닛(260)이 그 결과를 커미트하는 것이 안전하다고 결정할 때까지 스케쥴러(280)내에 저장된다. 매 사이클에서, 하나의 Op 쿼드(최고 4개의 연산까지)가 커미트되어 스케쥴러(280)로부터 퇴거될 수 있다.
Ⅱ. 스케쥴러
도 5는 스케쥴러(280)가 최고 24개의 연산과 관련된 24 엔트리를 포함하고 있는 일 실시예를 보인 것이다. 각각의 엔트리는 스케쥴링 저장소(540)내의 저장 요소(보통 플립-플롭), 및 상기 엔트리와 관련된 논리(530,532,534,536 및538) 부분들을 포함하고 있다. 상기 저장 요소는 실행을 기다리거나, 실행중이거나 또는 실행 완료된 연산(Op)에 관한 정보를 저장한다. 연산 디코더(510)는 명령 디코더(240)로부터 4개의 RISC86 연산을 수신하고, 상기 스케쥴러 저장소(540)의 최상위 열 내에 새로운 Op 쿼드를 로드한다. 상기 저장소(540)의 필드들이 도 7에 도시되어 있는데, 이들은 도 3에 도시된 관련 RISC86 명령의 필드와 관련이 있지만 동일하지는 않다. 몇몇 필드는 관련 연산의 실행을 통하여 동일한 값을 유지하고 있으며, 본원에서는 '정적 필드(static field)'로 언급된다. 다른 필드들은 연산이 실행을 완료할 때와 같이 나중에 로드되거나 변경되며, 이 필드들은 '동적 필드(dynamic field)'로 언급된다.
상기 스케쥴링 저장소(540)내의 저장 요소는 6개 열의 시프트 레지스터로서 볼 수도 있다. 각각의 열에는 4개의 엔트리가 포함되어 있는데, 각 엔트리는 RISC86 명령과 관련되어 있다. 각각의 클록 사이클에서, 열 내의 정체되지 않는 Op 쿼드는 만일 다음 행이 빈 행이거나 하향 시프트하는 Op 쿼드를 포함하고 있는 경우, 상기 다음 열로 하향 시프트된다. 최하위 열(열(5))내의 Op 쿼드는, 만일 상기 최하위 열과 관련된 모든 연산이 커미트되었다면 스케쥴러(280)로부터 시프트할 것이다.
도 6은 스케쥴링 저장소(540) 부분의 일 실시예를 보여주고 있다. 도 6에 도시된 스케쥴러 저장소(540)의 부분은 스케쥴러(280)의 열(3)내의 동적 필드를 위한 저장 요소(에지 트리거 플립-플롭(623)) 및 동일 열 내의 정적 필드를 위한 저장 요소(에지 트리거 플립-플롭(643))을 포함하고 있다. 열(3)은 도 6에 도시되어 있고, 하기에 설명하는 상기 동적 필드 및 정적 필드내의 각 비트를 위한 비슷한 저장 요소를 포함하고 있다. 상기 스케쥴링 저장소(540)내의 다른 열들은 열(3)과 유사하거나 동일하며, 열(3)과 직렬로 연결되어 있다.
도 6에서, 플립-플롭(642,643,644)은 행(2,3,4) 각각에 동일한 정적 필드의 비트를 저장하고, Op쿼드가 열(2)로부터 열(4)로 시프트할 때 플립-플롭(642)으로부터 플립-플롭(643)으로 시프트한다. 글로벌 제어 논리(520)는 신호 LdEntry[i]를 각 열(i=0∼5)에 대해 하나씩 발생하며, 이 신호들은 대응 열로의 시프트 발생을 제어한다. 상기 열들은 클록 신호(CLK)의 상승 에지(rising edge)에서 오버라이트된다. 예를 들어, 신호 LdEntry 3은 플립-플롭(643)을 인에이블(enable)하거나 또는 디스에이블(disable)하고, 신호 LdEntry 4는 플립-플롭(644)을 인에이블 또는 디스에이블 한다. 따라서, Op 쿼드가 열(4)에서 정체되면, 신호 LdEntry 4는 디어서트(deassert)되어 플립-플롭(644)이 임의의 값을 유지하게 된다. 신호 LdEntry[i]의 독립성은 정체된 Op 쿼드의 위에 있을 수 있는 빈 Op 쿼드 엔트리를 채울 수 있게 한다. 예를 들어, 만일 Op 쿼드의 열(4)에서 정체되면, 신호 LdEntry 3이 어서트(assert)될 수 있어 열(2)로부터 값 OpField2 가 클록 신호(CLK)의 상승 에지에서 열(3)로 시프트되게 된다.(예를 들어 명령 디코더(240)가 분기 타겟 캐쉬 미스로 인해 매 사이클마다 Op 쿼드를 제공할 수 없는 경우 빈 열들이 발생할 수 있다). 부록 B 의 표 B.1 은 정적 필드를 구현하는 회로의 연산을 설명한다.
외부 스케쥴링 저장소(540)로부터 새로운 데이터가 동적 필드에 삽입되어 오래된 데이터를 시프트할 수 있기 때문에 동적 필드가 정적 필드보다 더 복잡하고, 상기 새로운 데이터는 다음 열로 시프트하거나 시프트하지 않을 수 있는 정확한 Op 쿼드와 함께 머물러 있어야 한다. 신호 OpFieldValue2 및 OpFieldValue3은 열(2) 및 열(3) 내의 각각의 제1 및 제2 Op 쿼드와 관련된 정보를 나타낸다. 스케쥴러 저장소(540) 밖의 회로는 신호 NewValue2 및 NewValue3을 발생하여 상기 제1 및 제2 Op 쿼드와 각각 관련된 정보를 변경시킨다. 멀티플렉서(632)는 새로운 정보 신호 NewOpField2가 새로운 값 NewValue2로 변하는지를 선택하여 상기 제1 Op 쿼드를 변화시키거나, 오래된 값 OpFieldValue2와 같은 값으로 유지된다. 멀티플렉서(633)는 새로운 정보 신호 NewOpField3이 새로운 값 NewValue3으로 변하는지를 선택하거나 또는 오래된 값 OpFieldValue3과 같은 값으로 유지된다.
상기 제1 Op 쿼드와 관련된 동적 필드 값이 변하든지 변하지 않든지 간에, 값 NewOpField2는 클록 신호(CLK)의 상승 에지에서 열(2)에 기입되거나 또는 열(3)에 기입될 수 있다. 상기 제1 Op 쿼드를 열(3)로 시프트시키기 위해, 신호 LdEntry3은 멀티플렉서(613)가 신호 NewOpField2를 신호(CLK)의 상승 에지에서 플립-플롭(623)에 기입되는 신호 NextOpField3로 선택하게 한다. 상기 제1 Op 쿼드가 열(3)내로 시프트 되는 것을 막기 위해, 신호 LdEntry3은 멀티플렉서(613)가 플립-플롭(23)에 기입되는 신호 NewOpField3을 선택하게 한다. 신호 LdEntry4 및 멀티플렉서(614)는 마찬가지로 상기 제2 Op 쿼드가 열(3)로부터 열(4)내로 시프트 되는 것이 허용되는지를 선택한다. 첨부 B 의 표 B.2 는 동적 필드를 구현하는 회로의 연산을 설명하고 있다.
Ⅱ.A 스케쥴러 로딩
명령 디코더(240)는 매크로명령을 디코딩하고 스케쥴러(280)의 열(0)(최상위)가 비워지거나 또는 행(1)으로 시프트하는 Op 쿼드를 포함할 때마다 스케쥴러(280)로 전송되는 4개의 RISC86 명령의 세트를 형성한다. 엠코드 ROM(246)은 Op쿼드를 포함할 수 있는데, 여기서 상기 Op 쿼드에 있는 연산들 모두가 x86 명령구현의 실제 부분은 아니다. 이것은 여러 가지의 x86명령이 엠코드 ROM(246) 내의 동일한 코드내의 여러 엔트리 지점을 가지고 있거나 또는 엠코드 ROM(246) 내의 연산이 Op 쿼드의 중앙 내로 분기를 일으킬 수 있기 때문에 발생될 수 있다. 디코딩되는 상기 x86 명령을 필요로 하지 않는 명령은 널(null)된다(NO-OP로 변경됨). 명령 디코딩은 환경에 따른 가변적 연산 필드의 대체를 포함하고 있다. 가변적 대체를 위해, 에뮬레이션 환경이 예를 들면, 디폴트 어드레스, 현재 코드 세크먼트용 데이터 크기 및 레지스터 수, 및 디코딩되는 x86 명령을 포함하는 환경적 변수를 유지하고 있다. 상기 환경적 변수는 엠코드 ROM(246)으로부터의 연산에서 장소홀더(placeholder) 값을 교체시킨다. 환경에 따른 가변적 대체는 여러 가지 환경적 변수들이 하나의 엠코드 섹션을 변환시켜 여러 가지 x86 명령을 수행하기 때문에 엠코드 ROM(246)의 유연성을 증가시킨다. 명령 디코더(240) 및/또는 연산 디코더(510)는 필요한 경우 환경에 따른 가변적 대체를 수행한다.
스케쥴러(280)에서, 연산 디코더(510)는 명령 디코더(240)로부터 Op 쿼드를 수신하고, 스케쥴링 저장소(540)의 최상위 열내의 저장 필드를 채운다. 만일 명령 디코더(240)에서 어떠한 Op 쿼드도 이용가능하지 못한 경우, 연산 디코더(510)는 최상위 열 내의 Op 쿼드가 시프트 다운할 때 빈 Op 쿼드를 생성한다.
도 7은 정적 엔트리 필드(541), 동적 엔트리 필드(542) 및 스케쥴러 저장소(540) 내의 Op 쿼드 필드(549)의 예를 설명하고 있다. 엔트리 필드(541,542)의 초기 값은 대응 RISC86 명령에 의존한다. 연산 디코더(540)는 다른 필드에 기초하여 RISC86 명령으로부터 일부 필드를 수정하고, 기존 필드로부터 새로운 필드를 도출해 내고, 일부 필드를 물리적으로 다른 필드로 교체하며, 일부 필드를 변경시키지 않은 채로 통과시킨다. Op 쿼드 필드는 전체가 Op 쿼드에 해당하는 정보로부터 발생된다.
Ⅱ. A.1 정적 엔트리 필드
일 실시예에서, 각각의 엔트리에는 다음과 같이 정의되는 정적 필드(541)가 포함되어 있는데, 모든 신호는 액티브 하이(active high)이다.
Field Type[2:0] 은 엔트리와 관련된 연산의 타입을 특정한다. 가능한 타입으로는 SpecOp, LdOp, StOp; 메모리를 참고하거나 또는 폴트가능한(faultable) 어드레스를 발생하는 StOp; 레지스터 유닛(253)에 의해서만 실행 가능한 RegOp;및 레지스터 유닛 (253) 또는 (254) 중 하나에 의해 실행 가능한 RegOp가 있다. 멀티미디어 유닛(256)은 멀티미디어 애플리케이션에 관한 RegOp의 선택된 타입을 실행한다. 부동 소숫점 연산(FpOp)은 부동소숫점 유닛(255)에 의해 실행되는 SpecOp의 타입이다. 부록 B 의 표 B.3 은 필트 타입에 대한 값을 발생하는 연산 디코더(510)의 회로를 설명하고 있다.
필드 LD_Imm은 연산이 이전 LIMMOp로부터 즉시 값을 필요로 하는지 여부를 나타낸다. 만일 연산이 상기 엔트리 내의 필드 DestVal 내부에 유지되는 큰 변위 대 작은(8-비트) 변위를 사용하는 LdStOp이면, 상기 즉시 값은 큰 변위이다. RegOp에 대해, 상기 즉시 값은 상기 제2 오퍼랜드 Src2이다. 부록 B 의 표 B.4 는 필드 Ld_Imm에 대한 값을 발생하는 연산 디코더(510)의 회로를 설명하고 있다.
필드 SrclReg[4:0], Src2Reg[4:0] 및 SrcStReg[4:0]은 상기 제1 소스 오퍼랜드 Src1, 상기 제2 소스 오퍼랜드 Src2 및 상기 연산의 저장 데이터 오퍼랜드를 각각 보유하는 레지스터를 식별하는 레지스터 번호를 가지고 있다. 부록B 의 표 B.5, B.6 및 B.7 은 SrclReg, Src2Reg, Src3Reg 및 SrcStReg에 대한 값을 발생하는 연산 디코더(510)의 회로를 설명하고 있다.
필드 DestReg[4:0]은 상기 연산의 목적지 레지스터를 식별하는 레지스터 번호를 가지고 있다. 부록 B 의 표 B.8은 필드 DestReg에 대한 값을 발생하는 연산 디코더(510)의 회로를 설명하고 있다.
필드 SrclBM[1:0], Src2BM[1:0] 및 Src2BM[2]는 오퍼랜드 Src1와 Src2의 어떤 바이트가 연산의 실행에 유효해야 하는지를 나타낸다. 정의에 의해, SrclBM[2] 및 Src2BM[2]는 Srcl2BM[2]와 같다. SrclBM[1:0] 및 Src2BM[1:0]의 비트 2,1 및 0 은 각각 비트[31:16], [15:8] 및 [7:0]을 나타낸다. 부록 B의 표 B.9는 필드 SrclBM[1:0], Src2BM[1:0] 및 Srcl2BM[2]에 대한 값을 발생하는 연산 디코더(510)의 회로를 설명하고 있다.
필드 SrcStBM[2:0]은 저장 데이터 오퍼랜드의 어떤 바이트가 StOp의 완료에 필요한 지를 나타낸다. 상기 비트 해당분은 SrclBM 또는 Src2BM에 대한 것과 같다. 부록 B의 표 B.10은 필드 SrcStBM에 대한 값을 발생하는 연산 디코더(510)의 회로를 설명하고 있다.
필드 OpInfo[12:0]는 상기 연산이 실행 가능한지 여부에 따라 상기 실행 유닛 또는 상기 연산 커미트 유닛(OCU)을 위한 추가 정보를 보유한다. 필드 OpInfo는 RegOp, LdStOp 또는 SpecOp 인지 여부에 따라 세 가지의 가능성 있는 필드 정의를 갖는다. RegOp에 대해, 필드 OpInFo는 RSIC86 Type 필드로부터의 6비트; RSIC86 Ext 필드로부터의 4비트; RISC86 R1필드; 및 연산을 위한 유효 데이터 크기 DataSz 를 나타내는 2비트를 포함한다. LdStOp에 대해, 필드 Oplnfo는 RISC86 Type 필드로부터 4 비트; RISC86 ISF 필드로부터 2 비트; RISC86 Seg 필드로부터 4 비트; 연산을 위한 유효 데이터 크기 DataSz를 나타내는 2 비트; 및 어드레스 평가를 위한 유효 어드레스 크기(32/16 비트)를 나타내는 비트 AddrSz를 포함하고 있다. SpedOp에 대해, 필드 OpInfo는 RISC86 Type 필드로부터 4 비트 및 RISC86 cc 필드로부터 5 비트를 포함하고 있다. 부록 B의 표 B.11은 필드 OpInfo에 대한 값을 발생하는 연산 디코더(510)의 회로를 설명하고 있다.
Ⅱ. A.2 동적 엔트리 필드
동적 엔트리 필드(542)는 연산 디코더(510)에 의해 초기화되지만, 연산이 실행되는 동안에는 변경될 수 있다. 일반적으로, 각각의 엔트리에는 필요시 동적 필드를 변경하기 위한 논리가 포함되어 있다. 일 실시예의 엔트리용 동적 필드(542)를 아래에 설명하였다.
필드 State[3:0]은 도 4A 내지 도 4D의 파이프라인에 관한 연산의 실행 상태를 나타낸다. (S3,S2,S1은 State[3:0]에 대한 교번 신호 이름이다). 필드 State 는 4 비트를 지나 하나의 필드를 시프팅 시킴으로써 5개의 가능한 상태를 엔코딩한다. 값 b0000 은 "비발행" 상태를 나타내고; b0001, b0011 및 b0111 은 오퍼랜드 전송 단계, 실행 단계 1 및 실행 단계 2 에서의 연산을 나타내며; 그리고 b1111 은 연산이 완료되었음을 나타낸다. 대부분의 연산은 스케쥴러(280)로 들어가게 되어 필드State가 b0000 인 "비발행" 상태로 설정되고, 필드 State 는 연산이 실행 파이프라인에 발행을 행한 후 변경된다. 필드 State 는 연산이 발행을 행하거나 또는 파이프라인 단계로 진행될 때 업데이트(효과적으로 시프트)된다. 상기 파이프라인 단계의 연산 완료시, 필드 State는 b1111로 설정되고, 연산은 1이 커미트 및 퇴거되기를 기다린다. 모든 엔트리의 필드 State는 중단 사이클 동안 b1111 로 설정된다. 일부 연산 (예를 들어 로드 지속 연산 LDK)은 1111 의 초기 상태 필드 값을 가지고 있어서 스케쥴러(280)로 로드되었을 때 이미 완료된다. 부록 B 의 표 B.12 는 상기 관련 연산의 실행 동안에 필드 State를 수정하는 스케쥴러(280) 내의 필드 State 및 회로를 초기화하는 연산 디코더(510)의 회로를 설명하고 있다.
필드 Exec1 는 레지스터 유닛(253(254가 아님))이 상기 연산을 실행하고 있음을 나타내며, 상기 연산이 실행 유닛(253)에 성공적으로 발행되었을 때 설정된다. 표 B.13 은 필드 Exec1 을 설정 및 변경하는 논리를 보여주고 있다.
필드 DestBM[2:0] 는 연산이 필드 RestReg 에 의해 표시된 레지스터의 바이트 중 어떤 바이트를 수정하는지를 나타내는 바이트 표시(byte marks)를 보유하고 있다. DestBM[2], DestBM[0] 및 DestBM[0] 은 각각 비트 [31:16], [15:8] 및 [7:0] 에 대응한다. 필드 DestBM은 연산 디코더(510)에 의해 초기화되고, 중단 사이클 동안 클리어 되기도 한다. DestBM 과 관련된 논리가 부록 B 의 표 B.14 에 설명되어 있다.
필드 DestVal[31:0]은 DestReg에 커미트된 연산의 실행 결과를 보유한다. DestBM은 연산 실행 후 어떤 바이트가 유효한지를 나타낸다. 필드 DestVal은 연산이 연산의 타입에 따라 실행 단계 1 또는 2를 완료했을 때 로드되는바, 실행되지 않은 연산들(예를 들어 LDK)에 대해 로드된다. DestVal 은 적절한 결과값으로 초기화된다. 필드DestVal 은 연산이 완료되었을 때 결과가 저장되기 전 일시적인 저장 요소를 위해 사용될 수 있다. 한 실시예에서, 필드 DestVal은 처음에는 RegOp 및 LdStOp 각각에 대해 즉시값 및 변위 값을 보유하고, BRCOND에 대해 교번의(순차 또는 타겟) 분기 프로그램 카운터 값을 보유한다. 필드 DestVal 에 관련된 논리가 부록 B 의 표 B.15 에 설명되어 있다.
필드 StatMod[3:0]는 연산이 상태 플래그의 그룹 중 어떤 그룹을 수정하는지를 나타내는 상태 그룹 표시를 보유하고 있다. 3,2,1,0 비트는 각각 플래그 비트 그룹 {EZF,ECF}, OF, {SF,ZF,AF,PF} 및 CF 에 대응하고, 여기서 플래그 비트 EZF, ECF, OF, SF, AF, PF 및 CF 는 RegOp에 의해 수정되기도 한다. 필드 StatMod는 비-RegOp들에 대해 모두 제로이고, 중단 사이클 동안 클리어 된다. 필드 DestVal에 관련된 논리는 부록 B 의 표 B.16 에 설명되어 있다.
필드 StatVal[7:0]은 상태 레지스터 EFlags에 커미트될 연산의 상태 결과값을 보유하고 있다. StatMod는 실행 후 어떤 플래그 그룹이 영향을 받게 되는지를 나타낸다. StatVal은 RegOp들에 대해서만 중요한바, 이것은 StatVal에 의해 반영된다. StatVal은 상기 RegOp가 실행 단계 1 을 완료하였을 때 로드된다. 필드 StatVal에 관련된 논리는 부록 B 의 표B.17에 설명되어 있다.
필드 OprndMatch_XXsrcY - 여기서 "XX" 는 LU,SU,RUX 또는 RUY 이고 'Y' 는 1 또는 2 이다 - 는 보다 글로벌한 중요성을 갖는 정보와는 대조적으로 두 개의 파이프라인 단계 사이를 통과하는 일시적인 정보를 위한 추가적인 저장 요소이다. 부록 B 의 표 B.18에 필드 OprndMatch_XXsrcY 를 제어하는 논리가 설명되어 있다.
필드 DBN[3:0] 은 LdStOp에 대한 4 개의 데이터 브레이크포인트 상태 비트(data breakpoint status bit) Bn(n=0 내지 3)를 보유하고 있다. 이 필드는 초기에는 모두 제로이고, 이어서 관련 LdStOp가 실행되면 적절한 유닛으로부터 브레이크포인트 비트가 나중의 트래핑(trapping)을 위해 기록된다. 부록 B 의 표 B.19에 필드 DBN[3:0] 에 관련된 논리가 설명되어 있다.
Ⅱ. A.3 Op 쿼드 필드
스케쥴러(280) 내의 각 열에는 4개의 엔트리와, 상기 Op 쿼드와 관련된 Op 쿼드 필드(549)가 포함되어 있다. 아래에 도 7에 도시된 추가의 Op 쿼드 필드(549)를 열거한다. 연산 디코더(510)는 Op 쿼드 필드를 초기화한다. 대부분의 Op 쿼드 필드는 정적이다. 일부 Op 쿼드 필드는 동적이며, 스케쥴러(280) 내의 각 열의 논리는 필요한 경우 상기 Op 쿼드 필드를 변경시킨다.
필드 Emcode는 상기 Op 쿼드가 MacDec(242)로부터 나오는 것인지 또는 벡터 디코더(244)(즉, 엠코드 ROM(246))로부터 나오는 것인지를 나타낸다. 표 B.20은 필드 Emcode 의 설정을 설명하고 있다.
필드 Eret는 이것이 엠코드 Op 인지를 나타냄과 아울러 그것이 복합 매크로명령을 나타내는 일련의 Op 쿼드내의 마지막 Op 쿼드로 표시되는지를 나타낸다. 표 B.12 는 필드 Eret를 설정하는 논리를 설명하고 있다.
필드 FaultPC[31:0]는 상기 열 내의 제1 연산에 관련된 논리 매크로명령 폴트 프로그램 카운터 값을 보유하고 있다. 연산 커미트 유닛(260)은 폴트 예외(fault exceptions)를 프로세스할 때 필드 FaultPC를 사용한다. 표 B.22는 필드 FaultPC 를 설정하는 논리를 설명하고 있다.
필드 BPTInfo[14:0]는 Op 쿼드가 발생되었을 때로부터의 분기 예측 표 관련 정보를 보유하고 있다. 필드 BPTInfo는 BRCOND를 포함하고 있는 MacDec-발생 Op 쿼드에 대해서만 정의된다. 표 B.23은 필드 BPTInfo를 설정하는 논리를 설명하고 있다.
필드 RASPtr[2:0]은 Op 쿼드가 발생되었을 때의 리턴 어드레스 스택의 최상위로의 포인터를 보유하고 있다. 필드RASPtr은 BRCOND를 포함하고 있는 MacDec-발생 Op 쿼드에 대해서만 정의된다. 표 B.24는 필드 RASPtr을 설정하는 논리를 설명하고 있다.
필드 LimViol는 Op 쿼드가, 타겟 어드레스 상에서 코드 세그먼트 제한 위반이 검출된 전송 제어 명령의 디코더임을 나타낸다. 대부분의 열에 대해, 필드 LimViol은 정적이다. 필드 LimViol은 열(1)에 로드되며, 이에 대해서는 부록 B 의 표B.25 에 요약되어 있다.
필드 OpQV는 열이 유효한 Op 쿼드를 포함하고 있는지를 나타내며, 글로벌 논리(520)가 Op 쿼드의 시프트를 제어할 때 필드 OpQv를 사용한다. 유효하지 않은 Op 쿼드들은 만일 스케쥴러(280)에서 최하위에 있는 Op 쿼드가 정체되는 경우 오버라이트될 수 있다. '유효하지 않은' Op 쿼드를 포함하고 있는 열 내의 필드들은 중단된 Op 쿼드와 같은 값을 가지며, Op 쿼드는 중단의 결과로 유효하지 않은 것으로 될 수 있다. 부록 B 의 표 B.26 은 필드 OpQv를 제어하는 논리를 설명하고 있다.
필드 Op1l, Op2l 및 Op3l은 Op 쿼드에 의해 표현된 매크로명령 번호의 카운트(1,2 또는 3)를 보유하고 있으며, 퇴거 명령을 카운트하는데 사용된다.
필드 llen0 및 llen1은 Op 쿼드에 의해 표현된 제1 및 제2(존재하는 경우) 매크로명령의 바이트의 길이를 보유하고 있고, 폴트를 발생한 명령 어드레스를 결정하는데 사용된다.
필드 Smc1stAddr, Smc1stPg, 및 Smc2ndPg 는 Op 쿼드내의 연산에 의해 커버되는 제1 및 제2(한 페이지 이상의 명령이 상기 Op 쿼드 내에 있는 경우) 어드레스를 보유하고 있으며, 자체-수정 코드를 검출하는데 사용된다.
Ⅱ. B 로드/시프트 제어
앞서 설명한 바와 같이, 스케쥴러(280)는 24개 엔트리를 6개의 열을 포함하고 있는 시프트 레지스터(또는 FIFO 버퍼)로 관리한다. 스케쥴러(280)는 각 열이 독립된 시프트 제어(실제로는 로드 제어 신호 LdEntry[i])를 갖는다는 점에서 시프트 레지스터만큼 견고하지 않다. Op 쿼드는 다음 열이 비어 있거나 또는 비어지고 있는 한, 다음 열로 시프트 다운할 수 있다(그리고 선행 Op 쿼드는 위에서부터 이 열로 시프트다운 할 수 있다). Op 쿼드는 항상, 공간이 사용 가능하면, 더 높은 번호의 열로 시프트 다운된다. 이상적으로는, 각 Op 쿼드는 클록 사이클 경계에서, 각 클록 사이클마다 1개의 열을 시프트다운 시킨다.
대부분의 연산에 있어, 스케쥴러(280)내의 위치는 연산을 위한 파이프라인 단계와는 독립적이다. 따라서, 실행 파이프라인 내에 정체가 있는 경우라 할지라도 대부분의 연산은 스케쥴러(280)내로 시프트 다운한다. 두 가지 예외는 상태 플러그에 의존하는 연산과 그리고 스케쥴러(280)의 최하위 열에서의 연산이다. 상태 플래그에 의존하는 연산은 그 연산이 스케쥴러(280)의 특정 열에 있을 때 실행되어야만 하는 단계를 가지고 있고, 따라서 상기 단계가 완료될 때까지 시프트를 금지한다. 열(5)에서의 연산은 열(5)에서의 모든 연산이 완료 및 커미트될 때까지 열(5)로부터 Op 쿼드의 시프트 또는 퇴거를 금한다.
부록 B의 표 B.27은 스케쥴러(280)에서의 시프트를 제어하는 신호 LdEntry0 내지 LsEntry5를 발생함과 아울러 스케쥴러(280)가 현재 사이클의 끝에서 새로운 Op 쿼드를 받아 드릴 수 있는지를 나타내는 신호 SchedFull 및 SchedEmpty를 발생하는 글로벌제어 논리(520)의 회로를 설명하고 있다.
Ⅲ. 연산 실행
물리적으로, 스케쥴러 저장소(540)는 연산들에 대한 상태값을 보유하는 저장 구조이다. 저장소(540) 이외에, 스케쥴러(280)는 연산 실행이 진행되는 동안 상기 상태값에서 연산하는 논리를 포함되어 있다. 제어의 관점에서 보면, 스케쥴러(280)는 프로세스 파이프라인을 통해 연산의 실행을 위한 제어 정보를 발생하고 실행 결과를 다루는 파이프라인 데이터 경로이다. 스케쥴러 저장 및 상태 변경은 시스템 클록으로 동기되는바, 즉 스케쥴러(280)내의 모든 상태 변화는 스케쥴러(280)내의 모든 저장 요소들이 (적어도 논리적으로는)도 6에 관하여 설명된 것처럼 에지-트리거 플립-플롭이 되도록 상기 시스템 클록의 상승 에지 상에 있게 된다. 논리적 관점에서, 스케쥴러(280) 내부의 모든 상태 시퀀스는 본래 단일 사이클이다. 상기 사이클 동안 머신 상태에 기초하여 각 사이클마다 상태 천이 결정들이 행해진다.
스케쥴러(280)의 구조는 연산 실행의 파이프라인 특성을 반영한다. 스케쥴러(280)의 논리(및 대응하는 각 엔트리)는, 주로 독립적인 논리로 여러 개의 논리(대부분 서로 독립적임)로 나뉘어 질 수 있으며, 이들 논리 각각은 소정 타입의 연산 또는 실행 파이프라인의 특정 프로세스 단계와 직접 관련된다. 특정 프로세스 파이프라인의 관점에서 보면, 각 단계와 관련된 스케쥴러 논리들은 그 단계에서 행해진 프로세스에 대한 제어 정보 및/또는 그 단계가 성공적으로 완료될 수 있을 때를 결정하기 위한 제어 정보를 제공한다. 모든 프로세스 파이프라인들에 대한 소정 단계(적어도 제 1의 단계들)에서 보면, 매우 유사한 조직들은 각 파이프라인에 대해 또는 각 파이프라인의 각 연산 소스 오퍼랜드에 대해 동일한 기능을 수행한다.
도 4A 내지 도 4D 는 4가지 타입의 연산들에 대한 파이프라인 타이밍을 보여주고 있다. 이러한 타입의 연산들에 있어서, 명령 디코딩 단계(420)후에, 스케쥴러(280)에 연산이 로드된다. BrOp는 분기 평가 단계(490)에서 완료되는데, 이는 BrOp가 스케쥴러(280)내의 열(4)에 도달할 때 발생된다. RegOps, StOps 및 LdOps는 3 또는 4 단계 파이프라인을 통해 진행되고 그리고 이에 대응하여, 4 또는 5 개의 상태들 사이에 천이한다. 스케쥴러 엔트리 내의 필드 State[3:0]는 그 엔트리와 관련된 연산의 단계를 추적 또는 대표한다.
도 4A 및 도 4C 의 Op 발행 단계(430) 및 오퍼랜드 전송 단계(440)는 RegOp, LdOp 및 StOp 모두에 공통이며, 이에 대해서는 후술하기로 한다.
오퍼랜드 전송 단계(430) 다음에 실행 단계들이 온다. RegOp는 레지스터 유닛(253,254)이 단일 사이클에서 모든 RegOps를 수행하기 때문에 단지 하나의 실행 단계(450)만을 가지고 있다. 더욱이, RegOp 가 실행 단계(450)에 들어가게 되면, 이는 항상 성공적으로 완료를 하고 그 클록 사이클의 끝에서 단계(450)를 빠져나온다. LdOps 및 StOps에는 두 개의 실행 단계(450,460)가 있는데, 이 두 단계 동안 어드레스 평가(453), 세그먼트 및 페이지 변환(및 보호 검사) 및 데이터 캐쉬 매핑(455), 그리고 결과 전송(462)이 발생한다. RegOps와는 달리, LdOps 및 StOps는 단계(450) 또는 단계(460) 중 어느 단계에서 중재 주기(arbitrary periods)를 위해 정체될 수 있다. LdOps의 대부분 정체(가장 현저한 데이터 캐쉬 및 데이터 변환 룩어사이드 버퍼(DTLB) 미스 및 폴트)가 마지막 단계(460)에 적용된다. 단계(450)에서의 정체는 오정렬된 메모리 참조로부터 및 연산에 의해 점유되어 완료로의 진행이 차단되는 단계(460)로부터 비롯된다.
스케쥴러(280)는 로드 유닛(251), 저장 유닛(252), 레지스터 유닛(253,254), 부동소숫점 유닛(255) 및 멀티미디어 유닛(256) 등의 실행 엔진에 의해 생성되는 파이프라인을 제어한다. 본 발명의 일 실시예에는 레지스터 유닛(253,254), 로드 유닛(251) 및 저장 유닛(252)이 포함되어 있다. 더 많거나 더 적은 실행 유닛을 갖는 프로세서에 본 발명의 양상들을 적용하는 것은 본 명세서의 개시 내용으로부터 자명하다. 예를 들면, 멀티미디어 유닛(256)을 포함하는 일 실시예에서, 멀티미디어 유닛(256)은 멀티미디어 유닛(256)에 대한 연산들이 발행되고, 오퍼랜드가 전송되고, 레지스터 유닛(253)에 대해 사용되는 회로를 사용하여 결과가 전송되도록 제1 레지스터 유닛(253)의 부분으로서 논리적으로 고려될 수 있다.
한 실시예에서, 부동소숫점 유닛(FPU)(255)은 자신의 독립적인 레지스터 파일 및 커미트 유닛을 구비하며, 스케쥴러(280)는 FPU(255)에 발행을 위한 FpOps를 선택하는 스캔 체인을 포함한다. 스케쥴러(280)는 FpOp를 발행하고, 오퍼랜드를 FPU(255)로 전송한다. 상기 FpOp 의 실행은 FPU(255)와 관련된 레지스터 파일내의 레지스터에게만 영향을 미치게 되어 스케쥴러(280)가 FPU(255)로부터의 결과를 요구하지 않게 된다. FPU(255)는 FPU(255)가 실제적으로 상기 FpOp를 완료하거나 커미트하기 오래 전에, FpOp가 즉시 완료함을 신호할 수 있다. OCU(260)는 어느 것도 변경시킴이 없이 스케쥴러(280)로부터 상기 FpOp 를 커미트 및 퇴거시킨다.
레지스터 유닛(253,254) 각각은, 레지스터 유닛(253)을 레지스터 유닛(254)과 구별하기 위해 RU 파이프라인 또는 RUX 또는 RUY 파이프라인으로 언급되는 파이프라인을 제공한다. 각각의 RU 파이프라인은 발행 단계(430), 오퍼랜드 전송 단계(440) 및 실행 단계(450)로 언급되는 3 개의 단계를 구비한다. 로드 유닛(251) 및 저장 유닛(252)은 각각 4 개의 단계, 즉 발행 단계(430), 오퍼랜드 전송 단계(440) 및 실행 단계(450,460)을 구비하는 LU 및 SU 파이프라인을 제공한다. 앞서 설명한 바와 같이, 상기 State 필드는 관련된 연산의 현재 파이프라인 단계 및 그의 파이프라인이 완료된 연산을 나타내기 위해 '1들의 시프팅/증가 필드' 디코딩을 사용하여 5 개의 연산 단계를 표현한다.
스케쥴러(280)는 발행 단계(430) 및 오퍼랜드 전송 단계(440)에 대해 주 제어(primary control)를 행한다. 발행 및 오퍼랜드 전송 단계(430,440) 내에서의 프로세스는 단계당 두 단계(phase)로 나뉘는데, 상기 단계들은 보통 시스템 클록 사이클의 첫 번째 및 두 번째 절반 동안 발생한다. 발행 단계(430)에는 발행 선택 단계(441) 및 방송 단계(432)가 포함되어 있다. 오퍼랜드 전송 단계(440)에는 오퍼랜드 선택 단계(441) 및 오퍼랜드 전송 단계(442)가 포함되어 있다.
발행 선택 단계(441) 동안, 스케쥴러(280)는 상기 파이프라인 각각으로 들어가는 다음 연산들을 선택한다. 한 실시예에서, 예를 들면 LU, SU, RUX 및 RUY 파이프라인에 대해 하나씩 4개의 연산 선택이 발생한다. 방송 단계(432) 동안, 선택된 각 연산의 오퍼랜드에 관한 정보는 모든 스케쥴러 엔트리 및 외부 논리에 방송된다.
오퍼랜드 선택 단계(441)동안, 스케쥴러(280)는 방송 단계(432)로부터의 정보를 사용하여, 오퍼랜드를 위치시킨다(최고 2*개 까지의 '실행 유닛 번호' 오퍼 랜드). 상기 오퍼랜드의 소스는 레지스터 파일(290), 스케쥴링 저장소(540), 또는 실행 유닛(251,252,253 또는 254)의 결과 버스(561,562,563 또는 564)일 수 있다. 스케쥴링 저장소(540)는 즉시 값에 대한 필드, 커미트되지 않은 결과, 및 프로그램 순서에서 앞서지만 완료되지는 않은 연산에 관한 정보를 포함하고 있다. 실행 유닛의 결과 버스는, 만일 상기 실행 유닛이 요구된 오퍼랜드에 영향을 미치는 연산을 완료하는 경우 오퍼랜드의 소스가 된다. 스케쥴러(280)는 또한 각각의 오퍼랜드 값의 상태를 결정 즉, 유효한 값이 상기 지정된 소스로부터 실제 이용가능한지를 결정한다. 이 정보에 기초하여, 스케쥴러(280)는 오퍼랜드 전송 단계(440)에서, 연산들 중 어느 연산이 실행 단계(450)로 진행되는지를 결정한다. 진행은 각 파이프라인에 대해 독립적이다. 단지 오퍼랜드 종속성만이 연산이 실행되는 순서를 강제한다. 그러한 종속성을 제외하고는, 다양한 타입의 연산들이 다른 타입의 연산들에 관하여 임의의 순서로 각 파이프라인을 통해 프로세스된다.
오퍼랜드 전송 단계(442) 동안, 스케쥴러(280)는 오퍼랜드 값들을 지정된 소스들로부터 오퍼랜드 버스(554)를 통해 실행 유닛(251 부터 254)으로 전송시킨다. 도 5에 도시된 바와 같이, 상기 실시예에는 9개의 오퍼랜드 버스(554)가 있는데, 그 중 8개는 오퍼랜드 전송 단계에서의 연산들에 대한 오퍼랜드 값들을 제공한다. 부동소숫점 유닛(255)이 있는 실시예와 같은 많은 실행 유닛이 있는 실시예는 많은 오퍼랜드 버스를 가질 수 있다. 오퍼랜드 전송은 오퍼랜드값들이 유효한지 여부에 상관없이 발생한다. 만일 오퍼랜드값이 유효한 경우, 관련 연산은 실행 단계(450)로 진행되지 않아 실행 유닛이 유효하지 않은 오퍼랜드를 사용하지 않게 된다.
LdOps 및 StOps 의 오퍼랜드 전송 단계(442) 동안, 변위 전송(443)은 변위 버스(555)를 경유하여 변위 오퍼랜드들을 (각 유닛에 하나씩) 로드 유닛(251) 및 저장 유닛(252)에 전송한다. 상기 변위 오퍼랜드는 스케쥴러 엔트리들로부터의 32-비트 값이다. 변위를 위한 소스 엔트리들의 선택은 오퍼랜드 선택 단계(441)동안 발생한다.
LdOp 또는 StOp 가 실행 단계(450)에 들어가면, 로드 및 저장 유닛(251,252)는 관련 변위 및 오퍼랜드값들을 래치(latch)하고 연산이 단계(450)내에 유지되는 한 이 값들을 보유하게 된다. 스케쥴러(280)는 상기 파이프라인 실행 단계(450,460)에 대해 제한된 제어를 한다. 단계(450,460)에서, 스케쥴러(280)는 연산의 상태를 계속 추적하고, 결과적인 레지스터 및 상태값들을 포획한다. 실행 단계(450)에서 어드레스 평가(453)은 LdStOp가 액세스한 어드레스를 평가한다. 만일 상기 LdStOp에 대한 어드레스 및 데이터 크기가 데이터 캐쉬 내의 엔트리들 사이의 경계를 지나 연장되는 데이터 액세스를 야기하는 경우, 상기 LdStOp는 본 명세서에서 언급되는 바와 같이 오정렬된다. 오정렬된 LdStOp는 두 개의 데이터 액세스로 분할되는바, 제 1 액세스는 실행 단계(460)로 진행되는데 반해, 제 2 액세스는 실행 단계(450)에서 정체된다. 상기 오정렬된 LdStOp와 관련된 상기 스케쥴러 엔트리의 상태 필드는 상기 제 2 액세스의 실행 단계를 나타낸다.
실행을 시작하기 위해 소스 오퍼랜드를 얻기 위한 4 단계 프로세스에 부가하여, 스케쥴러(280)는 StOp에 대한 데이터 오퍼랜드를 얻기 위한 유사한 4 단계 프로세스를 수행한다. 그러나 상기 데이터 오퍼랜드는 SU 단계(460)에서 상기 StOp를 위해 얻어진다. 상기 저장 데이터를 제공하기 위한 프로세스는 상기 StOp 의 단계(450,460)와 동기화 되며 실행 단계(450)에서 StOp를 식별하는 연산 선택 단계(456), 데이터 오퍼랜드의 소스를 설명하는 정보를 전송하는 방송 단계(457), 데이터 오퍼랜드 선택 단계(461) 및 데이터 오퍼랜드 전송 단계(456)를 포함하고 있다. 본질적으로, 저장 데이터 오퍼랜드는 StOp 실행과 병렬로 인출되고, 그리고 상기 실제 데이터 값이 얻어져, 상기 StOp의 완료시 저장 큐(270)로 전송된다. 완료 및 종료 단계(460)는 단계(461)에서 선택된 데이터와 그리고 어드레스 평가(453) 및 DTLB 매핑(455)으로부터의 물리적 어드레스에 기초한 StOp에 대한 저장 큐 엔트리의 생성에 대응한다. 만일 유효한 데이터 오퍼랜드 또는 물리적 어드레스가 아직 이용할 수 없는 경우, 상기 StOp는 단계(460)에 남아있게 된다.
연산 발행 및 오퍼랜드 전송과 관련된 스케쥴러 논리(530,532)이외에, 엔트리들은 순서화 로드 및 저장 연산과 관련된 논리(534)를 포함한다. 일부 실행 순서화가 레지스터 종속들로 인해 연산들 사이에 유지되어야 하는 것처럼, 제한된 실행 순서화도 메모리 종속들로 인해 LdOps와 StOps 사이에 유지된다(예를 들어, LdOps는 오래된 StOps에 앞서 자유롭게 실행될 수 없다). 로드-저장 순서화는 메모리를 액세스하는 StOp에 적용됨과 아울러 메모리를 참조하고 그리고/또는 폴트가능한 어드레스를 발생하는 CIA(검사 명령 어드레스) 및 CDA(검사 데이터 어드레스) 연산과 같은 그러한 StOp에 적용되지만, LEA(로드 유효 어드레스) 연산들에는 적용되지 않는다. 모든 LdOps가 메모리를 참조하기 때문에 어떠한 LdOp도 로드-저장 순서화에서 제외되지 않는다.
상기 로드-저장 순서화는 두 개의 실행 파이프 라인의 단계(460)에서 수행되며, 여기에서 단계(460)내의 LdOp 또는 StOp는 상기 연산이 안전할 때까지 유지된다. 단계(460)까지는 어떠한 순서화도 상기 LU 및 SU 파이프 라인 사이에 유지되지 않는다. 더욱이, LdStOp는 보통 부분적 어드레스를 더 오래된 LdStOp와 비교함으로써 메모리 독립이 "입증" 될 때 순서를 벗어나 완료될 수 있다. 저장 큐(270)는 종속성 검사와 관련된 어드레스 비교를 수행하긴 하지만, LU 및 SU 실행 파이프 라인에서의 LdOp 및 StOp 의 상대적 에이지를 결정하는데 있어 스케쥴러의 지원을 필요로 한다. 주어진 LdOp 또는 StOp의 완료가 허용되는지를 결정하는데 있어 적절한 어드레스 비교만이 고려된다.
로드-저장 순서화 논리(534)에는 LU 파이프 라인과 관련된 논리 및 SU 파이프 라인과 관련된 논리가 포함되어 있다. 상기 LU 파이프 라인과 관련된 논리는 SU 단계(450 또는 460)내의 어느 StOp 및 다른 StOp에 대하여 LU 단계(460) 내의 어느 LdOp의 에이지를 결정한다. 논리(534)는 버스(556) 상에 3 개의 신호 SC_SU2OLDER, SC_SU1OLDER 및 SC_SU0OLDER를 발생하여, SU 단계(460), SU 단계(450) 또는 그 밖의 어느 곳의 StOp가 LU 단계(460) 내의 LdOp 보다 더 오래되었는지를 나타낸다. 상기 SU 파이프라인과 관련된 논리는 LU 단계(460)내의 어느 LdOp 및 다른 LdOp에 대하여 SU 단계(460)내의 어느 StOp의 에이지를 결정하고, 두 개의 신호 SC_LU2OLDER 및 SC_LU1OLDER를 발생하여 어느 LdOp가 단계(460) 내의 상기 StOp 보다 더 오래되었는지를 나타낸다. 로드/저장 순서화 논리(534)에 대한 추가 설명이 아래에 제공된다.
스케쥴러(280)에는 상태 플래그 또는 조건 코드(cc)값을 획득 및 사용하는 것과 관련된 상태 플래그 프로세스 논리(538)가 더 포함되어 있다. 세 개의 상대적으로 독립된 기능이 포함되어 있는데, 이들은 레지스터 유닛(253)에 의해 실행되는 상태-의존 RegOp에 대한 상태 플래그 값 인출 기능, 분기 평가 유닛(257)에 의한 BRCOND의 해결을 위한 상태 플래그 값 인출 기능 및 중단 불가능한 RegOp를 선행 BRCOND들과 동기화 시키는 기능이다.
상기 RUX 실행 유닛은 상태-의존("cc-dep") RegOp를 실행하고, 상기 레지스터 오퍼랜드 값과 같은 시간에 즉, 오퍼랜드 전송 단계(440)의 끝까지 상태 오퍼랜드 값을 필요로 한다. CC-dep RegOp는 열(3)에 도달할 때까지는 실행 단계(450)로 진행하는 것이 허용되지 않으며, 이들이 유효한 상태 코드를 수신할 때까지 열(3)에 유지된다. 레지스터 값의 인출과는 달리, 상태 인출 프로세스는 파이프라인 되지 않으며, 한 사이클에서 즉, RUX 오퍼랜드 전송 단계(440) 전체 동안 발생한다. 더욱이, 동일 논리(538)는 cc-dep RegOp와 BRCOND 모두에 대한 최근의 상태 플래그 값을 인출한다. cc-depRegOp에 대해, 상태 코드는 실행 유닛(253)에 전송되고, 상기 RegOp가 필요로 하는 상태값에 대한 유효성 검사가 행해진다. 만일 요구되는 모든 상태 플래그에 대한 유효 값이 아직 이용가능하지 않다면, RegOp는 오퍼랜드 전송단계(440)에서 정체된다(레지스터 오퍼랜드 값이 아직 이용가능하지 않은 경우와 동일함).
BRCOND는 그 어떠한 실제 실행 프로세스도 필요로 하지 않는다. 대신, BRCOND가 미해결인 동안(그리고 스케쥴러(280)의 최하위에 도달하기 전), BRCOND는 올바르게 예측되거나 또는 예측되지 않은 것으로 분석(resolve)된다. BRCOND는 사이클당 최고 하나의 BRCOND 비율로 순서적으로 분석된다. BRCOND가 열(4)에 도달할 때, 상태 플래그 프로세스 논리(538)는 상기BRCOND의 평가를 위한 유효 상태 플래그가 레지스터 파일(290)으로부터 이용가능한지 혹은 상기 BRCOND 보다 더 오래된 연산으로부터 이용가능한지를 결정하기 위해 검사를 행한다. 플래그 프로세스 논리(538)는, 상기 BRCOND의 평가에 요구된 상태 플래그를 제공하는 더 오래된 연산들이 완료되었는지 여부를 결정하기도 한다. 만일 상기 요구된 상태 플래그에 대한 값이 아직 이용가능하지 않다면, BRCOND의 분석은 상기 BRCOND를 포함하고있는 Op 쿼드의 시프트를 금지함으로써 정체된다. 다음의 분석되지 않은 BRCOND에 요구되는 상기 상태 플래그 값이 이용가능하게 될 때, 상태 플래그 프로세스 논리(538)는 상기 상태 플래그 값을 분기 평가 유닛(257)에 전송하는바, 이 유닛(257)은 상기 BRCOND 내부에 특정된 상태 코드가 올바르게 예측되었는지를 결정한다. 만일 BRCOND가 올바르지 않게 예측되었다면, 재시작 신호가 어서트되어 명령 인출을 시작하고 정확한 분기 어드레스에서 명령 디코더(240)(도 2)의 부분을 디코딩 시작한다. 만일 연산이 올바르게 예측되면, 아무 일도 발생하지 않는다.
BRCOND의 분석은 중단불가 RegOp의 실행에 중요하다. 중단불가 RegOp의 실행은 중단될 수 없거나 또는 행해질 수 없는 변경을 초래한다. 따라서, RegOp가 실행이 안전해 질 때까지, 중단불가 RegOp는 실행 단계(450)로 들어가는 것이 금지된다. 이것은 앞선 모든 BRCOND가, 중단불가 RegOp가 실행 단계(450)에 진행될 수 있기 전 해결 및 올바르게 예측 된 것으로 결정되어야 함을 요한다. 결과적으로, 어느 선행하는 BRCOND가 미해결인 채로 남아있거나 오예측된 것으로 밝혀진다 하더라도, 상기 중단불가 RegOp는 오퍼랜드 전송 단계(440)내에서 정체된다. 만일 선행 BRCOND가 올바르게 예측되었다면, 그 지연은 일시적이며, 만일 선행 BRCOND가 올바르지 않게 예측되었다면, 상기 RegOp 는 최종 중단 사이클이 스케쥴러(280)를 플러쉬할 때까지 정체된다.
벡터 디코더(244)는 엠코드 ROM(246)으로부터 중단불가 RegOp를 발생한다. 엠코드 ROM(246)에는, 중단불가 RegOp 의 결과에 의존성을 갖는 그 어떠한 연산도 상기 중단불가 RegOp를 포함하고 있는 Op 쿼드 바로 앞에 선행하는 상기 Op 쿼드에서 허용되지 않는다. 따라서, 상기 중단불가 RegOp에 의존성을 갖는 연산이 없으며, 상기 중단불가 RegOp에 의존성을 가질 수 있는 모든 오래된 연산들은 퇴거되고, 그럼으로써 상기 중단불가 RegOp 가 열(4)에서 실행되기 전에 완료된다.
Ⅲ. A 발행 단계
스케쥴러(280)는 발행 스캔 및 오퍼랜드를 요구하는 각각의 실행 파이프라인에 대해 발행 선택 및 방송 단계(431,432)를 병렬로 수행한다. 한 실시예에서, 발행 단계 연산은 로드 유닛(251), 저장 유닛(252), 레지스터 유닛(253),및 레지스터 유닛(254)에 대해 병렬로 수행된다.
Ⅲ. A.1 발행 선택 단계
각 사이클에서, 스케쥴러(280)는 병렬 실행을 할 수 있는 각 유닛에 발행을 위한 연산의 선택을 시도한다. 한 실시예에서, 스케쥴러(280)는 LU, SU, RUX 및 RUY 파이프라인에 발행될 LdOp, StOp 및 두 개의 RegOp를 선택한다. 발행 선택 단계(431)에서, 스케쥴러(280)는 가장 오래된 연산에서부터 가장 새로운 연산까지 '순서적으로' 스케쥴링 저장소(540)내의 모든 엔트리를 스캔하고, 상기 엔트리의 필드 State 및 Type 에 기초하여 발행을 위한 연산들을 선택한다. 발행 선택(431)은 연산들이 서로 가질 수 있는 레지스터 상태 또는 메모리 종속들을 고려하지 않는다. 이것은 발행 선택 프로세스를 간단하게 하며, 발행 선택 단계(431)가 상대적으로 큰 저장소(540)에 대해 빠르게 완료되게 한다.
발행 선택은 4 개의 프로세스 파이프라인 각각에 대해 동시적이고, 독립적이다. 각각의 파이프라인 LU, SU 및 RUX에 대해, 상기 파이프라인이 실행할 수 있는(필드 Type로 표시) 다음 비발행 연산(State 필드로 표시)이 선택된다. 다시 말하면, 로드 유닛(251)에 대해 다음 비발행 LdOp 가 선택되고, 저장 유닛(252)에 대해 다음 비발행 StOp 가 선택되며, 레지스터 유닛(253)에 대해서는 다음 비발행 RegOp 가 선택된다. 레지스터 유닛(254)에 대해서는, 파이프라인 RUX에 대해 선택된 상기 RegOp 다음에 오는 RegOp가 선택된다. 개념적으로는, 상기 파이프라인 RUY에 대한 발행 선택은 RUX에 대한 발행 선택에 의존한다. 그러나, 물리적으로는, RUY에 대한 발행 선택은 RUY에 대한 발행 선택과 병렬로 수행된다.
스캔을 위해, 각 스케쥴러 엔트리는 4 비트(즉, 각 파이프라인에 한 비트) IssuableToxx 를 발생하는데 이는, 상기 관련된 연산이 파이프라인 xx - 여기서 xx 는 LU, SU, RUX 또는 RUY - 로의 발행 선택에 현재 적합한지를 나타낸다. 상기 파이프라인 xx에 대한 발행 선택 프로세스는 가장 오래된 스케쥴러 엔트리에서 가장 새로운 스케쥴러 엔트리까지 스캔하여 비트 IssuableToxx 세트가 있는 엔트리를 찾는다. 파이프라인 LU, SU 및 RUX에 대해, 상기 원하는 비트IssuableToLU, IssuableToSU 또는 IssuableToRU 세트를 갖는 것으로 밝혀진 첫번째 연산은 파이프라인 LU, SU 또는 RUX 로의 발행을 위해 선택된 연산이다. 파이프라인 RUY에 대한 발행 선택은 파이프라인 RUX에 대해 선택된 연산 다음에 오는IssuableToRUY를 갖는 상기 첫번째 연산을 선택한다.
연산들은 스케쥴러(280)에 로드되는 즉시 발행선택에 적합한 바, 즉 연산은 스케쥴러(280) 내의 첫번째 사이클 동안 연산이 발행될 수 있다. 이러한 경우, 상기 사이클의 시작에서 Type 비트 및 비트 S0 만이 유효해야함을 요한다. 엔트리 내의 모든 다른 필드들은 발행 선택 단계(431)의 끝만큼 늦게(즉, 최고 절반 사이클 늦게) 발생될 수 있고, 방송 단계(432)에 대해 스케쥴러 엔트리 내부에서만 유효해야 함을 요한다.
만일 발행을 위해 선택된 연산이 오퍼랜드 전송 단계(440)로 진행되지 않으면, 상기 연산은 비발행 상태로 남아있게 되어, 다음 클록 사이클에서 그 연산은 발행을 꾀하며, 아마 발행을 위해 다시 선택될 것이다.
Ⅲ. A.1.a 발행선택스캔체인
본 발명의 한 실시예에서, 스케쥴러(280)는 상기 엔트리에 관련된 논리 블록으로부터 형성된 스캔 체인회로를 사용하여 연산들을 스캔한다. 각각의 스캔 체인은 일부 가산기에서 사용되는 캐리체인(carry chain)과 유사하다. 상기 로드 유닛, 상기 저장 유닛 또는 레지스터 유닛을 위한 발행 선택 스캔 체인에서, 가장 오래된 엔트리로의 입력 "스캔" 비트 Cin 은 상기 엔트리들 중 하나에 있는 논리 블록이 상기 스캔 비트를 제거(kill)할 때까지 상기 스캔 체인을 통해 논리적으로 전파된다. 만일 어떤 엔트리가 원하는 타입의 연산에 관련되어 있다면 그 엔트리는 상기 스캔 비트를 제거한다(즉, IssuableToxx가 어서트된다). 레지스터 유닛(254)에 발행될 상기 연산을 스캔하기 위해, 스캔 비트가 레지스터 유닛(253)에 발행될 상기 연산과 관련된 엔트리에 의해 논리적으로 발생되며, 그 스캔 비트는 레지스터 유닛(254)에 발행 가능한 연산과 관련된 엔트리에 의해 제거될 때까지 전파된다. 상기 스캔 비트를 제거하는 상기 엔트리는 신호 IssueOpToxx 를 어서트하여 자신을 실행 유닛 xx에 발행될 연산과 관련된 엔트리로 식별한다. 따라서, 상기 선택된 엔트리는 방송 단계(431)를 위해 필요로 할 때 적절한 연산을 취할 수 있다. 만일 실행 유닛 xx 를 위한 스캔 비트가 제거됨이 없이 모든 엔트리를 통해 전파된다면, 스케쥴러(280) 내의 그 어떤 엔트리도 유닛 xx 에 발행 가능한 연산과 관련되지 않게 되며, 어떤 연산도 발행을 위해 선택되지 않는다.
스캔 비트 신호가 스케쥴러(280)내의 모든 단일 엔트리를 통해 일렬로 전파하는 스캔 체인은 비교적 간단하지만은 더 빠른 구현이 필요할 수 도 있다. 전통적인 Generate-Propagate-Kill 캐리 체인에서 사용되는 것과 유사한 룩-어헤드 기술이 적용될 수 있다. 룩-어헤드 기술의 하나는 엔트리들을 그룹으로 결합시키는데, 각 그룹은 스캔 비트를 발생하거나, 전파시키거나 또는 제거한다. 룩 어헤드는 그룹 발생, 전파 및 제거 항들이 단일 엔트리 항으로부터 병렬로 결정되고 그리고 그룹을 통한 스캔통과가 상기 그룹내의 매 엔트리를 통해 신호를 전파시킴이 없이 결정될 수 있는지 여부에 관계없이 결정되기 때문에 더 빠르다. 그룹 항의 일렬의 조합에 의해, 상기 전체 스케쥴러 저장소가 단일 그룹을 형성하기 때문에 그 어떠한 스캔 비트 신호 전파도 실제 발생하지 않는다.
LU, SU 및 RUX 스캔 체인에 대해서, 단일-엔트리 제거항 k는 신호 IssuableTcXX 이다. 상기 발생 항 G 는 모두 제로이며, 전파 항 P 는 상기 관련된 K 항의 보수(complement)이다. 표 B.28 은 LU, SU 및 RUX 스캔 체인을 위한 단일-엔트리 항을 나타낸다. 부록 B 의 표 B.29 는 파이프라인 LU, SU 및 RUX 를 위한 발행 선택 스캔 체인 내에 사용되는 그룹항 Pgrp 및 Kgrp 를 설명하고 있다.
도 8A 및 도 8B 는 6개 엔트리의 룩-어헤드 그룹을 사용하는 RUX 스캔 체인의 부분을 구현하는 논리(800)를 보여주고 있다. 더 많거나 더 적은 엔트리의 그룹이 사용될 수 있지만, 그룹 당 6개 엔트리가 24 엔트리를 4 개의 사분면(quadrant)으로 분할하고 상기 그룹 항을 프로세스하는데 사용되는 와이어(wire)의 수를 감소시킨다. 도 8A 에 도시되어 있듯이, 각각의 사분면은 6-입력 OR 게이트처럼 함께 역할하는 관련 NOR 게이트(810,812) 및 NAND 게이트(814)를 가지며, 사분면 3,2,1 또는 0 을 위한 그룹 제거 신호 Kgrp3, Kgrp2, Kgrp1 또는 Kgrp0 를 발생한다. NOR 게이트(810,812)를 위한 입력은 파이프라인 RUX 를 위한 단일-엔트리제거항인 신호 IssuableToRUX 이다. 파이프라인 LU 및 SU 를 위한 스캔 체인은 각각의 신호 IssuableToLU 및 IssuableToSU 가 IssuableToRUX 의 위치에 입력되는 것을 제외하고는 동일하다.
발행 선택 스캔은 스케쥴러(280) 내의 엔트리의 물리적 순서화에 따라 가장 오래된 엔트리에서부터 가장 새로운 엔트리까지 이루어진다. 사분면3은 가장 오래된 엔트리를 포함하고 있다. 만일 신호 Kgrp3 가 어서트되면, 사분면3내의 상기 연산들 중 하나는 스캔 비트를 제거하고 사분면3으로부터의 연산이 발행될 것이다. 버퍼(823)는 지연된 신호IssueQuadrant[3] 을 어서트하여 사분면3을 선택한다. 만일 신호 Kgrp3 가 어서트되지 않는다면, 스캔 비트는 그룹3을 통해 전파될 수 있으나, 사분면 2,1 또는 0 내의 연산이 선택된다. 만일 신호 Kgrp2가 어서트되고 신호Kgrp3 가 어서트되지 않는다면, NAND 게이트(822)는 신호 IssueQuadrant[2] 를 어서트한다. 비슷하게, 만일 상기 스캔 비트가 사분면 1 또는 0 로 전파될 수 있고 그룹 제거 신호 Kgrp1 또는 Kgrp0 가 어서트되면(즉, 그룹이 상기 스캔 비트를 제거함), NAND 게이트(821,820)는 신호 IssueQuadrant[1] 및 IssueQuadrant[0] 을 각 각 어서트한다. 만일 어서트되는 그룹 제거 신호 Kgrp[3:0] 이 전혀 없다면, 발행을 위해 선택되는 연산은 하나도 없게된다.
도 8B 는 신호 IssueQuadrant[0] 가 어서트되는 경우 사분면 0 으로부터 연산을 선택하는 논리(850)를 보여주고 있다. 각 사분면에 대해 하나씩인 논리(850)와 비슷한 네 개의 회로가 병렬로 연산한다. 엔트리5가 사분면 0 내의 가장 오래된 엔트리이기 때문에, 만일 파이프라인 RUX에 발행 가능한 경우 엔트리 5 가 선택되고 사분면 0 이 발행을 위해 선택된다. 만일 IssueQuadrant[0] 가 어서트되고 IssuableToRUX[5] 가 어서트된다면, AND 게이트(865)는 신호 IssueOpRUX[5] 를 어서트하여, 엔트리 5가 선택된 연산을 포함하고 있음을 표시한다. AND 게이트(860 내지 864)는 엔트리 0 내지 4 에 해당하고, 신호 IssueOpToRUX[0:4] 내의 각 비트를 어서트하여, 선택된 연산을 그 연산이 RUX 에 발행 가능하고 사분면 0 내의 그 어떠한 오래된 연산도 RUX 에 발행가능하지 않을 때 식별한다. NOR 게이트(870 내지 873)는 각각의 NAND 게이트(860 부터 863)에 신호를 어서트하여 RUX 에 발행 가능한 오래된 엔트리가 전혀 없음을 나타낸다.
회로(800,850)의 대안으로서, 부록 B 내의 표 B.29 의 식을 구현하는 논리가 사용될 수 있다.
도 8A 의 논리(800)는 상기 선택된 엔트리가 사분면 0 에 있고, 마지막 사분면이 탐색된다 하더라도 신호IssuableToRUX[23:0] 의 입력으로부터 세 개의 게이트 지연후의 신호 IssueQuadrant[3:0] 을 발생한다. 도 8b의 논리(850)는 대략 두 개 이상의 게이트지연 후 신호 IssueOpToRux를 발생한다. 스캔 비트는 어떠한 연산도 선택되지 않은 때 스케쥴러 전체를 통해 전파되어야 한다. 이것은 예시적인 한 실시예에서 약 24 또는 그 이상의 게이트 지연을 수반한다. 따라서, 룩-어헤드 스캔 체인은 스캔 비트가 매 엔트리를 통과하는 때 직렬 스캔 체인보다 더 빠르다.
Ⅲ. A.1.b RUY를 위한 발행 선택 스캔 체인
RUY 스캔 체인은 더 복잡하며 네 개의 항 G, P, K 및 O 를 사용한다. 상기 항 G, P 및 K 는 통상적인 발생, 전파 및 제거 항과 유사하다. 상기 O 항은 단지 하나의 연산이 선택되는 것을 보장한다. 엔트리i에 대한 단일-엔트리발생항 G는 신호 IssuableToRUX[i] 이고, 상기 항 O는 상기 항 G와 같다. 엔트리i에 대한 단일-엔트리제거항 K는 신호 IssuableToRUY[i] 이고, 상기 P 항은 상기 관련 K 항의 보수이다.
룩-어헤드 기술은 파이프라인 RUY에 대한 발행 선택에서 사용될 수 도 있다. 개념적으로는, 상기 RUY 스캔 체인에 대해, 스캔 비트는 RUX에 발행을 위해 선택된 연산을 포함하는 엔트리에 의해 발생되고, 파이프라인 RUY에 발행 가능한 다음의 새로운 연산에 의해 제거된다. 만일 그룹 내의 엔트리가 스캔 비트를 발생하고 상기 스캔을 제거하는 그룹내의 후속 엔트리가 없는 경우, 임의의 그룹이 출력 스캔 비트를 발생한다. 만일 상기 그룹 내의 각 엔트리가 상기 스캔 비트를 전파하는 경우에는 임의의 그룹이 스캔 비트를 전파한다. 일단 발생된 O 항은 보다 새로운 엔트리들이 새로운 스캔 비트를 발생하는 것을 방지하고, 그룹 O 항은 상기 그룹 내의 어느 엔트리가 단일-엔트리 O 항을 발생하는 경우 그룹 O 항이 발생된다. 부록 B 의 표 B.30 의 식들은 RUY 스캔 체인내의 단일-엔트리 항으로부터 그룹 항들을 발생하는 논리를 요약하고 있다.
도 9A 내지 도 9C는 초기에 스케쥴러(280)를 8개의 3-엔트리 그룹으로 분할하는 파이프라인 RUY에 대한 발행 선택 스캔 체인을 설명하고 있다. 도 9A 에서, 논리블록(91)은 표 B.30 에 도시된 논리를 구현하며, 단일-엔트리 신호G[23:3] 및 O[23:3] 으로부터 그룹 항 Ggrp[7:1], Pgrp[7:1] 및 Ogrp[7:1] 을 발생한다. 가장 새로운 그룹, 엔트리0 내지 2에 대한 그룹 항은 아래에 설명된 이유로 인해 더이상 필요하지 않다. 상기 그룹 항들은 3개 단계에서 조합되어, 더 큰 그룹을 위한 항을 형성한다. 회로(900)는 가장 오래된 3, 6, 9, 12, 15, 18 및 21 엔트리를 포함하고 있는 그룹을 위한 발생 항 G_7, G_67, G_567, G_4567, G_34567, G_234567 및 G_1234567 등의 그룹항을 발생한다.
논리 블록(920)을 포함하고 있는 회로(900)의 첫번째 단계는 3개 엔트리의 인접 그룹으로부터 그룹항들을 조합하여, 6개 엔트리의 그룹을 위한 그룹항을 발생한다. 논리 블록(930)을 포함하고 있는 두 번째 단계는 6개 또는 3개의 엔트리의 인접 그룹으로부터 그룹항을 조합하여 9개 또는 12개 엔트리의 그룹을 위한 그룹항을 발생한다. 논리 블록(940)을 포함하고 있는 세 번째 단계는 12개, 6개 또는 3개 엔트리의 인접 그룹으로부터 그룹 항을 조합하여 11개, 18개 및 15개 엔트리의 그룹을 위한 그룹 항을 발생한다.
논리 블록(920,930 및 940)은 그룹X에 대한 그룹 항 GX,PX,OX을 다음의 새로운 그룹Y에 대한 그룹항 GY,PY,OY을 조합하여, 그룹X, Y의 연결인 그룹 XY에 대한 항 GXY,PXY,OXY를 발생한다. 본 발명의 한 실시예에서, 각 블록(920,930,940)은 다음 식을 구현한다.
GXY = GX·PY + ∼OX·GY
PXY = PX·PY
OXY = OX + OY
도 9B에 도시된 회로는 블록(920,930,940)의 구현 예를 보여주고 있다. 도 9B에서, 입력 신호는 그룹(1,2)를 위한 것이고 출력 신호는 그룹(1,2)의 연합을 위한 것이지만, 어떤 원하는 모순 없는 그룹이 그룹1,2를 대체할 수 있다. 선택적으로, 다른 등가의 논리가 사용되기도 하고 또는 선택 단계인 블록(920,930 또는 930,940)이 역 논리로 구현될 수 있다. 추가적으로, 아래에 설명되었듯이, 마지막 단계인 블록(940)으로부터의 전파 항은 필요하지 않으며, 블록(940)은 전파 식을 이행하지 않음으로써(즉 AND 게이트(922)를 없앰으로써)간략화 될 수 있다.
회로(900)로부터의 원하는 출력 신호는 G 항 및 O 항이다. 출력 신호 G_7, G_67, G_567, G_4567, G_34567,G_234567 및 G_1234567 은 앞서 발생된 스캔 비트가 그룹 6,5,4,3,2,1 및 0 에 도달하는 지를 나타내고 본 명세서에서는 신호 CinGrp[6:0] 으로도 언급된다. 신호 O_7, O_67, O_567, O_4567, O_34567, O_234567, 및 O_1234567은 상기 스캔 비트가 각 그룹에 도달하기 전에 제거되는지 여부에 상관없이, 각각 그룹 6,5,4,3,2,1, 및 0 에 앞서 발생되었는지를 나타낸다. 신호 O_7, O_67, O_567, O_4567, O_34567, O_234567 및 O_1234567 는 본 명세서에서는 신호 OinGrp[6:0] 으로도 언급된다.
다중-비트 신호 IssueOpRUY[23:0] 는 그룹 신호 CinGrp[6:0] 및 OinGrp[6:0] 및 단일-엔트리 신호 P,K,G 및 O 로부터 발생될 수 있다. 도 9C는 RUY 실행 유닛에 발행을 위한 엔트리를 선택하는 논리를 보여주고 있다. 신호IssueOpToRUY[23:21] 엔트리(23 내지 21)를 발생하는 논리는 가장 오래된 그룹인 그룹7내로의 그룹 전파가 전혀 없기 때문에 다른 그룹에 대한 논리와는 다르다. 그룹6에 대한 IssueOpToRUY[20:18]를 발생하는 것으로 도시된 논리는 각 그룹5 내지 0에 대해 반복된다. 부록 B 의 표 B.31 에서 볼 수 있듯이, 최종 그룹0으로부터의 그룹 전파 항은 발행을 위한 연산의 선택을 위해 필요로 되지 않는다.
Ⅲ. A.2 오퍼랜드 정보 방송 단계
프로세스 파이프라인의 발행 단계의 방송 단계 동안, 실행 유닛에 발행될 연산들의 오퍼랜드에 관한 정보가 모든 스케쥴러 엔트리 및 외부 논리에 방송된다. 이 정보는 발행을 위해 선택된 각 연산을 위한 두 개의 소스 오퍼랜드를 설명한다. 선택된 연산을 위한 엔트리는 또한 상기 선택된 연산에 관한 정보를 외부 논리 및 관련 실행 유닛에 전송한다.
오퍼랜드 정보 버스(552)(도 5)는 스케쥴러(280)를 통과한다. 오퍼랜드 정보 버스(552)의 수는 실행 유닛에 요구되는 오퍼랜드의 최대 수와 일치한다. 선택된 연산과 관련된 엔트리는 이 관련 엔트리가 발행을 향할 실행 유닛과 관련된 두 개의 오퍼랜드 버스(522)를 구동한다. 각 오퍼랜드 정보 버스(552)는 8 비트 폭을 갖고 5-비트 레지스터 번호 Src1Reg[4:0] 또는 SrcReg[4:0] 및 소스 오퍼랜드를 위한 3-비트 바이트 표시 Src1BM[2:0] 또는 Src2BM[2:0]을 운반한다. 표 B.31 는 오퍼랜드 정보 버스(552)를 구동하는 엔트리 논리를 설명하고 있다.
각 엔트리 내부의 비교 논리는 방송 오퍼랜드 정보를 상기 비교를 행하는 엔트리내의 연산을 위한 목적지 레지스터에 관한 비슷한 정보와 비교를 한다. 상기 비교 논리는 레지스터 수가 맞는지 그리고 바이트 표시가 오버랩 하는지를 검사한다(즉, 오퍼랜드에 대해 요구되는 상기 바이트들 중 일부 또는 모두는 상기 연산에 의해 수정되거나 수정될 것이다). 다중 비교('오퍼랜드 정보 버스의 #' * '엔트리의 #')의 결과는 다음 프로세스 단계인 오퍼랜드 선택 단계(441) 동안 발생하는 연산을 제어하는 신호이다. 표 B.32 는 상기 비교를 수행하는 논리를 설명하고 있다. 아래의 식은 일반적인 비교를 요약한 것이다:
OprndMatch_XXsrcY = (busReg[4:0] = = DestReg[4:0])
&& (busBM[1] DestBM[1] + busBM[0] DestBM[0])
여기서, "XXsrcY"는 LUsrc1, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1, 및 RUYsrc2 중 하나이고, 'bus'는 오퍼랜드 정보 버스(552) 중 하나인 단일 신호 OprndInfo_XXsrcY 를 언급한다.
상기 비교 결과로부터 나오는 "Match" 신호 OprndMatch_XXsrcY 는 상기 방송 단계의 산물이고 상기 오퍼랜드 선택에서 사용된다. 이것은 각 엔트리 및 모든 엔트리의 내부에서 동시에 행해지며, 8개의 매칭 신호가 상기 엔트리의 오퍼랜트 선택 논리(532)에 파이프된다. 상기 모든 매칭 신호는 각 엔트리에 국부적으로 유지되고 후속 파이프라인 단계에서의 사용을 위해 레지스터에 래치된다. 본질적으로, 각 엔트리 내부에는, 8개의 오퍼랜드 정보 버스 비교기가 8개의 '제어' 신호를 8개의 오퍼랜드 선택 논리(532)에 공급한다. 최하위 열 내부의 각 엔트리 내부에 있는 상기 매칭 신호는 이들 연산의 레지스터결과의 커미트와 관련된 추가 신호들에 의해 구조적 레지스터 파일(290)에 게이트되거나 마스크 된다. 연산 커미트 유닛(260)에 대해서는 하기에 설명된다.
각 엔트리는 그 엔트리 내부의 오퍼랜드 매칭 레지스터내로의 매칭 버스의 로딩을 실제로는 제어하지는 않는다. 글로벌 논리(520)는 발행된 연산이 오퍼랜드 전송 단계(440)내로 진행되는지를 나타내는 신호 LUAdv0, SUAdv0, RUXAdv0, 및 RUYAdv0를 발생하고, 매칭 신호는 연산이 오퍼랜드 전송 단계(440)내로 실제 진행되는 경우에만 래치되어 사용된다.
로드 유닛(251), 저장 유닛(252),레지스터 유닛(253) 및 레지스터 유닛(254)에 대응하는 네 개의 연산 정보 버스(551)는 발행된 연산을 설명하는 추가 정보를 제공한다. 상기 추가 정보, 즉 OpInfo 필드는 상기 방송단계 동안 스케쥴러(280)로부터 판독되고, 상기 연산이 오퍼랜드 전송 단계로 실제 진행되는 경우 외부 파이프라인 레지스터내로 래치된다. 표 B.33 은 상기 연산 정보 신호를 발생하는 논리를 설명하고 있다.
방송 단계 동안 제공된 상기 Src1/2Reg 및 Src1/2BM 필드는 다음 두개의 단계 동안(즉, 오퍼랜드 전송 단계동안) 목적하는 수를 위해 사용된다. 상기 OpInfo 필드는 대응 실행 유닛에(대응 신호 XXAdv1 에 의해 제어되는 제2세트의 파이프라인 레지스터의 경유하여) 간단히 '파이프로 하향(down the pipe)' 통과된다. RUX 및 RUY 연산을 위해, 관련 바이트 표시 Src1/2BM 역시 대응 레지스터 유닛에 '파이프로 하향" 통과된다.
Ⅲ. B. 오퍼랜드 전송 단계
오퍼랜드 전송 단계는 오퍼랜드 선택 단계와 오퍼랜드 전송 단계로 구성된다.
Ⅲ. B.1 오퍼랜드 선택 단계
오퍼랜드 전송 단계의 각 사이클에서, 스케쥴러(280)는 발행 단계 논리(530)에 의해 발생되고 오퍼랜드 매칭 레지스터에 저장된 매칭 비트를 사용하여 '인출' 되는 오퍼랜드를 위한 값을 공급하는 엔트리를 선택한다. 스케쥴러(280)는 또한 각 오퍼랜드를 위해, 상기 오퍼랜드의 값이 스케쥴러 엔트리 또는 레지스터 파일(290)에서 나오는지 여부를 결정한다. 레지스터 파일(290)은 매칭 엔트리가 전혀 없다면 디폴트(default)된다. 상기 오퍼랜드 전송단계 동안, 상기 선택된 엔트리 및/또는 레지스터 파일(290)은 오퍼랜드 버스(544)상으로 오퍼랜드 값을 구동시켜 오퍼랜드 값을 관련 실행 유닛에 전송한다.
발행 단계에서의 발행 선택 프로세스에서처럼, 오퍼랜드 선택은 독립적이고 동시에 일어난다. 따라서, 오퍼랜드 선택 논리(532)에는 오퍼랜드를 제공하기 위해 엔트리를 선택하기 위해 8개의 스캔 체인이 포함되어 있다. 각 엔트리에는 각각의 오퍼랜드 버스 및 관련 스캔 체인을 위한 오퍼랜드 매칭 레지스터가 있다. 각 스캔 체인은 오퍼랜드가 인출되는 연산을 포함하고 있는 엔트리보다 더 오래된 매칭을 갖는 가장 새로운 엔트리를 찾는다. 논리적으로, 상기 스캔은 오퍼랜드가 인출되어 더 오래된 엔트리 방향으로 진행하는 연산을 포함하고 있는 엔트리로부터 오퍼랜드 매칭 비트 세트를 갖는 첫번째 엔트리까지 스캔을 시작한다(스캔 비트가 발생됨). 만일 매칭 비트를 갖는 엔트리가 발견되면, 그 엔트리는 다음 단계 동안 관련 오퍼랜드 버스(554)의 구동에 의해 요구되는 오퍼랜드를 공급한다. 만일 '매칭' 엔트리가 발견되지 않는다면, 상기 스캔 체인에서 출력되는 스캔비트는 레지스터 파일(290)이 상기 오퍼랜드 값을 공급하게 한다.
만일 오퍼랜드가 인출되는 연산이 오퍼랜드 전송 단계로부터 진행되지 않는다면, 상기 오퍼랜드 선택 프로세스는 다음 사이클에서 다시 수행된다. 만일, 예를들어 매칭 비트 세트를 갖는 엔트리가 상기 오퍼랜드를 위해 요구되는 모든 바이트들을 수정하지 않는다면(그래서 공급할 수 없게 되면) 연산은 진행되지 않는다. 필드 State 및 스케쥴링 저장소(540) 내의 연산들의 물리적 위치가 각 사이클에서 변화될 수 있기 때문에, 새로운 선택의 출력은 현재 사이클의 출력과는 다를 수 있다. 본질적으로 각 사이클동안, 상기 선택 프로세스는 그 사이클 동안 오퍼랜드 값을 전송 하는데 무엇이 행해져야 할 필요가 있는지를 결정한다.
오퍼랜드 값을 위한 적절한 소스를 찾기 위한 스캔은 앞서 설명한 발행 선택 스캔과 같은 방식으로 수행될 수 있다. 그러나, 스캔은 상기 발행 선택 스캔의 방향과는 반대인 더 오래된 연산의 방향으로 이루어지게 된다. 더욱이, 오퍼랜드 선택을 위해, 상기 스캔 체인은 '전파-제거(propagate-kill)' 체인이 아니다. 오퍼랜드 선택 스캔 체인은 전통적인 캐리 또는 '발생-전파-제거' 체인과 유사하다. 스캔 체인내로의 초기 스캔 비트 Cin 은 제로이고, 오퍼랜드가 인출되는 연산에 대응하는 엔트리가 상기 스캔 비트를 발생한다. 스캔 제거는 오퍼랜드 매칭 비트 세트를 갖는 첫번째 후속 엔트리에서 발생되고, 스캔 전파는 개입 엔트리(intervening entries)에서 발생된다.
글로벌 제어 논리(520)는 최종의/가장 오래된 엔트리로부터 상기 최종 출력 스캔 비트 Cout 를 사용하여, 어느 엔트리가 선택되었는지 여부 및 이에 따라 어느 레지스터 파일(290)이 오퍼랜드를 제공하도록 선택되어야 하는지를 결정한다. 만일 Cout 가 어서트되면, 글로벌 제어 논리(520)는 레지스터 파일(290)을 선택한다. 상기 선택된 소스는 상기 오퍼랜드 전송 단계의 뒷부분인 오퍼랜드 전송 단계 동안 대응 오퍼랜드를 구동한다. 상기 오퍼랜드 선택 단계 동안, 원하는 오퍼랜드값을 보유하는 레지스터 파일(290)내의 소스 레지스터는 레지스터 파일(290)이 상기 오퍼랜드 버스를 구동하기 위해 선택되는 경우 판독된다.
상기 발행 선택 스캔 체인에서처럼, 룩-어헤드 구현은 속도를 향상시킨다. 부록 B 의 표 B.34 는 종래의 Generate-Propagate-Kill 식과 유사한 룩-어헤드 식에서의 오퍼랜드 선택 스캔 체인의 예를 제공하고 있다.
Ⅲ. B.2 오퍼랜드 전송 단계
오퍼랜드 전송 단계(440)의 오퍼랜드 전송 단계(442) 동안, 8개의 소스 오퍼랜드 각각을 위한 값이 인출되고 오퍼랜드 버스(554)를 통해 관련 실행 유닛의 입력 레지스터로 전송된다. 오퍼랜드 값은 32-비트 양이지만, 일부 바이트는 정의되지 않기도 한다. 수정 연산이 진행되는 동안, 실행 유닛은 정의되지 않은 오퍼랜드 바이트들은 사용하지 않는다. 임의의 엔트리 또는 레지스터 파일(290)은 각 오퍼랜드 버스(554)를 구동할 수 있고, 스케쥴링 저장소(540)의 각 엔트리는 일부 및/또는 모든 버스를 구동할 수 있다.
한 실시예에서, 192개 오퍼랜드 선택 신호 및 8개의 스캔 체인 신호 Cout 가 상기 오퍼랜드 선택 단계 동안 발생된다. 이러한 신호에 기초하여, 선택된 각 엔트리내의 논리는 상기 엔트리 내의 적절한 버스 드라이버를 인에이블시킨다. 만일 오퍼랜드를 위해 어느 엔트리도 선택되지 않는다면, 레지스터 파일(290)은 그 오퍼랜드를 위한 드라이버를 인에이블시킨다. 부록 B 의 표 B.35 는 오퍼랜드 버스(554)를 위한 드라이버를 인에이블하는 논리를 설명하고 있다.
실행 유닛(251 내지 254)내의 오퍼랜드 레지스터는 연속되는 파이프라인 단계에서의 이용을 위해 오퍼랜드 버스(554)로부터 상기 오퍼랜드 값을 포획한다. 글로벌 제어 논리(520)는 프로세스 파이프라인 마다 하나씩의 제어 신호를 발생하여 상기 오퍼랜드 레지스터의 로딩을 제어한다. 오퍼랜드 전송 단계의 연산이 실행 단계(450)내로 진행될 수 있는 경우 실행유닛내로 새로운 오퍼랜드 값이 로드된다. 비슷하게, 신호 SUAdv1, RUXAdv1, 및 RUYAdv1 은 각각 상기 오퍼랜드 레지스터의 SU, RUX 및 RUY 로딩을 제어한다.
4개의 프로세스 파이프라인의 오퍼랜드 전송 단계(440)의 오퍼랜드 전송 단계(442)동안, 오퍼랜드 값을 제공하기 위해 선택된 연산들 각각에 관한 정보도 스케쥴러(280)로부터 판독된다. 각 오퍼랜드 버스(554)는 인출되는 오퍼랜드의 '원천(origin)'를 설명하는 오퍼랜드 상태 신호 OprndStat 를 운반하는 관련 오퍼랜드 상태 버스(553)를 갖는다. 어떤 엔트리로부터의 오퍼랜드 상태 신호는 상기 오퍼랜드 값을 제공하는 엔트리의 필드들 즉, State,DestBM, Type 및 Execl의 연쇄로 이루어진다. 외부 논리는 상기 오퍼랜드 전송 단계 동안 이 정보를 사용하여 유효한 오퍼랜드 값의 소스 및 사용가능성을 결정한다.
레지스터 파일(290)은 또한 오퍼랜드 상태 버스(553)가 정의된 값을 운반하고 상기 정의된 값으로 인해 상기 정보를 사용하는 논리에 의해 적절히 연산이 이루어질 수 있도록 하는 오퍼랜드 상태 버스(553)을 위한 드라이버 세트를 갖는다. 부록B 의 표 B.36 은 상기 오퍼랜드 상태 신호 및 이 신호의 발생을 설명하고 있다.
실행 유닛에 배송되는 각 소스 오퍼랜드는 세 가지 가능성 소스들-스케쥴러 엔트리, 레지스터 파일(290), 이 실행 유닛 또는 다른 실행 유닛의 결과 버스- 중 하나로부터 나온다. 오퍼랜드 전송 단계(442)는 엔트리로부터 배송을 전담한다. 레지스터 파일(290)은 스케쥴러 연산과 병행하여 오퍼랜드 전송 단계동안 액세스된다. 특히, 상기 원하는 오퍼랜드를 위한 레지스터 번호가 상기 방송 단계 동안 상기 연산엔트리로부터 방송되며 레지스터 파일(290)의 적절한 판독 포트에 전송된다. 제공될 각 오퍼랜드를 위해, 스케쥴러(280)는 스케쥴러 엔트리 또는 레지스터 파일(290)이 상기 오퍼랜드에 댕응하는 오퍼랜드 버스(554)를 구동하는지를 결정하고, 그 결과의 오퍼랜드가 상기 오퍼랜드 전송 단계 동안 상기 오퍼랜드 버스(554)를 통해 상기 실행 유닛에 전송된다.
도 10에 도시되어 있듯이, 오퍼랜드 버스(554)는 멀피플렉서(1010)을 통해 실행 유닛(251 내지 254) 내의 오퍼랜드 입력 레지스터(1021 내지 1024 및 1031 내지 1034)와 결합한다. 실행 유닛(251 부터 254)으로부터의 결과 버스(561내지 564)도 멀티플렉서(1010)와 연결된다. 따라서, 5개의 '오퍼랜드' 버스가 각 실행 유닛의 각 오퍼랜드 입력으로 진행되는바, 상기 5개의 오퍼랜드버스는 스케쥴러(280) 또는 레지스터(290)로부터 그 오퍼랜드를 입력하도록 된 오퍼랜드 버스(554)중 하나와 그리고 실행 유닛(251부터 254)으로부터의 4개의 결과 버스이다. 상기 오퍼랜드 전송 단계 동안에는, 스케쥴러(280)는 각 오퍼랜드 입력 레지스터에서 5:1 멀티플렉서(1010)용 선택 신호를 발생한다. 상기 오퍼랜드 상태 신호는 원하는 오퍼랜드 값이 실행 유닛에서 사용가능하거나 또는 바로 사용가능하게 될 수 있는지를 나타내는 바, 만일 그렇다면 실행유닛(251 내지 254)으로부터의 적절한 결과 버스 및 값 Result_XX 가 선택된다. 그렇지 않으면, 오퍼랜드 버스(554)가 선택된다. 오퍼랜드의 유효성은 오퍼랜드 전송 단계(440)내의 관련 연산이 실행 단계(450)로 진행하여 따라서 실행 유닛내로 실제 들어가는지에 대해서만 영향을 미치는 독립적인 문제이다.
Ⅲ. B.3 변위 전송
레지스터 오퍼랜드에 부가하여, 스케쥴러(280)는 오퍼랜드 전송 단계(442) 동안 변위 오퍼랜드를 인출하여 LU 및 SU프로세스 파이프라인으로 전송 시킨다. 로드 유닛(251) 및 저장 유닛(252)에는 3개의 입력 오퍼랜드 버스(두 개의 레지스터 버스(554) 및 하나의 변위 버스(555))가 있다. 변위 오퍼랜드는 32-비트 양이지만, 변위 오퍼랜드에서의 일부 바이트들은 정의되지 않기도 하여 따라서 실행 유닛(251,252)의 수정 연산 동안에 사용되지 않는다.
스케쥴러(280)는 연산 레지스터 결과 값과 비슷한 방식으로 변위를 프로세스한다. 변위는 처음에, 상기 오퍼랜드 전송 단계(442) 동안 필요시 변위 버스(555)상에서 이용되어 구동될 때 까지 엔트리의 32-비트DestVal 필드 내부에 저장된다. 변위는 항상 RISC86 연산을 위한 즉시 값이어서, 레지스터 파일(290)으로부터의 변위 값의 전송이 발생하지 않는다. 필드 DestVal은 또한 LdOp 및 일부 StOp로부터의 결과 값을 위해 사용되지만은 필드 DestVal 의 두 개의 사용은 충돌하지 않는 바, 이는 결과 값이 변위가 엔트리로부터 전송된 후까지 즉, 오퍼랜드 전송 단계(440) 이전까지는 스케쥴러 엔트리내로 로드되지 않기 때문이다.
연산들 내에 특정된 작은(8-비트) 변위는 큰(16/32-비트) 변위와는 다르게 다루어진다. 연산 디코더(510) 사인(sign)은 작은 변위를 상기 관련된 LdStOp 를 유지하는 엔트리의 DestVal 필드내로 로드하기 전 상기 작은 변위를 확대시킨다. 큰 변위는 상기 변위를 사용하여 LdStOp 에 바로 선행하는 LIMMOp 를 위한 엔트리의 DestVal 필드 내에 저장되는 것으로 여겨진다. 일반적으로, 상기 선행하는 엔트리는 상기 LIMMOp 가 발행되거나 실행되지 않도록 완료된 상태로 스케쥴러(280)내로 로드될 수 있는 'LIMM t0,[disp]' 연산을 유지한다.
각 사이클동안 변위 버스(555)를 구동시키기 위해 DestVal 필드의 선택은 스케쥴러 엔트리의 스캐닝을 요구하지 않는다. 대신, 각 엔트리는 그의 드라이버 또는 선행하는 엔트리에 있는 드라이버로 하여금 DestVal 필드 값을 적절한 변위 버스(555)상으로 어서트하게 할 수 있는지 여부를, 그의 State 및 Type 필드로부터 결정한다. 부록 B의 표 B.37 은 각 엔트리 내부의 상기 변위 버스 드라이버를 인에이블시키기 위한 논리가 요약되어 있다.
Ⅲ. B.4 즉시 값 전송
RISC86 연산의 포맷의 예에서, 즉시 값은 RegOp의 오퍼랜드 src2 이다. 스케쥴러(280)는 즉시 값 및 변위를 유사하게 다룬다. 상기 RISC86 명령 세트는 단지 RegOp 내의 작은(8-비트) 즉시 값만을 사용하고 연산 디코더(510)는 상기 RegOp 를 유지하는 엔트리의 필드 DestVal 내에 상기 즉시 값을 저장한다. 따라서, 즉시 값은 엔트리의 DestVal필드내에 저장된다는 점에서 변위와 같지만, 레지스터 오퍼랜드 버스(554)(특히 RUXsrc2 및 RUYsrc2 오퍼랜드 버스)에 전송된다는 점에서 레지스터 오퍼랜드와 같다. Src2 오퍼랜드를 위한 즉시 값은 레지스터 값 대신 오퍼랜드 전송 단계(440)의 오퍼랜드 전송 단계(442) 동안 각각의 레지스터 실행 유닛에 전송된다. 레지스터 값 소스(즉, 스케쥴러 엔트리 또는 레지스터 파일(290))의 선택은 금지되며, 상기 엔트리는 바로 그의 DestVal 필드를 상기 적절한 오퍼랜드버스(554)내로 직접 구동시킨다.
RUX/RUY src2 오퍼랜드 선택의 금지는 상기 RegOp 를 보유하는 엔트리가 보통 오퍼랜드 선택 스캔 체인내에 어서트하는 단일-엔트리 발생 항을 마스크 함으로써 오퍼랜드 선택 단계(441)동안 수행된다. 이것은 RUXsrc2 및 RUYsrc2 를 위해 개별적으로 그리고 독립적으로 행해지고, RUX/Ysrc2 스캔 체인에 의한 그 어떤 엔트리의 선택을 금지한다. 즉시 값을 포함하고 있는 엔트리도 레지스터 파일(290)을 상기 디폴트 오퍼랜드 소스로 선택하는 것을 막는다. 표 B.34 에 설명된 RUX 및 RUY 오퍼랜드 선택 스캔 체인을 위한 단일 엔트리 항은 상기 금지를 보이고 있다.
각 사이클 동안 상기 RUXsrc2 및 RUYsrc2 오퍼랜드 버스내로 구동할 작은 '즉시' DestVal 값의 선택은 스케쥴러 엔트리의 스캔을 요구하지는 않는다. 대신, 각 엔트리는 그의 DestVal 필드의 드라이버를 상기 엔트리의 State필드 및 관련 비트에 기초하여 간단히 적절한 오퍼랜드 버스(554)내로 인에이블시킨다. 동일한 드라이버가 레지스터 오퍼랜드 값 전송 및 즉시값 오퍼랜드 전송을 위해 사용될 수 있다. 부록 B 의 표 B.38 은 오퍼랜드 버스(554)상의 즉시 값을 구동시키기 위한 회로를 설명하고 있다. 엔트리가 즉시 값을 오퍼랜드 버스(554)상에 구동시킬때, 이 엔트리는 또한 관련 오퍼랜드 상태 버스(553)도 구동시킨다. 레지스터 오퍼랜드를 위한 동일한 버스 드라이버 및 드라이버 입력값이 즉시 값을 위해 그러나, 되는 것이 표 B.38 에 도시된 추가 항과 함께 사용된다.
Ⅲ. C 데이터 오퍼랜드 인출
StOp 에는 세 개의 레지스터 소스 오퍼랜드가 있고 목적지 레지스터는 없다. 반면에 다른 연산은 최고 두 개의 소스 오퍼랜드 및 하나의 목적 레지스터를 가져야만 한다. StOp에 대한 세 번째 소스 오퍼랜드는 저장될 데이터를 제공하는데 본 명세서에서는 데이터 오퍼랜드로 종종 언급된다. 상기 데이터 오퍼랜드는 StOp 의 실행을 시작시킬 필요가 없지만 StOp의 완료는 필요하다. 데이터 오퍼랜드의 인출은 다른 소스 오퍼랜드의 인출과 비슷한 방식으로 수행되지만, '정상적인' 오퍼랜드 인출 프로세스는 발행 단계(430) 및 오퍼랜드 전송 단계(440) 동안 발생하고, 상기 데이터 오퍼랜드 인출프로세스는 SU실행 단계(450,460) 동안 발생한다. 스케쥴러(280)는 SU 실행 단계(460) 동안 데이터 오퍼랜드의 사용가능성을 검사하고 만일 상기 데이터 오퍼랜드가 사용가능하지 않다면 단계(460) 내의 관련 StOp를 유지한다.
상기 데이터 오퍼랜드 인출 프로세스는 크게 볼 때 두 가지 다른 원리를 가지고 앞서 설명한 발행 및 오퍼랜드 전송 단계와 비슷하다. 첫 번째로, 연산 선택 단계(456)는 발행 선택 단계(431) 동안 발생하는 여러 후보들 간에서 선택하기 위한 스케쥴러 오퍼랜드에 대한 스캔을 필요로 하지 않는다. 대신, SU 단계(450)에서 상기 StOp 와 관련된 엔트리는 State 및Type 필드로부터 스스로 식별하고 필요한 경우 저장 유닛(252)에 상기 데이터 오퍼랜드를 제공한다. 두 번째 차이는 상기 StOp 의 OpInfo 필드가 상기 데이터 오퍼랜드를 위한 방송 단계(457) 동안 저장 유닛(252)에 (다시)판독될 필요가 없다는 것이다. 대신, 저장 유닛(252)은 상기 StOp가 발행되는 때로부터 상기 OpInfo 값을 유지하고 사용한다. 상기 SU 발행 단계(430) 동안 판독된 상기 OpInfo 값은 오퍼랜드 전송 단계 및 SU 파이프라인의 제1 및 제2실행 단계를 통해 하향 통과된다.
부록 B의 표 B.39는 데이터 오퍼랜드 선택 및 전송을 위해 발생되는 신호를 설명하고 있다.
Ⅲ. D 레지스터 연산 충돌
스케쥴러(280)는 각 연산 타입에 대한 순서적 발행 선택 및 프로세스에 기초하여 실행 파이프라인들을 관리한다. "정상적으로는" 실행 유닛에 발행된 연산은 상기 연산이 발행된 순서로 파이프라인으로 하향진행된다. 연산이 예컨대, SU 또는 LU 파이프라인의 오퍼랜드 전송 단계내에 정체되면, 그 파이프에 발행을 위해 현재 선택되고 있는 연산 역시 연산들이 프로세스 파이프라인 내부에서 서로 통과되지 않기 때문에 정체된다. 그러나, RegOp가 하나 또는 그 이상의 이용불가능한 오퍼랜드 값으로 인해 레지스터 유닛(253) 또는 레지스터 유닛(254)의 오퍼랜드 전송 단계내에서 정체되면, RegOp는 상기 프로세스 파이프로부터 범핑되어 미발행 상태로 되돌아 갈 수 있다. 범핑은 상기 RegOp 의 State 필드를 b0000 으로 다시 설정한다. RegOp가 오퍼랜드 전송 단계(440)로부터 범핑되면 그 레지스터에 발행을 위해 선택된 다른 RegOp 가 오퍼랜드 전송 단계(440)로 진행되어, 즉시 상기 범핑된 RegOp 를 대신하게 된다. 동시에, 상기 범핑된 RegOp는 (필연적이지는 않지만)레지스터 유닛에 재발행될 자격을 갖는다.
범핑은 모든 RegOp에 적용가능하지만은 다음 제약을 받는다. 먼저, RUX-only RegOp(RUX 오퍼랜드 전송 단계 내)는, RUX-only RegOp가 서로에 대해 순서적으로 실행되어야 하는 제한을 위반할 수도 있기 때문에 RUX-only RegOp 가 RUX에 발행을 위해 현재 선택된다면 범핑되지 않는다. 두 번째로, RegOp는 상기 RegOp 가 한 사이클 이상 동안 정체되는 경우 범핑되어아 하는 바, 그렇지 않으면 오퍼랜드 전송 단계(440) 내에 상기 RegOp를 남김으로써 실행 유닛 자원을 더욱 효과적으로 사용할 수 있게 된다. 표 B.12 는 RegOp 범핑을 구현하기 위해 엔트리의 State 필드를 변경시키는 회로를 설명하고 있다. 글로벌 제어 논리(520)는 각각 신호 RUXAdv0 및 RUYAdv0의 어서트를 강요하는 글로벌 범핑 신호 BumpRUX 및 BumpRUY 를 발생하여 적절하게 발행된 RegOp가 오퍼랜드 전송 단계(440)로 진행되게 된다. 글로벌 제어 논리(520)에 대한 하기의 설명은 RegOp가 범핑되는 조건들을 더 나타내고 있다.
Ⅲ. E 로드/저장 순서화
스케쥴러(280)는 LdOp 와 StOp 간에 요구되는 순서화 유지를 지원한다. 특히, 로드-저장 순서화 논리(534)는 선택된 LdOp 및 StOp의 상대적 에이지를 나타냄으로써 로드들 및 저장들의 메모리 종속성 체크를 지원한다. 만일 LdOp 또는 StOp가 아직 완료되지 않은 더 오래된 StOp 또는 LdOp와 같은 동일 어드레스를 액세스 할 가능성이 있다면, 실행 단계(460)에서 LU 및 SU 실행 파이프라인의 홀드 연산들이 적절한 로드-저장 순서화를 유지한다.
로드 및 저장 유닛(251,252)에는 어드레스 비교기가 포함되어 있으며, 스케쥴러(280)내의 순서화 논리(534)는 LdStOp들의 상대적인 에이지를 버스(556)상에 제공하여, 상기 제2 실행 단계(460)내에 LdOp 또는 StOp를 유지할지를 결정할 때 단지 적절한 어드레스 비교들만이 고려된다. 상대적 에이지 결정 프로세스는 발행 선택/오퍼랜드 정보 방송 프로세스와 비슷하다. LdOp 및 StOp에 대한 실행 단계(460)의 첫 번째 단계(463)동안, 순서화 논리(534)는 가장 오래된 것부터 가장 새로운 것 까지 모든 스케쥴러 엔트리 전반에 대해 5개의 '전파-킬(propagate-kill)' 스캔을 수행한다. 2 개의 스캔은 SU 단계(460)에서 LdOp 와 StOp를 비교하고, 3 개의 스캔은 LU 단계(460)에서 StOp 와 LdOp를 비교한다. 두 번째 단계(464) 동안, 실행 단계(460)에서 상기 LdOp 및/또는 StOp에 대한 엔트리는 관련된 2 또는 3 개의 스캔 체인 결과를 샘플링하고, 원하는 상대 에이지 정보를 직접 나타내는 글로벌 신호인 SC_SU2OLDER, SC_SU1OLDER, SC_SU0OLDER SC_LU2OLDER 및 SC_LU1OLDER 를 버스(556) 상에서 구동시킨다.
실행 단계(460) 또는 단계(450)에 있으며 오정렬된 로드의 두 번째 절반을 수행하는 LdOp은, StOp들의 3 개의 카테고리에 관한 LdOp 에이지를 결정하는데 3 개 스캔 체인을 필요로한다. 각 스캔 체인은 카테고리 내에서 가장 오래된 StOp에 대해 스캔한다. 하나의 스캔 체인은 단계(460) 또는 단계(450)에서 오정렬된 저장의 두 번째 절반을 수행하는 StOp를 검출한다. 다른 스캔 체인은 단계(450) 에서 StOp를 검출하고, 3 개의 스캔 체인은 단계(450)에서 아직 검출되지 않은 가장 오래된 StOp를 검출한다. 상기 스캔 체인내의 어느 지점에서의 스캔 비트의 상태는 주어진 타입의 오래된 StOp가 아직 발견되지 않았는지 여부를 반영한다. 따라서, LdOp에 대한 엔트리는 입력 스캔 비트로부터, 주어진 카테고리내의 어느 StOp에 관한 LdOp의 에이지를 결정한다. 만일 상기 입력 스캔 비트 Cin이 '1' 이라면, 상기 스캔 신호는 아직 '킬' 되지 않고, 주어진 카테고리에 더 오래된 StOp는 존재하지 않게 된다. 로드-저장 순서화 논리(534)는, 상기 어드레스 비교기로부터의 신호들 중 어느 신호들이 관련이 있는지를 결정한다.
단계(460) 또는 단계(450)에 있으며 오정렬된 저장의 두번째 절반을 수행하는 StOp는 LdOp의 2 개의 카테고리에 관한 그의 에이지를 결정하기 위해 2 개의 스캔 체인을 요구한다. 하나의 스캔 체인은 단계(460) 또는 단계(450)에서 오정렬된 저장의 제 2 절반을 수행하는 어떠한 StOp를 검출한다. 제 2 스캔 체인은 단계(460)에서 아직 검출되지 않은 LdOp를 검출한다. 해당 StOp를 유지하는 엔트리로의 입력 스캔 비트 Cin에 기초하여, 순서화 논리(534)는 어드레스 비교기로부터의 신호들중 어느 신호들이 관련이 있는지를 결정한다.
각각의 스캔 체인은 가장 오래된 것부터 가장 최근의 스케쥴러 엔트리로의 "전파-킬" 체인이다. 부록 B의 표 B.40 및 미국특허 출원 제 08/592,209 호에 로드-저장 순서화에 대해 기술하고 있다.
Ⅲ. F. 중단 프로세스
중단 사이클이 발생하는 경우, 스케쥴러(280)는 플러쉬(flush)된다. 모든 Op quad는 모든 Op quad 필드 OpQV를 클리어하므로써 유효하지 않게 되고, 엔트리의 필드 또한 무해한 값으로 설정된다. 필드 OpQV가 Op Quad 로딩 및 시프팅의 제어에만 영향을 미치고, 스케쥴러(280)내 다른 연산은 필드 OpQV를 무시하며, 엔트리가 유효한 것으로 가정하기 때문에, 엔트리내 필드는 클리어되어야만 한다. 논리적으로 유효하지 않은 스케쥴러(280)내 연산은 유효하지만 무해한 연산으로 변경된다. 이것을 수행하기 위해, 연산의 State 필드는 완료된 것으로 설정되어, 이 연산이 발행되거나 실행되지 않을 것이다. DestBM 및 StatMod 필드는 연산이 어떠한 레지스터 바이트나 상태 플래그를 수정하지 않음을 나타내도록 설정된다. 이러한 환경에서, 모든 다른 필드는 어떠한 "해로움(harm)"을 일으키지 않는 어떤 값을 가질 수 있다. 그러한 연산은 효과적인 No-op 연산이다.
새로운 Op quad가 스케쥴러(280)가 플러쉬되자마자 스케쥴러(280)내로 로드될 수 있다. 새로운 Op quad는 플러쉬될 필요가 있는 미결의 Op quad와 관련되지 않으며, 대신, 이것은 중단 "이후"의 논리적으로 제 1의 새로운 Op quad가 된다. 이것은 중단 또는 오예측된 BRCOND 후에 발생된다. 중단 사이클 후에 상기 제 1의새로운 Op quad는 예외 조건으로 인해 지연된다.
효과적으로, 다음의 이벤트 시퀀스가 중단 사이클의 끝에서 발생한다. 스케쥴러(280)내 저장 요소들은 시스템 클럭 신호와 전체적으로 동기화되고, 다음 사이클 경계까지 입력에 응하여 상태를 변경시키지 않는다는 것을 주목해야 한다. 먼저, 필드들 즉, OpQV, State, DestBM, 및 StatMod에서의 변경이 상기한 바와 같이 발생한다. 그러면, Op quad의 모두 또는 일부가 하나의 위치로 시프트 다운하거나, 또는 아무것도 하나의 위치로 시프트하지 않고, 새로운 Op quad가 스케쥴러 엔트리의 상부 위치로 로드된다. 예외 관련 중단에서, 새로운 Op quad는 또한 무효화되고, 모든 스케쥴러 Op quad가 플러쉬되기 때문에 발생하는 시프팅은 모두 일반적으로 무시된다. BRCOND 관련 중단에서, 새로운 Op quad는 유효하거나 또는 비어 있다.
Abort 신호는 2 개의 변수 "이론(early)", "늦은(late)"에서 오게된다. "이른" 변수는 SC_EAbort로 불리우고, "늦은" 변수는 SC_Abort로 불리운다. 이른 중단 신호는 중단의 즉시 확인을 요구하는 스케쥴러(280)의 섹션에 전송된다. 늦은 변수는 이런 변수와 동일하지만, 플립플롭에서 한 사이클 지연되고 보다 폭넓게 전송된다.
Ⅳ. 글로벌 제어 논리
각각의 엔트리와 관련된 논리에 추가적으로, 스케쥴러(280)는 스케쥴러(280)를 글로벌 제어하는 논리를 포함한다.
A. 외부 논리에 의해 사용된 스케쥴러 정보
글로벌 제어 논리(520) 및 실행 유닛(251,254)과 같은 외부 논리는 오퍼랜드 값을 인출하는 방송 및 오퍼랜드 전송 단계동안 스케쥴러(280)에 의해 제공되는 복수의 정보를 사용한다. 대부분의 오퍼랜드 타입에서, 방송 및 오퍼랜드 전송 단계는 실행 파이프라인의 발행 및 오퍼랜드 전송 단계 동안 있게 된다. 방송 단계 동안, 그의 오퍼랜드가 인출되는 연산에 관한 정보는 적절한 OpInfo 버스(551)상에서 판독되고 연산의 2 개의 소스 레지스터(Src1,Src2) 및 바이트 표시(Src1BM, Src2BM) 필드는 2 개의 관련 OprndInfo 버스(552)상내로 판독된다. StOp들의 데이터 오퍼랜드에 대해서, 방송 단계 및 오퍼랜드 전송 단계는 SU 단계(450,460) 동안에 있게 된다. StOp에 대한 데이터 오퍼랜드의 정보는 관련 OprndInfo 버스(552)상으로 구동되지만, 관련 OpInfo는 없다. 저장 유닛(252)은 StOp가 발행된 때부터 연산 정보를 보존한다. 방송 오퍼랜드 정보는 다음 두 단계동안 사용된다. 연산 정보는 실행 유닛에서 파이프라인 아래로 간단하게 패스된다. 레지스터 유닛(253,254)의 경우에서, OprndInfo 버스(552)로부터의 2 개의 소스 바이트 표시 Src1BM 및 Src2BM 비트 또한 파이프라인 아래로 패스된다. 오퍼랜드 전송 단계동안, 오퍼랜드 값의 소스가 되는 연산들 각각에 관한 정보는 각각의 오퍼랜드 버스(554)와 관련된 OprndStat 버스(553)상에서 판독된다. 소스 연산의 상태를 설명하는 정보는 이 단계동안 직접(및 단지) 사용된다. 표 B.41는 여러 시간에서 스케쥴러(280)로부터 판독되는 정보를 요약하고 있다.
B. 글로벌 제어 기능
먼저, 스케쥴러(280)의 코어를 구성하는 논리, 저장 요소, 및 버스를 설명한다. 스케쥴러(280)는 또한 스케쥴러(280)내에서의 시프팅 및 실행 유닛(251 내지 254)으로의 연산 및 오퍼랜드의 피디(feeding)을 프로세스하는 글로벌 제어 논리(520)를 포함한다. 다음에서는 오퍼랜드 추출 프로세스의 4 개의 단계에 대한 글로벌 제어 논리(520)들을 설명한다.
발행 선택 단계동안, 단지 외부적인 관심 사항은 연산이 각각의 프로세싱 파이프라인으로의 발행을 위한 연산이 선택되었느냐이다. 적절한 연산을 발견하지 못한 각각의 발행 선택의 경우, 어떠한 스케쥴러 엔트리도 대응하는 OpInfo 및OprndInfo 버스(551,552)를 구동하지 않는다. 이러한 프로세싱 파이프라인에 대한 다음의 3 개의 단계 및 이들 버스상의 값은 고려되지 않는다. 단지 필요한 것은 실행 파이프라인의 오퍼랜드 전송 단계(440)에 대한 연산 유효 비트(OpV)가 이 파이프라인 단계에서 오퍼랜드 전송 단계(440)가 비어 있음을 표시하도록 제로가 된다는 것이다.
오퍼랜드 전송 단계 연산 유효(OpV) 비트는 유효한 연산이 연산 유닛에 발행되는지를 나타낸다. 각각의 발행 선택 스캔 체인의 출력 스캔 비트 Cout는 발행 단계에서 연산들을 위해 OpV 비트를 발생한다. 표 B.42는 연산 유효 비트 즉, OpV 비트를 설명하고 있다. 글로벌 신호 XXAdv0는 비어있는 연산의 프로세스를 따르도록, 파이프라인 레지스터 내로 OpV 비트를 로드하는 것을 제어한다. 중단 사이클동안, 모든 파이프라인 레지스터는 실행 유닛을 플러쉬하도록 무조건부로 클리어된다.
방송 단계는 스케쥴러(280)로부터 판독한 정보(즉 OprndInfo 및 OpInfo 값)를 래치하는 파이프라인 레지스터를 제어하기 위한 것 이외에 다른 중요한 글로벌 제어 논리를 필요로 하지 않는다.
오퍼랜드 선택 단계동안, 두 개의 외부 활동이 일어난다. 첫째로, 선행 단계동안 판독된 소스 레지스터 번호(즉, 래치된 OprndInfo 값의 SrcYReg 필드)가 레지스터 파일(290)에 액세스하기 위해 사용된다. 이는 스케쥴러(280)내의 오퍼랜드 선택 스캔과 동시에 실행된다. 9 개까지의 소스 오퍼랜드가 각 사이클마다 인출될 수 있다. 따라서, 레지스터 파일(290)은 9개의 대응 판독 포트를 구비하고, 이들 포트 각각은 오퍼랜드 버스(554)의 하나와 관련된다. 이들 포트에 나타나는 레지스터 필드는 XXsrcY 및 SUsrcSt이고, 여기서 XX={LU,SU,RUX,RUY} 및 Y={1,2}이다.
오퍼랜드 선택 단계동안의 두 번째 외부 활동은 각 오퍼랜드 버스(554) 및 오퍼랜드 정보 버스(552)에 대해 스케쥴러(280) 또는 레지스터 파일(290)이 다음 단계 동안 값을 제공하는지를 결정하는 것이다. 각 스케쥴러 엔트리는 직접 자신이 버스를 구동해야만 하는지 아닌지를 결정하며, 따라서 글로벌 제어 논리(550)에 대한 유일한 관심 사항은 레지스터 파일(290)이 인에이블 되어야만 하는지이다. 레지스터 파일(290)의 인에이블링은 어느 엔트리가 오퍼랜드 선택 단계 동안 선택되었지를 나타내는 출력 스캔 비트, Cout에 기초한다. 오퍼랜드 선택 스캔 체인의 최종 스캔신호 Cout가 관련 오퍼랜드 버스(554)에 대해 어떤 엔트리도 선택되지 않았음을 나타내면, 글로벌 제어 논리는 레지스터 파일(290)이 관련 오퍼랜드 버스(554) 및 오퍼랜드 정보 버스(552)를 구동하게 한다. 오퍼랜드 버스(554)상의 신호를 나타내는 등식은 부록 B의 표 B. 35 및 표B.36에 기재되어 있다.
오퍼랜드 전송 단계동안, 글로벌 제어 논리(520)는 RegOp '범핑', 실행유닛의 모든 실행 유닛 입력 멀티플렉서(1010), 인출되는 각 오퍼랜드 값에 대한 타당성 결정, 및 글로벌 파이프라인 레지스터 제어신호(XXAdvO)의 생성 인자인 신호 HoldXXO의 생성을 제어한다.
하나의 RegOp 범핑의 실행은, 엔트리의 State 필드를 변경시키는 각 스케쥴러 엔트리내의 논리와, 글로벌 범핑신호 BumpRUX 및 BumpRUY 신호를 생성하고 신호 RUXAdvl 및 RUYAdvl 신호의 어서트를 강요하는 글로벌 제어 논리(520)와의 사이에서의 분할(split)이다. BumpRUX/Y 신호의 생성은 오퍼랜드 전송 단계동안 레지스터 유닛 소스 오퍼랜드(즉, OprndStat_RUXsrcY 및 OprndStat_RUYsrcY, 여기서 srcY={src1,src2})에 대해 스케쥴러(280)로부터 판독되는 OprndStat 값에 기초한다. 특히, 각 오퍼랜드 소스에 대한 State 및 Type는 소싱 연산이 유효한 오퍼랜드 값을 제공하는 것부터 적어도 2 사이클 벗어나 있는지를 결정하기 위해 테스트된다. 소싱 연산이 유효한 오퍼랜드값의 제공으로부터 적어도 2 사이클 벗어나 있다면, 종속 RegOp는 오퍼랜드 전송 단계로부터 범프된다. RegOp가 오퍼랜드 전송 단계로 진행되지 않았으면, RegOp는 오퍼랜드를 제공하는 것으로부터 적어도 2 사이클 벗어나 있다. LdOp가 첫 번째 실행 단계로 진행되지 않았으면, LdOp는 오퍼랜드의 제공으로부터 적어도 2 사이클 벗어나 있다.
표 B.43은 신호 BumpRUX/Y의 생성을 요약한 것으로, 만일 그러하지 못한 경우 데드락 상황이 될 수도 있는 경우를 프로세스하기 위한 부가적인 타임아웃 항을 포함한다. RUX 및 RUY 오퍼랜드 전송 단계와 관련된 3-비트 카운터가 연산이 하나 이상의 타임 아웃 기간 동안 오퍼랜드 전송 단계에 홀드된 후 신호, RUX/Y timeout을 발생한다. RUX를 예로 들면, RUX 오퍼랜드 전송 단계가 로드될 때마다(유효한 연산인지 또는 유효하지 않은 연산인지에 관계없이), 관련 카운터는 시작 값으로 재설정된다. 다른 모든 사이클 동안, 이 카운터는 감분(decrement)된다. 카운터가 000에 도달하면, RUX timeout이 어서트되어 연산이 너무 오랫동안 정체되었음을 나타낸다.
RUX/Y timeout 신호는 레지스터 유닛(253,254)의 오퍼랜드 전송 단계에 대한 대응 연산 신호 OpV가 설정되도록 한다. 예를 들면, 신호 RUX timeout은 즉시 신호 OpV_RUX_0가 0이 되도록 하고, 그리고 나서 파이프 라인 제어 신호 RUXAdv0의 어서션이 RUX 오퍼랜드 전송 단계를 재로드 하도록 한다. 신호 OpV _RUX_0는 신호 RUXAdv1이 또한 어서트되면 RUX 실행 단계(450)가 충돌된 RegOp를 알지 못하도록 한다.
오퍼랜드 전송 단계동안 일어나는 두 번째 글로벌 제어 기능은 실행 유닛(251-254)에 연결된 각각의 소스 오퍼랜드 입력 멀티플렉서(1010)용의 제어 신호의 생성이다. 위에서 설명한 바와같이, 각 5:1 멀티플렉서(1010)는 관련 오퍼랜드 버스(554) 또는 오퍼랜드 버스(561-564)중의 하나로부터 오퍼랜드를 선택하여 오퍼랜드 레지스트(1021-1024) 또는 (1031-1034)중 관련된 어느 하나에 로드한다. 오퍼랜드 전송 단계(442)동안, 제어 논리(520)는 버스(553)으로부터 오퍼랜드 상태 신호 OprndStat를 사용하여 각 멀티플렉서(1010)용 제어신호를 생성하고, 오퍼랜드 OprndStat_SUsrcSt 및 OprndStat_XXsrcY(여기서 XX={LU,ST,RUX,RUY} 및 Y={1,2})를 선택하여 오퍼랜드 레지스터내로 로드한다. 특히, 글로벌 제어 논리(520)는 각 오퍼랜드 소스용 필드 State 및 Type을 검사하여, 소싱 연산이 실행을 완료했는지, 만약 완료되지 않았다면 어느 실행 유닛이 소싱 연산을 실행하는지를 결정한다. 오퍼랜드 버스(554)는 소스가 레지스터 파일(290)인지, 완료된 연산인지 혹은 src2 즉시 값을 그 자신에 제공하는 연산인 경우 선택된다. 그렇지 않다면, 소싱 연산의 타입에 대응하는 실행 유닛으로부터 결과 버스가 선택된다. 이 결과 버스로부터의 오퍼랜드는 소싱 연산이 그 사이클에서 완료되지 않는한 유효한 것으로 되지 않을 것이다. 부록 B의 표 B.44는 각 오퍼랜드에 대한 선택 신호의 발생을 요약한 것이다.
오퍼랜드 전송 단계동안 일어나는 세 번째 글로벌 제어 기능은 실행 유닛 소스 오퍼랜드 레지스터에 나타나는 9 개의 오퍼랜드 값 각각에 대한 유효성 결정이다. 각 소스 오퍼랜드에 대해, 소스 오퍼랜드 값이 유효한지 여부를 나타내는 신호가 발생된다. 관련 실행 유닛 입력 멀티플렉서(1010)를 제어하는 경우처럼, 오퍼랜드 유효성 결정은 버스(533)으로부터의 OprndStat 값의 필드인 State 및 Type에 기초한다. 오퍼랜드가 유효해지기 위해서는 소싱 연산은 실행을 완료했거나 혹은 현재 완료를 하고 있어야 한다. 또한, OprndStat 값의 DestBM 필드가, 인출되는 오퍼랜드에 대한 래치된 OprndInfo 값의 필드 Src1BM 또는 Src2BM과 비교된다. 오퍼랜드가 유효하기 위해서는, 소싱 연산의 바이트 표시는 요구되는 바이트 표시 Src1BM 또는 Src2BM의 슈퍼세트(superset)이어야 한다. src2 즉시 값은 항상 유효하다. 신호 OprndInvld_XXsrcY는 어서트되어 실행 유닛 XX에 대한 오퍼랜드 srcY가 유효함을 표시한다. 표 B.45는 신호OprndInvld_XXsrcY를 생성하는 논리를 요약한 것이다.
오퍼랜드 전송 단계동안 일어나는 네 번째 글로벌 제어 기능은, 진행을 위해 요구되는 오퍼랜드가 유효하지 않을 때 파이프라인 단계내에서 연산을 홀드하는 파이프라인 제어 신호의 생성이다. 소스 오퍼랜드가 이용가능하지 않으면, 신호 SC_HoldXX0는 실행 유닛 XX의 오퍼랜드 전송 단계(440)에서 연산들을 홀드하지만, 신호 SC_HoldSU2는 만일 데이터 오퍼랜드가 유효하지 않으면 두 번째 실행 단계(460)내에서 StOp를 홀드한다. cc-dep RegOps들은 요구되는 조건 코드가 유효하지 않으면 오퍼랜드 전송 단계(440)내에서 홀드된다. 표B.46은 신호SC_HoldXX0 및 SC_HoldSU2를 생성하는 논리를 요약한 것이다.
Ⅴ. 상태 플래그(Status Flags)
x86 구조 플래그 및 마이크로-구조 플래그용 상태에 대한 플래그 논리(538)는 세 개의 기능영역: cc-depRegOps들에 대한 상태 플래그 오퍼랜드 값의 인출, BRCOND의 분해를 위한 상태 플래그 값의 인출, 및 비-중단RegOps의 선행 BRCOND와의 동기화를 갖는다. 오퍼랜드 선택 논리(532) 및 LdOp-StOp 순서화 논리(534)와는 다르게, 상태 플래그 프로세스 논리(538)는 모든 스케쥴러 엔트리에 확장되지 않는다. 관련 연산을 위한 상태 플래그 프로세스는 단지 상태 플래그를 액세스하는 연산들이 스케쥴러(280)내의 특정 열내에 있는 동안만 실행된다. cc-dep RegOps는 상태 오퍼랜드 인출이 실행되는 사이클 동안(즉, RUX 오퍼랜드 전송 단계동안) 열 3에 있어야 한다. BRCOND 및 비-중단 RegOps는 분기 평가 유닛(257) 및 RUX 오퍼랜드 전송 단계에 의한 분해동안 열 4에 있어야 한다. 따라서, cc-dep 및 비-중단 RegOps는 그들이 열 3 및 4로 시프트 다운할때까지 RUX 오퍼랜드 전송 단계내에 홀드되고, 열 3 및 4내의 Op 쿼드의 시프팅은 이들 열내의 Cc-dep 및 비-중단 RegOps가 RUX 실행 단계내로 진행할 때까지 억제된다. BRCON은 평가를 위해 요구되는 플래그가 유효해질 때까지 열 4내에 잔류한다.
연산이 스케쥴러(280)의 특정열에 있을 때 cc-dep RegOps, 비-중단 RegOps, 및 BRCOND의 실행 및 평가의 억제는 상태 플래그 프로세스 논리(538)를 단순화한다. 예를 들면, 상태 플래그 프로세스 논리(538)는 하부의 3 개의 스케쥴러 열에서만 요구되며 하부의 또한, 동일 상태 플래그 값들은 열 3내의 cc-dep regOp 및 열 4내의 BRCOND 모두에 의해 공유될 수 있다. 비-중단 RegOp 및 BRCON간의 동기화는 평가시 BRCOND의 위치가 고정되기 때문에 단순화된다.
cc-dep RegOp, BRCOND, 및 비-중단 RegOp의 Op 쿼드내에서의 서로에 대한 위치결정시 가해지는 다수의 제한들은 논리를 더 단순화한다. 이 제한들은 일반적으로 엔코드를 위한 코딩 규칙으로 변환되지만, 몇몇 경우에 사이클내에서 다중 매크로명령의 MacDec 242 디코딩을 또한 억제한다. 이 제한들은 Op 쿼드가 다음을 포함할 것을 요한다.
1) BRCOND 후 cc 변경 RegOp없음;
2) cc-dep RegOp 이전에 cc 변경 RegOp없음;
3) 비-중단 RegOp 및 BRCOND 없음;
4) 단지 하나의 cc-dep RegOp;
5) 단지 하나의 BRCOND; 및
6)단지 하나의 비-중단 RegOp.
이들 제한에 의해, 열 3내의 cc-dep RegOp에 대한 올바른 상태 프래그는 또한 열 4내의 BRCOND에 대해서도 올바르고, 그리고 동일 상태 플래그 회로는 두 개의 목적에 기여한다.
Ⅴ.A. 상태 플래그 인출
상태 플래그 프로세스 논리(538)는 필드 StatMod의 네 개의 비트에 대응하는 상태 플래그의 네 개의 독립된 그룹을 인출한다. 부록 B의 표B.47은 네 개의 플래그 그룹과 그들에 대응하는 필드 StatMod를 나타낸다. 각 그룹이 연산을 위해 유효한지는 그룹을 수정할 수 있는 오래된 연산이 완료되었는지에 따라서 독립적으로 결정된다.
상태 플래그 값을 직접 레지스터 유닛(253) 또는 유닛(254)로부터 레지스터 유닛으로 들어가는 cc-dep ReOp로 패스하는 것은 예시적인 실시예에서는 지원되지 않는다. 따라서, 상태 플래그는 조건 코드 변경 RegOp의 완료에 뒤이은 사이클을 유효하게 한다. 이는 상태 플래그의 특정 그룹을 수정하는 RegOp와 이 그룹을 이용하는 후속하는 cc-dep RegOp의 실행간의 한 사이클의 최소 레이턴시를 생성한다. 이 레이턴시의 통계학적 성능상의 영향은 전형적인 x86 코드를 디코딩할 때 cc-dep RegOp가 비교적 드물기 때문에 최소이다. 또한, 레이턴시의 영향은 명령 디코더(240)가 cc-depRegOp용으로 필요로 하는 조건 코드를 변경하는 RegOp를 바로 뒤따르는 Op 쿼드내에서 cc-dep RegOp를 피하도록 RISC86 명령을 내리는 경우 제거될 수 있다.
각 사이클 동안, 스케쥴러 열 3 및 4 간의 경계에서 유효한 상태 플래그 값의 세트가 계산된다. 계산된 상태 플래그들은 커미트된 상태 플래그 및 열 4 및 5내의 연산에 의해 야기된 상태 플래그로의 변경을 포함한다. 위에서 설명한 바와같이, RegOp만이 상태 플래그를 수정한다. 각 RegOp가 4 개의 상태 플래그의 그룹들 중 단지 하나, 둘, 셋, 또는 모두를 수정할 수 있기 때문에, 상태 플래그 계산은 네 개의 그룹 각각에 대하여 독립적으로 실행된다. 각 그룹에 대한 계산의 결과는 한 세트의 플래그 값과 그룹 세트에 대응하는 StatMod 비트를 구비한 최신의 RegOp로부터의 상태 정보이다. RegOp용 상태 필드는 RegOp가 완료되고 유효한 플래그 값을 제공하였는지를 지시한다.
상태 플래그 논리(538)는 8개의 상태 플래그 비트 STATUS 및 표B. 47에 나타낸 4내의 상태 플래그 그룹과 관련된 4개의 유효 비트 STATUSV를 생성한다. 이들 12 비트는 버스(557)를 경유하여 BRCOND과 cc-dep RegOp를 프로세스하는 레지스터 유닛(253)내의 논리를 평가하는 분기 평가 유닛(257)으로 보내진다. 레지스터 유닛(253) 및 분기평가 유닛(257)은 유효비트 STATUSV로부터 요구되는 상태 플래그가 유효한지 결정하고, 그리고 이들이 유효하다면 상태 비트 STATUS를 사용하여 열 3내의 cc-dep RegOp를 실행하고 열 4내의 BRCOND을 평가한다. 글로벌 제어 논리(520)는 필요로 하는 상태 플래그가 유효한지에 따라서 시프트 제어 신호를 생성한다.
레지스터 오퍼랜드 값 인출 프로세스와 동일한 프로세스는 각 상태 플래그 그룹을 인출하여 스케쥴러(280)내의 열 3의 최종 연산을 위한 적합한 플래그 값을 얻는다. 이하에서, 표시 'OpX'는 스케쥴러(280)내의 X의 엔트리를 나타내고, 여기서 X=0 및 X=23은 각각 최신 및 가장 오래된 스케쥴러내의 연산을 나타낸다. 예를 들면, 열 4는 Op16, Op17, Op18 및 Op19를 포함한다. 각 플래그 그룹에서, Op16으로부터 Op23까지의 전송-킬-스타일 스캔이 이들 플래그 그룹 세트용 StatMod 비트로 첫 번째 연산의 위치를 정하고, 엔트리의 완료된 상태 비트(즉 S3)및 적절한 플래그 값의 세트가 판독된다. 이들 그룹의 StatusV 비트는 발견된 엔트리로부터의 상태 비트 S3이다. 만약 그러한 연산이 발견되지 않는다면, 요구되는 플래그 값은 구조적 상태 플래그 레지스터로부터 판독되고 신호 STATUSV는 그룹이 유효한지 나타내기 위해 설정된다. 표B.48은 각 플래그 그룹의 상태 플래그 인출 논리를 설명한다.
Ⅴ.B cc-Dep RegOps로의 상태 전송
각 사이클동안, 글로벌 제어 논리(520)는 열 3내의 4개의 연산을 검사하여 이들 중 어느 것이 cc-dep RegOp인지를 결정한다. 만약 하나가 그러하다면, 그 RegOp는 디코드되어 어느 상태 플래그의 그룹이 필요한지 결정하고, 그리고 이들 그룹이 모두 유효한지 결정하기 위해 StatusV 비트가 체크된다. 동시에, 상태[7:0]은 맹목적으로 RUX 실행유닛으로 보내진다. 요구되는 플래그 그룹 중 어느 하나가 현재 유효하지 않다면, cc-dep RegOp는 RUX로 실행 단계로의 진행이 홀드되고, 열 3으로부터의 Op 쿼드의 시프팅이 금지된다. 만약 모든 요구되는 프래그 그룹이 현재 유효하다면, cc-dep RegOp는 적어도 상태 오퍼랜드 인출이 관련되는 한 RUX 실행 단계로의 진행이 허용된다. cc-dep RegOp는 오퍼랜드가 이용 가능하지 않기 때문에 여전히 진행이 금지된다. cc-depRegOp가 실행단계(460)로 진행하지 않는다면, 로우 3의 시프팅은 금지된다.
비실행된 cc-dep RegOp가 열 3 내지 5에 없지만, cc-dep RegOp가 RUX 오퍼랜드 전송 단계에 있다면, RegOp는 무조건 오퍼랜드 전송 단계내에 홀드된다. 열 3 내의 cc-dep RegOp가 실행되지 않았지만, cc-dep RegOp가 RUX오퍼랜드 전송 단계에 없다면, 열 3의 시프팅은 금지된다. 표B.49는 시프팅 및 연산 진행을 제어하는 논리를 나타낸다.
Ⅴ. 분기 예측 분석
각 사이클 동안, BRCOND이 열 4내에서 발견되면, 이 BRCOND의 조건 코드(cc) 필드가 디코드되어 예측된 조건 값을 결정한다. 예측된 조건 값은, 관련된 유효 비트가 선택된 조건이 유효함을 지시하면 상태 플래그 처리 논리(538)로부터의 상태 플래그로부터 유도된 32 조건 값 중 선택된 하나와 비교된다. 선택된 조건이 아직 유효하지 않다면, 열 4내의 Op 쿼드의 시프팅은 금지되고 BRCOND의 평가가 다음 클록 사이클에서 다시 시도된다. 선택된 조건이 유효하다면, 예측된 조건의 비교 및 선택된 조건은 예측이 올바른지를 나타낸다.
BRCOND이 오예측된 것으로 발견되면(따라서 파이프라인 재시작이 필요하면), 재시작 신호가 BROCOND이 MacDec242로부터 나온 것인지 또는 내부 또는 외부 엠코드로부터의 엔코드 연산인지에 따라 어서트된다. 또한, 적절한 x86 매크로명령 또는 엠코드 벡터 어드레스 및 관련 복귀 어드레스 스택 TOS 값이 생성되고 명령 디코더(240)로 복귀하여 디코딩을 재시작한다.
이후에 설명하는 비-중단 RegOp과 선행 BRCOND간의 동기화 처리 논리의 이점을 위해, 오예측된 BRCOND의 기록은 그것이 미결 상태인 동안 유지된다(즉, 중단 사이클이 발생될 때까지). 또한, 비결 상태의 오예측된 BRCOND은 중단 사이클이 발생될 때까지 '새로운' Op쿼드의 로드를 홀드한다.
만약 BRCOND가 올바르게 예측되었다면, 단지 취해질 동작은 BRCOND 상태 비트 S3를 설정하여 BRCOND가 완료되었음을 나타내는 것 뿐이다. 표B. 50은 BRCOND 평가를 처리하는 논리를 나타낸다.
Ⅵ. 비-중단 연산의 동기화
각 사이클동안, 비-중단 RegOp가 열 4내에서 발견되면, 스케쥴러(280)는 선행 오예측된 BRCOND을 체크한다. 엠코드 코딩 억제때문에, 선행 BRCOND은 낮은 열에 있어야 하고 따라서 모두 분석되어야 한다. 또한, 현재 분석되고 있는 (열 4내의) BRCOND은 비-중단 RegOp 이후에 있고 따라서 관계되지 않는다.
만약 오예측된 BRCOND이 없으면, 요구되는 오퍼랜드가 아직도 유효하지 않아서 RegOp의 진행이 허용되지 않는다고 하더라도 비-중단 RegOp는 RUX 실행 단계로의 진행이 허용된다. RegOp가 즉시 RUX 실행단계로 진행하지 않는다면, RegOp는 열 4에서 시프트하도록 허용된다.
열 4 또는 5가 비실행된 비-중단 RegOp를 포함하지 않지만 비-중단 RegOp가 RUX 오퍼랜드 전송 단계에 있다면, 비-중단 RegOp는 비-중단 RegOp가 열 4에 도달할 때까지 무조건 오퍼랜드 전송 단계내에 홀드된다. 열 4내의 비-중단 RegOp가 아직 실행되지 않았지만, 비-중단 RegOp가 RUX 오퍼랜드 전송 단계내에 없거나 또는 비실행된 비-중단RgeOp가 열 5내에 있으면, 열4 및 5의 시프팅은 금지된다. 표B. 51은 비-중단 RegOp의 처리 논리를 타나낸다.
Ⅶ. 자체-수정 코드 처리
저장 큐(270)는 데이터가 커미트되도록 물리적 및 선형 어드레스의 몇가지 비트를 제공한다. 저장 어드레스가 Op 쿼드의 명령 어드레스의 어느 하나와 매칭되면, 명령에의 기입은 명령을 수정할 수 있고 스케쥴러(280)내에 현재 나타나는(디코드된) 연산은 올바르지 않을수 있다. 올바르지 않은 연산은 연산으로부터의 결과가 커미트되기 전에 수정되어야 한다.
본 발명의 실시예에 있어서, 자체-수정 코드 지원 논리(536)는 저장 큐(270)으로부터의 어드레스 비트를 각 Op쿼드의 명령 어드레스들(Op 쿼드내 명령이 각 Op쿼드의 다른 페이지로부터 나오면)에 비교한다. 비교가 코드 수정의 가능성을 제거한다면, 논리(536)는 아무것도 실행하지 않는다. 가능성이 제거되지 않으면, 논리(536)는 스케쥴러(280)를 플러쉬하고 마지막으로 커미트된 명령의 어드레스로부터의 인출/디코드 프로세스를 재시작한다. 논리적으로, 스케쥴러(280)내에서, 자체-수정 코드의 검출은 '트랩 보류'를 표시하는 신호내로의 일종의 인자 및 트랩으로서 다루어진다. 표B. 52는 자체-수정 코드 처리 논리(536)를 나타낸다.
Ⅷ. 연산 커미트 유닛
OCU(Operation Commit Unit)(260)는 일반적으로 스케쥴러(280)의 최종열 바로이전 열(열 4 또는 5) 또는 최종열내의 연산들 상에서 연산을 행한다. OCU(260)의 주기능은 연산의 결과를 커미트(또는 영구적으로 만듬)하여 스케쥴러(280)으로부터 Op 쿼드를 퇴거시키는 것이다.
많은 형태의 결과 또는 상태 변화가 연산의 실행으로부터 나올수 있다. 변화의 주된 형태는 중단가능이고: 레지스터 변화, 상태 플래그 변화; 및 메모리 저장을 포함한다. RISC86 명령세트에서, 레지스터 변화는 모든RegOp, LdOp, LIMMOp, LDK 연산, 및 STUPD StOp로부터 나온다. 상태 플래그 변화는 '.cc' RegOp로부터 나오고 메모리 저장은 STxx StOp로부터 나온다. 스케쥴러(280) 및 저장 큐(270)는, 관련 연산이 커미트되어 퇴거될 때까지, 일시적으로 스케쥴러(280)의 엔트리가 되는 레지스터 및 상태를 저장하고 저장 큐(270)의 엔트리가 되는 메모리 저장을 일시적으로 저장함으로써 중단가능 상태 변화를 지원한다. 연산 커미트먼트는 상태 변화를 영구적으로 만든다. 새로운 상태값이 스케쥴러(280) 및 저장 큐(270)내에 상주하는 동안, 상태 값은 필요에 따라 종속 연산에 전송된다.
모든 다른 상태 변화는 비-중단가능이고 비-중단 RegOp 실행으로부터 얻어진다. 비-중단가능 상태 변화는 세그먼트 레지스터와 비-상태 EFlag 비트 등의 표준 x86 레지스터로의 변화 및 RISC 연산들의 실행을 위한 마이크로-구조 레지스터에의 변화를 포함한다. 비-중단가능 상태 변화는 비-중단 가능 RegOp 실행 동안 즉시 발생할 수 있고, 디코더(240) 및 스케쥴러(280)는 비-중단가능 연산을 주변 연산과 충분하게 동기화시키는 역할을 한다.
Ⅷ.A 커미트먼트
각 사이클 동안, OCU(260)는 스케쥴러(280)의 열 4 그리고/또는 5 내의 연산을 검사하고 가능한 많은 연산의 결과를 커미트하고자 시도한다. Op 쿼드 내의 상태 변화는 한 사이클 마다 또는 많은 사이클들에 걸쳐 커미트될 수 있다. 하부 열의 Op 쿼드의 모든 연산들이 커미트되었거나 또는 성공적으로 커미트되는 중이라면, Op 쿼드는 현재 사이클의 끝에서 스케쥴러(280)로부터 퇴거됨으로써 열 4로부터의 Op 쿼드가 열 5로 시프트되어 이를 오버라이트할 수 있게 된다. 그렇지 않으면, 가능한 많은 변화들이 커미트되고 열 5로의 시프팅이 금지된다. 커미트먼트 프로세스는 열 5 내의 모든 연산들이 커미트되고 열 4로부터의 Op 쿼드가 열 5로 시프트될 때 까지 각 주기 마다 반복된다.
레지스터 결과, 상태 결과, 및 메모리 기록의 커미트먼트는 독립적으로 실행된다. 다수의 결과들(예를 들어, 레지스터 및 상태 결과를 갖는 RegOp, 또는 레지스터 결과와 메모리 기록을 갖는 STUPD 연산)을 갖는 연산들에 대해, 다양한 결과들이 동시에 커미트될 필요는 없다. 한 형태의 상태 변화의 커미트먼트는 일반적으로 다른 형태의 상태 변화의 커미트먼트 보다 앞서거나 또는 뒤에 올수 있다. 연산의 전체적인 커미트먼트는 OCU(260)가 연산으로부터 마지막 결과가 커미트될 때 발생한다.
연산의 결과들은: 연산 실행 상태가 연산의 완료를 나타낼 때까지; 이전의 어떠한 폴트가능한(faultable) 연산들, 즉 이전의 어떠한 LdStop들이 완료되어, 연산들이 폴트 프리를 나타낼 때 까지; 그리고 이전의 어떠한 BRCOND들이 완료되어, BRCOND들이 정확하게 예측되었음을 나타낼 때 까지 커미트되지 않는다. 디코더(240)가 각 FAULT 연산을 Op 쿼드의 첫번째 "유효" 연산으로서 배치함으로써, FAULT 연산으로서 동일 열 내의 어떠한 연산도 완료될 필요가 없기 때문에, FAULT 연산들은 고려되지 않는다. 메모리 기록을 생성하는 StOp들에 대해, 부가적인 제한은 저장 큐(270)로부터 데이터 캐쉬(220)로 사이클당 하나의 기록 만이 커미트될 수 있다는 것이다.
OCU(260)는 사이클당 최대 4개의 레지스터, 4개의 상태 결과 및 1개의 메모리 기록을 커미트할 수 있고, 전형적으로 매 사이클 마다 스케쥴러(280)로부터 Op쿼드를 커미트하고 퇴거시킨다. Op 쿼드는, Op 쿼드가 다수의 메모리 기록 StOp들을 포함하거나 또는 Op 쿼드의 일부 연산들이 아직 완료되지 않은 경우에만, 스케쥴러(280)의 하부 열에 남아 한 사이클 이상 퇴거되지 않는다.
하부 열의 연산이 폴트될 필요가 있으면, 예를 들어 연산이 FAULT 연산이거나 연산의 실행 동안 폴트가 발생하면, 다음 연산의 커미트먼트가 금지된다. 폴트되는 Op 쿼드내의 오래된 모든 연산들이 커미트되었거나 또는 성공적으로 커미트되고 있다면, OCU(260)는 Op 쿼드를 퇴거시키고 중단 사이클(abort cycle)을 시작한다. 이 중단 사이클은 스케쥴러(280)와 미결의 모든 연산들의 실행 유닛들을 플러쉬(flush)한다.
중단 사이클과 동시에, OCU(260)는 또한 명령 디코더(240)를 2개의 가능한 엠코드 "엔트리 포인트" 어드레스들 중의 어느 하나, 즉 (리셋 엠코드에 의해 초기화되는) "디폴트" 폴트 처리기 어드레스, 또는(매크로명령 또는 예외 프로세싱 엠코드에 의해 특정되는) "대체(alternate)" 처리기 어드레스에 벡터(vector)시킨다. 스케쥴러(280) 내에 완료된 상태로 로드(load)되고 이들이 스케쥴러(280)의 하부에 도달할 때 OCU(260)에 의해 인식되어 "실행"되는 LDDHA 및 LDAHA 연산들은 폴트 디폴트와 대체 처리기 어드레스들을 지원한다.
특정 형태의 연산들, 즉 LdOp들, StOp들(LEA 연산 제외), 및 FAULT 연산들 만이 폴트될 수 있다. LdOp 또는 StOp에 있어서, 폴트들을 LU 또는 SU 실행 파이프라인의 두 번째 실행 단계(460)에 의해 식별되고, 폴트가 검출되면, LdStOp는 관련 또는 관계없는 중단 사이클이 LdStOp를 스케쥴러(280) 및 실행 유닛(251 또는 252) 으로부터 플러쉬할 때까지 두 번째 실행 단계에 홀드된다. 완료된 LdStOp들의 이러한 결과는 폴트 프리로 보장된다. OCU(260)는 폴트 연산이 그들 각각의 두 번째 실행 단계에서 스트라이크(strike)됨을 나타내는 실행 유닛들(251, 252)로부터의 신호들에 의해, 아직 완료되지 않은 LdStOp와 폴트 LdStOp를 구별한다. OCU(260)가 다음 비완료된 LdStOp를 커미트하고자 시도하고 관련 실행 유닛(252 또는 251)이 두 번째 실행 단계에서 홀드되는 연산에 대한 폴트를 신호할 때, OCU(260)이 커미트하고자 시도하는 연산은 폴트에 부합되는 연산이어야 한다. 관련 실행 유닛(251 또는 252)이 폴트 신호를 어서트하지 않으면, 비완료된 LdStOp에 대해 어떤 것도 명확히 결정될 수 없으며, OCU(260)는 LdStOp를 완료할 때까지 기다린다.
FAULT 연산은 스케쥴러(280)내에 완료된 상태 및 항상 폴트 상태로 로드된다. OCU(260)는 폴트 연산의 커미트먼트와 폴트가 있는 LdStOp와 동일한 방식으로 주변 연산의 결과적인 중단을 프로세스한다.
특정 연산들에 대한 폴트들에 부가하여, OCU(260)는 또한 ERET에 의해 지시되는 엠코드 시퀀스의 끝까지 추적 및 기억되는 다양한 디버그 트랩 예외들을 인식한다. "ERET" Op 쿼드가 퇴거되고 트랩 예외들이 계류중이면, OCU(260)는 폴트가 Op 쿼드의 5번째 및 최종 연산을 인식한 것처럼 폴트-스타일 중단 사이클을 시작한다.
OCU(260)는 "분기 타겟 제한 위반" 조건을 인식하는바, 이는 Op 쿼드내 특정 연산이 관련되는 동안 전체적으로 Op 쿼드로 태그된다. 이는 폴트가 Op 쿼드내 첫 번째 연산을 인식한 것처럼 무조건적으로 "중단" 사이클을 시작한다.
OCU(260)가 주로 중단가능한 상태 변화를 생성하는 연산과 관련되기는 하지만, 이 OCU(260)는 또한 BRCOND를 프로세스한다. BRCOND은 열 4에 있을 때 결정된다. 오예측이 검출되면, 매크로명령 인출 논리 및 명령 디코더(240)가 즉시 리셋되어 적절한 매크로명령 어드레스로부터 재시작한다. 오예측된 BRCOND이 열 5에 도달하면, 오예측된 BRCOND 보다 새로운 연산의 커미트먼트가 금지되고, 중단 사이클은 오예측된 BRCOND에 선행하는 모든 연산이 커미트되었거나 또는 성공적으로 커미트되는 이후 시작된다. 중단 사이클은 스케쥴러(280) 및 모든 연산들의 모든 실행 유닛들을 플래시한다. 중단 사이클은 또한 실행 유닛(251-256)으로의 즉시 발행을 위해 "새로운" 연산들이 디코더(240)로부터 스케쥴러(280)로 저재될 수 있게 한다. 오예측된 BRCOND 및 연산 폴트 중단은 오예측된 BRCOND에 대해서는 엠코드를 위한 어떠한 벡터링도 시작되지 않는 다는 점에서 다르다. 스케쥴러(280)의 하부에 도달하는 정확히 예측된 BRCOND을 커미트하는 데에는 어떠한 행동도 필요없다.
OCU(260)는 각 BRCOND을 중단시키거나 또는 커미트한다. OCU(260)는 BRCOND 의 스케쥴러 엔트리 상태 필드에 기초하여 행동을 선택한다. BRCOND가 결정되면, 그 스케쥴러 엔트리 상태 필드는, 정확히 예측된 경우에는 완료된 것으로 변경되거나, 오예측된 경우에는 비발행된 채로 남는다. 따라서, BRCOND이 열 4 내에서 완료되었는 지의 여부가 BRCOND이 오예측되었는 지의 여부를 직접적으로 나타낸다.
연산 결과 커미트먼트의 실제 타이밍은 비교적 간단하고 커미트 사이클의 후반부 동안 일어나는 것으로 여겨진다. 전형적으로, Op 쿼드는 스케쥴러 (280)의 하부에 있게 되는 동일한 사이클 동안 커미트되며, 그 사이클의 끝에서 스케쥴러(280)로부터 퇴거된다. 이 사이클 동안, 결과가 레지스터 파일(290)에 저장되는 동안, 오퍼랜드 값은 레지스터 파일(290)이 아닌 스케쥴러(280)로부터 모든 종속 연산들로 계속해서 전송된다.
메모리 기록의 커미트는 2 단계의 기록 커미트 파이프라인의 형태로 구현되는 2단계의 프로세스이다. 기록 커미트 파이프라인의 제 1 단계는 OCU(260)가 관련되는 한 StOp에 대한 OCU(260)의 커미트 사이클에 대응하고, StOp는 이 파이프 라인의 제 2 단계로 들어갈 때 커미트된다. StOp의 타이밍 와이즈(timing-wise)는 스케쥴러(280)으로부터의 관련된 Op 쿼드의 퇴거와 동시에 또는 그 이전에 제 2 기록 커미트 단계로 들어가야 한다. StOp가 이 제 2 단계로 들어갈 수 없으면, StOp는 커미트불가능한 것으로 간주되며 Op 쿼드의 퇴거는 홀드된다.
OCU(260)가 연산 폴트로 인해 중단 사이클을 시작할 때, 중단 신호 및 관련 엠코드 벡터 어드레스가 폴트 연산을 포함하는 Op 쿼드의 커미트/퇴거 사이클 동안 어서트된다. 다음 사이클 동안, 스케쥴러(280)는 플러쉬되고, 타겟 엠코드 Op 쿼드가 인출된다. 내부 엠코드를 위해, 스케쥴러(280)는 이러한 한 사이클 동안 정확히 비워질 것이다.
오예측된 BRCOND에 대한 중단 신호는 또한 관련 Op 쿼드의 커미트/퇴거 사이클 동안 어서트된다. 명령 인출 및 디코드가 보다 일찍 재개되었기 때문에, 스케쥴러(280)는 바로 다음 사이클 만큼 빨리 새로운 Op 쿼드로 재로드된다. 즉, 스케쥴러(280)는 어떤 사이클 동안도 비워진 상태로 있지 않게 된다.
OCU(260)가 중단 사이클을 요구하는 Op 쿼드 내의 다수의 연산들을 인식할 때, 이는 먼저 이러한 연산을 선택하고 그 연산에 대한 적절한 시간에서 그 연산에 관한 적절한 중단 행동들을 시작한다.
Ⅷ. A.1 레지스터 커미트먼트
OCU(260)는 레지스터 파일(290)로의 레지스터 결과의 커미트를 관리하고 제어한다. 각 사이클 동안, 스케쥴러(280)의 하부 2개의 열들중 하나 내의 각 완료된 연산의 레지스터 결과는 (사이클의 후반부 동안, 4개의 독립적인 저장부를 경유하여) 레지스터 파일(290)에 기록될 수 있다. 각 기록은 관련 스케쥴러 엔트리로부터의 바이트 표시, 필드 DestBM[2:0]에 따라 실행된다.
연산이 아직 완료되지 않고 커미트가능하다면, 관련 레지스터 파일 기록이 이 사이클 동안 금지된다. 연산이 개념적으로 레지스터 결과를 생성하지 않는 형태이면, 바이트 표시는 모두 클리어되고 레지스터 번호는 정해지지 않을 수 있다. 이에 의해, 레지스터 파일 기록 동안 어떠한 바이트들도 변경되지 않는다. 유사하게, 레지스터 t0(항상 제로인 레지스터)는 연산에 대한 목적지로서 특정되고, 모든 바이트 표시들은 다시 클리어된다. 이러한 경우들에서, 연산 디코더(210)는 로드 동안 바이트 표시를 b000으로 한다.
일반적으로, 컨텐션(contention) 가능성이 있다. 즉, 동일 레지스터로의 다수의 동시 기록 가능성이 있다. 바람직한 결과는 최신의 연산으로부터 나오고, 그리고 오래된 기록들은 금지되며 효과적으로 무시된다. 레지스터 파일(290)은 단순히 제시된 레지스터 번호 및 관련된 기록 인에이블에 기초하여 OCU(260)의 레지스터 커미트먼트 프로세스의 제어와 별개로 이러한 기능을 프로세스한다.
또한, 컨텐션 기록들이, 가장 새로운 기록에 의해 수정되지 않는 레지스터 바이트를 오래된 기록들이 수정하는 방식으로 이루어지다면, 실제 레지스터 파일 기록은 컨텐션 연산들로부터의 바이트들의 결합이다. 예를 들어, 첫 번째 (가장 오래된) 연산이 {3,2,1,0} 바이트를 수정하고, 두 번째 연산이 {1,0} 바이트를 수정하고, 세 번째 (최신의) 연산이 {1} 바이트를 수정한다면, 실제 레지스터 파일 기록은 첫 번째 연산으로부터 {3,2} 바이트, 두 번째 연산으로부터 {0} 바이트, 및 세 번째 연산으로부터 {1} 바이트를 취한다. 다른 경우, 레지스터 파일 바이트들의 일부는 전혀 수정되지 않는다. 레지스터 파일(290) 내의 제어 논리가 이러한 부가적인 기능을 프로세스한다. 본질적으로, 레지스터 파일(290) 내의 컨텐션 결정 논리는 32-비트 워드 대신 개별적인 바이트에 기초하여 연산한다.
4개의 모든 연산들에 대한 기록 인에이블들은 동시에 생성된다. 관련된 기록 인에이블은, Op 쿼드 내의 모든 선행/오래된 LdStOp들이 완료되고 어떠한 선행/오래된 BRCOND도 오예측되지 않을 경우, 각 완료된 연산에 대해 레지스터 파일(290)에 어서트된다. 연산의 결과가 레지스터 파일(290)에 기록되면, 관련 DestBM 비트들이 클리어되어 스케쥴러 엔트리가 더 이상 종속 연산들에 레지스터 값을 제공하지 않음을 나타낸다. DestBM 필드의 클리어는 또한 부분적인 레지스터 기록을 위해 실행된다. 종속 연산이 요구되는 모든 바이트들을 한 연산으로부터 얻을 수 없으면, 이 종속 연산은 레지스터 파일(290)로부터 모든 바이트를 얻을 때까지 오퍼랜드 전송 단계 동안 홀드된다.
또한, 스케쥴러 엔트리(위의 설명 참조)와 관련된 9개 신호 OprndMatch_XXsrcY는, 그 엔트리 내의 DestBM 비트가 클리어되려고 할 때 표시된다(즉, 어떠한 매칭도 없음을 나타낸다). 이는 스케쥴러(280) 내에서의 레지스터 오퍼랜드 인출 프로세스의 파이프라인 특성 때문이다. 특히, 엔트리의 DestBM 비트는 이 프로세스의 양 단계에서 사용되고 양 사이클에 걸쳐 일치해야한다.
레지스터 커미트먼트 프로세스량을 증가시키기 위해, 연산 레지스터 기록들은 열 5 내의 모든 연산의 레지스터 커미트먼트가 완료할 때 열 4로부터 실행된다. 이는 열 5내의 4개의 연산 또는 열 4의 네 개의 연산을 고려하기 위해 RegOp 기록 인에이블 논리를 일반화함으로써 이루어진다. 선택된 열의 연산은 Op23 내지 Op20 또는 Op19 내지 Op16을 대신하여 "OpA" 내지 "OpD"로 재명명된다. 표 B.53은 레지스터 파일(290)로 커미트먼트하기 위한 결과들을 선택하는 논리를 설명한다.
Ⅷ. A.2 상태 플래그 커미트먼트
OCU(260)는 또한 ".cc" RegOp들에 의해 생성되는 상태 플래그 결과들의 아키텍쳐 EFlag 레지스터로의 커미트먼트를 제어하고 관리한다. 레지스터 결과들의 커미트먼트와 달리, 열 5로부터의 연산의 상태 플래그 결과들(최대 4개)중 어느 것도 열 5 내의 Op 쿼드가 퇴거 또는 중단되고자할 때까지 EFlag에 기록되지 않는다. 보통의 경우, Op 쿼드 내의 모든 연산들이 완전히 커미트되거나 성공적으로 커미트되는 중이라면, 4개의 모든 상태 결과들의 누적 또는 전체 결과는 Op 쿼드가 스케쥴러(280)로부터 퇴거될 때 사이클의 끝에서 EFlag들에 기록된다. 폴트 연산 또는 오예측된 BRCOND을 포함하는 Op 쿼드에 대해, 폴트 명령 또는 BRCOND 이전의 연산으로부터의 상태 결과 만이 커미트되고 누적 결과는 중단 사이클 동안 또는 이 사이클의 끝에서 기록된다.
이 프로세스는 x86 아키텍쳐 상태 플래그들 뿐 아니라 마이크로-아키텍쳐 상태 플래그들(EZF 및 ECF)에 적용된다. 본질적으로, 아키텍쳐 EFlag 레지스터는 34비트로 확장되어 여분의 두 개의 상태 플래그를 위한 공간을 만든다. RDFLG 및 WRFLG RegOp는 이렇게 확장된 EFlag 레지스터의 표준 32-비트 부분 만을 참조한다.
누적 상태 결과의 생성은 하부 열 내의 4개의 엔트리들 각각으로부터의 상태비트 표시들 (StatMod[3:0])에 기초한다. 8개의 상태 플래그들은 8개의 개별적인 비트 표시를 갖는 대신 마킹 목적의 수정을 위해 4개의 그룹으로 분리된다. 레지스터 파일내 일반적인 레지스터 갱신에 관련하여, 컨텐션 가능성, 즉 상태 플래그들의 동일 그룹으로의 다수의 수정 가능성이 있다. 바람직한 결과는 상태 플래그들의 각 그룹에 대한 가장 최근의 수정 값들이다.
누적 상태 결과의 생성은 또한 4개의 연산들 각각의 완료된 상태(State[3])에 기초한다. 중단되는 Op 쿼드에 있어서, 필드 상태는 어느 상태 결과들이 커미트되어야 하고 어떤 상태 결과들이 커미트되지 말아야 하는 지를 식별한다. 커미트먼트를 위해, 모든 선행 연산들은 완료되어야 하며, 이에 따라 폴트 및 오예측이 없게 된다. 표 B.54는 상태 플래그 변화를 누적하는 논리를 요약한 것이다.
상태 결과 플래그 결과들이 관련되는한, 연산 커미트먼트 및 퇴거에 대한 어떠한 명시적인 제어 또는 제한도 요구되지 않는다. 상태 플래그 변화가 RegOp들로부터 야기되고 모든 RegOp들은 레지스터 상태 변화(심지어 t0까지)를 생성하기 때문에, Op 쿼드는 이 Op 쿼드 내의 모든 RegOp들이 완료됨으로써 유효한 상태 결과값을 가질 때까지 퇴거될 수 없다. 상태 플래그 값들이 (BRCOND들 및 "cc-종속" RegOp들로) 어떻게 전송되는 지가 주어지면, 하부 열의 연산들에 대한 StatMod 필드들을 클리어할 필요가 없다.
Ⅷ. A.3 메모리 기록 커미트먼트
OCU(260)의 세 번째 기능은 "메모리"(데이터 캐쉬 그리고/또는 메인 메모리)로의 메모리 기록 데이터 값들의 커미트먼트를 제어하는 것이다. 이는 여러 측면들에서, 즉 메모리 기록 커미트먼트는 (대부분의 경우) 관련된 저장 큐 엔트리를 포함하고; 사이클당 기껏해야 1개의 메모리 기록이 커미트될 수 있으며; 커미트먼트 프로세스는 2 단계의 커미트 파이프라인을 갖는 다는 점에서, 레지스터 및 상태 결과들의 커미트먼트와 다르다. OCU(260)는 하부 2개의 열을 스캔하여 커미트할 메모리 기록을 위한 StOp를 찾는다. 관련된 StOp들에 대한 폴트 가능성이 존재한다.
메모리 기록들은 모두 StOp(실제적으로 메모리를 참조하지 않는 LEA, CIA, 및 CDA 연산을 제외하고) StOp들에 관련된다. StOp가 실행을 완료하면, 관련 메모리 어드레스 및 저장 데이터는 저장 큐(270)에 들어간다. 이후, StOp의 메모리 기록이 커미트되면, 이 엔트리는 캐쉬 메모리로 판독되고 저장 큐(270)로부터 퇴거된다. StOp들은 서로에 대해 순서대로 실행되고 커미트되어 저장 큐(270)가 단순한 FIFO로서 연산할 수 있게 하고, 관련된 스케쥴러 StOp들과 저장 큐 엔트리들이 자동으로 매칭된다.
그렇지만, 실제 커미트먼트 프로세스는 보다 복잡하며 이하에서 설명하기로 한다. 일반적으로, 최종/가장 오래된 저장 큐가 첫 번째로 판독되고 어드레스가 데이터 캐쉬(220) 내에서 룩업된 다음, 룩업 상태에 기초하여 저장 데이터가 데이터 캐쉬(220)로 그리고/또는 메모리로부터 기록되는 2단계의 프로세스가 필요하다. 후자의 경우, 전형적으로 데이터 및 어드레스는 단순히 기록 버퍼(Write Buffer)에 로드된 다음, 이후 메모리로 기록된다.
2단계의 기록 커미트 파이프라인에서, 첫 번째 단계(즉, 데이터 캐쉬 태그 룩업)는 레지스터 및 상태 결과들의 커미트 사이클에 대응한다. 즉, Op 쿼드를 포함하는 것은 그 단계의 사이클의 끝에서 퇴거될 수 있다. OCU(260)의 견지로부터, 커미트 프로세스는 크게, 이어지거나 또는 지연되는 단일 사이클/단일 단계 연산으로 생각될 수 있다. 메모리 기록의 커미트먼트는 레지스터 상태 변화에 대해 동일한 이유로 홀드될 수 있고, 또한 저장 커미트가 커미트 파이프의 단계 2로 들어갈수 없다면 홀드된다. 기록이 커미트 단계 2로 들어갈 때, 관련 StOp는 스케쥴러(280)로부터 퇴거될 수 있고, 나머지 커미트 프로세스는 OCU(260) 및 스케쥴러(280)에 비동기된다.
첫 번째 커미트 단계 동안에는, 어떠한 제어 결정도 이루어지지 않는다. 데이터 캐쉬 태그 룩업은 실행되고, 접근된 태그 데이터는 두 번째 커미트 단계동안 검사를 위해 래치된다.
기록 커미트 파이프 라인은 단지 단일 파이프라인이며, 이에 따라 사이클당 하나의 메모리 기록의 커미트먼트 만을 지원한다. 기껏해야 하나의 메모리 기록 StOp를 포함하는 Op쿼드에 대해, 이는 각 사이클 마다 가능한 Op 쿼드의 퇴거 및 커미트먼트를 허용한다(레지스터 상태 변화의 커미트먼트로부터 비롯되는 것과 동일한 경고들의 계승(son of caveats)을 필요로 한다). 2개, 3개 또는 4개의 StOp들을 포함하는 Op 쿼드들에 대해, 대응하는 최소수의 사이클이 Op 쿼드를 커미트하는 데에 필요하며, 이에 따라 Op 쿼는 적어도 그와 같은 수의 사이클 동안 스케쥴러(280)의 하부에 남게 된다. 열 5 또는 열 4의 StOp와 관련된 메모리 기록을 커미트하면 Op 쿼드 내의 다수의 StOp들에 의해 야기되는 홀드을 감소시킨다. 메모리 기록들이 순서대로 커미트되면, OCU(260)는 하부 Op 쿼드가 홀드될 때 다수의 저장 Op 쿼드에 대해 "헤드 스타트(head start)"를 얻을 수 있지만, 그렇지 않은 경우 언커미트된 메모리 기록들 또는 하부 Op 쿼드를 비우게 되면 어떠한 StOp들도 포함하지 않는다. 이는 사이클 커미트먼트 용량당 OCU의 하나의 기록을 Op 쿼드당 하나 보다 작은 Op 쿼드당 평균 기록들의 수에 대해 더 잘 매칭시키는 것을 돕는다.
각 사이클 동안, OCU의 메모리 기록 커미트 논리는 가장 오래된 커미트되지 않은 메모리 기록 StOp(즉, 다음의 StOp 및 커미트하고자 하는 관련 기록)에 대한 하부의 2개의 열들을 찾는다. 선택된 연산은 현재 하부/가장 오래된 저장 큐 엔트리를 생성한다. 연산의 선택과 동시에, 가장 오래된 저장 큐 엔트리의 어드레스가 데이터 캐쉬에 주어지고 태그 룩업이 시작된다. 주목할 사항으로서, 이는 "맹목적으로(blindly)", 즉 관련 StOp가 현재 커미트가능한 지의 여부를 고려하지 않고 수행된다.
선택된 StOp가 커미트가능하고 기록 커미트가 두 번째 기록 커미트 단계로 진행가능하다면, OCU(260)는 커미트될 StOp를 고려한다. 다음 사이클에서, OCU(260)는 다음 메모리 기록 StOp를 찾는다. StOp 커미트먼트의 기준은 레지스터 결과 커미트먼트의 기준과 동일하다. 즉, 선택된 StOp는 완료되어야 하고, Op 쿼드(그리고 이 StOp가 최종열에 있으면 선행 Op 쿼드) 내의 모든 선행/오래된 LdStOp 또한 완료되어야 하며, 선행/오래된 오예측된 BRCOND이 없어야 한다. 저장 커미트는 커미트 단계 2가 비워졌거나 성공적으로 기록의 커미트먼트를 완료할 때에 이 커미트 단계 2로 진행할 수 있다.
선택된 StOp가 그것이 완료되지 않았기 때문에 커미트가능하지 않다면, OCU(260)는 StOP가 검출된 폴트 조건에 의해 그 단계에서 "스트라이크되었는지"를 나타내는 두 번째 SU 실행 단계로부터의 신호를 검사한다. 이러한 연산이 있으면, 이는 OCU(260)가 (비성공적으로) 커미트하고자 하는 동일한 StOp이며, 이에 따라 OCU(260)에 의해 중단되어야 한다. 적절한 중단 사이클은 StOp가 하부 열 내에 있을 때까지 시작하지 않아, Op 쿼드 내 모든 선행 연산들이 커미트되고, 어떠한 선행 BRCOND도 오예측되지 않는다. 이는 본질적으로 커미트 가능한 StOp의 조건의 확장이다. 한편, OCU(260)는 이전 연산에 대해 중단 사이클이 시작할 때까지 이 상태로 남는다.
OCU(260)는 주로 메모리 기록 StOp들과 관계가 있지만, CIA 및 CDA 연산들을 또한 프로세스하는데, 그 이유는 이러한 연산들은 OCU(260)가 검출하여 커미트해야하는 폴트가능한 메모리 어드레스들을 발생시키기 때문이다. 폴트-프리를 실행하는 이러한 연산의 일반적인 경우, OCU(260)는 연산을 커미트하는 데에 사이클을 조금 소모하며, 다음 사이클에서 다음 StOp의 커미트로 간단히 이동한다. 연산이 실행되는 동안에는 어떠한 저장 큐 엔트리도 발생되지 않기 때문에, 어떠한 엔트리도 저장 큐로부터 퇴거되지 않는다. 만약 CIA 또는 CDA 연산이 실행되는 동안 폴트가 검출된다면, 연산은 제 2 SU 실행 단계에서 "스트라이크"되고, OCU(260)는 다른 StOp들에 대한 것과 동일한 방식으로 정확히 중단된다.
StOp의 메모리 참조가 얼라인먼트 경계(현재 8 바이트)와 교차하고 2개의 관련된 저장 큐 엔트리들을 갖는 2개의 메모리 기록들로 저장 유닛(252)에 의해 분리될 때 OCU(260)의 제 2 특별 상황이 발생한다. 이러한 상황에서, OCU(260)는 2개의 사이클들을 이용하여 2개의 저장 큐 엔트리들을 퇴거시키고, 제 2 사이클까지 StOp를 공식적으로 커미트하지 않는다. 만약 StOp가 폴트를 갖는 다면, 이는 어떠한 저장 큐 엔트리들도 퇴거하지 않으면서 중단된다.
OCU(260)의 예시적인 실시예는 최후 2개이 열 내의 메모리 기록 StOp들을 커미트함에 있어서 OCU 진행을 나타내는 마스크 비트들의 세트 (CmtMask[7:0])를 이용한다. 8개의 마스크 비트들 CmtMask[7:0] 각각은 최후 2개의 열 내의 8 엔트리에 대응한다. (비트 0부터 시작하는) 비트들의 제 1 세트는 클리어되어, OCU(260)가 대응하는 엔트리들을 검색했고 마지막 클리어 비트에 대응하는 엔트리에 어떠한 StOp들을 커미트했음을 나타낸다. 마지막 클리어 비트에 대응하는 엔트리는 커미트될 다음 StOp를 포함한다. 세트 마스크 비트들에 대응하는 엔트리들은 커미트가능한 StOp들에 대해 검사다. OCU(260)는 또한 마지막 2개의 열들 내의 어느 엔트리들이 언커미트된 메모리 기록 StOp들을 포함하는 지를 나타내는 비트들의 세트(UncmtStOp[7:0])를 유지한다.
각 사이클 동안, OCU(260)는 다음의 언커미트된 StOp를 선택하고, 이 StOp를 포함하는 엔트리에 기초하여 새로운 마스크 비트들의 세트를 발생시킨다. 마스크되지 않은 엔트리들이 검사되어, 선택된 StOp가 현재 커미트가능한 또는 중단 사이클이 시작될 필요가 있는 지를 결정한다. 만약 선택된 StOp가 커미트가능하고 커미트 파이프라인의 단계 2가 사이클의 끝에서 새로운 기록 커미트를 받아들일 수 있다면, StOp가 커미트되고, UncmtStOp 비트들이 새로운 값들로 갱신된다. 이 UncmtStOp 비트들은 최후 2개의 열의 어떠한 시프팅을 매칭하기 위해 갱신/시프트 된다. 부록 B의 표 B.55는 상기 논리를 기술한다.
Ⅷ.B. Op 쿼드 퇴거
스케쥴러(280)의 바닥 열 내에서 모든 연산들의 중단가능한 상태 변경들이 커미트되었거나 성공적으로 커미트되고 있다면, OCU(260)는 사이클의 끝에서 스케쥴러(280)로부터 Op 쿼드를 퇴거시킨다. 이에 의해, 다음 Op 쿼드가 스케쥴러(280)의 바닥열로 시프트될 수 있다. 이러한 모든 연산 결과들이 반드시 커미트되지는 않는 사이클들 동안, Op 쿼드는 퇴거되지 않고, 추가적인 커미트먼트 프로세스를 위해 보유되거나 중단 사이클로 인해 무효화된다. 무효화된다면, 중단 사이클은 열5 내이 연산들중 하나에서 인식된 어떠한 폴트에 응답한다.
보다 구체적으로, Op 쿼드의 퇴거는 모든 레지스터 결과, 상태 결과 및 메모리 기록들이 커미트될 것을 요구하고, Op 쿼드 내에는 어떠한 FAULT 연산 또는 오예측된 BRCOND도 없다. Op 쿼드의 퇴거는 또한 Op 쿼드가 무효로 표시되는 경우 즉시 발생한다. 스케쥴러의 시프트 제어 논리는 이를 자동으로 프로세스한다. 상태 결과들은 Op 쿼드의 퇴거(또는 중단)와 관련하여 모두 함께 커미트된다. 관련된 연산들이 완료되는 경우, 레지스터 결과들은 커미트되었거나 현재 커미트되는 중이다. 표 B.56은 Op 쿼드를 퇴거하기 위한 OCU(260) 내의 회로를 요약한다.
Ⅷ. C. 폴트 처리
Ⅷ. C.1. 로드 연산 폴트 처리
LdOps는 일반적으로 레지스터 상태 변경에만 기인하기 때문에 LdOps는 OCU(260)에 의한 어떤 특별한 처리를 필요로하지 않는다. 대부분의 StOps처럼, LdOps도 실행되는 동안 오류를 만날 수 있다. OCU(260)내의 특별한 논리는 LdOps 폴트와 같은 방법으로 LdOps 폴트를 인식하고 조정한다. 폴팅 LdOp가 스케쥴러(280)의 바닥열에 존재하는 지를 결정하기 위해, OCU(260)는 완성되고 실행되는 선행/오래된 연산을 가지는 LdOp인 연산을 위한 열(5)을 검색하고, 선행 오예측된 BRCOND는 아니다. OCU(260)는, 검지된 폴트 상태를 가지는 LdOp가 LU 파이프라인의 제 2 실행 단계의 '스턱'인지를 가리키는 로드 유닛(251)으로부터 신호를 검사한다.
만약 삽입된 LU 단계로부터 신호와 연산을 실행하고 완성함으로써 열(5)내의 LdOp가 완성되지 않고 진행한다면, OCU(260)는 폴팅 LdOp를 인식하고 다음 연산과 LdOp를 중단하기 위해 즉시 적당한 중단 사이클을 시작한다. 표 B.57은 OCU의 LdOp 폴팅 처리 논리를 나타낸다.
Ⅷ. C.2. FAULT 및 LDDHA/LDAHA 연산 처리
약간의 특별한 연산들, FAULT, LDDHA 및 LDAHA 연산은 부가적이고 특별한 커미트 처리을 필요로한다. 이들 연산중 어떠한 것도 실행 유닛으로 발행되거나 이 실행 유닛에 의해 실행되지 않는다. FAULT, LDDHA 및 LDAHA 연산들은 다른 연산들과의 어떠한 실행 의존성도 갖지 않고 단지 OCU(260)에 대해서만 중요하다.
OCU(260)는 폴팅 LdStOp와 같은 FAULT 연산을 처리한다. 중단 사이클은 현재 엠코드된 OCU 폴트 처리기로 백터링(vectoring)함과 함께 시작된다. 폴팅 LdStOp들과 달리, 인식할 폴트가 있는지 그리고 언제 중단 사이클을 시작하는지에 대한 어떠한 발행도 없다. 처리 FAULT 연산을 처리하기 위한 OCU의 논리를 간단히 하기 위해, 디코더들(240, 510)에 대해 다음과 같은 제한 사항들; 즉 1) FAULT 연산들은 Op quad의 제 1 연산 위치에 있어야 하고, 2)Op quad내의 이하 모든 연산들은 'NO-OPs'(예를 들어, LDK t0,xx)이어야 하며, 그리고 3)다음 Op quad는 어떠한 메모리-라이팅 StOp들도 포함하지 않아야 한다는 제한 사항들이 가해진다. 다음 Op quad로부터 메모리-라이팅 StOp들을 금지시킴으로써, 다른 모든 OCU 커미트 논리는 어떠한 고려사항 없이 "FAULT" Op quad들을 기계적으로(blindly) 연산할 수 있게 된다.
FAULT 연산의 상태는 스케쥴러(280)로 로드될 때 'b0000'로 초기화된다. FAULT 연산이 열(5)에 도달할 때, FAULT 연산의 불완전한 상태는 OCU의 Op quad 퇴거 논리가 Op quad를 퇴거 하지 못하게 하고, OCU(260)의 FAULT 연산커미트 논리는 중단 사이클을 즉시 시작한다. 중단 사이클에 대한 상세한 상황은 LdStOps상의 폴트들과 동일하다. 유일한 차이점은 유일한(unique)폴트 ID의 발생이다. 표 B.58은 FAULT 연산에 대한 중단 신호를 발생시키는 논리를 개시한다.
LDDHA/LDAHA 연산은 OCU-인식된 예외들이 벡터(vector)되는 엠코드 ROM(246)의 어드레스를 설정 및 변경하기 위한 엠코드를 가능하게 한다. OCU(260)는 두 개의 벡터 어드레스 레지스터들을 보유하는바, 하나는 '디폴트' 처리기 어드레스를 홀딩하기 위한 것이고, 다른 하나는 '대안적인' 처리기 어드레스를 홀딩하기 위한 것이다. 제 1 벡터 어드레스 레지스터는 디폴트에 의한 대부분의 엠코드(매크로 명령과 예외 프로세싱 엠코드 둘다)에 대해 액티브하며, LDDHA 연산을 통해 리셋 엠코드에 의해 단지 한번 설정된다(프로세서(200)는 리셋후 초기화를 위해 리셋 엠코드를 실행한다). 제 2 벡터 어드레스 레지스터는 LDAHA 연산을 통해 설정된다. LDAHA 연산을 포함하지 않는 (엔트리 포인트로부터 ERET로 정의되는) 벡터 디코더(244)로부터의 엠코드 시퀀스에 있어서, 시퀀스내의 연산들에 대해 OCU(260)에 의해 인식되는 어떠한 폴트들은 디폴트 처리기 어드레스 레지스터의 어드레스로 벡터링을 야기시킨다. LDAHA 연산을 포함하는 엠코드 시퀀스에 있어서, LDAHA 연산을 포함하는 것 이전의 Op quad들의 연산들에 대한 폴트들은 디폴트 어드레스로의 벡터링을 야기 시킨다. 그러나 LDAHA 연산을 포함하는 Op quad, 또는 엠코드 시퀀스의 마지막 quad를 포함하여 이 quad까지의 이하의 어떠한 Op quad들의 연산들에 대한 폴트들은 제 2 벡터 어드레스 레지스터의 어드레스로의 벡터링을 야기시킨다. 'ERET' Op quad의 퇴거는 다음 LDAHA 연산이 발생할 때까지 이하의 모든 연산들에 대해 디폴트 처리기 어드레스 레지스터를 효과적으로 재활성 시킨다. 중단 사이클의 발생 또한 디폴트 처리기 어드레스 레지스터를 재활성화한다.
OCU(260)에 대한 사항들을 간단히 하기 위해, LDDHA/LDHAH 연산들은 Op quad의 가장 오래된 연산 위치에 놓여져야 한다. '유효' 연산들은 Op quad의 이후 연산 위치들에서 허용된다. 표 B.59는 OCU의 LDDHA/LDAHA 연산 처리 논리를 나타낸다.
Ⅷ. C.3. 타겟 한계 위반 처리
Op quad내의 각 연산과 관련된 상태 변경의 커미트에 부가하여, OCU(260)는 또한, 총괄적으로 Op quad에 대해 태그(tag)된 특별한 상태를 인식한다. MacDec(260)가 전송 제어 명령을 디코드하고, 코드 세그먼트 한계 위반이 (MacDec이 Op quad를 발생시키고, Op quad가 스케쥴러(280)내로 로드된 후) 다겟 어드레스에 대해 검출될 때마다, Op quad는 이러한 위반이 Op quad와 관련하여 검출되었음을 나타내도록 표시된다.
Op quad가 OCU(260)에 도달하고 커미트 될 때, 설정 태그 비트가 인식되고, Op quad 내의 연산으로부터 어떠한 상태 변경의 케미트도 없이 중단 사이클이 시작된다. 전체 Op quad가 폴트되는 것이 효과적이다. Op quad 내에 FAULT연산이 있었던 것처럼 결과가 유사하다. 표 B.60은 분기 타겟 한계 위반들을 처리하기 위한 논리를 나타낸다.
Ⅷ. C.4. 오예측된 분기 처리
다양한 특별 경우들의 처리 및 중단가능한 상태 변경의 커미트 외에, OCU(260)는 오예측된 BRCOND들에 대한 중단사이클의 발생을 처리한다. 상술한 바와 같이, 명령 패치 및 디코더 영역들의 재시작(restart)은 BRCOND가 스케쥴러(280)의 최하위층에 도달하기 전에 이루어진다. 스케쥴러(280)는 이후 중단를 발생시키고, 단지 선행 연산들만이 케이트되게 한다. 연산 폴트들에 대한 중단 사이클의 발생 에 있어서, 중단은 모든 선행 연산들이 커미트될 때까지 시작되지 않는다. 표 B.61은 오예측된 분기에 대한 중단를 발생시키는 논리를 나타낸다.
Ⅷ. D. 중단 사이클 발생
OCU(260)은 두 개의 상황들, 즉 (LdStOp 또는 FAULT 연산에 대해)Op 폴트의 인식 및 오예측된 BRCOND의 인식의 상황에서 중단 사이클을 발생시킨다. 이전 섹션들 및 표 B.55, B.57, B.58 및 B.61은 중단 사이클을 개시하는 신호들(즉, StAbort, LdAbort, FltAbort, LimAbort 및 BrAbort 신호들)의 발생을 망라한다. 본 섹션은 일반적인 Abort 신호 및 관련 정보의 발생을 개시한다.
Abort 신호는 특별한 타입의 상태 변경들 또는 연산들의 커미트와 관련된 개별적인 중단 신호들의 조합이다. BRCOND 관련 중단가 아닌 단지 폴트 관련 중단에 대해서만 정의되는 관련 엠코드 벡터 어드레스는 상기 설명된 FltVecAddr이다. 중단 신호는 모든 미결(outstanding) 연산들의 모든 실행 유닛들(251 내지 257까지) 및 스케쥴러(280)을 플러쉬(flush)하고, 이러한 영역들을 재 초기화 하여 명령 디코더(240)로부터 새로운 연산들을 수신할 준비를 한다. BRCOND 관련 중단들에 있어서, 이는 충분한데, 그 이유는 분기 평가 유닛(257)이 엠코드와 x86 매크로 명령 패치 및 명령 디코더(240)를 이전에 재시작했기 때문이다.
예외 관련 중단들에 있어서, 명령 디코더(240)는 또한 폴트 처리기 어드레스에서 재시작될 필요가 있다. 명령 패치/디코드 재시작이 오예측된 BRCOND와 연산 예외에 대해 동시에 신호될 때, 연산 예외에 보다 높은 우선 순위가 주어진다. 적당한 재시작 신호의 발생과 재시작을 위한 벡터 어드레스가 적절히 발생된다. 폴트 관련 중단가 발생할 때, OCU(260)는 또한 폴트에 대한 정보가 레지스터로의 x86 매크로 명령 프로그램 카운터(실제로 폴트되는 관련된 x86 명령들의 논리 어드레스)를 대치한다. 표 B.62는 OCU의 중단 사이클 발생 논리를 요약한다.
Ⅸ. 프로세싱 시스템
본 발명의 실시예는 예를 들어, 독립형 및 네트워크형 퍼스널 컴퓨터 시스템, 워크스테이션 시스템, 멀티미디어 시스템, 네트워크 서버 시스템, 멀티프로세서 시스템, 매입형 시스템, 집적 전화 시스템 및 화상 회의 시스템을 포함하는 많은 프로세싱 시트템을 포함한다. 도 11A 내지 11C는, 적절한 버스 구성, 메모리 계층들 및 캐시 구성들, I/O 인터페이스, 제어기, 장치 및 주변 기기들에 본 발명에 따른 수퍼스칼라 프로세서(200)를 결합하는 예시적인 프로세싱 시스템들의 세트를 도시한다. 도 11A 내지 11A까지에 도시된 프로세싱 시스템의 세트는 단지 예시적이다. 수퍼스칼라 프로세서(200)를 통합하는 시스템을 위한 적절한 구성들은 다음과 같은 주변 기기들, 카드들, 인터페이스들 및 장치들을 포함한다:
1. 비디오 디스플레이 장치, 모니터, 평면 디스플레이 및 터치 스크린;
2. 포인팅 장치와 키보드;
3. 코-프로세서, 플로팅 포인트 프로세서, 그래픽 프로세서, I/O 제어기 및 UART들;
4. 2차 및 3차 저장 유닛, 제어기, 인터페이스, 캐시, RAM, ROM, 플래시 메모리, 스태틱 RAM, 다이나믹 RAM;
5. CD-ROM, 고정-디스크, 제어가능한 미디어 저장 장치, 플로피 디스크, WORM들, IDE 제어기, 증속-IDE 제어기, SCSI 장치, 스캐너 및 쥬크 박스;
6. PCMCIA 인터페이스 및 장치, ISA 버스 및 장치, EISA 버스 및 장치, PCI 로컬 버스 및 장치, VESA 로컬 버스 및 장치, 마이크로 채널 아키텍쳐 버스 및 장치;
7. 네트워크 인터페이스, 이서넷에 대한 것과 같은 카드 및 어댑터, 토큰 링, 10베이스-T, 꼬임쌍, 비꼬임쌍, ATM 네트워크, 프레임 계전기, ISDN 등;
8. 비디오 카드 및 장치, 2D 및 3D 그래픽 카드, 프레임 버퍼, MPEG/JPEG 압축/압축해제 논리 및 장치, 화상 회의 카드 및 장치, 비디오 카메라 및 프레임 캡쳐 장치;
9. 컴퓨터 통합 전화카드 및 장치, 모뎀 카드 및 장치, 팩스 카드 및 장치 ;
10. 사운드 카드 및 장치, 오디오와 비디오 입력 장치, 마이크로폰, 및 스피커;
11. 데이터 획득과 제어 카드 및 인터페이스, 압축/압축해제 논리 및 장치, 암호/해독 논리 및 장치; 및
12. 테이프 백업 유닛, RAID와 ECC 메모리와 같은 잉여/폴트 허용 긱 및 장치.
이러한 기기, 카드, 인터페이스 및 장치의 결합(상기에 열거된 것들 뿐 아니라 동등한 기기, 카드, 인터페이스 및 장치를 포함한다)은 너무 많아서 목록화할 수 없다.
수퍼스칼라 프로세서(200)를 통합하는 네트워크된 퍼스널 컴퓨터(100)가 도 11A에 도시되어 있다. 수퍼스칼라 프로세서(200)는 메모리 서브시스템(120)에 연결되어 있다. 메모리 서브시스템(120)은 RAM으로써 도시되지만, 대안적인 실시예는 RAM과 수퍼스칼라 프로세서(200) 사이에 삽입된 캐쉬나 캐쉬들을 포함한다. 수퍼스칼라 프로세서(200)와 메모리 서브시스템(120)은 컴퓨터(100)의 머더보드(101)의 일부로서 포함된다. 일련의 어댑터들, 인터페이스들 및 제어기들이 상기 프로세서(200)를 장치들 및 주변기기들에 연결한다. 이러한 어댑터들, 인터페이스들 및 제어기들은 전형적으로 머더보드(101)의 백플레인 버스의 카드로서 프로세서(200)에 결합된다. 그러나, 대안적인 실시들은 개별적인 어댑터들, 인터페이스들 및 제어기들을 머더보드(101)내로 통합할 수 있다. 그래픽 어댑터(110)가 슈퍼스칼라 프로세서(200)에 결합되어, 슈퍼스칼라 프로세서(200)에 의해 제공되는 스크린 갱신들에 따라 디스플레이(110)를 제어하기 위한 신호를 구동시킨다. 병렬 인터페이스(109)와 직렬 인터페이스(108)는 각각 병렬 포트 장치들(예를 들면, 병렬 프린터(102)와 같은 프린터, 테이프 백업 유닛들 등)와 직렬 장치들(예를 들면, 모뎀(103), 포인팅 장치들 및 프린터들)에 인터페이스하기 위한 병렬 포트와 시리얼 포트 시그널링 인터페이스들을 제공한다. 하드 디스크/ 플로피 디스크 제어기(130)는 하드 디스크(132)와 플로피 디스크(131)에 대한 액세스를 제어한다. LAN 어댑터(107)는 컴퓨터(100)에 토큰링 네트워크들, 꼬임쌍, 10 베이스-T 및 802.3 이서넷과 같은 국부 영역 네트워크들에 대한 네트워크 인터페이스를 제공한다. 다른 어댑터들 및 인터페이스들에 있어서, LAN 어댑터(107)는 전형적으로 머더보드(101)의 백플랜 버스의 카드로서 프로세서(200)에 결합된다.
슈퍼스칼라 프로세서(200)의 많은 예(instance)가 레벨2 캐쉬(125)와 프로세서 버스(123)로 결합된 도 11B에 도시된 것과 같은 네트워크 서버 구성에서, 수퍼스칼라 프로세서(200)는 프로세서로서 또는 많은 프로세서들 중 하나로서 특히 매력적이다. 각 수퍼스칼라 프로세서(200)는 프로세서 버스(123)를 통해 시스템 제어기(150)와 메모리 제어기(121)에 결합된다. 메모리 제어기(121)는 에러 정정 코드(ECC)를 지원하기 위한 8 비트 패리티 인터페이스를 포함하는 64비트 인터페이스를 메모리(122)에 제공한다. ECC 메모리가 바람직하지만, 선택적인 시스템 제어기(15)는 64 비트 프로세서 버스(123)와 32 비트 로컬 버스(151) 사이에 인터페이스(또는 브릿지)를 제공한다. 로컬 버스(151)는 어떠한 고속 I/O 버스, 예를 들어 VESA 로컬 버스(VL 버스) 또는 주변 기기 상호 연결(PCI) 버스이다. 시스템 제어기(150)는 프로세서 버스(123)와 로컬 버스(151)의 잠재적으로 다른 클록률 지원하기 위한 버퍼링을 제공한다. 시스템 제어기(150)는 두 개의 버스들(123과 151)의 사용을 중재하고, 어떤 구성들에서는 두 버스들을 가로질러 버스트 데이터 트랜잭션들을 지원할 수도 있다. 로컬 버스(151)는 많은 로컬 버스 장치들 및 기기들(예를 들어, SCSI 어댑터(170), IDE 제어기(180), LAN 어댑터(157) 및 브릿지와 주변 제어기(160)에 연결된다. 전형적으로, 퍼스널 컴퓨터나 워크스테이션 구성들보다 네트워크 서버 구조들에서의 디스플레이 장치 요건들이 덜하기 때문에, 디스플레이 어댑터(112)는 하위대역폭ISA 버스(161)에 결합된 것으로 도시된다.
IDE 제어기(180)는, 디스크들, 테이프 드라이버들 및 CD-ROM들과 같은 저장 장치들을 인터페이스하기 위한 (IDE, 고도화 IDE, ATA 및 고도화 소형 장치 인터페이스(ESDI) 제어기 설계들을 포함하는) 많은 제어기 설계들을 나타낸다. IDE 제어기(180)는 테이프 백업 유닛(183)과 두 개의 디스크들(하드 디스크(181)와 플로피 디스크(182))에 연결된다. 도 11B의 실시예에서는 CD-ROM(172)과 CD 쥬크박스(173)둘 모두가 소형 컴퓨터 시스템 인터페이스(SCSI)를 경유하여 인터페이스 된지만, 대안적인 구성들은 IDE 제어기(180)를 경유하여 IDE/고도화 IDE CD-ROM을 인터페이스 할 수 있다.
SCSI 어댑터(180)는 데이지 체인 구성(daisy chain configuration)으로 로컬 버스(151) 및 다양한 SCSI 장치들(예를 들어, 스캐너(174), CD 쥬크박스(173), 스캐너(2016), CD-ROM(172) 및 값싼 디스크들의 리던던트 어레이(RAID)(171))에 연결된다. 예시적인 목적으로, SCSI 장치들의 데이지 체인은 도 11B에 버스로서 도시된다. LAN 어댑터(157)는 (예를 들면, 동축 미디어, 꼬임쌍 미디어 및 비꼬임쌍 미디어 상에서의 802.3 베이스밴드 이서넷, 10 베이스-T, 802.3 브로드밴드 네트워크, 802.4 토큰 패싱 네트워크, 802.5 토큰 링 네트워크 등과 같이 IEEE 802.x표준들에 기초하는 것들 및) 광섬유 분배 데이터 인터페이스(FDDI) 표준들에 기초하는 것들과 같은 적당한 네트워크 어댑터를 나타낸다. ISA 버스(161)는 주변 제어기(160)와 브릿지 및 주변 제어기(160)를 통해 로컬 버스(151)에 연결되고 수퍼 I/O(135)와 같은 다기능 I/O 카드, 전화 카드(136), 디스플레이 어댑터(112)를 포함하는 다양한 주변 기기들을 위한 모듈러 연결과 16비트 I/O 버스를 제공한다. 슈퍼 I/O(135)는 디스크(131), 병렬 포트(139), 직렬 포트(138) 및 포인팅 장치(137)를 위한 지원을 제공한다.
슈퍼스칼라 프로세서(200)를 위한 멀티미디어 워크스테이션 구조가 도 11C에 도시되어 있다. 도 11B의 서버 구조처럼, 멀티미디어 워크스테이션 구조는 장치들 및 거기에 연결된 요소들에 각각 매칭되는 가변 실행 특성들을 가지는 버스들의 조직(hierarchy)을 포함한다. 당업자라면, 도 11C의 버스 조직에 대한 다양한 변형들이 이루어질 수 있음을 알수 있을 것이다. 메모리 버스(126)는 브릿지(129), 메모리(128), 캐쉬(127) 및 슈퍼스칼라 프로세서(200)를 연결한다. 도 11B의 네트워크 서버 구조에서처럼, 멀티미디어 워크스테이션에 대해 다양한 캐쉬 구성들이 적절하다. 로컬 버스(151)는 바람직하게는 VL 버스나 PCI 버스와 같은 고속 I/O 버스이다. SCSI 어댑터(170), LAN 어댑터(157), 그래픽 어댑터(114), 사운드 어댑터(190) 및 모션 비디오 어댑터(195)는 서로 연결되며, I/O 버스(151)를 통해 슈퍼스칼라 프로세서(200)에 연결된다. SCSI어댑터(170), LAN 어댑터(157), 및 확장 버스 브릿지(160) 및 이들 각각에 연결된 기기들 및 장치들은 도 11B를 참조하여 상술한 대응하는 어댑터들, 기기들 및 장치들과 비교될 수 있다. 특히, SCSI 어댑터(170)는 데이지 체인 구성으로 다양한 SCSI 장치들(예를 들어, 디스크(175), 테이프 백업 유닛(176) 및 CD-ROM(172))에 연결된다.
슈퍼스칼라 프로세서(200)의 실시예에 따르면, 슈퍼스칼라 프로세서(200)는 x86 명령 세트에 대한 멀티미디어 확장을 실행하기 위한 멀티미디어 유닛(256)을 포함할 수 있다. 도 11C를 다시 참조해보면, 사운드 어댑터(190), 모션 비디오 어댑터(195) 및 그래픽 어댑터(114)와 같은 멀티미디어 어댑터들은 각각 버스들(151, 126)를 통해 슈퍼스칼라 프로세서(200)에 연결되어, 2차 저장 유닛(예를 들면, 디스크(175)), 메모리(128) 및 멀티미디어 어댑터들 사이에 멀티미디어 데이터의 고대역 전송을 제공한다. 사운드 어댑터(190)는 각각 오디오 신호를 합성하고 샘플링하기 위한 이지털-아날로그(D/A) 인터페이스 및 아날로그-디지털(A/D) 인터페이스를 제공한다. 사운드 어댑터(190)의 A/D 및 D/A 인터페이스들은 각각 마이크로폰(191) 및 스피커(192)에 연결된다. 사운드 카드를 위한 적당한 설계는 당업자에게 잘 알려져 있으며 사운드 어댑터(190)는 이러한 적당한 설계중 어느 하나이다.
모션 비디오 어댑터(195)는 예를 들면 비디오 카메라(196)로부터 비디오 신호들의 포착, 압축을 지원한다. 게다가, 모션 비디오 어댑터(195)는 고해상도 컴퓨터 모니터, 고선명 텔레비젼 또는 텔레비젼과 같은 디스플레이 장치(198)에 프레임 버퍼(197)를 통해 디스플레이 신호들을 제공한다. 모션 비디오 어댑터(195)의 대안적인 실시예들은 프레임 버퍼(197)를 제거하고, 래스터 디스플레이를 직접 구동할 수 있다. 또한, 모션 비디오 어댑터(195)의 대안 실시예들은 모션 비디오 어댑터의 비디오 입력과 비디오 출력 기능을 분리하고, 대신에 개별적인 비디오 입력과 비디오 출력구성 요소들을 제공할 수 있다.
비디오 정보는 대용량의 저장 공간을 필요로하기 때문에, 일반적으로 압축된다. 따라서, CD-ROM(172)의 콤팩트디스크상에 나타나는 데이터로부터의 압축된 비디오 정보를 디스플레이 하기위해. 압축된 비디오 정보는 압축이 해제되어야 한다. 고대역 버스트 모드 데이터 전송은 I/O 버스(151)에 의해 지원되는바, 이는 임의의 길이 버스트 데이터 전송을 지원하는 PCI와 같은 로컬 버스인 것이 바람직하다. 비디오 압축과 압축 해제는 멀티미디어 유닛에서 멀티미디어 명령들을 실행하는 스케쥴러 프로세서(200) 그리고/또는 모션 비디오 어댑터(195)에 의해 실행될 수 있다. 따라서, 메모리 버스(126)와 브릿지(129)는 바람직하게는 메모리 버스(126)와 I/O 버스(151) 간의 브릿지(129)를 가로질러 버스트 데이터 전송을 지원한다.
X. 결론
본 발명은 특정 실시예들에 관련하여 설명되었지만, 이러한 설명은 단지 발명의 적용예일 뿐이며, 한정적인 것으로 간주되어서는 안된다. 이러한 실시예들의 특징의 다양한 응용과 결합은 본 발명의 범위내에 있다.
부록 A : RISC86 TM 구문
이 부록은 도 3에 설명된 RISC86TM 구문에 따라 Op코드들을 설명하고 있다.
RegOp 정의들
Op코드의 비트 36 및 37는 RegOp를 식별하기 위해 00이다. 비트 10 및 11는 사용되지 않으며, 00이어야 한다.
'/'에 의해 분리된 기호들은 동일한 타입 필드들을 갖고, 레지스터 유닛들(253,254)에 의해 동일하게 처리된다. 이들 RegOp는 필드(Ext,SS)에 의해 표시된 상태 변경들에서 서로 다르며, OCU 260에 의해 커미트된다.
타입 필드는 필드(DSz)에 기초하여 상이하게 해석된다. 전술된 바와 같이, 실행 유닛은 바이트 크기 RegOp에 대해 한 연산 및 16/32 비트 크기 RegOp에 대해 또 하나의 연산을 수행한다.
모든 바이트 크기 RegOp 및 x1xxxx, 1x1xxx, 또는 xx01xx 형태의 타입 필드를 가진 모든 RegOp는 RUX-only 연산들이다.
하드웨어는 xx01xx 형태의 타입 필드값들을 갖는 모든 RegOps를 "cc-종속"으로서 처리하고, 따라서 연산의 실행을 상태 오퍼랜드 전송과 동기화 한다.
A. 2 RegOp 확장 필드 Ext[3:0]
MOVcc Op들에 대하여, {Type[0],Ext[3:0]}은 5비트 조건 코드를 지정한다.
RDxxx/WRxxx Op들에 대하여, {Type[0],Ext[3:0]}은 5비트 특수 레지스터 번호를 지정한다. WRFLG(.cc)에 대하여, ".cc"가 지정되는 경우 소망되는 상기 특정 레지스터 번호 엔코딩이 StatMod 값을 매칭시킨다. RDSEG Ops에 대하여, Ext[3:0]은 4비트 세그먼트(선택기) 레지스터를 지정한다. 세그먼트 레지스터들의 세트는 x86 구조 레지스터들 및 추가의 특수 세그먼트 레지스터들을 포함한다.
OS 세그먼트 레지스터는 에뮬레이션 환경으로부터의 현재의 3비트 레지스터 번호에 의해 Op 디코드 시간에서 대체된다.
필드(SS=1)를 가진 다른 연산에 대하여, {Type[0],Ext[3:0]}은 (스케쥴러 280에 저장된 바와같이) 4개의 상태 변경 비트를 지정한다.
A. 3 RegOp 연산/데이터 크기 필드 DSz[2:0]
필드 Dsz는 연산을 위한 데이터 크기를 나타낸다.
크기들(DSize,ASize,SSize)은 환경 치환동안 대응하는 환경 변수로 대체되는 플레이스홀더(placeholder)들이다.
A. 4 RegOp RUX-only 필드 R1
R1은 RegOp가 레지스터 유닛(251)에만 발생가능함을 나타내도록 설정된다.
A. 5 RegOp 착신지 필드 Dest[4:0]
필드 Dest[4:0]는 연산을 위한 착신지 레지스터를 식별하는 5비트 범용 레지스터 번호를 홀드한다.
A. 6 RegOp 제 1 소스 필드 Scrl[4:0]
필드 Scrl[4:0]는 연산을 위한 제 1 소스 레지스터를 식별하는 5비트 범용 레지스터 번호를 홀드한다.
A. 6 RegOp 설정 상태 필드 SS
필드 SS는 연산이 필드 Ext에 의해 표시된 상태 플래그들을 변경함을 나타내도록 설정된다.
A. 6 RegOp 필드 I
필드 I는 필드 Imm8/Src2가 즉시 값 또는 레지스터 번호를 포함하는지를 나타낸다.
A. 6 RegOp 필드 Imm8/Src2[7:0]
필드 Imm8/Src2는 제 2 소스 오퍼랜드에 대해 즉시 값 또는 레지스터 번호를 홀드한다. 만일 I=0이면, Imm8/Src2[4:0]은 5비트 레지스터 번호를 포함한다. 만일 I=1이면, Imm8/Src2[7:0]는 필드 DSz에 의해 표시된 크기로 확장된 기호인 8비트 기호 즉시 값을 지정한다.
LdStOp 정의들
Op코드의 비트 37 및 36은 LdStOp를 나타내기 위해 0 및 1이 된다.
A. 7 LdStOp 타입 필드 타입[3:0]
A. 8 LdStOp 어드레스 평가 크기 필드 ASz[1:0]
엠코드 환경 치환 전에, 필드 ASz[1:0]는 다음과 같은 어드레스 평가 크기를 나타낸다.
엠코드 환경 치환은 ASize,SSize, 또는 DSize를 적절한 고정된 크기로 변경한다.
A. 9 LdStOp 데이터 크기 필드 DSz[1:0]
A. 10 LdStOp 데이터 필드 Data[4:0]
필드 Data는 저장 소스 또는 로드 착신지 레지스터에 대한 5비트 범용 레지스터 번호를 나타낸다.
A. 10 LdStOp 세그먼트 필드 Seg[3:0]
필드 Seg[3:0]는 세그먼트 레지스터를 식별한다.
A. 11 LdStOp 베이스 오퍼랜드 필드 Base[3:0]
필드 Base는 레지스터 파일의 하위 절반에서 범용 레지스터를 나타내는 4비트 레지스터 번호를 포함한다. 상기 레지스터로부터의 값은 어드레스 평가을 위한 베이스가 된다.
A. 12 LdStOp 인덱스 필드 Index[3:0]
필드 Base는 레지스터 파일의 하위 절반에서 범용 레지스터를 나타내는 4비트 레지스터 번호를 포함한다. 상기 레지스터로부터의 값은 어드레스 평가동안 스케일되어 베이스에 추가되는 어드레스 인덱스로서 사용된다.
A. 13 LdStOp 인덱스 스케일 팩터 필드 ISF[1:0]
필드 ISF는 인덱스가 인수 1,2,4, 또는 8에 의해 스케일되어야 함을 나타낸다.
A. 14 LdStOp 큰 변위 필드 LD
필드 LD는 연산이 앞선 LIMMOp로부터의 큰(32비트) 변위를 사용하는지 또는 필드 Disp8로부터의 작은(8비트) 변위를 사용하는지를 나타낸다.
A.15 LdStOp 작은 변위 필드 Disp8[7:0]
필드 Disp8[7:0]는 필드 ASz에 의해 표시된 크기로 확장되는 8비트 변위를 포함한다.
LIMMOp 정의
Op코드의 비트 37 및 36은 LIMMOp를 나타내기 위해 11이 된다.
A. 16 LIMMOp 즉시 필드 ImmHi 및 ImmLo
필드 ImmHi[14:0] 및 ImmLo[16:0]는 각각 32비트 즉시값의 최상위 15비트 및 최하위 17비트를 포함한다.
A.17 LIMMOp 착신지 필드 Dest[3:0]
필드 Dest[3:0]는 즉시값에 대한 착신지를 나타내는 4비트 레지스터 번호를 저장한다.
주 목:표준 NO-OP는, 완료된 상태에서 스케쥴러로 로드되고, 기입에 의해 변하지 않는 레지스터(t0)에 즉시 값 <undefined>을 기입하므로써 커미트되는 "LIMM t0, <undefined>이다.
SepcOp 정의
Op코드의 비트 37 및 36은 SpecOp를 나타내기 위해 10이 된다. 비트 35는 이 부록에서 정의되었지만 FpOp에 대해서는 제거된 SpecOp에 대해 설정된다.
A. 18 SpecOp 타입 필드 Type[3:0)
A.19 SpecOp 상태 코드 필드 cc[4:0]
필드 cc[4:0]는 BRCOND 연산을 위한 5비트 조건 코드를 포함한다. 비트 cc[4:1]는 테스트 되어질 상태를 다음과 같이 지정한다.
비트 cc[4:0]는 참(truth)에 대해 상기 조건이 평가되는지 또는 그의 상보(comliment)가 평가되는지를 지정한다.
상기 정의에서, "∼", "˙", "+" 및 "^"는 각각 논리 NOT, AND, OR 및 XOR를 나타낸다. OF, SF, ZF, AF, PF 및 CF는 표준 x86 상태 비트들이다. EZF 및 ECF는 구조적 제로 플래그 ZF 및 자리 올림(carry) 플래그 CF가 변경되지 않을 시에, x86 명령을 실행하는 시퀀스에서 엠코드가 사용하는 에뮬레이션 제로 플래그 및 에뮬레이션 자리 올림 플래그이다. IP, DTF 및 SSTF는 각각 인터럽트 보류(interrupt pending), 디버그 트랩 플래그 및 단일 스텝 트랩 플래그를 나타내는 신호들이다.
분기 조건들, STRZ 및 MSTRC는 논리적으로 동일하고, 이동 스트링 명령, MOVS와 같은 x86 명령들을 실행하는데 사용된다. 그러한 x86 명령들에 대하여, 엠코드는 레지스터내에 인덱스를 저장하고, BRCOND로 끝나는 루프를 생성한다. 각각의 루프 반복은 상당량의 데이터를 이동시키고, 인덱스를 감소시킨다. 분기 예측은 BRCOND가 루프의 시작으로 분기할 것이라고 초기에 예측한다. 조건 MSTRC는 인덱스가 x86 명령의 완료 가까이의 소정의 포인트에 도달할 시에 분기 평가 논리(257)이 명령 디코더(240)에 발신하게됨을 나타낸다. 이어서, 디코더(240)는 스케쥴러(280)내로 로드되는 BRCOND에 대한 분기 예측을 변경한다. 따라서, 오예측된 분기 및 관련 중단은, 루핑이 완료될 시에 회피될 수 있다. 이는 프로세서 유효성을 개선한다.
A.20 SpecOp 데이터 크기 필드 DSz[1:0]
필드 DSz[1:0]는 로드 상수 연산들 LDK 및 LDKD에 대한 데이터 크기(1바이트, 4바이트 또는 DSize)를 나타낸다.
A.21 SpecOp 착신지 필드 Dest[4:0]
필드 Dest는 연산들, LDK 및 LDKD의 착신지인 5비트 레지스터 번호를 홀드한다.
A.21 SpecOp 즉시 필드 Imm17[16:0]
필드 Imm17[16:0]는 17비트 상수와, 17비트로 표기된 즉시(17 bit signed immediate) 또는 14비트 Op 어드레스를 포함한다.
범용 레지스터 정의
24개의 정수 범용 레지스터들이 있다. 최초 8개의 레지스터들은 x86 범용 레지스터(AX 내지 DI)에 대응한다. 나머지 16대의 레지스터들은 CISC 명령들을 실행하는 다중 연산 시퀀스내에서 사용되는 임시 또는 스크래치 레지스터들로서 역할을 한다. 5비트 레지스터 번호들을 사용하는 연산들은 32 레지스터들을 액세스할 수 있고, 정수 레지스터에 대해 사용되지 않는 나머지 레지스터 번호들은 환경 변수 치환을 위한 멀티미디어 레지스터들 또는 플레이스홀더일 수 있다.
x86 정수 레지스터 세트는 레지스터(AX,CX,DX,BX)의 1/2의 하위 2개 바이트 중 어느 바이트의 바이트 연산을 위한 어드레싱을 지원한다. 레지스터 크기 사양에 기초하여, x86 명령들내에서의 3비트 레지스터 번호들이 hi/lo 바이트 레지스터나 또는 word/dword 레지스터로서 해석된다. 연산 견지에서, 이 크기는 연산의 ASz 또는 DSz(LdStOps의 베이스 및 인덱스 레지스터에 대한 ASz; 및 일반적으로 Data/Dest, Src1 및 Src2 레지스터에 대한 DSz) 필드에 의해 지정된다. 스크래치 정수 레지스터 세트는 레지스터(t1-t4 및 t8-t11)의 1/2의 하위 2개 바이트의 유사한 어드레싱을 지원한다.
이하 표는 1 내지 24의 레지스터 번호를 명명된(named) 레지스터로 맵핑한다.
기호들, "t0" 및 "_"은 기입되어질 수 있으나 판독시에 항상 제로 값을 반송하는 레지스터와 유사한 것이다. "_"은 오퍼랜드 또는 결과값이 돈 케어(don't care)인 상황에서 전형적으로 사용된다. 앞서 표시된 바와 같이, 레지스터(t0)는 바이트 모드에서 참조될 수 없다.
부록 B : 의사-RTL 설명
이 부록내 표들은 프로세서(200)의 예시적인 실시예를 통해 사용되는 신호를 발생하는 논리를 설명한다. 각각의 표는 추가로 다른 표들을 설명하거나 또는 참조하지 않고 다른 표에서 설명된 신호들을 사용할 수 있다. 이 부록에서 설명된 신호들은 달리 표시되지 않는한 어서트되거나 혹은 활성 하이(active high)인 것으로 가정된다.
다음의 표기법이 사용된다. "∼"는 인버터에 의해 제공되는 것과 같은 신호의 보수 또는 역을 나타낸다. "˙", " ", 및 "&"를 통해 연결된 신호들은 AND 게이트에 의해 구현될 수 있는 것과 같이 논리 AND로서 결합된다. "+"를 통해 연결된 신호들은 OR 게이트에 의해 구현될 수 있는 것과 같이 논리 OR 게이트로서 결합된다. "^"를 통해 연결된 신호들은 XOR 게이트에 의해 구현될 수 있는 것과 같이 배타적 논리 OR로서 결합된다. "if (a) x=b else x=c" 또는 대안적으로 "if (a) x=b:c"의 표기법은 만일 신호 a가 어서트되는 경우 출력 신호 x가 신호 b와 동일하고 그렇지 않으면 신호 b가 c와 동일한 멀티플렉서를 나타낸다. 만일 "else x=c"가 생략되면, 신호 a가 낮은 경우 신호 x는 낮게 된다. 멀티플렉서를 나타내는 또 다른 표기법은 "x=switch(A) case A1:x1 case A2:x2... case An:xn"인데, 여기서 출력 신호 x는 다중비트 선택 신호 A의 값에 따라 x1 또는 x2 또는...xn값을 갖는다. "x=switch(A) x1:x2:...xn"에서와 같이 case가 생략되는 경우, x1 내지 xn의 출력값은 신호 A의 순차적인 값에 대응한다. 설명된 대부분의 신호는 각각의 클럭 사이클을 변경시킨다. 표기 @(clock)는 후속 클럭 사이클에서 사용하기 위한 신호 클럭의 에지에서 레지스터로 래치되는 것을 나타낸다.
당업자에 의해 이해될 수 있는 바와 같이, 후술된 논리는 여러 방법으로 구현될 수 있다.
표 B.1 정적 필드 저장 요소 연산
표 B.2 동적 필드 저장 요소 연산
스케쥴러(280)에 대한 글로벌 제어 논리(520)는 개별적인 플립플롭으로 로드된 신호를 선택하는 독립 신호인 LdEntry[i]를 발생한다.
표기 xxOp.yyy는 xxOp 타입의 RISC86 명령에 대하여 정의된 필드 yyy로부터의 값을 나타내는 연산 디코더(510)로의 입력신호를 나타낸다. 예를 들어, RegOp.Srcl은 도 3의 RegOp.의 Srcl 필드와 동일한 위치에서 명령내의 비트를 나타내고, 부록 A는 RegOp, LdStOp, LIMMOp, 및 SpecOp에 대한 예시적인 필드 정의를 규정한다.
표 B.3 필드 타입
"RUYD"는 디버깅을 위해 제 2 레지스터 유닛 RUY을 디스에이블시키는 특수 레지스터이다.
표 B.4 필드 LD_Imm
표 B.5 필드 SrclReg
표 B.6 필드 Src2Reg
표 B.7 필드 SrcStReg
표 B.8 필드 DestReg
표 B.9 필드 SrclBM, Src2BM, 및 Srcl2BM
표 B.10 필드 SrcStBM
표 B.11 필드 OpInfo
표 B.12 상태 필드
연산 디코더(510)는 대응하는 RISC86 명령의 OpId 필드에 따라 field State[3:0]를 (발생되지 않은) b0000 또는 (완료되지 않은) b1111로서 초기화한다.
필드 상태(신호들 S0, S1, S2 및 S3는)는 연산 실행동안 다음과 같이 변한다
신호 SC_Abort는 현재의 스케쥴러(280)내에서 연산들의 실행을 중단하도록 어서트된다.
IssueOpToLu[i], IssueOpToSu[i], IssueOpToRux[i] 및 IssueOpToRUY[i]를 발신한다.
표 B.13 필드 Execl
연산 디코더(510)는 필드 Execl를 낮게 초기화한다.
Execl = X
계속해서, 필드 Execl는 다음과 같이 변경된다.
if (S0Enbl) Execl = IssueOpToRUX
신호 IssueOpToRUX는 레지스터 유닛(253)을 위한 발행 선택 스캔 체인동안 엔트리내에서 발생된다.
표 B.14 필드 DestBM
연산 디코더(520)는 착신지 레지스터의 바이트가 수정될 것이라는 것을 나타내는 연산에 따라 필드 DestBM를 초기화한다.
필드 DestBM는 다음과 같이 명확해진다:
if (SC_Abort) DestBM = 3'b0
표 B.15 필드 DestVal
연산 디코더(510)는 다음의 논리를 사용하여, 관련 RISC86 명령으로부터 필드 DestVal를 발생한다.
연산 필드 DestVal의 후속 실행은 다음과 같이 변경된다.
이때 신호 DC_DestRes, SU1_DestRes, RUX_DestRes, 및 RUY_DestRes는 연산을 실행한 실행 유닛으로부터 발생된다.
표 B.16 필드 StatMod
연산 디코더(510)는 관련 연산에 따라 필드 StatMod를 설정한다.
스케쥴러(280)내의 논리는 중단 동안 필드 statMod를 명확히 한다.
표 B.17 필드 StatVal 생성 논리
필드 StatVal는 초기에 제로가 된다.
StatVal = 8'bX
그리고 RegOp가 완료되는 경우에 변경된다.
if (∼S3·S1) StatVal = (Execl) ?RUX_StatRes : RUY_StatRes
표 B.18 필드 OprndMatch_XXsrcY
필드 OprndMatch_XXsrcY는 발행 단계로부터 각각의 프로세싱 파이프라인의 오퍼랜드 전송 단계로 정보를 전달하고(또는 한 경우에서 SU의 단계 1에서 단계 2로), 값들은 글로벌 신호 XXAdvY(특히 XXAdv0 또는 SUAdv2)에 의해 제어된다.
표 B.19 필드 DBN
필드 DBN는 초기에 제로가 된다.
DBN = 4'b0
그리고 실행동안 다음과 같이 변경된다.
if ((AdvLU2 + AdvSU2)·∼S3·S2)DBN[3:0] = (DBN_LU[3:0]·LU) + (DBN_SU[3:0]·SU)
표 B.20 Op Quad 필드 Emcode
표 B.21 Op Quad 필드 Eret
표 B.22 Op Quad 필드 FaultPC
Op quad에서 먼저 디코드된 x86의 논리적 PC
표 B.23 Op Quad 필드 BPTInfo
현 BPT 액세스로부터의 정보
표 B.24 Op Quad 필드 RASPtr
현재의 반송 어드레스 스택
표 B.25 Op Quad 필드 OpQV
연산 디코더(510)는 처음에 필드 pQV를 스케쥴러(280)의 상부로 로드된 Op quad가 유효한지를 나타내도록 설정한다.
이 멀티플렉서는 유일한 것이 아니다. 유사한 (그러나 3:1) 멀티플렉서로부터 나온 모든 새로운 Op quad 필드들은 ExcpAbort의 설명을 위해 OCU 설명을 참조한다.
필드 OpQV는 나중에 Op quad를 무효로 하여 실행 또는 커미트먼트를 막도록 중단 후 명확해질 수 있다.
표 B.26 Op Quad 필드 LimViol
LimViol = 'b0
필드 LimViol는 실제로 상기 다른 모든 필드들보다 한 사이클뒤에 (즉, 새로운 Op quad가 스케쥴러내에 상주하여 유효해지는 제 1 사이클동안)로드된다. 이것은 이 Op quad 필드의 상기 설명에 반영된다.
표 B.27 시프트 제어 논리
도 6을 참고로 설명한 바와 같이, 신호들 LdEntry0 내지 LdEntry5은 (새로운 Op quad를 가진) 열 0의 (열 4로부터의 Op quad를 가진)열 5로의 로딩을 제어한다. 이 표에서, OCU(260)로부터의 입력 신호 OpQRetire는 스케쥴러(280)의 최하위열내의 유효한 Op quad가 퇴거될 수 있는 때를 나타내고, 입력 신호들 HoldOpQ3, HoldOpQ4A 및 HoldOpQ4B은 조건 코드 평가가 열 3 또는 열 4에서 연산을 지연시켰는 지의를 나타낸다.
표 B.28 단일-엔트리 발행 스캔 항
단일-엔트리 항들은:
여기서 "State=Unissued"는 ∼S0이고, "Executable by xx"는 각각 실행 파이프라인 LU/SU/RUX/RUY에 대한 LU/SU/RUX/RUY와 동일하다. 여기서 사용되는 타입 비트들 LUi, SUi, RUi, RUXi는, LdOps에 대해 LU=1; (LEA와 같은 연산들을 포함하는) StOp에 대해 SU=1; 모든 RegOps에 대해 RU=1; 그리고 RUY에 의해 실행가능한 RegOps에 대해 RUY=1이다.
표 B.29 LU, SU 및 RUX 룩 어헤드 스캔 체인
6개의 단일-엔트리 신호들은 스캔 체인 XX에 대해 4개의 그룹 전파 신호들 XXPgrp[3:0] 및 그룹 킬(kill) 신호들 XXKgrp[3:0]을 형성하며, 여기서, XX는 LU, SU 또는 RUX이다. 각각의 그룹 신호는 스케쥴러(280)의 쿼드런트(quadrant)에 대응한다. 다음은 스캔 체인들중의 하나에 대해 엔트리 0 내지 5를 포함하는 제 1 쿼드런트(쿼드런트 (0))에 대한 그룹 신호들이다.
여기서, P0 내지 P5 및 K0 내지 K5는 6개의 연속 엔트리 및 파이프라인 XX에 대한 단일-엔트리 항들이다.
하나의 그룹은, 만일 그의 그룹 킬 신호 XXKgrp가 어서트되어 더 오래되지 않은 그룹들이 스캔 비트를 없애면, 선택된 명령어를 포함하고, XXIssueQuadrant[0:3]으로부터의 비트는 파이프라인 XX으로의 발행을 위해 선택된 연산을 포함하는 그룹을 식별하도록 어서트된다. 신호들 XXIssueQuadrant[0:3]은 다음과 같이 생성된다.
발해딘 연산, 만일 있다면 파이프라인 XX에 발행된 연산을 나타내기위한 신호 IssueToXX[i]는 신호 IssueQuadrant 및 단일-엔트리 킬 항 IssuableToXX으로부터 다음과 같이 생성된다.
표 B.30 RUY 스캔 체인(3비트 그룹)
단일-엔트리 P, K, O, 및 G를 결합하여, 3개 엔트리의 8개의 그룹에 대한 그룹항들 Ggrp[7:0], Pgrp[7:0], 및 Ogrp[7:0]을 산출한다. 그룹 0에 대해, 그룹항은:
여기서 x, y, 및 z는 각각 그룹 i에서 가장 오래된 엔트리, 중간 엔트리, 및 최신의 엔트리를 나타낸다. 단일 엔트리 G항은 신호 IssuableToRUX[23:0]의 비트들이고, 단일-엔트리 K 항들은 IssuableToRUY[23:0]의 비트들이다.
단계들에서 그룹항들을 결합하여, 더 큰 그룹에 대한 그룹항을 형성한다. 다음의 등식들은 그룹항들 GX, OX, PX, GY, OY 및 PY를 결합하여, 그룹 X와 그룹 Y의 연산인 그룹 XY의 그룹항을 형성하는 논리를 설명한다.
GXY = GX·PY + ∼OX·GY
PXY = PX·PY
OXY = OX + OY
상기 결합들로 부터 신호들 CinGrp[6:0] 및 OinGrp[6:0]이 출력된다. 신호 CinGrp[6:0]는 신호 G_7, G_67, G_567, G_4567, G_34567, G_234567 및 G_1234567이고, 출력 신호 OinGrp[6:0]는 신호 O_7, O_67, O_567, O_4567, O_34567, O_234567 및 O_1234567이다.
신호 IssueOpToRUY[23:0]의 한 비트는 선택된 엔트리를 식별하기 위해 어서트된다. 다음의 등식들은 신호 IssueOpToRUY를 생성하는 논리를 설명한다.
표 B.31 오퍼랜드 정보 방송
각각의 엔트리는 그 엔트리에 포함된 연산의 소스 오퍼랜드를 설명하는 신호들 Src1Info 및 Src2Info을 생성한다.
Src1Info[7:0] = {Src1BM[2:0],Src1Reg[4:0]}
Src2Info[7:0] = {Src2BM[2:0],Src2Reg[4:0]}
만일 그 연산이 발행을 위해 선택되면, 그 엔트리는 연산이 발행될 실행 유닛과 관련된 오퍼랜드 정보 버스에서 신호 Src1Info 및 Src2Info를 구동한다. 신호 OprndInfo_XXsrcY는 실행 유닛 XX에 대한 소스 오퍼랜드 Y와 관련된 오퍼랜드 정보 버스에 의해 실제로 운반된 신호이고, 다음과 같이 생성된다.
표 B.32 오퍼랜드 정보 매칭 비교
다음 등식은 일반적인 비교를 요약한다:
여기서, "XXsrcY"는 LUsrc1, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1 및 RUYsrc2 중의 하나이고, "bus"는 오퍼랜드 정보 버스(552)중의 한 버스상에 있는 신호 OprndInfo_XXsrcY를 가리킨다. 바이트 표시 체킹은 간략화 및 교환(trade-off)으로서 BM[2]을 포함하지 않는다. BM[2]=1은 (BM[1]BM[0])=0이라는 의미이고, 이에따라, 만일 busBM[2]=1이면, DestBM[2]에 관계없이 매칭이 발신된다.
표 B.33 연산 정보 방송
다음 등식은 발행된 연산을 포함하는 엔트리로부터 OpInfo 필드의 판독(readout)을 요약한다. 다음 등식에 따라, 각각의 엔트리는 LU, SU, RUX 또는 RUY 파이프라인에 대응하는 연산 정보 버스상에서 신호 OpInfo_LU, OpInfo_SU, OpInfo_RUX 또는 OpInfo_RUY를 생성할 수 있다.
발행된 연산을 포함하는 엔트리만 버스(551)상에서 신호를 구동한다.
신호 XXAdv0 들은 이들이 내부 레지스터를 제어하는 것과 동일한 방법으로 이들 외부 파이프라인 레지스터를 제어한다.
표 B.34 오퍼랜드 선택 스캔 체인
단일-엔트리항은 8개의 스캔 체인 LUsrc1, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1, 및 RUYsrc2를 위한 것이다.
4비트 그룹의 그룹항은 다음과 같이 형성된다.
대안적으로, 3비트 또는 6비트 그룹이 사용될 수 있다.
각각의 엔트리는 이 엔트리가 오퍼랜드 srcY를 실행 파이프라인 XX에 제공하는지 여부를 나타내는 신호 SupplyValueToXXsrcY를 생성하는 논리 신호를 포함한다.
XXsrcYchain.CIN 및 XXsrcYchain.K는 파이프라인 XX의 오퍼랜드 srcY에 대응하는 스캔 체인내 엔트리내의 입력 스캔 비트 신호 및 킬 항이다.
표 B.35 오퍼랜드 전송을 위한 인에이블 논리
각각의 엔트리는 전송될 8개의 오퍼랜드 신호 Oprnd_XXsrcY에 대응하는 8개의 구동기를 갖는다. 엔트리는 만일 신호 SupplyValueToXXSrcY가 오퍼랜드 선택 단계동안 어서트되면, 그 구동기들이 연산 결과값들을 공급할 수 있게 한다.
레지스터 파일(290)은 만일 스캔 체인으로부터 출력된 스캔 비트가 설정되면, 그 구동기들이 신호 Oprnd_XXsrcY를 공급할 수 있게 한다.
표 B.36 오퍼랜드 정보 신호
오퍼랜드를 제공하는 엔트리는 또한 다음과 같이 오퍼랜드 상태 신호도 제공한다.
오퍼랜드 구동기들을 위한 인에이블 신호들은 다음과 같이 오퍼랜드 상태 신호에 대한 구동기들이 인에이블되게 한다.
레지스터 파일(290)은 만일 엔트리들 중 어떠한 엔트리도 오퍼랜드 상태 버스에 대응하는 오퍼랜드를 제공하도록 선택되지 않는다면, 오퍼랜드 상태 버스(553)를 구동한다. 레지스터 파일(290)로부터의 오퍼랜드 상태 신호는 다음과 같은 형태가 된다.
레지스터 파일(290)이 오퍼랜드 상태 버스(553)를 구동할 수 있게 하는 논리가 다음과 같이 요약된다.
표 B.37 변위 전송
오퍼랜드 전송 단계 동안, 엔트리로부터의 변위 전송은 스케쥴러(280)내 그 엔트리에 의해서나 또는 앞선 엔트리에 의해서 인에이블된다. 다음은 신호 Disp_LU 및 Disp_SU가 로드 유닛(251) 및 저장 유닛(252)에 전송되는 것을 요약한다.
값 "thisOp" 및 "nextOp"는 다음의 신호 LU, S1, S0 및 LD가 나오는 물리적 엔트리를 나타낸다. 또한, 스케쥴러(280)내의 제 1/최신 엔트리의 경우, NextOp항은 제로이다.
표 B.38 즉시값 전송
구동기는 즉시값을 레지스터 유닛(253,254)에 다음과 같이 제공한다.
다음 등식은 오퍼랜드 상태 신호에 대해 개별 버스를 인에이블 하는 것을 요약한다.
표 B.39 데이터 오퍼랜드 선택 및 전송
연산 선택 단계(456) 동안, 각각의 엔트리는 그것이 실행 단계(450)내에 있는지 여부를 결정한다.
"Select for data operand fetch" = SU·∼S2·S1
데이터 오퍼랜드 방송 단계 동안, 실행 단계(450)에 있는 것으로 판단된 연산을 포함하는 엔트리는 데이터 오퍼랜드 정보 신호를 다음과 같이 생성한다.
각각의 엔트리는 데이터 오퍼랜드 정보 신호로부터, 엔트리가 데이터 오퍼랜드의 소스 레지스터에 영향을 주는 연산을 포함하는지 여부를 결정한다. 각각의 엔트리내 데이터 오퍼랜드 매칭 레지스터는 상기 엔트리가 데이터 오퍼랜드 소스에 영향을 주는지 여부를 나타내는 값 OprndMatch_SUsrcSt을 래치한다.
여기서 "bus"는 OprndInfo_SUsrcSt를 가리킨다.
오퍼랜드 선택 단계(461) 동안, 선택된 엔트리로부터 시작하는 스캔 체인은 데이터 오퍼랜드의 소스를 선택한다. 이 소스는 만일 데이터 오퍼랜드에 영향을 주는 어떠한 앞선 엔트리도 없는 경우 데이터 오퍼랜드의 소스 또는 레지스터 파일(290)에 영향을 주는 가장 새로운 앞선 엔트리이다. 스캔 체인은 단일-엔트리 스캔 항을 갖는다:
∼P = K = OprndMatch_SUsrcSt
G = SU·∼S3·S2
그룹 레벨 스캔 등식은 표 B.34에서와 같이 다른 오퍼랜드 선택 스캔 체인에대해서도 동일하고, 각각의 엔트리는 입력 스캔 비트 및 엔트리에 대한 킬 항으로부터, 그 엔트리가 선택되는지 여부를 결정한다.
데이터 오퍼랜드 전송 단계(462) 동안, 각각의 스케쥴러 엔트리내의 구동기들은 다음과 같이 인에이블된다.
만일 엔트리들의 구동기들 중 어떠한 구동기도 인에이블되지 않으면, 레지스터 파일의 출력에서의 구동기들은 다음과 같이 인에이블된다.
버스(554)를 통해 전송된 데이터 오퍼랜드 Oprnd_SUsrcSt는 저장 유닛(252)내 레지스터(1052)에서 포획된다. 데이터 오퍼랜드 전송 단계(462) 동안, 제어 논리(520)은 판독된 오퍼랜드 상태 값을 이용한다.
표 B.40 로드-저장 순서화 스캔 체인
로드-저장 순서화 스캔 체인은 각각의 엔트리의 State 및 Type 필드에 기초한 단일-엔트리 전파/킬(P/K)항을 갖는다. 3개의 LdOp 스캔 체인에 대해서, ST Type 비트가 SU비트 대신 사용된다. 이것은 논리적 어드레스만을 생성하는 LEA 연산으로부터 메모리를 실제로 참조하는 StOps를 구별한다. LUst2/LUst1/LUst0 및 SUld2/SUld1는 로드 유닛(251) 및 저장 유닛(252)에 대한 각각의 스캔 체인을 나타낸다.
스캔 체인을 위한 단일-엔트리 항은:
(4개의 그룹에 기초한) 그룹 룩 어헤드 항은:
Op quad를 위한 스캔 비트 입력 신호는:
LdStOp의 실행 단계(460)의 제 2 단계(462)동안, LdStOp를 홀드하는 엔트리로의 2/3 스캔 비트 Cin's는 24:1 멀티플렉서와 다음과 같이 결합된다.
스캔 비트 Cin는 만일 글로벌 신호가 하나이면 관련 단계는 더 오래된 연산을 포함하는 결과로 글로벌 신호로 구동될 때 변환된다.
표 B.41 스케쥴러로부터 외부 논리로의 정보
다음은 외부 사용을 위해 여러 시간에서 스케쥴러(280)로부터 판독되는 정보를 요약한다.
오퍼랜드 정보 방송 단계 동안:
오퍼랜드 전송 단계 동안:
주목: XX = {LU,SU,RUX,RUY}; Y={1,2}
표 B.42 연산 유효 비트
다음은 4개의 실행 파이프라인의 발행 단계에 대한 OpV 비트를 요약한다.
표 B.43 RegOp 범핑
글로벌 제어 논리(520)는 신호 BumpRUX/Y를 다음과 같이 생성하는 논리를 포함한다. 아래에는, 만일 그렇지 않은 경우 데드록(deadlock) 상황이 될 수 있는 것을 처리하는 항이 포함된다.
신호 InhBumpRUX는 만일 오퍼랜드 전송 단계가 RUX-only 연산이고, 발행될 RegOp 역시 RUX-only 연산인 경우 RegOp 범핑을 금지한다.
InhBumpRUX = OpInfo_RUX(RegOp). R1·OpV_RUX_Iss·OpInfo_RUX_0(RegOp).R1
신호 BumpRUX는 금지되지 않은 경우 실행 유닛(253)의 오퍼랜드 전송 단계밖에서 RegOp를 범핑하도록 어서트되고, 소스 연산중의 하나는 발생되지 않거나 또는 오퍼랜드 전송 단계내의 LdOp 또는 타임아웃 신호는 타임아웃 카운트 이상 보류되는 오퍼랜드 전송 단계내 RegOp에 응답하여 어서트된다.
제 2 레지스터 유닛(254) 밖으로 RegOp를 범프하는 신호 BumpRUY는 금지될 수 없지만, 신호 BumpRUX와 동일한 이유로 어서트된다.
표 B.44 오퍼랜드 전송 멀티플렉서 제어
다음 등식은 각각의 오퍼랜드 멀티플렉서를 위한 5개의 입력 선택 신호를 요약한다. 글로벌 제어 논리(520)는 버스(553)상에서 오퍼랜드 상태 신호를 이용하여, 오퍼랜드 버스(554) 또는 결과 버스(561 내지 564)중의 하나를 선택하여 오퍼랜드 단계를 제공한다. 대부분의 오퍼랜드에서, 오퍼랜드 버스(554)는 소스 연산이 완료된 경우 선택된다.
SelOprndBus_XXsrcY = State[3] + State[2]·Type[1]
RegOps의 제 2 오퍼랜드에 대해서, 오퍼랜드 버스는 소스 연산이 완료되거나 또는 오퍼랜드가 즉시 값인 경우 선택된다.
여기서, 신호 RUXsrc2Imm 및 RUYsrc2Imm는 src2 오퍼랜드가 즉시값임을 나타낸다.
소스 연산을 실행하는 실행 유닛(251 내지 254)중의 하나로부터의 결과 버스는 오퍼랜드 버스(554)가 선택되지 않는 경우 선택된다.
선택된 오퍼랜드는 유효하지 않을 수 있다. 관련 연산이 오퍼랜드 전송 단계(440)로 부터 실행 단계(450)로 진행하지 못하게 함으로써, 실행 유닛이 유효하지 않은 오퍼랜드를 사용하는 것이 방지된다.
표 B.45 유효하지 않은 오퍼랜드의 식별
글로벌 제어 논리(520)는 버스(553)로부터의 오퍼랜드 상태 신호를 이용하여, 실행 유닛 XX(XX={LU,SU,RUX,RUY}을 위한 오퍼랜드 srcY(Y={1,2})인지 여부를 나타내는 신호 OprndInvld_XXsrcY를 생성한다.
표 B.46 홀드 신호 논리
홀드 신호 SC_HoldXX0를 생성시켜서, 요구된 오퍼랜드들이 이용가능하지 않은 경우 연산이 실행 단계(450)로 진행하지 못하게 한다. StOp들은 제 2 실행 단계(460)까지 데이터 오퍼랜드가 요구되지 않기 때문에 데이터 오퍼랜드가 아직 이용가능하지 않더라도 실행 단계로 진행하는 것이 허용된다. 그러나, 만일 데이터 오퍼랜드가 여전히 유효하지 않다면 신호 SC_HoldSU2는 그 연산을 실행 스텡지(460)에 홀드한다.
표 B.47 상태 플래그 그룹
표준 x86 상태 플래그 비트 OF, SF, ZF, PF, CF, EZF 및 ECF는 다음과 같이 신호 STATUSV 및 필드 StatMod의 비트에 대응하는 4개의 그룹으로 분할된다.
표 B.48 상태 플래그 인출
각각의 엔트리(16 내지 23)는 4개의 플래그 그룹에 대응하고 4개의 플래그 그룹에 대한 상태 플래그 및 유효성 비트를 나타내는 신호 StatInfo_1, StatInfo_2, StatInfo_3 및 StatInfo_4를 생성한다. 신호 StatInfo_1, StatInfo_2, StatInfo_3, 및 StatInfo_4 중 임의의 하나 또는 그 이상의 신호를 이용하여, 엔트리가 해당 그룹에 대한 스캔 체인에 의해 선택되는 경우 신호 STATUS 및 STATUSV를 생성한다. 다음에서, 프리픽스 "OPj:"는 필드 또는 신호 형태 엔트리 j를 나타낸다.
구조적 상태 플래그 레지스터는 신호 FlgStatInfo_1, FlgStatInfo_2를 생성한다.
다음의 논리는 플래그 그룹을 제공하기 위해 엔트리의 위치를 설정하기 위한 룩 어헤드없는 4 스캔 체인을 나타낸다.
출력 상태 플래그 정보 신호는:
표 B.49 cc-RegOp 처리
신호 CCDepInRUX_0는 cc-dep RegOp가 레지스터 유닛 RUX의 오퍼랜드 전송 단계내에 있는지 여부를 나타내고, 오퍼랜드 전송 단계에서의 연산을 위한 연산 정보 및 유효 비트를 포함하는 파이프라인 레지스터로부터 생성된다.
CCDepInRUX_0 = (OpInfo_RUX_0(RegOp)l.Type[3:2] = 'b01)·pV_RUX_0
신호 UnexecCCDepInQ3는 실행되지 않은 cc-dep RegOp가 열 3에 있는지 여부를 나타내고, 열 3의 엔트리내 타입 및 상태 비트로부터 생성된다.
다음의 논리는 오퍼랜드 전송 단계에서 RegOp에 대해 요구된 상태 비트 그룹이 유효한지 여부를 나타내는 신호 StatV를 생성하는 것을 결정한다.
신호 StrtExecCCDep는 실행되지 않은 cc-dep RegOp가 열 3에 있는 경우의 트랙을 유지한다.
신호 UnexecCCDepInQ4는 실행되지 않은 cc-dep RegOp가 열 4에 있는 경우의 트랙을 유지한다.
신호 SC_HoldStatus는 입력에서 상기 상태 플러그값들의 사본을 레지스터 유닛 RUX의 입력에 홀드한다
신호 StatusInvid_RUX는 RegOp 실행을 홀드한다
신호 HoldOpQ3는 스케쥴러 열 3으로 부터 시프트되는 것으로 부터 Op quad를 홀드한다
RUX 유닛으로부터 신호 RUX_NoStatMod는 실행되는 연산이 상태 플래그를 수정하지 않음을 나타낸다. 사이클 지연 버전은 NoStatMod라고 불리운다.
표 B.50 BRCOND 처리
다음의 등식은 BRCOND 처리를 설명한다. 각각 중단점(breakpoint) 및 단일-스텝 트랩을 나타내는 신호인 신호 DTF 및 SSTF가 하기에서 참조된다. "다중 디코드 디스에이블(multiple decode disable)"의 신호 MDD는 임의의 시간에 하나 이상의 매크로 명령이 스케쥴러(280)로 삽입되는 것을 방지하기 위해 디버깅하는데 사용될 수 있다.
BRCOND 처리는 먼저 BRCOND가 열 4에 있는지를 결정한다. 신호 BRCONDj는 OPj가 평가되지 않은 BRCOND인지를 나타낸다.
여기서 j는 엔트리 번호이고, Type, OpInfo, 및 S3은 엔트리 j의 필드이다. 신호 BRCONDInQ4는 열 4가 BRCOND를 포함하는지를 나타낸다.
만일 BRCOND가 열 4에 있다면, 예측된 조건 코드는 BRCOND를 포함하는 엔트리의 필드 OpInfo로부터의 (SpecOp.cc)가 된다.
신호 CondCode[4:1]의 값은 다음과 같이 정의된다.(비트 CondCode[0]는 센스(sence)를 플립(flip)한다.)
신호 CondV는 BRCOND의 평가에 요구되는 상태 비트가 유효한지를 나타낸다.
신호 HoldOpQ4A는 만일 BRCOND가 열 4에 있고 평가에 필요한 조건이 유효하지 않은 경우 열 4에서 Op quad의 시프트를 금지한다.
신호 CondVal는 예측된 값 CondCode[0]이 오예측되었다는 것을 나타낸다.
여기서 신호 IP는 IP = SI_NMIP + SI_INTRP로 정의되고, 어떤 활성 h/w 인터럽트 요청이 있는지 여부를 나타낸다.
신호 SC_Resolve는 해결 조건 분기를 나타낸다.
레지스터는 quad 4에서 BRCOND의 해결을 나타내는 Signal Resolved를 저장한다.
x86 MOVS(move string:이동 스트링) 명령은 연산의 엠코드 루프내로 디코드된다. MOVS 명령이 수행되는 속도를 개선하기 위해, 루프의 바이트 카운트가 4 이하가 될 때까지 전체 32비트 전송이 수행된다. 조건 BRCOND는 MOVS에 대한 카운트의 체크에서 사용된다. 신호 TermMOVS는 만일 이동 스트링이 거의 수행된 경우 엠코드 루프를 종료한다.
BRCOND에 대한 필드 DestVal로부터의 신호 BrVecAddrssm는 만일 분기가 오예측된 경우에, 사용될 엠코드 또는 명령 벡터 어드레스를 나타낸다.
신호 SC_OldRASPtr, SC_OldBPTInfo 및 SC_RestartAddr는 명령 디코더(240)를 재시작하기 위해 전송된다. 오예측된 분기 또는 폴트에 응답하여 재시작이 발생될 수 있다. 오예측 또는 폴트 엔트리의 필드 RASPtr로부터의 신호 SC_OldRASPtr는 RASTOS 포인터의 복원하기 위한 것이다. 신호 SC_OldBPTInfo는 분기 예측표를 교정하기 위한 정확한 분기 예측표 정보를 나타낸다. 신호 SC_RestartAddr는 재시작에 따른 프로그램 카운터를 나타낸다.
신호 BrVec2Emc 및 BrVec2Dec는 엠코더 또는 MacDec(252)으로부터의 BRCOND의 경우에서 오예측된 BRCOND 때문에 재시작이 요구된다는 것을 나타낸다.
레지스터는 오예측을 저장한다:
만일 BRCOND가 정확히 예측되었다면, BRCOND는 다음과 같이 완료된 것으로 표시된다.
성공적으로 해결되는 BRCOND는 시프트할 수 없음으로해서 열 4가 시프트 다운되는 것을 막는 열 5 때문에, 한 사이클 이상 동안 열 4에 놓인다. 이 시간동안, 신호 SC_Resolve가 어서트되고, 버스(558)상의 신호 BrVec2XX중의 하나가 전체 시간(5 사이클 동안)동안 어서트된 채 있게된다. 명령 디코더(240)는 신호 BrVec2XX가 디어서트될 때까지 각 사이클을 재시작을 계속한다. 벡터 어드레스와 같은 다른 모든 관련 신호들은 이 시간을 통해 적절한 값을 유지한다.
표 B.51 중단 불가 RegOp 처리
신호 NonAbInRUX_0는 중단 불가 RegOp가 RUX 오퍼랜드 전송 단계에 있음을 나타내도록 어서트된다.
신호 UnexecNonAbInQ4는 중단 불가 RegOp가 스케쥴러(280)의 열 4에 있음을 나타내고, 필드 즉, Type, OpInfo 및 엔트리(16 내지19)의 State로부터 생성된다.
신호 NonAbSync는, 만일 중단 불가 RegOp가 RUX 오퍼랜드 전송 단계에 있고 열 4에 있지않거나 또는 앞선 BRCOND가 오예측되었거나 트랩이 지연되는 경우, RUX 오퍼랜드 전송 단계의 진행을 보류하기 위해 사용된다.
중단 불가 RegOp는 그것이 RUX 실행 단계로 진행할 때까지 열 4로 부터 시프트되는 것이 방지된다.
HoldOpQ4B = UnexecNonAbInQ4
표 B.52 자체 수정 코드 처리 논리
자체 수정 코드 처리 논리는 코드가 수정된 가능성을 제거하기위해 다음과 같이 비교를 행한다.
표 B.53 레지스터 파일로의 커미트먼트
다음의 등식은 Op quad의 각각의 연산에 대한 레지스터 파일 기입 인에이블 DestBM 필드 및 신호OprndMatch_XXsrcY 수정을 요약한다. 커미트되도록 선택된 연산 결과는 신호 RegCmtSel에 의해 열 4 또는 열 5부터 나온다.
신호 CmtInh는, 만일 열 5에서의 연산에 대해 제한 위반이 발생하거나 또는 트랩이 보류중인 경우, 커미트먼트를 금지한다. 신호RegCmtInh는 레지스터 커미트먼트를 금지한다.
신호 WrEnbli는, 만일 커미트되는 Op quad에 제한 위반이 없고 열 내의 오래된 연산이 보다 더 오래되고 따라서 커미트되는 경우, 레지스터 파일(290)로의 커미트먼트를 인에이블 한다.
바이트 표시 DestBM는 결과가 레지스터 파일(290)로 커미트되는 사이클에서 명확하다.
신호 OprndMatch_XXsrcY가 효과적으로 표시되어, 레지스터 파일(290)은 오퍼랜드를 제공한다.
표 B.54 상태 플래그 커미트먼트
다음의 등식은 상태 그룹에 대한 누적된 결과 생성 또는 선택 처리를 요약한다. 유사한 처리들이 각 상태 그룹에 대해 개별적으로 적용된다.
표 B.55 StOp 커미트먼트
신호 StCmtSel는 엔트리들(23 내지 16)중에 어느 것이 커미트먼트를 위해 선택된 StOp를 포함하는 지를 나타낸다. 커미트되지 않은 StOp를 포함하는 가장 오래된 엔트리가 선택된다.
StCmtSel은 만일 모든 엔트리들(23 내지 16)이 선택되는 경우, b0000 내지 b0111와 동일하다. StCmtSel은 만일 아무런 엔트리도 선택되지 않는 경우, b1111와 동일하다.
신호 CmtMask는 스케쥴러(280)의 마지막 2개 열내의 8개 엔트리에 대응하는 8비트를 갖는다. 선택된 엔트리까지에서 가장 오래된 엔트리에 대응하는 비트는 제로이고, 나머지 비트는 1이다.
신호 CmtCiaCda는 선택된 StOp가 CIA 또는 CDA 명령임을 나타낸다.
신호 StCmtInh는 만일 모든 커미트먼트가 금지되는 경우 StOp의 커미트먼트를 금지한다.
신호 StCmtV 와 Q5StCmtV는 각각 열 5내의 StOp 와 StOp가 이 사이클을 커미트할 준비가 되어있는지를 나타낸다. 만일 아무런 StOp도 선택되지 않거나, StOp 커미트먼트가 금지되거나, 선택된 StOp가 완료되지 않았거나, 또는 오래된StOp가 완료되지 않은 경우, StOp의 커미트먼트는 없다.
신호 StAdv는 StOp가 저장 커미트먼트 파이프라인 단계(2)로 진행할 수 있는지를 나타낸다.
신호 StRetire 및 Q5StRetire는 열-5 StOp중 어떤 것이 이 사이클을 커미트하는지를 나타낸다.
신호 NewUncmtStOp는 커미트되지도 않았고 커미트되고 있지도 않은 최하위 2열에서 모든 StOp를 식별한다.
만일 StOp가 커미트되는 경우, UncmtStOp 비트는 다음과 같이 갱신된다.
신호 Al1StCmt는 열 5의 모든 메모리 기입 StOp가 커미트되었거나 또는 성공적으로 커미트되고 있는지를 나타낸다.
신호 SC_HoldSC1는 OCU(260)가 저장 커미트먼트가 단계(2)로 진행할 준비가 되어있음을 확신하는지를 나타낸다.
SC_HoldSC1 = ∼StCmtV + CmtCiaCda
저장 유닛(252)은 제 2 실행 단계에서 스트라이크(strike)된 StOp에 대한 폴트를 표시하는 신호 SUViol를 생성한다. 만일 선택된 StOp가 제 2 단계에 스트라이크되어 폴트를 야기한 경우 생성될 것이다.
표 B.56 Op quad 퇴거
다음의 등식은 OCU의 Op quad 퇴거 제어 논리를 요약한다.
OpQRetire = OP20:S3·OP21:S3·OP22:S3·OP23:S3·AllStCmt
신호 OpQRetire는 동일한 Op quad에 대한 다중 사이클동안 어서트될 수 있다. 이것은 최하위 Op quad의 시프트가 일시적으로 금지되는 경우에 발생한다.
Op quad가 퇴거 또는 중단되는 경우, 누적된 상태 플래그들이 커미트된다.
표 B.57 LdOp 중단
OCU(260)는 만일 LdOp를 완료하지 못하고 더 오래된 모든 연산이 완료 및 커미트된 경우 열 5에서 LdOp에 대한 중단 신호 LdAbort를 발생한다.
표 B.58 FAULT OP 중단
다음의 등식은 OCU의 FAULT 연산 처리 논리를 요약한다.
표 B.59 LDDHA/LDAHA 처리 논리
OCU는 DestVal을 적절한 디폴트 처리기 어드레스 레지스터로 로드하므로써, 그들이 엔트리(23)에 도달하는 경우 LDDHA 및LDAHA 연산을 처리한다.
신호 EffAltFltVecAddr는 LDAHA 연산과 동일한 Op quad내에 Op상에서의 폴트들에 대한 새로운 대체 처리기 어드레스를 제공한다.
처리기 어드레스들간의 변화 및 스위칭은 주변 연산들상의 폴트들의 인식과 동시에 일어나게 된다.
OPQ는 Op quad 필드를 나타낸다.
표 B.60 분기 타겟 제한 위반 처리
만일 분기 타겟 제한 위반을 갖는 것으로 태그된 유효 Op quad가 열 5에 도달하는 경우, OCU(260)는 중단 신호 LimAbort를 발생한다.
LimAbort = OPQ5:(OpQV·LimViol)
표 B.61 오예측된 BRCOND에 대한 중단
OCU(260)는 열 5에서 완료되지 않은 BRCOND를 앞선 모든 연산이 완료된 때, 오예측된 BRCOND에 대한 중단 신호 BrAbort를 생성한다.
다음 연산의 커미트먼트는 완료되지 않은 BRCOND의 State(즉, ∼S3)에 의해 금지된다. 또한, FltAbort가 어서트되는 경우 BrAbort가 어서트되지만, 이것은 해롭지 않다.
표 B.62 중단 사이클 논리
신호 ExcpAbort는 어떠한 중단 조건이 재시작을 위해 벡터 어드레스를 요구할때 중단을 나타낸다.
ExcpAbort = LdAbort + StAbort + FltAbort + TrapAbort + SCReset
신호 SC_EAbort 또한 오예측된 BRCOND에서의 중단을 포함한다.
SC_EAbort = ExcpAbort + BrAbort
이 중단은 클럭 에지에서 신호 SC_Abort에 의해 초기화된다.
@clk:SC_Abort = SC_EAbort
상기 중단의 다른 원인들에 대해 요구되는 정보는 다음과 같이 제공된다.
엠코드 벡터 어드레스 선택:

Claims (29)

  1. 복수의 실행 유닛(251 내지 257)과 상기 실행 유닛과 연결된 스케쥴러(280)로 이루어지고,
    상기 스케쥴러(280)가 자신과 관련된 연산을 설명하는 정보의 저장을 위한 메모리 필드를 포함하는 복수의 엔트리;
    실행을 위한 실행 유닛에 발행을 위한 연산들을 선택하도록 상기 엔트리들을 스캔하는 논리(530);
    상기 발생된 연산의 실행을 위해 상기 실행 유닛에 정보를 제공하는 논리(532,554); 및
    이미 발행된 연산과 관련된 엔트리들내에, 이미 발행된 연산들의 실행으로부터의 결과를 저장하는 논리(540)를 포함하는 프로세싱 시스템(250)에 있어서,
    상기 스케쥴러(280)내의 상기 엔트리들은 최상위열에서 시작하여 최하위열에서 끝나는 열의 시퀀스(ROW 0 내지 ROW 5)로 그룹화되어 있고, 각각의 열은 복수의 엔트리를 포함하며, 최하위열을 제외한 각각의 열의 엔트리들의 메모리 필드들은 상기 시퀀스의 다음 열 내의 엔트리들의 메모리 필드들과 연결되며,
    상기 스케쥴러(280)는 최하위열을 제외한 각각의 열에 대한 제어 신호를 생성하는 글로벌 제어 논리(520)를 더 구비하며,
    각각의 제어 신호는 열의 메모리 필드들에 저장된 정보가 상기 시퀀스의 다음 열 내의 메모리 필드로 시프트하는지를 제어하는 것을 특징으로 하는 프로세싱 시스템.
  2. 제 1 항에 있어서,
    상기 실행 유닛으로의 발행을 위한 연산들을 선택하기 위해 상기 엔트리들을 스캔하는 논리(530)는 오퍼랜드 종속성을 고려하지 않는 것을 특징으로 하는 프로세싱 시스템.
  3. 제 1 항 또는 제 2 항에 있어서,
    스케쥴러(280)에 연결된 연산 커미트 유닛(260)을 더 구비하고,
    상기 연산 커미트 유닛(260)은 새로운 연산들이 스케쥴러내 엔트리들과 관련될 수 있도록 상기 스케쥴러에서 연산들을 퇴거 및 제거하며,
    상기 연산 커미트 유닛(260)은 만일 엔트리에 저장된 결과가 프로세싱 시스템(250)에 의해 실행되는 프로그램에 요구되는 경우, 그 결과가 영구적으로 되게 하는 것을 특징으로 하는 프로세싱 시스템.
  4. 제 3 항에 있어서,
    레지스터 파일(290)을 더 구비하고,
    상기 연산 커미트 유닛(260)은 상기 스케쥴러내 엔트리로부터의 결과를 레지스터 파일로 전송하므로써, 결과가 영구적으로 되게 하는 것을 특징으로 하는 프로세싱 시스템.
  5. 제 4 항에 있어서,
    상태 레지스터를 더 구비하고,
    상기 연산 수행 유닛(260)은 엔트리로부터의 결과에 의해 표시된 상태 플래그 값을 상기 상태 플래그 레지스터로 전송하므로써, 결과가 영구적으로 되게 하는 것을 특징으로 하는 프로세싱 시스템.
  6. 제 1 항에 있어서,
    상기 글로벌 제어 논리(520)는 상기 연산 커미트 유닛이 스케쥴러의 최하위 열내의 엔트리와 관련된 모든 연산을 퇴거하는 것에 응답하여 상기 스케쥴러의 열의 정보를 상기 스케쥴러의 최하위열로 시프트하게 하는 신호를 생성하는 것을 특징으로 하는 프로세싱 시스템.
  7. 제 1 항에 있어서,
    상기 프로세싱 시스템에 의해 실행될 프로그램을 구성하는 명령으로부터 연산 세트를 생성하는 명령 디코더(240)를 더 구비하고,
    상기 명령 디코더(240)는 상기 연산 세트와 관련된 정보를 상기 스케쥴러(280)의 최상위열의 엔트리에 로드하도록 연결되는 것을 특징으로 하는 프로세싱 시스템.
  8. 제 7 항에 있어서,
    상기 글로벌 제어 논리(520)는 상기 스케쥴러의 최상위열에 최종 로드된 정보가 시프트하지 않거나 상기 스케쥴러의 다음 열 내로 현재 시프트하고 있지 않는한, 상기 스케쥴러의 최상위열에 연산 세트를 로드하는 것을 금지하는 신호를 상기 명령 디코더(240)에 발생하는 것을 특징으로 하는 프로세싱 시스템.
  9. 제 7 항 또는 제 8 항에 있어서,
    상기 명령 디코더(240)가 실행될 프로그램에서 조건 분기 명령(BRCOND)을 만나는 경우, 명령 디코더(240)는:
    상기 조건 분기 명령을 따를 예측 명령 어드레스를 결정하고;
    상기 예측 명령 어드레스로부터 디코딩을 계속하고; 그리고
    실행시 상기 예측이 정확했는지를 평가하는 연산과 관련된 정보를 상기 스케쥴러의 최상위열의 엔트리에 로드하는 것을 특징으로 하는 프로세싱 시스템.
  10. 제 9 항에 있어서,
    만일 상기 예측이 정확하지 않은 경우, 조건 분기 명령(BRCOND)이 스케쥴러의 최하위열에 도달할 때까지 상기 스케쥴러(280)에 연산을 로드하는 것이 금지되고,
    상기 조건 분기 명령이 상기 스케쥴러의 최하위열에 있을 경우, 상기 스케쥴러내 모든 연산은 유효하지 않게 되는 것을 특징으로 하는 프로세싱 시스템.
  11. 제 1 항에 있어서,
    상기 스케쥴러(280)는
    상태 레지스터 및 상태 플래그 논리(538)를 더 구비하며,
    상기 상태 플래그 논리(538)는 상기 상태 레지스터에 저장된 값 및 상기 스케줄러의 필드에 저장된 결과들로부터 상태 플래그 비트(STATUS)를 생성하고, 스케쥴러의 필드에 저장되도록 하며, 상태 플래그 비트가 상태 플래그 논리와 관련되는스케쥴러의 선택된 행의 경계에서 연산에 유효한지 여부를 나타내는 유효성 비트(STATUSV)를 생성하는 상태 플래그 논리(538)를 추가로 포함하는 것을 특징으로 하는 프로세싱 시스템.
  12. 제 11 항에 있어서,
    제 1 연산의 특수 실행 단계의 완료를 위해 상태 플래그 비트(STATUS)를 요구하는 제 1 연산에서,
    상기 상태 플래그 논리(538)는 상기 제 1 연산과 관련된 정보가 상기 상태 플래그 논리(538)와 관련된 선택된 열의 경계로 시프트할 때까지 상기 제 1 연산이상기 실행 스테이지로 들어가는 것을 방지하는 신호를 생성하는 것을 특징으로 하는 프로세싱 시스템.
  13. 제 12 항에 있어서,
    상기 글로벌 제어 논리(520)는 상기 제 1 연산이 상기 선택된 열의 경계에 도달한 후, 상기 연산에 유효한 상기 상태 플래그 비크가 상기 상태 비트를 요구하는 상기 실행 스테이지에 제공될 때까지 상기 경계로부터 떨어져 상기 제 1 연산으로 시프트하는 것을 금지하는 신호를 생성하는 것을 특징으로 하는 프로세싱 시스템.
  14. 제 12 항 또는 제 13 항에 있어서,
    상기 상태 플래그 논리(538)는 제 1 연산 타입이 선택된 경계 위의 열에 있는 경우 상기 제 1 연산 타입의 실행을 위해 상기 상태 플래그 비트를 동시에 제공할 수 있고, 그리고 제 2 연산 타입이 상기 선택된 경계 아래의 열에 있는 경우 상기 제 2 연산 타입의 실행을 위해 상태 플래그 비트를 동시에 제공할 수 있는 것을특징으로 하는 프로세싱 시스템.
  15. 제 14 항에 있어서,
    상기 제 2 연산 타입은 조건 분기 평가인 것을 특징으로 하는 프로세싱 시스템.
  16. 제 1 항에 있어서,
    상기 프로세싱 시스템은 단일 칩 프로세서의 일부분을 구성하는 것을 특징으로 하는 프로세싱 시스템.
  17. 제 1 항에 있어서,
    데이터 및 명령을 저장하는 메모리 서브시스템(120)을 더 구비하는 것을 특징으로 하는 프로세싱 시스템.
  18. 제 17 항에 있어서,
    상기 프로세싱 시스템은 컴퓨터 머더보드(101)의 구성요소중의 일부분을 구성하는 것을 특징으로 하는 프로세싱 시스템.
  19. 제 18 항에 있어서,
    상기 머더보드(101)는 프로세서(200)와 동작가능하게 연결된 백플레인 버스를 더 구비하고,
    상기 프로세싱 시스템은 상기 백플레인 버스를 통해 상기 머더보드와 연결된 카드상에 하나 또는 그 이상의 장치를 더 구비하는 것을 특징으로 하는 프로세싱 시스템.
  20. 제 1 항에 있어서,
    상기 프로세싱 시스템은 네트워크 서버의 일부분을 구성하는 것을 특징으로 하는 프로세싱 시스템.
  21. 제 1 항에 있어서,
    상기 프로세싱 시스템은 멀티미디어 컴퓨터 시스템의 일부분을 구성하고,
    상기 멀티미디어 컴퓨터 시스템은
    멀티미디어 성능 장치(256);
    상기 멀티미디어 성능 장치와 연결되고, 멀티미디어 신호 포착 장치(196)와 연결되며, 멀티미디어 신호들을 합성하고 샘플링하기 위한 신호 변환 인터페이스를 포함하는 멀티미디어 어댑터(195); 및
    상기 멀티미디어 어댑터와 연결되어, 멀티미디어 데이터의 전송을 통신하는 입출력 버스(151)를 더 포함하고,
    상기 프로세싱 시스템은 상기 입출력 버스와 연결되어, 멀티미디어 데이터를 프로세싱하고 상기 프로세싱 시스템과 상기 멀티미디어 어댑터사이에서의 멀티미디어 데이터의 통신을 제어하는 것을 특징으로 하는 프로세싱 시스템.
  22. 제 1 항에 있어서,
    상기 연산들의 프로그램 순서를 상기 엔트리의 물리적 순서와 매칭시키고,
    발행을 위한 연산을 선택하기 위해 상기 엔트리들을 스캔하는 상기 논리(530)가 제 1 실행 유닛에 의해 실행될 연산의 물리적 순서에 따라 상기 복수의 엔트리를 스캔하는 제 1 발행 선택 회로(800); 및
    제 2 실행 유닛에 의해 실행될 연산의 물리적 순서에 따라 상기 복수의 엔트리들을 서치하는 제 2 발행 선택 회로(800,900)를 구비하는 것을 특징으로 하는 프로세싱 시스템.
  23. 제 22 항에 있어서,
    상기 제 1 실행 유닛은 상기 제 2 실행 유닛이 실행하도록 되지 않은 연산을 실행할 수 있는 것을 특징으로 하는 프로세싱 시스템.
  24. 프로그램에서 디코드된 순서를 벗어난 연산 실행 방법에 있어서,
    만일 스케쥴러(280)의 최상위열(ROW 0)이 비었거나 또는 다음 하위 열로 시프트하는 경우, 상기 스케쥴러의 최상위열내의 엔트리들에 연산 세트를 로드하는 단계;
    만일 다음 하위 열이 비었거나 또는 다음 하위 열내의 연산들이 시프트하는 경우, 상기 스케쥴러의 각각의 열의 연산들을 다음 하위 열로 시프트하는 단계;
    실행 유닛에 발행을 위한 연산을 선택하기 위해 최하위열(ROW 5)에서 최상위열(ROW 0)의 방향으로 스케쥴러를 스캔하는 단계;
    상기 연산에 대응하는 상기 스케쥴러의 엔트리들내 연산들의 실행으로부터의 결과를 일시적으로 저장하는 단계;
    스케쥴러의 최하위열(ROW 5)로부터의 결과를 레지스터 파일(290)에 커미트하는 단계; 및
    만일 현재 최하위열(ROW 5)내 정보와 관련된 모든 연산의 실행으로부터의 결과가 커미트되었거나 또는 요구되지 않은 경우 최하위열로 정보를 시프트하는 단계를 포함하는 것을 특징으로 하는 방법.
  25. 제 24 항에 있어서,
    중단 연산을 선행한 임의의 연산을 커미트하는 단계; 및
    상기 중단 연산이 스케쥴러의 최하위열에 도달하는 경우 스케쥴러내 모든 연산을 중단하는 단계를 더 포함하고,
    상기 연산을 중단하는 단계는 연산의 커미트먼트가 요구되지 않음을 표시하도록 상기 연산을 설정하는 것을 특징으로 하는 방법.
  26. 제 24 항 또는 제 25 항에 있어서,
    제 1 실행 유닛으로 발생된 제 1 연산을 선행한 어떤 연산을 커미트하는 단계;
    제 1 연산이 최하위열에 있는 동안, 제 1 실행 유닛이 제 1 연산의 실행을 완료했는지 여부를 결정하는 단계; 및
    최하위열에 있는 경우 완료되지 않은 제 1 연산에 응답하여 스케쥴러내 모든 연산을 중단하며 상기 제 1 실행 유닛은 예외를 발신하는 단계를 더 포함하고,
    상기 연산을 중단하는 단계는 연산의 커미트먼트가 요구되지 않음을 표시하는 상태로 연산을 설정하는 것을 특징으로 하는 방법.
  27. 제 24 항에 있어서,
    명령 디코더가 조건 분기 연산을 오예측했는지 여부를 결정하기 위해 조건 분기 연산을 평가하는 단계. 이 단계는 조건 분기 연산이 스케쥴러의 최상위열과 최하위열 사이의 열에 있을때 발생하며;
    조건 분기 연산이 오예측되었음을 결정할 때 명령 디코더를 재시작하는 단계;
    조건 분기가 최하위열에 도달할 때까지 스케쥴러에 연산을 로드하는 것을 금지하는 단계;
    조건 분기를 선행한 어떠한 연산을 커미트하는 단계; 및
    조건 분기가 스케쥴러의 최하위열에 있는 경우 스케쥴러내 모든 연산을 중단하는 단계를 더 포함하고,
    상기 연산을 중단하는 단계는 연산의 커미트먼트가 요구되지 않음을 나타내는 상태로 연산을 설정하는 것을 특징으로 하는 방법.
  28. 제 1 항에 있어서,
    복수의 엔트리 각각은 저장 요소(623) 및 저장 요소와 연결된 선택 회로(633)를 포함하고, 상기 선택 회로는 상기 저장 요소로부터의 정보 또는 복수의 엔트리 외부로부터의 정보가 시퀀스의 다음 열로 시프트하는지를 선택하는 것을 특징으로 하는 프로세싱 시스템.
  29. 제 24 항에 있어서,
    스케쥴러의 제 1 열에 정보를 기입하는 단계를 더 포함하고,
    상기 기입 단계는 각각의 열에서 연산을 시프트하는 단계와 동시적이며, 만일 제 1 열내 연산이 제 2 열로 시프트하는 경우 제 1 열에 기입되는 정보는 제 2 열로 시프트하는 것을 특징으로 하는 방법.
KR10-1998-0702572A 1995-10-06 1996-10-04 수퍼스칼라프로세서에서의순서를벗어난실행을위한통합된다중기능연산스케쥴러 KR100459152B1 (ko)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US506995P 1995-10-06 1995-10-06
US60/005069 1995-10-06
US502195P 1995-10-10 1995-10-10
US60/005,021 1995-10-10
US59038396A 1996-01-26 1996-01-26
US590,383 1996-01-26
US649,243 1996-05-16
US08/649,243 US5884059A (en) 1996-01-26 1996-05-16 Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
PCT/US1996/015743 WO1997013201A1 (en) 1995-10-06 1996-10-04 Unified multi-function operation scheduler for out-of-order execution in a superscalar processor

Publications (2)

Publication Number Publication Date
KR19990064093A KR19990064093A (ko) 1999-07-26
KR100459152B1 true KR100459152B1 (ko) 2005-06-23

Family

ID=65985787

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-1998-0702572A KR100459152B1 (ko) 1995-10-06 1996-10-04 수퍼스칼라프로세서에서의순서를벗어난실행을위한통합된다중기능연산스케쥴러

Country Status (1)

Country Link
KR (1) KR100459152B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190141079A (ko) * 2018-06-13 2019-12-23 삼성전자주식회사 바인딩되지 않은 쉐이더 프로그램을 런타임 특정 그래픽 파이프라인 설정과 객체에 바인딩하기 위한 효과적인 인터페이스 및 전송 메커니즘

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190141079A (ko) * 2018-06-13 2019-12-23 삼성전자주식회사 바인딩되지 않은 쉐이더 프로그램을 런타임 특정 그래픽 파이프라인 설정과 객체에 바인딩하기 위한 효과적인 인터페이스 및 전송 메커니즘
KR102657281B1 (ko) * 2018-06-13 2024-04-15 삼성전자주식회사 바인딩되지 않은 쉐이더 프로그램을 런타임 특정 그래픽 파이프라인 설정과 객체에 바인딩하기 위한 효과적인 인터페이스 및 전송 메커니즘

Also Published As

Publication number Publication date
KR19990064093A (ko) 1999-07-26

Similar Documents

Publication Publication Date Title
EP0870228B1 (en) Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5884059A (en) Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5799165A (en) Out-of-order processing that removes an issued operation from an execution pipeline upon determining that the operation would cause a lengthy pipeline delay
US5632023A (en) Superscalar microprocessor including flag operand renaming and forwarding apparatus
US5881261A (en) Processing system that rapidly indentifies first or second operations of selected types for execution
US5913049A (en) Multi-stream complex instruction set microprocessor
US5867683A (en) Method of operating a high performance superscalar microprocessor including a common reorder buffer and common register file for both integer and floating point operations
US5682492A (en) Computer processor with distributed pipeline control that allows functional units to complete operations out of order while maintaining precise interrupts
US7877586B2 (en) Branch target address cache selectively applying a delayed hit
JP2009048633A (ja) 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法
US10942743B2 (en) Splitting load hit store table for out-of-order processor
US8683261B2 (en) Out of order millicode control operation
US7865705B2 (en) Branch target address cache including address type tag bit
WO1990010267A1 (en) Distributed pipeline control for a computer
KR100459152B1 (ko) 수퍼스칼라프로세서에서의순서를벗어난실행을위한통합된다중기능연산스케쥴러
US6175909B1 (en) Forwarding instruction byte blocks to parallel scanning units using instruction cache associated table storing scan block boundary information for faster alignment
EP0853786B1 (en) Out-of-order processing with operation bumping to reduce pipeline delay
EP0853787B1 (en) Scan chain for rapidly identifying first or second objects of selected types in a sequential list
KR100384213B1 (ko) 순차리스트내의선택된타입의제1또는제2대상을인식하는처리시스템,선택회로및방법
US20240354111A1 (en) Re-use of Speculative Control Transfer Instruction Results from Wrong Path
US20240354109A1 (en) Re-use of Speculative Load Instruction Results from Wrong Path
WO2024220255A1 (en) Re-use of speculative load instruction results from wrong path

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: 20101029

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee