KR100425805B1 - 고성능투기적실행프로세서를위한구조및방법 - Google Patents

고성능투기적실행프로세서를위한구조및방법 Download PDF

Info

Publication number
KR100425805B1
KR100425805B1 KR1019970705598A KR19970705598A KR100425805B1 KR 100425805 B1 KR100425805 B1 KR 100425805B1 KR 1019970705598 A KR1019970705598 A KR 1019970705598A KR 19970705598 A KR19970705598 A KR 19970705598A KR 100425805 B1 KR100425805 B1 KR 100425805B1
Authority
KR
South Korea
Prior art keywords
instruction
command
execution
issued
instructions
Prior art date
Application number
KR1019970705598A
Other languages
English (en)
Other versions
KR19980702203A (ko
Inventor
더블유. 센 진
스제토 존
에이. 패트카 니틴
씨. 쉬바나우 마이클
히데키 오소네
에이. 시몬느 마이클
다쿠미 마루야마
Original Assignee
후지쯔 가부시끼가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 후지쯔 가부시끼가이샤 filed Critical 후지쯔 가부시끼가이샤
Publication of KR19980702203A publication Critical patent/KR19980702203A/ko
Application granted granted Critical
Publication of KR100425805B1 publication Critical patent/KR100425805B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1405Saving, restoring, recovering or retrying at machine instruction level
    • G06F11/1407Checkpointing the instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Retry When Errors Occur (AREA)

Description

고성능 투기적 실행 프로세서를 위한 구조 및 방법{STRUCTURE AND METHOD FOR HIGH-PERFORMANCE SPECULATIVE EXECUTION PROCESSOR PROVIDING SPECIAL FEATURES}
관련 출원
본 출원은 1995년 3월 3일에, 발명자 Gene W. Shen 등에 의해 "PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE"이란 명칭으로 출원된, 미국 특허 출원 대리인 번호 제A-60625-1/JAS호, 미국 특허 출원 제08/398,299호의 연속 출원이며; 상기 미국 특허 출원 제08/398,299호는 1995년 2월 14일에 발명자 Gene W. Shen 등에 의해 "PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE"이란 명칭으로 출원된, 미국 특허 출원 대리인 번호 제A-60625/JAS호인 미국 특허 출원 제08/390,885호의 연속 출원이다.
1995년 2월 14일에, 발명자 Takeshi Kitahara에 의해 "INSTRUCTION FLOW CONTROL CIRCUIT FOR SUPERSCALER MICROPROCESSOR"이란 명칭으로 출원된, 미국 특허 출원 대리인 번호 제1706호인 미국 특허 출원 제08/388,602호; 1995년 2월 14일에, 발명자 Michael Simone 및 Michael Shebanow에 의해 "ADDRESSING METHOD FOR EXECUTING LOAD INSTRUCTIONS OUT OF ORDER WITH RESPECT TO STORE INSTRUCTIONS"이란 명칭으로 출원된, 미국 특허 출원 대리인 번호 제1693호인 미국 특허 출원제08/388,389호; 1995년 2월 14일에, 발명자 DeForest Tovey, Michael Shebanow 및 John Gmuender에 의해 "METHOD AND APPARATUS FOR EFFICIENTLY WRITING RESULTS TO RENAMED REGISTERS"이란 명칭으로 출원된, 미국 특허 출원 대리인 번호 제1707호인 미국 특허 출원 제08/388,606호; 및 1995년 2월 14일에, 발명자 DeForest Tovey, Michael Shebanow 및 John Gmuender에 의해 "METHOD AND APPARATUS FOR COORDINATING THE USE OF PHYSICAL REGISTERS IN A MICROPROCESSOR"이란 명칭으로 출원된, 미국 특허 출원 대리인 번호 제1741호인 미국 특허 출원 제388,364호는 그 전체가 참조로 본 명세서에 각각 통합된다.
1995년 2월 14일에, 발명자 Gene W. Shen, John Szeto, Niteen A. Patkar 및 Michael C. Shebanow에 의해 "PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE"이란 명칭으로 출원된 미국 특허 출원 제08/390,885호; 1995년 3월 3일에, 발명자 Gene W. Shen, John Szeto, Niteen A. Patkar 및 Michael C. Shebanow에 의해 "PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE"이란 명칭으로 출원된 미국 특허 출원 제08/398,299호; 1995년 3월 3일에, 발명자 Chih-Wei David Chang, Kioumars Caeallu, Joel F. Boney, Ming-Ying Li, 및 Jen-Hong Charles Chen에 의해 "PARALLEL ACCESS MICRO-TLB TO SPEED UP ADDRESS TRANSLATION"이란 명칭으로 출원된 미국 특허 출원 제08/397,810호; 1995년 3월 3일에, 발명자 Leon Kuo-Liang Peng, Yolin Lih 및 Chih-Wei David Chang에 의해 "LOOKASIDE BUFFER FOR ADDRESS TRANSLATION IN A COMPUTER SYSTEM"이란 명칭으로출원된 미국 특허 출원 제08,397,809호; 1995년 3월 3일에, 발명자 Michael C. Shebanow, Gene W. Shen, Ravi Swami 및 Niteen Patkar에 의해 "RECLAMATION OF PROCESSOR RESOURCES IN A DATA PROCESSOR"이란 명칭으로 출원된 미국 특허 출원 제08/397,893호; 1995년 3월 3일에, 발명자 Michael C. Shebanow, John Gmuender, Michael A. Simone, John R.F.S. Szeto, Takumi Maruyama 및 DeForest W. Tovey에 의해 "METHOD AND APPARATUS FOR SELECTING INSTRUCTIONS FORM ONES READY TO EXECUTE"이란 명칭으로 출원된 미국 특허 출원 제08/397,891호; 1995년 3월 3일에, 발명자 Shalesh Thusoo, Farnad Sajjadian, Jaspal Kohli 및 Niteen Patkar에 의해 "HARDWARE SUPPORT FOR FAST SOFTWARE EMULATION OF UNIMPLEMENTED INSTRUCTIONS"이란 명칭으로 출원된 미국 특허 출원 제08/397,911호; 1995년 3월 3일에, 발명자 Akiro Katsuno, Sunil Savkar 및 Michael C. Shebanow에 의해 "METHOD AND APPARATUS FOR ACCELERATING CONTROL TRANSFER RETURNS"이란 명칭으로 출원된 미국 특허 출원 제08/398,284호; 1995년 3월 3일에, 발명자 Akira Katsuno, Niteen A. Patkar, Sunil Savkar 및 Michael C. Shebanow에 의해 "METHODS FOR UPDATING FETCH PROGRAM COUNTER"이란 명칭으로 출원된 미국 특허 출원 제08/398,066호; 1995년 3월 3일에, 발명자 Sunil Savkar에 의해 "METHOD AND APPARATUS FOR RAPID RAPID EXECUTION OF CONTROL TRANSFER INSTRUCTIONS"이란 명칭으로 출원된 미국 특허 출원 제08/398,151호; 1995년 3월 3일에, 발명자 Chih-Wei David Chang, Joel Fredrick Boney 및 Jaspal Kohli에 의해 "METHOD AND APPARATUS FOR PRIORITIZING AND HANDLING ERRORS IN A COMPUTER SYSTEM"이란 명칭으로 출원된 미국 특허 출원제08/397,910호; 1995년 3월 3일에, 발명자 Michael Simone에 의해 "METHOD AND APPARATUS FOR GENERATING A ZERO BIT STATUS FLAG IN A MICROPROCESSOR"이란 명칭으로 출원된 미국 특허 출원 제08/397,800호; 및 1995년 3월 3일에, 발명자 Chien Chen 및 Yizhi Lu에 의해 "ECC PROTECTED MEMORY ORGANIZATION WITH PIPELINED READ-MODIFY-WRITE ACCESS"이란 명칭으로 출원된 미국 특허 출원 제08.397,912호는 참조에 의해 그 전체가 본 명세서에 각각 통합된다.
1995년 6월 1일에 발명자 Sunil Savkar, Michael C. Shebanow, Gene W. Shen 및 Farnad Sajjadian에 의해 "METHOD AND APPARATUS FOR ROTATING ACTIVE INSTRUCTIONS IN A PARALLEL DATA PROCESSOR"이란 명칭으로 출원된 미국 출원 번호제 호; 1995년 6월 1일에, 발명자 Sunil Savkar, Michael C. Shebanow, Gene W. Shen, 및 Farnad Sajjadian에 의해 "PROGRAMMABLE INSTRUCTION TRAP SYSTEM AND METHOD"이란 명칭으로 출원된 미국 출원 번호 제 호가 참조에 의해 그 전체가 본 명세서에 통합된다.
1995년 6월 7일에, 발명자 Gene W. Shen, John Szeto, Niteen A. Patkar 및 Michael C. Shebanow에 의해 "PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE"이란 명칭으로 출원된, 대리인 번호 제A-60624/JAS호, 미국 특허 출원 제08/487,801호; 1995년 6월 7일에, 발명자 Gene W. Shen, John Szeto, Niteen A. Patkar, Michael C. Shebanow 및 Michael A. Simone에 의해 "PROCESSOR STRUCTURE AND METHOD FOR AGGRESSIVELY SCHEDULING LONG LATENCY INSTRUCTIONS INCLUDING LOAD/STORE INSTRUCTIONS WHILE MAINTAININGPRECISE STATE"이란 명칭으로 출원된, 대리인 번호 제A-60622/JAS호인 미국 특허 출원 제08/478,025호; 1995년 6월 7일에, 발명자 Gene W. Shen, John Szeto, Niteen A. Patkar, 및 Michael C. Sheganow에 의해 "PROCESSOR STRUCTURE AND METHOD FOR MAINTAINING AND RESTORING PRECISE STATE AT ANY INSTRUCTION BOUNDARY"이란 명칭으로 출원된, 대리인 번호 제A-60623/JAS호, 미국 특허 출원 제08/483,958호; 1995년 6월 7일에, 발명자 Gene W. Shen, John Szeto, Niteen A. Patkar 및 Michael C. Shebanow에 의해 "PROCESSOR STRUCTURE AND METHOD FOR CHECKPOINTING INSTRUCTIONS TO MAINTAIN PRECISE STATE"이란 명칭으로 출원된, 대리인 번호 제A-60625-2/JAS호인 미국 특허 출원 제08/467,419호; 1995년 6월 7일에, 발명자 Gene W.Shen, John Szeto, Niteen A. Patkar 및 Michael C. Sheganow에 의해 "PROCESSOR STRUCTURE AND METHOD FOR A TIME-OUT CHECKPOINT"이란 명칭으로 출원된 대리인 번호 제A-60647/JAS호인 미국 특허 출원 제08/473,223호; 1995년 6월 7일에 발명자 Gene W. Shen, John Szeto, 및 Michael C. Shebanow에 의해 "PROCESSOR STRUCTURE AND METHOD FOR TRACKING FLOATING-POINT EXCEPTIONS"이란 명칭으로 출원된 대리인 번호 제A-60648/JAS, 미국 특허 출원 제08/484,795호; 1995년 6월 7일에 발명자 Hideki Osone 및 Michael C. Shebanow에 의해 "PROCESSOR STRUCTURE AND METHOD FOR RENAMABLE TRAP-STACK"이란 명칭으로 출원된 대리인 번호 제A-60649/JAS호, 미국 특허 출원 제08/472,394호 및 1995년 6월 7일에, 발명자 Gene W.Shen, Michael C. Sheganow, Hideki Osone 및 Takumi Maruyama에 의해 출원된 대리인 번호 제A-60682/JAS호 및 미국 특허 출원 제08/482,073호가 참조에 의해본 명세서에 그 전체가 각각 통합된다.
프로세서에 있어서, 제어 흐름 명령(예컨대 분기 명령), 메모리 트랜잭션에 기인한 대기시간, 및 복수의 사이클 연산을 필요로 하는 명령들은 "버블(bubbles)"을 파이프라인으로 유도하기 때문에 종종 프로세서가 최상의 명령 실행 대역폭을 유지하는 것을 방해한다. 성능을 향상시키기 위해, 투기적 무순위 명령의 실행을 구현함으로써 성능이 개선될 수 있다. 통상적으로, 어떤 명령에 의한 중간 결과가 후속 명령에 대해 이용될 수 없는 경우, 프로세서는 실행을 중단하거나, 또는 중간 결과가 이용가능하게 될때까지 "정지(stall)"한다.
투기적 실행 및 무순위 실행인 2개의 기술은, 최신 프로세서에서 높은 실행 대역폭을 유지하는데 도움이 된다. 투기적 실행은, 적절한 분기를 선택하기 위한 이전 처리 단계로부터의 정보 없이 분기가 걸릴 경우, 예측이 행해지고 명령 디스패치 및 실행을 이 예측에 기초하여 처리하는 공지된 기술이다. 만일 차후에 이 예측이 부정확하다고 판명되면, 잘못 예측된 명령 시퀀스는 분기 예측 오류 복구 (branch mispredict recovery)를 이용하여 원상태로 되어야 한다. 투기적 실행은 또한, 프로세서가 명령을 계속적으로 발행(issue)mf고 실행할 수 있도록 한다. 공지된 예측 ;fa안은 성능을 개선시키기 위해 잘못 예측된 실행의 발생 빈도를 최소화한다. 그러나, 투기적 머신에 있어서 정확한 상태를 유지하는 것은 복잡해질 뿐만 아니라, 바람직하지 않은 오버헤드를 초래한다. 무순위 실행은, 메모리와 다중 사이클 명령 대기시간을 드러내지 않는 기술이다. 무순위 실행을 구현하는 프로세서에서, 명령들은 순차적인 프로그램 순서가 아닌 다른 순서로 동적으로 재배열되고 실행되어 허용가능한 명령 레벨 병렬성을 나타낸다.
"정확한 예외(precise exception)" 모델은 예외 조걸들을 분석하는 소프트웨어를 단순화하기 위한 중요한 특징으로 나타나지만, 정확한 예외의 유지는 투기적 무순위 실행을 구현하는 머신에서 복잡하게 된다. 머신 상태는 일반적으로 프로세서마다 특이하고, 아키텍쳐 상태는 모든 제어/상태 레지스터, 데이터 레지스터, 어드레스 레지스터 및 모든 외부 메모리 상태를 포함한다. 예컨대, SPARC-V9 제어/상태 레지스터는 SPARC-V9 아키텍쳐 메뉴얼의 29-30쪽에 기재되어 있다. 이는 어떤 소프트웨어 및 소프트웨어 프로그래머인지를 보여준다. 머신 상태는 프로세서 특정적이며 이 머신의 상태에 대한 다른 모든 것을 포함하는 아키텍쳐 상태의 슈퍼세트 (super-set)이다. 결함 명령은 예외를 발생시키는 명령이다. 예외는 프로세서가 동작을 정지하고 실행을 진행하기 전에 예외를 발생시킨 상황을 조사하게 하는 어떤 상황이나 상태이다. 예외가 에러 상태가 되어야 할 필요는 없으며, 예컨대 인터럽트를 포함한다. 실행 트랩은 예외로부터 방행될 수 있다. 정확한 예외 모델을 구현하는 프로세서에서, 결함이나 예외는 아키텍쳐 상태를 수정하지 않는다. 아키텍쳐 상태는 결함 명령 이전의 모든 명령에 대해서 수정되어지지만, 상기 결함 명령 다음의 명령에 대해서는 수정되지 않는다. 정확한 예외 모델이 제공되지 않을 경우, 소프트웨어가 결함 명령을 식별해야만 하며, 그런 다음 결함 명령을 다시 시도하기 위한 또는 결함 명령을 바이패스시키고 다음 명령을 실행하기 위한 재시작 시점을 계산해야 한다.
짧게 파이프라인된 단일-발행 머신을 위한 정확한 상태 유지 기술이 공지되어 있다. 일반적으로, 짧게 파이프라인된 머신은 명령의 인출, 발행, 실행 및 상태가 수정되는 재기록 스테이지를 포함하는 대략 4개 또는 5개의 스테이지보다 작은 스테이지를 갖는다. 단일-발행 방식은 예외 및 예측 오류의 경우에, 파이프라인 스테이지에서의 어느 명령이 플러쉬되어야 하는 가에 대한 고려 없이 파이프라인이 클리어될 수 있기 때문에 복구를 간단하게 한다. 이러한 통상적인 기술에서, 발생될 수 있는 모든 예외는 아키텍쳐 상태를 수정하기 전에 검출된다. 예외가 검출되면, 파이프라인에 있어서의 명령은 플러쉬되며, 아키텍쳐 상태의 수정을 방지하기 위하여 아키텍쳐 상태에 대한 데이터, 상태 또는 결과의 모든 재기록이 의도적으로 차단된다.
투기적 무순위 슈퍼스칼라(다중-발행) 방식에 있어서, 정확한 상태를 유지하는 것은 단일-발행 머신에 대해서보다 훨씬 더 어렵다. 이러한 투기적 무순위 머신에 있어서, 에러를 발생시키는 명령은 투기적으로 실행되며, 오류가 검출된 후 발생하는 모든 아키텍쳐 상태 수정을 원상태로 되돌리기 위한 방법 및 구조가 반드시 제공되어야 한다. 또한, 예외는 일반적으로 프로그램 순서와 다른 순서로 검출될 수 있다. 따라서, 무순위 프로세서는 예외를 해독하고 어느 명령이 완료(및 아키텍쳐 상태를 수정)하도록 허용되어야 하는지, 그리고, 어느 명령이 원상태로 복구되어야 하는지를 판단할 수 있어야 한다.
도 1은 투기적 프로세서에서 정확한 상태를 유지하기 위해 재배열 버퍼를 사용하는 종래의 방법을 도시한다. 재배열 버퍼는 (결과가 얻어지는) 명령 실행 완료시간과 머신 상태가 명령 실행 완료의 결과로서 수정될 때의 시간 사이에서 일시적인 시간 지연을 효과적으로 유도하는 선입선출 스택에 의해 구현된다. 정확한 상태는 잘못 예측된 분기 명령, 실행, 예외 또는 유사한 상태가 메모리에 재기록 되는 것을 방지함으로써 유지된다. 정확한 상태는 잘못 예측된 투기적 실행을 원상태로 되돌리도록 상태를 복구시키는 것에 의해서 보다는 명령이 여전히 투기적인 동안에 상태 수정을 금지시킴으로써 유지된다.
도 2는 명령을 실행하기 전에 "체크포인트"에 상태를 기억시키고, 나중에 상기 기억된 체크포인트 정보로부터 상태를 복구함으로써 투기적 프로세서에서 정확한 상태를 유지하는 종래의 방법을 나타낸다. 종래의 체크포인트 처리에서, 머신 상태의 수정을 발생시킬 수 있는, 모든 투기적으로 실행된 명령은 체크포인트 된다. 각 프로세서는 예컨대, 머신의 상태를 규정하는 모든 제어/상태 레지스터, 데이터 레지스터 값 등을 포함하는 일련의 상태 파라미터를 갖는다. 이전의 머신 상태를 복구하기 위해 상태 규정 파라미터는 필요한 경우 복구될 수 있도록 모두 기억되어야 한다. 종래의 체크포인트 처리 기술에서, 모든 상태 규정 파라미터는 일반적으로 상태 규정 파라미터중 어느 하나를 수정할 수 있는 모든 명령을 위해 기억된다. 모든 체크포인트된 명령에 있어서, 종래의 체크포인트 처리는 실행되려고하는 특정 명령에 의해 수정될 수 있는 상태뿐만 아니라 체크포인트된 명령의 어느 하나에 의해 변화될 수 있는 모든 상태 정보를 기억한다. 예컨대, 머신 상태를 규정하기 위해 100개의 상태 파라미터를 요구하는 머신에서, 만일 명령 "X"의 실행이 제어/상태 레지스터 하나만을 수정할 수 있으면, 이 명령의 실행은 이 명령에 의해 수정될 수 있는 그 하나뿐만 아니라 여전히 100개의 상태 파라미터를 기억할 것을 요구할 것이다.
도 3은 임의의 특정 머신 또는 CPU을 위한 실제 체크포인트 데이터를 나타내지 않고, 명령 및 종래의 체크포인트의 예시적인 시퀀스의 구조 및 콘텐츠를 단지 설명을 위하여 개략적인 방식으로 도시한 것이다. 종래의 체크포인트는 고정된 사이즈를 가지기 때문에, 각각의 체크포인트는 특정 명령에 의해 실제로 수정된 상태와 비교하여 비교적 큰 사이즈를 가져야 함을 알 수 있다. 종래의 체크포인트 처리를 사용하는 복구는 결함있는 또는 잘못 예측된 투기적 명령 이전의 가장 근접한 기억된 체크포인트를 이용하여 상태를 복구하는 단계, 프로그램 카운터를 체크포인트된 명령의 바로 직후로 백업하는 단계, 및 체크포인트된 명령으로부터 전방으로 명령을 다시 실행하는 단계를 포함한다.
체크포인트 처리, 재배열 버퍼, 이력 버퍼 및 미결정 파일의 사용은 어떤 환경에서 무순위 실행을 관리하고 정확한 상태를 유지하기 위한 방법으로서 개시되어 있다. 임의의 명령 경계가 아닌 체크포인트 경계에서 머신 상태의 복구를 허용하는 종래의 체크포인트 처리가 Hwu 및 Patt에 의해 제시되어 있다(W. Hwu and Y.N. Patt, "Checkpoint Repair for High Performance Out-of-order ExecutionMachines" Proceedings of the 14th Annual Symposium on Computer Architecture,(1987년 6월), pp.18-26). 파이프라인된 RISC 프로세서에서 정확한 인터럽트를 구현하는 방법은 Wang 및 Emnett("Implementing Precise Interruptions in Pipelined RISC Processors", IEEE Micro, August 1993, pp.36-43)에 의해 제시되어 있다. 파이프라인된 프로세서에서 정확한 인터럽트를 구현하는 방법은 Smith 및 Pleszkun(J.E. Smith and A.R. Pleszkun, "Implementation of Precise Interrupts in Pipelined Processors.", Proceedings of the 12th Annual International Symposium on Computer Architecture,(June 1985), pp.36-44)에 의해 또한 제시되어 있다. 고성능 슈퍼스칼라 마이크로프로세서를 설계하는 종래의 기술의 개요가 Mike Johnson에 의해 개시되어 있다(M. Johnson[a.k.a. William Johnson],Superscalar Microprocessor Design, Prentice-Hall, Inc., Englewood Cliffs, New Jersey 07632, 1991, ISBN 0-13-875634-1.). 이들 인용문헌들은 각각 그 전체가 참조에 의해 본원 명세서에 통합되어 있다.
이들 기술의 적어도 몇 개가 성능을 개선시키더라도, 이들은 투기의 정도를 제한하거나, 또는 명령 레벨의 머신 상태 복구가 아닌 단지 질이 낮은 머신 상태 복구를 제공하기 때문에 완전하게 만족스러운 것은 아니다. 종래의 재배열 버퍼 기술은, 재배열 버퍼 길이가 지원되는 투기적의 정도(degree)에 관해서 선형적이기 때문에, 투기의 정도를 제한한다. 즉, 원상태로 되어야 하는 각 명령에 대하여 명령 실행 결과는 재배열 버퍼에 기억되어야 한다. 예컨대, 만일 머신이 64개의 미해결이고 잠재적인 투기적 명령을 허용하면, 재배열 버퍼는 결과를 기억하기 위한 적어도 64개의 위치를 포함해야 한다. 종래의 체크포인트 처리에서, 체크포인트된 체크포인트의 수는 통상적으로 그 머신에서의 미해결 명령의 수보다 적지만, 각 체크포인트에 기억된 데이터의 량은 매우 크다(그 시점에서 머신의 전체적인 상채). 체크포인트 기억 필요조건은 프로세서 칩 기판 면적에 부담을 지운다. 이상적으로, 정확한 상태를 유지하기 위한 방법은 다수의 현재 미해결인 투기적 명령에 선형적인 또는 낮은 순서의 관계(예컨대 대수적으로)로 평가 가능해야 한다. 재배열 버퍼 엔트리 기억 영역은 데이터를 기억하기 위해 충분한 폭을 가져야 하며, 이들 기술은 또한 모든 엔트리에 대한 관련 검색(look-up)을 필요로 한다. 이는 매우 큰 재배열 버퍼에 대해 어려울 수 있다.
더욱이, 정확한 상태를 복원하기 위한 종래의 방법은 어떤 상황에서는 완전하지 않다. 예컨대, 투기적 분기의 결과로서 실행된 명령이 외부 "덤(dumb)" 디바이스의 상태를 수정하는 경우, 상태의 복구가 통상적으로 외부 디바이스에 대한 수정이 발생하는 시점 이전의 체크포인트 경계에서 상태를 복구하는 것을 수반하며, 그런 다음 외부 디바이스를 수정하는 명령을 포함하는 비결함 명령의 재실행을 진행시킨다. 이러한 재실행의 경우에, 결함 명령만이 외부 디바이스의 상태에서의 변화의 결과를 원상태로 되돌리지 않으며, 상태가 복구되는 지점과 잘못된 명령 사이의 비결함 명령의 재실행은 또한 문제를 발생시킨다.
종래의 체크포인트 처리는 명령 스트림내에서 제한된 수의 서로 다른 지점에서 머신 상태를 세이브하고 분기 예측 오류 또는 실행 에러로부터 회복시키기 위해 체크포인트된 아키텍쳐 상태를 복구한다. 종래의 체크포인트 처리는 각각의 명령을체크포인트하지 않는다. 종래의 체크포인트 처리는 체크포인트 경계, 즉 체크포인트가 확립되어 있는 명령에서만 머신 상태를 복구할 수 있다. 결함 또는 실행 에러가 발생하면, 체크포인트된 상태는 공지된 기술에 의해 복구되며, 이것에 의해, 체크포인트에 이어서 발생하는 모든 명령들, 따라서 결함 명령(들)을 포함하는 모든 명령들을 사실상 "복구"한다. 그런 다음 명령들은 전방으로, 예컨대 단일-발행 모드에서는 체크포인트된 명령으로부터 결함 명령에 도달할 때까지 연속적으로 재실행된다.
이 종래의 체크포인트 처리 기술은 투기적 실행을 허용하지만, 많은 면에서 바람직하지 않다. 예컨대, 이 기술은 확실한 예외 복구를 제공하지 않는다. 간헐적인 에러에 있어서, 예외를 생성하는 명령 전에 체크포인트로의 통상적인 머신 백업과, 체크포인트 다음의 명령의 재실행은 명확한 동작을 달성하지 못할 수 있으며, 재실행된 명령의 변경된 상태를 잘못 전달함으로써 머신 상태의 붕괴를 악화시킬 수 있다. 종래의 체크포인트 처리 및 머신 백업 과정은 명령 재실행을 최소화하도록 시도하지 않는다. 더욱이, 하드웨어 고장 및 머신 타임아웃과 같은 치명적인 머신 에러는, 만일 복구되고 체크포인트된 명령과 예외를 발생시키는 명령 사이의 모든 명령이 재실행되면, 프로세서를 교착 상태에 빠지게 할 수 있다.
종래의 "재배열 버퍼"는 미지정된 크기의 선입선출(FIFO) 메모리 구조인 재배열 버퍼에서의 투기적 명령을 관리한다. 명령이 실행을 완료하면, 이 실행으로부터 발생되는 데이터값은 재배열 버퍼에 기록되며, 이 데이터값이 버퍼를 통해 이동하여 최상부에서 나타나면, 그 데이터 값이 재배열 버퍼로부터 레지스터 파일로 기록된다. 재배열 버퍼의 사이즈는 명령 실행 완료와 아키텍쳐 상태의 영구적인 수정 사이의 지연을 효과적으로 규정한다. 일단 데이터값이 레지스터에 기록되면, 이들은 원 상태로 복구될 수 없다. "관련 검색(Associative lookup)" 즉, 재배열 버퍼의 엔트리가 레지스터 파일의 엔트리와 결합되도록 하는 처리는 M.Johnson의Superscalar Microprocessor Design의 49쪽 이하에 개시되어 있다.
재배열 버퍼 설계안은 적어도 3가지의 제한을 갖는다. 첫번째로, 종래의 재배열 버퍼 설계안에서, 명령 실행의 결과만이 재배열 버퍼에 세이브되며, 프로그램 카운터(PC) 값은 세이브되지 않는다. 그러므로, 재배열 버퍼를 사용한 모든 분기 예측 오류 복구는 PC 재구성, 명령 인출 및 명령 발행의 추가적인 단계를 요구한다. 따라서, 재배열 버퍼를 사용한 분기 예측 오류로부터의 통상적인 회복은 지연된다.
두 번째로, 재배열 버퍼는 일반적으로 명령의 제한된 믹스의 투기적 실행만을 허용한다. 예컨대, 명령 발행 스테이지 동안 검출된 트랩(발행 트랩)은, 일반적으로 제어 레지스터 갱신을 수반하기 때문에 재배열 버퍼를 사용하여 투기적 실행될 수 없다. 재배열 버퍼 기술은 제어 레지스터 갱신을 수반하는 명령의 투기적 실행을 지원하지 않는다. 특정의 명령 세트 아키텍쳐에서의 발행 트랩(예컨대, "Sun Microsystems SPARC 아키텍쳐에서의 스필/필(spill/fill)" 트랩)에 투기적으로 진입하지 못하게 함으로써 상당한 성능 제한을 가져올 수 있다.
3번째로, 재배열 버퍼 사이즈는 일반적으로 프로세서에서 허용하는 미해결 명령의 수의 직접 선형 함수이다. 예컨대, 64개의 미해결 명령을 허용하는 프로세서에서는 64개의 엔트리를 갖는 재배열 버퍼가 필요할 것이다. 프로세서 내에 다수의 버퍼 레지스터를 할당하는 것은 매우 큰 활성화 명령 윈도우 즉, 비교적 큰 수의 동시 미해결 명령들이 명령 레벨 병렬성의 추출을 개선하는 데이터플로우 프로세서에서 금지될 수 있다. 데이터 플로우 프로세서는 명령 실행의 순서가 종래의 넌-데이터 플로우 프로세서에서처럼 프로그램 카운터를 증대하는 것에 기초하지 않고 오퍼랜드 또는 데이터 이용성에 의해 결정되는 프로세서이다.
퓨처(future) 파일은 재배열 버퍼에서의 관련 검색 문제점을 회피한 재배열 버퍼 기술의 수정이다. 퓨처 파일은 M.Johnson에 의한Superscalar Microprocessor Design의 94-95쪽에 개시되어 있다. 이력 버퍼는 무순위 완료의 파이프라인된 스칼라 프로세서에서의 정확한 인터럽트를 구현하기 위해 제안된 방법 및 구조이며 M.Johnson에 의한Superscalar Microprocessor Design의 91-92쪽에 개시되어 있다.
참조에 의해 본원 명세서에 명백하게 그 전체가 통합된 D.Weaver 및 T. GerMond, Englewood Cliffs에 의한 "The SPARC Architecture Manual" 9판(1994)은 특수한 형태의 무순위 투기적 실행 프로세서를 개시하고 있다. SPARC V9 아키텍쳐는 부동소수점 상태 레지스터(FSR)를 필요로 한다. FSR은 3개의 필드, 즉 FSR_accrued_exception(FSR.aexc) 필드, FSR_current_exception(FSR.cexc) 필드 및 FSR_floating_point_trap_type(FSR.ftt) 필드를 포함하는데, 이러한 필드는 부동소수점 예외가 발생하면 갱신되고 부동소수점 예외에 의해 발생되는 트랩을 처리하기 위한 트랩 처리 루틴에 의해 이용된다. 명령들이 프로그램 순서와 다른 순서로 실행하고 완료하기 때문에 무순위 실행 프로세서에 있어서는 이들 필드의 갱신이 어렵다. 이들 필드가 마치, 명령이 프로그램 순서로 발행되고 실행되는 것처럼 갱신되거나 또는 갱신된 것으로 나타나야 하기 때문에, 이들 예외를 트래킹하고 FSR 레지스터를 정확하게 갱신하기 위해 소정의 장치 및 대응하는 방법이 요구된다.
명령을 투기적으로 실행할 수 있는 데이터 프로세서에 있어서, 분기 방향(수취 또는 비수취) 또는 분기 어드레스(타겟 어드레스 또는 분기 명령 다음의 어드레스)는 해결되기 전에 예측될 수 있다. 나중에, 이들 예측이 틀린 것으로 판정되면, 프로세서는 이전 상태로 백업하여 정확한 분기 스트림으로 명령 실행을 재개시한다. 그러나, 시장에서 구입 가능한 대부분의 슈퍼스칼라 프로세서는 분기 예측이 정확한지를 체크하기 위하여 사이클당 하나의 분기만을 평가할 수 있다. 그러나, 종종 다수의 예측된 분기가 하나의 사이클에서 평가되는 것이 있다. 따라서, 다른 경우에는, 실행될 수 있는 분기 평가는 지연될 필요가 있다. 분기 평가를 지연함으로써 프로세서 성능에 상당한 영향을 미친다.
또한, 종래의 투기적 실행 프로세서에서, 트랩이 발생하면, 프로세서는 모든 예측된 분기가 해결되어 트랩이 실제이고 투기적이지 않음이 확실할 때까지 대기해야 한다. 트랩이 실제임을 프로세서가 확인하는 가장 쉬운 방법은 트랩을 수취하기 전에 프로세서를 동기화 시키는(즉, 트랩 조건이 발생하기 전에 발행된 모든 명령을 실행하고 완료하는) 것이다. 그러나, 자주 발생하는 트랩에 대해 상기와 같이 처리하면, 프로세서의 성능이 저하된다. 이는 스필/필 발행 트랩 및 소프트웨어 트랩(Tcc 명령)이 종종 발생하는 SPARC-V9 아키텍쳐에 있어서 특히 그러하다. 이 문제점은 프로세서의 성능을 향상시키기 위해 해결될 필요가 있다.
본 발명은 투기적 무순위 실행 프로세서(speculative out-of-order execution processor)의 정확한 상태를 유지하면서 프로세서 성능을 개선하는 장치, 시스템 및 방법에 관한 것이다.
도 1은 투기적 프로세서의 정확한 상태를 유지하기 위한 재배열 버퍼를 사용한 종래의 방법을 나타냄.
도 2는 명령을 실행하기 전에 체크포인트의 상태를 기억하고 나중에 기억된 체크포인트 정보로부터 상태를 복구함으로써 투기적 프로세서의 정확한 상태를 유지하는 종래의 방법을 나타냄.
도 3은 임의의 특정 머신을 실제 체크포인트 데이터를 나타내는 것이 아님을 설명할 목적으로, 명령 및 종래의 체크포인트의 예시적인 시퀀스의 구조 및 콘텐츠를 개략적인 방식으로 도시.
도 4는 중앙 처리 장치를 포함하는 본 발명의 데이터 프로세서의 일실시예의 상위 레벨 기능 블록도.
도 5는 몇 개의 전형적인 명령 타입의 신규한 명령 파이프라인의 일실시예의 스테이지를 나타내는 도면.
도 6은 명령 프리패치와 캐시 유닛 및 인출 유닛을 포함하는 본 발명의 CPU의 예시적인 분기 블록(BRB)을 나타내는 도면.
도 7은 발행 유닛(ISU), 정확한 상태 유닛(PSU), 프리리스트 유닛, 및 제어 레지스터 파일을 포함하는 예시적인 발행 블록(ISB)을 나타내는 도면.
도 8은 레지스터 리네임 프리리스트 유닛으로부터 발행 유닛에 의해 수신되고, 본 발명의 레지스터 리네임 처리를 구현하는데 이용되는 예시적인 신호를 나타내는 도면.
도 9는 정확한 상태 유닛(PSU)의 실시예를 나타내는 도면.
도 10은 발행/실행/리클레임 유닛(ICRU)의 실시예의 구성 요소의 기능 블록도 및 그 동작과 관련된 입력 및 출력 신호를 나타내는 도면.
도 11은 명령 상태 정보 및, 데이터 구조에 기억된 예시적인 데이터의 제1 세트와 관련된 다양한 포인터를 기억하기 위한 활성 명령 데이터 구조 및 메모리 명령 데이터 구조의 실시예를 개략적으로 나타내는 도면.
도 12는 A-링 비트 세트/클리어 로직의 몇개의 구조적 구성성분을 포함하는 예시적인 상태 제어 로직 유닛을 나타내는 도면.
도 13은 상태를 트래킹하고 정확한 상태를 유지하기 위해 명령 태그를 사용하는 본 발명에 따른 방법의 실시예의 플로우 챠트.
도 14는 정확한 상태를 유지하기 위해 명령 상태를 트래킹하기 위한 본 발명에 따른 방법의 실시예의 개략적인 플로우 챠트.
도 15는 정확한 상태를 유지하기 위해 명령을 트래킹하기 위한 본 발명의 방법의 실시예에 따라, 활성 명령 링 및 메모리 명령 링에 상태 정보를 기록하기 위한 방법의 플로우 챠트.
도 16은 물리적 레지스터를 포함하는 물리적 레지스터 파일을 구비하는, 레지스터 파일 및 리네임 유닛(RFRN)의 실시예를 나타내는 도면.
도 17은 레지스터 리네임 처리와 관련된 제어 레지스터 파일의 실시예를 나타내는 도면.
도 18은 자원 리클레임 파일(RRF)의 실시예를 나타내는 도면.
도 19는 본 발명의 레지스터 리네임 처리 방법을 나타내는 도면.
도 20은 명령 발행, 비활성화, 실행 및 엘리먼트를 포함하는 정확한 상태를 유지하는 본 발명의 방법의 실시예의 개략적인 플로우 챠트.
도 21은 데이터 구조 내에 기억된 예시적인 데이터의 제2 세트와 관련된 명령 상태 정보 및 다양한 포인터를 기억하기 위한 활성 명령 데이터 구조 및 메모리 명령 데이터 구조의 실시예의 개략적인 플로우 챠트.
도 22는 CPU의 데이터 전송 블록 내의 로드/기억 유닛(LSU)의 기능 블록도.
도 23은 정확한 상태를 유지하면서, 로드/기억 명령을 포함하는 긴 대기시간 명령을 능동적으로 스케줄링하기 위한 본 발명의 방법의 실시예의 플로우 챠트.
도 24는 체크포인트 유닛의 기능 블록도.
도 25는 워치포인트 유닛의 기능 블록도.
도 26은 타임아웃 체크포인트를 형성하기 위한 선택적인 체크포인트 처리의 향상을 포함하는 본 발명의 체크포인트 처리 방법의 실시예의 개략적인 플로우 챠트.
도 27은 워치포인트 유닛의 실시예 내의 주요 기능 블록의 기능 블록도.
도 28은 조건 코드 획득 로직, 평가 로직, 워치포인트 요소 기억, 제어 유닛 및 타겟 RAM의 특정 실시예를 나타내는 워치포인트 유닛의 실시예를 나타내는 도면.
도 29는 현행 매칭 로직, 어레이 매칭 로직 및, 평가 준비 및 평가 조건 코드 로직을 포함하는 조건 코드 선택 로직을 구비한 워치포인트의 실시예의 도시적인 부분을 나타내는 도면.
도 30은 분기 예측 및 평가와 관련된 예시적인 타이밍 챠트를 나타내는 도면.
도 31은 현행 매칭 로직 및 어레이 매칭 로직의 실시예와 관련된 구조적 상세도.
도 32는 조건 코드 선택 로직의 실시예와 관련된 구조적 상세도.
도 33은 평가 준비 로직의 실시예와 관련된 구조적 상세도.
도 34는 평가 진위 로직의 실시예와 관련된 구조적 상세도.
도 35는 목표 RAM 및 점프 앤드 링크 명령 평가 로직의 실시예와 관련된 구조적 상세도.
도 36은 다수의 동시 발생적 미결정 분기 평가를 위한 본 발명의 워치포인트 방법의 실시예의 개략적인 플로우 챠트.
도 37은 부동소수점 예외(FPEXCEP) 데이터 구조의 실시예를 도식적으로 나타낸 도면.
도 38은 예시적인 부동소수점 예외 링 데이터 구조로의 신호 인터페이스를 나타내는 도면.
도 39는 RD 및 AEXC 로직을 포함하는 부동소수점 예외 유닛을 나타내는 도면.
도 40은 백업 및 백스텝 구성요소를 포함하는 백트래킹 유닛의 실시예를 도식적으로 나타낸 도면.
도 41은 백업 및 백스텝 절차를 포함하는 임의의 명령 경계에서 정확한 상태를 유지하고 복구하기 위한 본 발명의 방법의 실시예의 도식적인 플로우 챠트.
도 42는 레지스터 리네임 파일에서 복구되는, 물리적 레지스터에 대한 논리적 레지스터의 맵핑 방식을 나타내는 도면.
도 43은 명령 경계에 대해 2개의 머신 백스텝에 의해 수반되는 체크포인트 경계로의 단일 머신 백업을 포함하는 머신 백트래킹의 예를 나타내는 도면.
도 44는 예시적인 우선순위 로직 및 상태 머신(PLSM)을 나타내는 도면.
도 45는 예시적인 트랩 스택 유닛을 나타내는 도면.
도 46은 트랩 스택의 기억 요소의 리스트를 기억하기 위한 프리리스트 로직의 실시예를 나타내는 도면.
도 47은 예시적인 리네임 맵 로직을 나타내는 도면.
도 48은 예시적인 트랩-스택 RRF를 나타내는 도면.
도 49는 트랩 스택 체크포인트 기억 유닛을 나타내는 도면.
도 50은 워치포인트 WP_ACTIVE_VEC 및 WP_MISPRED 로직을 나타내는 도면.
도 51은 트랩 스택 백업 예를 나타내는 도면.
도 52는 XICC 기록 로직을 나타내는 도면.
도 53은 XICC 획득 로직 및 어레이 최근 매칭 로직을 나타내는 도면.
도 54는 조건 코드 대기 로직을 나타내는 도면다.
발명의 개요
종래의 기술에 있어서의 상기 문제점은 다수의 특수한 프로세서 기능 및 성능을 제공하는 구조 및 방법을 포함하는 고성능 프로세서에 관한 본 발명에서 처리된다. 이들 구조 및 방법은 (1)정확한 상태를 유지하면서 로드/기억 명령을 포함하는 긴 대기시간의 명령을 능동적으로 스케줄링하기 위한 구조 및 방법, (2)임의의 명령 경계에서 정확한 상태를 유지하고 복원하기 위한 구조 및 방법, (3)정확한 상태를 유지하기 위해 명령 상태를 트래킹하기 위한 구조 및 방법, (4)정확한 상태를 유지하기 위해 명령을 체크포인트 처리하기 위한 구조 및 방법, (5)타임아웃 체크포인트를 형성하고 유지하며 이용하기 위한 구조 및 방법, (6)부동소수점 예외를 트래킹하기 위한 구조 및 방법, (7)리네임가능한 트랩-스택을 형성하고 유지하며 이용하기 위한 구조 및 방법, (8) 복수의 동시의 미해결 분기 평가를 위해 워치포인트를 형성하고 유지하며 이용하기 위한 구조 및 방법, (9)정확한 상태를 유지하기 위해 명령 상태를 트래킹하기 위한 구조 및 방법, 및 (10) 정확한 상태를 유지하면서 프로세서의 작업 처리량을 향상하기 위한 구조 및 방법을 포함하지만, 본 발명은 상기 구조 및 방법에만 제한되지 않는다. 다른 구조적 기능 및 성능은 첨부된 도면을 참조하여 이하에서 설명된다.
상기 문제점은, 발생 시점에서 각각의 명령에 고유의 식별 태그를 할당하고, 이 태그를 제1의 활성화된 명령 데이터 구조의 기억 위치에 관련시키고, 이 기억 위치에 기억된 데이터를 각각의 명령에 대해 명령 활성 상태 변화에 응답하여 갱신하고, 명령 활성 상태에 응답하여 이동하는 기억 위치에 대해 다수의 포인터를 유지함으로써 정확한 상태를 트랭킹하고 유지하는 본 발명의 제1 양태에 따른 방법 및 구조에 의해 해결된다. 상태 정보는 명령이 발행될 때에 세트되고 실행이 에러없이 완료되었을 때에 클리어되는 활성-비트(active-bit)를 포함한다. 포인터는 최종적으로 발행된 명령을 지시하는 포인터(발행된 명령 포인터), 에러없이 완료되었고 그 이전의 모든 연속적인 명령이 에러없이 완료된 최종 명령을 지시하는 포인터 (최종적으로 위임된 명령 포인터) 및, 할당된 프로세서 자원이 리클레임되는 최종 명령을 지시하는 포인터(리클레임된 명령 포인터)가 형성된다. 이들 3개의 포인터는 데이터 구조에서의 하나의 명령과 관련된 각 위치에 대한 활성-비트의 비교 및 소정의 규칙에 기초하여 데이터 구조를 따라 나중에 발행된 명령을 향해 전방으로 이동된다. 임의의 명령에 대한 예외 또는 에러 조건은 활성-비트의 변화를 막기 때문에, 포인터의 이동은 이들 조건 하에서 제어적으로 금지된다.
상기 문제점은, 로드 및 기억 명령을 포함한, 외부 메모리를 참조하는 명령과 같은 긴 대기시간의 명령을 식별하고 어느 명령이 예측되고 투기적 결과를 갖는지를 식별하며, 투기적 분기 예측 오류 및 실행 예외와 상관없이 실행될 수 있는 실행에 대한 메모리 참조 명령만을 스케줄링 함으로써, 정확한 상태를 유지하면서 투기적 무순위 실행 프로세서에서 짧은 대기시간 명령 이전에 트래킹 및 적극적으로 스케줄링을 하는 본 발명의 다른 양태에 따른 방법 및 구조에 의해 해결된다. 이와 같은 방식으로 스케줄링 될 수 있는 명령은 발행되는 시점에서 각각의 명령에 대하여 고유의 식별 태그를 할당하고, 데이터 구조의 기억 위치에 태그를 관련시키고, 데이터 구조의 기억 위치에 기억된 데이터를 각각의 명령에 대한 명령 활성화 상태 변화에 응답하여 갱신하고, 명령 활성화 상태에 응답하여 이동하는 기억 위치에 대한 다수의 포인터를 유지함으로써 트래킹 된다. 상태 정보는 명령이 발행될 때 세트되고 실행이 에러없이 완료될 때 클리어되는 활성 명령 지시자를 포함한다. 포인터로는 최종적으로 발행된 명령을 유지하는 포인터, 에러없이 완료되고 그 이전의 모든 연속적인 명령이 에러없이 완료된 최종 명령(최종적으로 위임된 명령)을 지시하는 포인터 및, 할당된 프로세서 자원이 리클레임된 최종 명령(리클레임된 명령)을 지시하는 포인터가 형성된다. 또한, 태그를 데이터 구조의 제2 기억 위치에 관련시키고, 메모리 참조 명령과 같은 각각의 긴 대기시간 명령에 대한 명령 활성 상태에 응답하여 제2 기억 위치에 기억된 데이터를 갱신하고, 긴 대기시간(예컨대 메모리 참조) 명령 활성 상태에 응답하여 이동하는 기억 위치에 대한 다수의 포인터를 유지한다. 상태 정보는 긴 대기시간 명령이 발행될때 클리어되지만 다른 모든 명령 타입에 대해서는 세트되고 명령의 실행이 에러없이 완료되면 클리어되는 긴 대기시간 명령 타입을 포함한다. 가장 먼저 예측된 분기 명령을 지시하는 제1 포인터(예측된 분기 포인터)는 데이터 구조 내에 형성된다. 에러없이 완료되고, 또한 모든 이전의 연속적인 명령이 에러없이 완료되며 활성의 긴 대기시간 명령을 넘어서 진행하는 최종 명령을 지시하는 제2 포인트가 형성된다. 발행, 위임, 철회, 예측된 분기 및 긴 대기시간 포인터는 각 위치에 대한 활성-비트와 메모리 비트의 비교 및 소정의 규칙에 기초하여 제1 및 제2 순환 데이터 구조를 따라 나중에 발행된 명령을 향해 전방으로 이동된다. 임의의 명령에 대한 예외 또는 에러 조건은 활성-비트 및 메모리-비트의 변화를 금지하여, 포인터의 이동이 이들 조건 하에서 금지되게 한다. 하나 이상의 데이터 구조가 활성 상태 및 명령-타입 데이터를 기억하기 위해 제공될 수 있으며, 지시자는 데이터 구조에 기억된 세트 또는 클리어된 비트일 수 있다.
상기한 문제점은 본 발명의 방법 및 구조의 또다른 양태에 의해 해결되는데, 이것은 분기 명령 및 프로그램 카운터 불연속을 생성하거나 또는 제어 레지스터 값을 수정하는 사이드 효과를 가질 수 있는 명령을 포함하는 명령 타입의 소정의 세트에 대해서만 체크포인트를 발생시키고, 프로그램 카운터 불연속을 발생시키는 각 명령에 대한 체크포인트를 생성하거나 또는 프로세서를 동기화시켜서 상태를 수정할 수 있는 임의의 명령이 순차적으로 실행되게 하여 예외로부터 프로세스를 복구하기 위한 수단 및 방법을 제공하는 것에 의해 투기적 무순위 실행 프로세서의 임의의 명령 경계에서 정확한 명령 상태를 복구하는 방법을 제공한다. 에외 조건으로부터의 복구는 실행 예외가 발생할 때의 명령 일련 번호 또는 하나 이상의 실행 예외가 하나의 사이클에서 발생할 때에 최초의 명령 일련 번호를 결정하여 기억하는 단계, 실행 예외 후에 가장 가까운 이전의 체크포인트된 명령으로 프로세서를 백업함으로써 프로세서 상태를 회복하는 단계 및, 현재 발행된 명령과 오류 명령 사이에 체크포인트가 존재할 때 그 체크포인트된 정보로부터 프로세서 상태를 회복하고 레지스터 자원을 갱신하고 체크포인트된 명령이 있으며 그 명령으로부터, 최초의 오류 명령 바로 이전 지점까지의 백스텝 량만큼 프로세서 프로그램 카운터를 감소시킴으로써 프로세서를 백스텝하는 단계를 포함한다. 추가적인 개선에 있어서, 종래의 체크포인트 처리에서 요구되는 다량의 기억장치는 레지스터 데이터 그 자체보타는 논리적 및 물리적 레지스터 리네임 맵을 체크포인트함으로써 감소된다.
상기한 문제점은 명령이 발행되어 실행되기 전에 CPU에서 실행될 때의 아키텍쳐 상태를 수정할 수 있는 명령을 사전에 식별하고, 특정 명령의 체크포인트를 위해 요구되는 상태 기억 장치의 량 및 전형적인 명령 스트림에서 명령이 발생하는 빈도를 포함하는 소정의 선택 기준에 근거하여, 실행전에 특정 명령에 대한 아키텍쳐 상태를 체크포인트하지 않고, 특수 실행 모드에서 실행하기 위한 식별된 명령 중의 특정의 명령을 사전 선택함으로써, 프로세서에서 정확한 상태를 유지함과 동시에 체크포인트된 상태를 감소시키도록 프로세서에서 명령들을 체크포인트하는 본 발명의 방법 및 구조의 다른 양태에 의해 해결된다. 그런 다음 식별된 명령에 대해서만 체크포인트가 형성되며, 상태를 수정할 수 있는 다른 명령은 체크포인트 되지 않지만 특정의 동기화 모드에서 실행되어 예외가 발생할 경우, 그 예외는 프로세서 상태에 실행 결과를 다시 기록하기 전에 처리될 수 있다. 본 발명의 방법 및 ㄱ조의 일실시예에서, 기준은 수정 가능한 상태의 타입과, 실행동안 명령에 의해 수정될 수 있는 수정 가능한 상태의 양을 포함하며, 또한 소정의 명목상 명령 스트림에서 명령이 발생하는 빈도를 포함할 수도 있다. 바람직하게는, 낮은 추정 통계 빈도를 가지고 나타나며 비교적 다량의 체크포인트 기억 장치를 요구하는 명령은 동기화 모드 실행을 위해 선택되고 체크포인트되지 않는다. 본 발명의 구조 및 방법의 일실시예에서, 프로세서를 동기화하거나 동기시키는 단계는 실행 전에 명령 스트림에서의 머신 동기화를 요구하는 동기화 명령으로서 명령을 식별하는 단계, 모든 미해결의 발행된 명령이 위임되고 철회될 때까지 동기화 명령의 실행을 지연하여 실행이 에러 없이 완료되고 실행 결과가 상태에 다시 기록되게 하는 단계, 머신 동기화를 순서대로 연속하여 요구하는 각 명령을 실행하는 단계와, 상태를 재기록하기 전에 각 동기화 명령의 실행으로부터 발생하는 예외 조건들을 식별하는 단계, 동기화 명령의 실행동안 발생할 수 있는 모든 예외 조건들을 처리하는 단계, 및 상기 단계 이후에만 실행 결과를 머신 상태에 기록하여 정확한 상태가 동기화 명령을 체크포인트하지 않고 유지되게 하는 단계를 포함한다.
상기한 문제점은, 디코드된 명령 속성에만 기초한 현행 프로세서 상태를 기억하기 위해 체크포인트를 형성하는 대신에, 발행된 명령의 수, 경과된 클록 사이클의 수 및 최종의 체크포인트가 형성된 후의 간격에 기초하여 체크포인트를 형성하는 본 발명의 방법 및 구조의 또다른 양태에 의해 해결된다. 본 발명의 타임아웃 조건에 기초한 체크포인트 처리는 명령의 최대수를 체크포인트 경계 내에서 제한하며, 그에 따라 예외 조건으로부터의 회복 기간을 제한한다. 명령 윈도우 사이즈가 체크포인트 경계 내의 최대 명령수보다 크기만 하면, 프로세서는 예외 발생의 경우 명령 디코드에 기초한 체크포인트 기술보다 더 빠르게 체크포인트된 상태를 복구할 수 있게 되고, 명령 윈도우 사이즈에 대한 프로세서 상태 복구 의존성을 제거한다. 본 발명의 타임아웃 체크포인트 형성은 종래의 체크포인트를 구현하는 구조 및 방법 또는, 본 발명의 논리적 물리적 레지스터 리네임 맵 체크포인트 처리 기술에서 사용될 수 있다. 본 발명의 타임아웃 체크포인트 형성 구조 및 방법은 종래의 프로세서 백업 기술과 함께 사용될 수 있을 뿐만 아니라, 프로세서 백업 및 백스텝 처리를 포함하는 본 발명의 백트래킹 기술과 함께 사용될 수 있다.
상술한 문제점은, 발행 유닛, 실행 수단, 부동소수점 예외 유닛, 정확한 상태 유닛, 부동소수점 상태 레지스터 및 기록 수단을 포함하는 프로그램 제어 무순위 실행 데이터 프로세서를 제공하는 본 발명의 구조 및 방법의 또다른 양태에 의해 해결된다. 발행 유닛은 실행에 대한 프로그램 제어 순서로 명령을 발행한다. 발행된 명령은 부동소수점 명령 및 비부동소수점 명령을 포함한다. 실행 수단은 적어도 부동소수점 명령이 실행 수단에 의해 프로그램 제어 순서와 다른 순서로 실행될 수 있도록, 발행된 명령을 실행한다. 부동소수점 예외 유닛은 기억 요소를 포함하는 데이터 기억 구조를 포함한다. 각각의 발행된 명령은 기억 요소들중 하나에 대응한다. 각각의 기억 요소는 부동소수점 명령 식별 필드 및 부동소수점 트랩 타입 필드를 포함한다. 부동소수점 예외 유닛은 또한 대응하는 기억 요소의 부동소수점 명령 식별 필드에 각각의 발행된 명령에 대해, 데이터를 기록하기 위한 제1 로직을 포함하는데, 이 제1 로직은 대응하는 발행된 명령이 부동소수점 명령인 지 아닌지를 표시한다. 이것은 또한 실쟁중에 부동소수점 실행 트랩의 다수의 미리정의된 타입중 하나에 대응하게 되는 하나 이상의 부동소수점 실행 예외를 실행동안 발생시키는 각각의 발행된 부동소수점 명령에 대해 대응하는 기억 요소의 부동소수점 타 입 필드에 데이터를 기록하여 발생하게될 부동소수점 실행 트랩의 소정의 타입중 하나를 식별하는 제2 로직을 포함한다. 정확한 상태 수단은, 실행동안 실행 예외를 발생시키지 않으며 프로그램 제어 순서로 그 이전의 발행된 모든 명령이 철회되는 각각의 기발행된 명령을 철회한다. 미리 정의된 실행 예외중 최초의 것이 기발행명령에 의해 발생될 때, 실행 수단은 기발행 명령의 실행을 계속하며, 정확한 상태 수단은 철회될 수 없는 기발행 명령과 마주칠 때까지 기발행된 명령을 철회하는 것을 계속함으로써 실행 트랩의 순서 정하기에 관여한다. 철회될 수 없는 기발행된 명령은 (a) 제1 실행 예외를 발생시키는 기발행 명령과, (b) 제1 실행 예외를 발생시키는 기발행 명령보다 이전에 발행되었지만 제1 실행 예외보다 나중에 발생하는 제2 실행 예외를 발생시키는 기발행 명령중 하나이다. 부동소수점 상태 레지스터는 부동소수점 트랩 타입 필드를 갖는다. 기록 수단은 부동소수점 상태 레지스터의 부동소수점 트랩 타입 필드에 데이터를 기록하고, 철회될 수 없는 명령에 대응하는 기억 요소의 부동소수점 식별 필드의 데이터가 철회될 수 없는 명령이 부동소수점 명령임을 표시할 때, 철회될 수 없는 명령에 대응하는 기억 요소의 부동소수점 트랩 타입 필드의 데이터에 의해 식별되는 부동소수점 실행 트랩의 타입을 식별한다.
상기한 문제점은 투기적으로 트랩을 수취하고 그 트랩으로부터 리턴하기 위한 데이터 프로세서 및 방법을 제공하는 본 발명의 구조 및 방법의 또다른 양태에 의해 해결된다. 데이터 프로세서는 대응하는 트랩 레벨을 각각 갖는 내포된 트랩을 수취하기 위해 소정수의 트랩 레벨을 유지한다. 데이터 프로세서는 체크포인트를 형성하는 수단, 체크포인트에 백업하기 위한 수단, 트랩을 수취하기 위한 수단, 트랩으로부터 리턴하기 위한 수단, 레지스터 및 트랩 스택 유닛을 포함한다. 레지스터는 트랩이 수취되는 각 시점에서 데이터 프로세서의 상태를 한정하는 콘텐츠를 갖는다. 트랩 스택 유닛은 존재하는 트랩 레벨보다 많은 수의 트랩 스택 기억 엔트리를 갖는 트랩 스택 데이터 기억 구조를 포함한다. 트랩 스택 유닛은 또한 하나의트랩 레벨로 현재 맵핑할 수 있는 트랩 스택 기억 엔트리의 현재 이용 가능한 리스트를 유지하는 프리리스트(freelist) 유닛을 포함한다. 프리리스트 유닛은 트랩이 수취되는 각 시점에서 트랩 레벨중 대응하는 한 레벨에 맵핑하기 위한 현재 이용가능한 트랩 스택 기억 엔트리의 다음 엔트리를 식별한다. 트랩 스택 유닛은 현행 이용가능한 트랩 스택 기억 엔트리의 다음 엔트리에 레지스터의 콘텐츠를 기록하는 판독/기록 로직을 또한 포함한다. 이는 트랩 스택 기억 엔트리 각각에 대한 각 트랩 레벨의 현행 맵핑을 유지하는 리네임 맵핑 로직을 또한 포함한다. 리네임 맵핑 로직은 트랩이 수취되는 시점마다, 트랩 스택 기억 엔트리 중의 하나에 대해 대응하는 트랩 레벨의 이전 맵핑을 현재 이용가능한 트랩 스택 기억 엔트리의 다음 엔트리에 대한 대응하는 트랩 레벨의 현재 맵핑으로 교체한다. 이 트랩 스택 유닛은 현재의 맵핑에 의해 각 트랩 레벨에 대해 현재 맵핑되지 않았지만 각 트랩 레벨에 대한 맵핑이 불가능한, 각 트랩 스택 기억 엔트리의 이용불능 리스트를 유지하는 자원 리클레임 유닛을 또한 포함한다. 자원 리클레임 유닛은 트랩이 수취되는 시점마다, 이전의 맵핑에 의해 대응하는 트랩 레벨에 대해 맵핑된 트랩 스택 기억 엔트리를 상기 이용불능 리스트에 부가하고, 상기 수취된 트랩이 더이상 복구될 수 없게 되는 때마다 이전의 맵핑에 의해 대응하는 트랩 레벨에 대해 맵핑된 트랩 스택 기억 엔트리를 상기 이용 불능 리스트로부터 제거한다. 마지막으로, 트랩 스택 유닛은 체크포인트 기억 엔트리를 포함하는 체크포인트 기억 유닛을 포함한다. 각각의 형성된 체크포인트는 대응하는 체크포인트 기억 엔트리를 가지기 때문에 체크포인트 기억 유닛은 각각의 형성된 체크포인트에 대해, 리네임 맵핑 로직의 현행 맵핑 및 대응하는 체크포인트 기업 엔트리의 프리리스트 유닛의 현재 이용가능한 리스트를 기억한다. 체크포인트로의 각 백업에 대해, 리네임 맵핑 로직은 유지하고 있는 현행의 맵핑을 대응하는 체크포인트 기억 엔트리에 기억된 맵핑으로 대체하고, 프리리스트 유닛은 유지하고 있는 는 현재 이용가능 리스트를 대응하는 체크포인트 기업 엔트리에 기억된 이용가능 리스트로 대체한다.
상기한 문제점은 다수의 투기적으로 발행되고 예측된 명령의 실행 결과를 동시에 모니터링하기 위한 데이터 프로세서 및 관련 방법을 제공하는 본 발명의 또다른 양태에 의해 해결된다. 본 발명의 구조 및 방법은 프로세서 내의 하나 이상의 실행 유닛으로부터 실행 결과 신호를 수신하도록 결합된 워치포인트 데이터를 기억하기 위한 다수의 워치포인트 레지스터를 갖는 워치포인트 유닛을 제공한다. 투기적으로 발행되고 예측된 각 명령에 대한 예측된 상태 데이터 결과를 포함하는 워치포인트 데이터를 기억하기 위한 워치포인트 레지스터는 명령이 발행될 때 할당된다. 예측된 조건 데이터 결과는 투기적으로 발생된 명령의 제어 흐름 전달 방향이 의존하고 투기적으로 발행되고 예측된 명령이 투기적으로 발행되는 근거가 되는 저건의 예측된 값을 식별한다. 워치포인트 유닛은 실행 유닛(들)으로부터 데이터 전송 버스를 통해 전송되는 투기적으로 발행되고 예측된 명령에 대한 실행 결과 신호를 모니터하고, 기억된 워치포인트 데이터 및, 실제 조건 코드가 예측된 조건 코드와 매칭하는 지를 판단하는 소정의 법칙과 실제의 공지된 조건 데이터 결과 신호를 포함하는 실행 결과 신호에 기초하여 소정의 이벤트의 발생을 검출한다. 투기적으로 발행되고 예측된 명령중의 하나에 대해 워치포인트 레지스터에 기억된 워치포인트 데이터는 신호가 일치하는지 일치하지 않는지를 판단하기 위해 투기적으로 발행된 명령에 속하는 데이터 전송 버스를 통해 도달하는 결과 신호와 비교된다. 신호의 일치는 투기적으로 발행되고 예측된 명령이 정확하게 예측된 것임을 나타내고, 불일치는 투기적으로 발행되고 예측된 명령이 잘못 예측(예측 오류)된 것임을 나타낸다. 예측 오류가 식별되면, 프로세서는 이전의 상태로 복구되어 예측 오류에 기초하여 실행된 명령이 원래대로 복구되게 한다. 본 발명의 양태에 따라, 복수의 실행 유닛 및 복수의 예측된 분기 또는 점프 앤드 링크 명령을 포함하는 복수의 투기적으로 발행된 명령을 동시에 모니터하는 능력을 포함하는 실행 유닛으로부터 조건 코드 데이터를 동시에 획득하기 위한 구조 및 방법, 실행 유닛으로부터 데이터 전송 버스를 동시에 감시함으로써 예측된 분기 또는 점프 앤드 링크 명령이 기대하고 있는 다수의 조건 코드 데이터 또는 추정된 점프 앤드 링크 어드레스를 획득하기 위한 구조 및 방법, 분기 또는 점프 앤드 링크 명령의 복수의 예측 오류 신호를 동시에 발생시키기 위한 구조 및 방법, 하나의 공유 기억 영역에서 서로 다른 분기 어드레스 또는 예측된 점프 앤드 링크 어드레스를 기억하기 위한 구조 및 방법, 예측 오류가 프로세서 복구의 부분으로서 검출된 후에 명령 인출을 위해 정확한 분기 어드레스 또는 점프 앤드 링크 어드레스를 전송하기 위한 구조 및 방법 그리고 조건 코드 태그 비교와 획득의 태스크를 분리함으로써, 임계 경로를 가속화시키기 위한 구조 및 방법을 제공한다. 본 발명의 구조 및 방법의 일실시예에서, 상기 수개의 양태들이 바람직하게 결합되어 프로세서의 전체 성능을 향상시킨다.
도 4는 데이터 프로세서(50)의 상위 레벨 기능 블록도이다. 데이터 프로세서는 신규한 무순위(또는 순서무시) 투기적 실행(슈퍼스칼라) 중앙 처리 유닛(CPU)(51)을 포함한다. 예시적인 CPU는 SPARC-V9 아키텍쳐 매뉴얼에 개시되어 있는 SPARC-V9 명령어 세트를 실행할 수 있다. Englewood Cliffs(1994)에서 D.weaver 및 T. Germond에 의한 "The SPARC Architecture Manual" 9판이 인용에 의해 본원 명세서에 명백하게 통합된다. 그러나, 당업자는 여기에 설명된 신규한 디자인 및 방법이 SPARC-V9 아키텍쳐에 제한되지 않음을 알 수 있다.
실제로, CPU(51)는 모든 데이터 프로세서를 적용할 수 있는 정확한 머신 상태를 유지하면서 작업 처리량을 향상시킨 신규한 디자인 및 방법을 채용한다. 특히, 이것은 (1)프로세서 자원 및 상태를 모니터하고 복구하기 위해 명령을 트래킹하는 신규한 디자인 및 방법; (2)로드/기억 명령과 같은 긴 대기시간 명령을 적극적으로 스케줄링하기 위한 신규한 디자인 및 방법; (3) 머신 상태를 체크포인트하기 위한 신규한 디자인 및 방법; 및 (4)예외 및 예측 오류의 검출 후에 머신 상태를 복원하기 위한 신규한 디자인 및 방법을 채용한다.
본 명세서의 특정 실시예에 대한 설명의 개략이 참조 편의성을 위해 이하 제공된다. 이 제목에 관한 서두는 참조 편의성을 위해서만 제공되며, 그 절에 제공되는 설명의 적용가능성을 본 발명의 임의의 특정 범위 또는 실시예로 제한하는 것으로 해석되어서는 아니된다.
Ⅰ.CPU 동작 개요
Ⅱ .명령의 트래킹
A. 명령 인출
B. 명령 발행
1.명령 발행 개요
2.명령 일련 번호 할당 및 명령 상태 기억
a.명령 발행-회부-리클레임 유닛(ICRU)
b.명령 발행 관련 포인터 및 발행 스테이지 동안의 포인터 유지
3.레지스터 리네임 처리
4.예약 스테이션(reservation station)에 대한 디스패치
C.명령 실행 및 완료
D.명령 실행 스테이지의 PSU 참가
E.명령 회부
F.명령 철회 및 자원 복구
1. 명령 회부와 및 철회에서의 리네임 맵 및 RRF에 대한 갱신
2.명령 철회에서의 RRF 판독
3.포인터를 이용한 정확한 상태 유지
Ⅲ. 적극적인 긴 대기시간(로드/기억) 명령 스케줄링
A.메모리 명령 상태 정보 기억
B.긴 대기시간 정보의 트래킹 및 스케줄링을 위한 NMCSN 및 PBSN 포인터
C.NMCSN 진행
D.데이터 흐름 블록내의 로드-기억 유닛(LSU)
1.범위내 메모리 참조(긴 대기시간) 명령의 식별
2.긴 대기시간(로드/기억) 명령의 적극적인 스케줄링을 위한 기본적인 구조및 방법에 대한 강화
Ⅳ.체크포인트 처리
A.체크포인트 할당 레지스터의 구조
B.체크포인트 할당
C.체크포인트 철회
D.머신 백업에서의 체크포인트 유지
E.타임아웃 체크포인트 강화
F.임의의 명령 경계에서의 정확한 상태의 유지 및 복구
G.체크포인트 처리된 데이터량을 감소시키기 위해 소정 명령에 대해 머신을 동기화하는 방법
H.체크포인트된 데이터량을 감소시키기 위해 레지스터 리네임 맵을 체크포인트하기 위한 방법
Ⅴ.예측 오류 및 예외로부터의 회복
A.다수의 미해결 분기/점프-링크 명령을 동시에 평가하기 위해 워치포인트를 이용한 예측 오류 검출
1.워치포인트 엘리먼트의 기동
2.데이터 전송 버스로부터 직접 CC 데이터의 워치포인트 획득
3.워치포인트 동작예
4.분기 명령의 평가
5.JUMP_LINK(JMPL) 명령의 평가
B.예외 검출
1.발행 트랩의 검출
2.실행 트랩의 검출
C.이전 상태로 프로세서를 백트래킹하는 것에 의한 복구
1.체크포인트 경계로의 프로세서 백업
2.잘못 예측된 명령, RED 모드 및 실행 트랩 개시 백업
3.임의의 명령 경계로의 프로세서 백스텝
D.예외 및 예측 오류 회복 동안의 우선 순위 로직 및 상태 머신 동작
E.트랩 스택을 갖는 트랩의 처리
Ⅰ. CPU 동작 개요
CPU(51)는 레벨 1(L1) 명령 캐시(52)로부터 명령을 인출하고 레벨 1(L1) 데이터 캐시(53)에 데이터를 기억시키고 그 데이터 캐시(53)로부터 데이터를 검색한다. L1 명령 및 데이터 캐시는 CPU(51)와 동일한 칩/기판 상에 물리적으로 배치되건, 또는 다른 칩/기판 상에 어셈블리 될 수 있다.
CPU는 또한 메모리 관리 제어 유닛(MMU)(54)과 상호작용하여 데이터 프로세서(50)의 전체 상태를 판단한다. 특히, MMU는 외부 메모리(56)로부터 명령을 검색하고, 외부 메모리(56)에 데이터를 기억시키고 그로부터 데이터를 검색하며, 외부 I/O 디바이스(57)로부터 데이터를 수신하고 외부 I/O 디바이스(57)에 데이터를 출력하며, 외부 진단 프로세서(58), CPU(51) 및 캐시(52,53)에 진단 정보를 제공하고 그로부터 진단 정보를 수신하며, 데이터 어드레스 변환을 실행하고 메모리 상태 정보를 기억 및 트래킹한다.
도 5는 예측된 프로그램 제어 명령, 고정 및 부동소수점 명령 및 로드/기억 명령을 포함하는, 몇개의 전형적인 명령 타입을 위한 CPU(51)의 신규한 명령 파이프라인의 스테이지(및 관련 머신 사이클)를 도시한다. 이 파이프라인을 구현하기 위해, CPU(51)는 도 4에 도시된 것과 같이, 분기 블록(BRB)(59), 발행 블록 (ISB)(61), 및 데이터 흐름 블록(DFB)(62)을 포함한다.
도 4 및 도 5를 참조하면, BRB(59)는 인출 스테이지 동안 명령을 인출하고, 이들 명령을 ISB(61)에 제공한다. BRB(59)는 프로그램 제어 명령의 다양한 타입에 대해 타겟 어드레스 예측 및 분기 취득 또는 불취득 여부를 행한다. 따라서, 인출 스테이지 동안 투기적으로 명령을 인출할 수 있다.
ISB(61)는 명령이 투기적으로 인출될 수 있기 때문에 발행 스테이지 동안 예측된 프로그램 카운터(PC) 순서로 인출 명령을 발행한다. ISB는 또한, 미리 정의된 간격동안 제공되는 명령과, BRB(59)에 의해 예측되어지는 프로그램 제어 명령을 포함하는 발행 명령의 미리 정의된 타입에 대하여 발생 스테이지 동안 CPU(51)의 머신 상태의 체크포인트를 형성한다.
BRB(59)는 무작동(nop) 및 예측된 프로그램 제어 명령을 ISB(61)에 의해 이들 명령이 발행되는 스테이지와 동일한 스테이지에서 실행하고 완료한다. 그러나, DFB(62)는, 필요한 자원이 이용가능하게 되는 즉시, 발행된 고정소수점 및 부동소수점 명령을 실행하고 완료한다. 더욱이, DFB(62)는 필요한 자원이 이용가능할 때, 그리고 상기 실행 및 완료된 시점에서 예외(예컨대 발생 트랩, 실행 트랩 또는 인터럽트) 또는 프로그램 제어 예측 오류인 경우에 원래대로 복구할 필요가 없는 방식으로, 발행된 로드/기억 명령을 실행을 위해 적극적으로 스케줄링한다. 따라서, 몇 개의 고정소수점, 부동소수점 및 로드/기억 명령이 다른 것보다 더 빠른 발행 스테이지를 가질 수 있더라도, 필요한 자원이 아직 이용가능하지 않기 때문에 더 늦은 실행 및 완료 스테이지를 갖는다. 더욱이, 이들 명령은 BRB(59)에 의해 더 빠른 프로그램 제어 예측에 기초하여 BRB(59)에 의해 투기적으로 인출되어지기 때문에 투기적으로 실행 및 완료될 수 있다. 다시 말해, DFB(62)에 발행된 명령은 예측된 PC 순서와 다르게 실행 및 완료될 수 있다.
명령은 에러(예컨대, 발행 트랩, 실행 트랩, 또는 예측 오류) 발생없이 완료되면, 그 명령은 비활성 스테이지에서 ISB(61)에 의해 비활성화된다. 명령이 예측된 PC 순서와 다르게 완료될 수 있기 때문에, 명령은 또한 예측된 PC 순서와 다르게 비활성화될 수 있다.
비활성화 명령은 그 다음에 외부 스테이지 동안 실제 PC 순서로 ISB(61)에 의해 회부된다. 비활성화 명령은 이전에 발생된 모든 명령이 회부되지 않는 한 회부될 수 없다. 따라서, 명령이 회부되면, 예외 또는 예측 오류의 경우에 원래대로 복구되어질 수 없다. 이것은 이 지점까지의 실제 PC 순서가 정확하고, 명령이 실제 PC 순서로 회부된 것을 의미한다. 게다가, 체크포인트가 형성된 명형이 회부되면, 바로 이전의 체크포인트는 철회될 수 있다.
명령이 회부되면, 그 명령은 철회 스테이지에서 ISB(61)에 의해 실제 PC 순서로 철회된다. 명령이 철회된 후, 그 명령에 할당된 자원은 리클레임되며, 다른명령이 발행되었을 때 그 다른 명령에 다시 할당될 수 있다.
ISB(61)는 파이프라인 중의 어떤 지점에서 발생하는 예외 또는 프로그램 제어 예측 오류로부터의 회복을 처리한다. 따라서, 만일 프로그램 제어 예측 오류가 발생하면, ISB(61)는 오류 프로그램 제어 명령이 발행될 때 형성된 체크포인트로 CPU(51)를 백업한다. 유사하게, 만일 실행 트랩이 발생하면, ISB(61)는 먼저, 오류 명령이 발행된 후에 형성된 가장 빠른 체크포인트로 CPU(51)를 백업하고, 그러한 체크포인트가 형성되어 있는 경우 및/또는 오류 명령으로 CPU(51)를 백스텝한다. 체크포인트로 백업하고 및/또는 백스텝 하는 데 있어서, CPU(51)는 오류 명령의 발행 및 실행의 바로 이전에 존재였던 정확한 머신 상태로 복귀된다.
만일 ISB(61)가 프로그램 제어 예측 오류를 발생시키는 오류 명령으로 백업되었으면, BRB(59)는 정확한 프로그램 카운터값 및 정확한 머신 상태를 갖고서 명령의 인출을 개시한다. 그러나, ISB(61)가 실행 트랩을 발생시키는 명령으로 백업 및/또는 백스텝되었다면, ISB(61)는 적절한 트랩 처리 루틴을 위한 타겟 프로그램 카운터값을 BRB(59)에 제공한다. 이 트랩 처리 루틴은 그 다음에, 트랩을 처리하고 오류 명령의 프로그램 카운터값 또는 다음 프로그램 카운터값을 다음 명령을 인출하기 위한 BRB(59)로 복귀시킨다. 오류 명령의 프로그램 카운터는 트랩 처리 루틴에 의해 CPU(51)가 오류 명령을 인출하여 이 명령을 발행 및 실행을 재시도하는 경우에 리턴된다. 그러나, 다음 프로그램 카운터값은 트랩 처리 루틴이 CPU(51)에게 오류 명령의 발행 및 실행을 스킵하고 오류 명령 후의 다음 명령을 인출하는 경우에 복귀된다.
Ⅱ. 명령의 트래킹
상기 언급한 것과 같이, CPU(51)는 CPU(51)의 명령 파이프라인에서 명령을 트래킹하는 신규한 디자인 및 방법을 채용한다. 이 디자인 및 방법을 구현하기 위해, 파이프라인은 도 5에 도시되고 앞서서 간략하게 설명된, 인출, 발행, 실행, 완료, 비활성화, 회부 및 철회 스테이지를 포함한다.
A.명령 인출
도 4를 다시 참조하면, BRB(59)는 인출 스테이지 동안에 명령을 인출하고 그 명령을 ISB(61)에 제공한다. 도 6에 도시된 바와 같이, BRB(59)는 명령 프리패치 및 캐시 유닛(IPCU)(100)과 인출 유닛(102)을 포함한다.
IPCU(100)는 레벨 1(L1) 명령 캐시(52)로부터 4개의 명령(INSTs)을 동시에 검색할 수 있다. 검색된 명령은 BRB(59), ISB(61) 및 BFB(62)에서 사용하기에 더 적합한 포맷으로 IPCU(100)의 명령 레코더(101)에 의해 기록된다. 대안적인 실시예에서, IPCU(100)는 4개의 명령보다 많은 또는 적은 명령을 동시에 검색하도록 구현될 수 있다.
인출 유닛(102)은 인출 프로그램 카운터(FPC) 값, 아키텍쳐 프로그램 카운터 (APC) 값, 및 다음 아키텍쳐 프로그램 카운터(NAPC) 값을 계산하기 위한 프로그램 카운터(PC) 로직(106)을 포함한다. 각 머신 사이클에서 계산된 FPC, APC 및 NAPC 값은 PC 로직의 FPC, APC, 및 NAPC 레지스터(112-114)에 각각 기억된다. FPC 레지스터의 현행 FPC 값은 현행 머신 사이클에서 인출되고 있는 명령을 가리키며, APC 및 NAPC 레지스터(113,114)의 현행 APC 및 NAPC 값은 현행의 머신 사이클에서 ISB에 의해 발행될 수 있는 이전의 머신 사이클에서 인출된 첫번째 및 그 다음 명령을 가리킨다.
FPC 값에 응답하여, 4개의 명령(F_INSTs)이 동시에 IPCU(100)에 의해 인출된다. 대안적인 실시예에서는, 4개 이하 또는 그 이상의 명령을 동시에 인출되도록 구현될 수 있다.
각각의 FPC 값에 대해, 분기 이력 테이블(104)은 FPC 값에 의해 인출된 각각의 명령에 대해 분기 예측 필드(BRP)를 포함한다. 따라서, BRP 필드 각각은 FPC 값으로 인출된 각 명령에 대응한다. 만일 임의의 인출된 명령이 SPARC-V9 BPcc, Bicc, BPr, FBfcc 및 FBPfcc 명령과 같은 조건부 분기 명령이면, 그 대응하는 BRP 필드는 분기가 분기 명령의 차후 발행, 실행 및 완료 스테이지에서 취득된 것으로 예측되어야 하는지 또는 취득되지 않은 것으로 예측되어야 하는지를 식별한다. 분기 이력 테이블(104)은 FPC 값에 응답하여 인출 명령에 대한 BRP 필드를 출력한다. 그 다음에, BRP 필드는 인출 유닛(102)에 의해 대응하는 인출 명령(F_INSTs)에 첨가되어, 인출 회전 레지스터(110)가 수신하는 합성 명령을 제공한다.
인출 레지스터는 동시에 4개의 명령을 유지하기 위한 4개의 래치를 갖는다. 이 래치들은 ISU(200)에 의해 발생될 수 있는 다음의 4개의 명령을 예측된 PC 순서로 포함하는 4개의 슬롯(0-3)을 갖는 발행 윈도우를 형성한다. 그러나, 이전의 머신 사이클 동안, 인출 레지스터에 의해 유지된 명령의 일부는 상기 간단하게 설명한 바와 같은 발행 제약으로 인해 ISU(200)에 의해 발행되지 않을 수 있다. 인출된 명령이 예측된 PC 순서로 발행될 수 있도록 하기 위해, ISU(200)는 인출 레지스터가 최종 머신 사이클에서 적절한 래치로 발행되지 않은 명령을 배치하도록 제어하는 인출 레지스터 제어(FCH_REG_CNTRL) 신호를 발생시켜, 이들 명령들은 발행 윈도우에서 예측된 PC 순서로 존재하고 그에 따라 ISU(200)에 의해 예측된 PC 순서로 발행될 수 있게 한다. 또한, FCH_REG_CNTRL 신호에 응답하여, 인출 레지스터는 예측된 PC 순서로 다음에 올 방금 인출된 명령들을 남아있는 래치에 배치한다.
대안적인 실시예에서, 인출 레지스터는 동시에 4개 이상 또는 그 이하의 명령을 기억하도록 구현될 수 있다. 더욱이, 예시적인 CPU(51)가 인출 유닛(102)에 위치된 하나의 인출 레지스터와 함께 설명되었어도, 설명된 타입의 인출 레지스터는 디코딩을 수행하는 CPU의 각 블록에서 사용될 수 있다. 그리고, 인출 레지스터는 상기 블록 들에 배치하여, 디코딩된 명령들이 인출 레지스터에 기억되기 전에 초기의 디코딩이 인출 사이클 동안 행하여지고 나머지의 디코딩이 발행 단계에서 행하여지게 할 수 있다.
B. 명령 발행
1.명령 발행 개요
ISB(61)는 각 발행 스테이지동안 인출 명령을 발행한다. 도 7에 도시된 바와 같이, ISB(61)는 발행 유닛(ISU)(200), 정확한 상태 유닛(PSU)(300), 프리리스트 유닛(700), 및 제어 레지스터 파일(800)을 포함한다. 각 발행 스테이지 동안, ISU(200)는 BRB(59)의 인출 레지스터(110)로부터 동시에 4개의 명령(F_INSTs_BRPs)을 수신한다. 그에 따라, ISU(200)는 차후 설명되는 바와 같이, 다양한 발행 제약에 기초하여 얼마나 많은 명령이 발행되는 지를 결정하기 위해 이들 명령을 디코드한다.
인출 레지스터(110)는 각 발행 스테이지 동안, 4개의 명령을 동시에 ISU(200)에 제공하기 때문에, ISU(200)는 각 발행 스테이지 동안 4개의 명령까지 발행할 수 있다. 그러나, ISU는 각 발행 스테이지의 발행 윈도우에서의 4개의 명령을 예측된 PC 순서로 발행할 수 있을 뿐이다. 따라서, 임의의 다른 발행 제약으로 인해 현재의 발행 윈도우에서 명령중의 하나가 발행될 수 없다면, 이 명령 전의 발행 윈도우 슬롯에 있는 명령만이 현재의 발행 스테이지동안 발행될 수 있다. 대안적인 실시예에서, 인출 레지스터(110)는 발행 스테이지당 4개 이상 또는 그 이하의 명령을 ISU(200)에 제공하도록 구성될 수 있기 때문에, ISU(200)는 발행 스테이지마다 4개 이상 또는 그 이하의 명령까지 발행하도록 구성될 수 있다. 도 8을 참조하면, FPU(600), FXU(601), FXAGU(602) 및 LSU(603)는 발행된 명령에 대하여 자신들에게 디스패치된 명령 데이터를 기억하기 위한 예약 스테이션(reservation station) 또는 큐를 갖는다. 그러나, 발행 스테이지동안, 예약 스테이션의 일부는 디스패치된 명령 데이터를 기억하는데 이용가능한 충분한 기억 요소 또는 엔트리를 가지지 못할 수 있다. 그러므로, FPU(600), FXU(601), FXAGU(602) 및 LSU(603)는 디스패치된 명령 데이터를 수신하기 위해 FPU(600), FXU(601), FXAGU(602) 및 LSU(603)의 예약 스테이션에서 얼마나 많은 엔트리가 이용가능한지를 각각 표시하는 ENTRIES_AVAIL 신호를 출력한다. 따라서, ISU(200)는 ENTRIES_AUAIL 신호에 의해 지시되는 이용가능한 엔트리의 수에 기초하여 부동소수점, 고정소수점 및 로드/기억 명령을 발행한다.
또한, 예시적인 CUP(51)에서, FXU(601)는 프로그램 제어 명령, 곱셈/나눗셈 명령 및, 고정소수점 데이터 계산과 관련된 제어 레지스터 판독/기록 명령을 실행하는 DFB(62) 내의 유일한 실행 유닛이다. 따라서, 이 경우에 ISU(200)는 FXU(601)에 의한 실행을 위해 이들 종류의 명령들을 발행한다. 선택적인 실시예에서, FXAGU(602)는 프로그램 제어 명령, 곱셈/나눗셈 명령 및, 고정소수점 데이터와 관련된 제어 레지스터 판독/기록 명령을 실행하도록 또한 구성될 수 있다. 이 경우, ISU(200)는 또한 FXAGU(602)에 의한 실행을 위해 상기 종류의 명령들을 발행할 수 있다. 더욱이, 각각의 실행 유닛(600-603)은 발행된 명령을 각각 실행하거나 수행할 수 있는 하나 이상의 기능 유닛을 포함할 수 있다. 따라서, 발행될 수 있는 명령의 수는 각 실행 유닛 내의 기능 유닛의 수에 의존한다.
도 7를 다시 참조하면, PSU(300)는 ISU(200)에 의해 명령이 발행되는 것에 대해 발행 제약을 부과할 수 있다. PSU(300)는 만약 인출 레지스터(110)로부터 수신된 명령이 있으면 그중 어느 명령이 현재의 발행 스테이지동안 발행되어서는 안되는 것인지를 식별하는 ISSUE_KILL 신호를 출력할 수 있다. 차후 더 상세히 설명되는 것과 같이, ISSUE_KILL 신호는 예외가 검출된 후에, 또는 차후 설명되는 동기화 명령의 실행, 완료, 비활성화 및 철회 동안에, PSU(300)가 오류 명령으로 백업되거나 백스텝 될때 어서트된다.
특정 타입의 명령에 대해서, ISU(200)는 상기 각 동기화(동기) 명령들 중 하나를 발행하기 전에 CPU(51)가 동기화되는(동기되는) 것을 확실하게 한다. CPU(51)는 동기되어야 할 특정 명령 전의 모든 명령이 발행되고 실행되고 완료되고 비활성화되고 철회되었을 때 상기 특정 명령에 대해 동기화된다. 따라서, 인출 레지스터 (110)로부터 수신된 명령들 중 하나가 동기화 명령이라고 ISU(200)에서 판정할 때, ISU(200)는 그 명령에 앞서 발행 윈도우 슬롯의 명령이 발행될 때까지 및, CPU(51)가 동기화되었는 지를 표시하는 PSU(300)로부터의 MACHINE_SYNC 신호를 수신할 때까지 대기한다. 이것이 발생하면, 이 명령은 최초의 PC값(즉, 슬롯 0)을 갖는 명령을 위해 발행 윈도우의 슬롯에 존재하며, ISU(200)는 단지 그것을 발행한다. 예시적인 CPU(51)가 전술한 특정 명령 타입에 대한 머신 상태의 동기화 방법을 구현하더라도, 회부된 명령이 비투기적임이 보증되기 때문에, 대안적인 기술에서는 이전 명령의 회부 후에 동기화 명령의 발행을 허용할 수 있다.
ISU(200)는 SPARC-V9 아키텍쳐 매뉴얼에서 설명된 바와 같은, 명령의 발행을 달성하는 발행 트랩을 또한 검출한다. ISU(200)는 제어 레지스터 파일(800)로부터 제어 레지스터(CNTRL_REG) 필드를 수신하고, 인출 레지스터(110)로부터 수신된 명령(F_INSTs_BRPs)을 디코드하여 발행 타입의 어떤 트랩이 발행 스테이지 동안 발행되었는지 여부를 검출한다. 이는 SPARC-V9 아키텍쳐에 기초한 실시예에서, 이것은 SPARC-V9 아키텍쳐 매뉴얼에 따라 행하여진다. 더욱이, 다른 타입의 발행 트랩은 레지스터 제어를 요구하지 않으며, ISU(200)에 의해 디코딩된 명령 오피코드 (opcode)에 기초하여 취득되고 검출된다.
최초의 발행 윈도우 슬롯의 명령에 의해 발생된 발행 트랩만이 취득된다. 그러므로, 하나 이상의 발행 트랩이 검출되면, 최초의 슬롯의 명령을 발생시키는 발행 트랩의 슬롯 이전의 발행 윈도우 슬롯의 명령만이 ISU(200)에 의해 발행될 수있다. 더욱이, 종종 발생하는 발행 트랩에 대해, CPU(51)가 상기 설명된 방식으로 동기화되어, 발행 트랩은 투기적으로 취득되지 않는다. 대안적인 실시예에서, CPU(51)는 로직을 감소시키고 단순화하기 위해 발행 트랩이 슬롯 0에서만 발생되도록 구성될 수 있다.
각 발행 스테이지 동안, ISU(200)는 발행된 각 명령에 대해 일련 번호를 배분(할당)하고 이들 일련 번호(SNs)를 DFB(62)로 디스패치한다. 차후 상세히 설명되는 바와 같이, PSU(300)는 할당된 일련 번호를 사용하여 발행된 명령을 트래킹한다. 또한, 예시적인 CPU(51)에서, PSU는 발행된 그러나 아직 철회되지 않은 명령의 소정 개수만을 한번에 트래킹할 수 있다. 그러나, 발행된 명령이 철회될 때, 그들의 일련 번호는 이용가능하게 된다. 따라서, PSU(300)는 얼마나 많은 일련 번호가 현행의 발행 스테이지에 이용가능한지를 나타내는 신호 및 이들 이용가능한 일련 번호를 포함하는 신호를 포함하는 SN_AVAIL 신호를 ISU(200)에 제공한다. 만일 현행의 발행 스테이지 동안, SN_AVAIL 신호가 현행 이용가능한 일련 번호의 수가 발행될 수 있는 명령의 수보다 작다고 표시하면, 일련 번호가 할당될 수 있는 최초의 슬롯의 명령만이 실제로 발행된다.
또한 발행 스테이지 동안, ISU(200)는 CPU(51)의 머신 상태의 체크포인트가 모든 명령에 대해 형성되어야 하는지를 판단한다. 차후 상세히 설명되는 바와 같이, 체크포인트는 특정 타입의 명령에 대해, 소정의 발행 스테이지 간격으로 형성된다. 따라서, ISU(200)가 발행될 임의의 명령이 체크포인트를 필요로 한다고 결정하고/하거나 PSU(300)가 체크포인트가 형성된 최종 발행 스테이지 이후에 소정 개수의 발행 스테이지가 발생되었다는 것을 TIMEOUT_CHKPT 신호로 나타낼 때, ISU(200)는 DO_CHKPT 신호를 발행시켜 PSU(300), 제어 레지스터 파일(800), BRB(59) 및 DFB(62)가 CPU(51)의 머신 상태의 체크포인트를 형성하도록 한다.
또한, ISU(200)는 발행되는 각 명령에 체크포인트 번호를 할당하고 이들 체크포인트 번호(CHKPT_Ns)를 DFB(62)에 디스패치한다. 이렇게 함에 있어서, 체크포인트가 형성되어야 할 각 명령에는 새로운 체크포인트 번호가 할당되며, 체크포인트가 형성되지 않은 명령에는 이전 체크포인트의 체크포인트 번호가 할당된다. PSU(300)는 형성된 체크포인트를 할당된 체크포인트 번호를 이용하여 트래킹한다.
PSU(300)는, 할당된 일련 번호를 이용하여, 형성되었지만 아직 철회되지 않은 소정 개수의 체크포인트를 한번에 트래킹할 수 있을 뿐이다. 그러나, 체크포인트가 철회될때 체크포인트 번호는 이용가능하게 되기 때문에, PSU(300)는 ISU(200)에 얼마나 많은 체크포인트 번호가 현행의 발행 스테이지에 대해 이용가능한지를 나타내는 신호 및 이용가능한 체크포인트 번호를 포함하는 신호를 포함하는 CHKPT_AVAIL 신호를 제공한다. 따라서, CHKPT_AVAIL 신호가 현행 이용가능한 새로운 체크포인트의 수가 새로운 체크포인트가 형성될 것을 요구하는 명령의 수보다 적다고 표시하면, 새로운 체크포인트 번호가 할당될 수 있는 최초의 발행 윈도우 슬롯의 명령만이 실제로 발행된다.
또한, CPU(51)은 발행 스테이지당 소정 개수의 체크포인트만을 형성하도록 구성될 수 있다. 따라서, 예컨대, CPU(51)가 발행 스테이지당 하나의 체크포인트만을 형성할 수 있고 발행 윈도우에서 체크포인트가 형성되도록 요구하는 명령이 2개라면, ISU(200)는 현행 발행 스테이지 동안 최초의 슬롯에 있는 명령만을 발행하고 다른 발행 스테이지에서 다른 명령을 발행한다.
차후 설명되는 바와 같이, CPU(51)는 프로세서 작업 처리량을 향상시키기 위해 레지스터 리네임 처리를 채용한다. 레지스터 리네임 처리를 적절하게 구현하기 위해, ISU(200)는 레지스터 리네임 프리리스트 유닛(FREELIST)으로부터 REGS_AVAIL을 수신한다. 도 8을 참조하면, 이들 신호는 고정소수점 레지스터 파일 및 리네임 유닛(FXRFRN)(604)의 얼마나 많은 물리적 고정소수점 레지스터가 리네임 처리에 이용가능한지, 부동소수점 레지스터 파일 및 리네임 유닛(FPRFRN)(605)의 얼마나 많은 부동소수점 레지스터가 리네임 처리에 이용가능한지, 부동소수점 상태 및 조건 코드 레지스터 파일과 리네임 유닛(FSR/CCRFRN)(606)의 얼마나 많은 물리적 정수 및 부동소수점 조건 코드 레지스터가 리네임 처리에 이용가능한지를 나타내는 신호를 포함한다.
도 7에서 인출 레지스터(110)로부터 수신된 임의의 명령이 레지스터 리네임 처리를 요구하고, 물리적 레지스터가 리네임 처리에 필요하지만 REGS_AVAIL 신호에 의해 지시된 대로 이용할 수 없다면, ISU(200)는 상기 명령들을 발행할 수 없다.
상기 발행 제약은 발행 결정의 개념을 설명하기 위해 예시적인 CPU(51)에 관련하여 설명되었다. 더욱이, 서로 다르고 전술한 발행 결정의 기본 개념에서 벗어남이 없이 전술한 것보다 더 많거나 더 적은 발행 제약을 갖는 여러 가지 구현예가 존재할 수 있다. 따라서, 당업자는 발행 제약이 그 구현예에 따라 좌우되며, 여기에 설명된 본 발명이 전술한 발행 제약에 의해 제한되지 않는다는 것을 이해할 것이다.
2.명령 일련 번호 할당 및 명령 상태 기억
예시적인 CPU(51)는 명령이 발행된 시점으로부터 그 명령이 실행을 완료하고 최종적으로 철회될 때까지 그 명령과 관련된 고유의 식별 태그를 할당한다. 연속적인 일련 번호가 명령 식별 태그로서 편리하게 사용된다. 일련 번호는 각 스테이지 에서 사용되고, 또한 예외 없는 처리 동안 및, 예외 또는 예측 오류가 발생할 때 CPU(51)의 복구 동안 실질적으로 모든 블록에 의해 사용된다. 명령 상태 정보는 CPU(51)에 기억되며, 실행 완료 신호, 실행 에러 신호 및 분기 명령 예측 오류 등과 같은, 상태 변화에 응답하여 계속적으로 갱신된다. ISB(61)내에 있는 정밀 상태 유닛(PSU)(300)은 명령 일련 번호 태그를 할당하고, 다른 CPU(51) 유닛으로부터, 특히 DFB(62)로부터 수신된 신호에 응답하여 명령 상태를 트래킹하는 기능을 한다.
도 9를 참조하면, 정밀 상태 유닛(PSU)(300)은 기능적으로 ISB(61) 내에 있으며, (1) CPU(51)에서의 명령의 발행, 실행, 완료 및 철회 상태를 트래킹하고, (2) 분기 예측 오류 복구를 검출 및 개시하고, (3) 명령 일련 번호, 체크포인트 및 워치포인트를 포함하는 특정 머신 자원의 이용가능성을 트래킹하고, (4) 일반적인 예외를 처리 및 제어하는 기능을 한다. PSU(300) 내의 몇개의 유닛은 도 9에 도시되고 차후 상세히 설명되는 바와 같이, 상기 기능을 달성하도록 구현된다.
PSU(300)는 모든 발행된 명령에 대한 활동 상태 정보를 그 명령들이 철회될 때까지 유지하는 발행/실행/철회 유닛(ICRU)(301)을 포함한다. ICRU(301)는 다음 명령 발행 사이클에서 ISU(200)에 의한 사용을 위해 4개까지의 명령 일련 번호(SN's)를 식별하는 신호(SN_AVAIL)를 ISU(200)에 공급한다. ISU(200)가 명령을 발행하는 시점에서, ISU(200)는 상기 설명된 바와 같이, 어떤 일련 번호가 할당되고 어떤 일련 번호가 각 명령과 관련되는지를 식별하는 ISSUE_VALID 신호의 형태로, 이전 사이클에서 ISU에게 제공된(SN_AVAIL) 4개 까지의 일련 번호중 어느 것이 ISU에 의해 유효하게 발생되었는 지를 ICRU에게 통지한다. 발행 제약은 ISU가 명령 윈도우의 모든 명령을 발행하는 능력을 제한하는 것을 상기하자. ICRU(301)는 상태 정보 및 이 상태 정보에 대한 어드레스 포인터를 기억하고 유지하여 ISU(200)에 의해 유효하게 발행되는 모든 명령에 대한 명령 발행, 실행, 완료, 비활성 및 회부 및 철회 위상 상태를 명령의 타입과 관계없이 트래킹한다. ISU(200)는 발행된 명령중 어느 것이 명령이 발행된 스테이지와 동일한 스테이지에서 비활성화를 허용하는 무작동(nop) 및 특정 프로그램 제어 명령과 관련있는지를 신호 ISSUE_NOP로서 ICRU(301)에 또한 알려준다. ISSUE_NOP는 예컨대 정지 또는 지연을 유도하는 것과 같은 명령 스트림에 삽입될 수 있는 특정 "무작동" 명령에 제한되지 않는다. CPU(51)의 외부에 있는 메모리를 참조하는 로드/기억 및 기타 명령과 같은 긴 대기시간 명령을 적극적으로 스케줄링할 때, ISU(200)는 슬롯(0-3)에서의 어떤 명령이 긴 대기시간을 갖는지를 식별하는 ISSUE_MEM 신호의 형태로 ICRU(301)에게 또한 알린다. (긴 대기시간 명령을 적극적으로 스케줄링하는 것은 본 발명의 기본적인 구조 및 방법에 대한 향상으로서 따로 설명된다)
a. 발행/회부/리클레임 유닛(ICRU)
발행/회부/리클레임 유닛(ICRU)(301)은 기능적으로 PSU(300) 내에 있으며,n-비트의 연속적인 일련 번호와 같은 명령 태그를 할당하며, CPU(51)의 내부에 있는 메모리의 명령 상태 정보를 위한 데이터 기억 영역을 형성하고 유지함으로써 모든 발행된 명령에 대한 활동 상태 정보를 유지한다. 도 10은 ICRU(301)의 구성요소 및 ICRU 동작과 관련된 입력 및 출력 신호의 기능 블록도를 도시한다. ICRU(301)는 기능적으로 4개의 영역으로 조직된다. 명령 상태 정보 데이터 구조(308)는 명령 상태 정보를 기억하고, 다른 CPU(51) 유닛, 특히 DFB(62)로부터의 신호에 응답하는 데이터 구조 제어 로직(309)의 신호에 응답하여 상태를 갱신한다. 포인터 데이터 구조(310)는 CPU(51)에서 발행되고, 완료되고, 철회되는 등과 같은 다양한 명령 스테이지 이정표에 대해 상태 포인터로서 기능하는 다수의 일련 번호를 개별적으로 기억하기 위한 데이터 기억 영역을 포함한다. 이들 일련 번호 포인터는 본 명세서에서 차후 상세히 설명된다. 포인터 제어 로직(311)은 일련 번호 포인터를 갱신한 다음 현행의 CPU(51) 상태에 반영하기 위해, 다른 CPU(51)로부터 수신된 데이터와 함께, 데이터 구조(308)에 기억된 상태 정보를 평가하는 기능을 한다. 포인터 값은 ICRU(301) 및 PSU(300)로부터 CPU(51)의 다른 유닛으로의 글로벌 출력으로서 제공된다.
명령 상태 정보 데이터 구조(308)는 활성 명령 링 레지스터(A-ring)(312)를 포함하며, 메모리 명령 링 레지스터(M-ring)(324)를 선택적으로 포함할 수 있다. 메모리 명령 링 레지스터는 본 명세서의 다른 곳에서, 로드/기억 명령의 적극적인 스케줄링과 관련하여 설명된다. 데이터 구조 제어 로직(309)은 A-링 세트/클리어 로직(313)을 포함하며 선택적으로 M-링 세트/클리어 로직(325)을 포함할 수 있다.포인터 제어 로직(311)은 ISN/NISN 초기화 및 진행 로직(321), 다음 명령 일련 번호 할당 로직(322), 및 CSN/RRP 진행 로직(323)을 포함하며, 선택적으로 NMCSN 진행 로직(326), 머신 동기화 발생 로직(327), 및 백트래킹 모드 포인터 조절 로직 (328)을 포함할 수 있다. 선택적인 구성요소는 본 발명의 구조 및 방법의 향상시키며, 이하 더 상세히 설명된다.
명령 발행 스테이지 동안의 발행/회부/리클레임 유닛의 동작에 대하여 도 10을 참조하여 이하 설명한다. 발행된 명령에 대한 할당을 위해 ISU(200)에 전송된 일련 번호(SN_AVAIL)는 포인터 데이터 구조(310) 내의 포인터 값에 기초하여 ICRU의 일련 번호 할당 로직에 의해 선택된다. CPU(51)가 초기화되면(파워-업 등) 포인터 데이터 구조(310) 내의 포인터들이 또한 초기화디어 ICRU가 먼저 최초의 일련 번호를 발행 윈도우의 명령을 위해 ISU(200)(예컨대, SN의 0-3)에 할당하도록 한다.
ISU(200)는 ISSUE_VALID 신호를 데이터 구조 제어 로직(306)에 전송하여 이전 사이클에서 제공된 일련 번호 중 어느 것(예컨대, 4개의 SN중 어느 것)이 ISU(200)에 의해 유효하게 발행되었는 지와 어떤 명령 슬롯의 것인지를 ICRU에게 알려준다. 세트/클리어 A-링 제어 로직(313)은 이 정보 및 포인터 레지스터(310) j 내에 있는 포인터의 값을 이용하여 명령 상태 정보를 A-링(312)에 기록한다. CPU(51)의 일실시예에서, ISSUE_VALID는 명령이 실제로 발행된 명령 슬롯을 식별함으로써 명령 일련 번호(SN_AVAIL) 중 어느 것이 ISU(200)에 의해 실제로 사용되었는지를 ICRU에게 알려주는 4비트 벡터이다. 다음에, ICRU는 SN_AVAIL 및ISSUE_VALID에 기초하여 어떤 SN이 사용되었는지를 판단할 수 있다.
활성 명령 링(312)의 실시예가 도 11의 개략적인 도면을 참조하여 설명된다. 도 11의 데이터 구조는 예시적이며, 당업자는 본 발명의 견지에서, 다양한 데이터 구조가 활성 명령 상태 레지스터를 구현하는데 사용될 수 있음을 이해할 것이다. 도 11은 64비트 데이터 구조로서 구현된 활성 명령 링(A-링)(312)을 도시한다.(메모리 명령 링(M-링)(324)은 또한 개략적으로 도시되며 긴 대기시간 명령의 적극적인 스케줄링의 강화와 관련하여 본 명세서의 다른 곳에서 설명된다) A-링(312)의 64개의 어드레스 가능한 위치는 CPU(51)에서 명령 일련 번호에 각가 대응한다. 각 활성-비트(A-비트)의 세트("1") 또는 클리어("0") 상태는 명령이 CPU(51)에서 활성 상태("1")인지 또는 비활성 상태("0")인지를 나타낸다. 기본적으로, 명령은 발행된 경우 활성화되고 명령이 에러없이 실행 완료되고 잘못 예측되지 않은 경우 비활성화된다. 단일 머신 사이클에서 발행되어 유효하게 실행을 완료하는 명령에 대해, A-비트는 명령의 발행때 클리어된다. A-링(312)의 어드레스 가능한 위치의 수는 CPU에서 현행 발행될 수 있는 명령의 수를 제한한다.
예시적인 프로세서에서, A-링(312)은 포인터가 "modulo-A-링 레지스터 길이" 타입 산술(여기에서는 modulo-64 타입 산술)을 이용하여 데이터 구조를 따라 이동하는 원형, 링 또는 주위를 둘러싼 형태의 데이터 구조로서 구현된다. 즉, 포인터가 제1 데이터 기억 위치(어드레스 가능한 비트 0)로부터 일련의 중간 기억 위치(예컨대, 위치 15, 16,...)를 통해 최종 데이터 기억 위치(어드레스 가능한 비트 63)로까지 증가식으로 이동된 후, 그 포인터는 제1 위치(어드레스 가능한 비트 0)로 리턴한다. 당업자는 본 발명의 견지에서, 원형의 데이터 구조가 바람직하더라도, 본 발명에 필수적인 것은 아니며, 본 발명의 특징을 구현하는 다른 데이터 구조가 사용될 수 있음을 이해할 것이다. 또한, 예시적인 A-링이 요구되는 상태 정보를 유지하기 위해 64개의 단일-비트 어스레스가능한 위치를 가지더라도, 다수-비트 어드레스 가능한 위치가 이들 및 추가의 상태 지시자를 기억하기 위해 선택적으로 제공될 수 있다. 예컨대, 일실시예에서, 임의의 회전을 갖는 64비트 레지스터가 사용되며, 제2 실시예에서는, 8개의 8-비트 레지스터가 64개의 A-링(312) A-비트를 제공하도록 사용된다. 차후 설명되는 바와 같이, 간단한 디코딩 회로에 의해 비트를 기록(세트 및 클리어)할 수 있다.
ISU(200)에 의한 "명령 발행"에 의해 명령에 명령 일련 번호가 할당된다. 할당가능한 일련 번호의 수는 A-링(312)의 어드레스 가능한 위치(예컨대 비트 위치)에 의해 제한된다. 그러므로 각각의 어드레스 가능한 A-링 위치는 고유의 일련 번호에 대응한다. 예컨대, 예시적인 64-비트 원형 A-링에 대해서는 64개의 명령 일련 번호가 동시에 할당될 수 있다. 더 많거나 또는 더 적은 일련 번호가 더 많거나 더 적은 A-링 위치를 제공함으로써 할당될 수 있다. 만일 모든 일련 번호가 할당되면, 추가의 명령 발행은 일련 번호 및 A-링 상의 위치가 차후 머신 사이클에서 이용가능하게 될때 까지 ISU(200)에 의해 정지되어야 한다. ISU(200)는 SN이 SN-AVAIL 신호에 의해 이용가능한지의 여부를 통지 받는다. A-링(312)의 각 어드레스 가능한 위치는 이용가능한 일련 번호 각각에 대응하여, 기발행된 각 명령에 대해 하나씩, 기발행된 일련 번호 포인터(ISN)(314)를 전진시킴으로써 각각의 새롭게 발행된 명령에 대해 A-링에서의 엔트리가 형성되게 한다. 복수의 명령이 단일 머신 사이클동안 발행되기 때문에, 하나 이상의 A-비트가 각 사이클동안 세트될 수 있으며, 그에 의해 ISN은 각 사이클에서 하나 이상의 A-링 위치만큼 진행될 수 있다.
ISU(200)에 의한 "명령 디스패치"는 실행을 위한 명령(할당된 일련 번호를 가짐)의 활성화 및 DFB(62)로의 전송이다. 모든 디스패치된 명령은 또한 발행된 명령이지만, 모든 발행된 명령이 디스패치되는 것은 아니다. 모든 "디스패치된" 명령은 명령이 머신 내에서 활성 상태임을 표시하기 위해(1=활성 상태, 0=비활성 상태) "1"로 세트된, A-링(312)에서의 할당된 일련 번호에 대응하는 비트를 갖는다. 발행되었지만 디스패치되지 않은 명령은 공지된 분기 또는 무작동-타입 명령에 대응하며, 이들 명령에 대해 A-비트는 발행시에 클리어된다(세트되지 않음). 이들 공지된 분기 및 무작동-타입 명령은 실행 유닛이 작동하는 것을 요구하지 않으며, 단일 스테이지에서 발행되고, 실행되며, 완료될 수 있다.
b. 명령 발행 관련 포인터 및 발행 스테이지 동안의 포인터 유지
도 11은 포인터 기억 메모리 영역(310)에 기억되며 A-링(312) 및 M-링(324) 상의 위치를 가리키는 몇개의 포인터(ISN, NISN, CSN, RRP, NMCSN 및 PBSN)를 도시한다. 각 포인터는 A-링의 각 위치값(0-64)을 기억하는 포인터 기억 유닛(210)의 요소이다. 포인터의 특정 조합은 동일한 A-링 또는 M-링 위치를 가리킬 수 있지만, 다른 조합은 그렇지 않다. 예컨대, NISN은 ISN과 절대로 동일할 수 없지만, 머신에서는 CSN=ISN=RRP로 "동기화"한다. 발행된 일련 번호 포인터(ISN)(314) 및 다음 발행된 일련 번호 포인터(NISN)(315)는 명령 발행 상태를 유지 및 트래킹하며, 일반적으로 다른 포인터의 장점을 제한한다. 회부된 일련 번호 포인터(CSN)(316)는 포인터가 특별히 제공되지 않은 명령의 실행, 완료 및 비활성화 다음에 오는 명령 회부를 트래킹한다. 철회 및 리클레임 포인터(RRP)(317)는 명령 철회를 트래킹하고 자원 리클레임을 제어한다. 2개의 추가적인 포인터, 즉 최초로 예측된 분기 명령 포인터(PBSN)(319) 및 비메모리 회부된 일련 번호 포인터(NMCSN)(318)는 예측된 분기 명령 및, 로드/기억 명령과 같은 긴 대기시간 명령의 실행을 스케줄링하고 트래킹하는데 사용된다. ICRU(301)은 ISN, NISN, CSN, RRP 및 NMCSN 각각에 대한 현재 값을 CPU(51) 내에 있는 다수의 다른 유닛에 제공한다. ICRU는 차후 설명되는 바와 같이, PSU(300) 내의 워치포인트 유닛(308)으로부터 PBSN(318)의 값을 수신한다. 이들 각 포인터는 예시적인 CPU에서 6-비트 벡터로서 구현된다.
발행된 일련 번호 포인터(ISN)(314)는 항상 최종적으로 발행된 명령의 일련 번호를 가리킨다. 명령은 ICRU에 의해 공급되는 일련 번호중의 하나가 ISU(200)에 의해 실제로 할당되었을 때, 발행된 것으로 간주된다. ISN 및 NISN은 상기 사이클동안 실제로 발행된 명령의 수를 ICRU에게 알려주는 ISU(200으로부터의 ISSUE_VALID에 응답하여 증가된다. ISN 및 NISN이 증가될때, 포인터는 유효하게 A-링(312) 둘레에서 전진된다. ISN이 각 머신 사이클에서 진행할 수 있는 위치의 최대수는 머신의 피크 발행율에 의해 결정되지만, 하드웨어를 제어하는 다른 소프트웨어에 의해 사이클당 명령을 상기 최대수 보다 더 적은 소정의 최대수로 제한될 수 있다. 예컨대, 예시적인 CPU에서, ISN 및 NISN의 전진은 머신 사이클당 4개의 명령 일련 번호(A-링 위치)로 제한된다. CPU가 초기화될때 ISN은 0(제로)로 초기화되며, 추가적인 명령이 발행되면 ISN은 새롭게 발행된 명령의 수만큼 진행된다.
다음 발행된 일련 번호 포인터(NISN)(315)는 항상 ISN+1(modulo A-링 길이)을 가리키기 때문에, 만일 ISN=63 이면, NISN=0이다. A-링(312)은 64개의 엔트리를 포함하며, NISN=ISN+1(modulo 64)이다. 이것은 본질적으로 발행될 다음 명령의 일련 번호가 된다(모든 명령은 예측된 PC 순서로 발행된다). 개별 포인터 NISN을 제공하는 것이 간편하더라도, NISN은 항상 ISN보다 1이 더 크기 때문에 일부 실시예에서는 ISN만을 사용할 수 있다. CPU가 초기화되면, NISN은 1로 초기화되며, 추가적인 명령이 발행되면, NISN은 새롭게 발행된 명령의 수만큼 전진된다. ISN 및 NISN의 초기화 및 전진은 ISU(200)로부터의 ISSUE_VALID에 응답하여 ISN/NISN 진행 로직 유닛(321)에 의해 구현된다.
ICRU(301)는 발행될때 명령에 할당될 수 있는 4개의 이용가능한 명령 일련 번호를 ISU(200)에 제공한다. 적절한 4개의 명령 일련 번호의 결정은 ISN(314) 및 NISN(315)의 현행값에 기초하여, 포인터 제어 로직 유닛(311) 내의 다음 명령 일련 번호 할당 로직(322)에서 이루어진다. RRP(317)는 만일 CU가 완전히 채워졌으면, 즉 모든 SN가 할당되었고 리클레임되지 않았다면, SN의 할당을 제한한다. ICRU(301)는, 만일 일련 번호가 SN_AVAIL 신호를 ISU(200)로 전송함으로써 이용가능하면, 발행된 명령에 할당되어야 하는 다음 시리즈의(4개의) 일련 번호를 ISU(200)에게 알려준다.
CPU(51)의 일실시예에서, SN_AVAIL은 발행 윈도우의 슬롯 0-3에 있는 최대 4개의 명령에 할당되어지는 일련 번호를 식별하는 4개의 7-비트 신호(SN_SLOT_0,SN_SLOT_1, SN_SLOT_2, SN_SLOT_3)로 구성되어 있다. 6개의 비트는 일련번호를 제공하고 7번째 비트는 일련번호 유효성 비트이다. 만일 일련 번호의 유효성 비트가 세트되지 않으면, 명령 일련 번호는 CPU(51)에서 아직 활성 상태이며, ISU에 의해 사용되지 않아야 한다. 유효 비트는, 만일 64 비트 A-링(312)에 의해 지원되는 모든 64개의 명령이 CPU(51)에서 활성 상태에 있으면 세트되지 않을 수 있다. 일련 번호가 사용가능한 경우에만 ISU(200)는 명령을 발행할 수 있기 때문에, ISU는 추가적인 명령이 발행되기 전에, 이전에 발행된 명령이 회부되고 철회될 때까지 대기해야 한다. 명령 회부 및 철회는 차후 설명된다.
도 12는 A-링 비트 세트/클리어 로직(ASCL)(313)의 구조를 포함하는 상태 제어 로직 유닛(309)을 더욱 상세히 도시한다. ASCL(313)은 세트 로직(331) 및 클리어 로직(333)뿐만 아니라 세트 및 클리어 로직 유닛(331,333)과 각각 관련된 어드레스 디코드 로직 유닛(332,334)을 포함한다. 세트 로직 유닛(331)은 ISU(200)로부터의 ISSUE_VALID 신호 및, 어드레스 디코드 로직 유닛(332)으로부터의 디코딩된 NISN 포인터 어드레스를 수신한다. A-링 세트 로직 유닛(331)은 그 다음에, ISU에 의해 실제로 발행된 명령의 수에 대응하는 A-비트를 A-링 기록 포트(342)를 통해 "1"로 세트한다. A-비트는 명령이 비활성화되고/되거나 CPU가 리셋되면 클리어된다. 기록 포드(342)의 수는 각 사이클에서 활성화(또는 비활성화)되는 명령의 마커를 지원하도록 선택된다. M-링(342)과 관련된 도 12의 다른 구조에 대해서는 긴 대기시간 명령의 적극적인 스케줄링과 명령 위임 및 철회와 관련하여 차후 설명된다.
일실시예에서, ISSUE_VALID는 위치 비트-i에서의 어서트(assertion)(안정상태일 때, 즉 고신호 레벨로 세트된 비트)가 i번째 명령 발행 윈도우 슬롯의 명령이 발행되었음을 나타내는, ISU(200)로부터 수신된 4비트 벡터이다. ICRU(301)는 어떤 일련 번호가 어떤 슬롯과 관련되는지를 상기 설명된 SN_SOLT_i 신호에 의해 알 수 있다. 명령은 순차적인 프로그램 순서로 발행되기 때문에, 4개의 명령 발행 CPU의 ISSUE_VALID에 대하여 단지 5개의 가능한 상태("0000","0001","0011","0111" 및 "111")만이 존재한다. ICRU는 전술한 바와 같이, 명령이 무작동 타입 명령임을 ICRU에게 알려주는 ISU로부터의 "NOP 타입" 명령 신호(ISSUE_NOP)를 또한 수신한다. CPU(51)의 일실시예에서, ISSUE_NOP는, 위치 비트-i에서의 어서트가 슬롯의 i번째 명령이 "비작동(no-op)" 부류의 명령임을 가리키는, 4-비트 신호이다. 로컬/기억 명령을 적극적으로 스케줄링하는 것을 구현하는데 있어서, ISSUE_MEM은, 위치 비트-i에서의 어서트가 슬롯의 i번째 명령이 메모리 참조 명령임을 나타내는 4-비트 신호이다.
일반적으로, 무작동(no-op) 명령은 분기와 같은 제어 전송 명령이거나 또는 기록 ASR, 기록 FPRS 또는 기록 PIL 명령이다. 명령 "기록 ASI", "기록 FPRS" 및 "기록 PIL"은 DFB(62)에서가 아닌 대응하는 제어 레지스터 유닛(800)에서 실행되며, 그에 따라 NOP-타입 명령으로서 취급된다. 결과적으로, 그 대응하는 ISSUE_NOP는 '1'로 세트되어, A-비트kf '0'으로 세트되게 한다. Tcc 명령은 CC를 알지 못할때 발행되지 않는다. Tcc명령은 만일 CC가 공지되고 잘못되었으면, NOP 명령으로서 발행된다. Tcc 명령은 다른 경우에 있어서, ISSUE_NOP=0에 의해 발행된다. 이들 명령은 DFB(62) 실행 유닛을 필요로하지 않으며 발행될때와 동일한 머신 사이클에서 실행되고 일반적으로 완료한다. 대응하는 명령이 "분기" 명령과 같은 "무작동" 명령 부류일때, ISSUE_NOP는 "1"로 세트된다. ISSUE_NOP가 "1"로 세트되면, 대응하는 A-비트는 '0'으로 세트되는데, 즉 명령은 즉시 비활성화되고 회부가능하게 된다.(명령 회부 및 회부에서의 A-비트의 수정은 차후 설명한다)
A-링의 64개의 활동 비트는 CPU에 공존하는 명령의 활동 상태를 나타낸다. A-비트는 그들이 사용되기 전에 매 사이클에서 세트되고 클리어되기 때문에 초기화할 필요가 없다. A-비트는 ISSUE_VAVLID, ISSUE_NOP 및 NISN에 따라 세트된다.
분기 명령은 발행시에 클리어되는 A-비트를 가지기 때문에, CSN(316)(차후 설명 참조)이 투기적으로 실행된 분기 명령을 지나서 진행하는 것을 방지하기 위한 추가적인 단계가 취해진다. 예시적인 실시예에서, 분기 조건 코드는 분기 명령이 발행된 시점에서 워치포인트 유닛(304)에 기억된다. 워치포인트 유닛934)는 명령 실행을 모니터하여 투기적으로 발행된 분기 명령이 완료되었을 때, 워치포인트는 실행 결과를, 투기적인 발행을 유효하게 하는데 필요한 분기 조건 코드와 비교한다. 조건 코드 비교에 의해 투기적인 실행이 정확하게 예측되었는지를 결정할 수 있다. 만일 투기적인 실행이 잘못되었으면, CPU(51) 복구 방법(백업 및/또는 백스텝)이 실행을 원상태로 복구하도록 개시되며, 그에 의해 CSN이 클리어된 A-비트에 상관없이 잘못 예측된 분기를 지나서 진행하지 못하도록 하며, 그렇지 않은 경우에는 복구는 불가능하다. 부정확하게 발행된 명령 시퀀스의 명령 회부를 방지하도록 충분히 신속하게 머신 복구를 개시하는 것에 특별한 주의가 요구된다. 평가 이전에, 계류중인 명령 자신이 잘못 예측된 명령 시퀀스의 회부를 방지한다. 워치포인트 및 CPU(51) 복구는 본 명세서의 다른 곳에서 더 상세히 설명된다.
명령 상태를 트래킹하고 정확한 상태를 유지하기 위해 명령 태그를 사용하는 방법을 포함하는 본 발명의 방법에 대한 실시예가 도 13-도 15의 플로우 챠트에 도시되어 있다. 도 13은 명령 상태를 트래킹하고 정확한 상태를 유지하기 위해 명령 태그를 사용하는 방법에 대한 실시예의 개략적인 플로우 챠트이다. 도 14는 정확한 상태를 유지하기 위해 명령 상태를 트래킹하기 위한 본 발명의 방법에 대한 실시예의 개략적인 플로우 챠트이다. 도 15는 본 발명의 실시예에 따라, 활성 명령 링 및 메모리 명령 링에 상태 정보를 기록하고 유지하는 방법에 대한 플로우 챠트이다.
3.레지스터 리네임 처리
머신 사이클당 더 많은 명령이 ISU(200)에 의해 발행될 수 있도록 레지스터 의존성을 제거하기 위해, CPU(51)는 발행 스테이지동안 레지스터 리네임 처리를 실행한다. 이 처리는 1994년 10월 11일에 Shebanow 등에게 허여된 미국 특허 제5,355,427호 및/또는 앞에서 인용한 "METHOD AND APPARATUS FOR COORDINATING THE USE OF PHYSICAL REGISTERS IN A MICROPROCESSOR" 이란 명칭의 미국 특허 출원 제08/388,364호 및/또는 M. Johnson's의 논문Superscalar Microprocessor Design의 48-55쪽에 개시되어 있는 것과 유사한 방법으로 달성될 수 있다.
도 8를 참조하면, 레지스터 리네임 처리를 구현하기 위해, DFB(62)는 FSR/CCRFRN(606)의 FXRFRN(604), FPRFRN(605) 및 CCRFRN(610)을 포함한다. 상기 간단하게 설명된 바와 같이, FXRFRN(604)는 고정소수점 데이터를 기억하기 위한 물리적 고정소수점 레지스터를 포함하며, CCRFRN(605)은 부동소수점 데이터를 기억하기위한 물리적 부동소수점 레지스터를 포함하며, CCRFRN(610)은 정수 및 부동소수점 조건 코드 데이터를 기억하기 위한 물리적 정수(고정소수점) 및 부동소수점 조건 코드 레지스터(XICC 및 FCCs)를 포함한다. FXRFRN(604), FPRFRN(605) 및 CCRFRN(610)은 각각 도 16에 도시된 것과 같이 구성될 수 있다.
도 16에 도시된 바와 같이, 레지스터 파일 및 리네임 유닛(RFRN)(612)은 물리적 레지스터를 포함하는 물리적 레지스터 파일(614)을 포함한다. RFRN은 또한 물리적 레지스터 파일(614)의 물리적 레지스터에 대한 명령에 의해 특정된 논리적 및/또는 아키텍쳐 레지스터를 맵핑하는 리네임 맵핑 로직(613)을 포함한다. 예컨대, SPARC-V9 명령에 의해서, FXRFRN(604)의 리네임 맵핑 로직은 128개의 물리적 고정소수점 레지스터에 대해 80 논리로 구축된 32의 맵핑을 실행할 수 있으며, 32개의 아키텍쳐 또는 논리적 단일 및 이중 정밀도(precision)의 부동소수점 레지스터는 64개의 단일 정밀도(32-비트) 리네임된 부동소수점 레지스터(홀수 및 짝수)의 2개의 세트로 맵핑되고, 5개의 아키텍쳐 또는 논리적 조건 코드 레지스터(xicc, fcc0, fcc1, fcc2 및 fcc3)는 32개의 리네임된 조건 코드 레지스터로 맵핑한다. 아키텍처-놀리적 맵핑은 SPARC-V9 고정소수점 명령이 도 17에 도시된 제어 레지스터 파일(800)의 CWP 레지스터에 기억된 현재의 윈도우 포인터(CWP)에 따라서 논리적 레지스터로 맵핑하는 아키텍쳐 레지스터를 특정한다는 사실에 기인한다.
RFRN의 제어 로직(613)은 각 발행 스테이지동안, BRB(59)의 인출 레지스터로부터 명령(F_INSTs_BRPs)을 수신한다. 그에 따라, 제어 로직(613)은 명령을 디코드하고, 어느 명령이 특정 RFRN의 레지스터 파일(614)로부터 소스 및/또는 목적으로서 물리적 레지스터를 필요로 하는지를 결정한다.
리네임 맵핑 로직(615)은 먼저 명령에 의해 특정된 각 논리적 또는 아키텍쳐 소스 레지스터를 레지스터 파일의 현행 맵핑된 물리적 레지스터로 맵핑하고, 대응하는 물리적 레지스터 태그를 TAGS_R 신호로 적절한 실행 유닛(FPU(600), FXU(601), FXAGU(602), 또는 LSU(603))의 예약 스테이션에 제공한다. 각각의 물리적 레지스터 태그에 대하여, 리네임 맵핑 로직은 맵핑된 물리적 소스 레지스터의 데이터가 소스로서 아직 이용가능한지를 식별하는 데이터-유효(DV) 비트를 갖는다. DV 비트는 리네임 맵핑 로직(615)에 의해 적절한 실행 유닛의 예약 스테이션에 DV_R 신호로 제공된다. 또한, 데이터는 DV 비트에 의해 나타나는 것과 같이 이용가능하다면, 그 데이터는 맵핑된 물리적 소스 레지스터에 의해 DATA_R 신호로 제공된다.
각 RFRN(즉, FXRFRN(604), FPRFRN(605), 및 CCRFRN(610))에 대해, FRELIST 유닛(700)은 RFRN의 레지스터 파일(614)의 모든 프리 상태의 물리적 레지스터에 대한 리스트를 포함한다. 프리 또는 이용가능한 레지스터는 철회되지 않은 명령에 의해 현재 이용되지 않고 있는 레지스터이다. 이들 이용가능한 물리적 레지스터는 각 사이클에서 FREELIST 유닛(700)으로부터의 FREE_REGS 신호에 의해 식별된다.
따라서, 논리적 또는 아키텍쳐 소스 레지스터가 맵핑된 후에, 리네임 맵핑 로직(615)은, 명령에 의해 특정된 각 논리적 또는 아키텍쳐 목적 레지스터를 FREE_REGS 신호에 의해 식별되는 이용가능한 즉 프리 상태인 물리적 레지스터로 맵핑하고, 이 레지스터의 데이터가 아직 이용가능하지 않음을 나타내도록 대응 DV 비트를 세트한다. 그런 다음 리네임 맵핑 로직(615)은 새롭게 맵핑된 물리적 목적지 레지스터에 물리적 레지스터 태그를 제공하고 대응하는 DV 비트를 TAGS_R 및 DV_R 신호로 적절한 실행 유닛의 예약 스테이션에 제공한다.
더욱이, 리네임 로직(615)은 이전의 물리적 레지스터에 대한 논리적 또는 아키텍쳐 레지스터의 맵핑을 PSU(300)의 리클레임 포맷 유닛(RRF)(302)에 제공한다. 이것은 이전에 맵핑된 물리적 목적지 레지스터에 대한 논리적 또는 아키텍쳐 레지스터 태그 및 물리적 레지스터 태그를 RRF(302)에 LOG_OPHYS_TAGS 신호로 전송함으로써 행하여진다. 각 RFRN(612)으로부터의 LOG_OPHYS_TAGS 신호는 이들 신호가 특정 RFRN으로부터 출력되고 있음을 표시하기 위한 필드를 포함한다.
RRF(302)는 도 18에 상세히 도시되어 있다. RRF는 데이터 기억 구조(366)를 포함한다. 발행되었지만 아직 철회되지 않은 명령이 64개까지 일련 번호를 할당받을 수 있는 예시적인 CPU에서, 데이터 기억 구조(366)는 64개의 어드레스 가능한 기억 엘리먼트 또는 엔트리를 포함한다. 각각의 기억 요소는 각각의 명령 일련 번호에 대응한다. 더욱이, 데이터 기억 구조(366)의 각 기억 요소는 이전의 물리적 맵 필드에 대한 FP 또는 FX 논리적 맵 필드 및, 이전의 물리적 맵 필드에 대한 FCC 또는 XICC 논리적 맵 필드를 포함한다. 다양한 구조가 RRF(302)를 구현하기 위해 사용될 수 있다. 일실시예에서, RRF는 64개의 레지스터 x 29-비트의 4-뱅크가 삽입된 RAM으로서 구현되는데, 필드는 RRF 사이클로의 기록동안 패키지되거나 묶여지며, 백스텝 동안, 판독에 근거하여 언패키지되거나 묶인것이 풀려진다.
RRF의 제어 로직(365)은 DFB(62)로부터 LOG_OPHYS_TAGS 신호들을 수신하고,어느 신호가 FXRFRN(604)로부터의 부동소수점 레지스터 태그, FPRFRN(605)로부터의 고정소수점 레지스터 태그 및 CCRFRN(610)으로부터의 XICC 및 FCC 태그를 포함하는 지를 판정한다. 제어 로직(365)은 또한 PSU(300)의 ICRU(301)로부터 NISN 포인터를 수신하고 ISU(200)으로부터 ISSUE_VALID 신호를 수신한다. NISN 포인터 및 ISSUED_VALID 신호에 응답하여, 제어 로직(365)은 LOG_OPHYS_TAGS 신호로 수신되는, 발행된 명령의 일련 번호를 결정한다.
예시적인 CPU(51)에서, 명령들은 부동소수점 및 FCC 레지스터를 동시에 수정하거나 또는 고정소수점 및 XICC 레지스터를 동시에 수정할 수는 있지만, 고정소수점, 부동소수점, XICC 및 FCC 레지스터를 동시에 수정할 수 없다. 따라서, 고정소수점 또는 부동소수점 논리적 레지스터 태그 및 이전의 물리적 레지스터 태그가 LOG_OPHYS_TAGS 신호로 수신되는 각 명령에 대해서, 제어 로직(365)은 이들 태그 (FP_TAGS 또는 FX_TAGS)를, 발행된 명령의 일련 번호에 대응하는 기억 요소의 물리적 맵 필드에 대한 FP 또는 FX 논리적 맵 필드에 기록한다. 유사하게, FCC 또는 XICC 논리적 레지스터 태그 및 이전의 물리적 레지스터 태그가 수신되는 각 명령에 대해서, 제어 로직(365)은 이전의 물리적 태그에 대한 FCC 또는 XICC 논리적 태그를 발행된 명령의 일련 번호에 대응하는 기억 요소의 물리적 맵 필드에 대한 FCC 논리적 맵 필드에 기록한다. 따라서, 명령이 목적 레지스터로서 부동소수점과 FCC 레지스터, 또는 고정소수점과 XICC 레지스터를 필요로 하는 경우, 이 명령에 대한 LOG_OPHYS_TAGS 신호에 의해 포함된 논리적 레지스터 태그 및 이전의 물리적 레지스터 태그는 동일한 기억 엘리먼트에 기록된다. 그러나, 당업자는, RRF(302)가 고정소수점, 부동소수점, XICC 및 FCC 레지스터를 동시에 수정하는 명령을 위해 이전의 물리적 맵핑에 대한 논리적 맵핑을 기억하도록 구성될 수 있음을 이해한다.
따라서, RRF(302)는 순차적인 이력의 레저(ledger)로서 기능하며, 필요한 경우에는, 이전의 놀리적-물리적 지스터의 맵핑 또는 그 관계가 재구성될 수 있다. 예컨대, 만일 SN="X"에 대응하는 명령을 원래대로 복구하는 것이 필요하게 되면, 논리적 레지스터 태그 및 이전의 물리적 레지스터 태그는 인덱스로서 SN="X"를 이용하여 RRF에서 식별된다. 그런 다음, 이들 태그는 적절한 RFRN에게 제공되어, 명령 SN="X"의 실행 바로 이전에 존재하는 롤리적-물리적 레지스터의 맵핑을 복구하고 새롭게 맵핑된 물리적 레지스터는 프리리스트로 리턴된다. 이는 레지스터 리네임 처리를 효과적으로 되돌리고 명령의 실행 바로 이전에 존재하는 상태로 레지스터 상태를 복구시킨다. 몇개의 명령을 원래대로 복구하는 것이 필요하다면, 동일한 절차가 ISN에 의해 개시되는 SN="X"로 다시 디크리먼트되는 반전된 스텝 바이 스텝원리에 적용된다. 이 처리는 차후 상세히 설명된다.
도 19는 논리적 소스 레지스터(L14, L42) 및 목적 레지스터(L47)를 구비한 덧셈 명령에 대한 레지스터 리네임 처리의 예를 제공한다. 상기한 것에 따라, 논리적 소스 레지스터(L41, L42)는 리네임 맵핑 로직(615)에 의해 물리적 레지스터 (P50,P52)에 맵핑된다. 그런 다음, 논리적 목적 레지스터(L47)는 FREELIST 유닛 (700)에 의해 제공되는 프리 물리적 레지스터(P99)에 재맵핑되며, 논리적 레지스터 (L47)에 대한 논리적 레지스터 태그 및 이전에 맵핑된(이전의) 물리적 레지스터 (P78)에 대한 물리적 레지스터 태그가, 덧셈 명령에 할당된 일련 번호(SN=13)를 가지고 맵핑하기 위해 RRF에 제공된다. 이 예로부터 명백하듯이, 각 "물리적" 레지스터 태그는 (1 )프리리스트(700); (2) FXRFRN(604), FPRFRN(605), 또는 CCRFRN(610)의 리네임 맵핑 로직; 및 (3) RRF(302)의 각각에 또는 그중 하나에 나타난다.
4.예약 스테이션에 대한 디스패치
도 8을 참조하면, 발행 스테이지동안, FPU(600), FXU(601), FXAGU(602) 및 LSU(603)의 예약 스테이션은 BRB(59)로부터 F_INSTs_BRPs 명령을 수신한다. 그에 따라, 예약 스테이션 각각은 이들 명령으로부터 외 코드 및 즉시 데이터를 추출한다.
FPU(600), FXU(601), FXAGU(602) 및 LSU(603)의 각각의 스테이션은 또한 발행된 명령에 할당된 일련 번호 및 체크포인트 번호를 발행 스테이지 동안 수신한다. 이들은 ISB(62)로부터 수신된 SNs 및 CHKPT_Ns 신호에 의해 제공된다.
부동소수점 데이터와 관련된 산술 명령 및 판독/기록 명령을 실행하기 위해, FPU(600)의 예약 스테이션은 FSR(607)의 FPRFRN(605) 및 CCRFRN(610)으로부터 이용 가능한 데이터, 데이터 유효 비트, 및 FP 및 CC 물리적 레지스터 태그(FP_DATA_R, FP_DV_R, FP_TAGS_R, CC_DATA_R, CC_DV_R, CC_TAGS_R)를 발행 스테이지 중에 수신한다. 유사하게, FXU(601)는 발행 스테이지 동안 고정소수점 데이터와 관련된 산술 프로그램 제어 명령 및 판독/기록 명령을 실행하기 위해 ISB2DFB 버스를 통해 제어 레지스터 파일(800)로부터의 데이터와, FXRFRN(604) 및 CCRFRN(610)으로부터의 이용가능한 데이터, 데이터 유효 비트, 및 FX 및 CC 물리적 레지스터 태그 (FX_DATA_R, FX_DV_R, FX_TAGS_R, CC_DATA_R, CC_DV_R, CC_TAGS_R)를 수신할 수 있다. 로드/기억 명령 및 고정소수점 비-곱셈/나눗셈 산술 명령에 대한 어드레스 생성 동작을 실행하기 위해, FXAGU(602)는 FXRFRN(604) 및/또는 CCRFRN(610)으로부터 데이터 및 FX 및 CC 물리적 레지스터 태그(FX_DATA_R, FX_DV_R, FX_TAGS_R, CC_DATA_R, CC_DV_R, CC_TAGS_R)를 수신할 수 있다. 그러나, 상기 설명된 바와 같이, FXAGU(602)는 프로그램 제어, 곱셈/나눗셈, 및 제어 레지스터 판독/기록 명령을 실행하도록 FXU(601)와 유사하게 구성될 수 있고 그 경우 FXAGU(602)는 FXRFRN(604) 및 CCRFRN(610)으로부터 적절한 이용가능한 데이터 및 물리적 레지스터 태그를 수신할 수 있다. 더욱이, LSU(603)는 로드/기억 명령을 실행하기 위해 발행 스테이지 동안 FPRFRN(605) 및/또는 FXRFRN(604)으로부터 이용가능한 데이터 및, FP 및 FX 물리적 레지스터 태그(FX_DATA_R, FX_DV_R, FX_TAGS_R, FP_DATA_R, FP_DV_R, FP_TAGS_R)와 FSR/CCRFRN(606)의 FSR 레지스터의 콘텐츠를 수신할 수 있다.
그 다음에, RNTRIES_AVAIL 신호에 의해 식별되는 것과 같이, 예약 스테이션의 엔트리가 이용가능한 각각의 발행된 명령에 대해서, 예약 스테이션은 kg 명령에 대한 추출된 오피 코드, 일련 번호, 체크포인트 번호, 물리적 목적 및/또는 소스 레지스터 태그 및 이용가능한 데이터를 식별된 엔트리에 배치한다. 또한, 데이터가 수신된 데이터 유효 비트에 의해 식별되는 것과 같이 이미 사용가능하게 된 각각의 물리적 소스 레지스터 태그에 대해서, 예약 스테이션은 레지스터 태그와 관련된 데이터가 사용가능하다는 것을 나타내도록 예약 스테이션의 다른 하나의 데이터 유효 비트를 세트한다. 또한, 만일 명령이 즉시 데이터를 포함하면, 데이터가 즉시 이용가능하고 예약 스테이션 엔트리에 기억되기 때문에 데이터 유효 비트도 세트된다.
C. 명령 실행 및 완료
도 6을 다시 참조하면, 발행 스테이지 동안, PC 로직(106)은 인출 레지스터 (110)로부터 인출된 명령(F_INSTs_BRPs)을 수신하고 이들을 디코드한다. PC 로직 (106)은 실제로 발행된 명령중 어느 명령을 디코딩하는지를 판정하기 위해 ISU(200)로부터 ISSUE_VALID 신호를 수신한다. 하나의 머신 사이클에서 발행되어 예측적으로 실행되고 완료될 수 있는 어떤 프로그램 제어 명령에 대해서, PC 로직은 프로그램 흐름을 예측하고, 이 예측에 기초하여 FPC, APC 및 NAPC 값을 계산한다. 모든 다른 명령에 대해서, PC 로직은 현재의 머신 사이클에 대한 FPC값에 기초하여 다음 머신 사이클에 대한 FPC값을 계산하고, 또한 ISSUE_VALID 신호에 의해 지시되는 것과 같이 현재의 머신 사이클동안 얼마나 많은 명령이 발행되었는지를 계산한다. 물론 이들 명령에 대해서, PC 로직은 이전 머신 사이클에 대한 APC에 기초하여 APC 및 NAPC 값을 계산하고, 또 ISSUE_VALID 신호가 지시하는 얼마나 많은 명령이 현재의 머신 사이클동안 발행되었는지를 계산한다.
예컨대, 발행되는 임의의 명령이 SPARC-V9 BPcc, Bicc, BPr,FBPfcc, FBPfcc 명령과 같은 조건부 분기 명령이라면, PC 로직(106)은 이 분기를 수취하는 것으로예측할것인지 수취하지 않는 것으로 예측할 것인지를 결정하기 위해 이들 명령에 대해 대응하는 BRP 필드를 디코드한다. 만일 분기가 수취되는 것으로 예측되면, PC 로직(106)은 이 명령으로부터 대체값을 추출하고, 그것을 다음 머신 사이클용의 새로운 FPC, APC 및 NAPC값을 계산하는데 사용한다. 만일 분기가 수취되지 않으면FPC, APC 및 NAPC 값은 프로그램 흐름에 있어서의 변화없이 통상적으로 계산된다.
그러나, 만일 발행되는 임의의 명령이 SPARC-V9 JMPL[rd=0] 명령과 같은 리턴형(return type) 점프 및 링크 명령이면, PC 로직(106)은 새로운 FPC, APC 및 NAPC값을 형성하기 위해 PC 로직(106)에 의해 사용되는, 예측된 JMPL 타겟 PC(P_JMPL_PC)를 리턴 예측 스택(105)으로부터 팝오프하기 위해 POP 신호를 출력한다. JMP[rd=0] 명령이 서브루틴으로부터 리턴하는데 사용되기 때문에, PC 로직 (106)은 SPARC-V9 JMPL[rd=15]과 같은 CALL 또는 콜형 점프 및 링크 명령이 발행되었다고 판정할 때는 언제라도 P_JMPL_PC를 리턴 예측 스택(105) 상으로 푸시하기 위해 PUSH 신호를 출력한다. 리턴 예측 스택(105) 상으로 푸시된 P_JMPL_PC는 8만큼 인크리먼트된 명령에 대한 APC 값이다. 또한, P_JMPL_PC가 CALL 또는 JMP[rd=15] 명령이 발행될 때는 언제라도 리턴 예측 스택(105) 상으로 푸시되기 때문에, PC 로직(106)은 P_JMPL_PC가 RETURN 명령이 발행되는 때는 언제라도 리턴 예측 스택(105)로부터 팝오프되는 것을 또한 보장해야만 한다.
추가적으로, 발행된 명령은 SPARC-V9 BPA, BA, FBA 및 FBPA 명령과 같은 무조건부 상기 분기 명령을 포함할 수 있다. 이러한 경우, PC 로직(106)은 이들 명령으로부터 대체값을 추출하고, 그 대체값들을 이용해서 새로운 FPC, APC 및 NAPC 값을 계산한다.
PC 로직(106)이 조건부 분기, 상기 분기, 및 JMPL[rd=0] 명령을 위해 DFB(62)로부터 추가적인 데이터를 기다릴 필요가 없기 때문에, 이러한 타입의 명령은 동일한 스테이지에서 발행되고, 실행되며 완료될 수 있다. 또한, 발행된 조건부분기가 수취될지의 여부가 예측되고 또한 예측된 타겟 FPC 값이 JMPL[rd=0]명령에 대하여 계산될 것이기 때문에, 후곳으로 인출된 명령은 투기적으로 인출되며, 그에 따라 투기적으로 실행될 것이다.
또한, 발행된 명령은 콜(call) 타입의 JMPL[rd=15] 명령과 같은 CALL 및 RETURN 명령, 및 JMPL[rd=0] 명령이외의 JMPL 명령과 같은 다른 종류의 프로그램 제어 명령을 포함할 수 있다. 이 경우에, PC 로직(106)은 DFB(62)가 FPC값을 계산하는 것을 기다리고 그것을 실행 스테이지동안 DFB2BRB 버스 상에 제공한다. 도 8을 참조하면, FPC 값이 고정소수점 데이터이기 때문에, FXU(601)는 FPC 값을 계산한다. 그런 다음 완료 스테이지 동안, PC 로직(106)은 이 값을 수취하고 새로운 FPC, APC 및 NAPC 값을 형성한다.
차후 상세히 설명되는 바와 같이, 임의의 발행된 명령이 SPARC-V9 DONE 또는 RETRY 명령과 같은 트랩 처리 루틴 명령으로부터 리턴될 때, PC 로직(106)은 도 7에 도시된 제어 레지스터 파일(800)에 의해 제공되는 RD_TPC_TNPC 신호로부터 트랩 PC(TPC) 값 또는 트랩 NPC(TNPC) 값을 수신한다. 도 17을 참조하면, 제어 레지스터 파일(800)의 트랩 스택(815)은 이들 신호를 ISU(200)가 RETRY 또는 DONE 명령이 발행되었음을 표시하는 RETRY_DONE_IS 신호를 출력할 때 제공한다. 그런 다음, PC 로직(106)은 트랩 스택(814)으로부터 수신된 TPC 또는 TNPC 값을 이용하여 새로운 FPC, APC 및 NAPC 값을 형성한다.
다른 발행된 명령에 대해, PC 로직(106)은 발행 스테이지동안 이전 PC 및 NPC 값을 증가시켜, 다음 인출 스테이지용의 새로운 PC 및 NPC 값을 발생시킨다.
도 8을 참조하면, 발행 스테이지동안 발행된 명령은 필요로 하는 모든 데이터가 대응하는 예약 스테이션 엔트리에 배치되어 있을 때에만 FPU(600), FXU(601), FXAGU(602) 및 LSU(603)에 의해 실행될 수 있다. 다른 명령보다 더 늦게 발행된 명명에 대한 데이터가 금방 이용가능하게 되기 때문에, 이들 명령은 먼저 발행된 명령에 앞서 실행되고 완료될 수 있다.
상기 설명된 바와 같이, 예약 스테이션은, 물리적 레지스터에 대한 데이터 유효 비트가 이용가능하지 않음을 나타낼때 물리적 소스 레지스터의 소스 데이터가 이용가능하지 않음을 안다. 따라서, 예약 스테이션은 FXRFRN(604), FPRFRN(605), 및 CCRFRN(610)으로부터 전송된 적절한 이용가능한 데이터, 데이터 유효 비트 및 물리적 레지스터 태그(FX_DATA_F, FX_DV_F, FX_TAGS_F, FP_DATA_F, FP_DV_F, FP_TAGS_F, CC_DATA_F, CC_DV_F, CC_TAGS_F)를 수신 및 감시하여 데이터가 이용가능할 때를 결정한다. 예약 스테이션은 대응하여 전송된 물리적 레지스터 태그가 예약 스테이션의 엔트리에 기억된 물리적 레지스터 태그와 매칭할 때 특정 레지스터를 위해 의도된 전송된 데이터를 획득한다.
모든 데이터 의존성이 명령에 대해 충족될 때(즉, 모든 요구되는 데이터가 이용가능하게 될 때), 실행 유닛은 특정 명령에 대해 예약 스테이션의 엔트리에 기억된 명령 데이터를 사용하여 명령을 실행한다. 실행 유닛(600-603)에 의해 실행된 명령의 타입은 예약 스테이션의 엔트리 기억과 관련하여 앞에서 설명되었다.
실행된 명령은 그들이 발행한 명령 데이터가 그 명령을 위한 엔트리의 예약 스테이션에 기억된 물리적 목적 레지스터 태그에 의해 식별되는 특정 레지스터에기억될 때 완료된다. 완료 중에, 실행 유닛(600-603)은 또한 에러 및 완료 상태 정보를 PSU(300)에 ERR_STAT 신호로 전송한다.
더욱이, 도 7을 참조하면, ISU(200)는 인출 레지스터(100)로부터 수신한 명령을 디코드하여, 발행된 명령중 어떤 것이 도 17에 도시된 제어 레지스터(801-804)의 판독/기록 명령인 지를 결정한다. 제어 레지스터(801-814)는 CPU(51)의 전체 제어에 사용되며, SPARC-V9 아키텍쳐 매뉴얼에 개시된 타입의 특권있는 (privileged) 상태 레지스터, 특권없는(non-privileged) 상태 레지스터 및 보조 (ancillary) 상태 레지스터를 포함할 수 있다.
SPARC-V9 RDPR 및 RDASR 명령과 같은 제어 레지스터의 발행된 판독 명령에 대해, ISU(200)는 레지스터(801-814)중 하나를 식별하고 레지스터가 판독되어야 하는 것을 나타내는 RD/WR_CNTRL 신호를 출력한다. 이것에 응답하여, 제어 레지스터 파일(800)의 제어 로직(816)은 RD/WR_CNTRL 신호에 의해 식별된 제어 레지스터의 콘텐츠(RD_CNTRL_REG)를 워치포인트 유닛(304)에 출력한다.
차후 설명되는 바와 같이, CPU(51)는 제어 레지스터(801-804)의 판독 명령에 대한 체크포인트 및 대응하는 워치포인트를 형성하기 때문에, ISU(200)는 DO_WATCHPT 신호 및 DO_CHKPT 신호를 발생시킨다. DO_CHKPT 신호는 체크포인트가 형성되어야 하는 것을 나타내고, 그 체크포인트에 대한 체크포인트 번호를 포함한다. DO_WATCHPT 신호는 워치포인트가 DO_CHKPT 신호에 의해 제공되는 체크포인트 번호에서 워치포인트 유닛(304)에 의해 형성되어야 하는 것을 나타낸다. 워치포인트 유닛(304)은 16개의 체크 포인트 번호에 각각 대응하는 16개의 어드레스 가능한기억 요소를 갖는다. 따라서, 워치포인트 유닛은 DO_WATCHPT 및 DO_CHKPT 신호에 응답하여, DO_CHKPT 신호에 제공된 체크포인트 번호에 대응하는 기억 요소에 판독된 제어 레지스터의 콘텐츠를 기억시킨다.
판독 제어 레지스터 명령이 추가적인 실행을 위해 FXU(600)의 예약 스테이션에 또한 제공된다. 따라서, 명령의 체크포인트 번호는 그 명령에 대한 예약 스테이션 엔트리에 기억된다. 그런 다음, FXU(601)가 판독 제어 레지스터 명령을 실행할때, 워치포인트 유닛(304)에 그 명령의 체크포인트 번호를 출력한다. 이것에 응답하여, 워치포인트 유닛은 FXU(600)에 대해 이전에 판독되어 입력된 제어 레지스터 데이터를 출력하고, 그런 다음 FXU(600)는 그 데이터 및 대응하는 물리적 목적 레지스터 태그를 고정소수점 레지스터에 저장하기 위해 FXRFRN(604)에 제공한다. 따라서, CPU(51)는 제어 레지스터 판독을 실행하기 위해 동기화되지 않아도 된다.
제어 레지스터(SPARC-V9 WRPR 및 WRASR등)로의 기록을 실행하기 위해, FXU(601)는 예약 스테이션에서의 명령에 대해 기억된 명령 데이터를 실행하고, 그 데이터를 DFB2BRB 버스상에 출력한다. 그런 다음 도 17에 도시된 바와 같이, 데이터는 제어 레지스터 파일(800)에 제공된다. ISU(200)는 제어 레지스터 기록이 발행되었는지 및 어떤 레지스터에 대해 기록이 발생되어야 하는지를 표시하는 RD/WR CNTRL 신호를 발행시키기 때문에, RD/WR/UPDATE 로직(816)은 이 데이터를 적절한 제어 레지스터에 기록한다.
상기 설명된 바와 같이, 예시적인 CPU(51)는 고정소수점 레지스터를 위해 레지스터 윈도우를 채용한다. 레지스터 윈도우 동작은 SPARC-V9 아키텍쳐 매뉴얼에상세히 개시되어 있다. 따라서, ISU(200)는 언제 레지스터 윈도우 제어 명령이 발행되는지를 또한 결정한다. 이러한 결정에 있어서, ISU는 윈도우 제어 명령이 발행되었는지를 표시하며, 실행되는 레지스터 윈도우 동작의 특정적인 성질을 식별하는 WIN_CNTRL 신호를 발생시킨다. 도 17에 도시된 바와 같이, 이들 신호는 제어 레지스터 파일(800)에 제공된다. 이것에 응답하여, RD/WR/UPDATE 로직(816)은 WIN_CNTRL 신호에 의해 표시되는 레지스터 윈도우 동작의 갱신을 실행한다.
D. 명령 실행 스테이지의 PSU 관여
명령이 DFB(62) 내의 적절한 실행 유닛에 디스패치되면, ICRU(301)는 명령 완료를 대기하고, 각 명령 일련 번호에 대한 에러 및 상태 정보를 모니터하여 DFB(62)와 PSU(300) 사이에 있는 실행 데이터 전송 버스 상에 전달한다. 실행 스테이지의 PSU 관여는 실행 상태 정보의 수신으로 제한된다. 명령이 에러없이 완료되고 잘못 예측되지 않을때 명령이 비활성화되지만, 만일 실행 예외가 발행하거나, 또는 투기적인 실행이 잘못 예측되었으면, 명령은 비활성화되지 않거나 또는 CPU(51)이 복구 절차를 개시한다. A-링 상태 정보는 정확한 또는 비정확한 투기적인 실행 및 예외 또는 예외없는 실행을 반영하도록 갱신된다. 명령이 정확하게 예측되고 실행에 예외가 없을때, ICRU(301)는 명령을 비활성화시키기 위해 일련 번호와 관련된 A-링 비트를 클리어한다.
예시적인 CPU(51)에서, DFB(62)는 부동소수점 기능 유닛(FPU)(600), 고정소수점 기능 유닛(FXU)(601), 고정소수점/어드레스 발생 기능 유닛(FXAGU)(602) 및 로드/기억 기능 유닛(LSU)(603)뿐만 아니라 FPRFRN(605), FXRFRN(604),CCRFRN(608) 및 FSR(607)을 포함한다. 예시적인 CPU에서, 각각의 DFB 기능 유닛은 머신 사이클당 2개의 명령만큼을 처리할 수 있기 때문에, 명령 실행 완료는 머신 사이클당 최대 8개의 명령으로(하드웨어 제약에 의해) 제한된다. CPU의 일실시예에서, FPU(600)는 동시에 2개의 명령을 처리할 수 있지만, 1개의 명령 결과만을 출력할 수 있기 때문에, 이 실시예에서 명령 완료는 7개의 명령으로 제한되지만, 2개의 출력이 구현될 수 없는 것에 대한 이유는 없다. 도 8은 DFB(62) 내의 주요 기능 유닛 및 DFB(62)와 ISB(61) 사이를 통과하는 주요 신호에 대한 기능 블록도이다.
디스패치된 명령이 DFB(62)에서 실행을 완료할때, 명령 매칭 에러 및 다른 상태 정보(ERR_STAT)가 실행 데이터 전송 버스 상의 ICRU(301)( 및 다른 유닛)에 포함되는 PSU(300)로 다시 전달된다. 데이터 및 상태는 발행된 각 명령에 대해 수신되지만, 무순위로 수신된다. 각 명령에 대한 실행 상태 정보 신호는 예컨대, 실행동안 에러가 발생되었는지의 여부, 에러 타입, 투기적인 실행이 정확하게 예측되었는지를 평가하기 위한 조건 코드, 일련 번호, 명령 체크포인트(오류가 발생하여 백업이 필요한 경우 머신이 백업되는 체크포인트) 및, 명령이 제어 레지스터로의 판독 또는 기록 명령을 포함하는지의 여부를 포함할 수 있다.
브로드캐스트 명령 일련 번호는 도 12에 도시된 어드레스 디코드 로직(334)에 의해 A-링(312)으로 인덱스하는데 사용된다. A-링 상의 A-링 기록 포트 (341,342)(및 CSN/RRP 전진 로직(323)용의 판독 포트(343))의 수는 프로세서의 피크 실행 대역폭에 대응하도록 적절하게 선택된다. 만일 특정 명령이 에러를 발생시키면, A-링 클리어 로직(333)은 "0"을 특정 명령 일련 번호에 대응하는 A-비트에기록하고, 그런 다음 이 명령은 비활성화되는 것이 고려된다. 그러나, 명령이 에러없이 완료된다면, A-링의 대응하는 활성-비트는 클리어되지 않고, 이 명령은 여전히 활성적으로 고려되며, 다른 프로세서 복구 스텝이 예외 또는 에러 조건으로부터의 복구를 위해 채용된다. CSN은 결과적으로 에러를 발행시키는 명령보다 하나의 슬롯 앞에 있는 위치를 가리키는 ISN에 의해 따라 잡히게 된다. CSN은 A-비트가 여전히 세트되어 있기 때문에 에러를 발생시키는 명령의 SN을 통과시킬 수 없다. 그런 다음, 실행 트랩이 수취되면, 에러를 발생시키는 명령의 A-비트는 "1"로 재기록되어, CSN 및 RRP가 전진하는 것을 허용한다.
트랩 타입을 식별하는 수취된 트랩(TT) 필드는, 트랩스택으로부터 팝오프되어, 트랩이 실행 트랩(etrap)인지를 결정하기 위해 디코드된다. 그런 다음 실행 트랩은 "DONE" 또는 "RETRY"을 발행함으로써 처리된다. 만일 실행 트랩이 성공적으로 처리되면, ETRAP_CLEAR 신호가 트랩처리기(trap-handler)에 의해 어서트되어 A-비트를 클리어한다. 유사한 로직이 M-RING(324)의 M-비트를 클리어하기 위해 제공된다.
데이터 및 상태 신호는 각각의 명령 발행 슬롯내의 명령의 일련 번호를 제공하며, 또한 PSU(300)에 의해 사용되어 어떤 예외가 일시적으로 먼저인지 결정하는 것을 다수의 명령이 실패하는 경우에 예외 처리 우선순위를 결정한다. (예외의 우선순위 매김은 우선순위 로직 및 상태 머신(PLSM)(307)과 관련하여 차후 설명된다.) 예시적인 프로세서에서, 일련 번호는 에러 및 상태 정보보다 한 사이클 먼저 도달하며, 그에 의해 임의의 에러 정보의 도달에 앞서 어드레스 디코드 로직유닛(334)에 의한 일련 번호 디코드를 허용하여, 어드레스 디코드 로직에 있어서의 추가적인 지연을 초래하지 않고 비트가 클리어되거나(에러가 없는 경우) 또는 클리어되지 않을(에러가 있는 경우) 수 있다. 에러 또는 다른 예외가 검출되면, 적절한 스텝이 차후 설명되는 바와 같이 에러 또는 예외를 처리하도록 본 발명에 채용된다.
E. 명령 회부
지금까지 설명한 구조 및 방법은 A-링(312)의 어드레스 가능한 위치만큼의 다수의 명령, 즉 예시적인 실시예에서 64개의 명령의 발행 및 실행 상태를 트래킹하기 위한 구조 및 방법을 제공한다. 그러나, CPU 자원을 복구하기 위한 구조 및 방법이 없는 상태에서, CPU(51)에 의해 명령에 할당된, 예컨대 일련 번호 및 관련 A-비트를 포함하는 자원들은, 명령이 완료되고 비활성화되었어도 명령에 할당된 채로 유지될 것이다. A-비트 데이터 구조와 관련된 추가 포인터를 부가하고, CPU(51) 내에서 관련 명령의 상태에 있어서의 변화에 응답하여 포인터를 이동시킴으로써, 특히 비활성, 명령은 회부될 수 있으며, 자원은 철회되고 다른 명령에 의해 후속 사용을 위해 리클레임될 수 있다. 이러한 방식으로, 자원은 새롭게 발행된 명령에 대하여 연속적으로 이용될 수 있다.
회부된 일련 번호 포인터(CSN)(316)는 최종적으로 회부된 명령을 가리킨다. "회부된 명령"은 에러 없이 실행 완료되어 발행부터 실행까지 진행된 명령으로서, 복구될 필요가 있을 수 있고 복구되지 않을 수 있는 임의의 투기적으로 발행되고 예측된 중심 전이(central transfer)(분기) 명령보다 이전에 발행된 명령으로 정의된다. 회부된 명령은 복구될 필요가 전혀 없다. 이러한 정의에 의해, 회부된 명령 일련 번호(CSN) 포인터(316) 이전의 모든 명령은 에러없이 실행 완료되며 절대 원래대로 복구될 필요가 없다. CSN이 각 머신 사이클에서 전진한 양은 머신의 최대 명령 회부율을 설정한다. 완료되고 비활성화된 명령은 CNS가 전진되거나 또는 A-링 (312)에서의 이들 명령에 대한 일련 번호를 초과할 때까지 회부된것으로 간주되지 않는다.
ISN(314)에 대해 상기 설명된 바와 같이, CSN(316)이 모든 머신 사이클을 진진할 수 있는 위치의 최대수는 소프트웨어, 하드웨어 또는 다른 제어에 의해 사이클당 저 적은 최대 명령수로 제한될 수 있다. 예컨대, 머신 사이클당 4개의 명령으로 ISN의 전진을 제한하는 본 발명의 일실시예에서, CSN은 하드웨어에 의해 부과된 제한에 의해 사이클당 8로 제한된다. 또한 CSN은 ISN과 동일할 수 있지만, 절대 A-링 둘레로 ISN을 초과해서 전진할 수 없다. (A-링 구조로 인해, CSN은 수치적으로 ISN보다 작게, 동일하게 또는 크게 엄격해질 수 있다.) CPU가 초기화될때, CSN은 0으로 초기화되고, 명령 상태에서의 변화 및 차후 설명되는 소정의 CSN 진행 법칙에 따라 전진된다.
활성-비트가 활성 명령 링에서 클리어될 때, CSN은 실행 완료된 명령을 "회부"하기 위해, 소정의 법칙에 따라 전진된다. 일반적으로 CSN 포인터는 이미 실행 완료된(즉, 비활성화된) 명령에 뒤따를 수 있다. CSN/RRP 진행 로직 유닛(323)은 CSN 및 RRP 포인터의 위치를 전진시키는 기능을 한다. 각 머신 사이클에서, CSN/RRP 로직 유닛(323)은 ISN을 지나가지 않고, 완료되어 비활성화된 명령(A-링의활성화 비트="0")을 지나 CSN을 전진시키는 것을 시도한다. 지연된 트랩이 발행할때를 제외하고, CSN은 A-링(312)의 A-비트의 세트 또는 클리어된 상태 및, 로직 유닛(323) 내에서 구현된(예컨대, 소프트웨어, 펌웨어 및/또는 하드웨어) 소정의 법칙에 기초해서만 전진하며, CSN/RRP는 A-링 그 자체의 상태를 질의할 필요만 있으며, ISN을 염두하여 CSN에 대한 적절한 일련 번호 어드레스를 결정한다. 지연된 트랩이 수취되어 성공적으로 처리되면, PLSM(307)은 DEFERRED_TRAP 신호를 CSN이 하나의 SN 위치만큼 전진하도록 하는 CSN/RRP 전진 로직 제어 유닛(323)에 전송하여, CSN 및 나중의 RRP가 예외를 발생시키는 명령을 지나서 전진할 수 있도록 한다. 본 발명의 일실시예에서, CSN의 전진은 CSN 포인터의 이동을 구현하는데 요구되는 하드웨어를 제한하는 요구에 기초하여 선택된 소정의 최대 명령 회부율(머신 사이클당 8개의 명령)에 의해 제한된다.
이론적으로, CSN은 ISN 까지 전진하여 그와 동일하게 될 수 있다. ISN=CSN이면, CPU는 빈 상태가 되는데, 즉 모든 발행된 명령이 회부된다. 실제로, CSN의 최대 전진을[머신 사이클(4개의 명령 발행 머신)당 8개의 명령으로] 제한하여, 로직이 단순화되고, 요구되는 하드웨어가 감소될 수 있는 것이 바람직할 수 있다. 예컨대, 사이클 CPU당 4개의 발행에 대해, CSN 전진은 사이클당 8개의 SN으로 제한된다. CSN의 전진을 제어하는 법칙은 (1) CSN을 ISN(ISN을 포함하여)까지 전진시키는 것; (2) CSN을 한 사이클에서 8개의 명령 일련 번호보다 더 이상으로 전진시키지 않는 것; (3) 아직 회부될 수 없는 활성 명령에 대응하는 A-링의 첫번째 "1"(첫번째 "1"은 제외하고)까지 전진시키는 것으로 요약될 수 있다. 더 엄격하게 말하면,CSN은 일반적으로 관계식 CSN=min(CSN+4,SIN, slot_A)에 따라 진행되는데(뒤에서 설명하는 특정 예외에 대한 수정을 참조), 여기에서 A(CSN+1),...,A(slot_A)는 모두 "0"이고, A(slot_A+1)=1이다. 상기 관계식에서, "min"은 최소 함수이고, "slot_A"는 A_링(312)의 A-비트 위치를 말하며, A(slot_A)는 A-비트 위치의 비트-상태(예컨대, "1" 또는 "0")이다. CSN을 전진시키는 법칙은 지연된 트랩이 제거되고 완료되지 않은 부동소수점 동작 예외 또는 데이터 브레이크포인트 예외가 검출되는 것과 같이 수취될때 수정된다. 완료되지 않은 부동소수점 예외 및 데이터 브레이크포인트 예외는 DFB(62)로부터의 실행 상태 신호(ERR_STAT)에 의해 식별된다. 이들 예외가 발행하고 트랩이 처리될때 CSN은 1만큼 전진하고 즉, CSN ャ CSN+1이 되어, CSN은 예외를 발생시키는 명령을 지나서 전진한다. PSU(300)는 특히, 완료되지 않은 부동소수점 동작 및 데이터 브레이크포인트에 관련되며, 이 부동소수점 동작 및 데이터 브레이크포인트 모두는 만일 A-비트가 처리된 트랩에 대해 클리어되지 않으면 CPU는 충족되어 정지되기 때문에, 포인터의 특별한 처리를 요구할 수 있다.
CSN 전진을 "최대(8, ISN, 다음 A-비트=1)"로 제한함으로써, 단순화된 하드웨어 회로가 CSN을 적절한 위치로 이동시키기 위해 구현될 수 있다. 예컨대, A- 링 (312)은 8개의 8-비트 레지스터로서 구현될 수 있다. 이들 8개의 8-비트 레지스터의 A-링 판독 포트(343)에서, 주변 CSN의 레지스터가 판독되고, 이들 판독 레지스터의 콘텐츠는 2개의 별도의 8비트 버스로 전송된다. 이들 버스를 단일의 16비트 버스로 결합하고, 0-비트에서 8-비트로 버스를 시프트시키면, 이전의 CSN을 전진시키기 위한 8-비트 관심 윈도우(최대 CSN 전진은 8)가 형성된다. "첫번째 1을 찾는" 회로는 CSN이 전진하는 량을 산출한다.
ICRU(301)는 또한, 회부된 일련 번호(CSN) 신호 및 발행된 일련 번호(ISN)를 체크포인트 유닛(303)에 전송함으로써 새로운 회부된 일련 번호(CSN)(316)의 체크포인트 유닛(303)에게 알려서 CSN보다 작은 일련 번호를 갖는 어떤 할당된 체크포인트까지를 해방시킬 수 있게 한다. 이는 엄격한 수학적인 순서보다는 원형 A-링 상의 위치에 관련된다(즉, SN」, CSN은 원형의 A-링의 위치와 관련이 있다). 체크포인트는 본 명세서의 다른 곳에서 더 상세히 설명된다. CPU(51)의 일실시예에서, CSN 뿐만 아니라 여기에 설명되는 다른 포인터는 어드레스 가능한 A-링 비트 위치에 대응하는 명령 일련 번호를 엔코드하는 6-비트 벡터이다.
F.명령 철회 및 자원 복구
CPU 할당가능한 자원은 공급자(provider)에 의해 복구된다. 추가적인 포인터가 명령 철회 및, 명령이 철회될때 해방되는 자원에 대한 자원 리클레임을 트래킹하고 제어하기 위해 제공된다. 자원 리클레임 포인터(RRP)(317)는 최종적으로 철회된 명령을 가리키며, CSN을 추적한다. "철회된 명령"은 실행 완료되고, 비활성화되며, CPU(51)에 의해 회부된 명령이며, 후속 명령 발행중의 후속 사용을 위해 리클레임된 모든 관련 머신 자원을 갖는다. 리클레임된 머신 자원은 명령 철회시에 해방되어 후속 명령 발행 중에 재할당을 위해 이용가능하게 되는 명령, 명령 일련번호(SN), 체크 포인트 및 위치 포인트에 할당된, 리네임 및/또는 리맵핑된 논리적 레지스터, 아키텍쳐 레지스터 및 물리적 레지스터를 포함한다. RRP가 각 머신 사이클에서 전진하는 량은 머신의 최대 명령 철회율을 결정한다. CPU가 초기화될때 RRP는 0(제로)으로 초기화되며, 명령 상태 및 차후 상세히 설명되는 소정의 RRP 전진 법칙에 있어서의 변화에 따라 전진한다. 체크포인트 및 워치포인트의 할당 및 할당 해제(deallocation)은 차후 상세히 설명된다.
명령이 회부되면, 자원 리클레임 포인터(RRP)(317)는 CSN(316)의 뒤로 전진하여 명령을 철회함으로써, 머신 자원이 재사용을 위해 해방되고 리클레임될 수 있다. 각 머신 사이클에서, RRP(317)는 A-링의 A-비트 상태 및 소정의 RRP 전진 법칙에 기초하여 CSN을 지나지 않고 이전에 회부된 명령을 전진시키도록 시도된다. 회부되지 않은 명령에 할당된 머신 자원은 그 명령이 비활성화되더라도 명령이 원래대로 복구될 필요가 없다는 것이 확실해질때까지 해방될 수 없기 때문에 RRP는 CSN을 지나지 못한다. 비활성화된 명령은 여전히 투기적이기 때문에, 명령 완료(비활성화)만으로는 명령 회부 또는 철회를 위해 충분하지 않다. 회부된 명령만이 철회될 수 있다. RRP(317)는 레지스터 자원이 철회될 수 있는 다음 명령을 가리킨다. RRP(317)는 A-링(312)의 CSN(316) 및 CSN/RRP 전진 로직(328)에서 구현될 수 있는 소정의 법칙의 세트된 또는 클리어된 비트 조건만에 기초하여 전진한다.
ISN 및 CSN에 대한 경우에서와 마찬가지로, RRP가 각 머신 사이클에서 전진할 수 있는 최대 위치수는 다른 소프트웨어, 하드웨어 또는 다른 제어에 의해 사이클당 더 적은 최대 명령수로 제한될 수 있다. 본 발명의 일실시예에서, RRP의 전진은 RRP 포인터의 이동을 구현하는데 필요한 하드웨어를 제한하는 요구에 기초하여 선택되는 소정의 최대 명령 철회율에 의해 제한된다. 예컨대, 사이클당 4개 발행되는 예시적인 CPU의 실시예에서, RRP 전진 및 그에 따른 자원의 복구는 머신 사이클당 최대 4개의 명령으로 제한된다. 이는 예시적인 머신의 최대 명령 발행율과 동일하기 때문에, CPU(51)의 성능을 제한하지 않는다. RRP는 통상의 발행율보다 더 느리게 전진하도록 제한되지 않아야 한다. 더 엄격하게 말하면, RRP는 다음 관계식: "RRP = min(RRP+4,CSN)"에 따라 전진된다. 원칙적으로, 이러한 방식의 자원 복구 한정은 필수적이지 않으며, RRP는 CSN까지 전진될 수 있다. 예시적인 CPU(51)에서의 제한은 하드웨어 설계의 균형에 의해 부과된다. 소정의 수의 명령에 대해 CSN을 전진시키는데 요구되는 하드웨어는 동일한 수의 명령에 대해 RRP를 진행시키는데 요구되는 하드웨어보다 더 크다. 그러므로, 하드웨어를 소정의 레벨로 최소화하기 위해, RRP는 CSN보다 조금 더 천천히 전진되며, 성능에 결정적인 영향을 미치지 않는다.
1. 명령 회부와 철회에서의 RRF 및 레지스터 리네임 맵에 대한 갱신
도 18을 참조하면, 자원 복구는 명령 일련 번호를 해항하여 그 명령 일련 번호가 다시 사용될 수 있게 되고, 또한 그 결과로써 몇개의 레지스터를 해방하여 프리리스트 유닛(700) 내의 프리리스트 내로 다시 배치될 수 있게 한다. 명령이 회부되면, 그 명령은 ICRU(301)에 의해 발생되는 COMMIT_VAILD 신호에 의해 식별된다. COMMIT_VALID 신호에 응답하여, 회부된 명령에 대응하는 RRF(302)의 기억 유닛 (366)의 엔트리는 재사용을 위해 제어 로직(365)에 의해 해방된다.
2.명령 철회에서의 RRF 판독
RRF는 명령이 철회될때(ICRU(300) 설명 참조) 및 머신 백업시(백트래킹 설명참조)에 판독된다. 명령이 철회되면, RRP 포인터에 의해 지시되는 것과 같이, 제어 로직(365)은 철회된 명령에 대응하는 물리적 레지스터 태그를 FREE_TAG 신호의 형태로 프리리스트 유닛(700)에 출력하도록 기억 유닛(366)을 제어한다. 그런 다음, 프리리스트 유닛은 물리적 레지스터 태그를 프리 물리적 레지스터 태그의 리스트내에 배치한다.
3.포인터를 이용한 정확한 상태 유지
A-링(312) 및 그 관련 로직은 발행된 각 명령의 상태에 대한 정확한 머신 사이클 현재 정보를 제공한다. 포인터 ISN 및 CSN는 발행되고 활성화된 명령의 상태를 트래킹한다. CSN이 특정 명령으로 전진하는 경우에만, CPU(51)는 명령이 회부될 수 있고, 명령을 실행하는 것과 관련된 자원을 해방할 수 있다는 것을 확신할 수 있으며, 그에 따라 정확한 상태를 보존한다. ISN은 엔트리를 지나갈때, 발행된 명령에 대해 A-비트(A=1)를 세트하는 A-링의 둘레를 이동한다. CSN은 ISN의 뒤를 따라 수반되어 회부되기 위해 완료된 명령(A=0)을 찾는다. NMCSN은 ISN의 뒤를 따라 수반되어 완료된(비활성화된) 메모리 명령(M=0)을 찾는다. RRP는 CSN의 뒤를 따라 수반되어 A-링(312) 둘레를 이동하고 회부된 명령의 자원을 리클레임한다. 적극적인 로드/기억 명령의 스케줄링을 설명할 때, 어떻게 NMCSN이 ISN의 뒤를 따라 수반되어 완료된(비활성화된) 메모리 명령(M=0)을 찾는가에 대해서 설명된다.
CSN은 A-비트 세트를 갖는 명령으로 진행하지 않는다.(M-비트는 메모리 참조 명령에 대한 발행시에 클리어되기 때문에 NMCSN은 메모리 참조 명령을 통하여 진행한다.) 정확한 상태가 유지될 수 있도록 하는 포인터를 이동시키기 위한 다른 법칙은 다음과 같다: (1) CSN은 ISN(ISN_CSN)을 지나서 전진할 수 없다, (2) CSN은 NMCSN(NMCSN_CSN)을 지나서 전진할 수 없다, (3) CSN은 PBSN(PBSN_CSN)을 지나서 전진할 수 없는것, (4) NMCSN은 ISN(ISN_NMCSN)으로 전진할 수 없다, (5) PBSN은 ISN(ISN_PBSN)으로 전진할 수 없다, (6) RRP는 CSN(CSN_RRP)을 지나서 전진할 수 없다, (7) NISN은 항상 ISN+1이다(추가는 modulo 링 길이이다), 및 (8) ISN은 RRP 또는 CSN(완전한 머신 상태를 지시함)까지 따라갈 수 없다. 방법의 바람직한 실시예에 있어서 선택적으로 구현될 수 있는 다른 법칙으로는 다음의 것이 있다: (9) CSN 및 NMCSN은 하나의 클록 사이클에서 최고 8까지 전진할 수 있다 및,(10) RRP는 하나의 머신 클록 사이클에서 최대 4까지 전진할 수 있다. 심볼 "_"는 더 크거나 동일한 관계가 엄격한 수학적 균등성 또는 비균등성보다는 둘러싼 형태의 A-링 구조에 관련하여 결정됨을 나타낸다.
ISN, CSN 및 RRP 포인터와 관련하여 몇가지 사실을 알 수 있다: 첫번째, CSN과 ISN 사이에서 일련 번호를 갖는 명령은 머신에서 미해결의 활성화된 명령에 대응한다. 이들 명령은 투기적이며, 복구될 필요가 있을 수 있다. 두번째, CSN과 RRP 사이의 명령은 실행된 회부되었지만 철회되지 않은 명령에 대응하고, RRP에 의한 철회를 단순히 기다린다. 이들 회부된 명령은 복구되지 않는다. 세번째, CSN은 발행되지 않은 명령의 결과를 회부하는 것이 불가능하므로 ISN을 통과하지 않는다. 네번째, 머신 "동기화(sync)"은 CSN=ISN=RRP일때 정의에 의해 달성되어, 머신에서 모든 발행된(ISN) 명령은 회부되고(CSN) 철회된다(RRP). 여섯번째, ISN은 개념적으로 원형의 A-링에서 RRP를 통과할 수 없고, RRP와 ISN 사이의 일련 번호는 명령 발행에 이용가능하다. ISN=RRP-1(modulo A-링 길이)이면, 모든 명령 일련 번호는 할당되고, 머신은 RRP가 다른 명령이 발행되기 전에 재사용을 위해 머신 자원을 리클레임하도록 전진할 수 있을때까지 정지(대기)해야만 한다. 물론, CPU(51)는 전지되기 이전에 발행된 명령을 실행하고, 비활성화하고, 완료하고 회부하는 것을 계속한다. 마지막으로, 3개의 포인터 사이의 상대적인 관계는 RRP」, CSN」, ISN이고, 여기에서 "」," 연산자는 원형의 A-링(modulo A-링 길이) 내에서의 순서 매김 (ordering)을 나타내며, 엄격한 수학적 관계를 포함하지는 않는다. 도 20은 명령의 발행, 비활성화, 회부 및 철회를 포함하는 정확한 상태를 유지하기 위한 본 발명의 방법의 일실시예의 개략적인 플로우 챠트이다.
Ⅲ. 적극적인 긴 대기시간(로드/기억) 명령의 스케줄링
명령 회부 및 철회를 트래킹하고 스케줄링하기 위해 다양한 포인터를 이용하는 본 발명의 방법의 설명은 모든 명령 타입에 적합하고 최신의 투기적인 무순위 프로세서에서 많은 장점을 제공한다. 많은 최근의 프로세서는, 로드 명령 및 기억 명령만이 외부 메모리와 참조하고, 다른 모든 명령 및 동작은 프로세서 내의 레지스터를 참조하는 "로드-기억" 아키텍쳐로서 설계된다는 것을 인지함으로써 추가적인 이득이 달성가능하다.
실제로, 로드 및 기억 명령은 완료되기 위해 몇개의 머신 사이클을 요구하는 명령(여기에서 긴 대기시간 명령)의 더 일반적인 부류에 속하며, 로드 명령 및 기억 명령이 2 타입인 외부 메모리 참조 명령을 포함한다. 내부 레지스터 참조 명령은 완료하기 위해 더 적은 머신 사이클 또는 아마도 단일 머신 사이클만을 일반적으로 요구한다. 긴 대기시간 명령은 또한 중단없이 다중머신 사이클을 실행하도록 설계된 명령인 "극소(atomic)" 명령을 포함한다.
대기시간은 명령의 발행과 그 명령의 실행 완료 사이의 경과 시간이다. 로드-기억 아키텍쳐를 위한 명령어 세트는 긴 대기시간 메모리 참조(메모리에 대한 로드-기억 참조 등)을, 내부 CPU(51) 레지스터를 참조하는 짧은 대기시간의 논리적 또는 산술 연산(덧셈, 곱셈, 나눗셈, 논리 비교등)으로부터 분리하기 때문에 바람직하다. 또한, 로드-기억 타입 아키텍쳐에 의해 설계된 대부분의 최신의 CPU(51)는 이러한 형태의 명령 세트로부터 발행되는 증가된 레지스터 필요조건을 지원할 수 있는 많은 일반적인 용도의 레지스터를 갖는다.
로드 명령 및 기억 명령은 모두 아키텍쳐 상태를 수정한다. 무순위 실행 프로세서에서, 정확한 상태를 방해하지 않고 높은 로드/기억 대역폭을 유지하기 위해 로드 및 기억 명령을 효과적으로 스케줄할 수 있는 것이 중요하다. 정확한 상태를 유지하면서 긴 대기시간 명령을 적극적으로 스케줄링함으로써 명령 상태를 트래킹하기 위한 기본적인 구조 및 방법에 대한 향상이 제공된다. PSU(300)의 ICRU(301) 내의 구조와 방법은 DFB(62), 특히 로드/기억 유닛(LSU)(603) 내의 구조와 방법과 차후 설명되는 바와 같이 협력하여 향상된 능력을 제공한다.
A.메모리 명령 상태 정보 기억
본 발명의 구조 및 방법은 긴 대기시간 명령 상태 정보 및 이 명령 상태를 트래킹하기 위한 포인터를 기억하는 긴 대기시간 명령 기억 영역을 구분하는 추가 신호를 제공한다. 도 21은 상기 설명된 활성 명령 링(311)과 관련하여, 긴 대기시간 명령 상태 정보, 통상적으로 메모리 참조 명령(예컨대, 로드/기억 명령)을 기억하기 위한 메모리 명령 링(M-링)(324)의 개념적인 구조를 도시한다. M-링(324)은 A-링(311)과 대략 동일한 구조 및 전체 특성을 갖지만, 메모리 상태 비트는 A-링 상태 비트와는 다른 세트의 법칙에 따라 세트된다. 특히, M-링(324)은 명령 또는 명령 타입이 발행시에 활성화(비트는 "1"로 세트된다) 또는 비활성화(비트는 "0"으로 클리어된다)로써 처리되는 것과 관련한 다른 법칙을 구현한다.
도 10에 도시된 바와 같이, ISU(200)는 명령을 발행할때, 상기 설명된 ISSUE_NOP 및 ISSUE_VALID와 함께, 메모리 참조 명령과 비메모리 참조 명령 사이를 구분하는 명령 타입 신호 ISSUE_MEM을 제공한다. ISSUE_MEM은 또한, 적극적으로 스케줄링되는 것으로부터 이익을 가지며, 로드 명령, 기억 명령, 극소 명령 시퀀스 및 기타 메모리 참조 명령을 포함하는 어떤 특정 부류의 긴 대기시간 명령을 시그널링하도록 발행될 수 있다.
CPU(51)의 일실시예에서, ISSUE_MEM은 4비트 벡터(각 비트는 명령 발행 윈도우의 발행가능한 명령중 하나에 대응함)이며, 여기에서 비트 i에서의 어서팅 (assertion)("i")은 i번째 명령이 메모리와 관련됨을 표시한다. ISSUE_MEM은 ICRU(301) 내의 M-링 세트 로직(335)에 의해 사용되어 도 12에 도시된 것과 같이 발행시에 M-링(324)의 비트를 세트한다. 어드레스 디코딩 로직(338,336)는 A-링 (312) 내에 제공된다. ISSUE_MEM은 발행된 명령이 메모리 동작과 관련되어 있는 지의 여부를 나타낸다. 만일 ISU(200)으로부터의 ISSUE_MEM이 비트 i에서 어스팅되면, 동일한 명령 슬롯에 대응하는 ISSUE_VALID가 어서트되며, 상기 특정 M-비트는메모리 명령 링(M-링)(324)에서 세트되지 않는다. 명령이 메모리 관련될때 M-비트를 세트하지 않음으로써, 메모리 관련 명령은 발행되는 시점에서 효과적으로 "비활성화"될 수 있기 때문에, 비메모리 회부된 명령 일련 번호(NMCSN) 포인터(차후 설명됨)는 클리어된 M-비트 이상으로 전진하며, CSN이 클리어된 A-비트 이상으로 전진하는 방식으로, 비메모리 관련 명령만큼 진행하는 것으로부터 방지된다. ISSUE_VALD가 "1"일 때 M-비트는 모든 경우에 "0" 또는 "1"로서, 즉 모든 발행된 명령에 대해 메모리가 관련되는지 또는 관련되지 않는지 기록되어야 한다. 메모리 동작에 대해 M-비트을 세트하지 않음으로써 진행하는 NMCSN을 전진하기 위해 메모리 관련 동작을 "무시하는것"이 용이해진다.
M-비트는 A-링(312)에 대해 클리어되는 것과 마찬가지로 명령이 에러없이 완료될때 M-링 클리어 로직(337)에 의해 클리어된다. 발행될때 클리어된 M-비트를 갖는 메모리 참조 명령은 명령이 비활성화된 후 클리어된 상태를 유지한다. M-링 비트는 A-링(312)에 대해서와 동일한 방식으로 실행 트랩에 대해 클리어된다. M-링 (324) 상태 정보는 메모리 참조 명령을 트래킹하고 적극적으로 스케줄링하는데 사용된다. 발행된 상태, 회부된 상태, 철회된 상태를 포함하는, 메모리 참조 명령의 모든 상태는 A-링(311) 및 그 관련 포인터에 의해 유지된다.
설명된 A-링과 M-링 사이의 유사점의 견지에서, 당업자는 A-링과 M-링의 기능이, 링의 각 어드레스 가능한 위치가 다수의 비트를 포함하는 단일 원형 링과 같은 단일 데이터 구조 내에서 구현될 수 있음을 이해할 것이다. 이러한 다수-비트 링에서, 명령 활동(활성 또는 비활성) 및 명령 타입(메모리, 비메모리, 분기, 무작동 등) 모두는 다수의 비트로 엔코드될 수 있다. 또한, 다른 코딩 방식이, 각각의 A-링 및 M-링 데이터 구조 내에 현재 제공되는 것과 동일한 정보를 기억하기 위해 제공될 수 있다. 당업자는 이 설명으로부터, 링이 로직을 어떻게 세트하고 클리어되는지, 즉 다수-비트 원형 링에 대해 다수-비트 포맷을 지원하고 NMCSN을 수용하기 위해 CSN/RRP 로직이 어떻게 수정되는지를 알 수 있을 것이며, 다른 논리 상태 또는 심볼이 세트에 대해 "1" 그리고 클리어에 대해 "0"이 아닌 방식으로, 활성과 비활성 및 메모리 명령과 비메모리 명령을 구별하기 위해 구현될 수 있음을 이해할 수 있을 것이다.
B.긴 대기시간 정보를 트래킹하고 스케줄링하기 위한 NMCSN 및 PBSN 포인터
지금까지, M-링(324)의 M-비트를 세팅하는 구조 및 방법을 설명하였다. 본 발명의 구조 및 방법에 있어서, 예측된 분기 명령 일련 번호(PBSN)(318) 포인터 및 비메모리 회부된 일련 번호(NMCSN) 포인터(319)는 M-링(324)과 함께 제공되고 사용됨으로써, CPU(51)는 긴 대기시간 명령, 특히 외부 메모리를 참조하는 로드/기억 명령을 효과적이고 적극적으로 스케줄링할 수 있다. NMCSN 및 PBSN 모두는 상기 설명된 바와 같이 ICRU(301) 내의 포인터 레지스터(313)에 기억된다.
NMCSN(319)는 최종적으로 "회부된" 명령을 가리키지만(상기 설명된 바와 같이), 메모리 참조 명령에 대한 M-비트가 명령이 발행되는 시점에서 클리어되기 때문에, 모든 메모리 액세스 명령은 NMCSN을 전진시키기 위해 M-링(324)에서 효과적으로 무시되며, 그에 의해 NMCSN이 더 신속하게 전진한다. 포인터 CSN(316)의 전진만이 실제로 명령을 회부하는 것에 주목한다. NMCSN은 차후 설명되는 바와 같이 로드/기억 유닛(603)에 의해서만 사용된다. 명령이 에러없이 완료되고, 이전의 모든 명령이 에러없이 완료되는 경우에 그 명령은 회부될 수 있다. NMCSN은 메모리 참조 명령이 아직 활성화되어 있는 경우에도 메모리 참조 명령을 지나서 전진할 수 있다. 이 방법은 또한 메모리와 참조하지 않는 다른 긴 대기시간 명령 타입을 적극적으로 스케줄링하는데 사용될 수 있다. CPU가 초기화되면, NMCSN은 0(제로)으로 초기화된다.
PBSN(318)은 최초의(가장 오래된) 미해결된, 예측 분기 명령의 일련 번호이다. 본 예시적인 실시예에서, PBSN은 워치포인트 유닛(304)에 의해 결정된다[워치포인트 유닛(304)은 본 명세서의 다른 곳에서 더 상세히 설명된다]. 미해결된 분기 명령은, 명령이 발행되고 실행되어야 하다는 것을 확실하게 알기 전에 투기적으로 발행되고, 실행을 개시하여 실행완료될 가능성이 있는 명령( 및 이 명령으로부터 산출된 명령 시퀸스)이다. 다시 말해, 명령을 실행하는 조건이, 명령이 발생되는 시점의 처리 흐름에서는 아직 발행하지 않은 것이다. 본 발명의 구조 및 방법에 있어서, 활성화된 미해결의 예측된 분기 명령이 없으면, PBSN은 ISN과 동일해진다. PBSN은 NMCSN 진행에 대한 장벽으로서, NMCSN 진행 로직에 사용된다. NMCSN은 포인터 PBSN 또는 ISN의 SN 어드레스를 초과하여 전진할 수 없고, 메모리 명령이 없는 상황에서, 포인터 NMCSN은 CSN과 동일하다. CPU가 초기화되면 PBSN은 0(제로)으로 초기화된다.
C.NMCSN의 진행
NMCSN(319)은 CSN(316)의 메모리 관련 동작 카운터파트이다. CSN을 진행하기위한 A-링에 대응하여, NMCSN을 진행시키기 위한 M-링이 있다. M-링은 둘러싼 형태의 방식으로 M 비트의 64 비트로 구성되어 있다. 즉, 예시적인 64비트 M-링에 대해서, M비트 #63의 다음 비트는 M-비트 #0 이다. M-비트=0은, 대응하는 명령이 메모리 관련 명령,예컨대, 로드/기억 명령과 같은 긴 대기시간 명령이라는 것을 의미한다.
예시적인 CPU에서, NMCSN 포인터의 진행시키는 법칙은 다음에 나타난 것과 같이, CSN의 경우와 유사하다.(1) NMCSN을 ISN까지(ISN을 포함하여) 진행시킨다; (2) NMCSN을 한 사이클에서 8개의 명령 일련 번호 이상을 진행시키지 않는다; (3) M-링의 첫번째 "1"까지(첫번째 "1"을 제외하고) 진행시킨다.
NMCSN을 진행시키는 법칙은 "미완료 부동소수점 동작" 예외가 부동소수점 유닛(FPU)에서 발행하거나, 또는 "데이터 브레이크포인트 예외"가 로드/기억 실행 유닛(LSU)으로부터 검출될 때 수정된다. 이 두 경우에서 NMCSN은 상기 설명한 CSN에 대한 경우와 마찬가지로 하나의 일련 번호만큼 진행된다. 즉, 이들 조건하에서, CSN = CSN+1, 및 NMCSN = NMCSN+1이다. PSU(300)는 완료되지 않은 부동소수점 동작 및 특정 포인터 처리를 요구하는 브레이크 포인트 동작에 대해 특히 관련된다.
M-링의 구현은 A-링의 경우와 유사할 수 있다. 실제로, 예시적인 CPU에서, NMCSN은 최대(8, ISN, 다음 M-비트=1)까지만 진행될 수 있기 때문에, 간단한 하드웨어 회로가 CSN에서와 같이, NMCSN을 적절한 위치로 이동시키도록 구현될 수 있다. [최대(x,y,z)라고 하는 것은, 파라미터 또는 표시 x, y 및 z의 값중 최대값의 선택을 의미한다.] M-링(324)는 8개의 8-비트 레지스터로써 구현될 수 있다. 상기8개의 8-비트 레지스터의 M-링 판독 모드(346)에서, 둘러싼 NMCSN의 레지스터가 판독되고 판독시의 상기 레지스터의 콘텐츠가 2개의 구별된 8-비트 버스로 전송된다.
이들 버스를 16-비트 버스로 결합시킨 다음, 0-비트에서 8-비트까지 버스를 시프트시키면, 이전의 NMCSN을 진행시키기 위한 목적하는 8-비트 윈도우가 형성된다. "첫번째 1을 찾는" 회로는 NMCSN이 진행할 량을 산출한다.
NMCSN 및 PBSN을 정확하게 유지함으로써, 정확한 상태를 방해하지 않고, 실행을 위해 선택될 수 있는 로드/기억 또는 다른 메모리 참조 명령이 간단하게 판단될 수 있다. 정확한 상태를 방해하지 않고, 실행을 위해 선택될 수 있는 로드/기억 명령은 실행의 위한 "범위 내"에 있는 것으로 고려된다. 정확한 상태는, (1) 예외를 발생시키는 명령이 아키텍쳐 상태를 수정하지 않는 경우, (2)오류 명령 전의 모든 명령이 아키텍쳐 상태에 관한 수정을 완료한 경우, (3) 오류 명령 후의 모든 명령이 아키텍쳐 상태를 수정하지 않을 경우, 유지된다. LSU(603)는 ICPU(301)로부터 NMCSN(319)를 수신하고 워치포인트 유닛(304)으로부터 PBSN(318)을 수신하여, 긴 대기시간 명령을 스케줄링하는데 사용한다.
D. 데이터 흐름 블록내의 로드-기억 유닛(LSU)
본 발명의 몇개의 특징부의 구현은 일반적인 실행 유닛에 관련되지만, 상태 스케줄링에 있어서 긴 대기시간을 지원하기 위한 특별한 구조가 제공될때, 긴 대기시간 명령을 적극적으로 스케줄링 하는 것이 이익이 된다. 예컨대, 로드/기억 명령 및 다른 메모리 참조 명령을 적극적으로 스케줄링하기 위한 구조가 제공된다. 당업자는 이 설명으로부터, 어떻게 이러한 테스터가 로컬 기억 동작에 소용되지 않는다른 실행 유닛에서 구현될 수 있는 지를 이해한다.
LSU는 SPARC-V9 아키텍쳐 매뉴얼에 정의되어 있는 릴렉스드(relaxed) 메모리 모델(RMO) 및 토탈 기억 순서 매김(TSO) 모드를 모두 지원한다. LSU는 고정소수점 및 부동소수점 로드/기억 명령을 스케줄링하는 기능을 한다. LSU는 각 사이클에서 2개의 요구까지 캐시로 스케줄링할 수 있다. 정확한 상태를 유지하는데 요구되는 명령 순서 매김은 프로세서와 캐시칩 사이의 일련의 프로토콜 신호에 의해 관리된다. LSU는 12-엔트리 예약 스테이션을 포함한다. RMO 모드에서, 로드 명령은 기억 명령을 투기적으로 우회하도록 허용된다. LSU와, 스플리트 트랜잭션을 지원하는 데이터 캐시 사이에 3 스테이지 파이프라인이 제공된다. 제1 스테이지에서, 명령의 어드레스, 오피 코드 및 일련 번호는 데이터 캐시로 전송된다. 또한, 투기적인 실행을 위해 사용되는 몇개의 제어 비트도 전송된다. 제2 스테이지에서, 기억 명령의 데이터는 LSU로부터 데이터 캐시로 전송된다. 또한 제2 스테이지에서, 데이터 캐시는 다음 사이클에서 완료되어질 명령의 일련 번호 및 유효 비트를 LSU로 다시 전송한다. 제3 스테이지에서, 데이터 캐시는 상태 및 로드 데이터를 리턴한다. 캐시 미스(cache miss)에 의해, 데이터 캐시는 사용되지 않는 파이프라인 슬롯동안 데이터를 리턴하거나, 데이터에 대한 파이프라인 슬롯을 개시하는 신호를 어서트하다.
도 22는 선택 및 실행 제어 로직 유닛(609), 다양한 명령 및 데이터 관련 정보를 기억하기 위한 명령/데이터 큐(IDQ)(610) 및, ISU(200), FPU(600), FXU(601) 및 FXAGU(602)로부터의 신호를 디코딩하는 디코드 및 필드 분리 로직(SSFSL)(620)을 포함하는 로드/기억 유닛(LSU)(603)의 기능 블록도이다. 더 상세하게는,IDQ(610)은 범위내 비트 필드(611), 오피 코드 필드(612), 명령 일련 번호(SN) 필드(613), 체크포인트 번호(614), 유효 비트 필드(615), 속성(ATR) 필드(616), 레지스터 태그(TAGs) 필드(617), 태그 유효(TV) 필드(618), 어드레스 필드(619), 어드레스 유효(AV) 필드(620), 및 캐시 데이터 필드(621)로 구성되어 있다. 데이터 캐시(52)는 IDQ(610)와 함께 어드레스 및 데이터를 전송하고 수신한다.
LSU(603)가 명령을 수신하면, 디코드 및 필드 분리 로직(622)은 그 명령을 디코드하고 어드레스가 명령의 즉시 데이터 필드에 포함되어 있는지를 또는 FXAGU(602)가 어드레스를 계산해야 하는지 여부를 판단한다. 만일 디코드 로직 (622)이 어드레스가 FXAGU(602)에 의해 계산되어야 한다고 판단하면, 디코드 로직은 어드레스 유효 비트를 클리어한다. 그러나, 디코드 로직이 어스레스가 명령 내에 포함되어 있다고 판정하면, 즉 즉시 데이터가 명령내에 포함되어 있다고 가정하면, 어드레스 데이터가 명령을 위해 준비되고 이용가능하다는 것을 그리고 명령이 실행될 수 있다는 것을 표시하는 어드레스 유효 비트를 세트한다. FPU 및 FXU로부터의 태그는 동일한 방식으로 처리되어, 태그 신호는 데이터가 유효한지의 여부를 표시한다. 명령이 예약 스테이션 또는 큐(610)에 기억되게 될때 유효 신호는 발행된 유효 신호가 실제로 발행되었다는 것을 표시할때까지 클리어된다(어서트되지 않는다).
LSU(603)가 명령을 실행할때, LSU는 이 명령을 데이터 캐시(52)에 직접 전송한다. 데이터 캐시(52)로부터의 데이터를 검색할 때, 이 실시예에 있어서의 데이터는 선택 및 실행 제어 로직으로 들어가고, 이 선택 및 실행 제어 로직은 태그를 포함하는 신호 및, 데이터가 유효하다는 것을 표시하는 데이터 유효 비트를 출력하며, 또한, 도시된 것으로부터 알 수 있는 바와 같이 데이터를 출력하여, 그 결합된 신호가 제공된다. 데이터 유효 비트는 22에서 FP_TAGS_DV_F 신호 및 FP_DATA_F 신호이다.
선택 및 실행 제어 로직(609)는 또한, 액세스 정보를 획득하고, 액세스 정보를 데이터 캐시(52)에 제공한다. 이 정보의 일부분은 트랩 정보, 즉 메모리 동작과 관련된 트랩의 타입이며, 에러 검출시에 PSU(300)에서 사용되기 위한 에러 신호 (ER_STAT)를 출력한다.
선택 및 실행 제어 로직 유닛(SECLU)(609)은 LSU에서의 실행을 위해 명령을 선택하는 기능을 한다. 이 유닛은 로드, 기억, 극소 동작 등의 순서 매김 제약을 처리한다. 예컨대, 나중에 발생한 어드레스 "X"로의 로드는 이전에 발생한 어드레스 "X"로의 기억을 통과할 수 없다. 로드의 이 타입은 기억과 유사하게 속성 어레이에 "강한(strong)"으로서 마크된다. 이는 기억을 "순서대로" 개시하며, 기억은 모든 이전의 로드 및 기억이 완료할 때까지 개시될 수 없다. 최종적으로, 기억의 일련 번호는 범위 내에 있어야 한다. SECLU(609)는 유효하고, 적합하며(즉, 현행 캐시에 의해 처리되지 않음), 그 모든 종속성이 충족되며, "약한(weak)" 동작(예컨대, 로드)이거나 또는 "범위내" 있으며, 이전의 캐시 미스에 의해 제약받지 않는 명령만을 마스크하는 로직을 포함한다. 그런 다음 마스크된 명령은 마스크 논리 기준을 충족시키는 일련의 명령으로부터 가장 오래된 명령을 선택하는 선행 (precedence) 매트릭스(623)에 의해 처리되다.
SECLU(609)는 또한 메모리 액세스를 제어하는 기능을 한다. SECLU는 캐시로 명령은 전송하고 액세스가 완료될때 캐시 상태 정보를 수신한다. SECLU는 또한, 캐시로부터의 "로드" 데이터에 적절한 목적 레지스터 태그를 붙이며 속성 어레이 (616)에서 액세스의 속성을 계속 트래킹한다. 이들 속성은 범위내, 약한/강한(일반적으로 기억 명령 및 극소의 명령은 "강하며" 로드는 "약하다"), 투기적인 액세스 및 캐시로 전송하는 것에 대한 적합도를 포함한다.
SSFSL(620)은 명령 오피 코드, 명령 일련 번호, 명령 체크포인트 및 레지스터 태그를 포함하는 ISU(200)로부터 명령 패킷을 수신하며, 이 정보를 디코드하고 이 정보를 기억하기 위해 IDQ(610)의 정확한 슬롯을 선택하며, 정보를 적절한 필드로 분리한다. 각 일련 번호 엔트리 및 SN과 관련된 데이터는 큐의 빈 슬롯에 기억된다.
SECLU는 또한 PSU(300)로부터 포인터값(ISN, NISN, CSN, PBSN 및 NMCSN)을 수신한다. CSN, PBSN, 및 NMCSN은, 명령 일련 번호가 범위 내에 있는지를 판정하는 것에 특히 관련된다. SECLU(609)는 상기 설명된 바와 같이, 액세스가 "범위내"에 있는지, 즉 일련 번호가 상기 CSN보다 크고 NMCSN보다 작거나 동일한지를 판정하는 로직을 포함한다. 범위내 정보는 속성 어레이(616)로 전송되고, SECLU의 범위내 파일(611)에 기억된다. SECLU는 또한 소정의 액세스를 위해, IDQ에 기억된 엔트리와, 캐시로부터 상태 및/또는 데이터를 리턴한 데이터와 매칭시키기 위해 로직을 포함한다. IDQ 내의 모든 유효 엔트리는 그 엔트리가 그 사이클 중에 범위내에 있고 속성 어레이가 요구된 대로 갱신되었는지를 알기 위해 모니터된다. 큐의 엔트리가 범위내에 있으며, 큐의 엔트리가 재이용될때까지 범위 내에 유지된다.
체크포인트 필드(614)는 큐 슬라이스로의 액세스에 대응하는 체크포인트 번호를 포함한다. 새로운 체크포인트 번호(들)는 각 사이클에서 ISB(61)로부터 수신된다. 유효 비트 큐(615)는 메모리 액세스 명령이 실제 발행될 때 세트되는 유효성 비트를 갖고 있다. 이 정보는 명령 발행 사이클동안 ISB(61)로부터 출력된다. 이 비트는 액세스가 ISB에 의해 소멸될 때 리세트될 수 있다. 어드레스 필드(618)는 모든 캐시 액세스를 위한 어드레스를 갖고 있다. 일련 번호는 어드레스가 DFB(62) 어드레스 발생 유닛(FXAGU)(602)으로부터 어드레스 큐에 도달하기 전에 IDQ 어드레스 매칭 로직에 도달한다. 속성은 제어 레지스터의 내용에 따라 속성 어레이(616)에서 세트될 수 있다. 예컨대, 프로그램 순서 비트가 세트되면, "강한" 비트는 속성 섹션에서 세트된다.
1.범위내 메모리 참조(긴 대기시간) 명령의 식별
상기 설명된 바와 같이, SECLU(609)는 ICRU(301)로부터의 CSN 및 NMCSN와, 워치포인트 유닛(304)으로부터의 PBSN에 응답하여 명령이 "범위내(in-range)"에 있는지를 판정하는 로직을 포함한다. 이 로직은 CSN과 PBSN 사이의 일련 번호를 가진 제1 윈도우(CAN_first-window_PBSN)내의 명령이 분기 예측오류에 대한 염려없이 실행될 수 있는 지를 식별하는데, 여기에서 심볼 "_"는 엄격한 수학적 순서가 아닌, 메모리 명령 링에서의 상대적인 순서를 표시한다. CSN와 NMCSN 사이의 일련 번호를 갖는 제2의 아마도 더 작은 "범위내"제2 윈도우(CSN_범위내_NMCSN_PBSN)으 명령은분기 예측오류 또는 실행 예외에 대한 염려없이 실행을 위해 스케줄링될 수 있다."범위내"에 있는 메모리 참조 명령은 적극적인 실행 스케줄링을 위해 DFB(62) 내의 LSU(200)로 식별될 수 있다. 도 23은 정확한 상태를 유지하면서, 로드/기억 명령을 포함하는 긴 대기시간 명령을 적극적으로 스케줄링하는 본 발명의 방법의 일실시예의 개략적인 흐름도이다.
2.긴 대기시간(로드/기억) 명령의 적극적인 스케줄링을 위한 기본적인 구조 및 방법에 대한 강화
본 발명의 기본적인 방법에 대한 강화에 있어서, NMCSN은 NMCSN 포인터를 진행시키기 위해 "비오류" 명령으로 공지된 소정의 명령을 무시하고, 로드/기억 명령 및, 메모리를 참조하는 명령을 더 적극적으로 스케줄링하는 것을 허용함으로써 성능을 개선시키도록 규칙들이 구현될 수 있다.
Ⅳ.체크포인트 처리
체크포인트는 공지된 시점에서의 머신 상태의 "스냅샷(snapshot)"이다. 체크포인트는 잘못예측된 분기 또는 실행 예외가 발행한 경우에, 투기적인 명령 시퀀스를 원래대로 복구하기 위해 이전의 머신 상태를 신속하게 회복시키기 위한 방법 및 구조를 제공한다. 본 발명에 따른 예시적인 프로세서에서, 체크포인트는 명령 발행 사이클동안 형성된다. 본 발명의 방법에서, 체크포인트의 복구에 기초한 머신 상태의 복구는 머신 "백업"으로서 정의된다.
본 발명에서, 체크포인트는 몇개의 명령 부류: (1) 분기와 같은 예측된 프로그램 제어 전이 명령 및 (2) 제어 레지스터의 값을 수정하는 부작용을 가질 수 있는 명령에 대해 형성된다.
제어 전이 명령(분기 명령등)은 예측되며, 프로그램 카운터(PC) 불연속을 초래할 수 있다. 본 발명의 구조 및 방법을 구현하는 CPU(51)에서, 프로세서는, 만일 프로그램 제어 명령(분기 명령 또는 리턴 타입의 점프 및 링크 명령)이 잘못 예측되면 머신 백업을 신속하게 제공하기 위해 각 예측된 프로그램 제어 명령에 대한 체크포인트를 형성한다. 만일 APC 및 NAPC값이 이러한 환경에서 세이브되지 않으면, 잘못 예측된 프로그램 제어 명령의 재발행 및 재실행없이 정확한 FPC, APC 및 NAPC값을 구성하는 것이 어렵다. 체크포인트가 이러한 각 프로그램 제어 명령에 대해 형성되기 때문에, 머신 내에서 허용된 체크포인트의 최대수는 예측될 수 있고 동시에 미해결 상태인 프로그램 제어 명령의 수를 제한한다. 예측된 프로그램 제어 명령은 상기 설명된 SPARC-V9 BPr, FBcc, FBPcc, Bcc, BPcc 및 JMP[rd=0] 명령이 될 수 있다.
프로그램 흐름 변화를 초래하는 다른 타입의 명령도 체크포인트될 수 있다. 이들 명령은 CALL, JMPL, TCC, RETURN, DONE, 및 RETRY와 같은 SPARC-V9 명령을 포함할 수 있다.
체크포인트는 또한 제어 레지스터 값을 수정하는 부작용을 가질 수 있는 명령을 포함하는, 머신 상태를 수정하는 명령에 대해서도 형성된다. 임의의 제어 레지스터를 체크포인트함으로써, 제어 레지스터는 투기적으로 수정될 수 있다. 이들은 SPARC-V9 WARR 및 WRASR 명령과 같은 제어 레지스터 파일(800)hr의 제어 레지스터로의 기록을 포함하고, SPARC_V9 SAVED, RESRORED 및 FLUSH 명령과 같은 레지스터 윈도우 제어 명령을 포함한다. 그러나, 모든 제어 레지스터가 성능을 저하하지않고 체크포인트된 상태의 양을 감소시키기 위해 체크포인트되지 않는다.
또한, 예시적인 CPU(51)에서, 제어 레지스터 파일(800)의 제어 레지스터의 판독은 상기 설명된 바와 같이, 그들의 데이터가 워치포인트 유닛(304)에 기억되고 데이터가 나중의 실행을 위해 FXU(601)에 대해 이용가능하게 될 수 있기 때문에, 체크포인트를 요구한다. 이들은 SPARC-V9 RDRR 및 RDASR 명령과 같은 명령일 수 있다.
더욱이, 발행 트랩을 빈번하게 초래하는 명령은 체크포인트를 요구할 수 있다. 이들은 SPARC-V9 SAVE 및 RESTORE 명령과 같은 윈도우 제어 명령 및 예컨대, SPARC-V9 LDD/LDDA 및 STD/STDA 명령이 될 수 있는 비실행 명령을 포함한다.
트랩은 또한 투기적으로 입력될 수 있으며 그와 같이 발행될때 체크포인트된다. 따라서, 체크포인트는 차후 설명되는 방식으로 실행 트랩(etrap) 또는 발행 트랩을 발생시키는 명령 이전에 발행된 명령에 대하여 형성될 수 있다. 또한, 체크포인트는 트랩 처리 루틴의 첫번째 명령 이전에 형성될 수 있어, 만일 트랩이 투기적으로 수취된다면, 리턴이 형성될 수 있다.
투기적으로 제어될 수 없는 부작용을 갖는 명령 또는, 예외를 거의 발생시키지 않고 대량의 체크포인트 정보를 요구하는 명령에 대해, 효율성의 이유 때문에 그 명령을 체크포인트하지 않는 그 대신 발행 이전에 머신을 "동기화"시키도록 결정될 수 있다. 즉, 투기적으로 제어될 수 없는 부작용을 갖는 명령을 발행하기 이전에 CPU는 머신 동기화 상태에 있어야 하는데, 이는 모든 미결정 명령이 회부되고 철회되었다는 것(ISN=CSN=RRP)을 의미한다.
중요한 성능/설계 균형(trade-off)은 어느 명령이 머신 동기화 명령으로서 설계되어야 하는지 및 어느 명령이 체크포인트되어야 하는지의 선택시에 행하여진다. 동기화를 위한 성능 저하는 추가적인 로직 복잡도 및 이러한 명령을 투기적으로 처리하는데 관련된, 체크포인트된 머신 상태를 기억하기 위해 요구되는 칩 영역을 포함하는 프로세서 영역을 고려하여 평가된다.
많은 다른 타입의 명령들은 레지스터의 데이터 값을 수정한다. 통상적인 체크포인트 처리 방법은 레지스터 상태를 복구하기 위해 레지스터 테이타 값을 체크포인트한다. 비교예의, 본 발명의 방법을 구현하는 머신에 있어서, CPU(51)는 실제 레지스터 데이터 값을 체크포인트 처리하지 않고, 그 대신 레지스터 리네임 맵을 체크포인트 처리함으로써 이전의 레지스터 상태를 복구할 수 있다. "레지스터 데이터 값"이 아닌 "레지스터 리네임 맵"을 체크포인트 처리하는 것은 CPU(51)에 기억된 체크포인트된 상태 정보의 량을 상당히 감소시키기 때문에 바람직하다.
예시적인 머신에서, 16개의 체크포인트까지 동시발생 명령을 유지하는 것 (64)은 임의의 소정의 시간에서 이용가능하다. 예시적인 실시예에서, ISU(200)는 발생 사이클마다 겨우 하나의 체크포인트를 할당하도록 제한되지만(하드웨어의 고려에 의해), 일반적으로는 하나 이상의 다수의 체크포인트가 사이클마다 할당될 수 있다. 소정의 법칙이 또한 예시적인 CPU(51)에서 구현되어, 동일한 머신 사이클동안 발행될 수 있는 명령의 타입 및 조합을 제한한다. 예컨대, 예시적인 CPU에서, 단지 하나의 제어 전이 명령만이 단일 머신 사이클동안 발행될 수 있기 때문에, 하나의 체크포인트만이 상기 사이클동안 상태를 세이브하는데 필요하게 된다. 이 체크포인트 제한은 일부의 경우(어떤 타입의 명령이 발행 윈도우에서 대기하느냐에 따름)에, 명령의 최대수(예컨대, 4)가 상기 사이클동안 발행될 수 없다는 것을 의미한다. 그 이상 또는 그 이하의 체크포인트가 제공될 수 있으며, 그 수는 머신에서 동시에 나타나는, 체크포인트 처리를 요구하는 넘버 명령과 같은 인자에 기초하여 선택된다.
예시적인 실시예에서, 활성 명령 링(312)은 64개의 명령을 동시에 유지한다. 차후 설명되는 바와 같이, 본 발명의 구조 및 방법은 체크포인트될 임의의 명령 타입을 제공하며, 선택적으로 ISU(200)로부터의 TIMEOUT_CHKPNT 신호에 응답하여 소정의 명령 사이클 타임아웃 간격에서 임의의 명령 타입에 대한 체크포인트 처리를 제공한다. 그러므로, 유지되는 체크포인트의 수는 활성 명령 링(312)에 의해 유지되는 명령의 수보다 크지 않아야 하며, 그 수는 일반적으로 더 작을 수 있다. 예시적인 CPU에서, 16개의 체크포인트가 할당가능하며, 이들 체크포인트 각각은 체크포인트를 발생시키는 명령이 철회된 다음에 복구될 수 있는 머신 자원이다.
예시적인 CPU(51)에서, 체크포인트 데이터(머신 상태)는 DO_CHKPT에 응답하여 체크포인트 기억 유닛에서 CPU(51)전체에 국부적으로 세이브되어, 칩 루팅을 감소시키고 성능을 향상시킨다. 그러나, 당업자는 체크포인트된 데이터가 칩 이외에 기억될 수 있음을 이해한다.
체크포인트 기억 유닛 각각은 16개의 어드레스 가능한 기억 요소 또는 엔트리를 갖는다. 각 기억 엔트리는 차후 설명되는 16개의 체크포인트 번호 각각에 대응한다. 따라서, 도 6을 참조하여, APC 및 NAPC 레지스터(113,114)의 콘텐츠(CHKPT_PC 및 CHKPT_NPC)는 DO_CHKPT 신호에 응답하여 PC 로직(106)에 의해 PC 체크포인트 기억 유닛(107)에 기억된다. 유사하게 제어 레지스터 콘텐츠 (CHKPT_CNTRL_REG)는 도 17에 도시된 바와 같이, 제어 로직(816)에 의해 제어 레지스터 체크포인트 기억 유닛(817)에 기억된다. 또한 도 16에 도시된 바와 같이, FXRFRN(604), CCRFRN(610), 및 FPRFRN(605) 각각의 리네임 맵을 나타내는 데이터 (CHKPT_MAP)는 체크포인트 기억 유닛(616)에 기억되고, 프리리스트 로직(701)의 프리리스트를 나타내는 데이터(CHKPT_FREELIST)는 프리리스트 체크포인트 기억 유닛 (702)에 기억된다. 그리고, 차후 설명되는 바와 같이, 트랩 스택 유닛(815)의 특정 콘텐츠도 또한 체크포인트된다.
ISU(200)는 언제 체크포인트가 형성되어야 하는지를 판정하는 기능을 한다. 이는 체크포인트될 필요가 있는 방금 설명된 타입의 것이 있는지를 결정하기 위해, BRB(59)로부터 수신된 인출된 명령을 디코디함으로써 이루어진다. 차후 설명되는 바와 같이, ISU는 또한, 체크포인트가 소정 개수의 머신 사이클이 발생한 후에 형성되어야 한다는 것을 PSU(300)가 TIMEOUT_CHKPT 신호에 의해 가리킬때, 언제 체크포인트를 형성할지를 결정한다. 그 결과, ISU(200)는 체크포인트가 형성되어야 하는 것을 나태내고, 그 체크포인트에 대한 체크포인트 번호(차후 상세히 설명됨)를 지정하는 DO_CHKPT 신호를 발생시킨다.
도 24는 PSU(300) 내의 체크포인트 유닛(303)의 기능 블록도이다. ISU(200)에 의한 DO_CHKPNT 신호의 어서트에 의해, 체크포인트(CKPT)(303)는 하나 이상의 명령에 대해 체크포인트를 형성하도록 지시되며, 명령 슬롯 0-3에서 발행된 명령들중 어느 것이 체크포인트를 형성하도록 지시되며 하나 이상의 프리 체크포인트 레지스터가 사용가능하지 않으면, 체크포인트는 할당될 수 없기 때문에, CKPT(303)는 CHKPT_AVAIL 신호를 ISU(200)로 전송해야 한다. CHKPT_AVAIL는 적어도 하나의 체크포인트가 할당을 위해 사용가능하다는 것을 ISU에게 알리고, 체크포인트 번호를 ISU에게 알려서, 체크포인트 번호가 각 명령에 할당될 수 있고, ISU(200)에 의해 형성되고 DFB(62)로 전송되는 체크포인트 번호(CHKPTs)로 통합될 수 있게 한다. 이들 신호는 ISU(200)에 의한 DO_CHKPNT 신호 발행에 선행한다. 만일 어떠한 체크포인트도 할당을 위해 이용가능하지 않으면, ISU에 의해 발행된 명령은 체크포인트 자원이 이용가능하게 될때까지 정지한다. 간단히 말해, 기억된 체크포인트는 실행 예외 또는 예측 오류로부터 복구할 필요가 있는 경우에만 사용되며, 그렇지 않으면, 기억된 체크포인트는 할당 해제되고, 기억 공간은 재사용을 위해 해방된다. (체크포인트를 포함하는 머신 자원의 할당 및 할당 해제는 차후 상세히 설명된다.) 차후 설명되는 본 발명의 기본적인 구조 및 방법의 강화에 있어서, 타임아웃 체크포인트는, 소정 갯수의 머신 사이클 또는 소정 개수의 멸령이 발행되고 체크포인트의 형성없이 소멸되는 경우, 디코드된 명령 타입에 상관없이 형성된다.
체크포인트 유닛(303)은 체크포인트를 계속 트래킹하고, ISU(200)에 의한 명령에 의해 체크포인트를 할당하며, 체크포인트가 더이상 필요하지 않을때 체크포인트를 해방한다. 만일 회부된 일련 번호(CSN)가 체크포인트 i+1의 일련 번호(SN)보다 클때(CSN>SN), 체크포인트 i는 임의의 명령 경계에서 머신 상태를 복구하는 것을 허용하는 본 발명의 방법 및 구조에 따라 회부된 명령보다 순서적으로 더 앞의명령으로 머신을 백트래킹할 필요가 없기 때문에 철회될 수 있다. PSU(300)는 또한, 시스템이 체크포인트를 할당하거나 해방할때 시스템의 휴지를 지시하여, 이들 시스템 구성성분들이 철회된 체크포인트를 위해 이용되었던 그 국부적 데이터 기억 영역을 재사용할 수 있다. 체크포인트 유닛(303)은 또한 얼마나 많은 체크포인트가 할당을 위해 해방되는 지를 ISU(200)에게 알린다. 체크포인트의 사용은 차후 설명되는 백업 및 백스텝 유닛에 관련하여 차후 상세히 설명된다.
체크포인트 유닛(303)는 5개의 주요 기능을 갖는다. 먼저, 체크포인트 유닛은, ISU(200)로부터의 DO_CHKPNT 신호에 응답하여, 체크포인트 레지스터 유닛(352)내의 체크포인트 데이터 레지스터 구조(CHKPNT_REG_i)의 리스트의 유지를 통해 ISU(200)에 의해 요구될때 체크포인트의 할당을 제어한다. DO_CHKPNT 신호는 제어 전송 명령이 발행될때, 하나 이상의 체크포인트가 형성되어야 한다는 것 및 그 각각의 체크포인트 번호 위치(들)(예컨대, 0-15)를 특정한다. 본 발명의 구조 및 방법에 대한 강화에 있어서, TIMEOUT_CHKPT는 체크포인트 유닛(303)에 의해 발생되며, ISU(200)에 전송되어, 기본적인 체크포인트 처리 방법에 대한 강화에 있어서 차후 설명되는 바와 같이 명령 타입에 비교적 상관없이 소정의 타이밍에서 체크포인트를 형성한다. 이 타임아웃 체크포인트는 체크포인트가 형성되지 않은 명령의 효과를 원래대로 복구하기 위해 취하는 사이클의 최대수를 설정하고 제한하기 위해 제공된다.(타임아웃 체크포인트 형성은 체크포인트 가능한 명령 타입이 동일한 명령 윈도우에서 발행될때 지연되거나 취소된다.)
두번째, 체크포인트는 소정의 체크포인트(n) 및 시간적으로 다음 체크포인트(n+1)를 지나는 CSN 진행에 기초하여 체크포인트를 철회(클리어)한다. 특정의 체크포인트 번호를 지나간 CSN을 결정하는데 사용되는 메카니즘은 체크포인트 레지스터에 기억된 일련 번호와 CS을 비교하는 것이다. 체크포인트 레지스터에 기억된 일련 번호는 체크포인트가 형성된 명령 후의 명령의 일련 번호이다. ICRU(301)로부터의 ISN 및 CSN에 응답하여, 예컨대, 체크포인트 n은 CSN이 체크포인트 n 및 n+1을 지나 진행하는 경우에만 철회될 수 있다.
세번째, 체크포인트 유닛(303)은 체크포인트가 ISU에 의한 할당을 위해 이용 가능한지와 체크포인트 위치 번호(들)를 비롯하여, ISU(200)에게 전송되는 신호 CHKPT_AVAIL을 통해 할당되어야 하는 다음 체크포인트가 어떤 것인지를 ISU(200)에게 표시한다. 네번째, 체크포인트 유닛(303)은 할당된 체크포인트에 대응하는 명령 일련 번호(SN)을 기억하며, 다름 유닛에 의해 요구될때 체크포인트와 관련된 SN 및 SN+1을 모두 ICRU(300)에 제공한다. 다섯번째, 미해결의 유효 체크포인트 중 어느 것이 소멸되는 것을 백트래킹 유닛(305)내의 백업 유닛(402)에 표시하는 명령 소멸 벡터(KILL_VEC)를 발생시킴으로써, 그리고 어느 체크포인트가 머신 백업에 관련하여 철회될 수 있는지를 신호 CHKPNT_SN 및 CHKPNT_SN_INC에 의해 ICRU(301)에 표시함으로써, 체크포인트 유닛은 실행 머신 백업에 관여한다. (머신 백업은 차후 상세히 설명된다.)
A. 체크포인트 할당 레지스터의 구조
체크포인트 할당 레지스터(325) 구조는 표 1에 도식적으로 나타난다. 첫번째 6비트는 상태비트이다. 비트-V는 체크포인트의 유효성(할당)을 표시한다. 비트-CP(체크포인트 지나감)는 CSN이 이 체크포인트의 SN을 지나갔는지를 표시하고, Q는 CSN 진행의 트래킹을 지속하는 5개의 상태중 한 상태를 나타내며, GT(보다 많음)는 CSN이 할당에서의 체크포인트의 일련 번호보다 큰지를 표시한다. 비트-GT는 CSN이 언제 이 체크포인트를 지났는지를 판정하는데 사용된다. 부팅시, 비트 V 및 CP는 적절한 기능을 위해 비트-V가 "1"로 세트되고 비트 CP가 "0"으로 세트되는 체크포인트 위치 0을 제외하고 0으로 세트되어야 한다. NSN 필드는 체크포인트된 일련 번호에 후속하는 다음 일련 번호를 표시한다. 이 실행에 있어서, 체크포인트 번호는 세이브되지 않으며, 오히려 위치 "i"에 대한 체크포인트 데이터 구조의 V-비트의 세팅은 체크포인트 "i"가 할당되었음을 나타낸다. 체크포인트 레지스터 (CHKPNT_REG_i)에 대한 가능한 상태(는 표 2에 설명되어 있다. 예시적인 CPU에서, 비트-Q는 체크포인트 할당동안 '000' 또는 '001'로 리셋된다. 비트-Q는 A-링(312) 둘레로의 CSN 진행에 기초하여 상태를 변화시킨다. 표 3은 Q-비트 상태 및 그 변화를 나타낸다.
[표 1]
예시적인 체크포인트 할당 레지스터(CHKPNT_REG_i)의 구조
Figure pct00001
[표 2]
예시적인 체크포인트 레지스터(CHKPNT_REG_i)의 가능한 상태
Figure pct00002
[표 3]
예시적인 Q-비트 상태 및 변화
Figure pct00003
명령 SN을 위한 체크포인트의 할당에 있어서, 체크포인트 할당 로직 유닛 (351)은 체크포인트 "i"가 유효하며 철회되지 않았다는 것을 표시하기 위해 CHKPNT_REG_i의 비트를 "1"로 세트시키고 CP-비트를 0으로 세트시키는 체크포인트 레지스터 및 제어 유닛(352)에 전송한다. 할당 대상의 체크포인트는 할당을 위해 이용가능한 다음 체크포인트 번호(들)(CHKPNT_SN)를 ISU에게 알리는, ISU(200)에 전송된 CHKPT_AVAIL 신호 및, 체크포인트 형성 인에이블 신호를 포함하고 체크포인트가 형성되어지는(CHK_LOCATION) 명령 일련 번호를 식별하는, ISU로부터의 DO_CHKPNT 신호에 의해 CAL(351)에서 결정된다. 비트-Q는 표 3에 도시된 바와 같이, 체크포인트가 할당된 시점에서 CSN의 위치를 표시하기 위해 기록된다. 이 정보는 링 둘레로부터의 CSN의 변화(예컨대 위치 63으로부터 역으로 위치 0까지의 변화)를 검출하는데 사용된다. 할당되는 체크포인트는, 체크포인트 일련 번호를 식별하고 인에이블 신호로서 기능하는 신호 DO_CHKPNT에 의해 결정된다. 또한, 체크포인트에 대응하는 일련 번호는 체크포인트 할당 로직 유닛(351)에 의해 계산되지만, 1만큼 인크리먼트된 일련 번호(NSN=SN+1)만이 레지스터에 기억된다. 일련 번호 NSN은 2개의 다른 조건에서 사용된다. 첫번째로, NSN은 ICRU(301)로의 데이터 버스 상에서 인크리먼트된 체크포인트 일련 번호 신호(CHKPNT_SN_INC)가 된다. 두번째로, NSN은 오류 명령이 체크포인트에 후속하는 명령 슬롯에 놓여 있는지를 결정하는데 사용된다. SN보다 NSN(SN+1)을 레지스터에 세이브함으로써 논리를 세이브하고 체크포인트 다음의 일련 번호를 식별하는 신호의 생성을 빠르게 한다. 이와 다르게, SN 그 자체는 레지스터에 기억될 수 있으며, 논리는 인크리먼트된 일련 번호 신호를 발생시키기 위해 제공될 수 있다.
다음 체크포인트 할당 절차는 예시적이다. 만일 체크포인트 형성 신호가 어서트(DO_CHKPNT)되면, V-비트 필드는 "1"로 세트되며(CHKPNT_REG_i[V_field]=1), CP_비트 필드는 클리어된다(CHKPNT_REG_i[CP_field]=0). 그런 다음, 체크포인트가 형성되어진 명령 일련 번호는 엔코드된 4-비트 체크포인트 위치 벡터로부터 분할되며, 체크포인트 일련 번호 필드(CHKPNT_REG_i[SN_field])에 기억된다. 에컨대, CPU(51)의 실시예에서, '0000'은 체크포인트 위치 NISN를 가리키며; '0001'은 위치 NISN+1을 가리키며; '0011'은 위치 NISN+2을 가리키며; '0111'은 위치 NISN+3을 가리키며; '1111'은 위치 NISN+4를 가리킨다.
C. 체크포인트 철회
체크포인트는 체크포인트 클리어/철회 로직 유닛(353)에서 클리어되거나 철회된다. 체크포인트 유닛(303)은 사이클마다 ISU(200)에 의해 요구되는 만큼의 체크포인트만을 요구한다. 체크포인트는 현재의 체크포인트(n) 및 다음 체크포인트 (n+1)를 지난 CSN에 응답하여 레지스터(352)의 V-비트 필드를 클리어함으로써 철회된다. 체크포인트 할당 로직 유닛(353)은 체크포인트 레지스터(352)에서 철회될 체크포인트를 지시하기 위해 사용되는 소위 OLDEST_ACTIVE_CHECKPOINT라고 하는 포인터를 유지한다. 체크포인트 철회 절차는 다음과 같다. 소위 "CSN_PASSED" 신호는 체크포인트(CKPSN)에 기억된 일련 번호와 회부된 일련 번호(CSN) 포인터(예컨대, CKPSN_CSN) 사이의 차이를 계산함으로써 철회 로직(353)에서 발생된다. CSN은 ICRU(301)에서 유지되며, 각 사이클에서 체크포인트 유닛(303)에 전송된다. 체크포인트는 CSN이 소정의 체크포인트(n) 및 시간적으로 다음 체크포인트(n+1)을 지나 진행하거나, 체크포인트 일련 번호를 지나는 머신 백업이 있는 경우에만 철회될 수 있다.
본 발명의 구조 및 방법의 일실시예에 있어서, 체크포인트를 지나는 CSN의 진행은 CSN을 전체 체크포인트 일련 번호와 동시에 비교하는 로직을 제공함으로써 결정된다. 비교를 실행함에 있어서, CSN이 체크포인트 일련 번호를 지나갔는지를 결정하는데는 단순히 테스트보다 더 큰 것만으로는 불충분한 경우가 있을 수 있으므로 A-링(312)의 특성 주변의 랩(wrap)도 고려된다(모듈로-링 길이).
D. 머신 백업에서의 체크포인트 유지
다음 머신 사이클의 개시를 위해 KILL_VEC 신호를 준비하도록 체크포인트 유닛(303)에게 알리는 백트래킹 유닛(305)로부터의 WILL_BACKUP 및 BACKUP_CHECKPOINT 신호의 수신에 응답하여, KILL_VEC 신호는 회부되지 않은 명령을 소멸시킨다. 소멸되는 명령은 체크포인트시 명령의 명령 일련 번호를 특정하는 BACKUP_CHECKPOINT 신호 및 최후에 회부된 명령을 지시하는 ISN으로부터 유도된다. CSN과 백업 체크포인트 사이의 모든 이러한 명령은 소멸된다.
CPU(51)의 일실시예에서, BACKUP_CHECKPOINT는 백트래킹 유닛(305) 내의 백업 유닛(402)에 의해 발행된 신호이며, 어떤 체크포인트가 상태를 복구하기 위해 백업하는지를 CPU(51)에게 알려준다. 명령 소멸 벡터 신호(KILL_VEC)는 또한 백트래킹에 의해 발생되어, ISN과 백업 체크포인트 사이의 명령중 어느 명령이 소멸되는지를 표시한다. 예컨대, 명령 소멸 벡터는 소멸되는 명령을 식별하는 핫비트를 갖는 다수-핫 신호일 수 있다. 다른 신호 형태가 선택적으로 사용될 수 있다.
체크포인트 유닛(303)은 ICRU(301)에 체크포인트 일련 번호를 식별하는 체크포인트 레지스터 정보(CHKPNT_SN)를 제공하여, 백업동안 ISN을 조절할 수 있다. 체크포인트 유닛(303)은 완료되지 않은 부동소수점 실행 또는 데이터 브레이크포인트 예외가 검출될때(CHKPNT_SN_INC) ISN을 조절하기 위해 ICRU(301)에 의해 사용되는 일련 번호를 또한 제공한다.
E. 타임아웃 체크포인트 강화
종래의 체크포인트 처리 기술에 있어서, 체크포인트는 명령의 디코드된 속성에 기초하여 형성된다. 체크포인트는 연속적인 체크포인트(체크포인트 경계 내) 사이의 명령의 수가 제한되지 않도록 소정의 명령 속성에 대해서만 형성된다. 명령 실행 예외가 발생하면, CPU(51)는 오류 명령 이전의 CPU(51) 상태를 복구하기 위해 다수의 머신 사이클을 소비해야만 할 수도 있다. 따라서, CPU(51)가 오류 명령에 이르기 전의 명령을 재실행하거나 복구하는데 걸리는 시간은 명령 윈도우 사이즈 및 체크포인트 경계 내의 명령의 수에 대한 함수가 된다. 이 명령 윈도우 사이즈는 CPU(51)에서 언제라도 나타날 수 있는 명령의 최대수를 의미한다[예시적인 CPU(51)에서는, 최대 64개의 명령이 언제라도 머신사이클에서 발행될 수 있다].
본 발명의 구조 및 방법에 대한 이러한 강화에 있어서, 체크포인트는 디코드된 명령 속성에(만) 기초하지 않고 형성되지만, CPU(51)의 타임아웃 상태에 기인하여(추가로) 형성된다. 이 타임아웃 상태는 체크포인트 형성 없이 지나간 명령 발행 사이클의 수에 기초한다. 예컨대, 체크포인트가 형성되지 않았다면, 그 이유는 근래 발행된 명령이 통상적으로 체크포인트되는 타입이 아니기 때문이다. 타임아웃 체크포인트 처리는 체크포인트 경계내의 명령의 최대수를 제한한다. 명령 윈도우 사이즈가 체크포인트 경계 내의 명령의 최대수보다 크면, 프로세서는 예외의 경우 체크포인트 기술에 기초한 종래의 명령 디코드보다 빠르게 체크포인트된 상태를 복구할 수 있다. 또한, 본 발명의 체크포인트 처리의 강화에 의해 CPU(51) 상태 복구의 명령 윈도우 사이즈에 대한 의존성을 제거한다.
타임아웃 체크포인트는 종래의 체크포인트를 구현하는 구조 및 방법, 또는 본 발명의 리네임 맵 체크포인트 처리에서 사용될 수 있다. 더욱이, 타임아웃 체크포인트는 종래의 프로세서 백업 기술뿐만 아니라 본 발명의 백업 및 백스텝 구조 및 방법과 함께 사용될 수 있다.
타임아웃 카운터(355)는, 적어도 하나의 명령이 머신 사이클 동안 발행되었음을 표시하는, ISU(200)로부터의 INSTR_ISSUED 신호를 수신하며, 명령 발행의 수를 카운트한다. 체크포인트(명령 디코드에 기초한 체크포인트 또는 이전의 타임아웃 체크포인트) 형성없이 지나간 명령 발행 사이클의 수가 소정의 카운트를 초과하면, 타임아웃 카운터는, 타임아웃 상태가 발행했으며 체크포인트가 형성되어야 한다는 것을 표시하는 TIMEOUT_CHKPNT 신호를 ISU에 전송한다. 그런 다음 ISU(200)는 체크포인트가 형성되어야 한다는 것을 표시하는 DO_CHKPT 신호를 발생시킨다. 상기 설명된 바와 같이, 이 신호는, 발행된 명령이 체크포인트를 요구하는 타입의 명령이라고 ISU(200)가 결정할 때 또한 발생될 수 있다. 카운터(356)는, 체크포인트가 실제로 형성되었을 경우에만 ISU로부터의 DO_CHKPNT 신호에 의해 리세트된다. 체크포인트 경계내에서 허용되는 명령의 최대수는 최대 명령 발행율(머신 사이클당 발행되는 명령의 최대수) 및 카운터의 타임아웃 값에 의해 결정된다.
타임아웃 체크포인트에서의 변화는 바람직할 수 있다. 예컨대, 만일 타임아웃 체크포인트에서와 동일한 사이클에서 발행될 예정인 명령중 하나가 정당하면, 명령 디코드에 기초한 체크포인트가 우선적으로 형성되며, 타임아웃 카운터를 리세트시키는 기능을 한다. 또한, 타임아웃 체크포인트가 정당하게 되는 시점에서 모든 체크포인트가 할당되면, 타임아웃 체크포인트는 명령 디코드 타입 체크포인트를 위해 정확한 상태를 유지하는데 요구될 수 있는 것처럼 머신을 정지시키기보다는 소정의 법칙에 따라 지연(한 사이클 지연)될 수 있다.
F. 임의의 명령 경계에서의 정확한 상태의 유지 및 복구
본 발명의 방법은 임의의 명령 경계에서 정확한 상태를 유지할 수 있으며, 명령 경계에서 상태를 복구하는데 요구되는 정보량을 또한 최소화한다. 여기에서 사용되는 "명령 경계(instruction boundary)"는 명령이 발행되기 직전의(또는 명령이 발행된 직후의) 연속하는 명령 세트에서의 포인트에 해당한다. 각각의 명령은 명령 경계를 형성한다.
종래의 명령 체크포인트는 프로세서의 체크포인트 경계에서(즉, 체크포인트된 명령에서만) 정확한 상태의 유지를 허용하지만, 종래의 체크포인트 처리는 모든 명령에서 이용되지 못하며, 만일 그렇게 이용되어도, 머신 사이클당 다수의 명령을 발행하는 머신에 대해, 동일한 다수의 체크포인트가 각 사이클마다 요구될 수 있기 때문에 CPU(51)를 개선시키기보다는 방해가 된다. 본 발명에서 다양한 명령 발행 법칙은 하나의 명령만이 각 사이클에서 체크포인트되는 것을 요구하도록 구현되며, 백스텝 방법 및 구조는 더 양호한 명령 레벨 복구를 제공한다. 명령 체크포인트는 투기적 명령 시퀀스에 의해 부정확하게 수정될 수 있는 명령과 같은, 아키텍쳐(머신) 상태를 유지하고 나중에 복구하기 위해 사용된다.
체크포인트 경계에서 정확한 상태를 유지하는 종래의 체크포인트 처리는 공지되어 있지만, 종래의 체크포인팅은 머신 상태를 포획하고 나중에 복구하는 방법으로서만 사용될 때, 투기적 무순위 실행동안 더 근접하게 유지된 명령 경계에서 정확한 상태의 유지를 허용하지 않는다.
G. 체크포인트 처리된 데이터량을 감소시키기 위해 소정 명령에 대해 머신을 동기화하는 방법
체크포인트는 고정 크기를 가지며, 이 크기는 체크포인트를 생성하는 명령 타입이나 오퍼랜드와는 관계없다. 예를 들어, 200개의 상태 값을 수정할 수 있는 명령을 갖는 머신(CPU)에 있어서, 생성된 모든 체크포인트는 명령 자체가 겨우 8개의 상태 값을 수정한다 하더라도 100개의 상태 값을 기억하여야 한다. 본 발명의 실시예에 있어서, 신규한 구조 및 방법은 각각의 특정 명령에 의해 수정된 상태의 양과 통상적인 처리과정에서 각각의 특정 명령이 발생하는 통계적 빈도수를 고려함으로써, 모든 체크포인트에서 체크포인트된 데이터량을 감소시키도록 구현된다.
이러한 설계 기술을 이용하여, 최적의 체크포인트 크기가 결정될 수 있으며, 머신내에서 구현될 수 있다. 먼저, 각각의 명령에 의해 수정가능한 상태가 결정된다. 다음으로, 어떤 대표적인 명목상의 처리 작업에 대해 각각의 특정 명령이 발생하는 통계적 빈도수가 결정된다. 각 명령에 대한 상태 기억 요건이 검사된다. 설계 목적은 거의 발행되지 않지만 더욱 빈번히 발생하는 명령보다 상대적으로 대용량인 체크포인트 기억 장치를 필요로 하는 명령들을 식별하는 것이다. 어떤 선형 또는 비선형 최적화 기술은 체크포인트할 명령을 결정하는데 사용될 수 있으며, 어떤 최대 체크포인트 기억 장치에 기초한 비수학적 규칙은 체크포인트 처리된 상태를 감소시키기 위해 사용될 수 있다. 단순화된 예가 이하 기술된다.
체크포인트 처리된 상태 감소의 단순화 예
명령 세트내에서 임의 명령에 의해 수정될 수 있는 상태
Figure pct00004
명령 A에 의해 수정(mod)될 수 있는 상태
Figure pct00005
명령 B에 의해 수정될 수 있는 상태
Figure pct00006
명령 C에 의해 수정될 수 있는 상태
Figure pct00007
명령 D에 의해 수정될 수 있는 상태
Figure pct00008
각각의 명령 A, B, C 및 D가 체크포인트 처리된다면, 모든 체크포인트는 상태 1 내지 10 모두를 기억하여야 한다. 그러나, 명령 C가 거의 실행되지 않음으로써, 극히 드물게만 발생하는 명령의 실행중에 머신을 동기 시켜 CPU(51)의 속도 저하(slowdown)가 필요해진 경우에는 명령 C를 체크포인트 처리하지 않음으로써, 체크포인트 처리된 상태를 10개의 상태에서 3개의 상태, 즉 상태 1, 상태 4 및 상태 8로 감소시키게 된다.
머신의 동기화는 머신 동기를 요청하는 임의의 명령의 발행를 현행 처리중인 명령이 회부되고 철회될 때까지 지연시키는 단계와, 동기화를 요구하는 명령을 순차적으로 및 순서대로 실행하는 단계를 포함한다. 머신이 동기 모드에서 실행되면,예외 조건이 상태에 대해 재기록되기 전에 식별되기 때문에 명령 체크포인트 처리는 정확한 상태를 유지하기 위해 요구되지 않는다.
H. 체크포인트 처리된 데이터량을 감소시키기 위해 레지스터 리네임 맵을 체크포인트 처리하는 방법
게다가, 체크포인트가 발생된 시점에서 머신의 상태 전체가 기억되기 때문에, 종래의 체크포인트는 다량의 정보를 포함한다. 이로써, 머신 상태는 잘못 예측된 분기, 결함, 실행 에러 또는 다른 처리상의 예외 상황으로부터 회복하도록 복구될 수 있다. 변화하는 상태만을 수정시키기 위한 체크포인트 처리방법은 종래에는 시도되지 않았다.
예컨대, 64개의 명령이 동시에 발행되는 것이 허용되는 CPU(51)에서 종래의 체크포인트 처리방법이 각 명령에 적용된다면, 각 명령당 하나씩, 4-발행 머신에서 4개의 체크포인트가 머신 사이클당 생성된 수와 같은 수인 64개의 체크포인트까지 유지되어야 할 것이다. 종래의 체크포인트에 기억된 상태의 특정 타입 및 양이 CPU(51) 구조와 명령 세트에 좌우된다고 하지만, 각각의 종래 체크포인트는 임의의 명령에 의해 수정될 수 있는 모든 상태에 대한 상태 정보를 포함한다. 다시 말해서, 종래의 체크포인트는 명령이 상태를 수정할 수 있는 지의 여부에 관계없이 모든 수정가능한 상태에 대한 상태 정보를 포함한다. 종래 체크포인트 처리방법에 있어서, 머신 상태를 복구하기 위해 필요한 모든 머신 상태는 체크포인트에서 체크포인트로 변화하는 상태만이 아니라, 각각의 체크포인트에 대해 재기록된다.
본 발명의 방법에 있어서, 레지스터는 리네임되고, 리네임 맵은 레지스터 리네임 맵에 기억된다. 레지스터 리네임 방법은 이 명세서의 다른 부분에서 설명된다. 레지스터 리네임 방법은 아키텍쳐 레지스터를, 처리과정에 이용가능한 아키텍쳐 레지스터의 수를 효율적으로 증가시키는 기능을 하는 더 많은 수의 물리적 레지스터로 맵핑하는 방법이다. 본 발명의 방법에 있어서, 새로운 체크포인트 처리방법에 필요한 기억장소의 양은 데이터 값 자체가 아닌 리네임된 레지스터를 체크포인트 처리함으로써 감소된다. 기술된 바와 같이, 정확한 상태를 유지하기 위해 다량의 체크포인트 처리된 상태를 필요로 하는 어떤 소정의 명령은, 이전에 발행된 모든 명령이 실행 및 회부되고, 그 자원들을 철회(ISN=CSN=RRP)하도록 머신을 동기화 시킨다. 만일 동기화된 타입의 명령 결함이 잘못 예측되면, 상태는 수정되지 않고, 상기 결함이 처리되거나 또는, 명령 실행 결과가 상태를 수정하도록 허용되기 전에 다른 명령 경로가 속행될 수 있다.
제어 레지스터를 수정할 수 있는 비동기 요구 명령에 의해 수정된 모든 상태가 체크포인트되어, 머신 상태는 신속하게 복구될 수 있다. 상기 명령에 의해 수정된 모든 상태는 체크포인트되고 상기 기술된 바와 같이 CPU(51)내에 국부적으로 기억된다. 게다가, 제어 레지스터를 수정하지 않는 명령의 실행에 대한 상태는 이 명세서의 다른 곳에서 설명되는 바와 같이 CPU(51)를 백스텝핑함으로써 복구될 수 있다. 도 26은 타임아웃 체크포인트를 형성하기 위해 다른 체크포인트 처리 방법에 적용가능한 선택적인 체크포인트 강화를 포함한 체크포인트 처리의 본 발명인 방법의 실시예를 나타낸 플로우챠트이다.
V. 예측 오류 및 예외로부터의 복구
앞에서 언급한 바와 같이, 프로그램 제어에 대한 예측 오류 및 예외가 도 5에 도시된 명령 파이프라인에서 발생할 수 있다. 이러한 에러는 예측 오류 또는 예외가 발생된 명령 바로 이전의 상태로 CPU(51)를 되돌리기 위해 검출 및 처리된다.
A. 다수의 미해결 분기/점프-링크 명령을 동시에 평가하기 위해 워치포인트를 이용한 예측 오류 검출
명령을 투기적으로 실행할 수 있는 프로세서에 대해, 분기 방향(채용 또는 비채용) 또는 분기 어드레스(목적 어드레스 또는 분기 명령의 다음 어드레스)는 이들이 해결되기 전에 예측될 수 있다. 이후, 이러한 예측이 오류로 판명되면, CPU(51)는 이전 상태로 되돌아가, 올바른 분기 스트림으로 명령의 실행을 개시한다. 종래의 프로세서에 있어서, 복수의 분기들은 종종 하나의 사이클내에서 평가할 수 있었다. 그러나, 이러한 종래의 프로세서는 사이클당 단지 하나의 분기 예측만을 평가한다. 그러므로, 평가할 준비가된 비선택된 분기 평가는 지연되어야 한다. 분기 평가를 지연시키는 것은 CPU(51) 성능을 떨어뜨리며, 가능한 신속하게 분기를 평가하는 것은 CPU 성능을 크게 개선시킬 수 있다.
본 발명인 워치포인트 구조 및 방법은 종래 기술에 대해 여러 가지 이점을 제공한다. 첫번재, 복수의 예측된 분기 또는 점프-링크 명령을 동시에 모니터 또는 워치할 수 있다.둘째로, 복수의 실행 유닛으로부터 버스로 전송되는 데이터를 동시에 모니터 또는 워치으로써 예측된 분기 또는 점프-링크 명령이 대기하는 복수의 조건-코드 데이터 또는 평가된 점프-링크(JMPL) 어드레스를 취할 수 있다. 셋째로, 분기 또는 점프-링크 명령의 복수의 예측 오류 신호를 동시에 발생시킬 수 있다.네째로, 다른 분기 어드레스 또는 예측된 점프-링크 어드레스를 단일의 공유 영역에 기억할 수 있다. 다섯째로, 예측 오류가 워치포인트에 의해 검출될 때 명령 인출에 대해 정확한 분기 어드레스 또는 점프-링크 어드레스를 전송할 수 있다.
도 27에 있어서, 워치포인트(WPT) 유닛(304)은 각각의 발행되고 체크포인트 처리된 제어 전송 명령의 실행 및 예측 상태를 모니터링하는 기능을 한다. 그러므로, WPT 유닛(304)은 DO_WTCHPT 신호와 함께 DO_CHKPNT 신호를 수신하는데, DO_WTCHPT 신호는, Br Xcc, 조건 Br Icc, 조건 Br Fcc, JMPL rt(I)(rd=0), 제어 레지스터(CCR, FSR 레지스터는 제외)로의 판독/기록 명령에 대한 조건 정보를 비롯하여 분기, 무효 분기 및 점프-링크 명령에 대한 조건 코드 정보를 포함한다. 조건 코드 정보는명령 순서가 적절히 예측되었는지 또는 복구될 필요가 있는지를 판정하기 위해 WPT 유닛(304)에 의해 나중에 사용된다. WPT 유닛(304)은 본 명세서의 다른 곳에서 더 상세히 기술된다.
WPT 유닛(304)은 DFB(62)로부터 데이터 순방향 전송 버스를 통해 수신되는 실행 완료 신호를 모니터링하거나 워치하여, 예컨대 분기 예측 오류와 같은 소정의 이벤트가 검출되면, 다른 CPU 유닛(51)에게 알리는 기능을 한다. 워치포인트 유닛 (304)내에 있는 워치포인트 레지스터(491)는 다양한 기능을 수행한다. 이러한 레지스터는 분기 예측, JMPL 예측을 검사하고, 최초 예측이 부적절할 때 백업 후 명령을 재인출하기 위해 정확한 분기/JMPL 어드레스를 BRB(59)에 공급한다. 이들 레지스터는 데이터 전송 분배 버스상에 있고, 여러 실행 유닛(FXU, FPU, LSU 및 FXAGU)으로부터의 결과를 모니터하기 때문에 "워치포인트" 레지스터라 불린다. 각 체크포인트당 하나씩 16개의 워치포인트 레지스터가 있다.
예시적인 워치포인트 유닛(304)은 정수 실행 유닛(FXU), 정수 및 어드레스 발생 실행 유닛(FXAGU), 부동소수점 실행 유닛(FPU)를 갖는 CPU와 관련하여 기술된다. 본 명세서의 설명에 비추어, 이 기술분야의 당업자는 더 많거나, 더 적은 또는 다른 실행 유닛이 구현될 수 있다는 것을 알 수 있을 것이다. 특히, 예시적인 CPU(51)의 실행 유닛들을 정합시키기 위하여 부가적인 FXU 및 FXAGU가 제공될 수 있다.
도 27은 워치포인트 유닛(304)내의 주요 기능 블록을 나타낸 기능 블록도이다. BRB(59)내의 인출 유닛(FETCH)은 명령을 인출하여, 발행 유닛(200)에 제공하고, 명령의 디코딩에 기초하여 분기 및 JMPL을 예측한다. 발행 유닛(200)은 DO_CHKPNT 신호를 워치포인트 유닛(304)과 FSR/CCRFRN 유닛(606)에 전송하고, DO_WTCHPT 신호를 워치포인트 유닛(304)에 전송한다. FSR/CCRFRN 유닛(606)은 조건 코드 리네임(CC-리네임) 기능을 수행한다. DO_CHKPNT 신호는 체크포인트 구성을 개시하는 MAKE_CHKPNT 신호와, 구성될 체크포인트 번호를 식별하는 NEXT_CHKPNT 신호를 포함한다. DO_WTCHPT 신호는 분기 또는 JMPL 명령이 발행되었음을 워치포인트 유닛(304)에게 알리고, 분기 타입, 발행된 명령내의 조건 필드, 조건 코드(CC) 태그, 발행된 명령의 교번의 다음 프로그램 카운터 어드레스/예측 점프-링크 명령 어드레스(ANPC/예측 JMPL 어드레스)를 식별한다. FETCH 유닛은 또한, DO_WTCHPT 신호내의 WR-ANPC 신호의 형태로, 워치포인트 유닛(304)에 분기/JMPL 어드레스를 전송한다. 분기나 JMPL 또는 다른 제어 전송 명령(분기/JMPL)이 발행되면, 발행 유닛(200)은 JMPL 신호를 포함하는 발행된 각각의 분기 또는 JMPL에 대한 분기/JMPL 명령 발행 신호인 DO_WTCHPT 신호를 전송한다. WP_ANPC 신호는 타겟 RAM에 기록되고, PC 로직(106)에 의해 개선된 타겟 FPC를 나타낸다. ANPC 신호는 예측된 분기 및 JMPL 명령의 디코딩 과정 동안 결정된다. JMPL 명령에 대해, 워치포인트 유닛에 전송된 DO_WTCHPT 신호내의 WP_ANPC 신호는 예측된 타겟 FPC 이다. 분기 예측 명령에 대해, 워치포인트 유닛에 전송된 DO_WTCHPT 신호내의 WP_ANPC 신호는 교번 FPC, 즉 교번 분기 방향에 대한 FPC 이다. 워치포인트 유닛내의 ANPC 출력 로직으로부터 출력된 RD_ANPC 신호는 예측 오류가 발생했을 때 FPC, APC 및 NAPC 를 평가하기 위해 백업 동안 사용된다. 리네임 유닛(600)의 조건 코드(CC) 부분[FSR/CCRFRN(606)으로 불린다]은 CC 레지스터 리네임 동작을 관리하여, 명령이 발행된 후, CC 리네임 신호를 워치포인트 유닛(304)에 전송한다. CC 리네임 신호는 이하에 정의된 바와 같이, CC_TAG_RENAMED_C, CC_TAG_C, CC_DV_C, 및 CC_DATA_C 신호를 포함한다.
각 실행 유닛[FXU(601), FXAGU(602), FPU(600)]은 조건 코드 태그 (CC_TAGS_F)신호, 조건 코드 데이터 유효(CC_DV_F) 신호, 조건 코드 데이터 (CC_DATA_F)신호를 데이터 순방향 전송 버스를 통해 워치포인트 유닛(304) 및 FSR/CCRFRN 유닛(606)으로 전송한다. FXU 유닛으로부터의 태그, 데이터 유효, XCC 및 ICC 데이터 신호는 FXU_XICC_TAGS_F, FXU_XICC_DV_F, FXU_XCC_DATA_F, FXU_ICC_DATA_F 신호를 포함한다. FXAGU 유닛으로부터의 신호는 FXAGU_XICC_TAGS_F, FXUAG_XICC_DV_F, FXAGU_XCC_DATA_F, FXAGU_ICC_DATA_F 신호를 포함한다. FPU 유닛으로부터의 신호는 FPU_FCC_TAGS_F, FPU_FCC_DV_F,FPU_FCC_DATA_F 신호를 포함한다. XCC, ICC 및 FCC 조건 코드 및 포맷의 예는 예컨대, SPARC-V9에 기술되어 있다.
도 28에 있어서, 워치포인트 유닛(304)은 실행 유닛(FXU, FPU 및 FXAGU) 또는 FSR/CCRFRN(606)으로부터 수신되는 리네임된 CC 신호로부터 CC 데이터 전송 버스에서 직접 조건 코드를 획득하는 CC-획득 로직(1000)을 포함한다. 또한 워치포인트 유닛(304)은 분기 또는 JMPL 명령이 디코딩될 때마다 BRB(59)로부터 수신되는 예측된 조건 코드 데이터를 포함하는 워치포인트 정보를 기억하기 위한 워치포인트 기억 엘리먼트(1002)와 관련 판독/기록 제어 로직을 포함한다. 또한 워치포인트 유닛(304)은 실행 유닛으로부터 수신되는(직접 또는 리네임 유닛을 통해) 계산된 또는 실제 조건 코드들을 비교하고 또한 이들을 각각의 워치포인트 기억 엘리먼트 (1002)에 기억된 예측된 조건 코드와 비교하는 평가 로직(1001)을 포함한다. 타겟 RAM 및 이와 관련된 제어 및 비교 로직(1003)은 이하 더욱 상세히 기술되는 바와 같이 분기 또는 JMPL 예측 오류로부터의 회복에 참여한다. CC-획득 로직(1000), 평가 로직(1001), 워치포인트 기억 엘리먼트(1002)는 그 하나의 CPU(51)에 할당될 수 있는 16개의 워치포인트 유닛 각각에 대하여 하나씩 16개의 별도의 구조로 되어 있다. 단지 하나의 타겟 RAM(1003) 데이터 기억 구조가 제공된다.
16개의 워치포인트 각각에 대하여 다수의 데이터 엘리먼트가 기억된다. 각 워치포인트에 기억된 데이터는 워치포인트 동작시 세트되는 워치포인트 유효 비트 (WP_VALID[i]=1)와, JMPL 명령으로부터 분기 명령을 구별하기 위한 명령 타입 데이터[WP_JMPL[i]=1은 JMPL이 워치포인트를 요구한다는 것을 나타내고, WP_JMPL[i]=0은 워치포인트가 예측된 분기용으로 형성되었다는 것을 나타낸다.]와, 명령내의 조 건 필드(WP_COND[i])와, WP_XCC, WP_ICC, WP_FCC에 대한 기억 장소를 포함한다. 일실시예에 있어서, 이러한 데이터 엘리먼트는 래치에 기억된다. CC-태그는 CC_TAG_ARRAY에 기억되며, "ANPC"(Alternate Next Program Counter address)/예측된 JMPL(점프 및 링크 명령) 어드레스는 타겟 RAM에 기억된다. 유효 비트는 워치포인트 로직에 의해 기록되며, 분기 타입, COND, CC-태그 및 ANPC/JMPL 어드레스는 발행 유닛(200)으로부터 수신된 DO_WTCHPT 신호로부터 유도된다. DO_WTCHPT에 응답하여, 워치포인트 기억 엘리먼트(491)는 각각의 분기/JMPL 명령에 대해 활성화되며, 필드 선택 및 기록 로직은 DO_WTCHPT 신호를 디코딩하, 분기 타입, COND 필드, CC 태그 및 ANPC/예측 JMPL 어드레스를 워치포인트 유닛에 기록한다.
워치포인트 엔트리는 유효-비트를 "1"로 설정함으로써 활성될 수 있으며, 모든 체크포인트 엘리먼트는 그 사이클에서 이미 할당되어 있지 않으면, 워치포인트 (그리고 체크포인트)를 요구하는 명령의 발행는 지연된다. 다중 워치포인트 엘리먼트가 동시에 활성(유효)될 수 있고, 유효된(VALID 필드가 셋트) 모든 워치포인트 엔트리는 각 사이클에서 동시에 평가되어 예측 오류 신호를 발생시킬 수 있다. 워치포인트 유닛(304)은 데이터 기억 장소로 할당된 칩 영역을 감소시키기 위해, 동일한 기억 장소에 JMPL 명령용의 예측된 목표 어드레스 또는 분기 명령용의 ANPC 중 하나를 기억할 수 있다. 할당된 다목적 워치포인트 레지스터가 실제로 어떻게 사용되는지는 발행 유닛(200)으로부터의 DO_WTCHPT 신호의 콘텐츠에 따라 정해진다. 즉, 워치포인트 엔트리가 예측된 분기 명령용으로 형성되는지 또는 예측된JMPL 명령용으로 형성되는지에 따라 정해진다. 워치포인트 레지스터는 분기 및 점프 예측 평가할때 자기-할당취소한다.
워치포인트 엘리먼트는 명령이 조건부 분기 명령에 대해 발생할 수 있는 것처럼 예측 오류가 발생할 때마다 워치포인트 유닛(304)에 의해 할당된다. 모든 워치포인트 엘리먼트는 대응하는 체크포인트 엘리먼트를 갖지만, 그 반대가 항상 참인 것은 아니다. 워치포인트 엘리먼트는 예컨데 조건부 분기의 경우에 명령이 예측오류로 판명날 때마다 할당되기 때문에, 체크포인트는 대응하는 활성 워치포인트 엔트리를 갖지 않을 수 있다. 체크포인트는 예측 오류로 판명될 수 있는 명령 외의의 명령에 대해 할당될 수 있기 때문에("기억(SAVE)" 명령 또는 주기적 "타임아웃" 체크포인트가 분기 명령이 아닌 명령에 대해 형성될 때), 모든 체크포인트가 워치포인트를 갖는 것은 아니다. 워치포인트는 워치포인트 유닛(304)내의 복수의 워치포인트 엘리먼트(432)중 하나에 기억된다. 체크포인트 레지스터는 체크포인트 정보를 기억하기 위해 제공되지만, 실제로 체크포인트된 머신 상태는 기술된 바와 같이 CPU(51)를 통해 국부적으로 기억된다. 표 4는 세트의 예시적인 명령에 대하여 체크포인트내의 일련 번호에 의해 기억된 정보 타입과 만일 있다면 이에 대응하는 워치포인트를 나타낸다.
조건 코드 획득 로직(492)은 DFB(62)내의 실행 유닛으로부터 데이터 전송 버스상에 나타나는 조건 코드(CC)를 검출하여 획득하고, 이 코드를 평가 로직(493)으로 전달한다. 평가로직(493)에서는 상기 획득된 조건 코드가 발행될 때 예측되어 현대 명령이 워치포인트 엘리먼트(491)에 기억되어 있는 조건 코드와 비교된다. 만일 획득된 조건 코드가 예측된 조건 코드와 매칭된다면, 명령은 정확하게 예측된 것이며, 원래대로 복구될 필요가 없다. 그러나, 만일 조건 코드 획득 유닛에 의해 획득된 조건 코드가 예측된 조건 코드와 매칭되지 않는다면, 명령은 잘못 예측된 것이며, 반드시 원래대로 복구되어야 한다.
[표 4]
워치포인트 및 체크포인트 기억 장소의 단순화된 예
Figure pct00009
실행 유닛으로부터 조건 코드를 획득하여 비교하는 것은 다수의 인자에 의해 복잡해진다. 이러한 인자로서는, 비순서 명령 순차 실행, 각 실행 유닛내의 명령 실행 큐 처리, 상이한 명령 타입의 실행에 필요한 머신 사이클의 가변 수, 실행 자원 또는 명령, 동일 명령 타입에 대해 서로 명령에 대한 실행자원 또는 데이터를 대기할 필요성에 관한 변동성을 포함한다. 이러한 인자들과 다른 인자들은 명령 결과와 상태(에러 및 조건 코드 정보 포함)가 인제 실제로 데이터 전송 버스상에 나타날 것인지에 대한 일반적인 불확실성을 발생한다. 그러므로, 본 발명은 명령이 발행될 때와 동일한 머신 사이클 동안 또는 그 뒤의 임의의 사이클 동안 버스상에나타날 수 있는 조건 코드 데이터를 획득하는 구조 및 방법을 제공한다. 또한, 본 발명은 리네임된 레지스터에 대한 조건 코드를 획득하는 구조 및 방법을 제공한다. 조건 코드 레지스터의 리네임 처리를 포함하는 레지스터 리네임 처리는 레지스터 종속성을 제거하기 위해 CPU(51)에서 제공된다. 그러므로, 워치포인트 유닛(304)은 CC 데이터 및 태그를 데이터 전송 버스로부터 직접 수신하고, 나중에 CCRFRN 유닛에 있는 CC 레지스터가 갱신된 후에는 FSR/CCRFRN(606)으로부터 수신한다.
도 27에는, DFB(62)내에 있는 2개의 고정소수점 실행 유닛(FXU, FXAGU)과 1개의 부동소수점 실행 유닛(FPU)이 도시되어 있지만, 더 많은 또는 더 적은 실행 유닛이 구현될 수 있으며, 어떤 타입이라도 상관 없다. 각각의 실행 유닛은 CC-데이터 전송 버스(430)에 의해 CCRFRN 유닛(606) 및 워치포인트 유닛(304)에 접속된다. 이 CC-데이터 전송 버스(430)는 실행 유닛(FXU, FXAGU 및 FPU)에 의해 방금 계산된 CC-데이터의 결과를 전달한다. CC-데이터는 CCRFRN을 갱신하는데 사용된다. 워치포인트 유닛(304)은 또한 CC-데이터 전송 버스를 모니터 및 워치하여, 나중의 사이클에서 CCRFRN으로부터 CC-데이터를 얻기를 대기하기 보다는 CC-데이터 전송 버스로부터 직접 CC-데이터를 "획득"한다. 이와 같이 CC-데이터를 버스로부터 직접 획득하는 것은 분기 평가를 더욱 빠르게 한다.
분기 예측 오류가 워치포인트 유닛(304)에 의해 검출되면, 워치포인트 유닛 (304)은 예측 오류 신호인 WP_MISPRED_VEC를 PSU(300)내의 PLSM(307)로 전달한다. PSU(300)는 전술한 바와 같이 CUP(51)의 주요 상태를 추적 및 제어한다. PSU가 워치포인트 유닛으로부터 예측 오류 신호인 WP_MISPRED_VEC를 획득하면, PSU(300)내의 PLSM(307)은 예측 오류 및 실행 예외중 최초의 것을 선택하여, 본 명세서의 다른 곳에서 설명하는 바와 같이, 역추적 절차를 개시한다.
도 25는 워치포인트(304)와, ISB, FSR/CCRFRN, DFB, BRB내의 실행 유닛(FXU, FXAGU, FPU)과의 인터페이스와, PSU(300)내의 PLSM과의 인터페이스를 더 상세히 나타낸 기능 블록도이다. 이러한 각각의 주요 기능 블록은 뒤에서 더 상세히 기술되어 있다.
1. 워치포인트 엘리먼트의 활성화
워치포인트 엘리먼트 및 제어 로직유닛(WP-엘리먼트)(1002)은 WP 활성/비활성 제어 로직(2012)과, 한 세트의 16개의 워치포인트 엘리먼트(2013)를 포함하는데, 여기서, 각 16개의 엘리먼트는 XCC, ICC, FCC, COND, JMPL/분기, 유효 지시자와 관련된 정보를 기억한다. 분기/JMPL이 발행되어 예측되면, DO_WTCHPT 신호는 예측된 분기, 취소 분기, 점프-링크 명령에 대한 조건 코드 정보를 포함하는 ISU(200)에 의해 발생된다. "분기 예측"은 "분기의 방향(취득하였는지 또는 취득하지 않았는지)을 예측한다"는 것을 의미한다. "JMPL 예측"은 "JMPL 목적 어드레스를 예측한다"는 의미이다. 왜냐하면, JMPL은 항상 프로그램의 흐름을 변화(항상 취득)시키기 때문이다. 분기/JMPL 명령을 발행할 때, CPU(51)는 체크포인트 번호에 의해 식별된 체크포인트를 형성한다. 일단 체크포인트가 형성되면, 체크포인트는 CPU(51)가 체크포인트 위치와 다음 체크포인트 위치 사이에 있는 명령에 대한 모든 명령 실행을 완료할 때까지 활성 상태로 유지된다. 프로세서는 동시에 다수의 활성 체크포인트를 가질 수 있다. 체크포인트 형성은 발행된 분기/JMPL 명령에 한정되지않고, 예컨대 트랩을 취할 때와 같은 다른 상황에서 형성될 수도 있다.
각 워치포인트 엘리먼트(2012)는 체크포인트 엔트리에 대응한다. CPU(51)는 16개의 체크포인트 엔트리를 보유하므로, 워치포인트 유닛(304)은 16개의 워치포인트 엘리먼트를 갖게 된다. 워치포인트 활성/비활성 로직(WADL)(2012)은 ISU(200)으로부터의 DO_CHKPNT 및 DO_WTCHPNT 신호에 응답하여 워치포인트 엘리먼트를 활성화시키는 기능을 한다. DO_CHKPNT 신호는 체크포인트 형성을 개시하는 MAKE_CHKPNT 신호와, 형성될 체크포인트 번호를 식별하는 NEXT_CHKPNT신호를 포함한다. WADL(2012)는 또한, 예측된 분기/JMPL 명령이 해결된 때에는 워치포인트 엘리먼트를 비활성시키는 기능을 한다. ISU(200)이 분기 명령을 발행할 때, ISU(200)은 체크포인트가 형성되어야 한다는 것을 나타내는 MAKE_CHKPNT 신호를 어서트하고, 체크포인트 번호가 PSU(300)에 의해 할당되어, NEXT_CHKPNT 신호에 의해 지정된다. 도 50에 도시된 바와 같이, 하나의 워치포인트 엘리먼트를 활성화시키기 위해, NEXT_CHKPNT 신호는 디코더(434)에 의해 디코딩되고, ISU(200)으로부터 발생된 DO_WTCHPT로부터 유도된 DO_PREDICT 신호와 함께 AND 게이트(435)에서 AND 연산처리된다. 이 출력은 DO_PREDICT_VEC[i]라 불린다. 이 신호 DO_PREDICT_VEC[i]는 WP_VALID[i]를 셋트시키는데, 여기서 [i]는 16개의 워치포인트 번호중 하나를 가리킨다. 도 50은 워치포인트 출력 로직(2102)의 일부를 비롯하여, WP_ACTIVE_VEC 및 WP_MISPRED_VEC 로직과 관련된 워치포인트 유닛의 특정 실시예에 대한 부가적인 상세 구조를 나타낸다.
ISU(200)는 분기/JMPL 명령이 발행될 때 워치포인트 유닛에 다수의 신호를보낸다. 이러한 신호는 XCC에 따른 분기로서, ICC에 따른 분기로서, FCC에 따른 분기로서, 점프-링크 명령(JMPL)으로서, 및 분기의 조건 코드 필드(COND)로서 명령을 식별한다. 이러한 신호는 워치포인트 유닛(304)에 의해 수신되어, DO_CHKPNT의 성분 신호로서 NEXT_CHKPNT에 의해 지정된 워치포인트 엘리먼트에 기억된다. 워치포인트 엘리먼트 " I "가 워치포인트 활성화 제어 로직(WACL)(2012)에 의해 할당되면, 이러한 신호는 WP_XCC[i], WP_ICC[i], WP_FCC[i], WP_JMPL[I], WP_COND[i] 레지스터에 각각 유지된다. 각각의 워치포인트 엘리먼트는 워치포인트 엘리먼트가 비활성화되고 다른 분기/JMPL 명령에 의해 재활성화될 때까지 이러한 레지스터 값을 보유하게 된다.
CPU(51)는 각 사이클에서 하나 이상의 체크포인트를 형성하여, 사이클 당 하나 이상의 분기/JMPL 명령을 발행할 수 있다. 그러므로, 하나 이상의 워치포인트 엘리먼트가 활성화할 수 있다. 예컨대, 만일 CPU(51)가 2개의 체크포인트를 형성하여 동일 사이클에서 2개의 분기를 발행한다면, 2 세트의 DO_WTCHPT, XCC, ICC, FCC, JMPL, COND, DO_CHKPNT 신호 또는 이 신호와 동등한 정보 콘텐츠가 필요하게 된다.
조건·코드 포맷 및 필드 정의 및 JMPL 명령 포맷 및 정의는 본 명세서에서 이미 기록된 바와 같이 SPARC V9 구조 매뉴어에 재공되어 었다. 부동소수점 조건 코드는 비트 0과 비트 1을 포함하는 2-비트 포맷을 갖는다. 정수 조건 코드는 XCC에 대해 비트 7-4(가각 N,Z,V,C)로 제공되며, ICC에 대해 비트 3-0(각가 N,Z,V,C )으로 제공된다. 분기가 발행되고 "취득"으로 예측되면, COND 값은 분기 명령의 조건부 필드 데이터와 동일하게 된다. 분기가 발행되고 "비취득"으로 예측되면, COND 필드 데이터의 비트-3은 반전되고, 나머지 비트는 변하지 않으며, 이것이 COND 값이 된다.
도 28은 워치포인트 유닛(304)의 내부 구조를 더 상세히 나타낸 것이다. 워치포인트 유닛(304)의 내부에는 CC-획득 로직(1000), 평가 유닛(1001), WP-엘리먼트 기억 및 제어 유닛(1002) 및 타겟 RAM(1003)이 있다. 도 29는 워치포인트 유닛 (304)의 일부를 다르게 나타낸 도면이다. 여기에는, 현행 매칭 로직(1005), 어레이 최근 매칭 로직(1004), CC-선택 로직(1006)이 포함되고, CC-선택 로직(1006)에는 평가 준비(EVAL_READY) 및 평가 조건 코드(EVAL_CC) 로직이 포함된다.
도 30은 분기 예측 및 평가의 타이밍챠트를 나타낸다. 워치포인트는 각각이 예측된 분기/JMPL 정보를 유지하며 예측의 정확성을 평가할 수 있는 복수의 워치포인트 엘리먼트를 갖는다. 사이클 1에서는 분기가 발행된다. 사이클 2에서는, 복수의 워치포인트 엘리먼트중 하나(엘리먼트 " i "라 가정한다)가 활성화된다. 이어서, WP_ACTIVE[i]가 어서트된다. 사이클 5에서, FXU 유닛은 분기를 제어하고 워치포인트 엘리먼트가 대기하고 있는 CC-데이터를 리턴시킨다. 사이클 5에서, 워치포인트 엘리먼트 i는 CC-데이터를 획득한다. 사이클 6에서, WP_ACTIVE_VEC[i] 신호는 워치포인트 엘리먼트가 CC-데이터를 획득했기 때문에 디어서트되며, EVAL_READY[i] 신호가 어서트된다. EVAL_READY[i] 신호는 CC-평가를 인에이블시킨다. 만일 예측이 옳다면 EVAL_TRUE[i] 신호가 어서트되며, 예측이 옳지 않다면 EVAL_TRUE[i] 신호가 어서트되지 않는다. 이 예에 있어서의 타이밍도는 예측이 옳지 않다고 가정한 것이다. 그러므로, WP_MISPRED_VEC 신호가 어서트되고 PSU(300)내의 PLSM으로 전달된다. PLSM은 모든 워치포인트 엘리먼트(이 실시예에서는 16개의 엘리먼트)로부터의 WP_MISPRED_VEC[i] 신호와 실행 유닛으로부터 트랩 신호중에서 우선순위를 취하고, 최초의 이벤트를 판정한다. 사이클 7에서, PSU(300)는 CPU(51)를 이전 상태로 되돌리는 DO_BACKUP 신호를 어서트한다. 이 DO_BACKUP 신호는 CPU에게 백업을 실행하도록 알리는 MAKE_BACKUP 제어 신호와, 백업이 만들어질 체크포인트 번호를 식별하는 BACKPU_CHKPNT 신호를 포함한다. 도 29는 복수의 워치포인트 엘리먼트중 하나와 관련된 워치포인트 유닛의 특정 실시예에 대한 부가적인 상세 구조를 나타낸다.
2. 데이터 전송 버스로부터 CC 데이터의 직접 워치포인트 획득
CC 획득 로직(1000)은 데이터 전송 버스로부터 조건 코드 데이터 유효 및 조건 코드 태그를 수신하여 이들 태그를 현재 머신 사이클 동안 ISB로부터 수신된 조건 코드 태그와 매칭시키려고 하는 CC 태그 현행 매칭 로직(2001)을 포함하고 있다. 예시적인 로직 회로는 도 31에 CC 태그 현행 매칭 로직의 실시예로 도시되어 있다.
FSR/CCRFRN 유닛(606)은 CC_RENAMED, CC_TAG_C, CC_TAG_RENAMED_C, CC_DV_C, CC_DATA 신호들을 워치포인트로 전송한다. CC_RENAMED 신호는 CC가 현행 머신 사이클에서 발행된 명령에 의해 수정될 때 어서트된다. CC_TAG_C 신호는 현행 머신 사이클에서 발생하는 CC 수정이 배제되는 것을 제외하고 리네임된 CC 물리적 태그를 식별한다. CC_TAG_RENAMED_C 신호는 리네임된 CC 물리적 태그를 또한 의미하지만, 현행 사이클에서 발생하는 CC 수정은 포함된다. CC_DV_C 신호는 CC_DATA 신호가 이전 사이클에서 수정된 CC 데이터를 갖고 있고, 현재 사이클에서 행하여진 CC 수정은 배제할 대 어서트된다. 그러므로, CC_DV_C=1 이면, 이전 사이클에서 실행된 CC 수정은 모두 CC_DATA 신호내에 반영된다. 게다가, CC_DV_C=0 이면, CC_DATA 값은 최신의 것이 아니며, FSR/CCRFRN 유닛은 최신의 CC 데이터를 획득하기 전에 이전 사이클에서 발행된 명령의 완료를 대기한다. FSR/CCFRFN(606)에 의해 워치포인트로 전송된 신호는 표 6에 기술되어 있다.
[표 6]
FSR/CCRFRN(606)은 하기 신호들을 워치포인트로 전송함.
Figure pct00010
도 31에 있어서, 비교 회로(2006, 2008, 2010) 각각은 리네임된 CC 물리적 태그를 식별하는 CC_TAG_C 신호를 수신하지만 현재 머신 사이클에서 발생하는 CC 수정을 배제한다. 각 비교 회로는 또한, 데이터 전송 버스로부터 직접 조건 코드 태그를 수신한다. 즉, FPU로부터 FPU_FCC_TAG_F 신호, FXU로부터 FXU_XICC_TAG_F신호, FXAGU로부터 FXAGU_XICC_TAG_F 신호를 수신한다. 여기에서, FXAGU_XICC_TAG_F 및 FXU_XICC_TAG_F 신호는 정수 조건 코드의 XCC 및 ICC 부분을 둘다 포함한다. 비교 회로의 출력은 AND 게이트(2007, 2009, 2011)로 전송되어, 제어 신호로서의 기능을 하는 데이터 유효 신호(FPU_FCC_DV_F, FXU_XICC_DV_F, 또는 FXAGU_XICC_DV_F)와 AND 연산 처리된다. 데이터 유효 신호가 어서트되면, 비교 회로에 의해 판정된 매칭이 유효하다면, CC 현행 매칭 신호(FPU_CURR_MATCH, FXU_CURR_MATCH 또는 FXAGU_CURR_MATCH)가 어서트된다.
도 31에 도시된 바와 같이, CC 리네임된 태그 어레이 매칭 로직(2002)은 한 셋트로된 16 셋트의 비교 회로(2015)와, 각 실행 유닛(FPU, FXU, FXAGU)에 대해 AND 논리 기능(2016)을 수행하는 로직 회로를 포함한다. 현행 매칭 로직(2001)이 데이터 전송 버스로부터의 신호와 CC_TAG_C를 비교하는 반면, 어레이 매칭 로직 (2002)은 데이터 전송 버스로부터의 각 신호와, 리네임된 CC 물리적 태그를 식별하지만 현재 사이클에서 발생하는 CC 수정을 포함하는 CC_TAG_RENAMED_C 신호를 동시에 비교한다. CC_TAG_RENAMED_C 신호는 CC가 현재 머신 사이클에서 발행된 명령에 의해 수정될 때 어서트되는 CC_RENAMED 신호와 DE_PREDICT_VEC 신호를 AND 로직연산 처리함으로써 발생된 기록 인에이블 신호의 제어하에서, 16개의 CC 태그 어레이 (2003) 기억 엘리먼트중 하나에 기록된다. 각 사이클에서, CC_TAG_RENAMED_DC의 모든 기억된 값은 FPU로부터의 FPU_FCC_TAG_F 신호, FXU로부터의 FXU_XICC_TAG_F신호, FXAGU로부터의 FXAGU_XICC_TAG_F 신호와 비교되어, 어떤 매칭을 식별할 수 있다. 즉, 16개의 비교 동작은 각 사이클에서 FPU, FXU 및 FXAGU 각 사이클에서 실행된다. 비교 회로(2016)의 출력은 제어 신호로서의 기능을 하는 데이터 유효 신호 (FPU_FCC_DV_F, FXU_XICC_DV_F 또는 FXAGU_XICC_DV_F)와 AND 연산 처리된다. 만일 데이터 유효 신호가 어서트되면 비교 회로에 의해 판정된 매칭이 유효하고, CC 어레이 매칭 신호(FPU_ARRAY_MATCH[i], FXU_ARRAY_MATXH[i], FXAGU_ARRAY_MATCH[I])가 어서트된다. 그러므로, CC 획득 로직은 복수의 해결되지 않은 분기 평가를 동시에 모니터링할 수 있다.
도 31은 CC 획득 로직을 나타낸다. CC_TAG_ARRAY 는 16개의 레지스터를 구비하는데, 각각의 레지스터는 16개의 체크포인트 각각jc 대응하며, CC_TAG_C 비트수와 동일한 수의 래치(여기서는 4 비트 래치라 가정한다)를 갖는다. 분기를 발행하고 예측할 때, CC_TAG_RENAMED_C 신호는 DO_WTCHPT 로부터 유도된 DO_PREDICT_VEC[i]에 의해 지정된 CC_TAG_ARRAY의 위치에 기록된다. CC_RENAMED는 AND 논리 게이트와 같은 기록 인에이블 및 어드레스 선택 로직(2004)에서의 기록 인에이블 신호로서 기능을 한다.
프로세서는 이 명세서에서의 설명을 위해 2개의 고정소수점 실행 유닛(FXU 및 FXAGU)과, 하나의 부동소수점 실행 유닛(FPU)을 가지는 것으로 가정되었다. 일실시예에 있어서, FXU 만이 JMPL 명령을 처리한다고 가정한다. 각각의 유닛은 CC 데이터 전송 버스를 갖는다. FXU CC 데이터 전송 버스는 FXU_CC_TAG_VALID, FXU_CC_TAG 및 FXU_CC_DATA를 구비한다. CC를 수정시키는 실행이 FXU에서 완료되면, FXU_CC_TAG_VALID 가 어서트되고, FXU_CC_TAG는 리네임된 CC 물리적 태그를 가지며, FXU_CC_DATA는 CC의 결과 데이터를 갖게 된다. 동일한 내용이 FXAGU 및 FPU에도 적용된다. FSR/CCRFRN 유닛에서의 조건 코드(CC) 데이터는 다음 사이클에서 이러한 CC 데이터 전송 버스를 이용하여 갱신된다. 워치포인트는 워치포인트 엘리먼트가 CC 데이터를 대기한다면, 데이터 전송 버스로부터의 CC 데이터를 또한 획득한다. CC_TAG_C는 FXU_CC_TAG와 비교되고, 그 매칭 신호는 FXU_CC_TAG_VALID와 AND 논리 연산 처리되며, 이 출력 신호는 FXU_CC_CURR_MATCH 신호라 불린다. 또한, CC_TAG_ARRAY에 있는 레지스터의 콘텐츠는 FXU_CC_TAG와 비교되며, 이들의 매칭 신호는 FXU_CC_TAG_VALID와 AND 논리 연산 처리되며, 이 출력 신호는 FXU_CC_ARRAY_MATCH[i]라 불린다. FXAGU 및 FPU에 대하여도 FXU에서와 동일한 매칭 기능이 실행된다. 획득 로직의 동작은 3가지 명령 발행 순차 예를 참조하여 기술되었다. CPU(51)는 사이클 당 4개의 명령까지 발행할 수 있다.
CC 획득 로직(1000)은 CC 선택 로직(2005)(각 워치포인트당 하나씩 16개의 층)을 포함하는데, 이 CC 선택 로직은 그 워치포이트 엘리먼트 내의 분기를 좌우하고 어서트되었을 때 CC 데이터 신호(예컨대, CC_DATA[7:4])를 선택하며, 다음 사이클에서의 평가를 위해 그 데이터 신호를 래치시키는 조건 코드에 기초하여 신호를 발생시키는 기능을 한다. 도 32에는 조건 코드 선택 로직(2005)의 실시예의 전형적인 로직 회로가 도시되어 있다. CC 선택 로직(2005)의 동작은 이하에서 3개의 예와 관련하여 설명된다.
평가 로직(1001)은 도 25에 도시된 바와 같이 평가 준비 로직 (EVAL_READY)(2100)과, 평가 참 로직(EVAL_TRUE)(2101)과, 워치포인트 출력 로직 (WP 출력 로직)(2102)을 포함한다. 도 33은 CC 선택 로직(2005)으로부터 한 셋트의선택 신호(예컨대, SEL_BR_XCC[i] 신호)와, AND 로직 게이트(2106)의 출력으로부터 인에이블 신호(EVAL_ENABLE 신호)를 수신하는 EVAL_READY 로직(2100)과 관련한 부가적인 구조적 세부를 도시하고 있다. EVAL_ENABLE은 WP_ACTIVE_VEX[i], WP_JMPL, FXAGU_JMPL 및 FXAGU_CHKPT에 기초하여 어서트된다. EVAL_READY 로직(2100)은 평가가 준비되었다는 것을 나타내는 i 번째 워치포인트에 대한 EVAL_READY[i]를 출력한다.
도 34는 CC_EVAL 로직(2105)을 포함하는 EVAL_TRUE 로직(2102)과 관련한 부가적인 구조적 세부를 자세히 도시하고 있다. EVAL_TRUE 로직은 분기 명령이나 JMPL 명령이 적절하게 예측되었는지를 판정한다. CC_EVAL(2105)은 CC 선택 로직 (2005)으로부터의 EVAL_CC[i] 신호와, ISB로부터 수신되어, 워치포인트 엘리먼트 (2013)에 기억되어 있는, WP_COND[i], WP_XCC[i], WP_ICC[i], WP_FCC[i] 신호를 수신하고, SPARC-V9 매뉴얼에 기술된 규칙을 이용한 비교에 기초하여 2개의 신호를 평가한다. 이들 신호가 매칭된다면, 분기 참 신호(BR-TRUE[i] 신호)가 i 번째 워치포인트에 대해 발생된다. EVAL_TRUE 로직(2101)은 JMPL 매칭 로직(2201)(도 35 참조)에 의해 출력된 JMPL_MATCH 신호와 OSB로부터 수신되고 워치포인트 엘리먼트 (2013)에 기억된 WP_JMPL[i] 신호를 비교한다. 만일 JMPL_MATCH가 WP_JMPL[i]과 매칭된다면, JMPL은 적절히 예측되었으며, JMPL_TRUE[i] 신호가 어서트된다. BR_TRUE[i] 및 JMPL_TRUE[i] 신호는 OR 논리연산 처리되어, EVAL_TRUE[i] 신호를 형성한다. 워치포인트는 단일 명령에 대해서만 형성되어, BR_TRUE[i] 및 JMPL_TRUE[i] 신호중 하나만이 어서트될 것이다.
WP출력 로직(2102)은 도 50에 도시되었다. PSU(300)로부터의 EVAL_READY[i], EVAL_TRUE[i]K, WP_VALID[i], KILL_VEC[i] 신호는 WP_ACTIVE_VEC[i] 및 WP_MISPRED_VEC[i] 신호를 출력하는 WP 출력 로직에 입력된다.
도 35는 타겟-RAM 및 JMPL 평가 로직과 관련한 부가적인 구조적 세부를 도시한다. JMPL 평가 로직은 rd=0인 리턴 타입의 JMPL 명령을 평가했다. ANPC 출력 로직(2103)은 예측 오류(MISPRED)가 이 명세서에서 설명되어 있는 우선순위 결정방식 및 기억된 WP_ANPC의 비교에 기초하여 PSU PLSM에 의해 어서트되었는지의 여부에 따라서 BRB 인출 유닛에 정확한 계산치인 FXU_DATA값을 전송하기 위해 RD_ANPC를 선택한다.
3. 워치포인트 동작예
a. 워치포인트 유닛 동작 - 예 1: 표 7은 사이클 X, X+1, X+2 에서 실행된 예 1에 대한 명령 리스트이다. 사이클 X에서, 4개의 명령이 발행되고, 그들 중 하나가(addcc)가 CC를 수정한다. 그리고나서, 리네임된 CC 물리적 태그 #7이 할당된다. 사이클 X+1에서 다시 4개의 명령이 발행되고, 이들 모두는 CC를 수정하지 않으며, addcc가 실행되고 사이클 X+1에서 CC 데이터를 리턴시킨다. 사이클 X+2에서, addcc에 의해 수정된 CC 데이터는 FSR/CCRFRN내에 있다. 사이클 X+2에서, 4개의 명령이 발행되고, 이들 모두는 분기 전에 CC를 수정하지 않으며, 그 다음에 분기 명령(br, xcc)이 발행된다. 이 경우에 있어서, 사이클 X+2에서, CC_RENAMED=0 이 되는 데 그 이유는 현재 사이클에서 CC를 수정하는 발행된 명령이 없기 때문이다. 게다가, CC_TAG_C = CC_TAG_RENAMED_C = 7 이 되는 데 그 이유는 최종 CC 태그가 #7이고, 사이클 X에서 할당되기 때문이다. 마지막으로, CC_DV_C = 1 이 되는 데 그 이유는 최종 CC 데이터가 FSR/CCRFRN에 있기 때문이다.
분기가 발행될 때, FSR/CCRFRN에서 분기를 좌우하는 CC_DATA는 유효하다. 그러므로, CC_DV_C는 분기를 발행하는 동일 사이클에서 어서트된다. 분기가 XCC에 의존한다고 가정하자. 그러면, SED_BR_XCC[i]가 어서트되고(도 32 참조), 신호는 CC_DATA[7:4]를 선택하며, 데이터는 다음 사이클에서 EVAL_CC[i]에 래치된다(신호 CC_DATA[7:4]는 XCC_DATA_C 및 ICC_DATA_C 이거나 또는 FCC_DATA_C 이다). EVAL_READY[i] 신호는 다음 사이클에서 어서트된다(도 33 참조). CC 평가는 준비완료상태로 된다.
b. 워치포인트 유닛 동작 - 예 2: 표 8은 사이클 X, X+1에서 실행된 예 2에 대한 명령 리스트이다. 사이클 X에서, 4개의 명령이 발행되고, 그들 중 하나 (addcc)가 CC를 수정시킨다. 그리고나서, 리네임된 CC 물리적 태그 #7이 할당된다. 사이클 X+1에서 다시 4개의 명령이 발행되고, 이들 모두는 분기 전에 CC를 수정하지 않으며, 이들 중 하나는 분기 명령이다. 이 경우에 있어서, 사이클 X+1에서, CC_RENAMED=0 이 되는 데 그 이유는 현재 사이클에서 CC를 수정하는 발행된 명령이 없기 때문이다. 또한, CC_TAG_C = CC_TAG_RENAMED_C = 7 이 되는 데 그 이유는 최종 CC 태그가 #7 이고, 이전 사이클에서 할당되기 때문이다. 그러나, addcc에 의해 수정된 최종 CC 데이터가 FSR/CCRFRN 내의 CC 레지스터내에 기록되기 때문에 CC_DV_C = 0 이 된다.
분기가 발행될 때(사이클 X+1에서), 사이클 X에서 발행된 명령 "addcc"가 CC를 수정하고 그 결과 데이터가 FSR/CCRFRN내의 CC 레지스터에 기록되지 않기 때문에 FSR/CCRFRN에서 분기를 좌우하는 CC_DATA는 유효하지 않다(CC_DV_C=0). "addcc"가 사이클 X+1에서 FXU 실행 유닛에 의해 실행되고, FXU는 사이클 X+1에서 데이터 전송 버스상에 CC 데이터를 리턴시킨다고 가정하자. 그러면, FXU_CC_CURR_MATCH(도 31 참조)가 사이클 X+1에서 어서트된다. SEL_FXU_XCC[i]가 어서트되고, 신호는 FXU_CC_DATA를 선택하며, 데이터는 사이클 X+2에서 EVAL_CC[i]에 래치된다. EVAL_READY[i] 신호는 사이클 X+2에서에서 어서트된다(도 33 참조). CC 평가는 준비 완료 상태로 된다.
주의할 것은 CC_TAG_RENAMED_C가 아니라, CC_TAG_C가 FXU_CC_CURR_MATCH 비교 처리에 사용된다는 것이다. 만일 CC를 수정하는 어떤 명령이 분기 발행시와 동시에 사이클에서 발행된다면, CC_TAG_C는 최종의 CC의 물리적 태그가 아니다. 그러나, CC_RENAMED는 어서트되고 신호는 FXU_CC_CURR_MATCH(도 32 참조)를 금지시킨다. 이것은 FXU_CC_CURR_MATCH가 분기 발행시와 동일한 사이클에서 CC를 수정하는 명령이 없을 때 사용될 수 있다는 것을 의미한다. CC_TAG_C는 CC_TAG_RENAMED_C보다 더 빠른 신호이기 때문에, FXU_CC_TAG_CURR_MATCH에 대하여 CC_TAG_C[3:0]를 이용하면 경로 지연을 감소시킬 수 있다.
c. 워치포인트 유닛 동작 - 예 3: 표 9는 사이클 X, X+1에서 실행된 예 3에 대한 명령 리스트이다. 사이클 X에서, 4개의 명령이 발행되고, 그들 중 하나가 (addcc)가 CC 를 수정한다. 그리고나서, 리네임된 CC 물리적 태그 #7이 할당된다. 사이클 X+1에서 다시 4개의 명령이 발행되고, 이들 중 하나는(subcc)는 분기 전에CC를 수정하고, 이들 중 하나는 분기 명령이다. 리네임된 CC 물리적 태그 #8이 이 명령 subcc에 할당된다. 이 경우에 있어서, 사이클 X+1에서, CC_RENAMED=1 이 되는 데 그 이유는 현재 사이클에서 CC를 수정시키는 발행된 명령이 있기 때문이다. CC_TAG_C= 7이 되는 데 그 이유는 이전 사이클에 의해 최종 CC 태그가 #7이기 때문이고, CC_TAG_RENAMED_C= 8이 되는 데 그 이유는 CC를 수정하는 명령이 현재 사이클에서 발행되며, 리네임된 CC 물리적 태그 #8이 할당되기 때문이다. 또한, CC_DV_C = 0 이 되는 데 그 이유는 subcc에 의해 수정된 최종 CC 데이터가 FSR/CCRFRN 내의 CC 레지스터내에 기록되지 않기 때문이다.
분기가 발행할 때(사이클 X+1에서), FSR/CCRFRN에서 분기를 좌우하는 CC_DATA는 사이클 X에서 발행된 명령 "addcc"가 CC를 수정하고 그 결과 데이터가 FSR/CCRFRN내의 CC 레지스터에 기록되지 않기 때문에 유효하지 않다(CC_DV_C=0). 이다. 게다가, 명령 "subcc"는 사이클 X+1에서 발행되고 그 다음에, CC_RENAMED가 어서트된다. "subcc"는 사이클 X+2에서 FXU 실행 유닛에 의해 실행되고, FXU는 사이클 X+2에서 데이터 전송 버스상에 CC 데이터를 리턴시킨다고 가정하자. 그러면, FXU_CC_ARRAY_MATCH[i](도 31 참조)가 사이클 X+2에서 어서트된다. SEL_FXU_XCC[i] (도 32 참조)가 어서트되고, 신호는 FXU_CC_DATA[7:4]를 선택하고, 데이터는 사이클 X+3에서 EVAL_CC[i]에 래치된다. EVAL_READY[i] 신호는 사이클 X+3(도 33 참조) 에서 어서트된다. CC 평가는 준비 완료 상태로 된다. 이 예에서는 16개의 워치포인트 엘리먼트가 있으며, 각 엘리먼트는 임의의 사이클에서 각 분기 평가에 대해 평행한 CC를 획득할 수 있다.
[표 7]
예 1에 해당하는 FSR/CCRFRN으로부터의 명령 및 신호
Figure pct00011
[표 8]
예 2에 해당하는 FSR/CCRFRN으로부터의 명령 및 신호
Figure pct00012
[표 9]
예 3에 해당하는 FSR/CCRFRN으로부터의 명령 및 신호
Figure pct00013
4. 분기 명령의 평가
분기가 발행되고 1 사이클 후에, WP_VALID[i]가 어서트된다. 만일 WP_VALID[i]= 1 이고, EVAL_READY[i]= 0 이며, KILL_VEC[i]=0 이면, WP_ACTIVE_VEC[i]가 어서트된다(도 29 참조). "WP_ACTIVE[i]= 1"은 체크포인트 i를 사용하는 분기가 이미 발행되었고 아직 헤결되지 않았다는 것을 의미한다. 만일 그 값이 0으로 되면, 즉 WP_ACTIVE[i]= 0 이면, 분기가 해결(완료)되었다는 것을 의미한다. WP_ACTIVE_VEC는 ICRU(301)로 전송되고, 어느 분기/JMPL 명령이 완료되었는지를 결정하는데 사용된다.
분기 평가가 준비되면, EVAL_READY[i]가 어서트되고, EVAL_CC[i]은 획득된 CC 값이 된다. 그리고나서, EVAL_CC[i] 및 WP_COND[i]는 EVAL_TRUE 로직(2101)(도 34 참조)내의 CC_EVAL 로직으로 공급되고, 분기가 평가된다. 만일, 분기를 발행할 때 행한 예측이 정확하다면, BR_TRUE[i]가 어서트된다. 만이 예측이 정확하지 않다면, BR_TRUE[i]는 어서트되지 않는다. 분기를 평가할 때, WP_XCC[i], WP_ICC[i], WP_FCC[I] 신호는 또한 분기 타입을 알기 위해 사용된다. BR_TRUE[i]는 JMPL_TRUE[i](후에 설명된다)와 OR 연산 처리되고, EVAL_TRUE[i]가 발생된다. WP_VALID[i]= 1 이고, EVAL_READY[i]= 1 이며, EVAL_TRUE[i]= 0 이고, KILL_VEC[i]=0 이면, WP_MISRRED_VEC[i]가 어서트된다(도 29 참조). "WP_MISPRED_VEC[i]= 1"은 이전에 행한 분기 예측이 잘못되었다는 것을 의미한다. PSU는 이 신호와 실행 에러 신호를 수신하고, 최초의 예측 오류 또는 실행 오류 조건을 선택하며, BACKUP 신호를 어서트하여 이전 상태로 백업한다.
PSU는 백업이 발생할 때 KILL_VEC[i]를 어서트하고, 벡업 포인트 후에 취해진 체크포인트는 삭제될 필요가 있다. KILL_VEC[i]가 어서트되는 시점에서, 이에 대응하는 워치포인트 엘리먼트도 또한 삭제된다. "삭제(killed)"는 WP_ACTIVE_VEC[i] 및 WP_MISPRED_VEC[i] 신호가 억제된다는 것을 의미한다. WP_ACTIVE_VEC 및 WP_MISPRED_VEC 신호는, WP_MISPRED_VEC[0-16] 신호가 동일한 벡터에서 엔코딩될 수 있도록 멀티핫(multi-hot)될 수 있다. 이것은 최대 16개의 워치포인트 엘리먼트(이 실시예에서)가 동시에 활성될 수 있으며, 동시에 예측 오류를 검출할 수 있다는 것을 의미한다.
분기를 발행하고 예측할 때, FETCH는 분기-목적 어드레스 또는 분기의 다음 어드레스를 WR_ANPC를 통해 워치포인트로 전송한다. 만일 예측이 "취득(taken)되면", WR_ANPC는 분기의 다음 어드레스(비취득 어드레스)가 된다. 만일 예측이 "비취득(non-taken)되면", WR_ANPC는 분기 목적 어드레스(취득 어드레스)가 된다. 만일 예측이 잘못되었다고 판명되면, 워치포인트는 정확한 분기 경로로부터 명령을 재인출하기 위해 RDANPC를 통해 어드레스를 FETCH로 다시 전송한다. WR_ANPC 값은 타겟-RAM(도 35 참조)에 기억된다. 이 타겟-RAM은 16개의 엔트리를 가지며, 각 엔트리는 각 체크포인트에 대응하고, 하나의 WR_ANPC 어드레스를 기억할 수 있다. 이 RAM의 기록 인에이블 신호 및 기록 어드레스는 MAKE_CHKPNT 및 NEXT_CHKPNT 이다. MAKE_CHKPNT는 체크포인트를 형성할 때 어서트된다. BACKUP 신호가 어서트되면, 타겟-RAM의 어드레스를 판독하기 위하여 BACKUP_CHKPNT가 사용된다. BACKUP_CHKPNT는 CPU(51)가 백업하는 체크포인트를 지정한다. 그리고 타겟 RAM의 판독 데이터는 RD_ANPC를 통해 FETCH로 전송된다.
5. 점프-링크(JMPL) 명령의 평가
JMPL 명령을 발행하고 예측할 때, FETCH는 예측된 JMPL 목적 어드레스를 WR_ANPC를 통해 워치포인트로 전송한다. 워치포인트는 어드레스를 보유하고, 이 어드레스와 계산된 정확한 어드레스를 실행 유닛에 의해 비교함으로써 정확도를 평가한다. 만일 예측이 잘못된 것으로 판명되면, 워치포인트는 정확한 어드레스로부터 명령을 재인출하기 위해 RD_ANPC를 통해 FETCH로 상기 계산된 정확한 어드레스를 전송한다. 예측된 JMPL 목표 어드레스는 분기의 경우와 동일하게 타겟 RAM에 기억된다.
단지 FXAGU 실행 유닛만이 JMPL 목표 어드레스를 계산한다고 가정한다. FXAGU가 JMPL 명령의 실행을 완료하면, FXAGU_JMPL이 어서트되고, FXAGU_CHKPNT는 JMPL의 체크포인트 번호를 지정하며, FXAGU_DATA는 계산된 정확한 JMPL 목표 어드레스를 보유한다. 이어서, FXAGU_CHKPNT에 의해 인덱싱된 타겟 RAM에 있는 예측된 JMPL 어드레스가 판독되고, 이 판독된 데이터는 FXAGU_DATA와 비교된다. 비교 결과는 래치되고, 래치된 신호는 JMPL_MATCH(도 35 참조)가 된다. JMPL_MATCH는 예측된 어드레스와 평가된 어드레스가 동일할 때에 어서트된다. 그 다음에 JMPL_MATCH는 WP_JMPL[i]과 AND 연산 처리되고 그 출력은 EVAL_TRUE[i](도 34 참조)가 된다. FXAGU_JMPL이 어서트되고나서 1 사이클 후에, EVAL_READY[i]가 또한 어서트된다(도 33 참조).
WP_ACTIVE_VEC[i]와 WP_MISPRED_VEC[i]는 JMPL에 대해 분기명령에서와 동일하게 발생된다. WP_MISPRED_VEC[i]가 어서트되고 나서 1 사이클 후에, PSU(300)는워치포인트 유닛(304)에 2 개의 신호, 즉 BACKUP_CHKPNT 및 MISPRED(단, 백업이 JMPL 예측 오류에 기인할 때만)와 동일 개수의 BACKUP 신호를 전송한다. 만일 MISPRED가 어서트되면, 워치포인트는 정확한 JMPL 어드레스를 갖는 래치된 FXAGU_DATA를 FETCH로 2회 전송한다(도 35 참조). 타겟 RAM은 다음 2가지 목적으로 사용된다. 하나는 분기의 교번 어드레스를 기억하는 것이고, 다른 하나는 예측된 JMPL 목표 어드레스를 기억하는 것이다. 이 2가지 용례는 배타적이므로, 이러한 구현에는 단지 하나의 타겟 RAM으로 충분하다.
본 발명의 구성 및 방법은 (1) 복수의 예측된 분기 또는 점프-링크 명령을 워치하는 것을 동시에 개시하는 구성 및 방법; (2) 실행 유닛으로부터 데이터 전송 버스를 워치함으로써 예측된 분기 또는 점프-링크 명령이 대기하는 복수의 조건 코드 데이터 또는 계산된 점프-링크 어드레스를 획득하는 구성 및 방법; (3) 단독으로 또는 상기 (2)와 조합되어 분기 도는 점프-링크 명령의 복수의 예측 오류 신호를 동시에 발생시킬 수 있게 하는 구성 및 방법; (4) 단독으로 또는 상기 (2)와 조합되어 상기 2가지 경우와 공유된 하나의 기억 장소에서 교번 분기 어드레스 또는 예측된 점프-링크 어드레스를 기억하는 구성 및 방법; (5) 단독으로 또는 상기 (4)와 조합되여, 예측 오류가 발생할 때 명령 인출을 위해 정확한 분기 어드레스 또는 점프-링크 어드레스를 전송하는 구성 및 방법; (6) CC 데이터를 획득하기 위한 태그 비교를 2개의 부분, 즉 데이터 전송 버스 태그와 비교되는 이전 사이클에서 CC 태그와, 데이터 전송 버스 태그와 비교되는 현행 발행 윈도우 에서의 현재 리네임된 CC 태그인 2개의 부분으로 분할함으로써 임계 경로의 속도를 향상시키기 위한구성 및 방법[단독으로 또는 사기(2)와 조합되어)을 제공한다. 후자의 경우에 있어서 리네임된 CC 태그의 래치된 신호는 비교용으로 사용될 수 있으며, 따라서 시간적으로 중용한 것(timing-critical)이 아니다. 도 36은 복수의 동시 미해결 분기 평가를 위한 본 발명의 워치포인트 방법의 실시예를 나타낸 플로우챠트이다.
B. 예외 검출
예외는 발행 또는 실행중에 발생할 수 있다. 그러므로, 예외는 발행 트랩과 실행 트랩을 포함한다. 이하에서는 발행 트랩 및 실행 트랩의 검출에 대하여 설명한다.
1. 발행 트랩의 검출
ISU(200)는 명령의 발행을 실행하는 발행 트랩을 또한 검출한다. 이러한 발행 트랩은 동기성 또는 비동기성 발행 트랩이 될 수 있다. 이 기술분야의 당업자가 알고 있는 바와 같이, 동기성 및 비동기성으로 되는 발행 트랩의 타입은 여러 기준에 따라 선택될 수 있으며, 설계자가 선택가능하다.
예컨대, 비동기성 발행 트랩은 통상적으로 종종 발생하고, 앞서 설명한 방식에서의 CPU(51)의 동기성이 프로세서의 속도를 감소시키게 되는 트랩이다. 그러므로, 이러한 종류의 발행 트랩은 투기적으로 동기화 및 진입되지 않는다. 이러한 발행 트랩은 SPARC-V9 아키텍텨 매뉴얼에 기술된 fill_normal, filll_other, spill_normal, spill_other, clean_window, trap_instruction(트랩 상시 즉시(TA %g0+simm7) 명령), unimplemented_ldd, unimplemented)std, illegal_instruction과 같은 발행 트랩을 포함할 수 있다.
비동기성 발행 트랩은 통상적으로 종종 발생하지 않고, CPU(51)의 동기성이 프로세서 속도에 큰 영향을 미치지 않는 트랩이다. 이 비동기성 발행 트랩은 SPARC-9 instruction_access_error, instruction_access_exception, privileged_opcode, privileged_action, fp_exception_other, fp_disabled, emulation_trap, trap_instruction(조건부 트랩(Tcc) 명령)발행 트랩과 같은 발행 트랩을 포함할 수 있다.
이들 발행트랩 중에서 어떤 타입의 것이 발행 단계에서 발생하였는지를 검출하기 위해, ISU(200)는 제어 레지스터 파일(800)로부터 제어 레지스터(CNTRL_REG) 필드를 수신한다. 도 17에 도시된 바와 같이, 제어 레지스터 파일(800)은 SPARC-V9 특권적 레지스터를 포함하는데, 특권적 레지스터는 클린 윈도우(CLEANWIN) 레지스터(801)와, 복구가능 윈도우(CANRESTORE) 레지스터(802)와, 세이브 윈도우 (CANSAVE) 레지스터(803)와, 윈도우 상태(WSTATE) 레지스터(804)와, 프로세서 상태 (PSTATE) 레지스터(805)를 포함한다. 또한, 제어 레지스터 파일(800)은 TICK 레지스터(806)와 부동소수점 레지스터 상태(FPRS) 레지스터(807)를 포함하는 SPARC-V9 비특권적 레지스터를 갖는다. CNTRL_REG 필드는 SPARC_V9 구조 매뉴얼에 기술되어 있고 CLEANWIN, CANRESTORE, CANSAVE, WSTATE, TICK, FPRS 레지스터(801-807)에 의해 제공되어 있는 CLEANWIN, CANRESTORE, CANSAVE, WATATE_NORMAL, WSTATE_OTHER, PSTATE_PEF, PSTATE_PRIV, TICK_NPT 및 FPRS_FEF필드를 포함한다.
도 7을 다시 참조하면, ISU(200)는 FR_INSTs_BRPs 명령을 디코딩하고 SPARC-V9 구조 매뉴얼에 따라 CNTRL_REG 필드를 이용하여, 어떤 SPARC-V9 발행 트랩이 발생하였는지를 판정한다. 최초의 발행 윈도우 슬롯에서의 명령에 의해 야기된 발행 트랩만이 취득될 것이다. 그러므로, 하나 이상의 발행 트랩이 검출될 때, 최초의 슬롯에 있는 발행 트랩 발생 명령의 슬롯에 앞선 발행 윈도우 슬롯내의 명령만이 ISU(200)에 의해 발행될 수 있다. 발행 트랩 발생 명령, 미 발행 트랩 발생 명령의 슬롯 다음의 FR_INST_BRP_0-3 명령은(trap-instruction) 발행 트랩을 발생한 TA 또는 Tcc 명령이 발행되는 것을 제외하고 발행되지 않을 것이다.
발행 트랩이 발생하면, ISU(200)는 트랩이 발생했다는 것을 지시하고 전술한 발행 트랩 중 어느 것이 발생되었는지를 식별하는 ISSUE_TRAP 신호를 PSU(300)에 출력한다. 비동기성 발행 트랩이 ISU(200)에 의해 검출되면, ISSUE_TRAP 신호는 발행 트랩이 검출되는 즉시 ISU(200)에 의해 출력될 것이다. 그러나, 동기성 발행 트랩이 ISU(200)에 의해 검출되면, ISSUE_TRAP 신호는 발행 트랩 발생 명령이 슬롯 0에 있을 때까지 ISU(200)에 의해 출력되지 않을 것이며, CPU(51)는 앞에서 설명한 방식으로 동기화된다. 비동기성 발행 트랩을 발생시키는 Tcc 명령의 경우에 있어서, Tcc 명령은 CPU(51)가 동기화될 때만 발행될 수 있다.
2. 실행 트랩의 검출
도 8을 참조하면, 발행된 명령을 실행하는 동안 FPU(600), FXU(601), 및 LSU(603)에 의해 검출되는 에러가 발생할 수도 있다. 전술한 바와 같이, FPU(600), FXU(601), 및 LSU(603)는 명령을 실행하는 동안 에러가 발생하였는지의 여부를 표시하는 ERR_STAT 신호를 ISB(61)의 PSU(200)에 출력한다. LSU 및 FXU 로부터의 실행 에러는 PSU(300)에 의해 용이하게 처리될 수 있다. 그러나, 부동소수점 예외는후술되는 바와 같이 특별한 처리를 필요로 한다.
도 8을 참조하면, 상기한 바와 같이, FPU(600)는 자원 가용성(resource availability)에 기초하여 예측된 및/또는 PC 순서와 다르게 부동소수점 명령을 실행한다. 부동소수점 명령을 실행하는 동안 FPU(600)는 실행 트랩(즉, 에러)을 검출할 수 있다. 그러나 FPU(600)는 명령을 예측된 및/또는 PC 순서와 다른 순서로 실행할 수 있기 때문에, 그들이 발생하는 실행 트랩도 예측된 및/또는 PC 순서와 다르게 될 수 있다. 부동소수점 실행 트랩이 실제의 PC 순서로 발생된 것처럼 부동소수점 실행 트랩을 적절하게 처리하고 검출하기 위해, PSU(300)은 도 37에 나타낸 것과 같은 부동소수점 예외(FPEXCEP) 링 또는 유닛(306)을 포함한다.
도 38에 나타낸 바와 같이, FPEXCEP 링(306)은 64개의 기억 엘리먼트 (storage element) 또는 엔트리를 가지는 데이터 기억 구조(900)를 포함한다. 각각의 기억 엔트리는 64개의 명령 일련 번호중 하나에 대응하며, 명령 식별 필드(FP)와, 부동소수점 트랩 타입(FTT) 필드 및 현행 부동소수점 예외 타입(CLEX) 필드를 갖는다. 도 37에 나타낸 바와 같이, 데이터 기억 구조는 FP 필드를 기억하기 위한 64개의 어드레스 가능한 기억 엘리먼트를 갖는 FP 필드 링과, FTT 필드를 기억하기 위한 64개의 어드레스 가능한 기억 엘리먼트를 갖는 FTT 필드 링과, CEXC 필드를 기억하기 위한 64개의 어드레스 가능한 기억 엘리먼트를 갖는 CEXC 필드 링을 형성한다. FP, FTT, 및 CEXC 필드 링의 어드레스 가능한 기억 엘리먼트 각각은 명령 일련 번호에 대응한다.
FP 비트는, 대응하는 명령이 SPARC-V9 부동소수점 타입 명령인지의 여부를표시하기 위해 세트("1")되거나 또는 클리어("0")된다. FP 비트에 의해 부동소수점 명령으로 식별되는 FPEXCEP 링(306)의 명령에 대해, FTT 필드는 발생된 SPARC-V9 부동소수점 트랩의 타입을 식별한다. SPARC-V9 아키텍쳐 매뉴얼에 나타낸 바와 같이, 이것은 트랩을 포함하지 않고, IEEE_754 예외, unimplemented_FPop, unfinished_FPop, sequence_error, hardware error, 및 invalid_fp_register 에러를 포함한다. 당업자라면 이해하겠지만 CPU(51)는 이러한 타입의 트랩중 일부를 특정화, 검출 및 처리하지 않고 구현될 수도 있으며, 이러한 경우 FPEXCEP 링(306)의 FTT 필드는 최소의 기억 공간을 요구하도록 더 작게 형성될 수 있다. 더욱이, IEEE_754 예외가 발생되었음을 FTT 필드가 나타내는 부동소수점 명령에 대해, CEXC 필드는 IEEE Std 754-1985 및 SPARC-V9 아키텍쳐 매뉴얼에 따라 발생한 하나 이상의 IEEE_754 예외 타입을 식별한다. 따라서, CEXC 필드는, 오퍼랜드가 부적절한지를 나타내는 비트(nvc)와, 오버플로우가 발생하였는지를 나타내는 비트(ofc)와, 언더플로우가 발생하였는지를 나타내는 비트(ufc)와, 제로에 의한 나눗셈이 발생하였는지를 나타내는 비트(dzc)와, 부정확한 결과가 발생하는지를 나타내는 비트(nxc)를 포함한다. 부동소수점 트랩 타입의 다른 타입을 발행시키거나 또는 부동소수점 트랩이 없는 타입을 발생시키는 부동소수점 명령에 대해, CEXC 필드는 IEEE_754 예외 어떠한 타입도 발생하지 않았음을 나타낸다.
앞에서 설명하였고 도 11에 도시된 A-링(312)과 M-링(324)과 같이, FPEXCEP 링(316)은 원형, 링형 또는 둘러싼 형태의 데이터 구조로서 구현되고, 이 구조에서 포인터는 "modulo-FPEXCEP-ring 레지스터 길이" 산술(여기서는 모듈로-64 산술)을이용하여 도 37에 도시된 바와 같이 데이터 구조를 따라 이동된다. 당업자는, 원형 데이터 구조가 바람직하지만 본 발명에 필수적인 것은 아니며 본 발명의 특징을 구현하는 다른 데이터 구조가 이용될 수도 있음을 알 것이다.
도 38을 다시 참조하면, ISU(200)는, 각 발행 스테이지 동안 인출된 FR_INST_BRP_0-3 명령중 어느 것이 발행되었는지를 표시하는 전술한 ISSUE_ VALID 신호를 출력한다. 동시에, ISU(200)는 발행된 명령중 어느 것이 부동소수점 명령인지를 식별하는 FP_ISSUE 신호를 출력한다. 이들 신호는 FP 기록(WR) 로직(901)과 FTT 기록(WR) 로직(902)에 의해 수신된다. 또한, FP WR 로직(901) 및 FTT WR 로직 (902)은 ICRU(301)로부터 상술한 NISN 포인터를 수신한다.
FP WR 로직(901) 및 FTT WR 로직(902)은 ISU(200)에 의해 막 발행된 명령에 대해 FP 비트 및 FTT 필드에 대응하는 FPEXCEP 링내의 위치를 어드레스하기 위해 NISN 포인터와 ISSUED_VALID 신호를 사용한다. FP_ISSUE에 의해 부동소수점 명령이라고 식별된 각각의 명령에 대해, FP WR 로직(901)은 그 명령이 부동소수점 명령임을 표시하기 위해 대응하는 FP 비트를 세트한다. 그리고, 부동소수점 명령이 아닌것으로 FP_ISSUE에 의해 식별된, 발행 명령에 대해서는, FP WR 로직(901)은 대응하는 FP 비트를 클리어하여 이 명령이 부동소수점 명령이 아님을 표시한다.
도 8을 참조하면, 상기한 바와 같이, FPU(600), FXU(601), FXAGU (602) 및 LSU(603)는 발행된 명령을 실행하고, 실행이 완료된 때 ERR_STAT 신호를 출력한다. 도 39에 나타낸 바와 같이, ERR_STAT 신호는, FPU(600)에 의해 실행되고 완료된 부동소수점 명령에 대한 일련 번호, 체크포인트 번호 및 에러 상태 필드를 포함하는FP_ERR_STAT 신호를 포함한다. 에러 상태 필드는 실행된 부동소수점 명령에서 기인하는 부동소수점 트랩 타입 또는 그 명령에서 기인하는 것이 아니라면 부동소수점 트랩이 전혀 없다는 것과, 부동소수점 명령에 의해 야기된 현행 부동소수점 예외 또는 야기된 것이 전혀 없다면 현행 부동소수점 예외가 전혀 없다는 것을 나타낸다. 즉, 에러 상태 필드는 부동소수점 명령에 대해 FPEXCEP 링(306)에 기록될 FFT 및 CEXC 필드를 나타내는 데이터를 포함한다.
더욱이 도 39를 참조하면, FSR/CCRFRN(606)은 SPARC-V9 부동소수점 상태 레지스터(FSR)를 포함한다. FSR은, 하나 이상의 예외가 마스크 될 수 있도록, 전술한 각각의 IEEE_754 예외에 대한 마스킹 비트를 포함하는 트랩 인에이블 마스크 필드 (TEM)를 포함한다. TEM 필드는 FPU(602)에 제공된다. IEEE_754 예외가 발생하면, FP_ERR_STAT 신호는, 예외가 마스크 되어야 하는 타입임을 TEM 필드가 나타내는 경우 예외가 발생되었다는 것을 PLSM(307)에 표시하지 않는다. 그러나 이러함에도 불구하고 FP_ERR_STAT 신호는 IEEE_754 예외가 발생했다는 것(즉 FTT) 및 그 IEEE_754 예외의 타입(즉 CEXC)을 FPEXCEP 유닛에 표시한다.
각각의 완료된 부동소수점 명령에 대해, FTT WR 로직(902)은 FP_ERR_STAT 신호에 제공된 일련 번호를 사용하여, FPEXCEP 링(306)의 대응하는 FTT 필드에 FP_ERR_STAT 신호에 의해 식별된 FTT 데이터를 기록한다. 또, CEXC 기록(WR) 로직 (903)은 이러한 일련 번호를 사용하여 FPEXCEP 링(306)의 대응하는 CEXC 필드에 FP_ERR_STAT 신호에 의해 식별된 CEXC 데이터를 기록한다.
판독 및 발생된 예외 계산(RD 및 AEXC 계산) 로직(904)은 PSU(300)의ICRU(301)로부터 RRP 포인터와 COMMIT_VALID 신호를 수신한다. RRP 포인터는 이전 머신 사이클에서 철회된 최종 명령을 가리키고, COMMIT_ VALID 신호는 RRP 포인터가 이전 머신 사이클에서 얼마나 많이 진행하는지(즉 철회된 명령의 수)를 나타낸다.
각각의 머신 사이클 동안, RD 및 AEXC 계산 로직(904)은 RRP 포인터와 COMMIT_VALID 신호를 이용하여 최종 머신 사이클에서 철회된 각 명령에 대해, FPEXCEP 링(306)의 FP 비트와 FTT 및 CEXC 필드를 판독한다. 그런 다음, 부동소수점 명령(FP 비트에 의해 식별되는 것과 같은)인 철회된 명령에 대해서, RD 및 AEXC 계산 로직(904)은 그 CEXC 필드를 논리적으로 OR하여 AEXC 필드를 계산한다. 상기 간단하게 설명된 바와 같이, 비마스크(non-masked) IEEE_754 예외를 발생시키는 부동소수점 명령은 철회되지 않으며, PLSM(307)에 의해 실행 트랩이 순서결정되기 때문에, AEXC 필드는 최종 머신 사이클에서 철회된 모든 부동소수점 명령에 의해 발생되는 마스크된 IEEE_754 예외를 식별한다.
또한, RD 및 AEXC 계산 로직은 현행 머신 사이클에서 철회된 명령중 어느 것이 가장 최근에 철회된 부동소수점 명령인지를 판독된 FP 비트로부터 판정한다. 하나 이상의 부동소수점 명령이 현행의 머신 사이클에서 철회되었다면 Rd 및 AEXC 계산 로직(904)은 계산된 AEXC 필드를 내포하는 신호 및, 이 계산된 AEXC 필드가 도 39의 FSR의 fsr.aexc 필드에 기록되어야함을 나타내는 신호를 포함하는 WR_ CEXC_AEXC_FTT 신호를 출력한다. 더욱이, WR_CEXC_AEXC_FTT 신호는 가장 최근에 철회된 부동소수점 명령에 대한 FTT 및 CEXC 데이터를 내포하는 신호 및, 이 데이터가 도 39의 FSR의 fsr.ftt 및 fsr.cexc 필드에 기록되어야함을 나타내는 신호를 또한 포함한다. 이러한 환경에서 FTT 데이터는 이하의 몇가지 이유로 부동소수점 트랩 타입이 없음을 표시할 것이다. 첫번째, 실행 예외를 발생시키지 않는 부동소수점 명령은 철회될 수 있고, 부동소수점 트랩 타입이 없음을 표시하는 FPEXCEP 링의 대응하는 FTT 필드를 가진다. 두번째, IEEE_754 예외 트랩을 표시하는 FTT 필드를 가지지만 FSR(607)의 TEM 필드에 의해 마스크되는 하나 이상의 대응하는 IEEE_754 예외를 발생시키는 부동소수점 명령은, 이들 실행 예외중 어느 것이 발생하였는지가 PLSM(307)에 통보되지 않기 때문에 철회될 수 있다.
상기한 바와 같이 PLSM(307)은 FP_ERR_STAT 신호도 수신한다. 이들 신호가 실행 트랩이 발생하였음을 표시하면, 실행 트랩 순서결정 처리는, 트랩을 발생시키는 명령 이전의 명령에서 CPU(51)가 동기화되도록(즉, RRP=CSN=ISN)하는 PLSM(307)에 의해 개시된다.
PLSM(307)은 CPU(51)가 동기화되면, FPEXCEP_CHK 신호를 발생시킨다. FPEXCEP_CHK 신호에 응답하여, RD 및 AEXC 계산 로직(902)은 RRP + 1에 있는 명령에 대해 FPEXCEP 링(306)내의 FP, FTT 및 CEXC 필드를 판독하기 위해 RRP 포인터를 사용한다.
판독된 FTT 필드가 부동소수점 트랩이 없음을 표시한다면, RRP+1에서의 명령은 부동소수점 예외를 발생시키는 책임을 갖니 않는다. 몇 가지 다른 종류의 예외가 이 명령에서 발생할 수 있기 때문에 RD 및 AEXC 로직(904)은 WR_CEXC_AEXC_FTT 신호를 출력하고 이들 신호들은 fsr.ftt, fsr.cexc 및 fsr.aexc 필드에 기록되어야할 것이 아무것도 없음을 나타내는 신호를 포함한다.
그러나 판독된 FTT 필드가 부동소수점 트랩이 발생하였다는 것을 표시한다면, RRP+1에서의 명령은 부동소수점 예외를 발생한 책임이 있다. 이대 RD 및 AEXC 로직(904)은 WR_CEXC_AEXC_FTT 신호를 출력하고, 따라서 이 신호들은 RRP+1에서의 명령에 대해 EPEXCEP 링(306)으로부터 판독된 FTT 필드를 포함하는 신호와, 도 39 의 FSR(607)의 fsr.ftt에 nfakd FTT 필드가 읽어넣어져야 함을 나타내는 신호를 포함한다. 따라서 부동소수점 명령에 의해 발생된 트랩 타입은 FSR의 fsr.ftt 필드에 포함되고, 따라서 부동소수점 실행 트랩 처리 루틴은 트랩을 적절히 처리하도록 기억 FSR(STFSR) 명령에 의해 FSR을 액세스할 수 있다.
또한, 판독된 FTT 필드가 IEEE_754 예외가 발생하였음을 나타낸다면, RD 및 AEXC 로직(904)에 의해 출력된 WR_CEXC_FTT 신호는 RRP+1에서의 명령에 대해 FPEXCEP 링(306)으로부터 판독된 CEXC 필드를 포함하는 신호와, 이 필드가 도 39의 FSR(607)의 fsr.cexc 필드에 기록되어야함을 나타내는 신호를 포함한다. 그 결과 부동소수점 명령에 의해 발생된 현행 예외 타입은 FSR의 fsr.cexc 필드에 포함되고, 따라서 트랩 처리 루틴은 기억 FSR(STFSR)명령을 이용하여 FSR(607)의 필드를 액세스할 수 있고, 트랩을 적절히 처리할 수 있다.
도 37을 참조하면, 이러한 경우에, 부동소수점 명령은 예측된 및/또는 실제 PC 순서와 다르게 FPU(600)에 의해 실행되기 때문에, RRP+1에서의 명령은 PLSM(307)이 실행 트랩 순서결정 처리를 개시하게 만드는 결함 명령이 아닐 수 있다. 다시 말해, 부동소수점 명령은 먼저 발행되었지만(즉 더 빠른 일련번호를 가짐) 나중에 실행되는 다른 부동소수점 명령에 의해 발생된 실행 트랩보다 먼저 검출되는 실행 트랩을 발생시킬 수 있다. 그러나, 나중에 발행되었지만 먼저 실행되는 명령에 의해, PLSM(307)에 의한 실행 트랩 순서결정 처리(execution trap sequencing)가 개시되며, 머신 동기화 전의 순서결정 처리동안, 더 빠른 명령이 예외를 발생시키다면, PLSM(307)은 예외를 처리하도록 전환한다. 따라서, 실행 트랩의 순서결정 처리에 의해, 나중에 검출된 실행 트랩은 마치 실행 트랩이 실제 PC 순서로 발생된 것처럼 먼저 검출된 실행 트랩 대신에 실제로 처리되게 한다.
FPEXCEP 유닛이 SPARC-V9 아키텍쳐의 콘텐츠내에 설명되어 있다고 하다라도 당업자라면 부동소수점 명령의 투기적인 실행을 포함하는 어떠한 아키텍쳐에 대해서도 구현될 수 있음을 이해할 것이다.
C. 이전 상태로 프로세서를 백트래킹하는 것에 의한 복구
워치포인트(304)가 잘못 예측된 명령을 검출하거나 또는 DFB(62)에서 실행 예외가 발생하여 PSU(300)에서 실행 예외(etrap)를 트리거할때 CPU의 "백트래킹 (backtrack)"이 개시된다. 프로세서의 백트래킹(Backtracing)은 프로세서의 백업 및/또는 프로세서의 백스텝을 포함할 수 있으며 이하 상세히 설명된다. 하나 이상의 예측 오류 및 실행 예외가 하나의 머신 사이클 동안 발생할 수 있다. 예시적인 CPU(51)에서, 모든 투기적으로 실행된 제어 전송 명령(예컨대 예측된 분기 명령)이 체크포인트된다. 이러한 잘못 예측된 명령은 항상 "체크포인트 경계"에 있다.
체크포인트된 예측 오류 명령으로부터의 복구는 발행되는 시점에서 잘못 예측된 명령에 대응하는 체크포인트에 기억된 머신 상태를 복구함으로써 달성될 수있다. 실행 예외는 예측 오류와는 달리, 모든 명령이 체크포인트되지는 않기 때문에 체크포인트된 명령에 대응하지 않을 수 있다. 일반적으로, 실행 예외를 발생시키는 명령은 임의의 "명령 경계(instruction boundary)"에 있을 수 있다. 체크포인트 경계는 투기적으로 발행된 제어 전송명령에 대해서만 명령 경계에 대응한다. 투기적으로 발행된 모든 명령이 체크포인트 형성을 요구하는 것이 아니고, PC 불연속성을 생성하는 투기적 제어 전송 명령만이 체크포인트 형성을 요구한다(제어 전송 명령이 머신 "동기화" 명령으로서 선택되고 이 명세서에서 설명되는 바와 같이 선택적으로 체크포인트되지 않는 경우가 아닐때). 따라서 CPU(51)가 백트래킹되는 방법은, 복귀를 개시한 조건 및 예측 오류 또는 예외가 체크포인트된 명령에 대응하는지에 좌우된다.
본 명세서에서 사용되는 "백업(backup)"은 체크포인트에서 이전에 기억된 머신 상태를 복구한 다음, CPU(51) 명령의 발행 및 실행을 재개시하도록 적절한 동작을 취함으로써 체크포인트 경계에서 머신 상태를 복구하는 구조와 방법에 관한 것이다. 본 명세서에서 사용되는 바와 같이, 백업은 체크포인트된 명령으로부터 순방향에 있는 명령을 순차적인 순서로 재발행하고 재실행하는 것과 관련이 있을 수도 또는 없을 수도 있다. 본 명세서에서 사용되는 용어 "백스텝(backstep)"은 임의의 명령 경계에서 가능하다면 백업과의 합동으로, 머신 상태를 복구한 다음, 적절한 동작을 취함으로써 CPU(51) 명령의 발행 및 실행을 재개시하는 구조와 방법에 관한 것이다.
실행 트랩(etraps)이 걸리면, 머신은 결함 명령으로 백트래킹하여 머신의 정확한 상태를 유지한다. 체크포인트 경계에 놓여지는 예측 오류와는 달리, 실행 트랩은 결함 명령에 도달하기 위해 백스텝, 백업, 또는 이 2개의 조합을 요구할 수도 있다. 동작을 수행하는 필요성 외에 백스텝이나 백업 동작의 순서 결정 또는 빈도에 있어서 제한은 없다. 조합하여 사용될 경우, 머신 백업과 백스텝은 예측 오류 및 실행 예외로부터 효율적으로 복귀하는 방법이 제공하며, 어떤 환경에서는 예외를 발생시키는 명령의 재실행, 또는 체크포인트된 명령과 결함 명령 사이의 명령의 재실행을 강제하지 않고 그렇게 하는 것이 유리할 수 있다.
체크포인트는 프로세서 흐름에 변화가 있을 때마다 할당된다(예컨대 Bcc, FBcc, jumpl 및 유사 명령). 예시적인 CPU(51)는 할당에 이용가능한 최대16 개의 체크포인트를 가지고 있다. 백업은 머신 상태를 체크포인트 경계로 복구하기 위해 수행된다. 백스텝은 머신 상태를 임의의 명령 경계로 복구하기 위해 수행된다. 예시적인 머신은 이용가능한 하드웨어에 의해 사이클당 최대 4개의 백스텝하는 것으로 제한된다. 백업은 머신 상태를 복구하기 위한, 정교하지 않지만 고속의 백트랙킹 메카니즘을 제공하고, 백스텝은 미세한 명령 경계에서 머신 상태를 복구하기 위한 메카니즘을 제공한다. 머신은 백업 또는 백스텝의 어떠한 조합을 통해서도 이전의 상태로 백트래킹할 수 있다.
본 발명의 백스텝 절차를 본 발명의 백업 절차와 함께 사용하여 정확한 상태의 복구를 실현하기 위하여, 2개의 법칙이 지켜져야 한다. 첫번째, 아키텍쳐 제어 레지스터를 수정할 수 있는 명령이 명령 스트림에서 마주칠 때 CPU(51)가 명령의 실행에 앞서 동기화되거나 또는 머신이 그 명령을 체크포인트해야만 한다. 이 첫번째 법칙이 지켜지면, 백스텝핑은 어떠한 아키텍쳐 제어 레지스터의 수정 및 갱신도 요구하지 않는다. 두번째, 프로그램 카운터 불연속성을 발생시킬 수 있는 모든 명령여 체크포인트되어야 한다. 두번째 법칙이 지켜지면, 백스텝핑은 백스텝의 수만큼 PC를 디크리먼트시키는 것과, 이전의 대응하는 프로그램 카운터에서 할당된 것처럼 머신 자원[RRF(302)에 유지된 자원을 포함]을 리클레임하고 복구하는 것에 관여한다..
백트랙킹 유닛(BKTR)(305)은 PSU(300)내에 기능적으로 위치하고, 정확한 CPU(51)의 기능과 복구를 위해 요구되는 바와 같은 머신의 백업과 백스텝의 구현을 책임진다. 도 40에 나타낸 바와 같이, BKTR(305)은 머신 백업, 하나 이상의 머신 백스텝, 또는 백업 및 백스텝의 조합이 예측 오류 및 예외로부터 CPU(51)를 복구하는데 적절한지를 판정하는 기능을 하는 백트랙킹 제어 유닛(BTCN)(401)를 포함하고 있다. BTCN(401)은 DFB(62) 내의 각 실행 유닛 및 워치포인트(304)로부터 SN, 에러, 및 상태 정보를 수신한다. 백업 유닛(BKUP)(402)은 머신 백업을 개시하고 순서 결정하는 기능을 하고, 백스텝 유닛(BKST)(403)은 머신 백스텝을 개시하고 순서결정하는 기능을 한다. CPU(51)는 명령의 발행를 중단하고, 예외 또는 예측 오류를 발생시키는 명령에 적절한 백업 및 백스텝을 이용하여 백트랙킹해야 한다. 백스텝을 이용하여 CPU(51)를 백업하고 머신을 백스텝하는 구조와 방법에 대햇는 이후 더 상세하게 설명된다.
1. 체크포인트 경계로의 프로세서 백업
머신 백업은, (1)PSU(300)내의 PLSM(307)이 RED 모드로의 진입을 시도할 때,또는 (2)워치포인트(304)가 잘못 예측된 명령을 검출할 때 개시된다. 머신의 백업은 (3)결함 명령(실행 예외 또는 실행 트랩)이 DFB(62)로부터 검출될때 개시될 수도 있고 개시되지 않을수도 있다. 백업 절차는, 백업을 행할 체크포인트 명령의 선택을 포함하여, 백업을 개시하는 이유에 따라 다르다. 실행 예외를 발생시키는 결함 명령이 체크포인트 경계와 일치하지 않는 경우에는 백업 다음에 백스텝이 행하여 질 수 있다.
각각의 머신 사이클에서, 백업 유닛(BKUP)(402)은 데이터 전송 버스 상에서 DFB(62)로부터의 명령 실행 상태 정보(ERR_ STAT)와 워치포인트(304)로부터의 잘못 예측된 명령 정보(WP_MISPRED)를 수신한다. 이들 신호는 명령 일련 번호(SN)와, 백업이 필요하다면 머신이 백업되어야하는 명령 체크포인트와, 에러가 발생되었는지의 표시와, 에러 타입 표시(지연, 데이터 브레이크포인트, 부동소수점 동작 등)를 식별한다. FXAGU가 곱셈이나 나눗셈 동작을 처리하지 않는다면 이 실행 유닛으로부터의 ERR_STAT 신호는 일반적으로 에러 정보를 제공하지 않고 ERR_STAT신호중의 SN 및 체크포인트 번호 정보를 제공할 것이다. 발행된 모든 명령을 위해 체크포인트가 형성되지는 않더라도, 각각의 명령은 그 명령이 발행된 시점에서 백업 체크포인트를 할당받는다. 이 체크포인트는 명령의 발행에 앞서 PSU(300)내의 ICRU(301)에 의해 할당되고, 발행시 ISU(200)에 의해 명령과 관련되며, 명령 동작 코드(op-code) 및 명령 일련 번호를 이용하여 DFB(62)로 ISU(200)에 의해 전송되고, 실행 유닛의 큐(queue)중 하나에 기억된다(예를들어 도 22에서, 백업 체크포인트는 체크포인트 필드(614)에 기억된다.) 그러므로, 명령이 실행을 완료하면 일련 번호 및 체크포인트 번호는 실행 유닛(즉, FXU, FPU, FXAGU, 또는 LSU)내에서 즉시 이용가능하다.
2. 잘못 예측된 명령, RED 모드 및 실행 트랩에 의해 개시된 백업
백업 사이클은 잘못 예측된 명령이 워치포인트(304)에 의해 검출될 때마다 또는 RED 모드로 진입할 때 BKUP(402)에 의해 개시되며, 실행 예외로부터 복구하기 위해 개시될 수도 있다. 실행 예외로부터의 복구는 백스텝만을 요구할 수도 있고, 백업만을 요구할 수도 있으며, 백업과 하나 이상의 백스텝의 조합을 요구할 수도 있다. BKUP(402)은 각 사이클마다 DFB(62)와 워치포인트(304)로부터 수신된 명령 실행 상태 정보를 평가하고, 만일 있다면 어느 명령이 잘못 예측되었는지 또는 실행 예외를 발생시키는지를 판정하는 체크포인트 벡터 로직 유닛(404)을 포함한다. 예시적인 CPU 에서, 로직 유닛(404)은 DFB(62) 또는 워치포인트(304)로부터 수신된 각 체크포인트에서 "OR"를 수행한다. 최초의 체크포인트 선택 로직(Select Earliest Checkpoint Logic)(405)은 어느 체크포인트가 최초의 것인지를 판정하여, 차후의 결함 명령에 대응하는 실행 트랩은 로직(404)에 의해 식별되고, 이미 삭제된 체크포인트로의 백업을 개시하지 않는다. BKUP(402)은 어느 체크포인트 번호가 백업을 위해 사용되었는지를 판정할 때에 예측 오류 및 실행 예외를 고려한다.
머신은 잘못 예측된 명령이 최초의 체크포인트된 명령일때 잘못 예측된 명령 체크포인트로 백업된다. RED 모드에 의해 개시된 백업에 대해, 머신은 회부된 일련 번호(CSN)에 가깝지만 보다 더 큰(A-Ring 원형 구조에 있어서) 체크포인트로 백업된다. 실행 예외에 대해 체크포인트 선택은 보다 복잡하며 예외의 특성에 좌우된다.
실행 예외(etrap)에 의해 개시된 백업은 지연 및 비지연 트랩에 대한 상이한 백업 체크포인트 번호의 계산을 요구할 수 있다. 일반적인 비지연 트랩에 대해, 체크포인트 n에 있는 명령 i가, ISN이 체크포인트 n+1를 초과하여 이동된 시점에서 결함이 발생한다면, 머신은 ISN으로부터 체크포인트 n+1로, 즉 잘못된 명령 다음의 체크포인트로 백업된다. 체크포인트 n+1이 활성 상태 또는 유효한 체크포인트가 아니라면, 체크포인트를 요구하는 명령은 전혀 발행되지 않거나 또는 어떤 타임아웃 체크포인트도 생성되지 않았기 때문에, 백업이 수행되어서는 않된다. 대신에, 결함 명령이 체크포인트 바로 다음의 일련 번호 슬롯에 있지 않는 한, ISN으로부터 후방으로 결함 명령까지 백스텝만을 이용하는 복구가 적절하다. 예를 들어, 체크포인트 m이 할당되고 일련 번호 SN=10을 가지는 경우, 슬롯 SN=11에 있는 명령이 결함이 있다면, 체크포인트 m+1로의 백업 대신에, 체크포인트 m으로의 백업이 개시된다. 즉, 머신은 결함 명령 이전에 체크포인트로 백업된다.
체크포인트된 명령이 투기적인 분기 또는 다른 제어 전송 명령에 대응할 때 프로그램 카운터 불연속성은 체크포인트된 명령과 그 다음 명령 사이에 존재한다. 예시적인 백스텝 실행은 프로그램 카운터 불연속성을 가로질러 백스텝하지는 않으며, 단일 프로그램 명령 일련 번호의 차이만이 존재함에도 불구하고 사용될 수 없다. 프로그램 카운터 및 머신 상태는 이러한 상황에서, 백업을 통해 적절히 복구될 수 있을 뿐이다.
지연된 트랩은 비지연 트랩과는 상이한 백업 목적지 계산(backup destination calculation)을 필요로 한다. 예컨대, 체크포인트 m이 할당되고 일련번호 SN=10을 갖는 경우, SN=11에 있는 명령이 결함이 있고 지연된 트랩을 발생시킨다면 머신은, ISN이 트랩핑 명령 바로 앞의 명령이 아닌 트랩핑 명령을 가리켜야 하기 때문에 체크포인트 m 대신에 체크포인트 m+1(만약 존재한다면)로 백업되어야 한다. 만일 체크포인트 m+1이 존재하지 않으면 백업은 개시되지 않는다. 대신에, 정확한 상태가 머신 백스텝만을 이용하여 복구된다. 표 10에는, 체크포인트 번호 및 결함 명령 일련 번호의 몇개의 조건하에서 지연 및 비지연 트랩을 위해 취해진 백업 동작을 요약되어 있다.
백트래킹(305)이, 머신 백업에 의해 영향받는 CPU(51) 유닛에게 백업이 발생되었다는 것을 알리는 제어 신호 및 이 영향받는 CPU(51)의 각 구성 성분에게 백업에 사용하는 체크포인트 번호를 알려주는 4비트 데이터 신호를 포함하는 신호 (DO_BAKUP)를 어서트할때 체크포인트된 명령 일련 번호에서의 프로세서 상태 복구가 행하여진다. 체크포인트된 상태가 머신에 국부적으로 기억된 다음, 각각의 CPU(51) 유닛은 DO_BACKUP 신호에 응답하여 상기 영향받은 유닛내의 기억영역으로부터 상태를 복구하는 기능을 한다.
[표 10]
본 발명의 방법에 대한 실시예에 있어서, 몇개의 체크포인트 및 일련 번호의조건하에서 지연 및 비지연 트랩에 대해 취해진 백업 동작
Figure pct00014
체크포인트된 상태를 기억하고, 유지하고, 복구하는 기능을 하는 CPU(51) 유닛 및, 백업 동작(특히, PSU(300)내의 유닛)을 순서결정하는 기능을 하는 CPU(51) 유닛은 DO_BACKUP 신호를 수신하고 응답한다. RRF(302)는, 이 RRF가 CPU(51)를 백스텝하고 백업보다는 스텝 바이 스텝(step-by-step) 방식으로 상태를 복구하는 것에만 직접 관여되기 때문에, DO_BACKSTEP 신호를 수신하지만 DO_BAKUP 신호는 수신하지 않는다.
더 상세하게 도 6을 참조하면, 체크포인트 기억 유닛(106)은 DO_BACKUP 신호에 의해 특정되는 체크포인트 번호에 대응하는 엔트리에 상기 기억 유닛에 의해 기억되는 체크포인트된 APC값 및 NAPC값을 CHKPT_PC 및 CHKPT_NPC 신호의 형태로 출력한다. 그런 다음 이들 값들은 APC 및 NAPC 레지스터(112,113)에 기억된다. 마찬가지로 제어 레지스터 체크포인트 기억 유닛(817)은 DO_BACKUP 신호에 의해 특정된 체크포인트에 대해 체크포인트된 제어 레지스터 콘텐츠를 CHKPT_CNTRL_REG 신호의 형태로 출력하고, 그런 다음 이 콘텐츠는 도 17에 도시된 바와 같이, 제어 레지스터 파일(800) 내의 대응하는 제어 레지스터내의 RD/WR 갱신 로직에 의해 기억된다. 또한 도 16을 참조하면, FXRFRN(604), CCRFRN(610), 및 FPRFRN(605) 각각의 체크포인트 기억 유닛(616)은 DO_BACKUP 신호에 의해 특정된 체크포인트에 대해 체크포인트된 리네임 맵을 CHKPT_MAP 신호의 형태로 출력한다. 체크포인트된 리네임 맵은 제어 로직(613)에 의해 리네임 맵핑 로직(615)에 다시 기억된다. 또한, 프리리스트 유닛(700)의 체크포인트 기억 유닛(702)은 FXRFRN(604), CCRFRN(610), FPRFRN(605) 각각의 물리적 레지스터의 체크포인트된 프리리스트를 CHKPT_FREELIST 신호의 형태로 출력하며, 그런 다음 이 프리리스트는 프리리스트 로직(701)에 기억된다.
예시적인 CPU(51)에서 백업은 실행 트랩이 여전히 시퀀스되는 경우에도 개시된다. 실행 트랩 예외 처리는 다중 사이클을 요구하기 때문에 머신이 동기화 (ISN=CSN=RRP)되고 트랩을 취하여 처리되기 전에 DFB(62)에 의해 하나 이상의 실행 트랩이 어서트되게 하는 것이 가능하다. 예시적인 CPU(51)의 일실시예에서, 각 슬롯 0과 1에 대한 DFB(62)로부터의 각각의 에러 및 상태 신호(ERR_STAT)는 단일 비트 에러 표시 신호(single bit error indication signals), 6비트 일련 번호 신호 (FX_SN, FP_SN, LS_SN 및 FXAG_SN) 및, 각 명령에 대한 적절한 백업 체크포인트를 계산하기 위해 사용될 16비트 원핫(one-hot) 체크포인트 벡터(FXDF_CHKPNT, FPDF_CHKPNT, FXDF_CHKPNT, 및 LSDF_CHKPNT)를 포함한다. 또한, 잘못 예측된 명령 정보 신호 WP_MISPRED는 16비트 원핫 벡터이고, 여기에서 비트-i의 어서트는, i번째 체크포인트가 잘못 예측된 명령에 대응하고 백업을 필요로함을 표시한다. 체크포인트 벡터 로직 유닛(404)은 머신이 트랩 테이블로 벡터화가 가능할 때까지 슬롯0 과 1 각각으로부터 16비트 원핫 체크포인트 벡터 전부를 주적적으로 OR한다. "OR된" 체크포인트 벡터는 최초의 체크포인트를 판정하는 최초 체크포인트 선택 로직 (405)에 공급된다. 이후의 명령에 대응하는 실행 예외가 발생하는 경우에도, 이전의 백업을 통해 이미 삭제된 체크포인트에 대한 백업은 개시되지 않는다. 예시적인 CPU(51)에서 워치포인트 예측 오류 신호(WP_MISPRED)는 16 비트 원핫 벡터이고, 여기에서 비트-i의 어서트는 i번째 체크포인트가 잘못 예측된 명령에 대응하고 백업을 필요로함을 표시한다.
3. 임의의 명령 경계로의 프로세서 백스텝
머신 백스텝은 DFB(62)에 있는 결함 명령들로부터 발생된 실행 예외(또는 실행 트랩(etraps))의 결과에 따라 개시된다. 머신 백스텝은 머신 백업과 협력하여 자주 발생되지만 또한, 백업을 개시하지 않고도 개시될 수 있다.
백스텝 유닛(BKST)(403)은 백스텝을 수행하는 기능을 한다. 이 머신 "백스텝"은 DFB(62)에 있는 결함 명령들로부터 발생된 실행 트랩(etraps)의 결과에 따라 발생한다. 백스텝이 수행되면, 상기 머신에서는 두 가지의 이벤트가 발생한다. 그 첫번째로, 처리중인 명령들이 삭제되면 자원들은 리클레임[ICRU(301) 및 RRF(302) 에 대한 설명을 참조]되며 사용가능하게 된다. 이들 자원들은 일련 번호, 체크포인트, 워치포인트 및 할당된 물리적 및 논리적 레지스터를 포함한다. 두번째로, 상기 백스텝 수행 동안, ISN은 CSN 및 RRP의 뒤로 가지 않는 범위내에서 디크리먼트 (decrement)된다. 결함 명령은 A-링(312)의 그 활성-비트를 여전히 세트 상태로 유지하며, 그에 의해 CSN 및 RRP의 진행이 억제된다. 이 결함 명령이 에러 없이 성공적으로 실행되었다면 그 명령에 대응하는 상기 A-Ring 비트는 클리어된다. [지연 트랩들을 성공적으로 처리할때, 상기 A-Bit(및 M-Bit)가 클리어되어 CSN(및 NMCSN) 진행 및 자원에 대한 최종적인 복구가 수행되게 하는 것을 제외한다]
머신 백스텝은 백스텝하는데 이용하고자 하는 명령의 일련 번호를 식별하는 PLSM(307)로부터 제공된 백스텝 개시 제어 신호(BACKSTEP_LAUNCH) 및 백스텝 일련 번호 식별 신호(BACKSTEP_TO_SN)에 의해 BKST(403) 장치에서 개시된다. 이 개시에 응답하여 BKST(403)는 백스텝 통지 신호(D0_BACKSTEP)를 발생함으로써 백스텝 절차의 순서결정을 시작한다. 트래킹(305)이 백스텝 모드로 개시한다는 것을 ICRU(301) 및 다른 CPU(51)에 알리는, BKST(403)는 백스텝을 종료시키기 위한 명령 갯수의 카운트를 식별하고 PLSM(307)에 의해 태스크(task)를 완수하도록 초기화할 수 있는 위성 제어기에 의해 관측될 수 있는 신호를 발생시키기 시작한다. BKST(403)는 PLSM의 요구시에 상기 태스크를 시작하며, 이 태스크가 완수되면 PLSM에 상기 태스크의 종료를 표시하고, 다음 요구를 대기한다.
BKST(403)은 2 가지 타입의 조건에 대하여 백스텝을 처리한다. 그 첫번째 타입은 비지연 실행 트랩이다. 이 비지연 실행 트랩는 지연된 트랩 신호가 PLSM(307)에 의해 어서트(ISA_DEFERRED_TRAP=0)되지 않고 백스텝 개시 제어 신호가 지연 트랩이 아닌 실행 트랩을 나타내도록 어서트(BACKSTEP_LAUNCH=1)될 경우에 기동된다. 이 경우에 있어, 백스텝 양은 다음 발행된 일련 번호(NISN)와 BACKSTEP_TO_SN에 대해 백스텝되는 일련 번호 사이의 차이를 결정함으로써 BKST(403)에서 계산된다. 발행된 명령 일련 번호(ISN)가 아닌 다음 발행된 일련 번호(NISN)를 이용함으로써 결함 명령 바로 전의 명령으로 머신을 백업한다. 이 백스텝 양은 CPU(51)내의 메모리 기억 영역에 세이브되며, 결함 명령 전의 명령이 도래할때까지 감소된다.
두번째 백스텝 조건은 지연된 실행 트랩과 관련이 있다. 이 지연 실행 트랩은 지연 트랩 신호가 PLSM(307)에 의해 어서트(ISA_DEFERRED_TRAP=1)되고, 백스텝 개시 제어 신호가 지연 트랩인 실행 트랩을 나타내도록 어서트(BACKSTEP_LAUNCH=1)될 경우에 기동된다. 이 경우에 있어, 백스텝 양은 발행된 일련 번호(ISN)와 BACKSTEP_TO_SN에 대해 백스텝되는 일련 번호 사이의 차이를 결정함으로써 BKST(403)에서 계산한다. 여기서, 상기 머신는 결함 명령 전의 명령이 아닌 결함 명령으로 백스텝된다. 이와 같이, 계산된 백스텝 양은 정상적인 비지연 경우보다 적을 것이다.
예시적인 CPU(51)에서 최대 4 개의 명령들이 각 머신 사이클에서 백스텝될 수 있다. 따라서, 각 최대 4개의 명령인 복수개의 백스텝 사이클들이 목적지 (백스텝되는 곳)명령에 도달하도록 실행된다. 일반적으로, 단일 사이클에 대하여 백스텝된 명령의 수를 제한할 필요가 없다. 예시적인 실시예의 추가적인 제한은 ISN(또는 NISN)로부터의 PC를 백스텝 양만큼 감소하는 것이 반드시 적절한 상태 복구를 달성하는 것은 아니기 때문에, 백스텝 방법은 프로그램 카운터 불연속성을 초래하는 명령에 대한 백스텝을 지원하지 않는다는 것이다.
2 가지의 상태 즉, "IDLE" 및 "BACKSTEP"으로 이루어진 단순한 머신 상태가 백스텝을 시퀀스하는데 이용된다. 먼저, IDLE 상태 동안, "BACKSTEP_LAUNCH"의 어서트(assert)는 상태 BACKSTEP으로의 천이를 초래한다. 상태 BACKSTEP에서 있는 동안 DO_BACKSTEP이 어서트되고, 2 개의 종결 조건들이 평가된다. 이 2 개의 조건들 모두는 BACKSTEP의 종결과 상태 IDLE로의 리턴을 초래한다.
백스텝 동안에 CPU(51) 상태를 복구하는 것은 머신 레지스터 자원을 갱신 (update)하는, 백스텝 양만큼 프로그램 카운터(PC)를 디크리먼트하는 것을 포함한다. 전술한 바와 같이, 아키텍처 제어 레지스터를 수정할 수 있는 명령들은 머신을 동기화하거나 또는 체크포인트되며, 이에 의해 백스텝 동안에 아키텍처 제어 레지스터를 복구할 필요가 없다. 예시적인 CPU(51)에서는 백스텝 동안 다음의 머신 상태들이 갱신된다. 즉, 프로그램 카운터(PC), 다음 PC, RRF에 기억된 정보, 리네임 맵에 기억된 정보가 갱신된다. 또, 트랩 PC, 트랩 NPC, BRB(59)내의 특권 레지스터를 포함하는 다른 제어 레지스터는 백스텝에 의해 수정되거나 또는 갱신되지 않는다. 머신 자원은 레지스터 리클레임 포멧 파일(RRF)(302)내에 기억된 논리적-대-이전의 물리적 맵핑(logical-to-old-physical-mapping)과 함께 레지스터 파일로부터 리클레임된다. 백스텝 식별 신호가 어서트되면(DO_BACKSTEP), 그 신호는 백스텝 모드가 개시되고 있음을 ICRU(301), RRF(302), 및 다른 CPU(51) 유닛에게 알린다. 백스텝에 있어서, 각각의 백스텝 사이클 동안 리클레임되거나 복구되는 RRF(302) 아이템의 수는 백스텝 카운트 신호(DO_BACKSTEP 신호와 함께)에 의해 표시되는 것과 같이 백스텁된 명령 수와 동일하다.
그러므로, 이들 상태를 기억하고 유지하고 복구하는 기능을 갖는 CPU(51)유닛뿐만 아니라, 백스텝 동작을 순서결정하는 기능을 갖는 CPU(51)유닛[특히 PSU(300)내의 유닛]은 BRB(59),ISB(61), DFB(62)내의 유닛을 포함하는 백스텝 제어신호들을 수신하고 그 신호들에 응답한다. RRF(302)는 이 RRF가 CPU(51)를 백스텝하고 백업이 아닌 단계별로 상태들을 복구하는 것에만 직접 관련되기 때문에, DO_BACKSTEP 신호는 수신하고 DO_BACKUP 신호는 수신하지 않는다.
백스텝 어서트 신호(DO_BACKSTEP)에 응답하고 레지스터 리클레임 포멧 유닛 (302)은, 리클레임되어 복구된 RRF 항목의 수는 DO_BACKSTEP 신호내의 백스텝 카운터와 동일하다. 이 RRF는 논리적 레지스터-이전의 물리적 레지스터 맵, 즉 소스 도는 목적지 데이터 값을 유지하는 논리적 레지스터-물리적 레지스터의 할당을 포함한다.
RRF(302)의 명령에 대하여 할당된 레지스터 자원들 또는 레지스터 맵의 어느 것도 CSN 또는 RRP의 진행에 의해 프리리스트(700)로 자유롭게 복귀되지 않으므로, 레지스터내의 실제 데이터는 방해되지 않는다. RRF는 각각의 백스텝된 명령이 최초로 실행되었을때와 동일한 관계로, 물리적 레지스터(이전의 물리적 레지스터)를 논리적 레지스터에 재결합하게 한다. 단계별로 레지스터 맵핑을 복구함에 따라, 각 명령에 대한 레지스터 상태가 복구된다. 레지스터 자신의 입장에서 보면 사실상, 머신는 백스텝 동안 역방향으로 진행한다. 도 18은 RRF의 블록도를 나타내고 있다. 도 41은 논리적-물리적 맵핑이 레지스터 리네임 파일 FXFRN, CCFRN, FCCRFN, FPFRN에서 복구되는 방식을 나타내고 있다.
이러한 RRF에 대한 일실시예에 있어서, 수개의 신호들(LOG_OPHYS_TAGS)을 포함하는 논리적-이전의 물리적 레지스터 정보는 판독/기록 제어 유닛(365)에서 함께 묶여지며, 데이터 기억 구조 또는 장치(366)에 저장된다. RRF가 레지스터 리네임맵내에서 복구를 위해 판독되면, RRF 데이터는 해체되어 원래의 포맷으로 복구된다. 이 기술 분야에서 통상의 지식을 가진자라면 다양한 기억 포맷 및 묶음/해체 루틴들이 기억 영역을 최소화하도록 RRF 데이터에 변형하여 적용될 수 있음을 이해할 것이다.
구체적으로 언급하면, 백스텝이 발생할 경우에, 판독/기록 로직(365)은 기억 유닛(366)를 제어하여, DO_BACKST 신호에 의해 식별된 명령에 대응하는 논리적-이전의 물리적 레지스터 태그 맵핑을 LOG_OPHYS_TAGS_BKST 신호의 형태로 출력시킨다. 이 논리적-이전의 물리적 레지스터 태그 맵핑은 도 8, 16, 18, 39에 도시된 바와 같이 FXRFRN(604), FPRFRN(606), CCRFRN(610)에 복구된다. 도 16을 참조하면, 제어 로직(613)은 DO_BACKST 신호에 응답하여 리네임 맵 로직(615)에 이들 맵핑을 복구한다.
보다 정교한 백스텝 방식이 추가적인 정보를 유지함으로써 구현될 수 있다. 그러나, 본 발명의 백스텝핑 방법은 프로그램 카운터 값들이 기본 블록내의 명령에 대응하기 때문에, 즉 백스텝될 수 있는 명령들 사이에 프로그램 카운터의 불연속이 없기 때문에 단순화된다. 백스텝 유닛(403)은 체크포인트된 명령 일련번호로부터 또는 백업 없이 백스텝이 이용될 경우에는 현재의 ISN으로부터 제공된 복수개의 신호들을 단순히 가동시켜 결함 명령에 도달하게 한다. 프로그램 불연속이 나타날 경우에는, 프로그램 카운터를 단순히 디크리먼트하는 것에 의해 반드시 적합한 복구를 이룩하지는 못한다. 하지만, 이 기술분야에서 통상의 지식을 가진 자면, 여기에서 설명된 내용에 비추어, 프로그램 카운터 불연속이 허용 가능한 보다 정교한 백스텝 기술을 이용하여 복구를 실현할 수 있다는 것을 알 것이다.
두개의 백트랙 기구, 즉 머신 백업 및 머신 백스텝은 투기적 명령 시퀀스를 원상태로 회복하기 위한 효율적인 방법 및 구조인 정확한 상태 유닛(Precise State Unit)를 제공한다. 머신 백업은 정확한 상태 유닛을 통해 CPU(51)를 활성 체크포인트 경계에 대응하는 상태로 되게 한다. 또, 머신 백스텝은 정밀한 상태 유닛을 통해 CPU(51)를 체크포인트 경계 사이에 있는 특정 명령 경계로 백트래킹하게 한다. 백업은 정교하지는 않지만 고속인 머신 상태 복구 방법 및 구조를 제공하며, 백스텝은 정교하지만 저속인 머신 상태 복구 방법 및 구조를 제공한다. 도 41은 임의의 명령 경계에서 정확한 상태를 복구하고 유지하기 위한 본 발명의 방법을 예시하는 흐름도이다. 도 42는 논리적-물리적 레지스터 맵핑을 레지스터 리네임 파일내에서 복구하는 방법을 나타내고 있다.
도 43은 두개의 머신 백스텝을 수반하는 머신 백업의 일예를 도시한 것이다. 백스텝은 한번에 수개의 명령들을 복귀시키는, 단일 스텝 또는 다중 스텝으로 실행할 수 있다. 이 예에서 CPU(51)는 명령 결함이 검출된 때에 포인터 ISN에 대응하는 명령을 이미 발행하고 있다. 이 머신은 결함 명령후의 가장 근접한 체크포인트으로 그 머신을 백업함으로써 반응한다. 이 가장 근접한 체크포인트와 ISN 사이의 명령은 제거된다. 4개의 명령만큼의 제1 백스텝은 상기 명령들의 발행 동안 4개의 명령 (제1 백스텝 참조)들에 전용된 모든 자원들을 리클레임함으로써, 상기 머신를 결함 명령에 보다 근접하게 한다. 그 다음에 3개의 명령만큼의 제2 백스텝(최종 백스텝)은 마너지 명령들(제2 백스텝 영역 참조)에 전용된 모든 자원을 리클레임함으로써머신을 결함 명령 직전으로 가지고 있다.
체크포인트로 백업하는 것은 빠르지만, 체크포인트된 상태를 기억하기 위해서는 많은 머신 자원을 필요로 한다. 모든 예측된 명령들은 체크포인트가 형성되도록 하기 때문에, 상태는 한 스텝에서 예측 오류 명령에 대하여 복구될 수 있다. 백스텝은 백업 보다 저속이지만, 본 발명의 백스텝 절차는 결함 명령 이전의 체크포인트보다는, 머신 상태가 특정 명령의 실행지점에 있는 상태로 복구되게 한다. 본 발명의 백스텝 구조 및 방법 때문에, 머신 상태는 종래의 방법 처럼 체크포인트 이전의 체크포인트보다는, 결함 명령 후에 체크포인트로 복구되고, 이후 결함 명령으로 백스텝될 수 있다.
D. 예외 및 예측 오류 회복 동안의 우선 순위 로직 및 상태 머신 동작
도 44는, CPU(51)내에 기능적으로 위치된 전형적인 우선순위 로직 및 상태 머신(PLSM)(307)을 나타내고 있다. 이 PLSM(307)은 다수개의 기능을 갖는다. 그 첫째로서, 미결 또는 동시에 발생하는 예외의 그룹내에 있는 최초의 예외를 식별한다. 이 예외의 조건은 RED 모드, 발행트랩(itrap), 실행 트랩(etrap), 인터럽트, 예측 오류(mispredict)을 포함한다. 두번째로, 머신 사이클 동안 도착하는 예외 및 예측 오류를 상호간에서, 현재 처리되고 있는 예외중에서, 및 처리되도록 대기하고 있는 예외중에서 우선순위를 정한다. 세번째로, 서로 다른 타입의 예외와 예측 오류 사이의 가능한 상태 천이를 결정한다. 네번째로, 백트랙킹(백업 및/또는 백스텝), RED 모드 처리를 개시시키는 제어 신호를 발행한다.
명령 발행 또는 실행중에 발생할 수 있는 다양한 예외 타입들이 이하에서 설명될 것이며, PLSM(307)에 의한 예외 및 예측 오류의 우선 순위 결정 및 처리에 관하여 보다 잘 이해될 것이다. RED 트랩은 다양한 조건에서 발생할 수 있으며, 모든 트랩에 대하여 가장 높은 우선 순위를 갖는 비동기 트랩이다. RED 모드는 SPARC V-9 아키텍처 매뉴얼에 설명되어 있다. itrap은 명령 발행시에 ISU(200)에 의해 발생된 발행 트랩이다. 이것은 임의의 레지스터 스필/필 (spill/fill)트랩, 임의의 트랩 명령(TA,Tcc), 명령 액세스 에러, 불법 명령, 특권 연산 코드 등을 포함한다. 일반적으로, 발행 트랩은 낮은 처리 우선 순위를 갖는 인터럽트에 비해서만 높은 우선 순위를 갖는다. 신호를 받는 모든 다른 트랩(예측 오류, 실행트랩, 레드 트랩)들은 발행 트랩보다 일시적으로 빠른 명령이 될 것이다.
etrap은 데이터 전송 버스중 하나로부터 신호를 받는 실행 트랩이다. 실행 트랩은 SN 순서에 기초하여 다른 실행 트랩에 대하여 우선 순위가 되어야만 한다. 그 이유는 상기 실행 트랩은 항상 체크포인트 경계에서 발생하지는 않으며, 결함 명령에 도달하기 위해 백스텝이 요구될 수 있기 때문이다. 만일 머신가 명령에 도달하기 위해 백업을 수행한다면, 임의의 새로운 예외가 초기 명령에 대해 발생될 수 있다. 만일 실행 트랩이 현재 순서결정되고 있다면, 임의의 새로운 예측 오류가 가장 높은 우선 순위가 될 것이다. 그 이유는 예측 오류 명령은 그들에게 이용가능한 체크포인트를 항상 갖고 있기 때문이다. 만일 PSU(300)가 이미 어떠한 예외도 순서결정하지 않는다면, 실행 트랩 및 예측 오류는 서로에 대하여 우선 순위가 정해져야 한다. 다른 타입의 비동기 트랩으로 인터럽트가 있다. 이 인터럽트는 다른 모든 예외 보다 낮은 우선 순위를 갖는다.
투기적으로 발행된 제어 전송 명령이 잘못 예측되었음을 워치포인트가 검출하면 워치포인트 유닛(304)은 예측 오류에 신호를 보낸다. 만일 임의의 non-RED 예외가 시퀀스된다면, 예측 오류는 우선 순위 결정될 필요가 없다. 그 이유는 예측오류들이 항상 체크포인트 경계에 있으며, 일시적으로 초기 명령에 대해 발생할 수 있기 때문이다. 만일 예외가 시퀀스되지 않으면, 예측 오류는 인터럽트 및 발행 트랩 보다 높은 우선 순위를 갖지만, 실행 트랩에 대하여 우선 순위 결정이 되어야만 한다.
최초의 일련 번호 선택 로직 장치(ESNSL)(481)는 실행 완료한 명령의 일련번호 및 실행중에 예외가 발생하였는지 여부를 나타내는 정보와 예외 타입 정보를 포함한 상태정보를 DFB(62)의 각 실행 유닛으로부터 수신하고, 그 사이클에서 발생한 임의의 예측 오류를 나타내는 신호(WP_MISPREDICT)를 워치포인트 유닛(304)으로부터 수신하며, 현재의 ISN을 수신하고, 최종 머신 사이클(CURR_EARLIEST_SN)로부터 새로운 예외 정보를 수신하기 전에 현행의 머신 사이클에서 처리되고 있는 예외의 SN으 나타내는 피드백 신호를 ESNSL(481)로부터 수신한다. 이때, 상기 각 실행 유닛으로부터 수신하는 신호중에는 ERR_STAT를 포함한다. 예를 들어, 만일 64 위치 A-링(312)에서 명령 SN=10 및 SN=56에 대한 예외가 발생한다면, ISN의 값을 또한 알지 않고서는 최초의 예외가 결정될 수 없다. 만일 ISN=40 이면, SN=56은 최초의 예외가 된다. 하지만, 만일 ISN=6이면, SN=10이 최초의 예외가 된다.
ESNSLU(481)은 최초의 예외 또는 예측 오류를 우선 순위 및 실행 스위칭 로직(PESL) 유닛(482)에 알림으로써, PESL은 최초의 SN 기준 및 예외 형태에 기초하여 처리하는 예외 및 예측 오류를 우선 순위로 결정할 수 있다. 또, PESL은 ISU(200)로부터 발행 트랩 신호(ISU_ITRAP) 및 인터럽트 신호(ISU_INTERRUPT_PEND)를 수신하고, 백트래킹이 체크포인트 정보의 비교에 기초하여 실행 트랩 보다 일직 예측 오류가 발생하였다고 결정할 수 있다면 백트래킹 장치(305)로부터 신호 (MISPREDICTED_EARLIER)를 수신한다. 또, PESL은 상태 머신 및 제어 로직 (SMCL)(483)으로부터 상태 신호를 수신하는데, SMCL(483)은 상태 머신(484) 및 예외 제어 신호 발생 로직(484)를 포함하고, 만일 있다면 처리되고 있는 현재의 예외 타입(CURR_EXCEPTION_TYPE)을 식별한다(예컨대 etrap, itrap, RED 등), 예외 상태는 상태 머신(484)에 기억된다. PESL(482)은 이 입력들을 이용하여 현재 및 미결 예외를 우선 순위 결정하고, 현행의 머신 사이클에 대한 새로운 예외 타입을 식별하는 신호(NEW_EXCEPTION_TYPE)를 발생한다.
예외 제어 신호 발생 로직(ECSIG)(484)는 CPU의 상태를 CPU(51)내에 있는 다른 유닛들에게 알려주는 복수개의 신호를 발생하는 역할을 하며, 어떤 경우에는 다른 CPU 유닛들에게 그 상태에 응답하여 다른 동작을 취하도록 지시하는 역할을 한다. 구체적으로 말하면, ECSIG는 트랩이 취해야 하는 제어부 및 트랩의 종류를 포함하는 트랩 스택 유닛에 TAKE_TRAP 신호를 발생하여 전송한다. ECSIG는 지연 트랩이 발생하였는지의 여부를 나타내는 DEFERRED_TRAP_INC를 ICRU(301)에 전송하여 CSN 및 NMCSN이 예외를 넘어서 진행하도록 1만큼 진행하도록 한다. 또, ECSIG는 백트래킹 유닛(305)에 복수개의 신호들을 전송하는데, 이 신호들은 어떤 명령 SN이 BACKSTEP_TO_SN으로서 백스택하는지, RED 모드 예외가 존재하는지 및 RED 모드 예외의 경우에 명령이 BACKUP_RED로 백업하는지를 백트랙(305)에 알리는 신호를 포함한다. 또, ECSIG(484)는 명령 삭제 신호 KILL_ALL를 DFB(62)와 ISU(200)(ISSUE_KILL)에 발생하여, DFB가 실행 대기 행렬에 있어서의 명령의 실행을 삭제하도록 지시하며, ISU에게는 머신 사이클 동안에 처리되는 예외 및 예측 오류에 적당한 명령의 발행을 정지하도록 지시한다.
PLSM(307)은 트랩을 탐지하고 분류하여 5가지 다른 종류, 즉, 인터럽트, 레드 트랩, 발행 트랩, 실행 트랩, 예측 오류로 분류한다. 어떤 예외가 시퀀스 되고 있는지에 따라서, 검출된 다른 예외들은 보다 높은 우선 순위를 가질 수도 있고 갖지 않을 수도 있다. 만일, 새로운 예외가 더 높은 우선 순위를 가지면, PESL(482)는 현행의 예외를 시퀀스하는 것으로부터 새로운 더 높은 우선 순위 예외 또는 예측 오류로 스위치하도록 SMCL(483)에게 알린다. 상태 머신(484)에서의 이러한 잠재적 상태 천이는 현행의 예외 타입과, 새로운 에러가 워치포인트, ISU 또는 6개의 데이터 전송 전송 버스중의 어느 것으로부터 보고되었는지의 여부, 및 새로운 예외가 현행의 예외 보다 일시적으로 더 빠른 지 여부에 따라서 행하여진다.
가능한 상태 천이는 다음과 같이 발생할 수 있다. RED―상태 RED로부터의 천이를 강제하는 트랩 타입이 없다. ITRAP―3가지 트랩 타입[예측 오류, 실행 트랩, 레드 경보(red alerts)]은 다른 상태로의 천이를 강제할 수 있지만, 인터럽트는 천이를 강제하지 않는다. ETRAP―레드 경보 및 예측 오류는 천이를 강제하고, 항상 높은 우선 순위를 가지며, 다른 실행 트랩은 우선 순위 선정을 요구하고 인터럽트는 낮은 우선 순위를 갖지만, 반면에 발행 트랩을 야기할 수 있는 명령이 발행되지않도록 머신이 백업 또는 머신 동기를 대기중이므로 발행 트랩은 불가능한다. INTERRUPT―모든 트랩 타입은 높은 우선 순위를 가지며, 천이를 강제할 수 있다. MISPREDICT―3가지 트랩 타입(예측 오류, 실행 트랩, 레드 경보)은 높은 우선 순위를 갖지만, 우선 순위 선정을 필요로 하지 않으며, 인터럽트는 낮은 우선 순위를 가지는 반면에, 예측 오류를 처리하는 동안 명령 발행이 제거되기 때문에 발행 트랩은 발생하지 않는다. IDLE―레드 트랩은 가장 높은 우선 순위를 가지며, 4 가지의 트랩 타입 중 임의의 하나에 수반되고, 동시에 발생하는 예측 오류 및 실행 트랩은 BACKUP으로 천이되어, 체크포인트의 비교에 의해 예측 오류 또는 실행 트랩이 이전에 발생하였는지에 대한 결정이 얻어진다. 백트래킹은 우선 순위보다 더 빠르게 결정 할 수 있으므로 우선 순위 결정에 근거한 체크포인트를 연기하는 것이 바람직하지만, 우선 순위 선정은 PLSM에서 수행될 수 있다. 마지막으로, 발행 트랩 및 그 다음으로 인터럽트가 시퀀스될 것이다.)
E. 트랩 스택을 갖는 트랩의 처리
전술한 바와 같이, 트랩은 도 5의 명령 파이프라인내에서 종종 발생하며, 트랩 처리 루틴에 의해 처리(즉, 취득)되어야 한다. 도 17을 참조하면, 트랩이 취해지는 것에 대하여 앞에서 설명한 방식으로 PSU(300)가 예외를 검출할 때, PLSM(307)은 제어 레지스터 파일(800)이 트랩을 취하고 이 취해진 트랩의 타입을 식별하도록 명령하는 TAKE_TRAP 신호를 발생한다. 이에 반응하여, RD/WR/UPDATE 로직(816)은 TBA 레지스터(812)로부터 대응하는 트랩 벡터(TRAP_VEC)신호를 판독하여 BRB(59)에 보낸다. 도 6을 참조하면, PC 로직(106)은 상기 TRAP_VEC 신호를 이용하여 새로운 FPC, APC, NAPC를 계산하고, 이에 대응하는 트랩 처리 루틴의 명령을 발출 및 발행한다.
이 트랩 처리 루틴에서 발생한 트랩들은 SPARC_V9 아키텍처에 의해 정의된 바와 같이, 내포(nest) 형태(즉, 취해진 트랩내에서 다시 취해진 트랩)로 처리되도록, 제어 레지스터 파일(800)은 도17에 도시된 바와 같이 트랩 스택 유닛(815)을 포함한다. 이 트랩 스택 유닛(815)은 도 45에 보다 상세히 도시하였다. 이것은 기억 소자 및 엔트리를 가지는 데이터 기억 구조인 트랩 스택(820)을 포함한다.
각각의 기억 엔트리는 트랩 타입(TT), 트랩 상태(TATATE), 트랩 다음 프로그램 카운터(TNPC), 트랩 프로그램 카운터(TPC) 필드로서 SPARC-V9 아키텍쳐 매뉴얼에 의해 지정된 4개의 필드를 갖는다. 그중 TPC 및 TNPC 필드는 트랩이 취해진 시점에서 BRB(59)의 APC 및 NAPC 레지스터(113,114)에서의 APC 및 NAPC 값을 포함한다. SPARC-V9 아키텍쳐 매뉴얼에서 설명한 바와 같이, TSTATE 필드는, 트랩이 취해진 시점에서, 도 39에 나타낸 CCRFRN(610)내에 있는 XICC 레지스터의 콘텐츠와 도 17에 도시된 ASI, CWP, PSTATE 레지스터(808,809,805)의 콘텐츠를 포함한다. TT 필드는 취해진 트랩의 타입을 식별한다.
다시, 도 45를 참조하면, 일반적으로 트랩이 취해질때, 현행의 PC, NPC, TSTATE, TT의 값들은 트랩 스택(820)의 기억 엔트리 중 하나의 대응하는 필드내에 기억된다. 그 다음에 이와 같이 취해진 내포 트랩(nested trap)수를 나타내는 트랩 레벨(TL)은 증가되고, 트랩 처리 루틴은 취해진 트랩을 처리하기 시작한다. 그러나, 이 트랩 처리 루틴 동안에 트랩이 발생하면, 이 제2의 트랩 시점에서의 PC,NPC, TSTATE, TT 값들은 트랩 스택(820)의 기억 엔트리 중 다른 하나의 대응하는 필드내에 기억된다. 그 다음에, 제2의 트랩 처리 루틴이 제2 트랩을 처리할 때에 호출된다. 제2 트랩 처리 루틴의 종결지점에 있어서, DONE 또는 RETRY 명령이 실행되면 제2트랩용의 기억 엔트리에 기억된 PC, NPC, TSTATE 값들이 대응하는 레지스터에 기록되게 하고 트랩 레벨이 감소되게 한다. 결국, CPU(51)는 제2 트랩이 취해졌을 때의 상태로 복귀하고, 제1 트랩 처리 루틴은 제1 트랩을 처리하기 시작한다. 이 제1 트랩 처리 루틴의 DONE 또는 RETRY 명령이 실행되면, CPU(51)은 제1 트랩이 취해졌을 때의 원래의 상태로 복귀한다.
SPARC-V9 아키텍처에 의해 요구된 것처럼, 트랩 스택 유닛(815)은 복수개의 내포 트랩의 처리를 지지하기 위해 복수개의 트랩 레벨을 포함한다는 것이 전술한 내용으로부터 명백하다. 하지만, SPARC-V9 아키텍처가 4 개의 트랩 레벨을 지지하기 위하여 4개의 기억 엔트리를 갖는 트랩 스택을 지정할 뿐이지만, 트랩 스택 (820)은 4개의 요구된 트랩 레벨을 지원하기 위하여 8개의 기억 엔트리 0-7를 포함한다. 이 추가된 4 개의 기억 엔트리들이 이용됨으로써, 레지스터 또는 기억 소자 리네임의 컨셉(concept)은 트랩들이 투기적으로 취해지거나 복귀될 수 있도록 나중에 설명하는 바와 같이 트랩 스택 유닛(815)까지 신장될 수 있다. 더욱이, 전술했던 봐와 같이, 본 발명은 기억 엔트리의 수가 트랩 레벨의 수 보다 클 경우에 한하여, 임의의 트랩 레벨 수와 함께 작용할 수 있다.
트랩 스택 유닛(815)는 트랩들과 관련된 TPC, TNPC, TSTATE, TT 값을 기억하기 위하여 현재 이용가능한 트랩 스택(820)의 모든 기억 엔트리의 리스트를 기억하기 위한 프리리스트 로직(821)을 포함한다. 도 46을 참조하면, 프리리스트 레지스터(822)는 각 머신 사이클 동안에 현행의 이용가능한 기억 엔트리의 리스트를 8 비트의 프리리스트 벡터 신호의 형태로 기억한다. 프리리스트 신호의 각 비트는 트랩 스택(820)의 기억 엔트리중 하나에 대응하며, 이 기억 엔트리가 현재 이용가능한지의 여부를 식별한다. 프리리스트 벡터에 의해 이용가능하다고 확인된 제1 기억 엔트리에 있어서, 제1 엔코더(823)는 이 기억 엔트리를 식별하고, 취해지는 다음에 트랩용으로 TPC, TNPC, TSTATE, TT 값을 기록하기 위한 포인터로서의 역할을 하는 WR_ENTRY 신호로 벡터를 엔코드한다.
또, 프리리스트 로직(821)은 모든-제로-검출기(836)를 포함한다. 프리리스트 로직(821)은 FREELIST 신호가 모든 제로 비트를 포함하고 그에 따라 이용가능한 트랩 스택(820)에서의 기억 엔트리가 없음을 나타내는 때를 결정한다. 이 결정이 발생한 후에, NO_ENTRY_AVAIL 신호를 어서트한다.
도 45를 참조하면, PSU(300)가 트랩이 취해져야 한다고 결정하지만 NO_ENTRY_AVAIL 신호가 이용가능한 기억 소자가 없다고 나나낼 때에, PSU가 발생하는 TAKE_TRAP 신호는 NO_ENTRY_AVAIL 신호가 이용가능한 기억 소자가 있다고 나타낼때까지 트랩을 취하도록 표시하지 않을 것이다. 더욱이, PSU(300)은 NO_ENTRY_AVAIL 신호가 기억 엔트리가 이용가능하다고 나타낼 때까지 ISU(200)에 의해 임의의 명령을 발행하는 것과 BRB(59)에 의해 명령을 인출하는 것을 중지하도록 ISSUE_KILL 및 FETCH_SHUTDOWN 신호를 어서트한다. 이것은 CPU(51)를 동기화하는 효과를 가져서, 이후 명백히 되는 바오 같이, 체크포인트들은 후퇴하게 되며,트랩 스택(820)내의 기억 엔트리들은 재이용되거나 이용가능하게 될 것이다.
그러나, NO_ENTRY_AVAIL 신호가 어서트되지 않으면, PSU(300)은 제어 레지스터 파일(800)에, 트랩이 취해지는 지를 나타내는 신호와 원래의 트랩의 타입을 식별하는 신호를 포함하는 TAKE_TRAP 신호를 출력한다. 이것에 응답하여 제어 레지스터 판독/기록 및 갱신(RD/WR/UPDATE) 로직(816)은 ASI, CWP, PSTATE 레지스터 (808,809,805)의 콘텐츠를 판독하고, 이를 트랩 스택 유닛(815)의 트랩 스택(820)에 제공한다.
이와 동시에 트랩 스택(820)은 이 트랩 스택(820)의 TPC 및 TNPC 필드에 기록되는 현재의 APC 및 NAPC값을 포함하는 WR_TPC_TNPC 신호를 수신한다. 나중에 설명하는 바와 같이 트랩 스택(820)은 도 8에 도시된 FSR/CCRFRN(610)내의 XICC 레지스터의 XICC 데이터를 이들이 이용가능하게 될 때 수신한다.
TAKE_TRAP 신호에 응답하여, 트랩 스택 판독/기록 제어(RD/WR)로직(822)은 TAKE_TRAP 신호에 포함된 트랩 타입(TT) 필드를 추출하며, 이를 트랩 스택(820)에 제공한다. 그 다음에, RD/WD 로직(822)은 수신된 APC, NAPC, ASI, CWP, PSTATE, TT값을 WR_ENTRY 신호에 의해 지정된 기억 소자의 적합한 필드에 즉시 기록한다. 더우기, 이하에 자세히 설명하겠지만, XICC 데이터는 로직 XICC 레지스터의 콘텐츠가 이용가능할때에 WR_ENTRY_XICC 신호에 응답하여 동일한 기억 소자의 TSTATE 필드에 기록된다.
도 17을 참조하면, 제어 레지스터 RD/WR/UPDATE 로직(816)은 TL 레지스터 (811)로부터 이전의 TL 값을 수신하고 이를 인크리먼트한 후, TL 레지스터(811)에새로운 TL 값을 기록한다.
도 45에 나타낸 바와 같이, 트랩 스택 리네임 맵(RENAME MAP) 로직(824)은 새로운 TL값과, TAKE_TRAP 및 WR_ENTRY 신호를 수신한다. 도 47을 참조하면, RENAME MAP 로직(824)는 4 개의 트랩 레벨 중 하나에 각각 대응하고 있는 TL1-4(트랩 레벨 1-4)기록 멀티플렉서(826-829)와 함께 TL1-4 레지스터(830-833)를 포함한다. 상기 새로운 TL 값과 TAKE_TRAP 신호에 응답하여, RENAME MAP 로직(824)의 제어 회로(825)는 WR_MUX_CNTRL 신호로 TL1-4 기록 멀티플렉서(826-829)를 제어함으로써, WR_ENTRY 신호가 새로운 TL 값에 의해 식별된 트랩 레벨에 대응하는 레지스터내에 기억되게 하고, 또 다른 레지스터들이 이전의 머신 사이클에서 기억된 값과 동일한 값을 재기억하게 한다.
따라서, 레지스터 중 하나에 기억된 WR_ENTRY 신호에 의해 식별된 기억 엔트리는 RENAME MAP 로직(824)내의 새로운 TL 값에 의해 식별된 현재의 트랩 레벨로 맵핑된다. 게다가, 다른 레지스터에 기억된 신호에 의해 식별된 기억 엔트리들은 이전에 머신 사이클에서 있었던 것과 동일한 방식으로 맵핑된 것을 유지한다.
도 46를 다시 참조하면, 프리리스트(812)의 제1(FIRST-ONE) 엔코더(823)는 TAKE_TRAP 신호를 또한 수신한다. TAKE_TRAP 신호가 트랩 취득을 표시할때, 제1 엔코더(823)는 "0"으로 세트된 WR_ENTRY 신호에 대응하는 비트를 갖는 8비트 신호를 OR 회로(835)에 재송신한다. OR 회로(835)는 또한 RRF 로직(837)(도 45에 도시됨)으로부터 8비트 FREE_ENTRY 신호를 수신하는데, 이들 비트는 최종 머신 사이클에서 이용되었고 현재 사용가능한 트랩 스택(820)의 기억 엔트리의 비트를 식별한다. 백업이 수행되는 동안, OR 회로(835)는 AND 회로(838)로부터 8비트 BACKUP_FREELIST 신호를 수신하는데 그 비트들은 백업된 체크포인트가 형성된 시점에서, 이용가능한 기억 엔트리를 식별한다. 제1 엔코더(823)로부터 수신된 신호의 비트들은 논리적으로 FREE_ENTRY 및 BACKUP_FREELIST 신호의 대응하는 비트들과 논리적으로 OR 되고, 결과적인 FREELIST 신호는 레지스터(822)에 제공된다. 따라서, 백업을 금지하고, 다음 머신 사이클에서의 FREELIST 신호는 "0"으로 세트된 WR_ENTRY 신호의 비트에 대응하는 기억 엘리먼트가 더 이상 이용가능하지 않음을 나타낸다.
도 7를 다시 참조하면, PSU(300)는, TAKE_TRAP 신호를 발생시키는 것과 동일한 시간에, 또한 CHKPT_REQ 신호를 이용하여 ISU(200)가 트랩 처리 루틴의 첫번째 발행된 명령을 위한 체크포인트를 할당하도록 요구한다. 이것에 응답하여, ISU(200)는 제어 레지스터 파일(800)을 포함하는, CPU(51)내의 각종 블록 및 유닛에게 DO_CHKPT 신호를 출력한다.
도 47을 참조하면, RENAME_MAP_1-4 신호는 TL1-4 레지스터(830-833)에 의해 출력되고, 그 결과 트랩 레벨 1-4에 각각 대응한다. 게다가, 이들 신호는 TL1-4 레지스터(830-833)에 의해 출력되기 때문에, 트랩 레벨 1-4에 기억 엔트리의 현행의 맵핑이 제공된다.
그러나 전술한 바와 같이, 트랩이 취득되면, RENAME MAP 로직(824)은 새로운 이용가능한 기억 엔트리를 새로운 트랩 레벨(TL)로 맵핑한다. 하지만, 이러한 트랩 레벨로의 다른 기억 엔트리의 이전 맵핑은 앞서 기술한 것처럼 백업이 발생하는 경우 반드시 추적될 수 있어야 한다. 따라서, 도 48을 참조하면, RRF 로직(837)은 이전 맵핑이 더 이상 필요하지 않을 때까지, RENAME MAP 로직(824)으로부터 수신된 RENAME_MAP_1-4 신호로부터 이러한 이전 맵핑을 보호한다.
트랩이 취득될 때, 멀티플렉서(843)는 새로운 트랩에 대한 TL(즉, 1만큼 인크리먼트된 이전 TL)에 대응하는 RENAME_MAP 신호를 출력한다. 다시 말하면, 멀티플렉서는 다음 머신 사이클에서 새로운 맵핑을 반영할 RENAME_MAP 신호만을 선택한다. 이 신호는 디코더(842)에 의해서, 어느 기억 엔트리가 새로운 맵핑에 의해 새로운 트랩 레벨로 대체되는지를 나타내는 8비트 신호로 디코드된다. TAKE_TRAP 신호가 트랩이 취득되었음을 나타내기 때문에, 디코드된 신호는 AND 회로(841)을 통해 RRF 로직(837)의 RRF 기억 유닛(839)에 제공된다. 그러나, 트랩이 취득되지 않으면, AND 회로(842)는 RRF 기억 유닛(839)에 모든 비트가 "0"으로 세트된 8비트 신호를 제공한다.
RRF 기억 유닛(839)은 16개의 기억 엘리먼트 또는 엔트리를 포함한다. 각 기억 엔트리는 앞서 기술된 16개의 체크포인트 번호중 하나에 대응한다. 따라서, DO_CHKPT 신호가 체크포인트가 형성될 것임을 나타낼 때, RRF 판독/기록(RD/WR) 제어 로직(840)은 AND 회로(841)로부터 수신된 데이터를 DO_CHKPT 신호에 의해 식별된 체크포인트 번호에 대응하는 기억 엔트리에 기록한다.
따라서, RRF(837)는 트랩 스택 유닛(820)의 각 기억 엔트리의 이용불가 리스트를 유지하는데, 이 기억 엔트리는 RENAME MAP 로직(824)의 현행 맵핑에 의해 트랩 레벨중 하나로 현재 맵핑되지 않지만, 체크포인트 백업의 경우에 트랩 레벨로의 이전의 맵핑이 복귀될 필요가 있기 때문에, 트랩 레벨중 하나로 맵핑는데 여전히이용가능하지 않다. 이러한 경우에, 기억 엔트리는 체크포인트가 형성되도록 했던 트랩의 트랩 레벨로 기억 엔트리가 맵핑된 시점에서 형성된 체크포인트의 철회시까지 상기 이용불가 리스트에 유지된다.
RRF RD/WR 제어 로직(840)은 또한 PSU(300)로부터 16비트 CHKPT_CLR 신호를 수신한다. 각각의 비트는 체크포인트 번호중 하나에 대응하며, 대응하는 체크포인트가 상기 설명된 방식으로 철회(또는 클리어)되었는지의 여부를 나타낸다. 이 신호에 응답하여, RRF RD/WR 로직은 RRF 기억 유닉(839)의 대응하는 기억 엔트리로부터 데이터를 판독한다. CHKPT_CLR 신호는 클리어된 다수의 체크포인트를 식별할 수 있기 때문에, 대응하는 기억 엔트리로부터 판독된 데이터의 비트는 OR 연산되고 결합되어, 도 46에 도시된 FREELIST 로직(821)에 8비트 FREE_ENTRY 신호로서 송신되는 FREE_ENTRY 신호를 형성한다.
CHKPT_CLR 신호에 의해 식별된 체크포인트가 트랩을 취득하는 시점에서 형성된 경우, FREE_ENTRY 신호에 의해 식별된 기억 엔트리는 리클레임되며, 대응하는 체크포인트가 철회되기 때문에 다시 이용가능하다. 그 결과, 이러한 트랩은 더 이상 복구될 수 없다. 따라서, 백업이 발생하지 않는다고 가정하면, FREE_ENTRY 신호 비트는 제1 엔코더(823)에 의해 제공된 신호의 대응하는 비트와 OR 연산되여 다음 머신 사이클 동안 FREELIST 신호를 공급한다.
CHKPT_CLR 신호에 의해 식별되는 체크포인트가 트랩을 취득하는 시점에서 형성되지 않은 경우, 대응하는 기억 엘리먼트로부터 판독된 데이터는 모두 "0" 비트가 되며, 따라서 FREELIST 신호의 발생과 충돌하지 않는다.
도 45에 도시된 바와 같이, 트랩 스택 유닛(815)은 또한 트랩 스택 체크포인트 기억 유닛(845)을 포함한다. 이 기억 유닛(845)은 도 48에서 더 상세히 도시된다. 이 기억 유닛은 각각의 기억 엔트리가 5개의 필드를 갖는 16개의 어드레스 가능한 기억 엘리먼트 또는 엔트리를 갖는 데이터 기억 구조(846)를 포함한다.
기억 유닛은 FREELIST 로직(821)으로부터 FREELIST 신호를 수신하고 RENAME MAP 로직(824)으로부터 RENAME_MAP 신호를 수신한다. 그때, DO_CHKPT 신호가 체크포인트가 형성될 것임을 나타내면, 트랩 스택 기억 판독/기록 제어 로직(847)은 FREELIST 및 RENAME_MAP 신호를, DO_CHKPT 신호에 의해 식별된 체크포인트 번호에 대응하는 기억 엔트리의 적절한 필드에 기록한다. 체크포인트가 형성될 때, 현행 FREELIST 및 RENAME_MAP 신호가 기억되어 있기 때문에, 트랩 레벨로의 트랩 스택 기억 엔트리의 현행 맵핑 및 이용가능한 트랩 스택 기억 엔트리의 현행 리스트는 체크포인트된다.
DO_BACKUP 신호가 체크포인트에 대한 백업이 수행되고 있다는 것을 표시할때, RD/WR 제어 로직(847)은 DO_BACKUP 신호에 의해 식별된 체크포인트 번호에 대응하는 기억 엘리먼트로부터 체크포인트된 FREELIST 및 RENAME_MAP 신호를 판독한다. FREELIST 신호는 BACKUP_FREELIST 신호로서 판독되며 RENAME_MAP 신호는 BACKUP_MAP 신호로서 판독된다.
도 46에 도시된 바와 같이, FREELIST 로직(821)은 BACKUP_FREELIST 및 DO_BACKUP 신호를 수신한다. DO_BACKUP 신호가 백업이 발생하고 있다는 것을 표시하기 때문에, AND 회로(838)는 BACKUP_FREELIST 신호를 OR 회로(835)에 제공한다.앞에서 설명한 바와 같이, 제1 엔코더(823)로부터 수신된 신호의 비트는 FREE_ENTRY 및 BACKUP_FREELIST 신호의 대응하는 비트와 논리적으로 OR 연산되어, FREELIST 신호를 생성한다.
도 47을 참조하면, RENAME_MAP 로직(824)은 BACKUP_MAP 및 DO_BACKUP 신호를 수신한다. DO_BACKUP 신호가 백업이 발생하고 있다는 것을 표시하기 때문에, 제어 회로(825)가 발생시킨 WR_MUX_CNTRL 신호는 BACKUP_MAP_1-4 신호를 각각 TL1-4 레지스터(830-833)에 제공한다. 결과적으로, 체크포인트가 형성될 때 존재하는 트랩 레벨에 대한 트랩 스택 기억 엘리먼트의 맵핑은 원상태로 복구된다.
전술한 바와 같이, CPU(51)는 투기적으로 명령을 발행하고 실행한다. 트랩 스택 유닛(815)은 백업의 경우에 이전 트랩 레벨을 복구하기 위한 메카니즘을 구비하기 때문에, CPU(51)가 투기적으로 트랩을 취득하고, 트랩으로부터 복귀할 수 있다.
투기적으로 트랩을 취득하고 트랩으로부터 복귀하는 CPU의 성능은 도 51에 도시된다. 도시된 바와 같이, 처음에 실행 시퀀스는 트랩 레벨 0에 있으며, 트랩 레벨 1-4는 각각 트랩 스택 기억 엔트리 1-4로 맵핑된다. 제1 트랩이 취득되면, 트랩 레벨은 트랩 레벨 1로 인크리먼트하고, 체크포인트 1이 형성되는 동시에 체크포인트 1에서의 기억 엔트리 맵핑에 대한 트랩 레벨이 체크포인트되며, 기억 엔트리 5에 대한 트랩 레벨 1의 새로운 맵핑이 형성된다. 새로운 체크포인트가 예측된 프로그램 제어 명령과 같은 명령에 대해 체크포인트 2에서 형성되고 체크포인트 2에서의 기억 엔트리 맵핑에 대한 트랩 레벨이 체크포인트된다. 그런 다음 제2 트랩이취득되고, 트랩 레벨이 트랩 레벨 2로 인크리먼트되면, 체크포인트 3이 형성되고, 체크포인트 3에서의 기억 엔트리 맵핑에 대한 트랩 레벨은 체크포인트되며, 기억 엔트리 6에 대한 트랩 레벨 2의 새로운 맵핑이 형성된다. 트랩 레벨 2에서, 트랩용 트랩 처리기의 복구 또는 재시도 명령이 실행될 때, 트랩 레벨은 트랩 레벨 1로 디크리먼트되고, 체크포인트 4가 형성되며, 체크포인트 4에서의 기억 엔트리 맵핑에 대한 트랩 레벨이 체크포인트된다. 트랩 레벨 1에서 트랩용 트랩 처리기로 복귀한 후, 체크포인트가 트랩 처리기의 명령을 위해 체크포인트 5에서 형성되며 체크포인트 5에서의 기억 엔트리 맵핑에 대한 트랩 레벨이 체크포인트된다. 또 하나의 트랩이 취득되면, 트랩 레벨은 트랩 레벨 2로 인크리먼트되고, 체크포인트 6이 형성되며, 체크포인트 6에서의 기억 엔트리 맵핑에 대한 트랩 레벨이 체크포인트되며, 기억 엔트리 7에 대한 트랩 레벨 2의 새로운 맵핑이 형성된다. 다른 또 하나의 트랩이 취득되면, 트랩 레벨은 트랩 레벨 3으로 인크리먼트되고, 체크포인트 7이 형성되며, 체크포인트 7에서의 기억 엔트리 맵핑에 대한 트랩 레벨은 체크포인트되고, 기억 엔트리 0에 대한 트랩 레벨 3의 새로운 맵핑이 형성된다. 트랩 레벨 3에서, 트랩용 트랩 처리기의 복구 또는 재시도 명령이 실행되면 트랩 레벨은 트랩 레벨 2로 디크리먼트되고, 체크포인트 8이 형성되며, 체크포인트 8에서의 기억 엔트리 맵핑에 대한 트랩 레벨이 체크포인트된다. 그때, 만약 체크포인트 2가 형성된 프로그램 제어 명령이 잘못 예측된 것으로 판단되면, 체크포인트 2로의 백업이 발생하며, 체크포인트 2에서의 기억 엔트리 맵핑에 대한 트랩 레벨이 복구된다. 따라서, 체크포인트 3 및 7이 형성되는 트랩은 투기적으로 취득되고 그 트랩으로부터 복귀되며,체크포인트 6이 형성된 트랩은 투기적으로 취득된다.
전술한 바와 같이, 트랩 스택의 TSTATE 필드는, 트랩이 취득될때 도 8에 도시된 FSR/CCRFRN (606)의 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠(즉 XICC 데이터)를 유지하는 XICC 필드를 포함한다. 고정소수점 명령이 FXU(601) 및 FXAGU(602)에 의해 PC 순서와 다르게 실행될 수 있기 때문에, 이들 콘텐츠는 트랩이 발생하는 시점에서 이용가능하지 않을 수 있다. 따라서, 차후에 정확한 XICC 데이터를 얻기 위한 메카니즘이 없으면, PSU(300)는 XICC 데이터가 트랩을 취득하는데 이용가능할 때까지 대기해야 한다.
그러나, 도 45를 참조하면, 트랩 스택 유닛(815)은 이러한 메카니즘, 즉 XICC 획득 로직(823)을 포함한다. XICC 획득 로직(823)은 FSR/CCRFRN(606)으로부터 CC_TAGS_C, CC_DV_C, CC_TAGS_F 및 CC_DV_F 신호를 수신하며, 트랩 스택(820)은 CC_DATA_C와 CC_DATA_F 신호를 수신한다.
도 52를 참조하면, CC_DATA_C 신호는 XICC_DATA_C 신호를 포함하고, CC_DV_C 신호는 XICC_DV_C 신호를 포함한다. XICC_DATA_C 신호는 트랩이 취득될 때의 머신 사이클에서의 XICC 논리 레지스터(즉, 도 39에 도시된 CCRFRN(610)에 의해 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터)의 현행 콘텐츠(만약 이용가능하다면)를 포함한다. XICC_DV_C 신호는 XICC_DATA_C 신호의 콘텐츠가 유효한지(즉, 논리적 XICC 레지스터로서 현재 맵핑된 물리적 레지스터의 콘텐츠가 아직 이용가능한지)의 여부를 표시한다.
트랩이 취득되는 시점에서의 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠는 그 시점에서 이미 이용가능할 수 있다. 이미 이용가능하게 되었으면, XICC_DV_C 신호는 XICC_DATA_C 신호의 콘텐츠가 유효하다는 것을 표시하며, PSU(300)으로부터 수신된 TAKE_TRAP 신호는 트랩이 취득되었음을 표시한다. 이것에 응답하여, XICC 기록 로직(825)은 WR_ENTRY 신호에 의해 식별된 엔트리에 대응하는 WR1_ENTRY_XICC 신호를 제공한다. 이 경우, 트랩 스택 유닛(815)의 RD/WR 제어 로직(822)은 XICC_DATA_C 신호의 콘텐츠를 WR1_ENTRY_XICC 신호에 의해 식별된 트랩 스택(820)의 엔트리의 TSTATE 필드의 XICC 필드에 기록한다.
그러나 XICC_DATA_C 신호의 콘센츠가 트랩이 취득되는 시점에서 유효하지 않다고 XICC_DV_C 신호가 표시하면, XICC_DATA_C 신호의 콘텐츠는 트랩 스택(820)에 기록되지 않는다. 이러한 경우에, 트랩 스택 유닛(815)은, 트랩이 취득되는 시점에서 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠가 이용가능하게 될때까지 대기해야 한다. 도 53을 참조하면, 상기와 같이 하기 위해, XICC 획득 로직 (823)은 현행 매칭 로직(826)과 나중의 매칭 어레이 로직(827)을 포함한다.
도 53을 계속 참조하면, CC_TAG_C 신호는, 트랩이 취득될때 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 물리적 레지스터 태그를 포함하는 XICC_TAG_C 신호를 포함한다. 더욱이, CC_TAG_F 신호는, 논리적 XICC 레지스터를 수정하는 고정소수점 명령을 실행할 때 FXU(601) 및 FXAGU(602)에 의해 각각 전송된 FXU_XICC_TAG_F 및 FXAGU_XICC_TAG_F 신호를 포함한다. 이러한 신호는, 이들 실행된 고정소수점 명령에 대한, 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 물리적 레지스터 태그를 포함하며, CC_DATA_F 신호의 FXU_XICC_DATA_F 신호와FXAGU_XICC_DATA_F 신호의 콘텐츠는 그 레지스터에 기록된다. FXU_XICC_DATA_F와 FXAGU_XICC_DATA_F 신호는 FXU(610) 및 FXAGU(602)에 의해 각각 전송된다.
CC_DV_F 신호는, 논리적 XICC 레지스터를 수정하는 고정 소수점 명령을 실행할 때 FXU(601)와 FXAGU(602)에 의해 각각 전송된 FXU_XICC_TAG_F 및 FXAGU_XICC_TAG_F 신호를 포함한다. 이들 신호는, 실행된 부동 소수점 명령에 대하여 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터에 기록되는 FXU_XICC_DATA_F와 FXAGU_XICC_DATA_F 신호의 콘텐츠가 유효한지(즉, 이용가능한지)의 여부를 표시한다.
전술한 바와 같이, 명령은 실제의 및/또는 예측된 프로그램 순서와 다른 순서로 실행될 수 있기 때문에, 전송된 FXU_XICC_DATA_F 및 FXAGU_XICC_DATA_F 신호는, 트랩이 취득될때 논리적 XICC 레지스터로서 맵핑된 물리적인 레지스터에 기록되는 콘텐츠를 결국 포함한다. 이는 트랩이 취득되는 것과 동일한 사이클(즉, 현행의 머신 사이클) 또는 나중의 머신 사이클에서 발생할 수 있다.
상기의 동작이 동일한 머신 사이클에서 발생하는 경우에 있어서, XICC_TAG_C 신호는 트랩이 취득될때 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 태그를 식별한다. XICC_TAG_C 신호에 의해 식별된 태그는 현행 매칭 로직(826)의 비교 로직(850) 및 비교 로직(851)에 의해 FXU_XICC_DATA_F 및 FXAGU_XICC_DATA_F 신호에 의해 각각 식별된 태그와 비교된다. 만약 일치하면, 대응하는 FXU_XICC_DV_F 신호 또는 FXAGU_XICC_DV_F 신호는 대응하는 FXU_XICC_DATA_F 신호 또는 FXAGU_XICC_DATA_F 신호의 콘텐츠가 유효하다는 것을 표시하며, 현행 매칭 로직(826)은 대응하는 FXU_XICC_CURR_MATCH 신호 또는 FXAGU_XICC_CURR_MATCH 신호를 출력한다. 이 신호는, 트랩이 취득될때 논리적인 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠가 트랩이 취득된 동일한 머신 사이클에서 이용가능하게 되었음을 표시한다.
도 52를 참조하면, 이 머신 사이클 동안, TAKE_TRAP 신호는 트랩이 취득되고 있음을 계속 표시하며, WR_ENTRY 신호는 여전히 이 트랩의 트랩 레벨로 맵핑된 엔트리를 계속 식별한다. 따라서, FXU_XICC_CURR_MATCH 혹은 FXAGU_XICC_CURR_MATCH 신호에 응답하여, XICC 기록 로직(825)은 대응하는 WR2_ENTRY_XICC나 혹은 WR3_ENTRY_XICC 신호를 발생시킨다. 이 신호는 WR_ENTRY 신호에 의해 식별된 엔트리에 대응한다. 그 다음에 트랩 스택 유닛(815)의 RD/WR 제어 로직(822)은 FXU_XICC_DATA_F 또는 FXAGU_XICC_DATA_F 신호의 콘텐츠를, 대응하는 WR2_ENTRY_XICC 신호 또는 WR3_ENTRY_XICC 신호에 의해 식별된 트랩 스택(820)의 엔트리의 TSTATE 필드의 XICC 필드에 기록한다.
도 53을 다시 참조하면, 전술한 바와같이, 트랩이 취득된 머신 사이클 이후의 머신 사이클에서, 전송된 FXU_XICC_DATA_F 및 FXAGU_XICC_DATA_F 신호는 트랩이 취득될때 XICC 레지스터로서 맵핑된 물리적인 레지스터에 기록된 콘텐츠를 포함할 수 있다. 이와같이 하기 위해, XICC 획득 로직(823)은 태그 어레이 기억 유닛(854)을 포함하는 나중의 매칭 어레이 로직(827)을 포함한다.
기억 유닛(854)은 8개의 기억 엔트리를 가진다. 각 엔트리는 트랩 스택(820)의 엔트리중 하나에 대응한다. 따라서, TAKE_TRAP 신호가 트랩이 취득되고 있음을표시할 때마다, RD/WR 로직(855)은 그 시점에서 XICC_TAG_C 신호에 의해 식별된 태그를, WR_ENTRY 신호에 의해 식별된 트랩 스택(820)의 엔트리에 대응하는 기억 유닛(854)의 엔트리에 기록한다.
비교 어레이 로직(852, 853)은 FXU_XICC_TAG_F 및 FXAGU_XICC_TAG_F 신호에 의해 식별된 태그를 기억 유닛(854)에 기억된 각각의 태그와 각각 비교한다. 결과적으로, 임의의 매칭이 발생하고, 대응하는 FXU_XICC_DV_F 또는 FXAGU_XICC_DV_F 신호가, 이 대응하는 FXU_XICC_DATA_F 또는 FXAGU_XICC_DATA_F 신호의 콘텐츠가 유효하다는 것을 표시한다면, 대응하는 비교 어레이 로직(852, 853)은 대응하는 FXU_XICC_DATA_F 또는 FXAGU_XICC_DATA_F 신호의 콘텐츠가 기록되는 트랩 스택 (820)의 엔트리를 식별하는, 대응하는 FXU_XICC_LATE_MATCH 또는 FXAGU_XICC_LATE_MATCH 신호를 출력한다.
도 54를 참조하면, XICC 획득 로직은 XICC 대기 로직(828)을 포함한다. 레지스터(856)는 WAIT_FOR_XICC_VEC 벡터 신호를 기억한다. WAIT_FOR_XICC_VEC 벡터 신호의 각 비트는 트랩 스택(820)의 엔트리중 하나에 대응하고, 그 대응하는 엔트리가, 대응하는 트랩이 취득되는 시점에서 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠가 이용가능하게 될 때를 대기할때 어서트된다. 따라서, WAIT_FOR_XICC_VEC 벡터 신호는, 대응하는 트랩이 취득된 시점에서 논리적 XICC 레지스터로서 맵핑된 다양한 물리적 레지스터의 콘텐츠가 이용가능하게될 때를 현재 대기하고 있는 트랩 스택(820)의 모든 엔트리의 리스트를 제공한다.
트랩이 TAKE_TRAP 신호에 의해 표시되는 것과 같이 취득되고, XICC_DV_C 신호가 논리적 XICC 레지스터로서 맵핑된 물리적인 레지스터의 콘텐츠가 이 시점에서 이용가능하지 않다는 것을 표시하고, FXU_XICC_CURR_MATCH 신호 및 FXAGU_XICC_CURR_MATCH 신호 모두가 그러한 것을 표시하지 않는 상태가 발생할 때마다, WR_ENTRY 신호는 이들 콘텐츠가 차후 머신 사이클에서 이용가능하게 될때를 대기하고 있는 엔트리를 식별한다. 이것에 응답하여, 이러한 엔트리는 XICC 대기 로직(828)에 의해, 대응하는 트랩이 취득될때 논리적 XICC 레지스터로서 맵핑된 다양한 물리적 레지스터의 콘텐츠가 이용가능하게 될 때를 현재 대기하고 있는 트랩 스택(820)의 엔트리의 WAIT_FOR_XICC_VEC 벡터 신호에 의해 제공된 리스트에 더해진다.
그러나, 전술한 바와 같이, 트랩이 TAKE_TRAP 신호에 의해 표시되는 것과 같이 취득되면, XICC_DV_C 신호는 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠가 이때 이용가능하다는 것을 표시할 수 있으며, 또는 FXU_XICC_CURR_MATCH 신호 또는 FXAGU_XICC_CURR_MATCH 신호가 그러한 것을 표시할 수 있다. 이러한 상태가 발생할 때마다, WR_ENTRY 신호에 의해 식별된 엔트리는 XICC 대기 로직(828)에 의해, WAIT_FOR_XICC_VEC 벡터 신호에 의해 제공된 리스트에 더해지지 않는다.
또한, 전술한 바와 같이, 대응하는 트랩이 취득되는 시점에서 논리적 XICC 레지스터로 맵핑된 물리적 레지스터의 콘텐츠가 차후 머신 사이클에서 유효하게 될 때마다, FXU_XICC_LATE_MATCH 또는 FXAGU_XICC_LATE_MATCH 신호는 이들 콘텐츠가 기록되는 트랩 스택(820)의 엔트리를 식별한다. 도 52를 다시 참조하면,WAIT_FOR_XICC_VEC 벡터 신호는 이 시점에서 계속해서 이러한 엔트리를 리스트하기 때문에, XICC 기록 로직(825)은 이러한 엔트리를 식별하는 대응 WR2_ENTRY_XICC 신호 또는 WR3_ENTRY_XICC 신호를 발생시킨다. 그 다음에 트랩 스택 유닛(815)의 RD/WR 제어 로직(822)은 FXU_XICC_DATA_F 또는 FXAGU_XICC_DATA_F 신호의 콘텐츠(즉, 대응하는 트랩이 취득하는 시점에서, 논리적 XICC 레지스터로 맵핑된 물리적 레지스터의 콘텐츠)를 대응하는 WR2_ENTRY_XICC 또는 WR3_ENTRY_XICC 신호에 의해 식별된 트랩 스택(820)의 엔트리의 TSTATE 필드의 XICC 필드에 기록한다. 도 54를 다시 참조하면, 이러한 엔트리는 WAIT_FOR_XICC_VEC 벡터 신호에 의해 제공된 리스트로부터 XICC 대기 로직(828)에 의해 제거된다.
따라서, 취득되었지만 아직 복귀되지 않은 각 트랩에 대하여, XICC 획득 로직은 트랩이 취득될때 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠가 언제 이용가능하게 되는지 및 이들 콘텐츠가 트랩 스택(820)의 어느 엔트리에 기록되는지를 결정할 수 있다. 결과적으로, 이들 콘텐츠가 트랩이 취득될때 어떠한 트랩에 대해서도 여전히 이용가능하지 않을 경우에, 내포된 트랩은 취득될 수 있다. 다시 말해, XICC 획득 로직(823)은 모든 대응하는 트랩 상태(TSTATE) 데이터가 이용가능하기 전에 트랩이 취득될 수 있도록 하는 메카니즘이다.
그러나, 트랩이 취해진 상태로부터의 복귀시, 트랩이 취득될때 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠는 트랩 스택(820)의 대응하는 엔트리에 기록되어 있어야 한다. 그 이유는 RETRY 또는 DONE 명령이, 이들 콘텐츠가 논리적 XICC 레지스터로서 현재 맵핑된 물리적인 레지스터에 다시 기록되는 것을 요구하기 때문이다.
도 54를 참조하면, 이를 확실하게 하기 위해, XICC 대기 로직(828)은 멀티플렉서(857)를 포함한다. 취해지고 있는 현행 트랩이 취득되는 트랩 레벨로 현재 맵핑된 트랩 스택(820)의 엔트리를 식별하는 RD_ENTRY 신호에 응답하여, 멀티플렉서는 이러한 엔트리에 대응하는 WAIT_FOR_XICC_VEC 벡터 신호의 비트를 WAIT_FOR_XICC 신호로서 출력한다. 따라서, 이 신호는, 취해지고 있는 현행 트랩의 트랩 레벨로 현재 맵핑된 트랩 스택(820)의 엔트리가 트랩이 취해졌을때 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠를 대기하고 있는지의 여부를 나타낸다.
도 45를 참조하면, XICC 획득 로직(823)은 WAIT_FOR_XICC 신호를 ISU(200)에 출력한다. 만약 이러한 신호가 어서트되면, 신호가 더 이상 어서트되지 않을 때까지, ISU(200)은 RETRY 또는 DONE 명령을 발행하지 않는다.
ISU(200)가 최종으로 RETRY 또는 DONE 명령을 발행할 때, ISU(200)는, DONE 명령이 발행되었는지의 여부를 표시하는 신호 및, RETRY 명령이 발행되었는지의 여부를 표시하는 신호를 포함하는 DONE_RETRY_IS 신호를 출력한다.
도 47를 참조하면, 판독 멀티플렉서(835)는 현행 TL 값에 대응하는 RENAME_MAP 신호를 RD_ENTRY 신호로서 출력한다. 그리고 도 45를 참조하면, 트랩 스택 유닛(815)의 RD/WR 제어 로직(822)은, DONE_RETRY_IS 신호가 DONE 또는 RETRY 명령이 발행되었다고 표시할 때, RD_ENTRY 신호에 의해 식별된 기억 엔트리로부터 출력되는 TPC, TNPC, ASI, CWP, PSTATE 및 XICC 값을 판독한다.
도 17를 참조하면, ASI, CWP 및 PSTATE 값은 DONE_RETRY_IS 신호에 응답하여, 제어 레지스터 파일(800)의 RW/WR/UPDATE 로직(816)에 의해 그 대응하는 레지스터에 기록된다.
또한, 도 45에 도시된 바와같이, TPC 및 TNPC 값은 RD_TPC_TNPC 신호로 BRB(59)에 제공된다. 따라서, BRB(59)는 이 값을 다음 명령 세트를 인출하기 위해 PC 및 NPC 값을 형성하는데 사용한다.
마지막으로, XICC 값은 RD_XICC 신호로 DFB(62)에 제공된다. 도 8를 참조하면, DONE_RETRY_IS 신호에 응답하여, CCRFRN(610)은 논리적 XICC 레지스터를 물리적 레지스터로 맵핑한다. 따라서, CCRFRN(610)은 트랩 스택 유닛(815)으로부터 XICC 데이터를 수신할 때, 새롭게 맵핑된 물리적 레지스터에 그 XICC 데이터를 기억시킨다.
더욱이, 당업자라면, FXU(601) 및 FXAGU(602)가, 논리적 XICC 레지스터를 수정하는 고정소수점 명령을 실행할 수 있는 하나 이상의 실행 유닛을 각각 가질 수 있음을 이해할 것이다. 이 경우, XICC 획득 로직(823)은 트랩이 취해진 시점에서 논리적 XICC 레지스터로서 맵핑된 물리적 레지스터의 콘텐츠를 트랩 스택(820)을 적절하게 갱신하기 위해, 이미 설명한 로직을, 복사한다.
또한, 당업자라면 XICC 획득 로직(823)의 개념은, 콘텐츠가 트랩이 취해진 시점에서 이용가능하지 않을 수 있지만 트랩 스택에 기록될 필요가 있고 레지스터 리네임 처리(즉, 물리적 레지스터의 논리적 레지스터로의 맵핑)가 수행되어진 다른 타입의 레지스터로 확대될 수 있음을 이해할 것이다.
본 명세서에서 언급된 모든 문헌 및 특허 출원은 각각의 개별 문헌 및 특허출원이 참조에 의해 병합된 것으로, 구체적으로 및 개별적으로 표시된 것과 동일한 범위로, 참조에 의해 본 명세서에 병합된다.
본 발명을 충분히 설명하였지만, 당업자는 첨부된 청구 범위의 사상이나 그 범위를 벗어나지 않고 많은 수정 및 변형이 만들어 질 수 있음을 이해할 것이다.

Claims (13)

  1. 데이터 기억 유닛과, 명령 발행 유닛과, 명령 실행 유닛과, 명령 발행 및 실행 스케줄러를 구비하며 명령 발행 유닛에 의해 발행된 명령을 실행하는 중앙 처리 장치에서 투기적 명령 실행을 트래킹하기 위한 방법에 있어서,
    데이터 기억 유닛내에서 복수의 명령 식별 태그와 복수의 활동 비트용 기억장치를 제공하는 데어터 구조를 형성하는 단계로서, 활동 비트 각가은 복수의 명령 식별 태그 중 하나와 유일하게 관련된 명령 활성 또는 비활성 상태를 식별하는 것인 데이터 구조 형성 단계와,
    상기 명령 발행 유닛에 의해 발행된 각각의 특정 명령에 그의 관련 활동 비트와 함께 식별 태그를 할당하는 단계와;
    특정 명령이 현재 중앙 처리 장치에서 활성화될 때 상기 특정 명령을 활성 명령으로서 식별하도록 특정 관련 명령에 대하여 상기 데이터 구조에 저장된 활동 비트를 제1 상태로 설정하는 단계와;
    특정 명령이 에러 없이 정상적으로 실행 완료할 때 상기 특정 명령을 비활성 명령으로서 식별하도록 특정 관련 명령에 대하여 데이터 구조에 저장된 활동 비트를 제2 상태로 클리어하는 단계를 포함하는 것을 특징으로 하는 명령 실행 트래킹 방법.
  2. 투기적 무순위 실행 프로세서에서 명령 상태를 트랙킹하기 위한 방법에 있어서,
    복수의 발행 명령 각각에 대해 명령 활동 상태 데이터를 저장하기 위해 복수의 기억 위치를 갖는 프로세서내에 어드레셔 가능한 데이터 구조를 제공하는 단계와;
    발행된 명령 각가에 명령 식별 태그를 할당하는 단계와;
    복수의 기억 위치 중 하나와 상기 할당된 식별 태그 각각을 연관시키는 단계와;
    특정 명령이 발행된 시점에서 특정 발행 명령을 활성 상태로서 식별하는 활동 데이터를 데이터 구조 내에 저장하는 단계와;
    특정 명령의 실행 완료를 검출하는 단계와;
    상기 특정 명령이 소정 세트의 실행 에러 조건중 어떤 조건도 발생함이 없이 실행을 완료할 때 상기 특정 명령을 비활성 상태로 식별하는 데이터를 저장하는 단계를 포함하는 것을 특징으로 하는 명령 상태 트래킹 방법.
  3. 명령 발행 스케줄러와, 명령 발행 유닛과, 명령을 완료시까지 실행하기 위한 명령 실행 유닛을 갖는 투기적 무순위 프로세서에서, 발행된 명령 상태를 트랙킹하는 방법에 있어서,
    명령 활동 상태 데이터를 저장하는 n-위치 데이터 구조를 제공하는 단계와;
    n-위치 데이터 구조에서 n개 위치 각각에 대한 고유의 기억 위치 어드레스를 정의하는 단계와;
    고유의 기억 위치 어드레스 중 하나의 어드레스와 상기 명령 발행 유닛에 의해 발행된 각각의 특정 명령을 연관시키는 단계와;
    특정 명령의 발행 시, 상기 특정 명령이 활성 상태임을 나타내도록 상기 특정 명령과 관련된 상기 데이터 구조 위치에 있는 데이터 구조내에 명령 활동 상태 데이터를 저장하는 단계와;
    명령 실행 완료 및 이 명령 실행 완료와 관련된 임의의 에러 조건을 각각의 발행된 명령에 대한 실행 유닛에서 검출하는 단계와;
    상기 명령이 에러 상태없이 실행 완료된 경우에는, 명령이 비활성 상태임을 지시하도록 관련 저장 위치내의 활동 상태 데이터를 갱신하고, 명령이 에러 상태를 갖고서 완료되거나 실행을 완료하지 못한 경우에는 특정 명령을 활성 상태로서 식별하는 원래의 활동 데이터를 관련 저장 위치에서 유지하는 단계와;
    상기 명령 발행 스케줄러가, 발행 당시에 비활성 상태인 이전에 발행된 명령의 상태와 상관없이 실행하기 위한 추가 명령을 스케줄링하도록 명령 발행 스케줄러에 명령 활동 상태 데이터를 교신하는 단계를 포함하는 것을 특징으로 하는 명령 상태 트래킹 방법.
  4. 명령을 발행하는 명령 발행 유닛과 프로세서내에서 데이터를 저장하는 데이터 기억 유닛을 구비한 투기적 무순위 실행 프로세서에서, 정확한 프로세서 상태를 트래킹하는 방법에 있어서,
    상기 프로세서의 데이터 기억 유닛에서 n개의 어드레스 가능 데이터 기억 위치를 갖는 제1 데이터 구조를 한정하는 단계와;
    발행된 명령에 대한 연속 할당을 위해 복수의 고유 명령 식별 태그를 할당하는 단계와;
    상기 특정 명령이 발행될 때 각각의 특정 명령에 복수의 할당된 고유 식별 태그 중 하나를 지정하는 단계와;
    상기 프로세서 내의 제1 데이터 구조에서 어드레스 가능 기억 위치 중 하나와 각각의 명령 태그를 연관시키는 단계와;
    각각의 특정 명령에 대하서, 각각의 명령에 대한 명령 활동 상태 변경에 응답해서 특정 명령과 연관된 데이터 기억 위치에 저장된 데이터를 갱산하는 단계로서, 상기 활동 상태 변경은 명령 발행 시의 활성 상태로부터 명령이 소정의 에러없이 완료될 때의 비활성 상태로 상태를 변경하는 것을 포함하는 데이터 갱신 단계와;
  5. 데이터 저장 수단 및 명령 발행, 디스패치, 실행 및 철회를 스케줄링하는 수단을 구비한 투기적 무순위 실행 프로세서에서 명령 상태를 트래킹하는 방법에 있어서,
    상기 프로세서에 현재 미해결될 수 있는 명령의 최대수를 규정하는 n개의 고유 명령 일련 번호를 할당하는 단계와;
    상기 프로세서내의 상기 데이터 저장 수단에서 n개의 독립 어드레스 가능한 저장 위치를 갖는 데이터 구조를 규정하는 단계와;
    상기 어드레스 가능한 저장 위치중 하나와 각각의 상기 할당된 일련 번호를 연관시키는 단계와;
    상기 프로세서에 의한 명령 발행에 응답해서 식별용 태그로서 각각의 상기 발행된 명령에 상기 일련 번호중 하나를 지정하며, 상기 데이터 저장 위치중 하나와 각가의 발행된 명령 사이에서 일시적으로 고유의 대응성이 수립되도록 상기 명령이 실행 완료되고 철회될 때까지 상기 지정을 유지하는 단계와;
    상기 명령이 발행될 때 상기 명령과 연관된 상기 데이터 저장 위치에 활성(ACTIVE) 상태 지시자를 저장하는 단계와;
    상기 명령이 에러 없이 실행 완료될 때 상기 명령과 연관된 상기 데이터 저장 위치에 비활성(INACTIVE) 상태 지시자를 저장하는 단계와;
    상기 어드레스 가능한 저장 위치를 포인트하는 복수의 머신 포인터를 한정하는 단계와;
    활성 또는 비활성과 같은 명령 활동 상태와 소정 롤에 응답해서 상기 복수의 머신 포인터를 움직여 각각의 명령에 할당된 머신 자원과 명령 상태를 트래킹하는 단계를 포함하는 것을 특징으로 하는 프로세서 상태 트래킹 방법.
  6. 데이터 기억 유닛과, 명령 발행 유닛과, 명령 실행 유닛과, 명령 발행 및 실행 스케줄러를 구비한 중앙 처리 장치에서, 투기적 명령 실행을 트래킹하는 장치에 있어서,
    상기 데이터 기억 유닛에 정의되어 있는 데이터 구조와;
    명령 발행 동작에 응답하여 발행 유닛에 의해 발행되는 각각의 명령에 식별 태그를 지정하는 수단과;
    상기 지정된 식별 태그에 기초하여 상기 발행된 명령중 각각의 특정 명령과 고유하게 관련되고 상기 데이터 구조에 기억된 활동 데이터를 연관시키는 수단과;
    상기 명령이 발행될 때 활성 명령 상태를 식별하도록 데이터 구조에 활동 데이터를 저장하는 수단과;
    에러 없이 명령 실행을 완료할 때 비활성 명령 상태를 식별하도록 데이터 구조내 상기 활동 데이터를 저장하는 수단을 포함하는 것을 특징으로 하는 투기적 명령 실행 트래킹 장치.
  7. 내부 데이터 기억 유닛과, 명령 디코딩 유닛을 구비하며 외부 메모리와 통신하는 투기적 무순위 실행 프로세서에서, 정확한 예외 모델을 유지시키는 로딩 및 기억 명령을 포함하는 메모리 참조 명령을 트래킹하고 적극적으로 스케줄링하는 방법에 있어서,
    상기 프로세서에 의한 실행을 위해 복수의 명령을 발행하는 단계와;
    상기 복수의 발행된 명령 중 어느 것이 투기적으로 발행된 명령인 지를 식별하는 단계와;
    상기 내부 데이터 기억 유닛내에 각각의 상기 식별된 투기적으로 발행된 명령과 관련된 투기적 실행 지시자를 기억시키는 단계와;
    상기 발행된 명령 중 어느 것이 외부 메모리를 참조하는지를 결정하는 단계와;
    상기 내부 데이터 기억 유닛 내에 각각의 상기 결정된 메모리 참조 명령과 관련된 메모리 참조 명령 지시자를 기억시키는 단계와;
    상기 명령이 발행된 후에 상기 복수의 명령 각각에 관한 실행 활동 상태를 모니터링하는 단계와;
    각각의 발행된 명령 실행 동안에 어떤 에러 조건이 발생했는지를 확인하여, 실행 동안에 에러가 있는 각각의 명령에 관한 에러 상태를 나타내는 에러 조건 지시자를 발생시키는 단계와;
    상기 발행된 명령의 실행 상태를 트래킹하는 단계와;
    발행되었지만 실행되지 않은 다른 명령의 실행 상태에 기초해서 순차적으로 조기에 발행된 비메모리 참조 명령에 앞서서 무순위로 실행하기 위한 상기 결정된 메모리 참조 명령중 특정의 하나를 스케쥴링하는 단계를 포함하며, 상기 실행 상태는 투기적 발행 명령으로서 비메모리 기준 명령의 식별 및 소정의 실행 완료 상태를 가지는 것으로서의 비메모리 참조 명령의 식별을 포함하는 것을 특징으로 하는 명령 트래킹 및 스케줄링 방법.
  8. 프로세서 내부에 배치된 레지스터 및 상기 프로세서 외부에 배치된 메모리를 포함하는 데어터 기억 수단과, 명령 발행 유닛과, 명령 실행 유닛을 구비하는 투기적 무순위 실행 프로세서에서, 상기 프로세서의 정확한 아키텍쳐 상태를 유지하면서, 짧은 대기시간의 명령에 앞서서 비순차적 순위로 아키텍쳐 상태를 수정할 수있는 긴 대기시간의 명령을 적극적으로 스케쥴링하는 방법에 있어서,
    에러없이 실행을 완료하고 원상 복구될 필요가 없는 최종의 순차적으로 순서가 정해진 연속 명령을 식별하는 단계와;
    실행이 잘못 예측된 경우 실행이 원상 복구되어야만 하는 명령인 가장 초기의 순차적으로 순서 정해진 투기적으로 발행된 미해결의 예측된 제어 전송 명령을 식별하는 단계와;
    에러없이 실행 완료하고 원상 복구될 필요가 없는 상기 식별된 최종의 순차적으로 순서 정해진 연속 명령과, 실행이 잘못 예측된 경우 실행이 원상 복구되어야만 하는 상기 식별된 가장 초기의 순차적으로 순서 정해진 투기적으로 발행된 미해결의 예측된 제어 전송 명령에서 순차적으로 순서 정해진 임의의 긴 대기시간의 명령을 식별하는 단계로, 상기 긴 대기시간의 명령은 상기 발행된 명령을 긴 대기시간의 명령으로서 사전 지정된 소정 세트의 명령과 비교하여 식별하는 것인 명령 식별 단계와;
    즉각 실행을 위해 상기 식별된 긴 대기시간 명령을 스케줄링하는 단계를 포함하고,
    이로써, 상기 긴 대기시간 명령은 적극적으로 발행되고, 정확한 상태는 잘못예측된 투기적으로 발행된 중재 제어 전송 명령 및 다른 경우에 실행 예외를 발생할 수 있는 명령에 관계없이 실행하도록 스케쥴링 될 수 있는 상기 긴 대기 시간의 명령의 실행을 위해 스케쥴링함으로써 유지되는 것을 특징으로 하는 스케줄링 방법.
  9. 프로세서 내부에 있는 레지스터와 상기 프로세서 외부에 있는 메모리를 구비한 투기적 무순위 실행 프로세서에서, 상기 프로세서의 정확한 상태를 절충함이 없어 상기 내부 레지스터만을 참조하는 명령에 있어서 아키텍쳐 상태를 수정할 수 있는 메모리 참조 명령을 스케줄링하는 방법에 있어서,
    복수의 명령에 대한 상태 정보를 기억하기 위해 상기 프로세서내의 레지스터에서 데이터 구조를 설정하는 단계와;
    상기 데이터 구조내 엔트리를 가리키며 최조 미해결 분기 명령을 지시하는 제1 예측 분기 명령 일련 번호 포인터(PBSN)를 설정하는 단계로서, 상기 제1 포인터로 식별되는 명령 보다 빠른 순서의 순차 명령은 상기 제1 PBSN 설정 분기 예측 오류와 상관없이 실행가능한 것인 단계와;
    상기 데이터 구조내 엔트리를 가리키고 최후의 비활성화 명령을 지시하는 제 2 포인터(CSN)를 설정하는 단계로서, 상기 최후의 비활성화 명령은 에러없이 실행 완료하는 최후 순서의 순차 명령이고, 모든 이전 순서의 순차 명령이 또한 에러없이 실행 완료한 경우, 상기 제2 포인터에 의해 식별된 명령 보다 빠른 순서의 순차명령은 분기 예측 오류 및 예외와 상관없이 실행가능한 것인 상기 제2 포인터 설정 단계와;
    상기 데이터 구조내 엔트리를 가리키며 메모리 참조 명령 이외의 최종 회부된 명령을 지시하는 제3의 비메모리 회부의 일련 번호 포인터(NMCSN)를 설정하고 상기 제2 포인터(CSN)을 지나서 및 마치 메모리 참조 명령이 또한 회부되었던 것처럼 메모리를 참조하는 상기 명령 중 하나를 지나서 진행하는 단계와;
    실행을 위해 스케줄링되도록 이용 가능한 상기 제2 포인터(CSN)와 상기 제3 포인터(NMCSN) 사이의 메모리 참조 명령을 식별하고 상기 제3 포인터(NMCSN)와 상기 제1 포인터(PBSN) 사이의 메모리 참조 명령은 실행을 위해 스케줄링되도록 이용 가능한 것으로서 식별하지 않는 단계를 포함하고,
    그에 따라 긴 대기시간 메모리 참조 명령은 짧은 대기시간 레지스터 참조 명령으로부터 분리되고,
    분기 예측 오류 및 실행 예외와 상관없이 실행을 위해 스케줄링 될 수 있는 메모리 참조 명령만을 스케줄링함으로써 정확한 상태가 유지되는 것을 특징으로 하는 스케줄링 방법.
  10. 프로세서 내부의 레지스터, 상기 프로세서 외부의 메모리, 명령 발행 유닛 및 명령 실행 유닛을 구비한 투기적 무순위 실행 프로세서에서, 상기 프로세서의 정확한 상태를 절충함이 없이 레지스터만을 참조하는 명령에 앞서서 아키텍쳐 상태를 수정할 수 있는 메모리 참조 명령을 적극적으로 스케줄링하는 방법에 있어서,
    메모리 참조 명령과 비메모리 참조 명령에 대한 제1 상태 정보를 기억하기 위한 복수의 어드레스 가능한 기억 소자들을 포함하는 제1 데이터 구조를 규정하는 단계와;
    메모리 참조 명령에 대한 제2 상태 정보를 기억하기 위한 복수의 어드레스 가능한 데이터 기억 소자들을 포함하는 제2 데이터 구조를 규정하는 단계와;
    발행된 일련 번호 포인터(ISN), 회부된 일련 번호 포인터(CSN), 최초 미해결의 예측된 제어 전송 명령 일련 번호 포인터(PBSN), 비메모리 참조 명령 회부된 일련 번호 포인터(NMCSN)를 포함하며 각각의 포인터가 상기 어드레스 가능한 데이터 기억 소자들 중 하나를 가리키는 복수의 포인터를 규정하는 단계와;
    상기 어드레스 가능한 데이터 기억 소자들 중 미리 정해진 소자를 비유일화게 지시하도록 상기 복수의 포인터 각각을 초기화하는 단계와;
    상기 명령 발행 유닛으로부터 적어도 하나의 명령을 발행하는 단계와;
    상기 발행된 명령이 각각 메모리를 참조하는지를 결정하는 단계와;
    상기 명령 발행 유닛으로부터의 명령 발행 신호에 응답하여 메모리 참조 명령과 메모리 비참조 명령에 대한 활성 명령을 나타내도록 상기 제1 데이터 구조내의 상기 제1 지시자를 세팅하는 단계와;
    상기 명령 발행 유닛으로부터의 명령 발행 신호에 응답하여, 메모리 비참조 명령에 대해서만 상태 명령을 나타내도록 상기 제2 데이터 구조내의 상기 제2 지시자를 세팅하고, 메모리 참조 명령에 대해서는 상기 명령이 비활성 상태임을 나타내도록 상기 제2 지시자를 클리어하는 단계와;
    (i)상기 명령의 완료 여부 및 상기 명령 완료가 에러를 갖고 완료되었는지 에러없이 완료되었는지를 나타내는 상기 실행 유닛으로부터의 명령 완료 신호와,(ii)예측된 제어 전송이 정확히 예측되었는지 아닌지를 나타내는 예측 평가 상태 유닛으로부터의 제어 전송 명령에 대한 예측 평가 상태 신호에 응답하여, 상기 명령의 현행 상태를 활성 상태 또는 비활성 상태로 나타내기 위해 각각의 발행된 명령에 대하여 상기 제1 및 제2 데이터 구조내의 상기 제1 및 제2 지시자를 각각 변경함으로써 상기 지시자의 상태를 갱신하는 단계와;
    현행 머신 사이클 동안에 발행된 명령의 수를 나타내는 상기 명령 발행 유닛으로부터의 신호에 응답하여, 가장 최근에 발행된 명령신호를 가리키도록 상기 ISN 포인터를 진행하는 단계와;
    상기 CSN 포인터에서 시작하여 일련 번호가 증가하는 순으로 상기 제1 지시자를 순차적으로 평가하고 비활성 명령 지시자를 갖는 가장 최근의 일련 번호를 판정하도록 상기 ISN 포인터쪽으로 평가하여, 비활성 명령 지시자를 갖는 상기 가장 최근의 일련 번호를 가리키도록 상기 CSN 포인터를 진행시키는 단계와;
    예측 평가 상태 유닛으로부터의 예측 평가 상태 신호에 응답하여 최초의 미해결된 분기 명령의 위치를 가리키도록 상기 PBSN 포인터를 진행시키는 단계와;
    최종 회부된 명령의 위치를 가리키도록 상기 NMCSN 포인터를 진행시키고, 또 한 상기 제2 데이터 구조내 상기 제2 지시자의 평가에 기초하여 상기 PBSN 포인터 위로 임의의 비회부된 활성 메모리 명령을 지나 CSN앞으로 진행시키는 단계와;
    (i)제어 전송 명령과, (ii) 제어 레지스터 값이 투기적으로 수정될 수 있는 제어 레지스터 값을 수정하는 부작용 가능성을 갖는 명령의 각각을 실행하기 바로 전에 머신 상태 정보를 기억시켜 실행 예외 발생 시 또는 예측된 제어 전송 명령의 예측 오류 시 정확한 상태가 복구 가능하도록 하는 단계와;
    제어 레지스터 값이 투기적으로 수정될 수 없는 제어 레지스터 값을 수정하는 부작용 가능성을 갖는 명령을 실행하기 이전에 모든 계류중인 명령을 회부하고철회하도록 상기 머신을 동기화하는 단계를 포함하며,
    이로써 실행을 위해 비메모리 명령보다 더 많은 머신 사이클을 필요로 하는 메모리 참조 명령은 명령 실행 상태가 허용되자 마자 정확한 상태를 절충함이 없이 실행을 위해 스케줄링 될 수 있게 하는 것을 특징으로 하는 스케줄링 방법.
  11. 내부 데이터 기억 유닛을 구비하고 외부 메모리와 통신하는 투기적 무순위 실행 프로세서에서, 정확한 예외 모델을 유지하는 로딩 및 기억 명령을 포함한 메모리 참조 명령을 트래킹하고 적극적으로 스케줄링하는 방법에 있어서,
    상기 프로세서에서 실행을 위한 복수의 명령을 발행하는 단계와;
    상기 발행된 명령 중 어느 것이 투기적 실행과 관련되는지 식별하고 각각의 상기 투기적 명령과 관련된 지시자를 기억하는 단계와;
    상기 발행된 명령 중 어느 것이 외부 메모리를 참조하는 지 식별하고 각각의 상기 메모리 참조 명령과 관련된 지시자를 기억하는 단계와;
    각각의 명령에 대한 완료 상태를 결정하기 위해 상기 명령 발행후 에러없는 실행 완료를 모니터링 하는 것을 포함하여 상기 복수의 명령의 실행 상태를 모니터링하는 단계와;
    상기 발행된 명령의 실행 상태를 트래킹하는 단계와;
    투기적 명령인 것으로서의 식별을 포함하는 다른 명령의 상태와 상기 복수의 명령의 실행 완료 상태에 기초하여, 비메모리 참조 명령에 앞서 실행을 위해 상기 발행된 메모리 참조 명령을 스케줄링하는 단계를 포함하는 것을 특징으로 하는 스케줄링 방법.
  12. 프로세서의 내부 레지스터 및 상기 프로세서 외부에 있는 메모리를 포함하는 데이터 기억 수단과, 명령 발행 유닛과, 명령 실행 유닛을 구비하는 투기적 무순위 실행 프로세서에서, 상기 프로세서의 정확한 아키텍쳐 상태를 유지하면서 짧은 대기시간 명령에 앞서서 비순차 아키텍쳐 상태를 수정하는 긴 대기시간 명령을 적극적으로 스케줄링하는 장치에 있어서,
    에러없이 실행이 완료되고 원상 복구될 필요가 없는 최종의 순차적인 연속 명령을 식별하는 수단과;
    실행이 잘못 예측되는 경우 그 실행이 원상 복구되어야 하는 최초의 순차적이고 투기적으로 발행된 미해결의 예측된 제어 전송 명령을 식별하는 수단과;
    실행이 잘못 예측된 경우 실행이 원상 복구되어야 하는 상기 식별된 최초의 순차적이고 투기적으로 발행된 미해결의 예측된 제어 전송 명령과 에러없이 실행 완료되고 원상 복구될 필요가 없는 상기 식별된 최종의 순차적인 연속 명령 사이에서 순차적으로 순서 정해진 임의의 긴 대기시간 명령을 식별하는 수단-상기 긴 대기시간 명령은 긴 대기시간 명령으로 미리 지정된 소정 세트의 명령과 상기 발행된 명령을 비교함으로써 식별됨-과;
    즉각 실행을 위해 상기 식별된 긴 대기시간 명령을 스케줄링 하는 수단을 포함하고,
    이로써 상기 긴 대기시간 명령은 적극적으로 발행되고, 정확한 상태는 잘못예측된 투기적 발행의 중재 제어 전송 명령 및 다른 경우에 실행 예외를 발생할 수 있는 명령을 고려함이 없이 실행을 위해 스케줄링 될 수 있는 상기 긴 대기시간 명령만을 실행하도록 스케줄링함으로써 유지되는 것을 특징으로 하는 스케줄링 장치.
  13. 복수의 내부 프로세서 레지스터 및 상기 프로세서 외부에 있는 외부 메모리, 명령 발행 유닛 및 명령 실행 유닛을 갖는 투기적 무순위 실행 프로세서에서, 상기 프로세서의 정확한 상태를 절충하지 않고 레지스터만을 참조하는 명령에 앞서 아키텍쳐 상태를 수정할 수 있는 메모리 참조 명령을 적극적으로 스케줄링하는 장치에 있어서,
    메모리 참조 명령 및 비메모리 참조 명령에 대한 제1 상태 정보를 기억하는 복수의 어드레스 가능한 데이터 기억 엘리먼트를 포함하는 제1 데이터 구조와;
    메모리 참조 명령에 대한 제2 상태 정보를 기억하는 복수의 어드레스 가능한 데이터 기억 엘리먼트를 포함하는 제2 데이터 구조와;
    상기 내부 프로세서 레지스터내에 규정되고, 발행된 일련 번호 포인터(ISN), 회부된 일련 번호 포인터(CSN), 최초 미해결 예측된 제어 전송 명령 일련 번호 포인터(PBSN), 비메모리 참조 명령의 회부된 일련 번호 포인터(NMCSN)을 포함하는 복수의 포인터값을 기억하는 복수의 포인터 기억 레지스터-상기 각각의 포인터는 상기 어드레스 가능한 데이터 기억 엘리먼트중 하나를 가리키는 것임-와;
    상기 어드레스 가능한 데이터 기억 엘리먼트중 미리 정해진 엘리먼트를 가리키도록 상기 복수의 포인터 각각을 초기화하는 수단과;
    상기 명령 발행 유닛으로부터 적어도 하나의 명령을 발행하는 수단과;
    상기 발행된 명령 각각이 상기 외부 메모리와 참조하는 지를 결정하는 수단과;
    상기 명령 발행 유닛으로부터의 명령 발행 신호에 응답하여 메모리를 참조하지 않은 명령과 메모리를 참조하는 명령에 대하여 활성 명령을 나타내도록 상기 제1 데이터 구조에 상기 제1 지시자를 세팅하는 수단과;
    상기 명령 발행 유닛으로부터의 명령 발행 신호에 응답하여 메모리를 참조하지 않는 명령에 대해서만 활성 명령을 나타내도록 상기 제2 데이터 구조에 상기 제2 지시자를 세팅하고, 메모리를 참조하는 명령에 대해서는 상기 명령이 비활성임을 나타내도록 상기 제2 지시자를 클리어하는 수단과;
    (i)상기 명령이 완료했는지 그리고 상기 완료의 에러 유무 여부를 나타내는 상기 실행 유닛으로부터의 명령 완료 신호와 (ii)예측된 제어 전송이 정확히 예측되었는지를 나타내는 예측 평가 상태 유닛으로부터의 제어 전송 명령에 대한 예측 평가 상태 신호에 응답하여, 상기 명령의 현행 상태를 활성 또는 비활성으로 나타내도록 발행된 각각의 명령에 대해서 상기 제1 및 제2 데이터 구조의 상기 제1 및 제2 지시자 각각을 변경함으로써 상기 지시자의 상태를 갱신하는 수단과;
    현행 머신 사이클 동안에 발행된 명령의 수를 나타내는 명령 발행 유닛으로부터의 신호에 응답하여, 가장 최근에 발행된 명령 번호를 가리키도록 상기 ISN 포인터를 진행시키는 수단과;
    비활성 명령 지시자를 갖는 가장 최근의 일련 번호를 결정하기 위해 상기CSN 포인터에서 시작하여 일련 번호 증가순으로 상기 제1 지시자를 순차적으로 평가하고 상기 ISN 포인터쪽으로 평가하여, 비활성 명령 지시자를 갖는 상기 가장 최근의 일련 번호를 가리키도록 상기 CSN 포인터를 진행시키는 수단과;
    예측 평가 상태 유닛으로부터의 예측 평가 상태 신호에 응답하여 최초 미해결 분기 명령의 위치를 가리키도록 상기 PBSN 포인터를 진행시키는 수단과;
    최종 회부된 명령의 위치를 가리키도록 상기 NMCSN 포인터를 진행시키고, 또 상기 제2 데이터 구조의 상기 제2 지시자의 평가에 기초하여 상기 PBSN 포인터 위로 임의의 회부되지 않은 활성 메모리 명령을 지나서 CSN 앞으로 더운 진행시키는 수단과;
    (i)제어 전송 명령 또는 (ii)예측된 제어 전송 명령의 예측 에러시 또는 실행 예외의 발생 시 정확한 상태가 복구 가능하도록 제어 레지스터 값이 투기적으로 수정될 수 있는 제어 레지스터값을 수정하는 부작용 가능성을 갖는 명령인 각각의 명령을 실행하기 바로 전에 머신 상태 정보를 기억하는 수단과;
    제어 레지스터 값이 투기적으로 수정될 수 있는 제어 레지스터값을 수정하는 부작용 가능성을 가질 수 있는 명령을 실행하기 전에 모든 계류중인 명령을 회부하고 철회하도록 상기 프로세서를 동기화하는 수단을 포함하며,
    이로써, 비메모리 명령 보다 실행하는데 더 많은 머신 사이클을 요구하는 메모리 참조 명령이 명령 실행 상태가 정확한 상태를 절충함이 없이 허용되자마자 실행을 위해서 스케줄링 될 수 있게 하는 것을 특징으로 하는 스케줄링 장치.
KR1019970705598A 1995-02-14 1996-02-13 고성능투기적실행프로세서를위한구조및방법 KR100425805B1 (ko)

Applications Claiming Priority (25)

Application Number Priority Date Filing Date Title
US39088595A 1995-02-14 1995-02-14
US08/390,885 1995-02-14
US8/380,885 1995-02-14
US39829995A 1995-03-03 1995-03-03
US08/398,299 1995-03-03
US8/398,299 1995-03-03
US08/482,075 US5655115A (en) 1995-02-14 1995-06-07 Processor structure and method for watchpoint of plural simultaneous unresolved branch evaluation
US08/484,795 US5673426A (en) 1995-02-14 1995-06-07 Processor structure and method for tracking floating-point exceptions
US8/478,025 1995-06-07
US08/478,025 1995-06-07
US08/473,223 US5644742A (en) 1995-02-14 1995-06-07 Processor structure and method for a time-out checkpoint
US08/476,419 1995-06-07
US08/482,073 1995-06-07
US08/483,958 US5649136A (en) 1995-02-14 1995-06-07 Processor structure and method for maintaining and restoring precise state at any instruction boundary
US08/483,958 1995-06-07
US08/478,025 US5651124A (en) 1995-02-14 1995-06-07 Processor structure and method for aggressively scheduling long latency instructions including load/store instructions while maintaining precise state
US08/487,801 US5751985A (en) 1995-02-14 1995-06-07 Processor structure and method for tracking instruction status to maintain precise state
US08/484,795 1995-06-07
US8/473,223 1995-06-07
US08/472,394 1995-06-07
US8/484,795 1995-06-07
US08/472,394 US5673408A (en) 1995-02-14 1995-06-07 Processor structure and method for renamable trap-stack
US8/476,419 1995-06-07
US08/473,223 1995-06-07
US08/476,419 US5659721A (en) 1995-02-14 1995-06-07 Processor structure and method for checkpointing instructions to maintain precise state

Publications (2)

Publication Number Publication Date
KR19980702203A KR19980702203A (ko) 1998-07-15
KR100425805B1 true KR100425805B1 (ko) 2004-07-27

Family

ID=27013307

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019970705598A KR100425805B1 (ko) 1995-02-14 1996-02-13 고성능투기적실행프로세서를위한구조및방법

Country Status (3)

Country Link
US (9) US5751985A (ko)
JP (1) JP5018728B2 (ko)
KR (1) KR100425805B1 (ko)

Families Citing this family (312)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
JPH10506483A (ja) * 1994-06-10 1998-06-23 テキサス・マイクロ・インコーポレーテッド フォールト・トレラントなコンピュータ・システムのためのメイン・メモリ・システム及びチェックポイント用プロトコル
US5799179A (en) * 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US5751985A (en) * 1995-02-14 1998-05-12 Hal Computer Systems, Inc. Processor structure and method for tracking instruction status to maintain precise state
US6446224B1 (en) 1995-03-03 2002-09-03 Fujitsu Limited Method and apparatus for prioritizing and handling errors in a computer system
JP3020833B2 (ja) * 1995-06-19 2000-03-15 株式会社東芝 チェックポイント取得システム
US5864657A (en) * 1995-11-29 1999-01-26 Texas Micro, Inc. Main memory system and checkpointing protocol for fault-tolerant computer system
US5809275A (en) * 1996-03-01 1998-09-15 Hewlett-Packard Company Store-to-load hazard resolution system and method for a processor that executes instructions out of order
US6233704B1 (en) * 1996-03-13 2001-05-15 Silicon Graphics, Inc. System and method for fault-tolerant transmission of data within a dual ring network
US5968166A (en) * 1996-03-22 1999-10-19 Matsushita Electric Industrial Co., Ltd. Information processing apparatus and method, and scheduling device for reducing inactivity due to wait state
US5875340A (en) * 1996-05-31 1999-02-23 Hewlett-Packard Company Optimized storage system and method for a processor that executes instructions out of order
US5958061A (en) * 1996-07-24 1999-09-28 Transmeta Corporation Host microprocessor with apparatus for temporarily holding target processor state
US6199152B1 (en) 1996-08-22 2001-03-06 Transmeta Corporation Translated memory protection apparatus for an advanced microprocessor
US5826070A (en) * 1996-08-30 1998-10-20 International Business Machines Corporation Apparatus and method for maintaining status flags and condition codes using a renaming technique in an out of order floating point execution unit
US5835698A (en) * 1996-09-20 1998-11-10 Novell, Inc. Unilaterally-controlled, time-insensitive, data-link recovery apparatus and method
US6094528A (en) * 1996-10-24 2000-07-25 Sun Microsystems, Inc. Method and apparatus for system building with a transactional interpreter
US6009505A (en) * 1996-12-02 1999-12-28 Compaq Computer Corp. System and method for routing one operand to arithmetic logic units from fixed register slots and another operand from any register slot
US5909572A (en) 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
US5893145A (en) * 1996-12-02 1999-04-06 Compaq Computer Corp. System and method for routing operands within partitions of a source register to partitions within a destination register
US5941938A (en) * 1996-12-02 1999-08-24 Compaq Computer Corp. System and method for performing an accumulate operation on one or more operands within a partitioned register
US6061521A (en) * 1996-12-02 2000-05-09 Compaq Computer Corp. Computer having multimedia operations executable as two distinct sets of operations within a single instruction cycle
US6035424A (en) * 1996-12-09 2000-03-07 International Business Machines Corporation Method and apparatus for tracking processing of a command
US5764971A (en) * 1996-12-11 1998-06-09 Industrial Technology Research Institute Method and apparatus for implementing precise interrupts in a pipelined data processing system
US5784606A (en) * 1996-12-16 1998-07-21 International Business Machines Corporation Method and system in a superscalar data processing system for the efficient handling of exceptions
US6098167A (en) * 1997-03-31 2000-08-01 International Business Machines Corporation Apparatus and method for fast unified interrupt recovery and branch recovery in processors supporting out-of-order execution
US5887161A (en) * 1997-03-31 1999-03-23 International Business Machines Corporation Issuing instructions in a processor supporting out-of-order execution
US20010037268A1 (en) * 1997-05-08 2001-11-01 Miller David S. Fully-automated system for tax reporting, payment and refund and system for accessing tax information
US6173432B1 (en) 1997-06-20 2001-01-09 Micron Technology, Inc. Method and apparatus for generating a sequence of clock signals
US5941977A (en) * 1997-06-25 1999-08-24 Sun Microsystems, Inc. Apparatus for handling register windows in an out-of-order processor
US6049868A (en) * 1997-06-25 2000-04-11 Sun Microsystems, Inc. Apparatus for delivering precise traps and interrupts in an out-of-order processor
US6052777A (en) * 1997-06-25 2000-04-18 Sun Microsystems, Inc. Method for delivering precise traps and interrupts in an out-of-order processor
US6263416B1 (en) * 1997-06-27 2001-07-17 Sun Microsystems, Inc. Method for reducing number of register file ports in a wide instruction issue processor
US6139200A (en) * 1997-06-30 2000-10-31 Sun Microsystems, Inc. Register resource allocation feedback
US5987598A (en) * 1997-07-07 1999-11-16 International Business Machines Corporation Method and system for tracking instruction progress within a data processing system
US6070235A (en) * 1997-07-14 2000-05-30 International Business Machines Corporation Data processing system and method for capturing history buffer data
US6317638B1 (en) * 1997-08-22 2001-11-13 Honeywell Inc. Multi-layer state machine for a hybrid real-time control system and method of operation thereof
JPH1196006A (ja) * 1997-09-19 1999-04-09 Hitachi Ltd 情報処理装置
US5961636A (en) * 1997-09-22 1999-10-05 International Business Machines Corporation Checkpoint table for selective instruction flushing in a speculative execution unit
US6061777A (en) * 1997-10-28 2000-05-09 International Business Machines Corporation Apparatus and method for reducing the number of rename registers required in the operation of a processor
US6195748B1 (en) 1997-11-26 2001-02-27 Compaq Computer Corporation Apparatus for sampling instruction execution information in a processor pipeline
US6442585B1 (en) 1997-11-26 2002-08-27 Compaq Computer Corporation Method for scheduling contexts based on statistics of memory system interactions in a computer system
US6163840A (en) * 1997-11-26 2000-12-19 Compaq Computer Corporation Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline
US5923872A (en) * 1997-11-26 1999-07-13 Digital Equipment Corporation Apparatus for sampling instruction operand or result values in a processor pipeline
US6549930B1 (en) 1997-11-26 2003-04-15 Compaq Computer Corporation Method for scheduling threads in a multithreaded processor
US6332178B1 (en) 1997-11-26 2001-12-18 Compaq Computer Corporation Method for estimating statistics of properties of memory system transactions
US6237059B1 (en) 1997-11-26 2001-05-22 Compaq Computer Corporation Method for estimating statistics of properties of memory system interactions among contexts in a computer system
US6175814B1 (en) 1997-11-26 2001-01-16 Compaq Computer Corporation Apparatus for determining the instantaneous average number of instructions processed
US6237073B1 (en) 1997-11-26 2001-05-22 Compaq Computer Corporation Method for providing virtual memory to physical memory page mapping in a computer operating system that randomly samples state information
US6374367B1 (en) 1997-11-26 2002-04-16 Compaq Computer Corporation Apparatus and method for monitoring a computer system to guide optimization
US6029225A (en) * 1997-12-16 2000-02-22 Hewlett-Packard Company Cache bank conflict avoidance and cache collision avoidance
US6625756B1 (en) * 1997-12-19 2003-09-23 Intel Corporation Replay mechanism for soft error recovery
US6047370A (en) * 1997-12-19 2000-04-04 Intel Corporation Control of processor pipeline movement through replay queue and pointer backup
US6205542B1 (en) 1997-12-24 2001-03-20 Intel Corporation Processor pipeline including replay
US6076153A (en) * 1997-12-24 2000-06-13 Intel Corporation Processor pipeline including partial replay
US6128722A (en) * 1998-02-13 2000-10-03 International Business Machines Corporation Data processing system having an apparatus for exception tracking during out-of-order operation and method therefor
US6148391A (en) * 1998-03-26 2000-11-14 Sun Microsystems, Inc. System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses
US5995960A (en) * 1998-04-08 1999-11-30 International Business Machines Corporaiton Method and system for improving efficiency of programs utilizing databases by exeuting scenarios based on recalled processed information
US6164841A (en) * 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6167504A (en) * 1998-07-24 2000-12-26 Sun Microsystems, Inc. Method, apparatus and computer program product for processing stack related exception traps
US6119223A (en) * 1998-07-31 2000-09-12 Advanced Micro Devices, Inc. Map unit having rapid misprediction recovery
US6237076B1 (en) * 1998-08-19 2001-05-22 International Business Machines Corporation Method for register renaming by copying a 32 bits instruction directly or indirectly to a 64 bits instruction
US6122727A (en) 1998-08-24 2000-09-19 Advanced Micro Devices, Inc. Symmetrical instructions queue for high clock frequency scheduling
US6212623B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Universal dependency vector/queue entry
US6202095B1 (en) * 1998-10-07 2001-03-13 International Business Machines Corporation Defining characteristics between processing systems
US6338147B1 (en) 1998-10-29 2002-01-08 International Business Machines Corporation Program products for performing checkpoint/restart of a parallel program
US6332200B1 (en) 1998-10-29 2001-12-18 International Business Machines Corporation Capturing and identifying a complete and consistent set of checkpoint files
US6332199B1 (en) 1998-10-29 2001-12-18 International Business Machines Corporation Restoring checkpointed processes including adjusting environment variables of the processes
US6401216B1 (en) 1998-10-29 2002-06-04 International Business Machines Corporation System of performing checkpoint/restart of a parallel program
US6256751B1 (en) 1998-10-29 2001-07-03 International Business Machines Corporation Restoring checkpointed processes without restoring attributes of external data referenced by the processes
US6393583B1 (en) 1998-10-29 2002-05-21 International Business Machines Corporation Method of performing checkpoint/restart of a parallel program
US6807624B1 (en) * 1998-12-17 2004-10-19 Fujitsu Limited Instruction control device and method therefor
US6571363B1 (en) * 1998-12-30 2003-05-27 Texas Instruments Incorporated Single event upset tolerant microprocessor architecture
US6266763B1 (en) * 1999-01-05 2001-07-24 Advanced Micro Devices, Inc. Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
US6738896B1 (en) * 1999-02-01 2004-05-18 Hewlett-Packard Development Company, L.P. Method and apparatus for determining availability of a queue which allows random insertion
AU763141B2 (en) * 1999-04-19 2003-07-17 Motorola Australia Pty Ltd A method of detecting illegal sequences of code execution
US6898696B1 (en) * 1999-06-14 2005-05-24 International Business Machines Corporation Method and system for efficiently restoring a processor's execution state following an interrupt caused by an interruptible instruction
CN1264087C (zh) * 1999-09-08 2006-07-12 关一 寄存器再命名方法
US6728865B1 (en) 1999-10-20 2004-04-27 Transmeta Corporation Pipeline replay support for unaligned memory operations
US6604188B1 (en) 1999-10-20 2003-08-05 Transmeta Corporation Pipeline replay support for multi-cycle operations wherein all VLIW instructions are flushed upon detection of a multi-cycle atom operation in a VLIW instruction
US6571265B1 (en) * 1999-10-29 2003-05-27 Intel Corporation Mechanism to detect IEEE underflow exceptions on speculative floating-point operations
US6615366B1 (en) * 1999-12-21 2003-09-02 Intel Corporation Microprocessor with dual execution core operable in high reliability mode
US6542984B1 (en) 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
EP1244962B1 (en) 2000-01-03 2003-10-08 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
US6622235B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
US6564315B1 (en) 2000-01-03 2003-05-13 Advanced Micro Devices, Inc. Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
US6609190B1 (en) * 2000-01-06 2003-08-19 International Business Machines Corporation Microprocessor with primary and secondary issue queue
EP1132813A3 (en) * 2000-02-29 2003-12-17 Fujitsu Limited Computer with high-speed context switching
JP2001326914A (ja) * 2000-03-08 2001-11-22 Sony Corp 電子情報内容配信処理システム、情報配信装置、情報処理装置及び電子情報内容配信処理方法
US6519730B1 (en) * 2000-03-16 2003-02-11 Fujitsu Limited Computer and error recovery method for the same
US6594821B1 (en) 2000-03-30 2003-07-15 Transmeta Corporation Translation consistency checking for modified target instructions by comparing to original copy
US6694427B1 (en) * 2000-04-20 2004-02-17 International Business Machines Corporation Method system and apparatus for instruction tracing with out of order processors
US7188232B1 (en) * 2000-05-03 2007-03-06 Choquette Jack H Pipelined processing with commit speculation staging buffer and load/store centric exception handling
US6968469B1 (en) 2000-06-16 2005-11-22 Transmeta Corporation System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored
GB0015222D0 (en) * 2000-06-21 2000-08-16 Money Controls Plc Bar code system
US6799268B1 (en) * 2000-06-30 2004-09-28 Intel Corporation Branch ordering buffer
US6829701B2 (en) * 2000-12-15 2004-12-07 Intel Corporation Watchpoint engine for a pipelined processor
US6823447B2 (en) * 2001-03-01 2004-11-23 International Business Machines Corporation Software hint to improve the branch target prediction accuracy
US6889316B2 (en) * 2001-03-28 2005-05-03 Intel Corporation Method and apparatus for restoring registers after cancelling a multi-cycle instruction
US7240186B2 (en) * 2001-07-16 2007-07-03 Hewlett-Packard Development Company, L.P. System and method to avoid resource contention in the presence of exceptions
US7269714B2 (en) 2001-09-24 2007-09-11 Broadcom Corporation Inhibiting of a co-issuing instruction in a processor having different pipeline lengths
US7203817B2 (en) * 2001-09-24 2007-04-10 Broadcom Corporation Power consumption reduction in a pipeline by stalling instruction issue on a load miss
US6976152B2 (en) * 2001-09-24 2005-12-13 Broadcom Corporation Comparing operands of instructions against a replay scoreboard to detect an instruction replay and copying a replay scoreboard to an issue scoreboard
US6959435B2 (en) * 2001-09-28 2005-10-25 Intel Corporation Compiler-directed speculative approach to resolve performance-degrading long latency events in an application
US20030088758A1 (en) * 2001-11-08 2003-05-08 Matthew Becker Methods and systems for determining valid microprocessor instructions
US6877085B2 (en) * 2001-11-30 2005-04-05 Broadcom Corporation Mechanism for processing speclative LL and SC instructions in a pipelined processor
JP4130076B2 (ja) * 2001-12-21 2008-08-06 富士通株式会社 データベース管理プログラムおよび記録媒体
US20040186982A9 (en) * 2002-02-06 2004-09-23 Matthew Becker Stalling Instructions in a pipelined microprocessor
US6959377B2 (en) * 2002-03-20 2005-10-25 Sun Microsystems, Inc. Method and system for managing registers
US7058877B2 (en) * 2002-05-14 2006-06-06 Sun Microsystems, Inc. Method and apparatus for providing error correction within a register file of a CPU
KR100459225B1 (ko) * 2002-06-29 2004-12-03 매그나칩 반도체 유한회사 프레임 구조 프로세서
US7143106B2 (en) * 2002-09-24 2006-11-28 International Business Machines Corporation Reclaiming resources in response to forced state transitions
US7130988B2 (en) * 2002-11-15 2006-10-31 Via-Cyrix, Inc. Status register update logic optimization
US7203821B2 (en) * 2003-01-08 2007-04-10 Sun Microsystems, Inc. Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
US7337444B2 (en) * 2003-01-09 2008-02-26 International Business Machines Corporation Method and apparatus for thread-safe handlers for checkpoints and restarts
JP3802038B2 (ja) * 2003-01-30 2006-07-26 富士通株式会社 情報処理装置
US7310723B1 (en) * 2003-04-02 2007-12-18 Transmeta Corporation Methods and systems employing a flag for deferring exception handling to a commit or rollback point
US7401207B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Apparatus and method for adjusting instruction thread priority in a multi-thread processor
US7360062B2 (en) * 2003-04-25 2008-04-15 International Business Machines Corporation Method and apparatus for selecting an instruction thread for processing in a multi-thread processor
US7401208B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Method and apparatus for randomizing instruction thread interleaving in a multi-thread processor
US7168027B2 (en) 2003-06-12 2007-01-23 Micron Technology, Inc. Dynamic synchronization of data capture on an optical or other high speed communications link
US7321964B2 (en) * 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US7487335B1 (en) 2003-10-14 2009-02-03 Sun Microsystems, Inc. Method and apparatus for accessing registers during deferred execution
US7114060B2 (en) * 2003-10-14 2006-09-26 Sun Microsystems, Inc. Selectively deferring instructions issued in program order utilizing a checkpoint and multiple deferral scheme
US7269875B1 (en) * 2003-11-19 2007-09-18 David Brian Grimes Cleaning apparatus
US7610226B1 (en) 2004-02-23 2009-10-27 Simplification, Llc System for tax data collection
US8065665B1 (en) * 2004-02-28 2011-11-22 Oracle America, Inc. Method and apparatus for correlating profile data
US20070006195A1 (en) * 2004-03-31 2007-01-04 Christof Braun Method and structure for explicit software control of data speculation
US7711928B2 (en) * 2004-03-31 2010-05-04 Oracle America, Inc. Method and structure for explicit software control using scoreboard status information
US7293160B2 (en) * 2004-06-14 2007-11-06 Sun Microsystems, Inc. Mechanism for eliminating the restart penalty when reissuing deferred instructions
US7555703B2 (en) * 2004-06-17 2009-06-30 Intel Corporation Method and apparatus for reducing false error detection in a microprocessor
US7263631B2 (en) * 2004-08-13 2007-08-28 Seakr Engineering, Incorporated Soft error detection and recovery
US7487337B2 (en) * 2004-09-30 2009-02-03 Intel Corporation Back-end renaming in a continual flow processor pipeline
US7742958B1 (en) 2004-11-08 2010-06-22 Hrb Tax Group, Inc. System and method for preparing a tax return using electronically distributed tax return data
US7496735B2 (en) * 2004-11-22 2009-02-24 Strandera Corporation Method and apparatus for incremental commitment to architectural state in a microprocessor
US7849450B1 (en) * 2005-01-28 2010-12-07 Intel Corporation Devices, methods and computer program products for reverse execution of a simulation
US7467325B2 (en) * 2005-02-10 2008-12-16 International Business Machines Corporation Processor instruction retry recovery
US7478276B2 (en) * 2005-02-10 2009-01-13 International Business Machines Corporation Method for checkpointing instruction groups with out-of-order floating point instructions in a multi-threaded processor
US7200742B2 (en) 2005-02-10 2007-04-03 International Business Machines Corporation System and method for creating precise exceptions
US7571304B2 (en) * 2005-03-18 2009-08-04 Sun Microsystems, Inc. Generation of multiple checkpoints in a processor that supports speculative execution
US7634641B2 (en) * 2005-03-18 2009-12-15 Sun Microsystems, Inc. Method and apparatus for using multiple threads to spectulatively execute instructions
US7409535B2 (en) * 2005-04-20 2008-08-05 International Business Machines Corporation Branch target prediction for multi-target branches by identifying a repeated pattern
JP4837305B2 (ja) * 2005-05-10 2011-12-14 ルネサスエレクトロニクス株式会社 マイクロプロセッサ及びマイクロプロセッサの制御方法
US7275223B2 (en) * 2005-05-18 2007-09-25 Texas Instruments Incorporated Facilitating high-level validation of integrated circuits in parallel with development of blocks in a hierarchical design approach
US7900193B1 (en) * 2005-05-25 2011-03-01 Parasoft Corporation System and method for detecting defects in a computer program using data and control flow analysis
US7409589B2 (en) * 2005-05-27 2008-08-05 International Business Machines Corporation Method and apparatus for reducing number of cycles required to checkpoint instructions in a multi-threaded processor
US7882339B2 (en) * 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US8413162B1 (en) 2005-06-28 2013-04-02 Guillermo J. Rozas Multi-threading based on rollback
JP2007034731A (ja) * 2005-07-27 2007-02-08 Toshiba Corp パイプラインプロセッサ
US7373486B2 (en) * 2005-08-29 2008-05-13 P.A. Semi, Inc. Partially decoded register renamer
US20070050610A1 (en) * 2005-08-31 2007-03-01 Texas Instruments Incorporated Centralized resolution of conditional instructions
US7395418B1 (en) * 2005-09-22 2008-07-01 Sun Microsystems, Inc. Using a transactional execution mechanism to free up processor resources used by a busy-waiting thread
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US8019944B1 (en) 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US7747822B1 (en) 2005-10-31 2010-06-29 Oracle America Inc. Maintaining memory coherency with a trace cache
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US7814298B1 (en) 2005-09-28 2010-10-12 Oracle America, Inc. Promoting and appending traces in an instruction processing circuit based upon a bias value
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US7783863B1 (en) 2005-09-28 2010-08-24 Oracle America, Inc. Graceful degradation in a trace-based processor
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7779307B1 (en) * 2005-09-28 2010-08-17 Oracle America, Inc. Memory ordering queue tightly coupled with a versioning cache circuit
US8037285B1 (en) * 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US7568089B1 (en) * 2005-10-26 2009-07-28 Sun Microsystems, Inc. Flag management in processors enabled for speculative execution of micro-operation traces
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US7546420B1 (en) 2005-09-28 2009-06-09 Sun Microsystems, Inc. Efficient trace cache management during self-modifying code processing
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US7953933B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Instruction cache, decoder circuit, basic block cache circuit and multi-block cache circuit
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7849292B1 (en) 2005-09-28 2010-12-07 Oracle America, Inc. Flag optimization of a trace
US8051247B1 (en) 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US7996662B2 (en) * 2005-11-17 2011-08-09 Apple Inc. Floating point status/control register encodings for speculative register field
US7797517B1 (en) 2005-11-18 2010-09-14 Oracle America, Inc. Trace optimization via fusing operations of a target architecture operation set
US7681019B1 (en) 2005-11-18 2010-03-16 Sun Microsystems, Inc. Executing functions determined via a collection of operations from translated instructions
US20070168591A1 (en) * 2005-12-08 2007-07-19 Inter-Tel, Inc. System and method for validating codec software
RU2305313C1 (ru) * 2005-12-27 2007-08-27 Яков Аркадьевич Горбадей Способ я.а. горбадея обеспечения надежной работы программного вычислительного средства
US7725682B2 (en) * 2006-01-10 2010-05-25 International Business Machines Corporation Method and apparatus for sharing storage and execution resources between architectural units in a microprocessor using a polymorphic function unit
US20070226471A1 (en) * 2006-03-13 2007-09-27 Arm Limited Data processing apparatus
US8010774B2 (en) * 2006-03-13 2011-08-30 Arm Limited Breakpointing on register access events or I/O port access events
JP4961781B2 (ja) * 2006-03-14 2012-06-27 ソニー株式会社 情報処理装置、その起動方法およびプログラム
US7904789B1 (en) * 2006-03-31 2011-03-08 Guillermo Rozas Techniques for detecting and correcting errors in a memory device
WO2007143278A2 (en) 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US20070294693A1 (en) * 2006-06-16 2007-12-20 Microsoft Corporation Scheduling thread execution among a plurality of processors based on evaluation of memory access data
US8301890B2 (en) * 2006-08-10 2012-10-30 Inside Secure Software execution randomization
US20080077777A1 (en) * 2006-09-25 2008-03-27 Arm Limited Register renaming for instructions having unresolved condition codes
US20080077782A1 (en) * 2006-09-26 2008-03-27 Arm Limited Restoring a register renaming table within a processor following an exception
US8010745B1 (en) 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
US7594079B2 (en) * 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
US9946547B2 (en) 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
US7475224B2 (en) * 2007-01-03 2009-01-06 International Business Machines Corporation Register map unit supporting mapping of multiple register specifier classes
US8341352B2 (en) * 2007-04-17 2012-12-25 International Business Machines Corporation Checkpointed tag prefetcher
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US8447962B2 (en) * 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US10387151B2 (en) 2007-12-31 2019-08-20 Intel Corporation Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks
JP5166955B2 (ja) * 2008-04-24 2013-03-21 キヤノン株式会社 情報処理装置、情報処理方法、及び、情報処理プログラム
US7921280B2 (en) * 2008-06-27 2011-04-05 Intel Corporation Selectively powered retirement unit using a partitioned allocation array and a partitioned writeback array
US20100064061A1 (en) * 2008-09-05 2010-03-11 Apple Inc. Providing substantially immediate action in response to input event
US8959277B2 (en) * 2008-12-12 2015-02-17 Oracle America, Inc. Facilitating gated stores without data bypass
US20100153776A1 (en) * 2008-12-12 2010-06-17 Sun Microsystems, Inc. Using safepoints to provide precise exception semantics for a virtual machine
CN101727312B (zh) * 2009-01-22 2013-01-09 杭州中天微系统有限公司 一种支持自动纠错功能的返回地址栈实现方法
US20110066830A1 (en) * 2009-09-11 2011-03-17 Andrew Wolfe Cache prefill on thread migration
US8881157B2 (en) * 2009-09-11 2014-11-04 Empire Technology Development Llc Allocating threads to cores based on threads falling behind thread completion target deadline
US9189282B2 (en) * 2009-04-21 2015-11-17 Empire Technology Development Llc Thread-to-core mapping based on thread deadline, thread demand, and hardware characteristics data collected by a performance counter
US9569270B2 (en) * 2009-04-21 2017-02-14 Empire Technology Development Llc Mapping thread phases onto heterogeneous cores based on execution characteristics and cache line eviction counts
US8694974B2 (en) * 2009-04-29 2014-04-08 Hewlett-Packard Development Company, L.P. Load-checking atomic section
US20100332810A1 (en) * 2009-06-30 2010-12-30 Tao Wang Reconfigurable Functional Unit Having Instruction Context Storage Circuitry To Support Speculative Execution of Instructions
US20110047358A1 (en) * 2009-08-19 2011-02-24 International Business Machines Corporation In-Data Path Tracking of Floating Point Exceptions and Store-Based Exception Indication
US8458684B2 (en) * 2009-08-19 2013-06-04 International Business Machines Corporation Insertion of operation-and-indicate instructions for optimized SIMD code
US8832403B2 (en) 2009-11-13 2014-09-09 International Business Machines Corporation Generation-based memory synchronization in a multiprocessor system with weakly consistent memory accesses
US8549267B2 (en) 2009-12-22 2013-10-01 Intel Corporation Methods and apparatus to manage partial-commit checkpoints with fixup support
US10175990B2 (en) 2009-12-22 2019-01-08 Intel Corporation Gathering and scattering multiple data elements
US8739164B2 (en) * 2010-02-24 2014-05-27 Advanced Micro Devices, Inc. Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof
GB2478733B (en) * 2010-03-15 2013-08-14 Advanced Risc Mach Ltd Apparatus and method for handling exception events
US8578355B1 (en) * 2010-03-19 2013-11-05 Google Inc. Scenario based optimization
US20110238962A1 (en) * 2010-03-23 2011-09-29 International Business Machines Corporation Register Checkpointing for Speculative Modes of Execution in Out-of-Order Processors
US8688963B2 (en) * 2010-04-22 2014-04-01 Oracle International Corporation Checkpoint allocation in a speculative processor
US8209769B1 (en) 2010-05-20 2012-07-03 The United States Of America As Represented By The Secretary Of The Navy Hands free bomb suit tool carrier
KR101669989B1 (ko) 2010-05-27 2016-10-28 삼성전자주식회사 파이프라인 프로세서 및 이퀄 모델 보존 방법
US8578139B2 (en) * 2010-08-05 2013-11-05 Arm Limited Checkpointing long latency instruction as fake branch in branch prediction mechanism
WO2012037491A2 (en) 2010-09-17 2012-03-22 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
EP2668565B1 (en) 2011-01-27 2019-11-06 Intel Corporation Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
CN103635875B (zh) 2011-03-25 2018-02-16 英特尔公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
KR101620676B1 (ko) 2011-03-25 2016-05-23 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
US9063747B2 (en) 2011-04-28 2015-06-23 Freescale Semiconductor, Inc. Microprocessor systems and methods for a combined register file and checkpoint repair register
WO2012162189A1 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. An interconnect structure to support the execution of instruction sequences by a plurality of engines
TWI666551B (zh) 2011-05-20 2019-07-21 美商英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
US8677189B2 (en) * 2011-11-16 2014-03-18 GM Global Technology Operations LLC Recovering from stack corruption faults in embedded software systems
EP2783280B1 (en) 2011-11-22 2019-09-11 Intel Corporation An accelerated code optimizer for a multiengine microprocessor
CN104040491B (zh) 2011-11-22 2018-06-12 英特尔公司 微处理器加速的代码优化器
US20130173885A1 (en) * 2011-12-30 2013-07-04 Advanced Micro Devices, Inc. Processor and Methods of Adjusting a Branch Misprediction Recovery Mode
US9053227B2 (en) * 2012-03-09 2015-06-09 Microsoft Technology Licensing, Llc Concurrent assertion
US9317285B2 (en) 2012-04-30 2016-04-19 Apple Inc. Instruction set architecture mode dependent sub-size access of register with associated status indication
WO2013180738A1 (en) 2012-06-02 2013-12-05 Intel Corporation Scatter using index array and finite state machine
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US9146739B2 (en) * 2012-06-14 2015-09-29 International Business Machines Corporation Branch prediction preloading
US9262170B2 (en) * 2012-07-26 2016-02-16 International Business Machines Corporation Out-of-order checkpoint reclamation in a checkpoint processing and recovery core microarchitecture
US9672044B2 (en) * 2012-08-01 2017-06-06 Nxp Usa, Inc. Space efficient checkpoint facility and technique for processor with integrally indexed register mapping and free-list arrays
US9069701B2 (en) 2012-12-11 2015-06-30 International Business Machines Corporation Virtual machine failover
US9286069B2 (en) * 2012-12-21 2016-03-15 Arm Limited Dynamic write port re-arbitration
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
WO2014150941A1 (en) * 2013-03-15 2014-09-25 Soft Machines, Inc. A method for executing blocks of instructions using a microprocessor architecture having a register view, source view, instruction view, and a plurality of register templates
US10198265B2 (en) 2013-03-15 2019-02-05 Intel Corporation Microprocessor for gating a load operation based on entries of a prediction table
US9627038B2 (en) 2013-03-15 2017-04-18 Intel Corporation Multiport memory cell having improved density area
US9582322B2 (en) * 2013-03-15 2017-02-28 Soft Machines Inc. Method and apparatus to avoid deadlock during instruction scheduling using dynamic port remapping
US9223714B2 (en) 2013-03-15 2015-12-29 Intel Corporation Instruction boundary prediction for variable length instruction set
US10467010B2 (en) 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
KR101708591B1 (ko) 2013-03-15 2017-02-20 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9436476B2 (en) 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation
US9606935B2 (en) 2013-03-15 2017-03-28 Intel Corporation Method and apparatus for preventing non-temporal entries from polluting small structures using a transient buffer
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US20140281116A1 (en) 2013-03-15 2014-09-18 Soft Machines, Inc. Method and Apparatus to Speed up the Load Access and Data Return Speed Path Using Early Lower Address Bits
WO2014151652A1 (en) * 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US9535697B2 (en) * 2013-07-01 2017-01-03 Oracle International Corporation Register window performance via lazy register fills
GB2510655B (en) * 2013-07-31 2015-02-25 Imagination Tech Ltd Prioritizing instructions based on type
US20150128117A1 (en) * 2013-11-07 2015-05-07 Netronome Systems, Inc. Linker that statically allocates non-memory resources at link time
US9639369B2 (en) 2013-11-11 2017-05-02 Apple Inc. Split register file for operands of different sizes
US10235232B2 (en) 2014-02-10 2019-03-19 Via Alliance Semiconductor Co., Ltd Processor with approximate computing execution unit that includes an approximation control register having an approximation mode flag, an approximation amount, and an error threshold, where the approximation control register is writable by an instruction set instruction
US9588845B2 (en) * 2014-02-10 2017-03-07 Via Alliance Semiconductor Co., Ltd. Processor that recovers from excessive approximate computing error
CN106030518B (zh) * 2014-03-27 2019-03-26 英特尔公司 用于整理和退出存储的处理器、方法、系统和装置
WO2015175555A1 (en) 2014-05-12 2015-11-19 Soft Machines, Inc. Method and apparatus for providing hardware support for self-modifying code
US9870328B2 (en) * 2014-11-14 2018-01-16 Cavium, Inc. Managing buffered communication between cores
US11977891B2 (en) * 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
EP3350690B1 (en) * 2015-09-19 2022-11-09 Microsoft Technology Licensing, LLC Implicit program order
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US9779028B1 (en) 2016-04-01 2017-10-03 Cavium, Inc. Managing translation invalidation
JP6717026B2 (ja) * 2016-04-19 2020-07-01 オムロン株式会社 制御装置、中継装置、制御装置の制御方法、中継装置の制御方法、制御プログラム、および記録媒体
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
US10127121B2 (en) * 2016-06-03 2018-11-13 International Business Machines Corporation Operation of a multi-slice processor implementing adaptive failure state capture
CN107515866B (zh) * 2016-06-15 2021-01-29 阿里巴巴集团控股有限公司 一种数据操作方法、装置和系统
US20170371660A1 (en) * 2016-06-23 2017-12-28 Microsoft Technology Licensing, Llc Load-store queue for multiple processor cores
US10127074B2 (en) * 2017-01-27 2018-11-13 Futurewei Technologies, Inc. Transaction identification synchronization
US10572265B2 (en) 2017-04-18 2020-02-25 International Business Machines Corporation Selecting register restoration or register reloading
US10489382B2 (en) 2017-04-18 2019-11-26 International Business Machines Corporation Register restoration invalidation based on a context switch
US10552164B2 (en) 2017-04-18 2020-02-04 International Business Machines Corporation Sharing snapshots between restoration and recovery
US10540184B2 (en) 2017-04-18 2020-01-21 International Business Machines Corporation Coalescing store instructions for restoration
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
US10649785B2 (en) 2017-04-18 2020-05-12 International Business Machines Corporation Tracking changes to memory via check and recovery
US10564977B2 (en) 2017-04-18 2020-02-18 International Business Machines Corporation Selective register allocation
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10838733B2 (en) * 2017-04-18 2020-11-17 International Business Machines Corporation Register context restoration based on rename register recovery
US10831626B2 (en) * 2017-10-19 2020-11-10 International Business Machines Corporation Method to sort partially good cores for specific operating system usage
KR102022480B1 (ko) * 2017-11-29 2019-09-18 연세대학교 산학협력단 실시간 시스템 정보를 이용한 고성능 컴퓨팅 시스템의 체크포인트 빈도 조절 방법 및 장치
US10915402B2 (en) * 2018-09-12 2021-02-09 Apple Inc. Software fault monitoring
JP7225745B2 (ja) 2018-12-06 2023-02-21 富士通株式会社 演算処理装置および演算処理装置の制御方法
US11068267B2 (en) * 2019-04-24 2021-07-20 International Business Machines Corporation High bandwidth logical register flush recovery
CN111857825A (zh) * 2020-07-20 2020-10-30 北京百度网讯科技有限公司 指令执行方法、装置、电子设备和计算机可读存储介质
TWI748914B (zh) * 2021-04-15 2021-12-01 瑞昱半導體股份有限公司 阻抗控制電路

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5127093A (en) * 1989-01-17 1992-06-30 Cray Research Inc. Computer look-ahead instruction issue control
US5150468A (en) * 1989-06-30 1992-09-22 Bull Hn Information Systems Inc. State controlled instruction logic management apparatus included in a pipelined processing unit
US5235700A (en) * 1990-02-08 1993-08-10 International Business Machines Corporation Checkpointing mechanism for fault-tolerant systems
US5251306A (en) * 1990-01-16 1993-10-05 Advanced Micro Devices, Inc. Apparatus for controlling execution of a program in a computing device
US5269017A (en) * 1991-08-29 1993-12-07 International Business Machines Corporation Type 1, 2 and 3 retry and checkpointing

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4703481A (en) * 1985-08-16 1987-10-27 Hewlett-Packard Company Method and apparatus for fault recovery within a computing system
US5021945A (en) * 1985-10-31 1991-06-04 Mcc Development, Ltd. Parallel processor system for processing natural concurrencies and method therefor
US4847755A (en) * 1985-10-31 1989-07-11 Mcc Development, Ltd. Parallel processing method and apparatus for increasing processing throughout by parallel processing low level instructions having natural concurrencies
DE3735828C2 (de) * 1986-10-24 1994-11-10 Hitachi Ltd Verfahren zur Wiederaufnahme der Ausführung von Anweisungen nach einer Unterbrechung in einer mikroprogrammgesteuerten Datenverarbeitungsvorrichtung
US4956767A (en) * 1988-02-23 1990-09-11 Stellar Computer, Inc. Data processing system with model for status accumulating operation by simulating sequence of arithmetic steps performed by arithmetic processor
US4903264A (en) * 1988-04-18 1990-02-20 Motorola, Inc. Method and apparatus for handling out of order exceptions in a pipelined data unit
US4893233A (en) * 1988-04-18 1990-01-09 Motorola, Inc. Method and apparatus for dynamically controlling each stage of a multi-stage pipelined data unit
US5003462A (en) * 1988-05-31 1991-03-26 International Business Machines Corporation Apparatus and method for implementing precise interrupts on a pipelined processor with multiple functional units with separate address translation interrupt means
US4912707A (en) * 1988-08-23 1990-03-27 International Business Machines Corporation Checkpoint retry mechanism
EP0378415A3 (en) * 1989-01-13 1991-09-25 International Business Machines Corporation Multiple instruction dispatch mechanism
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5093908A (en) * 1989-04-17 1992-03-03 International Business Machines Corporation Method and apparatus for executing instructions in a single sequential instruction stream in a main processor and a coprocessor
JPH02287858A (ja) * 1989-04-28 1990-11-27 Toshiba Corp 分散処理システムのリスタート方式
US5075844A (en) * 1989-05-24 1991-12-24 Tandem Computers Incorporated Paired instruction processor precise exception handling mechanism
US5053987A (en) * 1989-11-02 1991-10-01 Zoran Corporation Arithmetic unit in a vector signal processor using pipelined computational blocks
US5193206A (en) * 1989-12-27 1993-03-09 Motorola, Inc. Reduce instruction set microprocessor
AU629007B2 (en) * 1989-12-29 1992-09-24 Sun Microsystems, Inc. Apparatus for accelerating store operations in a risc computer
US5271013A (en) * 1990-05-09 1993-12-14 Unisys Corporation Fault tolerant computer system
US5261071A (en) * 1991-03-21 1993-11-09 Control Data System, Inc. Dual pipe cache memory with out-of-order issue capability
US5355457A (en) * 1991-05-21 1994-10-11 Motorola, Inc. Data processor for performing simultaneous instruction retirement and backtracking
WO1993001547A1 (en) * 1991-07-08 1993-01-21 Seiko Epson Corporation Risc microprocessor architecture implementing fast trap and exception state
EP0529303A3 (en) * 1991-08-29 1993-09-22 International Business Machines Corporation Checkpoint synchronization with instruction overlap enabled
US5313647A (en) * 1991-09-20 1994-05-17 Kendall Square Research Corporation Digital data processor with improved checkpointing and forking
JP2634343B2 (ja) * 1991-10-28 1997-07-23 信越化学工業株式会社 半導体ウェーハの保持方法
US5511172A (en) * 1991-11-15 1996-04-23 Matsushita Electric Co. Ind, Ltd. Speculative execution processor
WO1993020505A2 (en) * 1992-03-31 1993-10-14 Seiko Epson Corporation Superscalar risc instruction scheduling
US5479616A (en) * 1992-04-03 1995-12-26 Cyrix Corporation Exception handling for prefetched instruction bytes using valid bits to identify instructions that will cause an exception
KR950701437A (ko) * 1992-05-01 1995-03-23 요시오 야마자끼 슈퍼스칼라 마이크로프로세서에서의 명령어 회수를 위한 시스템 및 방법
US5313634A (en) * 1992-07-28 1994-05-17 International Business Machines Corporation Computer system branch prediction of subroutine returns
DE69330889T2 (de) * 1992-12-31 2002-03-28 Seiko Epson Corp System und Verfahren zur Änderung der Namen von Registern
US5694564A (en) * 1993-01-04 1997-12-02 Motorola, Inc. Data processing system a method for performing register renaming having back-up capability
US5428807A (en) * 1993-06-17 1995-06-27 Digital Equipment Corporation Method and apparatus for propagating exception conditions of a computer system
US5421022A (en) * 1993-06-17 1995-05-30 Digital Equipment Corporation Apparatus and method for speculatively executing instructions in a computer system
US5471598A (en) * 1993-10-18 1995-11-28 Cyrix Corporation Data dependency detection and handling in a microprocessor with write buffer
US5463745A (en) * 1993-12-22 1995-10-31 Intel Corporation Methods and apparatus for determining the next instruction pointer in an out-of-order execution computer system
US5751985A (en) * 1995-02-14 1998-05-12 Hal Computer Systems, Inc. Processor structure and method for tracking instruction status to maintain precise state

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5127093A (en) * 1989-01-17 1992-06-30 Cray Research Inc. Computer look-ahead instruction issue control
US5150468A (en) * 1989-06-30 1992-09-22 Bull Hn Information Systems Inc. State controlled instruction logic management apparatus included in a pipelined processing unit
US5251306A (en) * 1990-01-16 1993-10-05 Advanced Micro Devices, Inc. Apparatus for controlling execution of a program in a computing device
US5235700A (en) * 1990-02-08 1993-08-10 International Business Machines Corporation Checkpointing mechanism for fault-tolerant systems
US5269017A (en) * 1991-08-29 1993-12-07 International Business Machines Corporation Type 1, 2 and 3 retry and checkpointing

Also Published As

Publication number Publication date
US5673408A (en) 1997-09-30
US5651124A (en) 1997-07-22
US5644742A (en) 1997-07-01
JP5018728B2 (ja) 2012-09-05
KR19980702203A (ko) 1998-07-15
US5673426A (en) 1997-09-30
US5655115A (en) 1997-08-05
US5659721A (en) 1997-08-19
US5751985A (en) 1998-05-12
US5649136A (en) 1997-07-15
JP2009076083A (ja) 2009-04-09
US5966530A (en) 1999-10-12

Similar Documents

Publication Publication Date Title
KR100425805B1 (ko) 고성능투기적실행프로세서를위한구조및방법
JP4142690B2 (ja) 特殊機能を提供する高性能投機的実行プロセッサの構造及び方法
EP0638183B1 (en) A system and method for retiring instructions in a superscalar microprocessor
US5826055A (en) System and method for retiring instructions in a superscalar microprocessor
KR100388947B1 (ko) 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서
EP0751458B1 (en) Method and system for tracking resource allocation within a processor
US20090132854A1 (en) Method and apparatus to launch write queue read data in a microprocessor recovery unit
GB2538764A (en) Register renaming
GB2538766A (en) Register renaming
US5943494A (en) Method and system for processing multiple branch instructions that write to count and link registers

Legal Events

Date Code Title Description
N231 Notification of change of applicant
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: 20120302

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20130304

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee