KR19990064093A - Integrated function scheduler for irregular execution in superscalar processors - Google Patents

Integrated function scheduler for irregular execution in superscalar processors Download PDF

Info

Publication number
KR19990064093A
KR19990064093A KR1019980702572A KR19980702572A KR19990064093A KR 19990064093 A KR19990064093 A KR 19990064093A KR 1019980702572 A KR1019980702572 A KR 1019980702572A KR 19980702572 A KR19980702572 A KR 19980702572A KR 19990064093 A KR19990064093 A KR 19990064093A
Authority
KR
South Korea
Prior art keywords
scheduler
execution
operand
entry
column
Prior art date
Application number
KR1019980702572A
Other languages
Korean (ko)
Other versions
KR100459152B1 (en
Inventor
존 지. 페이버
에이머스 벤-메이어
워렌 지. 스태플리튼
Original Assignee
어드밴스트 마이크로 디바이시즈 인코퍼레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US08/649,243 external-priority patent/US5884059A/en
Application filed by 어드밴스트 마이크로 디바이시즈 인코퍼레이티드 filed Critical 어드밴스트 마이크로 디바이시즈 인코퍼레이티드
Priority claimed from PCT/US1996/015743 external-priority patent/WO1997013201A1/en
Publication of KR19990064093A publication Critical patent/KR19990064093A/en
Application granted granted Critical
Publication of KR100459152B1 publication Critical patent/KR100459152B1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

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

Abstract

수퍼스칼라 프로세서(200)는 비규칙적 실행을 위한 연산을 선택하는 스케쥴러(280)를 포함하고, 스케쥴러(280)는 연산에 대응하는 엔트리(540)로 분할되는 제어 논리 및 저장을 포함하며, 실행을 위해 요구되고 결과가 수행될 때까지 연산의 결과를 유지하는 레코더 버퍼로서 오퍼랜드를 제공하기 위해 병렬 파이프라인 실행을 위한 실행 유닛(251 내지 257)으로 연산을 발생하도록 엔트리를 사용하고, 실행 유닛(251 내지 257)과 강하게 연결되며, 파이프라인 병목을 최소화하고 실행 유닛(251 내지 257) 안으로 그리고 밖으로 유지하는 폭넓은 병렬 경로를 제공하며, 연산의 실행에 요구되는 모든 오퍼랜드들이 유효한 경우를 결정하기 위해 엔트리를 모니터하고 실행 유닛(251 내지 257)으로 요구된 오퍼랜드를 제공하며, 오퍼랜드는 레지스터 파일(290), 스케쥴러 엔트리, 또는 실행 유닛(251 내지 257)으로부터 얻어질 수 있고, 스캔 체인(530,532,534,536,538)은 엔트리를 함께 링크하며 실행을 위한 연산 및 오퍼랜드를 식별하는 것을 특징으로 한다.The superscalar processor 200 includes a scheduler 280 that selects an operation for irregular execution, the scheduler 280 includes control logic and storage that is divided into entries 540 corresponding to the operation, and executes the execution. Use an entry to generate an operation to execution units 251 to 257 for parallel pipelined execution to provide an operand as a recorder buffer that is required for the purpose and maintains the result of the operation until the result is performed. To 257, provides a wide parallel path that minimizes pipeline bottlenecks and keeps in and out of execution units 251 to 257, and enters entries to determine when all operands required for the execution of the operation are valid. Monitors and provides the requested operands to execution units 251 through 257, the operands being in register file 290, scheduler en Li, or execution units can be obtained, the scan chain (530,532,534,536,538) from (251 to 257) is characterized in that the link with the entry identifies the operation and the operand for execution.

Description

수퍼스칼라 프로세서에서의 비규칙적 실행을 위한 통합된 다기능 연산 스케쥴러Integrated multifunction computation scheduler for irregular execution on superscalar processors

일반적인 컴퓨터 프로그램은 컴파일되거나 또는 어셈블될 때 프로세서가 실행하는 기계 명령 또는 연산의 시퀀스를 생성하는 명령어 리스트가 된다. 연산은 컴퓨터 프로그램의 논리에 의해 정의된 프로그램 순서를 갖고, 일반적으로 프로그램 순서대로 차례로 실행하려고 한다. 스칼라 프로세서는 다음 연산을 완료하기전에 스칼라 프로세서가 하나의 연산을 완료하도록 제한하는 프로그램 순서로 연산을 실행한다. 수퍼스칼라 프로세서는 실행을 위해 동시에 작동하고 동시에 다중 연산을 완료하는 다수의 실행 유닛을 포함한다. 따라서 수퍼스칼라 프로세서는 스칼라 프로세서가 이상적으로 사이클당 하나의 연산을 완료하는 동안 클럭 사이클당 다중 연산을 완료할 수 있기 때문에 동일한 클럭 속도에서 작동하는 스칼라 프로세서보다 빠를 수 있다.A typical computer program is a list of instructions that produce a sequence of machine instructions or operations that the processor executes when compiled or assembled. The operations have a program order defined by the logic of the computer program, and generally try to execute them in program order. The scalar processor executes the operations in program order, which limits the scalar processor to complete one operation before completing the next operation. The superscalar processor includes a number of execution units that operate simultaneously for execution and complete multiple operations at the same time. Thus, a superscalar processor can be faster than a scalar processor operating at the same clock speed, since the scalar processor can ideally complete multiple operations per clock cycle while the processor completes one operation per cycle.

일반적으로 수퍼스칼라 프로세서는 연산이 동시에 실행될 수 있도록 연산의 실행을 스케쥴하고 정상적인 프로그램 순서를 벗어나 완료한다. 한 연산이 컴퓨터 프로그램의 논리가 프로그램내 제 1 연산이 제 2 연산전에 실행되기를 요구하는 또다른 연산에 종속될 수 있기 때문에 비규칙적 실행에서 문제가 발생한다. 예를 들어, 연산이 때때로 분기 연산의 결과에 종속적으로 실행되어야 하는 경우이다. 프로세서는 종종 분기 연산의 실행전에 분기 연산의 결과를 예언하고, 예언에 기초하여 연산의 실행을 계속한다. 분기 예언은 정확하지 않을 수 있고 그래서 잘못된 연산이 실행되기 때문에 실행은 심사숙고되어야 한다. 또한, 많은 컴퓨터들은 연산이 에러, 인터럽트, 또는 트랩을 생성하기 전, 또는 후에 시스템의 상태가 알려지기를 요구한다; 그러나 연산이 비규칙적으로 실행되는 경우, 프로그램내 에러에 따른 연산은 에러가 발생하기전에 실행완료되었을 수 있다. 따라서 프로세서는 실행되어서는 안되는 연산을 하지 않을 수 있어야 하고, 에러에 따른 시스템의 상태를 구성할 수 있어야만 한다.In general, a superscalar processor schedules the execution of an operation so that the operation can be executed concurrently and completes it outside of normal program order. Problems arise in irregular execution because one operation may depend on another operation in which the logic of the computer program requires that the first operation in the program be executed before the second operation. For example, an operation sometimes needs to be executed dependent on the result of a branch operation. The processor often predicts the result of the branch operation before executing the branch operation and continues execution of the operation based on the prediction. Branch predictions may not be accurate, so execution should be contemplated because wrong operations are performed. In addition, many computers require that the state of the system be known before or after the operation generates an error, interrupt, or trap; However, if the operation is performed irregularly, the operation due to an error in the program may have been completed before the error occurred. Thus, the processor must be able to avoid operations that should not be executed and be able to configure the state of the system in response to errors.

수퍼스칼라 구조는 연산을 스케쥴하기 위해 일부 충돌하는 목표를 성취하려고 시도한다. 하나의 목적은 프로그램의 완료에 실제로 요구되는 연산의 동시 실행을 최대화하도록 효율적으로 스케쥴하는 것이다. 또다른 목적은 복잡성이 확실한 에러 없는 디자인을 제공하는데 있어 어려움을 증가시키고 회로 크기 및 비용을 증가시키기 때문에 스케쥴 회로가 복잡해서는 안된다는 것이다. 또한 또다른 목적은 프로세서가 높은 클럭율로 작동할 수 있도록 신속히 스케쥴하는 것이다. 이러한 목적을 실현하는 스케쥴링 회로가 요구된다.Superscalar structures attempt to achieve some conflicting goals in order to schedule operations. One purpose is to efficiently schedule to maximize the concurrent execution of the operations actually required to complete the program. Another goal is that the schedule circuit should not be complicated because it increases the difficulty and provides circuit size and cost in providing a well-defined, error-free design. Another goal is to quickly schedule the processor to run at high clock rates. There is a need for a scheduling circuit that realizes this purpose.

본 발명은 디지털 프로세서 시스템에 관한 것으로서, 특히 프로세서 성능을 최대화하기 위한 연산의 실행 순서 제어 방법 및 회로에 관한 것이다.TECHNICAL FIELD The present invention relates to digital processor systems, and more particularly, to a method and circuit for controlling execution order of operations for maximizing processor performance.

도 1은 본 발명의 한 실시예에 따른 프로세서를 포함하고 있는 컴퓨터 시스템의 블록 다이어그램;1 is a block diagram of a computer system including a processor in accordance with one embodiment of the present invention;

도 2는 본 발명의 한 실시예에 따른 프로세서;2 is a processor in accordance with one embodiment of the present invention;

도 3은 본 발명의 한 실시예에 따른 주문 이외의 엔진에 의해 실행된 RISC 명령을 위한 포맷 예의 설명도;3 is an explanatory diagram of a format example for RISC instructions executed by an engine other than an order according to an embodiment of the present invention;

도 4A 내지 도 4D는 본 발명의 한 실시예의 RISC 동작의 4가지 타입을 위한 파이프라인;4A-4D are pipelines for four types of RISC operation in one embodiment of the present invention;

도 5는 본 발명의 한 실시예에 따른 스케쥴러;5 is a scheduler according to an embodiment of the present invention;

도 6은 본 발명의 한 실시예에 따른 스케쥴러 기억장치 일부분의 회로 다이어그램;6 is a circuit diagram of a portion of a scheduler storage device in accordance with one embodiment of the present invention;

도 7은 도 5에 따른 스케쥴러에 저장된 동작 및 Op 쿼드(Quad)용 필드를 위한 포맷 예의 설명도;7 is an explanatory diagram of an example of a format for an operation and an field for an op quad stored in the scheduler according to FIG. 5;

도 8A 및 도 8B는 빠른 선택을 위해 룩-어헤드(look-ahead)를 사용한 스캔 체인의 설명도;8A and 8B are explanatory views of a scan chain using a look-ahead for quick selection;

도 9A 내지 도 9C는 제2 실행 유니트를 위한 동작의 빠른 선택을 위해 룩-어레드를 사용한 스캔 체인의 설명도;9A-9C are explanatory diagrams of scan chains using look-threads for quick selection of operations for a second execution unit;

도 10은 실행 유닛과 도 5의 스케쥴러 사이의 인터페이스의 블록 다이어그램; 및10 is a block diagram of an interface between an execution unit and the scheduler of FIG. 5; And

도 11 내지 도 11C는 본 발명의 처리 시스템의 블록 다이어그램이다.11-11C are block diagrams of processing systems of the present invention.

비슷하거나 동일한 항을 나타내는 다른 그림들에게 같은 참조번호를 사용하였다.The same reference numbers have been used for different figures representing similar or identical terms.

본 발명에 따르면, 비규칙적 실행 엔진은 동시에 연산할 수 있는 실행 유닛의 세트 및 실행 유닛으로 연산을 급송하는 스케쥴러를 포함한다. 스케쥴러는 실행될 연산에 대응하는 엔트리를 포함한다. 각각의 엔트리는 관련된 연산의 실행 및 요구되는 경우 정확한 실행 유닛으로 정보를 전하는 논리에 요구되는 정보의 저장을 포함한다. 연산은 먼저 타입 및 연산 타입을 위한 실행 유닛의 유효성에 따라 급송하고, 둘째로는 연속적인 프로그램 순서에 따른다. 따라서, 여러 타입의 연산은 종종 정상적인 프로그램 순서를 벗어나서 실행된다. 동일한 타입의 연산은 또한 하나 이상의 실행 유닛이 하나의 연산 타입에서 유효할 수 있기 때문에 비규칙적으로 실행될 수 있고, 또다른 실행 유닛이 동일한 타입의 다음 연산을 완료하는 동안 하나의 실행 파이프라인에서 유지될 수 있다. 또한, 실행 파이프라인을 블록하는 연산은 파이프라인의 앞 단계로부터 밀려날 수 있어, 하나의 실행 유닛 연산도 프로그램 순서를 벗어나 실행될 수 있다.In accordance with the present invention, an irregular execution engine includes a set of execution units that can operate simultaneously and a scheduler that dispatches operations to execution units. The scheduler includes an entry corresponding to the operation to be executed. Each entry includes the execution of the associated operation and the storage of the information required for the logic to pass the information to the correct execution unit if required. The operations are first dispatched according to the type and the validity of the execution unit for the operation type, and secondly in the successive program order. Thus, various types of operations are often executed outside of the normal program order. Operations of the same type can also be executed irregularly because more than one execution unit can be valid in one operation type, and remain in one execution pipeline while another execution unit completes the next operation of the same type. Can be. In addition, operations that block the execution pipeline may be pushed out of the preceding stage of the pipeline, such that one execution unit operation may be executed out of program order.

스케쥴러내 엔트리는 연산 타입에 따라 한정되지 않고, 실행 유닛은 만일 실행 유닛이 실속(失速)되는 경우 블록될 수 있는 스테이션이나 큐를 한정하지 않는다. 무시할 수 있는 연산의 실행후, 연산의 결과는 관련된 스케쥴러 엔트리 및/또는 기억 큐내에 유지된다. 스케쥴러는 스케쥴러와 연결된 연산 수행 유닛이 어떠한 폴트도 없고 잘못 예언되지 않은 브랜치가 관련된 연산을 진행하는 것으로 결정할 때까지 결과를 유지한다. 만일 연산 수행 유닛이 실행된 가장 오래된 연산이 순서적인 프로그램 실행으로 생성된다고 결정하는 경우, 레지스터 파일, 상태 레지스터, 또는 메모리에 기록하므로써 결과가 영구적이 되며, 연산은 끝나고 스케쥴러에서 제거된다. 만일 연산 수행 유닛이 순서적인 프로그램 실행으로 생성되지 않는다고 결정하는 경우, 영구적인 변화없이 연산이 끝난다.Entries in the scheduler are not limited by operation type, and the execution unit does not define a station or queue that can be blocked if the execution unit is stalled. After execution of the negligible operation, the result of the operation is retained in the associated scheduler entry and / or storage queue. The scheduler maintains the results until the compute execution unit associated with the scheduler determines that there are no faults and a branch that has not been mispredicted proceeds with the associated operation. If the computing execution unit determines that the oldest operation executed is created by sequential program execution, the result is permanent by writing to a register file, status register, or memory, and the operation ends and is removed from the scheduler. If the operation execution unit determines that it is not created by sequential program execution, the operation ends without permanent change.

스케쥴링 기능에 추가로, 스케쥴러는 또한 재순서 버퍼의 기능을 강요된 레지스터 개명에서 구체화한다. 스케쥴러내 엔트리의 물리적 위치가 프로그램 순서를 나타내기 때문에 연산의 프로그램 순서를 나타내는 태그가 요구되지 않고, 엔트리내에 저장된 결과값은 프로그램 순서에서 대응하는 포인트에 레지스터 및 상태값을 제공한다. 이것은 여러 분리된 실행 기지국간의 태그 정보 유지 및 전송에 요구되는 복잡성을 제거한다. 스케쥴러내 적절한 물리적 방향으로 향해지는 스캔 체인이 잇따른 연산을 위해 요구되는 레지스터 오퍼랜드에 영향을 미치는 앞선 연산을 위치시키기 때문에 연산 수행동안의 실제적인 레지스터 개명은 요구되지 않는다.In addition to the scheduling function, the scheduler also specifies the function of the reorder buffer in forced register rename. Since the physical location of the entry in the scheduler represents the program order, a tag indicating the program order of the operation is not required, and the result stored in the entry provides registers and status values at corresponding points in the program order. This eliminates the complexity required to maintain and transmit tag information between several separate executing base stations. The actual register rename during execution of the operation is not required because the scan chain directed in the appropriate physical direction in the scheduler places the preceding operation that affects the register operands required for subsequent operations.

본 발명의 한 실시예에서, 스케쥴러는 미결된 연산과 관련된 엔트리의 열을 포함한다. 각각의 엔트리는 싱글 연산에 대응하고, 엔트리내 각각의 열은 4 연산과 같은 다중 연산에 대응한다. 스케쥴러를 열로 조직화하는 것은 스케쥴러 구조를 간단하게 하지만, 연산의 스케쥴링 및 실행은 연산을 열로 그룹화하는 것에 독립적이다. 일부 방법에서 스케쥴러는 연산의 새로운 그룹과 관련된 정보가 스케쥴러의 최상열로 로드되고 더 오래된 연산이 끝날 때 스케쥴러의 최하열을 향해 그룹으로서 시프트하는 경우 시프트 레지스터로서 작동한다. 따라서, 스케쥴러내 연산의 위치는 그 경시를 나타낸다. 더 새로운 연산(즉, 프로그램 순서로 더 뒤의 것)은 스케쥴러의 최상에 있고, 더 오래된 연산(즉, 프로그램 순서로 더 앞의 것)은 스케쥴러의 최하에 있다.In one embodiment of the invention, the scheduler includes a column of entries associated with pending operations. Each entry corresponds to a single operation, and each column in the entry corresponds to multiple operations, such as four operations. Organizing the scheduler into columns simplifies the scheduler structure, but the scheduling and execution of operations is independent of grouping operations into columns. In some methods, the scheduler acts as a shift register when information associated with a new group of operations is loaded into the top row of the scheduler and shifts as a group towards the bottom row of the scheduler when the older operation ends. Thus, the position of the operation in the scheduler indicates its age. Newer operations (ie, later in program order) are at the top of the scheduler, and older operations (ie, earlier in program order) are at the bottom of the scheduler.

대부분의 연산은 스케쥴러의 최상열로 로드되었지만 스케쥴러내 어떠한 지점으로부터 실행 유닛으로 이슈될 수 있는 경우, 실행에 즉시 적합하다. 연산을 위한 엔트리내 상태 필드는 연산이 이슈되었거나, 실행 파이프라인의 특수 스테이지에 있거나, 또는 완료되었는지 여부를 나타낸다. 연산의 상태는 스케쥴러내 연산 위치에 독립적이지만, 더 오래 스케쥴러내에 있는 연산일수록 이슈되고 완료될 더 큰 기회를 얻는다. 열 내 연산은 동시에 끝내져서 다중 연산은 각각의 클럭 사이클에서 완료될 수 있다. 따라서, 다중 연산은 스케쥴러로 로드될 수 있고, 다중 연산은 각각의 클럭 사이클에서 스케쥴러로부터 제거될 수 있다.Most operations are loaded into the top row of the scheduler, but if they can be issued to the execution unit from any point in the scheduler, they are immediately ready for execution. The status field in the entry for the operation indicates whether the operation has been issued, at a special stage in the execution pipeline, or completed. The state of an operation is independent of the position of the operation in the scheduler, but the longer the operation is in the scheduler, the greater the chance of issue and completion. In-row operations are completed at the same time so that multiple operations can be completed in each clock cycle. Thus, multiple operations can be loaded into the scheduler, and multiple operations can be removed from the scheduler at each clock cycle.

조건부 분기 계산과 같은 일부 연산 및 상태 플래그에 종속적인 레지스터 연산은 연산이 스케쥴러의 특정 열에 도달하는 경우 실행된다. 이것은 다른 열내 이러한 연산의 실행을 돕기 위한 범용 하드웨어를 제거하므로써, 간략화하고, 비용을 줄이며, 스케쥴러내 하드웨어의 속도를 빠르게 한다. 실행에 필요한 오퍼랜드가 유효할 것 같은 경우에 따른 그러한 연산의 실행을 위한 열을 선택하므로써 스케쥴링 지연이 최소화된다. 예를 들어, 상태 플래그에 종속적인 연산은, 더 오래된 연산이 상태 플래그 종속 연산의 완료에 요구되는 상태 플래그 값의 수정을 완료할 것 같은 경우, 스케쥴러내 한 지점에서 더 낮게 처리된다. 상태 플래그 종속 연산의 실행을 스케쥴러내에서 더 높게 있도록 하는 추가 회로는, 필요한 상태 플래그가 상태 플래그 종속 연산이 스케쥴러의 더 높은 열에 있는 경우에 유효할 것이기 때문에 실행율 측면에서 최소한의 개선점을 제공한다.Some operations, such as conditional branch calculations and register operations that depend on state flags, are executed when the operation reaches a particular column of the scheduler. This simplifies, reduces costs, and speeds up the hardware in the scheduler by eliminating general-purpose hardware to help perform these operations in other columns. Scheduling delays are minimized by selecting columns for the execution of those operations where the operands needed to execute are likely to be valid. For example, a state flag dependent operation is processed lower at one point in the scheduler if an older operation is likely to complete the modification of the state flag value required to complete the state flag dependent operation. Additional circuitry that allows the execution of state flag dependent operations higher in the scheduler provides a minimal improvement in terms of execution rate since the required state flag will be valid if the state flag dependent operation is in the higher row of the scheduler.

스케쥴러는 실행 유닛과 단단히 연결되어 있고, 다중 실행 파이프라인에서 연산에 관련된 정보를 유지한다. 스케쥴러는 연산을 이슈하고, 요구된 시각에 연산 유닛으로 연산 정보를 제공하며, 결과가 수행 또는 포기될 때까지 완료된 연산으로부터의 결과를 유지하고, 다른 연산의 실행에 요구된 것과 같은 결과를 전송한다. 현저하게, 각각의 스케쥴러 엔트리는 관련된 연산으로부터 발생된 레지스터 및 상태를 유지한다. 따라서 스케쥴러는 명백한 개명없이 묵시적으로 레지스터 개명을 구현하거나 또는 물리적 레지스터로의논리적레지스터의 사상을 구현한다. 따라서, 스케쥴러는 연산의 실행을 스케쥴하는 싱글의 통합된 구조를 제공하고, 실행동안 요구된 오퍼랜드 값을 제공하며, 강요된 레지스터 개명에서 레코더 버퍼의 역할을 한다.The scheduler is tightly coupled to the execution unit and maintains information related to operations in the multiple execution pipeline. The scheduler issues the operation, provides the operation information to the operation unit at the requested time, maintains the result from the completed operation until the result is performed or abandoned, and sends the same result as required for the execution of other operations. . Remarkably, each scheduler entry maintains a register and state resulting from the associated operation. Thus, the scheduler implicitly implements register renaming without explicit renaming, or implements the mapping of logical registers into physical registers. Thus, the scheduler provides a single, unified structure for scheduling the execution of operations, provides the operand values required during execution, and acts as a recorder buffer in enforced register renames.

본 발명의 실행 및 산업상 적용을 위한 모델Model for Implementation and Industrial Application of the Invention

본 발명은 개략적으로 다음의 순서로 기술된다.The invention is schematically described in the following order.

Ⅰ. 개요I. summary

Ⅱ. 스케쥴러II. Scheduler

A. 스케쥴러 로딩(Scheduler Loading)A. Scheduler Loading

1. 정적 엔트리 필드(Static Entry Field)Static Entry Field

2. 다이내믹 엔트리 필드(Dynamic Entry Field)2. Dynamic Entry Field

3. Op 쿼드 필드(Op Quad Field)Op quad field

B. 로드/시프트 제어(Load/hift Control)B. Load / hift control

Ⅲ. 동작 실행III. Action execution

A. 발행 상태(Issue Stage)A. Issue Stage

1. 발행 선택 단계(Issue Selection Phase)1.Issue Selection Phase

a. 발행 선택 스캔 체인(Issue Selection Scan Chains)a. Issue Selection Scan Chains

b. RUY용 발행 선택 스캔 체인(Issue Selection Scan Chains For RUY)b. Issue Selection Scan Chains For RUY

B. 오퍼랜드 포워드 단계(Operand Forward Stage)B. Operand Forward Stage

1. 오퍼랜드 선택 단계(Operand Selection Phase)1.Operand Selection Phase

2. 오퍼랜드 전송 단계(Operand Transfer Phase)2. Operand Transfer Phase

3. 변위 포워딩(Displacement Forwarding)3. Displacement Forwarding

4. 중간 값 포워딩(Immediate Value Forwarding)4. Medium Value Forwarding

C. 데이터 오퍼랜드 인출C. Data Operand Withdrawal

D. 레지스터 동작 범핑D. Register Operation Bumping

E. 로드/저장 주문E. Load / Save Orders

F. 중단 처리F. Suspension Processing

Ⅳ. 광역 제어 로직Ⅳ. Wide Area Control Logic

A. 외부 로직에 의해 사용된 스케쥴러 정보A. Scheduler Information Used by External Logic

B. 광역 제어 기능B. Wide area control function

Ⅴ. 상태 플래그Ⅴ. Status flags

A. 상태 플래그 인출A. Status Flag Fetch

B. cc-Dep RegOps로의 상태 플래그 포워딩B. Status Flag Forwarding to cc-Dep RegOps

C. 분기 예상 해결C. Resolving Branch Expectations

Ⅵ. 비-중단가능한 동작의 동기화Ⅵ. Synchronization of non-stoppable actions

Ⅶ. 자기-수정 코드 처리Iii. Self-modifying code processing

Ⅷ. 동작 처분 유니트Iii. Action Disposal Unit

A. 처분A. Disposal

1. 레지스터 처분1. Disposition of register

2. 상태 플래그 처분2. Disposition of State Flags

3. 메모리 기록 처분3. Memory Record Disposition

B. Op 쿼드 퇴역B. Op Quad Retirement

C. 고장 처리C. Fault Handling

1. 로드 동작 고장 처리1. Handling of load failure

2. FAULT 및 LDDHA/LDAHA Op 처리2. FAULT and LDDHA / LDAHA Op Treatment

3. 목표물 제한 위반 처리3. Handling of Target Limit Violations

4. 잘못된 예상 분기 처리4. Invalid expected branch handling

D. 중단 사이클 발생D. A break cycle occurs

Ⅸ. 처리 시스템Iii. Processing system

Ⅹ. 결론Iii. conclusion

첨부 A : RISC86TMSyntaxAttachments A: RISC86 TM Syntax

첨부 B : 의사-RTL 설명Appendix B: Pseudo-RTL Description

Ⅰ. 개요I. summary

본 발명의 실시예에 따른 프로세서는 개인용 컴퓨터를 포함한 다양한 애플리케이션에 적용될 수 있다. 도 1은 본 발명의 한 실시예에 따른 프로세서(200)이 포함되어 있는 컴퓨터 마더보드(100)의 블록 다이어그램을 보여주고 있다. 프로세서(200)는 복잡한 명령 세트를 실행할 수 있는 모놀리식 집적 회로이고 0.35㎛ 디자인 규칙을 갖는 5 금속층 CMOS 처리와 같은 종래의 집적회로 처리를 사용하여 제조될 수 있다. 프로세서(200)와 연결된 칩셋에는 내부 레벨-2 캐쉬(125) 주 메모리(122)와의 인터페이스를 제공하는 메모리 제어기(121), 및 PCI 버스(155) 및 ISA 버스(165) 등의 로컬 버스와의 인터페이스를 제공하는 버스 제어기(150,160)이 포함되어 있다.The processor according to the embodiment of the present invention can be applied to various applications including a personal computer. 1 shows a block diagram of a computer motherboard 100 incorporating a processor 200 in accordance with one embodiment of the present invention. The processor 200 is a monolithic integrated circuit capable of executing complex instruction sets and can be fabricated using conventional integrated circuit processing such as five metal layer CMOS processing with a 0.35 μm design rule. The chipset connected to the processor 200 includes a memory controller 121 that provides an interface with the internal level-2 cache 125 main memory 122 and a local bus such as the PCI bus 155 and the ISA bus 165. Bus controllers 150 and 160 that provide an interface are included.

도 2는 프로세서(200)의 실시예의 블록 다이어그램이다. 프로세서(200)에는 주 메모리(122) 및 로컬 버스(151,161)상의 디바이스들을 포함하는 컴퓨터 시스템의 어드레스 공간으로의 액세스를 제공하는 시스템 인터페이스(122)가 있다. 한 실시예에서, 시스템 인터페이스(205)에는 수정된, 배타적인, 공유된, 및 효력없는(MESI) 상태 및 구성가능한 버스 스케일링을 공급하는 멀티프로세서 캐쉬 코히어런시가 있는 64-비트 시스템 버스가 있다.2 is a block diagram of an embodiment of a processor 200. Processor 200 has a system interface 122 that provides access to the address space of a computer system including main memory 122 and devices on local buses 151 and 161. In one embodiment, system interface 205 includes a 64-bit system bus with multiprocessor cache coherency that provides modified, exclusive, shared, and invalid (MESI) status and configurable bus scaling. have.

집적된 레벨-2 캐쉬 제어 로직(210)은 레벨 2 캐쉬(125)를 형성하는 외부 SRAM 으로의 사설 버스와의 인터페이스를 제공한다. 시스템 인터페이스(210)로부터 분리되는 레벨-2 캐쉬 인터페이스를 제공하는 것은 상기 시스템 버스/칩셋으로부터 상기 레벨-2 캐쉬의 속도를 해제시키고, 더 빠른 캐쉬를 허용하고, 시스템 버스 및 캐쉬 버스의 사용을 감소시키며, 각 버스상의 대역폭의 증가를 허용한다. 레벨-2 캐쉬 제어 로직(210)은 다중 클록 스케일링 및 오프-더-쉘프 버스트 파이프라인 싱크로너스 SRAM 상의 2MB 까지 데이터 및 태그 저장의 구성 가능한 캐쉬 크기를 더 제공한다. 상기 레벨-2 캐쉬는 답신 정책 및 32 바이트 선로 크기를 사용한다.The integrated level-2 cache control logic 210 provides an interface with a private bus to external SRAM forming the level 2 cache 125. Providing a level-2 cache interface separate from system interface 210 releases the level-2 cache from the system bus / chipset, allows for faster caches, and reduces the use of system buses and cache buses. Allow for an increase in bandwidth on each bus. Level-2 cache control logic 210 further provides a configurable cache size of data and tag storage up to 2MB on multiple clock scaling and off-the-shelf burst pipeline synchronous SRAM. The level-2 cache uses a reply policy and a 32 byte line size.

도 1에 도시된 구성의 대안으로서, 프로세서(200)에는 시스템 및 캐쉬 액세스를 위한 단일 버스가 있다. 상기 버스는, 예를들어 펜티엄 등의 프로세서를 위한 칩셋에 적용가능한 핀-포-핀(pin-for-pin)일 수 있다.As an alternative to the configuration shown in FIG. 1, processor 200 has a single bus for system and cache access. The bus may be, for example, pin-for-pin applicable to chipsets for processors such as Pentium.

레벨-1 명령 캐쉬(230) 및 레벨-1 데이터 캐쉬(220)은 프로세서(200) 내부이고 레벨-1 캐쉬 제어 로직(215)를 통해 상기 레벨-2 캐쉬 및 시스템 버스와 연결되어 있다. 한 실시예에서, 명령 캐쉬(230)는 명령 및 추가 프리디코드 정보의 16KB 를 위한 기억장치를 포함하는 두-방향 셋-연관 캐쉬이다. 데이터 캐쉬(220)는 32KB 데이터용 기억장치를 포함하는 두-방향 셋-연관 캐쉬이다. 더 빠른 동작을 공급하고 액세스 충동를 피하기 위해, 데이터 캐쉬(220)는 사이클당 한 번의 기록 및 한 번의 판독을 허용하는 듀얼-포트 메모리의 파이프라인된 뱅크(bank)를 사용한다.Level-1 instruction cache 230 and level-1 data cache 220 are internal to processor 200 and are coupled to the level-2 cache and system bus through level-1 cache control logic 215. In one embodiment, the instruction cache 230 is a two-way set-associated cache that includes storage for 16 KB of instructions and additional predecode information. Data cache 220 is a two-way set-associative cache that includes storage for 32 KB of data. To provide faster operation and avoid access urges, data cache 220 uses a pipelined bank of dual-port memory that allows one write and one read per cycle.

주 메모리(122)로부터의 명령은 명령 캐쉬(230)으로 로드된다. 한 실시예에 따르면, 상기 주 메모리(122)내의 명령은 PC 산업의 표준 x86 명령 세트 등의 복잡한 명령 세트로부터의 CISC 명령이다. 상기 RISC 명령은 본 명세서에서는 매크로명령으로 언급되기도 한다. CISC 명령의 16 바이트까지는 사이클당 인출된다. 명령 캐쉬(230)이 로딩되는 동안, 명령 바이트들은 매크로명령 경계의 빠른 식별을 위해 사전복호화(predecode)된다. 사전복호화는 코드 비트를 각 각의 바이트에 첨가하여 상기 바이크로부터 상기 명령 바이트가 명령 내의 제1 바이트로 가정되는 명령 다음의 개시 까지의 오프셋을 나타낸다.Instructions from main memory 122 are loaded into instruction cache 230. According to one embodiment, the instructions in main memory 122 are CISC instructions from a complex instruction set, such as the standard x86 instruction set of the PC industry. The RISC command may also be referred to herein as a macro command. Up to 16 bytes of the CISC instruction are fetched per cycle. While instruction cache 230 is loaded, instruction bytes are predecoded for quick identification of macroinstruction boundaries. Predecoding adds a code bit to each byte to indicate an offset from the bike to the start of the instruction following the instruction where the instruction byte is assumed to be the first byte in the instruction.

명령 복호기(240)는 조건없는 분기 명령을 실행하고, 조건 분기 명령을 위한 분기 예상을 수행하며, 상기 명령 캐쉬(230)에서 인출된 RISC 명령을 실행 엔진(250)을 위한 동작으로 바꾼다. 실행 엔진(250)은 수퍼스칼라, 주문 외의 것, 감소된 명령 세트 계산(RISC) 아키텍쳐를 실행한다. 명령 캐쉬(230)로부터의 단일 CISC 명령은 제로, 1, 또는 실행 엔진(250)을 위한 여러 동작으로 복호화 된다. 다중 CISC 명령은 각 사이클로 복호화되어 동작이 실행 엔진(250)에 의해 실행되는 것을 나타내는 RISC 명령의 세트를 만들 수 있다. 명령 복호기(240)에는 가장 공통의 RISC 명령을 위한 하드웨어 복호기(MacDec)(242) 및 비공통 및 더욱 복잡한 CISC 명령을 위한 벡터 복호기(244)가 포함되어 있다. 벡터 복호기(244)에는 ROM(246)이 포함되어 있는데, 본 명세서에서는 RISC 명령 시퀀스를 포함하는 엠코드(emcode) ROM(246)으로 언급 되어지며, 때때로 엠코드로 언급되기도 한다. 벡터 복호기(244)는 복호화 되는 CISC 에 따라 엠코드 ROM(246) 내의 어드레스를 선택하고 RISC 명령에 해당하는 CISC 명령을 변환하는데 필요한 엠코드 ROM(246)으로부터 판독되는 상기 RISC 명령의 부분을 대체 또는 수정한다.The instruction decoder 240 executes an unconditional branch instruction, performs branch prediction for the conditional branch instruction, and converts the RISC instruction fetched from the instruction cache 230 into an operation for the execution engine 250. Execution engine 250 executes a superscalar, non-order, and reduced instruction set calculation (RISC) architecture. A single CISC instruction from the instruction cache 230 is decoded into zero, one, or several operations for execution engine 250. Multiple CISC instructions may be decoded each cycle to produce a set of RISC instructions indicating that the operation is executed by execution engine 250. The instruction decoder 240 includes a hardware decoder (MacDec) 242 for the most common RISC instructions and a vector decoder 244 for non-common and more complex CISC instructions. The vector decoder 244 includes a ROM 246, referred to herein as an Emcode ROM 246 containing a RISC instruction sequence, sometimes referred to as an MPEG. The vector decoder 244 selects an address in the encode ROM 246 according to the CISC to be decoded, and replaces or replaces a portion of the RISC instruction read from the encode ROM 246 required to convert the CISC instruction corresponding to the RISC instruction. Correct it.

도 3 및 첨부 A는 x86 CISC 명령의 실행을 위해 최적화된 RISC 명령의 포맷 예를 설명하고 있으며 RISC86 명령 세트로 언급된다. 각 각의 RISC86 명령은 레지스터 동작(RegOp), 로드-저장 동작(LdStOp), 또는 특별 동작(SpecOp) 중 하나이다. RegOp는 때때로 상기 RegOp 가 상태 코드 또는 "cc-dep" Reg 를 수정하는 것을 나타내는 ".cc" RegOp 또는 상기 RegOp 가 상태 코드에 의존하는 것을 나타내는 "cc-dep" Reg 로 디자인 된다. LdStOp 는 로드 동작(LdOp) 또는 저장 동작(StOp)로 더욱 분류된다. 로드 중간 값 동작(LIMMOp)는 다른 LdOp 와는 다른 포맷을 갖는 LdOp의 타입이며 때때로 LdStOp 또는 RegOp 다음에 오는 큰 중간 값을 공급한다. SpecOp 는 다른 포맷을 갖는 분기 동작(BrOp) 및 부동소숫점 동작(FpOp)을 포함한다. 도 3 및 첨부 A는 SpecOp 의 예로서 단지 BrOp 만을 설명하고 있다. 조건 분기 동작(BRCOND)은 상태 코드(도 3의 필드 cc)에 의존하는 BrOp의 타입이다.3 and Appendix A illustrate an example format of a RISC instruction optimized for execution of an x86 CISC instruction and is referred to as a RISC86 instruction set. Each RISC86 instruction is one of a register operation (RegOp), a load-store operation (LdStOp), or a special operation (SpecOp). RegOp is sometimes designed as a ".cc" RegOp indicating that the RegOp modifies a status code or a "cc-dep" Reg or a "cc-dep" Reg indicating that the RegOp depends on a status code. LdStOp is further classified into a load operation LdOp or a storage operation StOp. Load medium value operation (LIMMOp) is a type of LdOp that has a different format than other LdOp and sometimes supplies a large intermediate value following LdStOp or RegOp. SpecOp includes branch operations (BrOp) and floating point operations (FpOp) with different formats. 3 and Appendix A illustrate only BrOp as an example of SpecOp. Conditional branching operation BRCOND is a type of BrOp that depends on the status code (field cc in FIG. 3).

본 발명의 한 실시예에서, 명령 복호기(240)는 x86 매크로명령을 RISC86 명령(또는 동작)으로 변환한다. MacDec(242)은 공통 매크로명령을 RISC86 동작의 짧은 시퀀스로 변환한다. 예를들어, x86 매크로명령 INC reg, PUSH reg, 및 Jcc tgt_addr 은 RegOp, StOp 및 BRCOND 로 각 각 복호화 되고; ADD reg, mem 매크로명령은 시퀀스 내의 LdOp 및 RegOp 로 복호화 되고; ADD mem, reg 매트로명령은 시퀀스 내의 LdOp, RegOp 및 StOp 로 복호화 되며; 그리고 LEAVE 매크로명령은 시퀀스 내에 RegOp, LdOp 및 RegOp 로 복호화 된다.In one embodiment of the invention, the instruction decoder 240 converts the x86 macro instruction into a RISC86 instruction (or operation). MacDec 242 translates common macro instructions into short sequences of RISC86 operations. For example, the x86 macro commands INC reg, PUSH reg, and Jcc tgt_addr are decoded into RegOp, StOp and BRCOND, respectively; ADD reg, mem macro instructions are decoded into LdOp and RegOp in a sequence; ADD mem, reg macro instructions are decoded into LdOp, RegOp and StOp in the sequence; The LEAVE macro command is then decoded into RegOp, LdOp and RegOp in the sequence.

한 실시예에서, 명령 복호기(240)는 사이클당 두 개의 x86 매크로명령까지 복호화 하여 한 사이클내에 실행 엔진(250)으로 로드될 수 있는 네 개의 RISC86 동작의 세트를 만든다. 만일 네 개의 동작 세트가 완료될 필요가 있다면 No-op 동작이 사용될 것이다. 만일 두 개의 연속 명령이 둘 또는 그 이하의 동작으로 각 각 복호화 되는 명령으로 식별될 수 있다면 사이클 동안 복호화 된다. 선택적 실시예에서, 세 개(또는 그 이상)까지의 매크로명령이 각 사이클에서 복호화 되어 네 개(또는 그 이상) 동작의 세트를 형성할 수 있다. 벡터 복호기(244)는 비공통인 매크로명령 및 RISC86 동작의 긴 시퀀스를 복호화 하기위해 사용된다. 그러한 시퀀스는 네 개 동작보다 더 길 수 있고 실행 엔진(250)으로 로드되기 위한 한 클록 사이클 이상을 요구하기도 한다.In one embodiment, instruction decoder 240 decodes up to two x86 macroinstructions per cycle to create a set of four RISC86 operations that can be loaded into execution engine 250 in one cycle. If four sets of operations need to be completed, no-op operations will be used. If two consecutive instructions can be identified as each decoded instruction in two or less operations, they are decoded during the cycle. In an optional embodiment, up to three (or more) macro instructions may be decoded in each cycle to form a set of four (or more) operations. The vector decoder 244 is used to decode long sequences of uncommon macro instructions and RISC86 operations. Such a sequence may be longer than four operations and may require more than one clock cycle to be loaded into execution engine 250.

무조건 분기 매크로명령을 위해, 명령 복호기(240)는 복호를 위해 인출된 다음 매크로명령을 결정하고 어떠한 동작도 발생하지 않는다. 조건 분기 매크로명령을 위해서, 복호기(240)는 조건 분기 명령을 따라오는 프로그램 카운터를 예상하는 분기 예상 로직(248)을 포함하고 있으며 상기 예상이 올바른지 여부를 결정하기 위해 후에 평가되는 BRCOND 를 발생한다. 조건 분기(BRCONDs)는 부호화 되는 상기 매크로명령이 조건 분기가 아닌 경우 엠코드 ROM(246)로부터 RISC 명령 시퀀스 내에서도 발생될 수 있다. 엠코드 ROM(246)에는 복호화된 매크로명령용 RISC 명령 시퀀스를 발생하는 때 벡터 복호기(244)가 사용하는 각 각의 BRCOND를 위한 예상이 포함되어 있다. 상기 엠코드 ROM(244)으로부터 BRCOND 를 위한 예상이 조건 분기 매크로명령으로부터 직접 발생된 BRCOND 와 비슷한 방법으로 평가된다.For an unconditional branch macro instruction, instruction decoder 240 determines the next macro instruction that is fetched for decoding and no action occurs. For a conditional branch macro instruction, decoder 240 includes branch prediction logic 248 that expects a program counter following the conditional branch instruction and generates a BRCOND that is evaluated later to determine whether the prediction is correct. Conditional branches BRCONDs may be generated even within the RISC command sequence from the MPEG ROM 246 when the macro instruction to be encoded is not a conditional branch. The MPEG ROM 246 includes predictions for respective BRCONDs used by the vector decoder 244 when generating the decoded RISC instruction sequence for the macro instruction. The expectation for BRCOND from the MPEG ROM 244 is evaluated in a similar manner to BRCOND generated directly from the conditional branch macro instruction.

실행 엔진(250)에는 병렬로 동작할 수 있는 "251" 내지 "257"의 7개의 실행 유니트, 실행을 위한 동작을 발행하는 스케쥴러(280), 및 동작 결과를 처분하기 위해 상기 스케쥴러(280)와 결합된 동작 처분 유니트(OCU)(260)가 포함되어 있다. 각 각의 실행 유니트에는 실행될 수 있는 해당 동작이 있다. 로드 유니트(251) 및 저장 유니트(252)는 각 각 LdOps 및 StOps 를 실행한다. 저장 큐(270)는 저장 유니트(252)에 의해 StOps의 추리적인 실행으로부터 데이터를 일시적으로 저장한다. 저장 큐(270)로부터의 데이터는 StOp 결과가 아래 설명할 것처럼 처분되는 때 데이터 캐쉬(220)로 기록된다. 레지스터 유니트(253,254)는, 본 명세서에서 RUX 및 RUY 로도 언급되는데, 레지스터 화일(290)을 정상적으로 액세스 하는 RegOps 를 실행한다. 부동소숫점 유니트(255) 및 멀티미디어 유니트(256)는 각 각 부동소숫점 동작(FpOps) 및 멀티미디어 애플리케이션을 위한 동작을 실행하는 선택적 유니트이다. 한 실시예에서, 부동소숫점 유니트(255) 및 멀티미디어 유니트(256)는 생략된다.The execution engine 250 includes seven execution units "251" to "257" that can operate in parallel, a scheduler 280 for issuing an operation for execution, and the scheduler 280 for disposing operation results. A combined operational disposal unit (OCU) 260 is included. Each execution unit has a corresponding action that can be executed. The load unit 251 and the storage unit 252 execute LdOps and StOps, respectively. The storage queue 270 temporarily stores data from the speculative execution of StOps by the storage unit 252. Data from the storage queue 270 is written to the data cache 220 when the StOp result is disposed as described below. Register units 253 and 254, also referred to herein as RUX and RUY, execute RegOps that normally access register file 290. Floating point unit 255 and multimedia unit 256 are optional units that perform floating point operations (FpOps) and operations for multimedia applications, respectively. In one embodiment, the floating point unit 255 and the multimedia unit 256 are omitted.

스케쥴러(280)는 실행 유니트(251 내지 257)로 동작을 발행하고, 실행되는 동안 여러 실행에 의해 요구되는 정보를 인출하며, 그리고 퇴역한 동작 등의 동작 정보를 삭제한다. 스케쥴러(280)는 각 각 동작에 관련된 기억장치 및 로직을 포함하고 있는 엔트리로 분할된다. 엔트리의 기억장치 내의 정보는 실행될, 실행되고 있는 또는 실행되었던 동작을 설명한다. 한 실시예에서, 네 개의 엔트리 세트가 그룹으로 구성되는데, 본 명세서에서는 엔트리들이 물리적으로는 행으로 배열되어 있는 것이 아니지만 행 이라고 언급한다. 상기 행의 네 가지 동작과 관련된 정보를 Op 쿼드라 언급한다. 행에는 저장 필드 및 상기 정보에 부가된 그룹으로서 Op 쿼드와 관련된 로직 및 각 각의 동작과 관련된 로직이 포함되어 있다.The scheduler 280 issues an operation to execution units 251 to 257, retrieves information required by various executions during execution, and deletes operation information such as a retired operation. The scheduler 280 is divided into entries containing storage and logic associated with each operation. The information in the storage of the entry describes the operation to be executed, executed or performed. In one embodiment, four sets of entries are organized into groups, which are referred to herein as rows, although the entries are not physically arranged in rows. Information related to the four operations in the row is referred to as an Op quad. The row contains a storage field and logic associated with the Op quad as a group added to the information and logic associated with each operation.

스케쥴러(280)는 여러 면에서 시프트 레지스터와 같이 동작한다. 한 실시예에서, 스케쥴러(280)는 깊은 6 개의 행이다. 복호기(240)는 새로운 Op 쿼드를 각 클록 사이클에서 스케쥴러(280)의 최상위 행으로 로드시킬 수 있다. 상기 Op 쿼드는 상기 최상위 행에서 상기 Op 쿼드가 퇴역하는 바닥 행으로 아래로 시프트 한다. 상기 스케쥴러(280)내의 Op 쿼드의 위치는 Op 쿼드용 프로그램 주문내의 나이 또는 장소를 나타낸다; 그러나 대부분의 동작을 위해, 상기 스케쥴러(280)내의 상기 위치는 실행 단계와는 독립적이다.The scheduler 280 acts like a shift register in many respects. In one embodiment, scheduler 280 is six deep rows. Decoder 240 may load a new Op quad into the top row of scheduler 280 in each clock cycle. The Op quad shifts down from the top row to the bottom row where the Op quad retires. The position of the Op quad in the scheduler 280 indicates the age or place in the program order for the Op quad; However, for most of the operation, the location in the scheduler 280 is independent of the execution phase.

도 4A 내지 도 4D는 RegOps, LdOps, StOps 및 BrOps 와 관련된 다-단계 파이프라인을 보여주고 있다. 상기 파이프라인내의 각 단계는 동작이 이른 단계에서의 동작이 앞서는 것을 막는 단계의 하나에서 유지되지 않는다면 하나의 프로세서 클록 사이클을 보통 필요로 한다. 두 개의 예비 단계(410,420)는 모든 실행 파이프라인에 공통이다. 단계(410)가 진행되는 동안, CISC 명령의 16 바이트까지가 명령 캐쉬(230)내로 인출되고 사전 복호화 되어 명령 경계를 식별하고 이어지는 복호 시간을 감소시킨다. 단계(420)가 진행되는 동안, 명령 복호기(240)는 명령 캐쉬(230)로부터 3개의 CISC 명령 까지 복호화 하고 상기 스케쥴러(280)의 최상위 행내로 로드된 Op 쿼드를 형성한다.4A-4D show multi-stage pipelines associated with RegOps, LdOps, StOps and BrOps. Each stage in the pipeline usually requires one processor clock cycle unless the operation is maintained in one of the stages that prevents the operation in the earlier stages. The two preliminary steps 410 and 420 are common to all execution pipelines. During step 410, up to 16 bytes of the CISC instruction are fetched into the instruction cache 230 and pre-decoded to identify the instruction boundary and reduce the subsequent decoding time. During step 420, the instruction decoder 240 decodes up to three CISC instructions from the instruction cache 230 and forms an Op quad loaded into the top row of the scheduler 280.

다음으로 스케쥴러(280)는 발행 단계(430) 및 BrOps 이외의 동작에 관련된 오퍼랜드 포워드 단계(440)를 제어한다. 발행 단계(430)이 진행되는 동아, 스케쥴러(280)는 그의 엔트리를 스캔하고 해당 실행 유니트(251 내지 256)으로 6개의 동작까지 발행한다. 스케쥴러(280)는 실행이 주문 외이고 추리적이도록 더 오래된 동작 전에 발행을 위해 더 새로운 동작을 선택하기도 한다. 발행 선택이 진행되는 동안에는 오퍼랜드 종속은 고려하지 않는다. 스케쥴러(280)는 발행 선택 단계(430)이 진행되는 동안 앞서 발행된 동작을 위해 오퍼랜드 포워딩 단계(440)가 진행되는 동안 오퍼랜드를 실행 유니트(251 내지 256)로 전송한다. 단계(440) 동안, 레지스터 유니트(253 또는 254)로 발행된 일부 오퍼랜드는 파이프라인 밖에서 충돌하여 요구된 오퍼랜드가 여러 클록 사이클에서 사용할 수 없게되는 경우 상기 파이프라인의 오랜 막힘을 피한다.The scheduler 280 then controls the issue step 430 and operand forward step 440 related to operations other than BrOps. While the publishing step 430 is in progress, the scheduler 280 scans its entries and issues up to six operations to the corresponding execution units 251 to 256. The scheduler 280 may also select a newer operation for publication before the older operation so that the execution is out of order and speculative. Operand dependencies are not taken into account while the issue selection is in progress. The scheduler 280 transmits the operands to the execution units 251 to 256 during the operand forwarding step 440 for the previously issued operation while the issue selection step 430 is in progress. During step 440, some operands issued to register unit 253 or 254 collide outside the pipeline to avoid long clogging of the pipeline if the required operand becomes unavailable in several clock cycles.

도 4A에 도시되어 있듯이, RegOps 의 실행은 실행 단계(450)인 한 클록 사이클내에서 완료된다. RegOps 의 실행 단계(450)에는 레지스터 유니트(253 또는 254) 내의 산술 로직 유니트(ALU)가 실행되는 ALU 단계(451) 및 실행되는 RegOps 의 타입에 따른 RegOp의 소스 오퍼랜드가 포함되어 있고, 결과인 결과 전송 단계(452) 및 레지스터 유니트(253 또는 254)로부터의 상태값은 상기 RegOp에 해당하는 엔트리내로 다시 저장된다. 상기 엔트리 내에 저장된 결과 및 상태 플래그는 레지스터 화일(290)으로 연속적으로 처분되고 상기 구조적 상태 플래그 레지스터는 안전하거나 안전하게 될 때 처분된다. 동작이 완료된 다음 또는 완료 직후, 상기 동작의 결과는 처분될 수 있고 상기 동작은 스케쥴러(280) 밖의 동작을 포함하는 Op 쿼드를 시프트 시킴으로서 퇴역될 수 있다. 완료와 처분 사이에, 동작으로부터의 상기 결과 및 상태 플래그는 다른 명령의 실행을 위해 스케쥴러(280) 내에서 사용가능하다.As shown in FIG. 4A, execution of RegOps is completed within one clock cycle, which is execution step 450. Execution step 450 of RegOps includes an ALU step 451 in which an arithmetic logic unit (ALU) in register unit 253 or 254 is executed, and a source operand of RegOp according to the type of RegOps being executed, and the result is a result. The status values from the transfer step 452 and the register unit 253 or 254 are stored back into the entry corresponding to RegOp. The result and status flags stored in the entry are subsequently disposed of in the register file 290 and the structural status flag register is disposed when it is safe or secure. After or shortly after the operation is completed, the result of the operation may be discarded and the operation may be retired by shifting the Op quad which includes the operation outside the scheduler 280. Between completion and disposal, the result and status flags from the operation are available in scheduler 280 for execution of other instructions.

도 4B 및 도 4C는 두 개의 실행 단계(450,460)를 필요로하는 LdOps 및 StOps 를 보여주고 있다. 실행 단계(450,460)에는 데이터 액세스를 위한 가상 어드레스를 결정하는 어드레스 계산 단계(453), 데이터 캐쉬를 액세스 하기 위한 어드레스를 맵하는 DTLB 매핑 단계(455) 및 동작에 해당하는 엔트리내의 기어장치를 위해 그 결과를 되돌려 보내는 결과 전송 단계가 포함되어 있다. 동작이 완료되면 바로 스케쥴러(280)는 추리적인 결과 및 안정적이거나 안정적인 경우에만 처분되는 결과를 수신한다.4B and 4C show LdOps and StOps requiring two execution steps 450 and 460. Execution steps 450 and 460 include address calculation steps 453 for determining virtual addresses for data access, DTLB mapping steps 455 for mapping addresses for accessing data caches, and gears in entries corresponding to operations. A result transfer step is included to send the results back. As soon as the operation is completed, the scheduler 280 receives the inferential result and the result that is disposed only when it is stable or stable.

도 4D는 BrOps 처리를 설명하고 있다. 명령 복호기(240)가 CISC 분기 명령을 복호화 하고 BrOps 를 발생하면, 복호기(240)는 복호화 될 다음 CISC 명령을 위한 새로운 프로그램 카운터를 결정한다. 무조건 분기를 위해, 상기 새로운 프로그램 카운터 내에는 불확실은 없으며, 복호기(240)는 상기 프로그램 카운터를 변경시킴으로서 무조건 분기를 완료한다. 명령 복호기(240)에는 오프셋의 빠른 추가를 위한 병렬 가산기 및 상기 새로운 프로그램 카운터 값을 계산하기 위한 오래된 프로그램 카운터 값이 포함되어 있다. 명령 복호기(240)에는 이어지는 서브루틴 통화가 명령이 되돌려진 후 명령 어드레스의 나중 예상을 위해 밀리는 명령 어드레스상의 16-엔트리 귀환 어드레스 스택도 포함되어 있다.4D illustrates BrOps processing. When the instruction decoder 240 decodes the CISC branch instruction and generates BrOps, the decoder 240 determines a new program counter for the next CISC instruction to be decoded. For an unconditional branch, there is no uncertainty in the new program counter, and decoder 240 completes the unconditional branch by changing the program counter. The instruction decoder 240 includes a parallel adder for quick addition of offsets and an old program counter value for calculating the new program counter value. Instruction decoder 240 also includes a 16-entry feedback address stack on the instruction address where subsequent subroutine calls are pushed for later prediction of the instruction address after the instruction is returned.

조건 분기를 위해, 복호기(240)는 조건 분기 다음에 오는 프로그램 카운터 값을 예상하고, Op 쿼드내의 BRCOND 를 스케쥴러(280)로 삽입시킨다. 한 실시예에서, 상기 분기 예상은 당 기술분야에서는 종종 2-레벨 분기 예상이라 언급되는 분기 상관 처리이다. 미국 특허출원 제5,454,117호인 "Configurable Branch Prediction for a Processor Performing Speculative Execution"에는 사용되기도 하는 분기 상관 처리의 예가 개시되어 있다. 상기 분기 상관은 분기 명령 이후 실행된 명령의 어드레스를 예상한다.For conditional branching, decoder 240 expects a program counter value following the conditional branch and inserts BRCOND in the Op quad into scheduler 280. In one embodiment, the branch prediction is a branch correlation process, often referred to in the art as a two-level branch prediction. An example of branch correlation processing, which is also used, is described in US Patent Application No. 5,454,117, "Configurable Branch Prediction for a Processor Performing Speculative Execution." The branch correlation expects the address of the instruction executed after the branch instruction.

명령 복호기(240)내의 분기 예상 로직(248)은 8,912-엔트리 분기 이력 표(BHT)을 사용하는데, 각 BHT 엔트리에는 분기가 취해질 또는 취해지지 않을 경향을 나타내는 두 개의 표준 이력 비트가 포함되어 있다. 상기 엔트리는 프로그램 카운터(PC)로부터의 4 비트 및 광역 분기 이력의 9 비트의 조합을 사용하여 인덱스(index)되는데 분기가 취해질지 아닐지는 상기 분기의 어드레스로부터 뿐만 아니라 상기 분기에 다다르는 프로그램 실행이 취하는 경로로부터 예상된다. 이것은 아래 후술할 플러쉬 스케쥴러(280)로의 변경을 줄어들게 하는 향상된 분기 예상을 제공한다.Branch prediction logic 248 in instruction decoder 240 uses an 8,912-entry branch history table (BHT), with each BHT entry containing two standard history bits that indicate whether a branch is taken or not taken. The entry is indexed using a combination of four bits from the program counter (PC) and nine bits of the wide branch history, which is taken by the program execution reaching the branch as well as from the address of the branch whether or not the branch is taken. Expected from the path. This provides improved branch prediction that reduces the change to the flush scheduler 280 described below.

만일 예상된 또는 변경된 프로그램 카운터가 복호기(240)의 16-엔트리 분기 목표물 캐쉬내에 히트(hit)되면, 다음 CISC 명령이 x86 명령 복호 단계(420)의 끝에서 복호되기 위한 준비를 할 것이다. 그렇지 않으면, 에드레스를 계산하기 위해 그리고 복호를 위한 다음 CISC 명령을 인출하기 위해 클록 사이클(424)이 팔요할 것이다.If the expected or modified program counter is hit in the 16-entry branch target cache of decoder 240, the next CISC instruction will be ready for decoding at the end of x86 instruction decoding step 420. Otherwise, clock cycle 424 will be required to calculate the address and to fetch the next CISC instruction for decoding.

다른 모든 동작과 마찬가지로, 스케쥴러(280)로 로드된 조건 분기 동작(BRCOND)은 오래된 동작이 퇴역하는 것 처럼 스케쥴러(280)의 바닥쪽으로 시프트 되지만, BRCOND 를 위해 어떠한 발행 선택 스캔도 사용되지는 않는다. BRCOND 는 상기 BRCOND 가 스케쥴러(280)의 행(4)에 도달하는 때 분기 상태 평가 단계(464)로 들어간다. 분기 평가 유니트(257)는 각 BRCOND 를 필요로 하는 상기 상태 코드(cc)가 유효한 것을 공급하는 사이클당 하나의 BRCOND를 평가할 수 있다. 이 요구된 상태 코드들은 더 오래된 동작(행(4) 및 행(5)내의 동작)이 완료되어온 것 같기 때문에 상기 BRCOND가 행(4)에 도달하는 때 유효하게 될 것이다. 만일 상기 요구된 상태 코드가 아직 유효하지 않다면, 상기 BRCOND는 상기 Op 쿼드가 행(4) 밖에서 시프트 하는 것을 막음으로서 정체된다. BRCOND 가 정체되면, 행(4) 위의 Op 쿼드들은 0 부터 3 가지의 행의 하나 또는 그 이상이 빈(즉, 유효하지 않음) Op 쿼드가 아니라면 시프트 되지 않는다. 만일 행(0 내지 3)의 각 각에 유효한 Op 쿼드가 포함되어 있다면, 명령 복호기(240)는 새로운 Op 쿼드를 상기 BRCOND 가 정체되는 동안 스케쥴러(280)로 로드시킬 수 없다. 만일 행(3)의 시프트가 행(4 및 5)의 시프트가 빈 Op 쿼드를 만드는 것을 요구하기 때문에 정체된다면 행(4 및 5)의 시프트도 정체되고, 상기 실시예에서는 상기 스케쥴러(280)의 최상위 행 내의 빈 Op-쿼드만을 만들 수 있다.As with all other operations, the conditional branch operation BRCOND loaded into the scheduler 280 is shifted toward the bottom of the scheduler 280 as if the old operation retired, but no issue select scan is used for BRCOND. BRCOND enters branch state evaluation step 464 when the BRCOND reaches row 4 of scheduler 280. The branch evaluation unit 257 can evaluate one BRCOND per cycle supplying that the status code cc requiring each BRCOND is valid. These required status codes will be valid when the BRCOND reaches row 4 because older operations (operations in row 4 and row 5) are likely to have been completed. If the requested status code is not yet valid, the BRCOND is congested by preventing the Op quad from shifting out of row 4. If BRCOND is congested, the Op quads on row 4 are not shifted unless one or more of the 0 to 3 rows are empty (ie not valid) Op quads. If each of the rows 0 through 3 contains a valid op quad, the instruction decoder 240 cannot load a new op quad into the scheduler 280 while the BRCOND is congested. If the shift in row 3 is stagnant because the shift in rows 4 and 5 requires an empty Op quad, the shift in rows 4 and 5 is also stagnant, in this embodiment of the scheduler 280 Only empty Op-Quads within the top row can be created.

만일 분기가 올바르게 예상되었다면, 인출, 복호화 및 실행 동작은 중단없이 지속될 것이다. 만일 분기가 올바르게 예상되지 않았다면, 상기 잘못 예상된 분기보다 더 나중의 동작 결과가 처분되고 스케쥴러(280)로부터 퇴역되는 동안 복호기(240)가 상기 수정 명령의 인출 및 복호를 시작하도록 상기 BRCOND 다음의 올라른 명령 어드레스에서 복호기(240)를 재가동 시킨다. 스케쥴러(280)로 새로운 명령을 로딩하는 것은 상기 잘못 예상된 BRCOND 가 퇴역하고 스케쥴러(280)가 플러쉬될 때 까지 중지된다. 상기 잘못 예상된 분기가 퇴역되면, 실행 유니트(250)는 스케쥴러(280) 및 실행 유니트(251 내지 257) 내의 모든 동작을 유효하지 않게 함으로서 플러쉬된다. 상기 잘못 예상된 분기에 앞서 모든 동작이 완료되고 상기 잘못 예상된 분기가 상기 스케쥴러(280) 행의 바닥 밖으로 시프트 되기 전에 퇴역하며 상기 잘못 예상된 분기가 퇴역되기 전에는 스케쥴러(280)로 로드되는 새로운 명령은 없기 때문에 모든 동작들은 유효하지 않게 될 수 있다. 모든 동작의 비유효성은 퇴역해야 하는 동작의 식별을 요구하지 않기 때문에 처리가 간단하게 된다. 새로운 명령의 로딩을 지연시키는 것은 일반적으로 상기 잘못 예상된 분기가 바닥 행으로 시프트 하고 상기 새로운 제1 명령을 사용가능하게 하고 인출하기 위해 복호기(240)에 요구되는 시간과 거의 같은 양의 두 클록 사이클 다음에 퇴역하기 때문에 수행에 있어서 최소의 효과가 있다.If the branch is expected correctly, the fetch, decrypt, and execute operations will continue without interruption. If the branch was not expected correctly, the decoder 240 goes up after the BRCOND so that the decoder 240 starts to fetch and decode the correction command while later operation results are discarded and decommissioned from the scheduler 280 than the incorrectly expected branch. The decoder 240 is restarted at the other command address. Loading a new instruction into the scheduler 280 is suspended until the misexpected BRCOND is retired and the scheduler 280 is flushed. If the misexpected branch is decommissioned, execution unit 250 is flushed by invalidating all operations within scheduler 280 and execution units 251 through 257. A new instruction that is completed before all of the misexpected branches and retired before the misexpected branch is shifted out of the bottom of the scheduler row 280 and loaded into the scheduler 280 before the misexpected branch is retired All operations can be invalid because The invalidity of all actions does not require identification of the actions that must be retired, which simplifies the process. Delaying the loading of a new instruction is generally two clock cycles in an amount approximately equal to the time required for the decoder 240 to shift the misexpected branch to the bottom row and to enable and withdraw the new first instruction. There is a minimum effect on performance as it is decommissioned next time.

실행 엔진(250)은 중단가능한 동작 및 중단가능하지 않은 동작을 실행한다. 중단가능하지 않은 동작은 추리적으로 실행될 수 없고 단지 결과가 안전하게 처분되는 때에 실행된다. 중단가능한 동작이 그 파이프라인의 최종 단계에 도달하고 완료된 다음, 그 실행의 모든 결과는 동작 처분 유니트(260)가 그 결과의 안전을 처분하는 것을 결정할 때 까지 스케쥴러(280)내에 저장된다. 각 사이클에서, 하나의 Op 쿼드(4 동작까지)는 스케쥴러(280)로부터 처분되고 퇴역될 수 있다.Execution engine 250 executes a non-stoppable operation. Non-interruptible operations cannot be performed speculatively, only when the results are safely disposed of. After the abortable operation reaches the final stage of the pipeline and is completed, all the results of the execution are stored in the scheduler 280 until the action disposal unit 260 determines to dispose of the safety of the result. In each cycle, one Op quad (up to four operations) may be disposed of and retired from scheduler 280.

Ⅱ. 스케쥴러II. Scheduler

도 5는 24 동작까지 관련된 24 엔트리를 포함하고 있는 스케쥴러(280)의 한 실시예를 보여주고 있다. 각 각의 엔트리에는 스케쥴링 저장기(540)내의 기억장치 소자(보통 플립-플롭) 및 상기 엔트리와 관련된 로직(530,532,534,536 및 538)의 부분이 포함되어 있다. 상기 기억장치 소자는 실행을 기다리는, 실행중인 또는 완료된 동작(Op)에 관한 정보를 저장한다. 동작 복호기(540)는 명령 복호기(240)로부터 4개의 RISC86 동작을 수신하고 상기 스케쥴러 저장기(540)의 최상위 행 내의 새로운 Op 쿼드를 로드 또는 사용한다. 상기 저장기(540)내의 필드가 도 7에 도시되어 있으며, 이들은 도 3에 도시된 RISC86 명령와 관련된 필드와 관련된 것이지 동일한 것은 아니다. 몇 몇 필드는 상기 관련된 동작의 전체 실행과 동일한 값을 유지하고 있는데 이후 "상태 필드"로 언급한다. 다른 필드들은 동작이 실행을 완료할 때와 같이 나중에 로드되거나 변화되는데 이후 "다이내믹 필드"로 언급된다.5 shows one embodiment of a scheduler 280 that includes 24 entries related up to 24 operations. Each entry includes a storage element (usually flip-flop) in the scheduling store 540 and portions of logic 530, 532, 534, 536 and 538 associated with the entry. The storage element stores information relating to a running or completed operation Op waiting for execution. The operation decoder 540 receives four RISC86 operations from the command decoder 240 and loads or uses the new Op quads in the top row of the scheduler store 540. The fields in the storage 540 are shown in FIG. 7, which are related to, but not identical to, the fields related to the RISC86 instruction shown in FIG. 3. Some fields maintain the same values as the overall execution of the related operation, hereinafter referred to as "status fields". The other fields are loaded or changed later, such as when the action completes execution, and are later referred to as "dynamic fields."

상기 스케쥴링 저장기(540)내의 기억장치 소자는 6개 행 깊이인 시프트 레지스터처럼 볼 수 도 있다. 각 각의 행에는 4개의 엔트리가 포함되어 있는데, 각 엔트리는 RISC86 명령과 관련되어 있다. 각 각의 클록 사이클은에서 행 내에 정체되지 않는 Op 쿼드는 만일 다음 행이 빈 행이거나 아래로 시프트 하는 Op 쿼드를 포함하고 있다면, 상기 다음 행으로 아래로 시프트 된다. 상기 바닥 행(행(5))내의 Op 쿼드는 만일 상기 바닥 행과 관련된 모든 동작이 처분되었다면 스케쥴러(280) 밖으로 시프트할 것이다.The storage elements in the scheduling store 540 may look like shift registers that are six rows deep. Each line contains four entries, each associated with a RISC86 instruction. Each clock cycle is shifted down to the next row if the op quad does not stagnate in the row at if the next row is an empty row or contains an op quad shifting down. The Op quad in the bottom row (row 5) will shift out of scheduler 280 if all operations associated with the bottom row have been disposed.

도 6은 스케쥴링 저장기(540) 부분의 한 실시예를 보여주고 있다. 도 6에 도시된 스케쥴러 저장기(540)의 부분에는 스케쥴러(280)의 행(3) 내의 다이내믹 필드를 위한 기억장치 소자(에지 트리거 플립-플롭(623)) 및 같은 행 내의 상태 필드를 위한 기억장치 소자(에지 트리거 플립-플롭(643))이 포함되어 있다. 행(3)에는 도 6에 도시되어 있고 아래에 후술할 상기 다이내믹 필드 및 상태 필드내의 각 비트를 위한 비슷한 기억장치 소자가 포함되어 있다. 상기 스케쥴링 저장기(540) 내의 다른 행들은 행(3)과 유사하거나 동일하고 행(3)과 직렬로 연결되어 있다.6 shows one embodiment of a portion of the scheduling store 540. The portion of the scheduler store 540 shown in FIG. 6 includes a storage element for the dynamic field in the row 3 of the scheduler 280 (edge trigger flip-flop 623) and memory for the status field in the same row. Device elements (edge trigger flip-flop 643) are included. Row 3 contains similar storage elements for each bit in the dynamic field and status field shown in FIG. 6 and described below. The other rows in the scheduling store 540 are similar or identical to row 3 and are connected in series with row 3.

도 6에서, 플립-플롭(642,643,644)은 행(2,3,4) 각 각에 동일한 상태 필드 비트를 저장하고; 행(2) 부터 행(4) 까지의 Op 쿼드 시프트처럼 플립-플롭(642) 부터 플립-플롭(643)까지의 Op 쿼드 시프트와 관련된 비트값을 저장한다. 광역 제어 로직(520)은 신호 LdEntry[i]를 각 행(i=0∼5)에 하나씩 발생하는데, 시프트가 해당 행이 발생하는지를 제어한다. 상기 행은 클록 신호(CLK)의 상승 에지(rising edge)에서 중복 기록된다. 예를들어, 신호 LdEntry 3은 플립-플롭(643)을 사용가능(enable) 또는 사용불능(disable)중 어느 한 상태로 만들고, 신호 LdEntry 4는 플립-플롭(644)을 사용가능 또는 사용불능 중 어느 한 상태로 만든다. 또한, Op 쿼드가 행(4)에서 정체되면, 신호 LdEntry 4는 플립-플롭(644)이 값을 유지하도록 표명되지 않는다. 상기 신호 LdEntry[i]의 독립성은 Op 쿼드의 정체 이상이 될 수 도 있는 빈 Op 쿼드 엔트리의 제출을 허용한다. 예를들어, 만일 Op 쿼드가 행(4)내에 정체되면, 신호 LdEntry 3이 행(2)으로부터 값 OpField2 가 클록 신호(CLK)의 상승 에지에서 행(3)으로 시프트 되도록 표명될 수 있다(빈 행은 예를들어 명령 복호기(240)가 분기 목표물 캐쉬 미스로 인해 매 사이클에 Op 쿼드를 공급할 수 없는경우 발생할 수 있다). 첨부 B 의 표 B.1 은 상태 필드를 수행하는 회로의 동작이 설명되어 있다.In Fig. 6, flip-flops 642, 643, 644 store the same status field bits in each of rows 2, 3, and 4; Stores the bit values associated with the op quad shift from flip-flop 642 to flip-flop 643, as does the op quad shift from row 2 to row 4. The wide area control logic 520 generates one signal LdEntry [i] for each row (i = 0 to 5), the shift controlling whether that row occurs. The row is overwritten on the rising edge of the clock signal CLK. For example, signal LdEntry 3 enables flip-flop 643 to either enable or disable, and signal LdEntry 4 enables or disables flip-flop 644. It makes one state. Also, if the op quad is stuck in row 4, signal LdEntry 4 is not asserted so that flip-flop 644 retains its value. The independence of the signal LdEntry [i] allows the submission of an empty Op quad entry that may be more than the congestion of the Op quad. For example, if the Op quad is stuck in row 4, signal LdEntry 3 may be asserted from row 2 such that the value OpField2 is shifted to row 3 at the rising edge of clock signal CLK (empty). A row may occur, for example, if the instruction decoder 240 cannot supply an Op quad in every cycle due to a branch target cache miss). Table B.1 in Appendix B describes the operation of the circuitry that performs the status field.

스케쥴링 저장기(540) 밖의 새로운 데이터가 오래된 데이터가 시프트 하는 동안 다이내믹 필드로 삽입되기도 하기 때문에 상태 필드보다는 다이내믹 필드가 더 복잡하고, 상기 새로운 데이터는 다음 행으로 시프트 하기도 하고 하지 않기도 하는 수정 Op 쿼드와 함께 머물러 있어야 한다. 신호 OpFieldValue2 및 OpFieldValue3 는 행(2) 및 행(3) 내의 각 각의 제1 및 제2 Op 쿼드와 관련된 정보를 나타낸다. 스케쥴러 저장기(540) 밖의 회로는 신호 NewValue2 및 NewValue3 를 발생하여 상기 제1 및 제2 Op 쿼드와 각 각 관련된 정보를 변경시킨다. 멀티플렉서(632)는 새로운 정보 신호 OpNewField2 가 새로운 값 NewValue2 로 변하는지를 선택하여 상기 제1 Op 쿼드를 변화시키거나 오래된 값 OpFieldValue2 와 같은 값으로 유지된다. 멀티플렉서(633)는 새로운 정보 신호 새로운 정보 신호 OpNewField3 이 새로운 값 NewValue3 으로 변하는지를 선택하거나 또는 오래된 값 OpFieldValue3 과 같은 값으로 유지된다.Since new data outside the scheduling store 540 is inserted into the dynamic field during the shift of the old data, the dynamic field is more complex than the state field, and the new data may or may not shift to the next row. Stay together. The signals OpFieldValue2 and OpFieldValue3 represent information associated with each of the first and second op quads in rows 2 and 3 respectively. Circuitry outside the scheduler store 540 generates signals NewValue2 and NewValue3 to change the information associated with the first and second Op quads, respectively. The multiplexer 632 changes the first Op quad by selecting whether the new information signal OpNewField2 changes to the new value NewValue2 or remains at the same value as the old value OpFieldValue2. The multiplexer 633 selects whether the new information signal New information signal OpNewField3 changes to the new value NewValue3 or remains at the same value as the old value OpFieldValue3.

상기 제1 Op 쿼드와 관련된 다이내믹 필드 값이 변하든지 변하지 않든지, 값 NewOpField2는 클록 신호(CLK)의 상승 에지에서 행(2)으로 기록되거나 행(3)으로 기록될 수 있다. 상기 제1 Op 쿼드를 행(3)으로 시프트 시키기 위해, 신호 LdEntry3 은 멀티플렉서(613)가 신호 NewOpField2 를 신호(CLK)의 상승 에지에서 플립-플롭(623)에 기록되는 신호 NextOpField3 로 선택하게 한다. 상기 제1 Op 쿼드가 행(3)으로 시프트되는 것을 막기 위해, 신호 LdEntry3은 멀티플렉서(613)가 플립-플롭(23)으로 기록되는 신호 NewOpField3 을 선택하게 한다. 신호 LdEntry4 및 멀티플렉서(614)는 비슷하게 상기 제2 Op 쿼드가 행(3)에서 행(4)로 시프트 되는 것을 허용되게 선택한다. 첨부 B 의 표 B.2 는 다이내믹 필드를 수행하는 회로의 동작을 설명하고 있다.Whether the dynamic field value associated with the first op quad is changed or not, the value NewOpField2 may be written to row 2 or row 3 at the rising edge of the clock signal CLK. To shift the first op quad to row 3, signal LdEntry3 causes multiplexer 613 to select signal NewOpField2 as the signal NextOpField3 that is written to flip-flop 623 at the rising edge of signal CLK. To prevent the first Op quad from shifting into row 3, signal LdEntry3 causes multiplexer 613 to select signal NewOpField3 that is written to flip-flop 23. Signal LdEntry4 and multiplexer 614 similarly select to allow the second op quad to be shifted from row 3 to row 4. Table B.2 in Appendix B describes the operation of the circuit for performing the dynamic fields.

Ⅱ. A 스케쥴러 로딩II. A scheduler loading

명령 복호기(240)는 매크로명령을 복호하고 스케쥴러(280)의 행(0)(최상위)가 비워지거나 또는 행(1)으로 시프트하는 Op 쿼드를 포함할 때마다 스케쥴러(280)로 전송되는 4개의 RISC86 명령의 세트를 형성한다. 엠코드 ROM(246)은 Op 쿼드를 포맣할 수 있는데 상기 Op 쿼드는 내부에 x86 명령의 수행의 실제 부분인 동작이 없다. 이것은 다양한 x86 명령이 엠코드 ROM(246) 내의 동일한 코드내의 다른 엔트리 지점을 가지고 있고 엠코드 ROM(246) 내부의 동작이 분기를 Op 쿼드의 중간으로 가게 하므로 발생될 수 있다. 복호화 되는 상기 x86 명령을 필요로 하지 않는 명령은 널(null)된다(NO-OPs로 변화됨). 복호 명령은 동작 필드의 대체 가능한 환경도 포함하고 있다. 가변 대체를 위해, 에뮬레이션 환경은 예를들면, 디폴트 어드레스 및 현재 코드 세크먼트용 데이터 크기 및 레지스터 수 및 복호화 되는 x86 명령을 포함하고 있는 가변 환경을 유지하고 있다. 상기 가변 환경은 엠코드 ROM(246)으로부터 동작내의 장소홀더(placeholder) 값을 교체시킨다. 환경 가변 대체는 여러 환경 가변이 하나의 엠코드 섹션을 변경시켜 여러 x86 명령을 수행하기 때문에 엠코드 ROM(246)의 유연성을 증가시킨다. 명령 복호기(240) 및/또는 동작 복호기(510)는 필요한 경우 환경 가변 대체를 수행한다.The instruction decoder 240 decodes the macro instruction and sends four to the scheduler 280 each time the row (0) (top) of the scheduler 280 is empty or contains an op quad shifting to row (1). Form a set of RISC86 instructions. Emcode ROM 246 can format an Op quad, which has no operation inside it that is the actual part of the execution of the x86 instruction. This can occur because various x86 instructions have different entry points in the same code in the encode ROM 246 and the operation inside the encode ROM 246 moves the branch into the middle of the Op quad. Instructions that do not require the x86 instruction to be decoded are nulled (changed to NO-OPs). The decryption command also contains a replaceable environment for the action field. For variable replacement, the emulation environment maintains a variable environment that includes, for example, the default address and data size for the current code segment and the number of registers and the x86 instructions to be decrypted. The variable environment replaces the placeholder value in operation from the MPEG ROM 246. Environment variable substitution increases the flexibility of the MPEG ROM 246 because several environment variables change one MPEG section to perform multiple x86 instructions. The instruction decoder 240 and / or the operation decoder 510 performs variable substitution if necessary.

스케쥴러(280)내에는, 동작 복호기(510)는 명령 복호기(240)로부터 Op 쿼드를 수신하고 스케쥴링 저장기(540)의 최상위 행 내에 저장 필드를 채운다. 만일 명령 복호기(240)에서 어떠한 Op 쿼드도 사용불가인 경우라면, 동작 복호기(510)는 최상위 행 내의 Op 쿼드가 아래로 시프트 되는 때 빈 Op 쿼드를 만든다.Within the scheduler 280, the operation decoder 510 receives the Op quad from the instruction decoder 240 and fills the storage field in the top row of the scheduling store 540. If no op quads are available in the instruction decoder 240, the operation decoder 510 creates an empty op quad when the op quad in the top row is shifted down.

도 7은 정적인 엔트리 필드(541), 다이내믹 필드(542) 및 스케쥴러 저장기(540) 내의 Op 쿼드 필드(549)의 예를 설명하고 있다. 엔트리 필드(541,542)의 초기값은 해당 RISC86 명령에 의존한다. 동작 복호기(540)는 다른 필드에 기초한 RISC86 명령으로부터 몇 몇 필드를 수정하고, 현재 필드로부터 새로운 필드를 도출해내고, 일부 필드는 물리적으로 다른 필드로 교체하며, 변경되지 않은 소수 필드를 통과시킨다. Op 쿼드 필드는 전체가 Op 쿼드에 해당하는 정보로부터 발생된다.7 illustrates an example of a static entry field 541, a dynamic field 542 and an op quad field 549 in the scheduler store 540. The initial values of the entry fields 541, 542 depend on the corresponding RISC86 instruction. The operation decoder 540 modifies some fields from RISC86 instructions based on other fields, derives new fields from the current fields, replaces some fields physically with other fields, and passes through unchanged minority fields. The Op Quad field is generated from information corresponding to the Op Quad entirely.

Ⅱ. A.1 정적 엔트리 필드II. A.1 Static Entry Fields

한 실시예에서, 각 각의 엔트리에는 다음과 같이 정의되는 정적 필드(541)이 포함되어 있는데, 모든 신호는 하이(high)로 활동한다.In one embodiment, each entry includes a static field 541, defined as follows, with all signals acting high.

Field Type[2:0] 은 엔트리와 관련된 동작의 타입을 특정한다. 가능한 타입으로는 : 메모리를 참고하거나 또는 폴트가능한(faultable) 어드레스를 발생하는 SpecOp; LdOp; StOp; 레지스터 유니트(253)에 의해서만 실행가능한 RegOp; 및 레지스터 유니트 "253" 또는 "254" 중 하나에 의해 실행가능한 RegOp 가 있다. 멀티미디어 유니트(256)은 멀티미디어 애플리케이션에 관한 RegOp 의 선택된 타입을 실행한다. 부동소숫점 동작(FpOps)은 부동소숫점 유니트(255)에 의해 실행되는 SpecOp 의 타입이다. 첨부 B 의 표 B.3 은 필트 타입용 값을 발생하는 동작 복호기(510)내의 회로를 설명하고 있다.Field Type [2: 0] specifies the type of action associated with the entry. Possible types include: SpecOp referencing memory or generating a faultable address; LdOp; StOp; RegOp executable only by the register unit 253; And RegOp executable by either register unit "253" or "254". The multimedia unit 256 executes the selected type of RegOp for the multimedia application. Floating point operation (FpOps) is a type of SpecOp that is executed by floating point unit 255. Table B.3 in Appendix B describes the circuitry in the operation decoder 510 that generates the values for the filter type.

필드 LD_Imm 은 동작이 선행하는 LIMMOp 으로부터 중간 값을 필요로 하는지 여부를 나타낸다. 상기 중간 값은 만일 동작이 상기 엔트리 냉의 필드 DestVal 내부에 유지되는 대형 변위 대 소형(8-비트) 변위를 사용하는 LdStOp 라면 대형 변위이다. RegOp를 위해, 상기 중간 값은 상기 제2 오퍼랜드 Src2 이다. 첨부 B 의 표 B.4 는 필드 Ld_Imm 용 값을 발생하는 동작 복호기(510)내의 회로를 설명하고 있다.The field LD_Imm indicates whether the operation requires an intermediate value from the preceding LIMMOp. The intermediate value is large displacement if the operation is LdStOp using large displacement versus small (8-bit) displacement maintained inside the field DestVal of the entry cold. For RegOp, the intermediate value is the second operand Src2. Table B.4 in Appendix B describes the circuitry in the operation decoder 510 for generating values for the field Ld_Imm.

필드 SrclReg[4:0], Src2Reg[4:0] 및 SrcStReg[4:0] 은 상기 제1 소스 오퍼랜드 Src1, 상기 제2 소스 오퍼랜드 Src2 및 상기 동작의 저장 데이터 오퍼랜드 를 각 각 보유하는 레지스터를 식별하는 레지스터 번호를 가지고 있다. 첨부 B 의 표 B.5, B.6 및 B.7 은 SrclReg, Src2Reg, Src3Reg 및 SrcStReg 용 값을 발생하는 동작 복호기(510) 내의 회로를 설명하고 있다.Fields SrclReg [4: 0], Src2Reg [4: 0], and SrcStReg [4: 0] identify the registers holding the first source operand Src1, the second source operand Src2, and the stored data operand of the operation, respectively. Has a register number. Tables B.5, B.6, and B.7 in Appendix B describe the circuitry in the operation decoder 510 that generates values for SrclReg, Src2Reg, Src3Reg, and SrcStReg.

필드 DestReg[4:0] 은 상기 동작의 목적 레지스터를 식별하는 레지스터 번호를 가지고 있다. 첨부 B 의 표 B.8 은 필드 DestReg 용 값을 발생하는 동작 복호기(510) 내의 회로를 설명하고 있다.Fields DestReg [4: 0] contain a register number that identifies the destination register of the operation. Table B.8 in Appendix B describes the circuitry in the operation decoder 510 for generating values for the field DestReg.

필드 SrclBM[1:0], Src2BM[1:0] 및 Src2BM[2] 는 오퍼랜드 Src1 및 Src2 가 동작의 실행에 유효해야 함을 나타낸다. 정의에 의해, SrclBM[2] 및 Src2BM[2]는 Srcl2BM[2]와 같다. SrclBM[1:0] 및 Src2BM[1:0]의 비트 2,1 및 0 는 각 각 비트[31:16], [15:8] 및 [7:0]을 나타낸다. 첨부 B 의 표 B.9 는 필드 SrclBM[1:0], Src2BM[1:0] 및 Srcl2BM[2]용 값을 발생하는 동작 복호기(510)내의 회로를 설명하고 있다.Fields SrclBM [1: 0], Src2BM [1: 0] and Src2BM [2] indicate that operands Src1 and Src2 should be valid for the execution of the operation. By definition, SrclBM [2] and Src2BM [2] are the same as Srcl2BM [2]. Bits 2, 1 and 0 of SrclBM [1: 0] and Src2BM [1: 0] represent bits [31:16], [15: 8] and [7: 0], respectively. Table B.9 of Appendix B describes the circuitry in the operation decoder 510 that generates values for the fields SrclBM [1: 0], Src2BM [1: 0], and Srcl2BM [2].

필드 SrcStBM[2:0]은 저장 데이터 오퍼랜드의 바이트가 StOp 의 수행에 필요한지를 나타낸다. 상기 비트 해당분은 SrclBM 또는 Src2BM 과 같다. 첨부 B 의 표 B.10 은 필드 SrcStBM 용 값을 발생하는 동작 복호기(510)내의 회로를 설명하고 있다.Field SrcStBM [2: 0] indicates whether bytes of the stored data operand are required for the performance of StOp. The bit equivalent is equal to SrclBM or Src2BM. Table B.10 in Appendix B describes the circuitry in the operation decoder 510 for generating values for the field SrcStBM.

필드 OpInfo[12:0]는 상기 실행 유니트 또는 상기 동작이 실행 가능한지 여부에 의존하는 동작 처분 유니트(OCU)를 위한 추가 정보를 가지고 있다. 필드 OpInfo 는 세 가지 가능성 있는 필드 정의를 가지고 있는데, 그것은 상기 동작이 RegOp, LdStOp 또는 SpecOp 이냐에 따라 달라진다. RegOp를 위해서, 필드 OpInFo에는 : RISC86 타입 필드로부터 4 비트; RISC86 ISF 필드로부터 2 비트; RISC86 Seg 필드로부터 4 비트; 동작을 위한 효과적인 데이터 크기 DataSz 를 나타내는 2 비트; 및 어드레스 계산용 효과적인 어드레스 크기(32/16 비트)를 나타내는 비트 AddrSz 의 연결을 포함하고 있다. SpedOp 를 위해서는, 필드 OpInfo 는 RISC86 타입 필드로부터 4 비트 및 RISC86 cc 필드로부터 5 비트의 연결을 포함하고 있다. 첨부 B의 표 B.11은 필드 OpInfo 용 값을 발생하는 동작 복호기(510)내의 회로를 설명하고 있다.Field OpInfo [12: 0] has additional information for an operation disposal unit (OCU) that depends on the execution unit or whether the operation is executable. The field OpInfo has three possible field definitions, depending on whether the operation is RegOp, LdStOp or SpecOp. For RegOp, field OpInFo contains: 4 bits from the RISC86 type field; 2 bits from the RISC86 ISF field; 4 bits from RISC86 Seg field; Two bits representing an effective data size DataSz for operation; And a concatenation of bits AddrSz representing the effective address size (32/16 bits) for address computation. For SpedOp, the field OpInfo contains a concatenation of 4 bits from the RISC86 type field and 5 bits from the RISC86 cc field. Table B.11 in Annex B describes the circuitry in the operation decoder 510 for generating values for the field OpInfo.

Ⅱ. A.2 다이내믹 엔트리 필드II. A.2 Dynamic Entry Field

다이내믹 엔트리 필드(542)는 동작 복호기(510)에 의해 초기화 되지만, 동작이 실행되는 동안에는 변경될 수 있다. 일반적으로, 각 각의 엔트리에는 필요할 다이내믹 필드를 변경하기 위한 로직이 포함되어 있다. 한 실시예의 엔트리용 다이내믹 필드(542)를 아래에 설명하였다.The dynamic entry field 542 is initialized by the operation decoder 510 but can be changed while the operation is being executed. In general, each entry contains logic for changing the required dynamic fields. An entry dynamic field 542 of one embodiment is described below.

필드 State[3:0]은 도 4A 내지 도 4D의 파이프라인에 대한 동작의 실행 상태를 나타낸다. (S3,S2,S1는 State[3:0]용 대안 신호 이름이다). 필드 State 는 4 비트를 지나는 하나의 필드를 시프팅 시킴으로서 5가지 가능 상태를 복호화 한다. 값 b0000 은 "발행되지않은" 상태를 나타내고; b0001, b0011 및 b0111 은 오퍼랜드 포워드 단계, 실행 단계 1 및 실행 단계 2 에서의 동작을 나타내며; 그리고 b1111 은 동작이 완료되었음을 나타낸다. 대부분의 동작은 필드 State 를 b0000 인 "발행되지않은" 상태로 설정하여 스케쥴러(280)로 들어가고, 필드 State 는 동작이 실행 파이프라인으로 발행된 다음 변경된다. 필드 State 는 동작이 발행되거나 또는 파이프라인 단계로 나아갈 때 업데이트(효과적으로 시프트) 된다. 상기 파이프라인의 완료 직후, 필드 State 는 동작이 처분을 기다리고 퇴역되는 동안 b1111 로 설정된다. 모든 엔트리의 필드 State 는 중단 사이클이 진행되는 동안 b1111 로 설정된다. 일부 동작(예를들어 로드 일정 동작 LDK)은 1111 의 초기 상태 필드 값을 가지고 있어서 스케쥴러(280)로 로드 되었을 때 이미 완료되었다. 첨부 B 의 표 B.12 는 상기 관련 동작의 실행 동안에 필드 State 를 수정하는 스케쥴러(280) 내의 필드 State 및 회로를 초기화하는 동작 복호기(510) 내의 회로를 설명하고 있다.Field State [3: 0] represents the execution state of the operation for the pipeline of FIGS. 4A-4D. (S3, S2, S1 are alternative signal names for State [3: 0]). Field State decodes five possible states by shifting one field that passes four bits. The value b0000 indicates a "not issued" state; b0001, b0011 and b0111 represent operations in operand forward step, execution step 1 and execution step 2; And b1111 indicates that the operation is completed. Most of the operation enters the scheduler 280 with the field State set to "unissued" with b0000, which is changed after the operation is issued to the execution pipeline. The field State is updated (effectively shifted) when an action is issued or goes to the pipeline stage. Immediately after completion of the pipeline, the field State is set to b1111 while the operation is retiring and waiting for disposal. The field State of all entries is set to b1111 during the abort cycle. Some operations (eg, load schedule operation LDK) have an initial state field value of 1111 and have already been completed when loaded into the scheduler 280. Table B.12 of Appendix B describes the circuitry in the operation decoder 510 that initializes the field state and circuitry in the scheduler 280 that modifies the field state during execution of the associated operation.

레지스터 유니트(253(254가 아님))를 나타내는 필드 Exec1 는 상기 동작을 실행하고 상기 동작이 실행 유니트(253)을 성공적으로 발행하는 때 설정된다. 표 B.13 은 필드 Exec1 을 설정 및 변경하는 로직을 보여주고 있다.A field Exec1 indicating a register unit 253 (not 254) is set when executing the operation and when the operation successfully issues the execution unit 253. Table B.13 shows the logic for setting and changing field Exec1.

필드 DestBM[2:0] 는 필드 RestReg 에 의해 표시된 레지스터의 바이트가 동작 수정임을 나타내는 바이트 마스크를 보유하고 있다. DestBM[2], DestBM[0] 및 DestBM[0] 은 각 각 [31:16], [15:8] 및 [7:0] 에 해당한다. 필드 DestBM 은 동작 복호기(510)에 의해 초기화되고 중단 사이클 동안 클리어 되기도 한다. DestBM 과 관련된 로직이 첨부 B 의 표 B.14 에 설명되어 있다.Field DestBM [2: 0] holds a byte mask indicating that the byte in the register indicated by field RestReg is an operation modification. DestBM [2], DestBM [0] and DestBM [0] correspond to [31:16], [15: 8] and [7: 0], respectively. The field DestBM is initialized by the operation decoder 510 and may be cleared during the abort cycle. The logic related to DestBM is described in Table B.14 in Appendix B.

필드 DestVal[31:0] 는 동작의 실행 결과, DestReg 로 처분될 결과를 유지하고 있다. DestBM 은 동작 실행 후 바이트가 유효한가를 나타낸다. 필드 DestVal 은 동작이 실행 단계 1 또는 2를 완료 했을 때(동작의 타입에 따라 다름) 로드되며; 실행되지 않은 동작을 위해서는(예를들어 LDK), DestVal 은 적절한 결과 값으로 초기화 된다. 필드 DestVal 은 동작이 완료되었을 때 결과가 저장되기 전 일시적인 기억장치로 사용될 수 있다. 한 실시예에서, 필드 DestVal 는 처음에는 RegOp 및 LdStOp 각 각을 위한 중간값 및 변위값을 보유하고, BRCOND 를 위해서 선택적인(연속적 또는 대상물) 분기 프로그램 카운터 값을 보유한다. 필드 DestVal 에 관련된 로직이 첨부 B 의 표 B.15 에 설명되어 있다.Fields DestVal [31: 0] hold the result of the action being executed and the result that will be disposed of in DestReg. DestBM indicates whether the byte is valid after executing the operation. The field DestVal is loaded when the operation has completed execution phase 1 or 2 (depending on the type of operation); For unexecuted operations (eg LDK), DestVal is initialized with the appropriate result. The field DestVal can be used as temporary storage before the result is saved when the operation is complete. In one embodiment, the field DestVal initially holds the median and displacement values for RegOp and LdStOp respectively, and has an optional (continuous or object) branch program counter value for BRCOND. The logic related to the field DestVal is described in Table B.15 in Appendix B.

필드 StatMod[3:0] 는 상태 그룹이 동작 수정을 플래그 하는 것을 나타내는 상태 그룹 마크를 보유하고 있다. 3,2,1,0 비트는 각 각 플래그 비트 그룹 {EZF,ECF}, OF, {SF,ZF,AF,PF} 및 CF 에 해당하고, 여기서 플래그 비트 EZF, ECF, OF, SF, AF, PF 및 CF 는 RegOps 에 의해 수정되기도 한다. 필드 StatMod 는 비-RegOps 를 위해서 모두 제로이고 중단 사이클 동안에는 클리어 된다. 필드 DestVal 에 관련된 로직은 첨부 B 의 표 B.16 에 설명되어 있다.Field StatMod [3: 0] holds a state group mark indicating that the state group flags an action modification. The 3,2,1,0 bits correspond to the flag bit groups {EZF, ECF}, OF, {SF, ZF, AF, PF} and CF, respectively, where the flag bits EZF, ECF, OF, SF, AF, PF and CF are also modified by RegOps. The field StatMod is all zeros for non-RegOps and is cleared during the abort cycle. The logic related to the field DestVal is described in Table B.16 in Appendix B.

필드 StatVal[7:0] 는 상태 레지스터 EFlags 로 처분될 동작의 상태 결과 값을 보유하고 있다. StatMod 는 플래그 그룹이 실행 후 영향을 받았음을 나타낸다. StatVal 은 RegOps 를 위해서만 중요한데; 이것은 StatVal 의 영향이다. StatVal 은 상기 RegOp 가 실행 단계 1 을 완료하였을 때 로드된다. 필드 StatVal 에 관련된 로직은 첨부 B 의 표 B.17 dp 설명되어 있다.The fields StatVal [7: 0] hold the status result value of the operation to be disposed in the status register EFlags. StatMod indicates that the flag group was affected after execution. StatVal is important only for RegOps; This is the effect of StatVal. StatVal is loaded when RegOp completes execution step 1. The logic associated with the field StatVal is described in Table B.17 dp of Appendix B.

필드 OprndMatch_XXsrcY - 여기서 "XX" 는 LU,SU,RUX 또는 RUY 이고 "Y" 는 1 또는 2 이다 - 는 더 큰 광역 중요성과는 대조를이루는 두 개의 파이프라인 단계 사이를 통과하는 전송 정보를 위한 추가 기억장치 소자이다. 첨부 B 의 표 B.18 에 필드 OprndMatch_XXsrcY 를 제어하는 로직이 설명되어 있다.Field OprndMatch_XXsrcY where "XX" is LU, SU, RUX or RUY and "Y" is 1 or 2-additional memory for transmission information passing between two pipeline stages in contrast to greater global importance Device element. Table B.18 in Appendix B describes the logic that controls the field OprndMatch_XXsrcY.

필드 DBN[3:0] 은 LdStOp 를 위한 4 개의 데이터 브레이트포인트 상태 비트 Bn(n=0 부터 3)를 보유하고 있다. 이 필드는 초기에는 모두 제로이고, 다음으로 관련된 LdStOp 가 실행되면 적절한 유니트로부터 브레이크포인트가 다음의 트래핑(trapping)을 위해 레코드 된다. 첨부 B 의 표 B.19 에 필드 DBN[3:0] 에 관련된 로직이 설명되어 있다.Field DBN [3: 0] holds four data brutepoint status bits Bn (n = 0 to 3) for LdStOp. This field is initially all zeros and a breakpoint from the appropriate unit is recorded for the next trapping when the next associated LdStOp is executed. The logic associated with fields DBN [3: 0] is described in Table B.19 of Appendix B.

Ⅱ. A.3 Op 쿼드 필드II. A.3 Op Quad Field

스케쥴러(280) 내의 각 행에는 상기 Op 쿼드를 전체로 관련된 4 개의 엔트리 플러스 Op 쿼드 필드(549)가 포함되어 있다. 아래에 도 7에 도시된 추가의 Op 쿼드 필드(549)가 열거한다. 동작 복호기(510)은 Op 쿼드 필드를 초기화한다. 대부분의 Op 쿼드 필드는 정적이다. 일부 Op 쿼드 필드가 다이내믹 하고, 스케쥴러(280) 내의 각 행 내의 로직은 필요한 경우 상기 Op 쿼드 필드를 변경시킨다.Each row in the scheduler 280 includes four entries plus an Op quad field 549 associated with the Op quad as a whole. Listed below is a further Op quad field 549 shown in FIG. The operation decoder 510 initializes the Op quad field. Most Op quad fields are static. Some Op quad fields are dynamic, and the logic in each row in scheduler 280 changes the Op quad fields as needed.

필드 Emcode 는 상기 Op 쿼드가 MacDec(242) 또는 벡터 복호기(244)(즉, 엠코드 ROM(246))로부터 온 것인지를 나타내며, 표 B.20 이 필드 Emcode 의 설정을 설명하고 있다.Field Emcode indicates whether the Op Quad is from MacDec 242 or Vector Decoder 244 (i.e., ROM ROM 246), and Table B.20 describes the setting of Field Emcode.

필드 Eret 는 엠코드 Op 인지 그리고 복잡한 매크로명령을 나타내는 일련의 Op 쿼드내의 마지막 Op 쿼드로 마크되었는지를 나타낸다. 표 B.12 는 필드 Eret 를 설정하는 로직을 설명하고 있다.Field Eret indicates whether it is an MPEG op and marked as the last op quad in a series of op quads representing a complex macro instruction. Table B.12 describes the logic for setting the field Eret.

필드 FaultPC[3:0] 는 상기 행 내의 제1 동작에 관련된 논리적 매크로명령 폴트 프로그램 카운터 값을 보유하고 있다. 동작 처분 유니트(260)은 폴트 실행을 처리할 때 필드 FaultPC 를 사용한다. 표 B.22 가 필드 FaultPC 를 설정하는 로직을 설명하고 있다.Field FaultPC [3: 0] holds the logical macrocommand fault program counter value associated with the first operation in the row. The action disposal unit 260 uses the field FaultPC when processing the fault execution. Table B.22 describes the logic that configures the field FaultPC.

필드 BPTInfo[14:0] 는 Op 쿼드가 발생되는 때 분기 예상 표-관련 정보를 보유하고 있다. 필드 BPTInfo 는 BRCOND 를 포함하고 있는 MacDec-발생된 Op 쿼드만으로 정의된다. 표 B.23 이 필드 BPTInfo 를 설정하는 로직을 설명하고 있다.Fields BPTInfo [14: 0] hold branch prediction table-related information when an op quad occurs. The field BPTInfo is defined only with MacDec-generated Op quads containing BRCOND. Table B.23 describes the logic for setting this field BPTInfo.

필드 RASPtr[2:0] 는 Op 쿼드가 발생되었을 때의 귀환 어드레스 스택의 최상위로의 포인터를 보유하고 있다. 필드 RASPtr 은 BRCOND 를 포함하고 있는 MacDec-발생된 Op 쿼드만으로 정의된다. 표 B.24 가 필드 RASPtr 을 설정하는 로직을 설명하고 있다.Fields RASPtr [2: 0] hold the pointer to the top of the feedback address stack when the op quad occurred. The field RASPtr is defined only with MacDec-generated Op quads containing BRCOND. Table B.24 describes the logic for setting the field RASPtr.

필드 LimViol 는 Op 쿼드가 코드 세그먼트 제한 위반이 목표 어드레스상에서 검출되는 전송 제어 명령의 복호임을 나타낸다. 대부분의 행을 위해, 필드 LimViol 은 정적이다. 필드 LimViol 은 행(1) 내에서 로드되며 첨부 B 의 표 B.25 에 요약되어 있다.The field LimViol indicates that the Op quad is a decoding of a transmission control command detected on the target address where a code segment restriction violation is detected. For most rows, the field LimViol is static. The field LimViol is loaded within row (1) and summarized in Table B.25 of Appendix B.

필드 OpQv 는 행에 유효한 Op 쿼드가 포함되어 있음을 나타내고, 광역 로직(520)이 Op 쿼드의 시프트를 제어할 때 필드 OpQv 를 사용함을 나타낸다. 유효하지 않은 Op 쿼드들은 만일 스케쥴러(280) 아래의 Op 쿼드가 정체된다면 중복 기록되기도 한다. "유효하지않은" Op 쿼드를 포함하고 있는 행 내의 필드들은 중단된 Op 쿼드와 같은 값을 가지며, Op 쿼드는 중단의 결과로 유효하지않음 이 될 수 있다. 첨부 B 의 표 B.26 은 필드 OpQv 를 제어하는 로직이 설명되어 있다.Field OpQv indicates that the row contains valid Op quads, and indicates that wide area logic 520 uses the field OpQv when controlling the shift of the Op quad. Invalid op quads may be overwritten if the op quad under scheduler 280 is congested. Fields in a row containing an "invalid" Op quad have the same value as the interrupted Op quad, which may be invalid as a result of the abort. Table B.26 in Appendix B describes the logic that controls the field OpQv.

필드 Op1I, Op2I 및 Op3I 는 Op 쿼드에 의해 표현된 매크로명령의 번호의 카운트(1,2 또는 3)를 보유하고 있으며 카운트 퇴역 명령으로 사용된다.Fields Op1I, Op2I and Op3I hold counts (1, 2 or 3) of the number of macro instructions represented by the Op quad and are used as count retirement instructions.

필드 Ilen0 및 Ilen1 은 Op 쿼드에 의해 표현된 제1 및 제2(존재하는 경우) 매크로명령의 바이트 내의 길이를 보유하고 있고 폴트가 발생하는 명령 어드레스를 결정하는데 사용된다.Fields Ilen0 and Ilen1 hold the length in bytes of the first and second (if present) macroinstructions represented by the Op quad and are used to determine the instruction address at which the fault occurs.

필드 Smc1stAddr, Smc1stPg, 및 Smc2ndPg 는 Op 쿼드내의 동작에 의해 커버되는 제1 및 제2(한 페이지 이상의 명령이 상기 Op 쿼드내에 있는 경우) 어드레스를 보유하고 있으며 자기-수정 코드를 검출하는데 사용된다.The fields Smc1stAddr, Smc1stPg, and Smc2ndPg hold the first and second (if more than one page instruction is in the Op quad) addresses covered by the operation in the Op quad and are used to detect self-modifying codes.

Ⅱ. B 로드/시프트 제어II. B load / shift control

앞서 설명한 바와 같이, 스케쥴러(280)는 24개 엔트리를 6개의 행을 포함하고 있는 시프트 레지스터(또는 FIFO 버퍼)로 관리한다. 스케쥴러(280)는 각 행이 독립된 시프트 제어(실제로는 로드 제어 신호 LdEntry[i])를 갖는 사프트 레지스터만큼 견고하지 않다. Op 쿼드는 다음 행이 비거나 또는 비어지고 있는 만큼 다음 행으로 시프트 다운할 수 있다(및 선행하는 Op 쿼드가 위에서부터 이 행으로 시프트 다운 할 수 있다). Op 쿼드는 항상 공간이 사용가능하면 더 높은 번호의 행으로 시프트 다운된다. 이상적으로는 각 Op 쿼드는 클록 사이클 경계에서, 각 클록 사이클로 한 행을 시프트 다운 시킨다.As described above, the scheduler 280 manages 24 entries in a shift register (or FIFO buffer) containing six rows. The scheduler 280 is not as robust as the shift register where each row has independent shift control (actually a load control signal LdEntry [i]). The op quad can shift down to the next row as long as the next row is empty or empty (and the preceding op quad can shift down from this to this row). The Op quad always shifts down to the higher numbered row if space is available. Ideally, each Op quad will shift down one row at each clock cycle at the clock cycle boundary.

대부분의 동작을 위해서, 스케쥴러(280)내의 위치는 동작을 위한 파이프라인 단계와는 독립적이다. 또한, 실행 파이프라인내에 정체가 있는 경우라 할지라도 대부분의 동작은 스케쥴러(280)내로 시프트 다운한다. 두 가지 예외는 스케쥴러(280)의 바닥 행내의 상태 플래그 및 어느 동작에 의존하는 동작이다. 상태 플래그에 의존하는 동작은 동작이 스케쥴러(280)의 특정 행에 있어서 상기 단계가 완료될 때 까지 시프트가 되지 못하게 실행되어야 하는 단계를 가지고 있다. 행(5)내의 동작은 행(5)내의 모든 동작이 완료되고 처분될 때 까지 행(5)로부터 Op 쿼드의 시프트 또는 퇴역을 금한다.For most of the operation, the location in the scheduler 280 is independent of the pipeline stage for the operation. In addition, most operations shift down into the scheduler 280 even if there is congestion in the execution pipeline. Two exceptions are status flags in the bottom row of the scheduler 280 and actions that depend on which action. An operation that depends on the status flag has a step in which the operation must be executed in a particular row of scheduler 280 so that it does not shift until the step is completed. Operation in row 5 prohibits the shift or retirement of Op quads from row 5 until all operations in row 5 are completed and disposed.

첨부 B의 표 B.27 은 스케쥴러(280)내의 시프트를 제어하는 신호 LdEntry0 에서부터 LsEntry5 및 스케쥴러(280)가 현재 사이클의 끝에서 새로운 Op 쿼드를 채용할 수 있는지를 나타내는 신호 SchedFull 및 SchedFull 을 발생하는 광역 제어 로직(520)내의 회로를 설명하고 있다.Table B.27 of Annex B shows the wide ranges of generating signals SchedFull and SchedFull indicating whether LsEntry5 and scheduler 280 can adopt a new op quad at the end of the current cycle from the signals LdEntry0 controlling the shift in scheduler 280. The circuitry within the control logic 520 is described.

Ⅲ. 동작 실행III. Action execution

물리적으로, 스케쥴러 저장기(540)는 동작을 위한 상태 값을 보유하는 기억장치 구조이다. 저장기에 더하여, 스케쥴러(280)에는 동작 실행이 진행되는 동안 상기 상태 값에서 동작하는 로직이 포함되어 있다. 제어의 관점에서 보면, 스케쥴러(280)는 처리 파이프라인을 통해 동작의 실행을 위한 제어 정보를 발생하고 실행 결과를 다루는 파이프라인된 데이터 경로이다. 스케쥴러 기억장치 및 상태 변경은 시스템 클록으로 동기되는데, 즉 스케쥴러(280)내의 모든 상태 변화는 스케쥴러(280)내의 모든 기억장치 소자들이 (적어도 논리적으로는) 도 6에 관하여 설명된 것 처럼 에지-트리거된 플립-플롭이 되도록 상기 시스템 클록의 상승 에지상에 있게 된다. 논리적인 관점에서, 스케쥴러(280) 내부의 모든 상태 시퀀스는 본래 단일 사이클이다. 상태 변화 결정은 상기 사이클 동안 머신 상태에 기초하여 각 사이클에서 만들어진다.Physically, the scheduler store 540 is a storage structure that holds state values for operation. In addition to the storage, the scheduler 280 includes logic that operates at the state value while the operation is executing. In terms of control, scheduler 280 is a pipelined data path that generates control information for the execution of an operation through the processing pipeline and handles the execution results. The scheduler storage and state changes are synchronized to the system clock, i.e., all state changes in the scheduler 280 are edge-triggered as described in relation to (at least logically) all storage elements in the scheduler 280 (at least logically). Is on the rising edge of the system clock to become a flip-flop. From a logical point of view, every state sequence inside scheduler 280 is essentially a single cycle. State change decisions are made in each cycle based on machine state during the cycle.

스케쥴러(280)의 구조는 동작 실행의 파이프라인된 특성을 반영한다. 스케쥴러(280)(및 해당하는 각 엔트리)내의 로직은, 대부분 로직의 독립적 덩어리(chunk)인 여러개로 나뉘어 질 수 있고, 각 각은 주어진 동작 또는 실행 파이프라인의 타입의 특정 처리 단계와 직접 관련된다. 특정 처리 파이프라인의 관점에서 보면, 각 단계와 관련된 스케쥴러 로직의 덩어리는 그 단계내에서 행해진 처리 및 단계가 성공적으로 완료될 때를 결정을 위한 키 제어 정보를 제공한다. 주어진 단계를 모든 처리 파이프라인을 통해 관찰하는 관점(적어도 단계의 최초 결합)에서 보면, 로직의 매우 유사한 덩어리는 각 파이프라인 또는 각 파이프라인의 각 동작 소스 오퍼랜드를 위해 같은 기능을 수행한다.The structure of the scheduler 280 reflects the pipelined nature of the operation execution. The logic in the scheduler 280 (and each corresponding entry) can be divided into several, mostly independent chunks of logic, each directly associated with a particular processing step of the type of a given operation or execution pipeline. . From the point of view of a particular processing pipeline, the chunk of scheduler logic associated with each step provides key control information for determining the processing performed within that step and when the step completes successfully. In terms of observing a given step through all processing pipelines (at least the first combination of steps), very similar chunks of logic perform the same function for each pipeline or for each action source operand in each pipeline.

도 4A 내지 도 4D 는 4가지 동작 타입을 위한 파이프라인 타이밍을 보여주고 있다. 이러한 타입을 위해서는, 동작은 명령 복호 단계(420) 후에 스케쥴러(280)로 로드된다. BrOp 는 BrOp 가 스케쥴러(280)내의 행(4)에 도달하면 발생하는 분리 평가 단계(490)에서 완료된다. RegOps, StOps 및 LdOps 는 3 또는 4개의 단계 파이프라인을 지나가고, 4 또는 5 상태 사이에 대응하여 변화한다. 스케쥴러 엔트리 내부의 필드 State[3:0] 는 그 엔트리와 관련된 동작의 상태를 추적 또는 대표한다.4A-4D show pipeline timing for four operation types. For this type, the operation is loaded into the scheduler 280 after the instruction decoding step 420. BrOp is completed in a separate evaluation step 490 that occurs when BrOp reaches row 4 in scheduler 280. RegOps, StOps and LdOps pass through three or four stage pipelines and change correspondingly between the four or five states. Fields State [3: 0] within a scheduler entry track or represent the state of the action associated with that entry.

도 4A 및 도 4C 의 Op 발행 단계(430) 및 오퍼랜드 포워드 단계(440)는 아래 설명된 RegOps, LdOps 및 StOps 모두에 공통이다.Op issuance step 430 and operand forward step 440 of FIGS. 4A and 4C are common to all RegOps, LdOps, and StOps described below.

오퍼랜드 포워드 단계(430) 다음에 상기 실행 단계가 온다. RegOps 는 레지스터 유니트(253,254)가 단일 사이클내에 모든 RegOps 를 수행하기 때문에 단지 하나의 실행 단계(450)만을 가지고 있다. 더욱이, RegOp 가 실행 단계(450)으로 들어가고 나면, 항상 성공적으로 완료를 하고 그 클록 사이클의 끝에서 단계(450)을 빠져나간다. LdOps 및 StOps 에는 두 개의 실행 단계(450,460)가 있는데, 이 두 단계는 어드레스 계산(453), 세그먼트 및 페이지 번역(및 보호 검사) 및 데이터 캐쉬 매핑(455), 그리고 결과 전송(462)이 진행되는 동안 발생한다. RegOp 와는 달리, LdOps 및 StOps 는 단계(450) 또는 단계(460) 중 한 단계내의 임의의 주기를 위해 정체될 수 있다. LdOps 의 대부분 정체는(가장 현저한 데이터 캐쉬 및 데이터 변환 룩어사이드 버퍼(DTLB) 미스 및 폴트) 마지막 단계(460)으로 인가된다. 단계(450)내의 정체는 잘못 배열된 메모리 참고 및 점유하고 있는 단계(460)로부터 유래하며, 완료 전에 동작에 의해 막힌다.Operand forward step 430 is followed by the execution step. RegOps has only one execution step 450 because register units 253 and 254 perform all RegOps in a single cycle. Moreover, once RegOp enters execution step 450, it always completes successfully and exits step 450 at the end of its clock cycle. LdOps and StOps have two execution steps (450,460), which include address computation (453), segment and page translation (and protection checks) and data cache mapping (455), and result transfer (462). Occurs during. Unlike RegOp, LdOps and StOps may be congested for any period within one of steps 450 or 460. Most congestion of LdOps (most significant data cache and data transformation look-aside buffer (DTLB) miss and fault) is applied to the last step 460. Congestion in step 450 results from misaligned memory references and occupying step 460 and is blocked by operation prior to completion.

스케쥴러(280)는 로드 유니트(251), 저장 유니트(252), 레지스터 유니트(253,254), 부동소숫점 유니트(255) 및 멀티미디어 유니트(256) 등의 실행 엔진에 의해 만들어지는 파이프라인을 제어한다. 본 발명의 한 실시예에는 레지스터 유니트(253,254), 로드 유니트(251) 및 저장 유니트(252)가 포함되어 있다. 더 많거나 더 적은 실행 유니트가 있는 프로세서에 본 발명의 한 측면을 적용하는 것이 본 명세서의 개시에 관한 장치이다. 예를들면, 멀티미디어 유니트(256)를 포함하는 한 실시예에서, 멀티미디어 유니트(256)는 멀티미디어 유니트(256)용 동작이 발행되고, 오퍼랜드가 포워드 되고, 결과가 레지스터 유니트(253)을 위해 사용되는 회로를 사용하여 전송되도록 논리적으로는 제1 레지스터 유니트(253)의 부분으로 고려될 수 있다.The scheduler 280 controls pipelines created by execution engines such as the load unit 251, the storage unit 252, the register units 253 and 254, the floating point unit 255, and the multimedia unit 256. One embodiment of the present invention includes register units 253 and 254, a load unit 251 and a storage unit 252. It is an apparatus according to the disclosure herein to apply one aspect of the present invention to a processor with more or fewer execution units. For example, in one embodiment including the multimedia unit 256, the multimedia unit 256 is issued with an operation for the multimedia unit 256, an operand forwarded, and the result used for the register unit 253. It may logically be considered part of the first register unit 253 to be transmitted using a circuit.

한 실시예에서, 부동소숫점 유니트(FPU)(255)에는 자신의 독립 레지스터 화일 및 처분 유니트가 있으며; 그리고 스케쥴러(280)에는 FPU(255)로 발행을 위해 FpOps 를 선택하는 스캔 체인이 포함되어 있다. 스케쥴러(280)는 FpOp 를 발행하고 오퍼랜드를 FPU(255)로 포워드 시킨다. 상기 FpOp 의 실행은 스케쥴러(280)가 FPU(255)로부터의 결과를 요구하지 않도록 FPU(255)와 관련된 레지스터 화일내의 레지스터에게만 영향을 미친다. FPU(255)는 FpOp 가 즉시, FPU(255)가 실제적으로 상기 FpOp 를 완료하거나 처분하기 한참 전에 즉시 완료되는 신호일 수 있다. OCU(260)는 어느것도 변화시키지 않고 스케쥴러(280)로부터 상기 FpOp 를 처분하고 퇴역시킨다.In one embodiment, floating point unit (FPU) 255 has its own independent register file and disposal unit; The scheduler 280 includes a scan chain that selects FpOps for publication to the FPU 255. The scheduler 280 issues an FpOp and forwards the operand to the FPU 255. Execution of the FpOp affects only the registers in the register file associated with the FPU 255 so that the scheduler 280 does not require a result from the FPU 255. The FPU 255 may be a signal where FpOp is completed immediately, long before FPU 255 actually completes or disposes of the FpOp. OCU 260 discards and retires the FpOp from scheduler 280 without changing anything.

레지스터 유니트(253,254) 각 각은 RU 파이프라인 또는 RUX 또는 RUY 파이프라인으로 언급된 파이프라인을 제공하여 레지스터 유니트(253)과 레지스터 유니트(254)를 구별한다. 각 각의 RU 파이프라인에는 발행 단계(430), 오퍼랜드 포워드 단계(440) 및 실행 단계(450)으로 언급되는 3 단계가 있다. 로드 유니트(251) 및 저장 유니트(252)는 각 각 다음 네 단계가 있는 LU 및 SU 파이프라인을 제공한다: 발행 단계(430), 오퍼랜트 포워드 단계(440) 및 실행 단계(450,460). 앞서 설명한 바와 같이, 상기 State 필드는 관련된 동작의 현재 파이프라인 단계 및 그의 파이프라인이 완료된 동작을 나타내기 위해 "하나의 시프팅/증가 필드" 복호화를 사용하여 동작의 5 단계를 표현한다.Each of the register units 253 and 254 provides a pipeline referred to as an RU pipeline or a RUX or RUY pipeline to distinguish between the register unit 253 and the register unit 254. Each RU pipeline has three stages, referred to as issuance stage 430, operand forward stage 440, and execution stage 450. The load unit 251 and the storage unit 252 each provide LU and SU pipelines with the following four stages: issue stage 430, operator forward stage 440 and execute stage 450,460. As described above, the State field represents the five stages of the operation using " one shifting / increment field " decoding to indicate the current pipeline stage of the associated operation and the operation whose pipeline is completed.

스케쥴러(280)는 발행 단계(430) 및 오퍼랜드 포워드 단계(440)의 주 제어를 한다. 발행 및 오펴랜드 포워드 단계(430,440) 내부의 처리는 단계마다 두 단계로 나뉘는데, 상기 단계는 보통 시스템 클록 사이클의 첫번째 및 두번째 절반 동안 발생한다. 발행 단계(430)에는 발행 선택 단계(441) 및 방송 단계(432)가 포함되어 있다. 오퍼랜드 포워드 단계(440)에는 오퍼랜드 선택 단계(441) 및 오퍼랜드 전송 단계(442)가 포함되어 있다.The scheduler 280 has main control of the issue step 430 and the operand forward step 440. The processing inside the issue and overland forward phases 430 and 440 is divided into two phases per phase, which typically occurs during the first and second half of the system clock cycle. The issue step 430 includes a issue select step 441 and a broadcast step 432. Operand forward step 440 includes an operand selection step 441 and an operand sending step 442.

발행 선택 단계(441) 동안, 스케쥴러(280)는 상기 파이프라인의 각 각으로 들어가는 다음 동작을 선택한다. 한 실시예에서, 예를들면 LU, SU, RUX 및 RUY 파이프라인을 위해 4개의 동작 선택이 즉시 발생한다. 방송 단계(432) 동안, 선택된 각 동작의 오퍼랜드에 관한 정보는 모든 스케쥴러 엔트리 및 외부 로직으로 방송된다.During the issue selection step 441, the scheduler 280 selects the next operation entering each of the pipelines. In one embodiment, four operation choices occur immediately, for example for the LU, SU, RUX, and RUY pipelines. During the broadcast step 432, information about the operands of each selected operation is broadcast to all scheduler entries and external logic.

오퍼랜드 선택 단계(441) 동안, 스케쥴러(280)는 방송 단계(432)로부터의 정보를 사용하여 오퍼랜드를 위치시킨다(2*"실행 유니트의 번호" 오퍼랜드 까지). 상기 오퍼랜드의 소스는 레지스터 화일(290), 스케쥴러 저장기(540) 또는 실행 유니트(251,252,253 또는 254)의 결과 버스(561,562,563 또는 564)일 수 있다. 스케쥴링 저장기(540)에는 중간 값용 필드, 처분되지 않은 결과 및 프로그램 주문내에 앞서지만 완료되지는 않은 동작에 관한 정보가 포함되어 있다. 실행 유니트의 결과 버스는 만일 상기 실행 유니트가 요구되는 오퍼랜드에 영향을 미치는 동작을 완료하면 오퍼랜드의 소스가 된다. 스케쥴러(280)는 각 각의 오퍼랜드 값의 상태도 결정하는데, 즉 유효한 값이 상기 원하는 소스로부터 실제 사용가능한지를 결정한다. 이 정보에 기초하여, 스케쥴러(280)는 오퍼랜드 포워드 단계(440)내에 동작 진행이 실행 단계(450)로 되는지를 결정한다. 진행은 각 파이프라인에 독립적이다. 단지 명백한 오퍼랜드 종속만이 동작이 실행되는 주문을 강제한다. 그러한 종속을 제외하고는, 다양한 동작 타입들이 다른 동작의 타입에 관한 임의의 주문내의 각 파이프라인을 통해 처리된다.During operand selection step 441, scheduler 280 uses the information from broadcast step 432 to locate the operand (up to 2 * "number of execution units" operand). The source of the operand may be a register file 290, scheduler store 540 or result bus 561, 562, 563 or 564 of execution units 251, 252, 253 or 254. Scheduling store 540 includes information about fields for intermediate values, undisclosed results, and operations that are earlier but not completed within the program order. The resulting bus of the execution unit becomes the source of the operand if the execution unit completes an operation that affects the required operand. The scheduler 280 also determines the status of each operand value, i.e. determines whether a valid value is actually available from the desired source. Based on this information, the scheduler 280 determines whether the progress of operation within the operand forward step 440 is the execution step 450. Progress is independent of each pipeline. Only explicit operand dependencies force the order on which the action is executed. Except for such dependencies, various operation types are processed through each pipeline in any order for other types of operations.

오퍼랜드 포워드 단계(442) 동안, 스케쥴러(280)는 오퍼랜드 값을 오퍼랜드 버스(554) 상으로 원하는 소스에서 실행 유니트(251 부터 254)로 전송시킨다. 도 5에 도시된 바와 같이, 상기 실시예에는 9개의 오퍼랜드 버스(554)가 있는데, 그 중 8개는 오퍼랜드 포워드 단계내의 동작용 오퍼랜드 값을 제공한다. 부동소숫점 유니트(255)가 있는 실시예와 같은 그 이상의 시행 유니트가 있는 실시예는 더 많은 오퍼랜드 버스가 있을 수 있다. 오퍼랜드 전송은 오퍼랜드 값이 유효한지 아닌지에 상관없이 발생한다. 만일 오퍼랜드 값이 유효하다면, 관련된 동작은 실행 유니트가 유효하지 않은 오퍼랜드를 사용하지 않도록 실행 단계(450)보다 앞서지 않는다.During the operand forward step 442, the scheduler 280 sends the operand value on the operand bus 554 from the desired source to the execution units 251 through 254. As shown in FIG. 5, there are nine operand buses 554 in the embodiment, eight of which provide operand values for operation within the operand forward step. Embodiments with more enforcement units, such as those with floating point unit 255, may have more operand buses. Operand transfer occurs regardless of whether the operand value is valid or not. If the operand value is valid, the associated action does not precede execution step 450 such that the execution unit does not use an invalid operand.

LdOps 및 StOps 의 오퍼랜드 전송 단계(442) 동안, 변위 포워딩(443)은 변위 버스(555)를 경유하여 변위 오퍼랜드를 로드 유니트(251) 및 저장 유니트(252)(각 유니트에 하나)로 전송한다. 상기 변위 오퍼랜드는 스케쥴러 엔트리로부터의 32-비트 값이다. 변위를 위한 소스 엔트리의 선택은 오퍼랜드 선택 단계(441)동안 발생한다.During operand transfer step 442 of LdOps and StOps, displacement forwarding 443 transfers the displacement operands to load unit 251 and storage unit 252 (one in each unit) via displacement bus 555. The displacement operand is a 32-bit value from the scheduler entry. Selection of the source entry for the displacement occurs during operand selection step 441.

LdOp 또는 StOp 가 실행 단계(450)에 들어가면, 로드 및 저장 유니트(251,252)는 관련된 변위 및 오퍼랜드 값에 래치하고 동작이 단계(450)내에 유지되는 동안 이들을 보유하게 된다. 스케쥴러(280)는 상기 파이프라인 실행 단계(450,460)의 제한된 제어를 한다. 단계(450,460)에서, 스케쥴러(280)는 동작의 상태를 계속 추적하고 결과 레지스터 및 상태 값을 포획한다. 실행 단계(450)내의 어드레스 계산(453)은 LdStOp 가 액세스한 어드레스를 계산한다. 만일 상기 LdStOp 용 어드레스 및 데이터 크기가 데이터 캐쉬 내의 엔트리 사이의 경계를 지나가는 정도로 데이터 액세스를 하게 한다면, 상기 LdStOp 는 본 명세서에서는 잘못 배열된 것으로 언급할 것이다. 잘못 배열된 LdStOp 는 두 개의 데이터 액세스로 나뉘어 지는데: 두번째 액세스가 실행 단계(450)에서 정체되는 반면 첫번째 액세스는 실행 단계(460)보다 앞선다. 상기 잘못 배열된 LdStOp 와 관련된 상기 스케쥴러 엔트리의 상태 필드는 상기 두번째 액세스의 실행 단계를 나타낸다.Once LdOp or StOp enters execution step 450, load and storage units 251, 252 latch on the associated displacement and operand values and retain them while operation is maintained within step 450. Scheduler 280 has limited control of the pipeline execution steps 450 and 460. In steps 450 and 460, the scheduler 280 keeps track of the status of the operation and captures the result register and status values. Address calculation 453 in execution step 450 calculates the address accessed by LdStOp. If the address and data size for the LdStOp allow data access to cross the boundary between entries in the data cache, the LdStOp will be referred to herein as misaligned. The misaligned LdStOp is divided into two data accesses: the second access stagnates at execution step 450 while the first access precedes execution step 460. The status field of the scheduler entry associated with the misaligned LdStOp indicates the execution phase of the second access.

실행을 시작하기 위해 소스 오퍼랜드를 얻기 위한 4 단계 처리에 부가하여, 스케쥴러(280)는 StOp 용 데이터 오퍼랜드을 얻기위한 유사한 4 단계 처리를 수행한다; 그러나 상기 데이터 오퍼랜드는 SU 단계(460) 내의 상기 StOp 를 위해 얻어진다. 상기 저장 데이터를 공급하기 위한 처리는 상기 StOp 의 단계(450,460)와 동기화 되고 실행 단계(450) 내의 StOp 를 식별하는 동작 선택 단계(456), 데이터 오퍼랜드의 소스를 설명하는 정보를 전송하는 방송 단계(457), 데이터 오퍼랜드 선택 단계(461) 및 데이터 오퍼랜드 전송 단계(456)를 포함하고 있다. 필수적으로, 저장 데이터 오퍼랜드는 StOp 실행과 병렬로 인출되고; 그리고 상기 실제 데이터 값이 얻어지며 상기 StOp 가 완료되면 저장 큐(270)으로 전송된다. 완료 및 출구 단계(460)는 저장의 창출에 해당하는데, 단계(461)에서 선택된 데이터에 기초하여 상기 StOp 용 큐 엔트리 및 어드레스 계산(453) 및 DTLB 매핑(455)로부터의 물리적 어드레스 이다. 만일 유효한 데이터 오퍼랜드 또는 물리적 어드레스가 아직 사용할 수 없다면, 상기 StOp 는 단계(460)에 남아있게 된다.In addition to the four step process for obtaining the source operand to start execution, the scheduler 280 performs a similar four step process for obtaining the data operand for StOp; However, the data operand is obtained for the StOp in SU step 460. The process for supplying the stored data is synchronized with the steps 450 and 460 of the StOp and the operation selection step 456 to identify the StOp in the execution step 450, the broadcast step of transmitting information describing the source of the data operand ( 457, a data operand selection step 461 and a data operand transmission step 456. Essentially, the stored data operands are fetched in parallel with the StOp execution; The actual data value is obtained and sent to the storage queue 270 when the StOp is complete. Completion and exit step 460 corresponds to creation of storage, which is the physical address from the queue entry and address calculation 453 for the StOp and DTLB mapping 455 based on the data selected in step 461. If a valid data operand or physical address is not yet available, the StOp remains at step 460.

스케쥴러 로직(530,532)의 덩어리가 동작 발행 및 오퍼랜트 포워딩에 관련된 반면, 엔트리에는 주문 로드 및 저장 동작에 관련된 로직(534)의 덩어리가 포함되어 있다. 일부 실행에서만 주문은 레지스터 종속에 기인한 동작들 사이에 유지되어야 하고, 제한된 실행 주문도 메모리 종속에 기인한 LdOps 와 StOps 사이에 유지된다(예를들어 LdOps 는 오래된 StOps 에 앞서 자유롭게 실행될 수 없다). 로드-저장 주문은 메모리를 액세스하는 StOp 및 메모리를 참고하고 및/또는 폴트가능한 어드레스를 발생하는 CIA(검사 명령 어드레스) 및 CDA(검사 데이터 어드레스) 동작 등의 StOp 로 인가되지만 LEA(로드 효과 어드레스) 동작으로는 인가되지 않는다. 모든 LdOps 가 메모리를 참고하기 때문에 로드-저장 주문에서 제외되는 LdOps 는 없다.While a chunk of scheduler logic 530, 532 is involved in issuing operations and operator forwarding, an entry contains a chunk of logic 534 that is involved in order load and store operations. Only in some executions an order must be maintained between operations due to register dependencies, and a limited execution order is also maintained between LdOps and StOps due to memory dependencies (eg, LdOps cannot be freely executed before older StOps). Load-storage orders are authorized by StOp, such as the Check Instruction Address (CIA) and Check Data Address (CDA) operations, which reference the StOp and memory that access the memory and / or generate a faultable address, but the LEA (Load Effect Address) It is not applied as an operation. Since all LdOps reference memory, no LdOps are excluded from the load-storage order.

상기 로드-저장 주문은 단계(460)내의 LdOp 또는 StOp 가 상기 동작이 안전할 때 까지 유지되는 두 개의 실행 파이프라인의 단계(460)에서 있게된다. 단계(460) 까지, 상기 LU 및 SU 파이프라인 사이에 유지되는 주문은 없다. 더욱이, LdStOp 는 보통 메모리 독립이 부분적 어드레스를 더 오래된 LdStOp 와 비교함으로서 "증명됨" 이 될 때 주문 외의 것도 실행할 수 있다. 저장 큐(270)는 종속 검사와 관련된 어드레스 비교를 수행하긴 하지만 LU 및 SU 실행 파이프내의 LdOp 및 StOp 의 상대적 나이를 결정하는 것을 지지하는 스케쥴러를 필요로 하지는 않는다. 적절한 어드레스 비교만이 주어진 LdOp 또는 StOp 가 완료되는지를 결정하는데 고려된다.The load-storage order is placed in step 460 of two execution pipelines where LdOp or StOp in step 460 is maintained until the operation is safe. Until step 460, no order is maintained between the LU and SU pipelines. Moreover, LdStOp can also do anything other than order when memory independence becomes "proofed" by comparing the partial address with the older LdStOp. The storage queue 270 performs address comparisons related to dependency checking but does not require a scheduler to support determining the relative age of LdOp and StOp in the LU and SU execution pipes. Only appropriate address comparisons are considered in determining whether a given LdOp or StOp is complete.

로드-저장 주문 로직(534)에는 LU 파이프라인에 관련된 로직 및 SU 파이프라인과 관련된 로직이 포함되어 있다. 상기 LU 파이프라인과 관련된 로직은 SU 단계(450 또는 460)내의 어느 StOp 및 다른 StOp 에 관하여 LU 단계(460) 내의 어느 LdOp 의 나이를 결정한다. 로직(534)은 버스(556) 상에서 SC_SU2OLDER, SC_SU1OLDER 및 SC_SU0OLDER 인 세 개의 신호를 발생하여 SU 단계(460), 단계(450) 또는 다른 곳의 StOp 가 LU 단계(460) 내의 LdOp 보다 더 오래되었는지를 나타낸다. 상기 SU 파이프라인와 관련된 로직은 LU 단계(460) 내의 어느 LdOps 및 다른 LdOps 에 관하여 SU 단계(460) 내의 어느 StOp 의 나이를 결정하고 SC_LU2OLDER 및 SC_LU1OLDER 인 두 신호를 발생하여 어느 LdOps 가 단계(460) 내의 상기 StOp 보다 더 오래되었는지를 나타낸다.The load-store order logic 534 includes logic related to the LU pipeline and logic related to the SU pipeline. Logic associated with the LU pipeline determines the age of any LdOp in the LU stage 460 with respect to any StOp in the SU stage 450 or 460 and the other StOp. Logic 534 generates three signals, SC_SU2OLDER, SC_SU1OLDER, and SC_SU0OLDER, on bus 556 to determine whether the StOp in SU stage 460, 450 or elsewhere is older than the LdOp in LU stage 460. Indicates. The logic associated with the SU pipeline determines the age of any StOp in the SU step 460 with respect to which LdOps and other LdOps in the LU step 460 and generates two signals, SC_LU2OLDER and SC_LU1OLDER, such that any LdOps is in step 460. It is older than the StOp.

스케쥴러(280)에는 플래그 또는 상태 코드(cc) 값을 획득하는 및 사용하는 것과 관련된 상태 플래그 처리 로직(538)이 더 포함되어 있다. 기능의 세 가지 상대적으로 독립된 영역이 포함되어 있다: 레지스터 유니트(253)에 의해 실행되는 상태-독립 RegOp 용 상태 플래그 값 인출, 분기 평가 유니트(257)에 의한 BRCOND 의 해결을 위한 상태 플래그 값 인출 및 BRCOND 에 앞서는 중단불가능한 RegOp 동기화 이다.Scheduler 280 further includes status flag processing logic 538 associated with obtaining and using a flag or status code (cc) value. Three relatively independent areas of functionality are included: fetching status flag values for state-independent RegOp executed by register unit 253, fetching status flag values for resolution of BRCOND by branch evaluation unit 257, and Uninterruptable RegOp synchronization prior to BRCOND.

상기 RUX 실행 유니트는 상태-독립("cc-dep") RegOp 를 실행하고 상기 레지스터 오퍼랜드 값과 같은 시간, 즉 오퍼랜드 포워드 단계(440)의 끝에서 상태 오퍼랜드 값을 필요로 한다. CC-dep RegOp 는 행(3)에 도달할 때 까지는 실행 단계(450)에 앞설 수 없으며 유효한 상태 코드에 도달할 때 까지 행(3)에 유지된다. 레지스터 값을 인출하는 것과는 달리, 상태 인출 처리는 파이프라인 되지 않으며 한 사이클, 즉 RUX 오퍼랜드 포워드 단계(440) 전체 동안 발생한다. 더욱이, 같은 로직(538)은 cc-dep RegOp 와 BRCOND 모두를 위한 지금까지의 상태 플래그 값을 인출한다. cc-dep RegOp 를 위해, 상태 코드는 상기 RegOp 가 필요로 했던 상태 값의 유효성이 검사되는 동안 실행 유니트(253)으로 통과한다. 만일 요구되는 모든 상태 플래그를 위한 유효 값이 아직 사용가능하지 않다면, RegOp 는 오퍼랜드 포워드 단계(440)내에 정체된다(레지스터 오퍼랜드 값이 아직 사용가능하지 않은 경우와 동일함).The RUX execution unit executes a state-independent (“cc-dep”) RegOp and requires a state operand value at the same time as the register operand value, ie at the end of operand forward step 440. CC-dep RegOp cannot precede execution step 450 until it reaches row 3 and remains in row 3 until a valid status code is reached. Unlike retrieving a register value, state retrieval processing is not pipelined and occurs during one cycle, i.e., the entire RUX operand forward step 440. Moreover, the same logic 538 fetches the status flag values so far for both cc-dep RegOp and BRCOND. For cc-dep RegOp, the status code passes to execution unit 253 while the status value that RegOp needed was validated. If a valid value for all required status flags is not yet available, RegOp is stagnated in operand forward step 440 (same as if the register operand value is not yet available).

BRCOND 는 어떠한 실제 실행 처리를 필요로 하지 않는다. 대신, BRCOND 가 미해결인 동안(그리고 스케쥴러(280)의 바닥에 도달하기 전), BRCOND 는 올바르게 예상되는 또는 그렇지 않은 것으로 해결된다. BRCOND 는 사이클당 하나의 BRCOND 까지의 레이트에서 주문으로 해결된다. BRCOND 가 행(4)에 도달하는 때, 상태 플래그 처리 로직(538)은 상기 BRCOND 의 평가를 위한 유효 상태 플래그가 레지스터 화일(290)으로부터 유효한지 또는 동작이 상기 BRCOND 보다 더 오래되었는지 중 어느 하나로 사용가능하게 되는지를 결정하는 것을 검사한다. 플래그 처리 로직(538)은, 필요한 경우, 상기 BRCOND 의 평가를 요구하는 상태 플래그를 공급하는 더 오래된 동작이 완료되었는지 여부를 결정하기도 한다. 만일 상기 요구된 상태 플래그용 값이 아직 사용가능하지 않다면, BRCOND 의 해결은 상기 BRCOND 를 포함하고 있는 Op 쿼드의 시프트를 금지함으로서 정체된다. 다음의 해결되지 않은 BRCOND 를 요구하는 상기 상태 플래그 값이 사용가능하게 되는 때, 상태 플래그 처리 로직(538)은 상기 상태 플래그 값을 상기 BRCOND 내부에 특정된 상태 코드가 올바르게 예상되었는지를 결정하는 분기 평가 유니트(257)로 통과시킨다. 만일 BRCOND 가 올바르지 않게 예상되면, 재시작 신호가 표명되어 명령 인출을 시작하고 수정 분기 어드레스에서 명령 복호기(240)(도 2)의 부분의 복호화를 시작한다. 만일 동작이 올바르게 예상되면, 아무일도 발생하지 않는다.BRCOND does not require any actual execution. Instead, while BRCOND is outstanding (and before reaching the bottom of scheduler 280), BRCOND is resolved to be correctly expected or not. BRCOND is solved on demand at rates up to one BRCOND per cycle. When BRCOND reaches row 4, status flag processing logic 538 uses either the valid status flag for evaluation of the BRCOND is valid from register file 290 or if the operation is older than the BRCOND. Check to determine if it is possible. Flag processing logic 538 may, if necessary, determine whether an older operation of supplying a status flag requiring evaluation of the BRCOND has been completed. If the value for the requested state flag is not yet available, the solution of BRCOND is stagnated by prohibiting the shift of the Op quad containing the BRCOND. When the status flag value requesting the next outstanding BRCOND becomes available, status flag processing logic 538 evaluates the branch flag value to determine whether the status code specified inside the BRCOND was correctly expected. Pass through unit (257). If BRCOND is incorrectly expected, a restart signal is asserted to begin fetching the instruction and to begin decoding the portion of instruction decoder 240 (FIG. 2) at the modified branch address. If the action is expected correctly, nothing happens.

BRCOND 의 해결은 중단가능하지 않은 RegOp 의 실행에 중요하다. 중단가능하지 않은 RegOp 의 실행은 중단될 수 없는 또는 이루어 질 수 없는 변경을 가져온다. 또한, RegOp 가 안전해 질 때 까지 중단가능하지 않은 RegOp 는 실행 단계(450)로 들어가는 것이 금지된다. 이것은 앞선 모든 BRCOND 가 해결될 것을 요구하고 상기 중단가능하지 않은 RegOp 가 실행 단계(450)에 앞설 수 있기 전에 올바르게 예상되었는지를 결정한다. 계속해서, 어느 선행하는 BRCOND 가 미해결인 채로 남아있거나 잘못 예상된 것이 발견되는 동안, 상기 중단가능하지 않은 RegOp 는 오퍼랜드 포워드 단계(440)내에 정체된다. 만일 선행하는 BRCOND 가 올바르게 예상되면, 지연은 일시적이며; 만일 선행하는 BRCOND 가 올바르지 않게 예상되면, 상기 RegOp 는 최종 중단 사이클이 스케쥴러(280)를 플러쉬할 때 까지 정체된다.The resolution of BRCOND is important for the execution of a nonstoppable RegOp. Execution of an uninterruptable RegOp results in a change that cannot be interrupted or cannot be made. In addition, RegOp that is not interruptable until RegOp is safe is prohibited from entering execution step 450. This requires that all preceding BRCONDs be resolved and determines whether the non-interruptable RegOp was correctly expected before it could precede execution step 450. Subsequently, while it is found that any preceding BRCOND remains unresolved or incorrectly expected, the non-stoppable RegOp stagnates within operand forward step 440. If the preceding BRCOND is expected correctly, the delay is temporary; If the preceding BRCOND is incorrectly expected, the RegOp will stall until the last interrupt cycle flushes the scheduler 280.

벡터 복호기(244)는 엠코드 ROM(246)으로부터 중단가능하지 않은 RegOp 를 발생한다. 엠코드 ROM(246)에는, 중단가능하지 않은 RegOp 의 결과에 따라 부여된 종속이 있는 동작중에서 상기 중단가능하지 않은 RegOp 를 포함하고 있는 Op 쿼드에 앞서 즉시 상기 Op 쿼드내에 허용되는 동작은 없다. 또한, 상기 중단가능하지않은 RegOp 가 행(4)내에서 실행될 때, 행(5) 내에는 상기 중단가능하지 않은 RegOp 상에 부여된 종속이 있는 동작은 없으며, 상기 중단가능하지 않은 RegOp 상의 부여된 종속이 있는 모든 더 오래된 동작들은 퇴역되어 상기 중단가능하지 않은 RegOp 가 행(4) 내에 실행될 때, 상기 중단가능하지 않은 RegOp 상의 부여된 종속을 가지고 있었던 모든 오래된 동작들은 퇴역되어 상기 중단가능하지 않은 RegOp 가 행(4)내에서 실행되기 전에 완료된다.Vector decoder 244 generates a non-stoppable RegOp from MPEG ROM 246. In the ROM ROM 246, there is no operation allowed within the Op quad immediately prior to the Op quad containing the non-stoppable RegOp among the dependent operations given as a result of the non-stoppable RegOp. Further, when the non-stoppable RegOp is executed in row 4, there is no operation in row 5 that has a dependency granted on the non-stoppable RegOp, and that is granted on the non-breakable RegOp. All older operations with dependencies are retired so that when the non-interruptable RegOp is executed in row 4, all older operations that had a given dependency on the non-interruptable RegOp are retired and the non-interruptable RegOp Is completed before is executed in row (4).

Ⅲ. A 발행 단계III. A Issuance Step

스케쥴러(280)는 발행 스캔 및 오퍼랜드를 요구하는 각 각의 실행 파이프라인을 위해 발행 선택 및 방송 단계(431,432)를 병렬로 수행한다. 한 실시예에서, 발행 단계 동작은 로드 유니트(251), 저장 유니트(252), 레지스터 유니트(253) 및 레지스터 유니트(254)를 위해 병렬로 수행된다.The scheduler 280 performs the issue selection and broadcast steps 431, 432 in parallel for each execution pipeline requiring an issue scan and an operand. In one embodiment, the issue step operation is performed in parallel for the load unit 251, the storage unit 252, the register unit 253 and the register unit 254.

Ⅲ. A.1 발행 선택 단계III. A.1 Issuance Selection Steps

각 사이클에서, 스케쥴러(280)는 병렬 실행을 할 수 있는 각 유니트로 발행을 위한 동작을 선택하려고 한다. 한 실시예에서, 스케쥴러(280)는 LdOp, StOp 및 두 개의 RegOp 를 LU, SU, RUX 및 RUY 파이프라인으로 발행하는 것으로 선택한다. 발행 선택 단계(431)를 위해, 스케쥴러(280)는 가장 오래된 동작에서부터 가장 새로운 동작까지 "주문" 으로 스케쥴링 저장기(540)내의 모든 엔트리를 스캔하고 상기 엔트리의 필드 State 및 Type 에 기초한 발행을 위한 동작을 선택한다. 발행 선택(431)은 서로에게 놓여있게 되는 레지스터 상태 또는 메모리 종속은 고려하지 않는다. 이것은 발행 선택 단계를 간단하게 하며 발행 선택 단계(431)이 상대적으로 큰 저장기(540)를 위해 빠르게 완료되게 한다.In each cycle, scheduler 280 attempts to select an operation for publication to each unit capable of parallel execution. In one embodiment, scheduler 280 chooses to issue LdOp, StOp and two RegOp to LU, SU, RUX and RUY pipelines. For issue selection step 431, scheduler 280 scans all entries in scheduling store 540 with an "order" from the oldest operation to the newest operation and for publication based on the field State and Type of the entry. Select an action. The issue selection 431 does not take into account register states or memory dependencies that are placed on each other. This simplifies the issue selection step and allows the issue selection step 431 to complete quickly for the relatively large store 540.

발행 선택은 동시에 그리고 4 개의 처리 파이프라인의 각 각에 독립적이다. 각 각의 파이프라인 LU, SU 및 RUX를 위해, 상기 파이프라인이 실행할 수 있는(필드 Type 에 의해 표시된) 다음에 발행된 동작(State 필드에 의해 표시된)이 선택된다. 다시 말하면, 로드 유니트(251)를 위해서는 다음에 발행된 LdOp 가 선택되고, 저장 유니트(252)를 위해서는 다음에 발행된 StOp 가 선택되며, 레지스터 유니트(253)를 위해서는 다음에 발행되지 않은 RegOp 가 선택된다. 레지스터 유니트(254)를 위해서는, 파이프라인 RUX 를 위해 선택된 상기 RegOp 다음에 오는 RegOp 가 선택된다. 개념적으로는, 상기 파이프라인 RUY 를 위한 발행 선택은 RUX 를 위한 발행 선택에 따라 다르다; 그러나 물리적으로는, RUY 를 위한 발행 선택은 RUY 를 위한 발행 선택과 병렬로 수행된다.Issuance options are independent of each other and simultaneously in the four processing pipelines. For each pipeline LU, SU, and RUX, the next issued action (indicated by the State field) that the pipeline can execute (indicated by the Field Type) is selected. In other words, the next issued LdOp is selected for the load unit 251, the next issued StOp is selected for the storage unit 252, and the RegOp not issued next is selected for the register unit 253. do. For register unit 254, RegOp following the RegOp selected for pipeline RUX is selected. Conceptually, the issue choice for pipeline RUY depends on the issue choice for RUX; Physically, however, the issue selection for RUY is performed in parallel with the issue selection for RUY.

스캔을 위해, 각 스케쥴러 엔트리는 상기 관련된 동작이 파이프라인 xx - 여기서 xx 는 LU, SU, RUX 또는 RUY - 로 현재 발행 선택에 적합한지를 나타내는 4 비트(즉, 각 파이프라인에 한 비트) IssuableToxx 를 발행한다. 상기 파이프라인 xx를 위한 발행 선택 처리는 가장 오래된 스케쥴러 엔트리에서 가장 새로운 스케쥴러 엔트리까지 스캔하여 비트 IssuableToxx 세트가 있는 엔트리를 찾는다. 파이프라인 LU, SU 및 RUX 를 위해, 상기 원하는 비트 IssuableToLU, IssuableToSU 또는 IssuableToRU 세트가 발견된 첫번째 동작은 파이프라인 LU, SU 또는 RUX 로의 발행을 위해 하나가 선택된다. 파이프라인 RUY 를 위한 발행 선택은 파이프라인 RUX 를 위해 선택된 동작 다음에 오는 IssuableToRUY 가 있는 상기 첫번째 동작을 선택한다.For the scan, each scheduler entry issues a 4-bit IssuableToxx (ie one bit in each pipeline) indicating whether the associated operation is suitable for the current publication selection with pipeline xx where xx is LU, SU, RUX or RUY. do. The issue selection process for pipeline xx scans from the oldest scheduler entry to the newest scheduler entry to find the entry with the set of bits IssuableToxx. For pipeline LUs, SUs and RUXs, the first action in which the desired set of bits IssuableToLU, IssuableToSU or IssuableToRU is found is selected one for publication to pipeline LUs, SUs or RUXs. The issue selection for pipeline RUY selects the first action with IssuableToRUY following the action selected for pipeline RUX.

발행 선택에 적합한 동작은 스케쥴러(280)로 즉시 로드되는데, 즉 동작은 스케쥴러(280) 내의 첫번째 사이클 동안 발행될 수 있다. 이러한 경우, 상기 사이클의 시작에서 Type 비트 및 비트 S0 만이 유효할 필요가 있다. 엔트리 내의 모든 다른 필드들은 발행 선택 단계(431)의 끝 만큼 늦게(즉, 반 사이클 뒤 까지) 발생될 수 있고 방송 단계(432)를 위한 스케쥴러 엔트리 내부에서만 유효할 필요가 있다.Actions suitable for issue selection are immediately loaded into the scheduler 280, ie, actions may be issued during the first cycle in the scheduler 280. In this case, only the Type bit and bit S0 need to be valid at the beginning of the cycle. All other fields in the entry may occur as late as the end of the issue selection step 431 (ie, half a cycle later) and need only be valid inside the scheduler entry for the broadcast step 432.

만일 발행을 위해 선택된 동작이 오퍼랜드 포워드 단계(440)에 앞서지 않으면, 상기 동작은 미발행 상태로 남아있게 되고, 다음 클록 사이클이 진행되는 동안, 그 동작은 발행을 위해 경쟁하여 아마 다시 선택될 것이다.If the operation selected for publication does not precede operand forward step 440, the operation remains unissued and during the next clock cycle, the operation will probably compete for publication and be reselected.

Ⅲ. A.1.a 발행 스캔 체인III. A.1.a Issuance Scan Chain

본 발명의 한 실시예에서, 스케쥴러(280)는 상기 엔트리에 관련된 로직 블록으로부터 형성된 스캔 체인을 사용하는 동작을 스캔한다. 각 각의 스캔 체인은 일부 가산기에서 사용된 것 같은 체인을 운반하는 것과 비슷하다. 상기 로드 유니트, 상기 저장 유니트 또는 레지스터 유니트를 위한 발행 선택 스캔 체인에서, 가장 오래된 엔트리로 입력된 "스캔" 비트 Cin 은 상기 엔트리의 하나 내의 로직 블록이 상기 스캔 비트를 제거할 때 까지 상기 스캔 체인을 통해 논리적으로 전파된다. 만일 상기 엔트리가 원하는 타입의 동작에 관련되어 있다면(즉, IssuableToxx 가 표명됨), 엔트리는 상기 스캔 비트를 제거한다. 레지스터 유니트(254)로 발행될 상기 동작을 스캔하기 위해, 스캔 비트는 레지스터 유니트(253)로 발행될 상기 동작과 관련된 엔트리에 의해 논리적으로 발생되며, 그 스캔 비트는 레지스터 유니트(254)로 발행가능한 동작과 관련된 엔트리에 의해 제거될 때 까지 전파된다. 상기 스캔 비트를 제거하는 상기 엔트리는 신호 IssueOpToxx 를 표명하여 자신을 실행 유니트 xx 로 발행될 동작과 관련된 엔트리로 식별한다. 따라서 상기 선택된 엔트리는 방송 단계(431)를 필요로 하는 적절한 행위를 취할 수 있다. 만일 실행 유니트 xx 를 위한 스캔 비트가 제거되지 않는 모든 엔트리를 통해 전파된다면, 스케쥴러(280) 내에는 유니트 xx 로 발행가능한 동작과 관련된 어떠한 엔트리도 없게 되며, 발행을 위해 선택되는 동작이 없게 된다.In one embodiment of the invention, the scheduler 280 scans the operation using a scan chain formed from the logic block associated with the entry. Each scan chain is similar to carrying a chain as used in some adders. In the issue select scan chain for the load unit, the storage unit or the register unit, the "scan" bit Cin entered as the oldest entry clears the scan chain until a logic block within one of the entries removes the scan bit. Is propagated logically. If the entry relates to the desired type of operation (ie IssuableToxx is declared), the entry removes the scan bit. In order to scan the operation to be issued to the register unit 254, a scan bit is logically generated by an entry associated with the operation to be issued to the register unit 253, the scan bit being issueable to the register unit 254. It is propagated until removed by the entry associated with the operation. The entry for removing the scan bit asserts itself as an entry associated with the operation to be issued to execution unit xx by asserting signal IssueOpToxx. Thus, the selected entry can take appropriate action requiring broadcast step 431. If the scan bits for execution unit xx are propagated through all entries that are not removed, then there is no entry in scheduler 280 related to operations that can be issued to unit xx, and no operations are selected for publication.

스캔 비트 신호가 스케쥴러(280)내의 모든 단일 엔트리를 통해 일렬로 전파하는 스캔 체인이 상대적으로 간단한 반면에, 더 빠른 수행이 필요할 수 도 있다. 전통적인 Generate-Propagate-Kill 운반 체인에서 사용된 방법과 유사한 룩-어헤드 기술이 적용될 수 있다. 룩-어헤드 기술의 하나는 엔트리들을 그룹으로 결합시키는데, 각 그룹은 스캔 비트를 발생하고, 전파시키고 또는 제거한다. 룩 어헤드는 그룹 발생, 전파 및 제거 항이 단일 엔트리 항으로부터 병렬로 결정되고 그룹을 통과한 스캔이 상기 그룹내의 매 엔트리를 통해 신호의 전파를 시키지 않고 결정될 수 있는지 결정되기 때문에 더 빠르다. 그룹 항의 연속 조합을 함으로서, 상기 전체 스케쥴러 저장기가 단일 그룹을 형성하기 때문에 실제로 발생하는 스캔 비트 신호 전파는 없다.While scan chains in which scan bit signals propagate in series through every single entry in scheduler 280 are relatively simple, faster performance may be required. Look-ahead techniques similar to those used in traditional Generate-Propagate-Kill transport chains can be applied. One look-ahead technique combines entries into groups, each group generating, propagating or removing scan bits. The look ahead is faster because the group occurrence, propagation and removal terms are determined in parallel from a single entry term and whether a scan through the group can be determined without propagating the signal through every entry in the group. By combining successive combinations of group terms, no scan bit signal propagation actually occurs because the entire scheduler store forms a single group.

LU, SU 및 RUX 스캔 체인을 위해서, 항 K 를 제거하는 단일-엔트리는 신호 IssuableTcXX 이다. 상기 발생 항 G 는 모두 제로이며, 전파 항 P 는 상기 관련된 K 항의 전체이다. 표 B.28 은 LU, SU 및 RUX 스캔 체인을 위한 단일-엔트리 항을 나타낸다. 첨부 B 의 표 B.29 는 파이프라인 LU, SU 및 RUX 를 위한 발행 선택 스캔 체인내에 사용된 그룹 항 Pgrp 및 Kgrp 를 설명하고 있다.For the LU, SU, and RUX scan chains, the single-entry that removes the term K is the signal IssuableTcXX. The occurrence terms G are all zero, and the propagation term P is the whole of the related K terms. Table B.28 shows the single-entry terms for the LU, SU, and RUX scan chains. Table B.29 in Appendix B describes the group terms Pgrp and Kgrp used in the Issue Selection Scan Chain for Pipeline LU, SU, and RUX.

도 8A 및 도 8B 는 6 엔트리의 룩-어헤드 그룹을 사용하는 RUX 스캔 체인의 부분을 수행하는 로직(800)을 보여주고 있다. 더 많거나 더 적은 엔트리의 그룹이 사용될 수 있지만, 그룹 당 6 엔트리는 24 엔트리를 4 개의 사분면(quadrant)으로 분할하고 상기 그룹 항을 처리하는데 사용된 와이어(wire)의 수를 감소시킨다. 도 8A 에 도시되어 있듯이, 각 각의 사분면 에는 6-입력 OR 게이트 처럼 함께 동작하는 관련된 NOR 게이트(810,812) 및 NAND 게이트(814)가 있고 사분면 3,2,1 또는 0 을 위한 그룹 제거 신호 Kgrp3, Kgrp2, Kgrp1 또는 Kgrp0 를 발행한다. NOR 게이트(810,812)를 위한 입력은 파이프라인 RUX 를 위한 항을 제거하는 상기 단일-엔트리인 신호 IssuableToRUX 이다. 파이프라인 LU 및 SU 를 위한 스캔 체인은 각 각의 신호 IssuableToLU 및 IssuableToSU 가 IssuableToRUX 의 위치에 입력되는 것을 제외하고는 동일하다.8A and 8B show logic 800 performing part of a RUX scan chain using a look-ahead group of six entries. More or fewer groups of entries may be used, but 6 entries per group divides 24 entries into four quadrants and reduces the number of wires used to process the group term. As shown in Fig. 8A, each quadrant has an associated NOR gate 810,812 and a NAND gate 814 that operate together like a six-input OR gate and the group removal signal Kgrp3, for quadrant 3,2,1 or 0, Issue Kgrp2, Kgrp1 or Kgrp0. The input for NOR gates 810, 812 is the signal IssuableToRUX, which is the single-entry that removes the term for pipeline RUX. The scan chains for pipeline LUs and SUs are the same except that the respective signals IssuableToLU and IssuableToSU are input in place of IssuableToRUX.

발행 선택 스캔은 가장 오래된 엔트리에서부터 가장 새로운 엔트리까지 스케쥴러(280) 내의 엔트리의 물리적 주문에 따라 이루어진다. 사분면(3)은 가장 오래된 엔트리를 포함하고 있다. 만일 신호 Kgrp3 가 표명되면, 사분면(3)내의 상기 동작 중 하나는 스캔 비트를 제거하고 사분면(3)으로부터의 동작이 발행될 것이다. 버퍼(823)는 지연된 신호 IssueQuadrant[3] 을 표명하여 사분면(3)을 선택한다. 만일 신호 Kgrp3 가 표명되지 않는다면, 스캔 비트는 그룹(3)을 통해 전파될 수 있으나, 사분면 2,1 또는 0 내의 동작이 선택되기도 한다. 만일 신호 Kgrp2 가 표명되고 신호 Kgrp3 가 표명되지 않는다면, NAND 게이트(822)는 신호 IssueQuadrant[2] 를 표명한다. 비슷하게, 만일 상기 스캔 비트가 사분면 1 또는 0 로 전파될 수 있고 그룹 제거 신호 Kgrp1 또는 Kgrp0 가 표명되면(즉, 그룹이 상기 스캔 비트를 제거함), NAND 게이트(821,820)는 신호 IssueQuadrant[1] 및 IssueQuadrant[0] 을 각 각 표명한다. 만일 표명되는 그룹 제거 신호 Kgrp[3:0] 이 전혀 없다면, 발행을 위해 선택되는 동작은 하나도 없게된다.The issue selection scan is made according to the physical order of entries in the scheduler 280, from the oldest entry to the newest entry. Quadrant 3 contains the oldest entry. If signal Kgrp3 is asserted, one of the above operations in quadrant 3 will remove the scan bit and an operation from quadrant 3 will be issued. Buffer 823 selects quadrant 3 by asserting delayed signal IssueQuadrant [3]. If the signal Kgrp3 is not asserted, the scan bits can be propagated through the group 3, but the operation in quadrant 2, 1 or 0 is also selected. If signal Kgrp2 is asserted and signal Kgrp3 is not asserted, NAND gate 822 asserts signal IssueQuadrant [2]. Similarly, if the scan bit can propagate to quadrant 1 or 0 and the group remove signal Kgrp1 or Kgrp0 is asserted (ie, the group removes the scan bit), then the NAND gates 821,820 are signal IssueQuadrant [1] and IssueQuadrant. Each [0] is declared. If there is no group removal signal Kgrp [3: 0] declared, then no action is selected for publication.

도 8B 는 신호 IssueQuadrant[0] 가 표명되는 경우 사분면 0 으로부터 동작을 선택하는 로직(850)을 보여주고 있다. 네 개의 회로가 로직(850)과 비슷하고, 각 사분면 를 위해 하나는 병렬로 동작한다. 엔트리(5)가 사분면 0 내의 가장 오래된 엔트리이기 때문에, 만일 파이프라인 RUX 로 발행이 가능하다면 엔트리 5 가 선택되고 사분면 0 이 발행을 위해 선택된다. 만일 IssueQuadrant[0] 가 표명되고 IssuableToRUX[5] 가 표명된다면 AND 게이트(865)는 신호 IssueOpRUX[5] 를 표명하여 선택된 동작을 포함하고 있는 엔트리 5 를 나타낸다. AND 게이트(860 부터 864)는 엔트리 0 부터 4 까지에 해당하고 신호 IssueOpToRUX[0:4] 내의 각 비트를 표명하여 선택된 동작을 그 동작이 RUX 로 발행 가능하고 사분면 0 내의 오래된 동작이 RUX 로 발행가능한 것이 없는 때 식별한다. NOR 게이트(870 부터 873)는 각 각의 NAND 게이트(860 부터 863)으로 신호를 표명하여 RUX 로 발행가능한 상기 오래된 엔트리가 전혀 없음을 나타낸다.8B shows logic 850 to select an operation from quadrant 0 when the signal IssueQuadrant [0] is asserted. Four circuits are similar to logic 850, one for each quadrant operating in parallel. Since entry 5 is the oldest entry in quadrant 0, entry 5 is selected and quadrant 0 is selected for publication if it is possible to issue to pipeline RUX. If IssueQuadrant [0] is declared and IssuableToRUX [5] is asserted, AND gate 865 asserts signal IssueOpRUX [5] to indicate entry 5 containing the selected operation. AND gates 860 to 864 correspond to entries 0 to 4 and assert each bit in signal IssueOpToRUX [0: 4] to enable the selected action to be issued to RUX and the old action in quadrant 0 to RUX. Identifies when there is nothing. NOR gates 870 through 873 assert a signal to each NAND gate 860 through 863 to indicate that there is no such old entry that can be issued to RUX.

회로(800,850)에 대안으로서, 첨부 B 내의 표 B.29 의 식을 수행하는 로직이 사용될 수 있다.As an alternative to the circuit 800, 850, logic to perform the equation of Table B.29 in Appendix B may be used.

도 8A 의 로직(800)은 상기 선택된 엔트리가 사분면 0 에 있고, 마지막 사분면이 탐색되는 경우라도 신호 IssuableToRUX[23:0] 의 입력으로부터 세 개의 게이트 지연이 있은 다음 신호 IssueQuadrant[3:0] 을 발생한다. 룩-어헤드 기술을 사용하지 않으면, 스캔 비트는 어떠한 동작도 선택되지 않은 때 스케쥴러 전체를 통해 전파되어야 한다. 이것을 한 실시예에서는 약 24 또는 그 이상의 게이트 지연이다. 또한, 룩-어헤드 스캔 체인은 보통 스캔 비트가 매 엔트리를 통과하는 때 직렬 스캔 체인보다 더 빠르다.Logic 800 of FIG. 8A generates the next signal IssueQuadrant [3: 0] after three gate delays from the input of signal IssuableToRUX [23: 0] even if the selected entry is in quadrant 0 and the last quadrant is searched for. do. Without the look-ahead technique, scan bits must propagate throughout the scheduler when no action is selected. In one embodiment this is about 24 or more gate delays. Also, look-ahead scan chains are usually faster than serial scan chains as scan bits pass through every entry.

Ⅲ. A.1.b RUY를 위한 발행 선택 스캔 체인III. A.1.b Issue Selection Scan Chain for RUY

RUY 스캔 체인은 더 복잡하며 네 개의 항 G, P, K 및 O 를 사용한다. 상기 항 G, P 및 K 는 종래의 발생, 전파 및 제거 항과 유사하다. 상기 O 항은 단지 하나의 동작이 선택되는 것을 보장한다. 엔트리(i)를 위한 항 G 를 발생하는 단일-엔트리는 신호 IssuableToRUX[i] 이고 상기 항 O 는 상기 항 G 와 같다. 엔트리(i)를 위한 항 K 를 제거하는 단일-엔트리는 신호 IssuableToRUY[i] 이고 상기 P 항은 상기 관련된 K 항의 전량이다.The RUY scan chain is more complex and uses four terms G, P, K and O. The terms G, P, and K are similar to conventional occurrence, propagation and elimination terms. The O term ensures that only one action is selected. The single-entry that generates the term G for entry i is the signal IssuableToRUX [i] and the term O is equal to the term G. The single-entry that removes the term K for entry i is the signal IssuableToRUY [i] and the P term is the total amount of the related K term.

룩-어헤드 기술은 파이프라인 RUY 를 위한 발행 선택내에서 사용될 수 도 있다. 개념적으로는, 상기 RUY 스캔 체인을 위해서는, 스캔 비트는 RUX 로 발행을 위해 선택된 동작을 포함하는 엔트리에 의해 발행되고 파이프라인 RUY 로 발행가능한 다음의 새로운 동작에 의해 제거된다. 만일 그룹 내의 엔트리가 스캔 비트를 발생하고 상기 스캔을 제거하는 엔트리가 상기 그룹 내에 나오지 않는다면 그룹은 출력 스캔 비트를 발생한다. 만일 상기 그룹 내의 각 엔트리가 상기 스캔 비트를 전파하는 경우에는 그룹은 스캔 비트를 발생한다. 일단 발생된 O 항이 새로운 스캔 비트의 발생으로부터 더 새로운 엔트리를 억제하고, 그룹 O 항은 상기 그룹 내의 어느 엔트리가 단일-엔트리 O 항을 발생한다면 발생된다. 첨부 B 의 표 B.30 의 식들은 RUY 스캔 체인내의 단일-엔트리 항으로부터 그룹 항들을 발생하는 로직을 요약하고 있다.Look-ahead techniques may be used within the issue selection for pipeline RUY. Conceptually, for the RUY scan chain, the scan bit is issued by the entry containing the operation selected for publication to RUX and eliminated by the next new operation that can be issued to pipeline RUY. If an entry in the group generates a scan bit and the entry for removing the scan does not appear in the group, the group generates an output scan bit. If each entry in the group propagates the scan bit, the group generates a scan bit. Once the generated O term suppresses the newer entry from the generation of a new scan bit, the group O term is generated if any entry in the group generates a single-entry O term. The equations in Table B.30 of Appendix B summarize the logic of generating group terms from single-entry terms in the RUY scan chain.

도 9A 내지 도 9C는 스케쥴러(280)를 처음으로 8개의 3-엔트리 그룹으로 분할하는 파이프라인 RUY 를 위한 발행 선택 스캔 체인을 설명하고 있다. 도 9A 에서, 표 B.30 에 도시된 로직을 이행하는 로직 블록(910) 및 단일-엔트리 신호 G[23:3] 및 O[23:3] 으로부터 발생 그룹 항 Ggrp[7:1], Pgrp[7:1] 및 Ogrp[7:1] 이 있다. 가장 새로운 그룹, 엔트리 0 부터 2를 위한 그룹 항은 아래에 설명된 이유로 인해 필요하지는 않다. 상기 그룹 항들은 세 단계에서 조합되어 더 큰 그룹을 위한 항을 형성한다. 회로(900)는 가장 오래된 셋, 여섯, 아홉, 열둘, 열다섯, 열여덟 및 스물하나 엔트리를 포함하고 있는 그룹을 위해 발생 항 G_7, G_67, G_567, G_4567, G_34567, G_234567 및 G_1234567 등의 그룹 항을 발생한다.9A-9C illustrate an issue select scan chain for pipeline RUY that divides scheduler 280 into eight three-entry groups for the first time. In FIG. 9A, the generation group term Ggrp [7: 1], Pgrp from the logic block 910 and the single-entry signals G [23: 3] and O [23: 3] that implement the logic shown in Table B.30. [7: 1] and Ogrp [7: 1]. The newest group, the group term for entries 0 through 2, is not necessary for the reasons described below. The group terms are combined in three steps to form the terms for the larger group. Circuit 900 occurs for groups containing the oldest three, six, nine, twelve, fifteen, eighteen and twenty one entries group terms such as G_7, G_67, G_567, G_4567, G_34567, G_234567, and G_1234567. Occurs.

로직 블록(920)을 포함하고 있는 회로(900)의 첫번째 단계는 세 엔트리의 인접 그룹으로부터 그룹 항들을 조합하여 여섯 엔트리의 그룹을 위한 그룹 항을 발생한다. 로직 블록(930)을 포함하고 있는 두번째 단계는 여섯 또는 셋 중의 하나인 엔트리의 인접 그룹으로부터 그룹 항을 조합하여 아홉 또는 열둘 엔트리의 그룹을 위한 그룹 항을 발생한다. 로직 블록(940)을 포함하고 있는 세번째 단계는 열둘, 여섯 또는 세 엔트리의 인접 그룹으로부터 그룹 항을 조합하여 열하나, 열여덟 및 열다섯 엔트리의 그룹을 위한 그룹 항을 발생한다.The first step in circuit 900, including logic block 920, combines group terms from adjacent groups of three entries to generate group terms for a group of six entries. The second step involving logic block 930 combines the group terms from adjacent groups of entries, one of six or three, to generate group terms for a group of nine or twelve entries. The third step involving logic block 940 combines the group terms from adjacent groups of twelve, six or three entries to generate group terms for groups of eleven, eighteen and fifteen entries.

로직 블록(920,930 및 940)은 그룹(X)를 위해 상기 다음의 새로운 그룹(Y)를 위한 그룹 항(GY,PY,OY)를 가지고 그룹 항(GX,PX,OX)를 조합하여 그룹(X,Y)의 연결인 그룹(XY)를 위한 항(GXY,PXY,OXY)를 발생한다. 본 발명의 한 실시예에서, 각 블록(920,930,940)은 다음 식을 따른다.Logic blocks 920, 930 and 940 have group terms GY, PY, OY for the next new group Y for group X and combine group terms GX, PX, OX to group X Generate terms (GXY, PXY, OXY) for the group (XY) that is the connection of, Y. In one embodiment of the invention, each block 920, 930, 940 follows the equation:

GXY = GX·PY + ∼OX·GYGXY = GX, PY +-OX, GY

PXY = PX·PYPXY = PXPY

OXY = OX + OYOXY = OX + OY

도 9B에 도시된 회로는 블록(920,930,940)의 실행 예를 보여주고 있다. 도 9B에서, 입력 신호는 그룹(1,2)를 위해 그리고 출력 신호는 그룹(1,2)의 연합을 위한 것이지만; 원하는 모순없는 그룹이 그룹(1,2)를 대체할 수 있다. 선택적으로, 다른 등가의 로직이 사용되기도 하고 또는 선택 단계인 블록(920,930 또는 930,940)이 역 로직으로 이행될 수 있다. 추가적으로, 아래에 설명되었듯이, 마지막 단계인 블록(940)으로부터의 전파 항은 필요하지 않으며, 블록(940)은 전파 식을 이행하지 않음으로서(즉 AND 게이트(922)를 없앰)간략히 될 수 있다.The circuit shown in FIG. 9B shows an example of the execution of blocks 920, 930 and 940. In FIG. 9B, the input signal is for group 1, 2 and the output signal is for association of group 1, 2; The desired inconsistent group can replace group (1, 2). Optionally, other equivalent logic may be used, or block 920, 930 or 930, 940, which is a selection step, may be transitioned to inverse logic. Additionally, as discussed below, the last step, propagation term from block 940, is not necessary, and block 940 can be simplified by not implementing the propagation equation (ie, removing AND gate 922). .

회로(900)에서부터의 원하는 출력 신호는 G 항 및 O 항이다. 출력 신호 G_7, G_67, G_567, G_4567, G_34567, G_234567 및 G_1234567 은 각 각 앞서 발생된 스캔 비트가 그룹 6,5,4,3,2,1 및 0 에 도달하는 것을 나타내고 본 명세서에서는 신호 CinGrp[6:0] 으로도 언급된다. 신호 O_7, O_67, O_567, O_4567, O_34567, O_234567 및 O_1234567 는 상기 스캔 비트가 각 그룹에 도달하기 전에 제거되는 여부에 상관없이 각 각 그룹 6,5,4,3,2,1, 및 0 에 앞서 발생된다. 신호 O_7, O_67, O_567, O_4567, O_34567, O_234567 및 O_1234567 는 본 명세서에서는 신호 OinGrp[6:0] 으로도 언급된다.Desired output signals from circuit 900 are the G and O terms. The output signals G_7, G_67, G_567, G_4567, G_34567, G_234567 and G_1234567 respectively indicate that the previously generated scan bits reach groups 6,5,4,3,2,1 and 0, and in this specification the signal CinGrp [6 Also referred to as: 0]. Signals O_7, O_67, O_567, O_4567, O_34567, O_234567 and O_1234567 are prior to each of the groups 6,5,4,3,2,1, and 0, regardless of whether the scan bits are removed before reaching each group. Is generated. The signals O_7, O_67, O_567, O_4567, O_34567, O_234567 and O_1234567 are also referred to herein as signals OinGrp [6: 0].

다중-비트 신호 IssueOpRUY[23:0] 는 그룹 신호 CinGrp[6:0] 및 OinGrp[6:0] 및 단일-엔트리 신호 P,K,G 및 O 로부터 발생될 수 있다. 도 9C는 RUY 실행 유니트로 발행을 위한 엔트리를 선택하는 로직을 보여주고 있다. 신호 IssueOpToRUY[23:21] 엔트리(23 부터 21)를 발생하는 로직은 가장 오래된 그룹인 그룹(7)으로의 그룹 전파가 전혀 없기 때문에 다른 그룹을 위한 로직과는 다르다. 그룹(6)을 위해 IssueOpToRUY[20:18]를 발생하는 것으로 도시된 로직은 각 그룹(5 부터 0)을 위해 반복된다. 첨부 B 의 표 B.31 에서 볼 수 있듯이, 최종 그룹(0)으로부터의 그룹 전파 항은 발행을 위한 동작의 선택을 필요로 하지는 않는다.The multi-bit signal IssueOpRUY [23: 0] can be generated from the group signals CinGrp [6: 0] and OinGrp [6: 0] and the single-entry signals P, K, G and O. 9C shows logic to select an entry for issue to a RUY execution unit. The logic that generates the signal IssueOpToRUY [23:21] entries (23 to 21) is different from the logic for other groups because there is no group propagation to the oldest group, group (7). The logic shown to generate IssueOpToRUY [20:18] for group 6 is repeated for each group (5 to 0). As can be seen in Table B.31 of Annex B, the group propagation term from the final group (0) does not require the selection of an action for publication.

Ⅲ. A.2 오퍼랜드 정보 방송 단계III. A.2 Operand Information Broadcast Stage

처리 파이프라인의 발행 단계의 방송 단계 동안, 실행 유니트로 발행될 동작용 오퍼랜드에 관한 정보는 모든 스케쥴러 엔트리 및 외부 로직으로 방송된다. 이 정보는 발행을 위해 선택된 각 동작을 위한 두 개의 소스 오퍼랜드를 설명한다. 선택된 동작을 위한 엔트리는 상기 선택된 동작에 관한 정보도 외부 로직 및 관련된 실행 유니트로 전송한다.During the broadcast phase of the issue phase of the processing pipeline, information about the operands to be issued to the execution unit is broadcast to all scheduler entries and external logic. This information describes two source operands for each action selected for publication. The entry for the selected action also transmits information about the selected action to external logic and associated execution units.

오퍼랜드 정보 버스(552)(도 5)는 스케쥴러(280)를 통과한다. 오퍼랜드 정보 버스(552)의 수는 실행 유니트에 요구되는 오퍼랜드의 최대 수와 맞는다. 선택된 동작에 관련된 엔트리는 그 관련이 발행되는 실행 유니트와 관련된 두 개의 오퍼랜드 버스(522)를 구동한다. 각 오퍼랜드 정보 버스(552)는 8 비트 폭을 갖고 5-비트 레지스터 번호 Src1Reg[4:0] 또는 SrcReg[4:0] 및 소스 오퍼랜드를 위한 3-비트 바이트 마크 Src1BM[2:0] 또는 Src2BM[2:0]을 운반한다. 표 B.31 는 오퍼랜드 정보 버스(552)를 구동하는 엔트리 로직을 설명하고 있다.Operand information bus 552 (FIG. 5) passes through scheduler 280. The number of operand information buses 552 matches the maximum number of operands required for the execution unit. The entry related to the selected operation drives two operand buses 522 associated with the execution unit for which the association is issued. Each operand information bus 552 is 8 bits wide and has a 5-bit register number Src1Reg [4: 0] or SrcReg [4: 0] and a 3-bit byte mark Src1BM [2: 0] or Src2BM [for the source operand. 2: 0]. Table B.31 describes the entry logic for driving operand information bus 552.

각 엔트리 내부의 비교 로직은 방송 오퍼랜드 정보를 상기 비교를 하는 엔트리내의 동작을 위한 목적 레지스터에 관한 비슷한 정보와 비교를 한다. 상기 비교 로직은 레지스터 수가 맞는지 그리고 바이트 마크가 맞는지(즉, 오퍼랜드를 요구하는 상기 바이트들 중 일부 또는 모두는 상기 동작에 의해 수정되거나 수정될 것이다)를 검사한다. 다중 비교("오퍼랜드 정보 버스의 #" * "엔트리의 #")의 결과는 다음 처리 단계인 오퍼랜드 선택 단계(441) 동안 발생하는 활동을 제어하는 신호이다. 표 B.32 는 상기 비교를 수행하는 로직을 설명하고 있다. 아래의 식은 일반적인 비교를 요약한 것이다:The comparison logic inside each entry compares the broadcast operand information with similar information about the destination register for operation in the entry making the comparison. The comparison logic checks whether the register number is correct and the byte mark is correct (ie, some or all of the bytes requiring an operand will be modified or modified by the operation). The result of the multiple comparisons ("# of the operand information bus" * "# of entries") is a signal that controls the activity that occurs during the next processing step, operand selection step 441. Table B.32 describes the logic for performing the comparison. The following formula summarizes a general comparison:

OprndMatch_XXsrcY = (busReg[4:0] = = DestReg[4:0])OprndMatch_XXsrcY = (busReg [4: 0] = = DestReg [4: 0])

&& (busBM[1] DestBM[1] + busBM[0] DestBM[0])&& (busBM [1] DestBM [1] + busBM [0] DestBM [0])

여기서, "XXsrcY"는 LUsrc2, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1 및 RUYsrc2 중 하나이고, "bus"는 오퍼랜드 정보 버스(552) 중 하나인 단일 신호 OprndInfo_XXsrcY 를 언급한다.Here, "XXsrcY" is one of LUsrc2, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1 and RUYsrc2, and "bus" refers to the single signal OprndInfo_XXsrcY, which is one of operand information buses 552.

상기 비교 결과인 "Match" 신호 OprndMatch_XXsrcY 는 상기 방송 단계의 산물이고 상기 오퍼랜드 선택에서 사용된 것이다. 이것은 각 엔트리 및 매 엔트리의 내부, 즉 각 엔트리의 내부에서 함께 일어나며, 8 매치 신호가 상기 엔트리의 오퍼랜트 선택 로직(532)으로 파이프된다. 상기 모든 매치 신호는 각 엔트리에 국부적으로 유지되고 이어지는 파이프라인 단계에서의 사용을 위한 레지스터로 래치된다. 필수적으로, 각 엔트리 내부에는, 8개의 오퍼랜드 정보 버스 비교기가 8개의 "제어" 신호를 오퍼랜드 선택 로직(532)의 8개 덩어리로 공급한다. 바닥 행 내부의 각 엔트리 내부에 있는 상기 매치 신호는 이러한 동작의 레지스터의 처분에 관련된 추가 신호에 의해 게이트 또는 마스크 되어 그 결과 아키텍추얼 레지스터 화일(290)가 된다. 아래의 동작 처분 유니트(260)의 설명을 참조하라.The comparison result "Match" signal OprndMatch_XXsrcY is the product of the broadcast step and is used in the operand selection. This occurs together within each entry and every entry, ie inside each entry, and eight match signals are piped to the entry selection logic 532 of the entry. All of the match signals are held locally at each entry and latched into registers for use in subsequent pipeline stages. Essentially, inside each entry, eight operand information bus comparators feed eight "control" signals to eight chunks of operand selection logic 532. The match signal inside each entry in the bottom row is gated or masked by additional signals related to the disposition of the register of this operation, resulting in an architectural register file 290. See the description of the action disposal unit 260 below.

각 엔트리는 그 엔트리 내부의 오퍼랜드 매치 레지스터로 매치 버스의 로딩을 실제로는 제어하지는 않는다. 광역 로직(520)은 발행된 동작이 오퍼랜드 포워드 단계(440)에 앞서는지를 나타내는 신호 LUAdv0, SUAdv0, RUXAdv0 및 RUYAdv0 를 발생하고, 매치 신호는 동작이 오퍼랜드 포워드 단계(440)에 실제로 앞서는 경우 래치되고 사용되기만 한다.Each entry does not actually control the loading of the match bus into the operand match register within that entry. Wide area logic 520 generates signals LUAdv0, SUAdv0, RUXAdv0, and RUYAdv0 indicating whether the issued operation precedes operand forward step 440, and the match signal is latched and used when the operation actually precedes operand forward step 440. Just become.

네 개의 동작 정보 버스(551)는 발행된 동작을 설명하는 추가 정보를 제공하는 로드 유니트(251), 저장 유니트(252), 레지스터 유니트(253) 및 레지스터 유니트(254)에 해당한다. 상기 추가 정보는, 주로 OpInfo 필드인데, 상기 방송 단계 동안 스케쥴러(280)에서 판독되고 상기 동작이 오퍼랜드 포워드 단계를 실제 앞서는 경우 외부 파이프라인 레지스터로 래치된다. 표 B.33 은 상기 동작 정보 신호를 발생하는 로직을 설명하고 있다.Four operation information buses 551 correspond to a load unit 251, a storage unit 252, a register unit 253 and a register unit 254 which provide additional information describing the issued operation. The additional information is primarily an OpInfo field, which is read by the scheduler 280 during the broadcast phase and latched into an external pipeline register if the operation actually precedes the operand forward phase. Table B.33 describes the logic that generates the motion information signal.

방송 단계 동안 제공된 상기 Src1/2Reg 및 Src1/2BM 필드는 다음 두 단계 동안(즉, 오퍼랜드 포워드 단계) 목적하는 수를 위해 사용된다. 상기 OpInfo 필드는 해당하는 실행 유니트(해당하는 신호 XXAdv1 에 의해 제어되는 파이프라인 레지스터의 두번째 세트를 경유하여)로 간단히 "파이프로 내려감" 으로 통과된다. RUX 및 RUY 동작을 위해, 상기 관련된 바이트 마크 Src1/2BM 도 상기 해당하는 레지스터 유니트로 "파이프로 내려감" 으로 통과된다.The Src1 / 2Reg and Src1 / 2BM fields provided during the broadcast phase are used for the desired number during the next two phases (ie operand forward phase). The OpInfo field is simply passed down to the corresponding execution unit (via the second set of pipeline registers controlled by the corresponding signal XX Adv1). For RUX and RUY operation, the relevant byte mark Src1 / 2BM is also passed "down" into the corresponding register unit.

Ⅲ. B. 오퍼랜드 포워드 단계III. B. Operand Forward Steps

오퍼랜드 포워드 단계는 오퍼랜드 선택 단계와 오퍼랜드 전송 단계로 구성된다.The operand forward step consists of an operand selection step and an operand transmission step.

Ⅲ. B.1 오퍼랜드 선택 단계III. B.1 Operand Selection Steps

오퍼랜드 포워드 단계내의 각 사이클에서, 스케쥴러(280)는 발행 상태 로직(530)에 의해 발생되고 오퍼랜드 매치 레지스터에 저장되는 배치 비트를 사용하여 "인출" 되는 오퍼랜드를 위한 값을 공급하는 엔트리를 선택한다. 스케쥴러(280)는 각 오퍼랜드를 위해 상기 오퍼랜드의 값이 스케쥴러 엔트리로부터 나왔는지 또는 레지스터 화일(290)에서 나왔는지를 결정하기도 한다. 레지스터 화일(290)은 매칭 엔트리가 전혀 없다면 디폴트 된다. 상기 오퍼랜드 포워드 단계 동안, 상기 선택된 엔트리 및/또는 레지스터 화일(290)은 오퍼랜드 버스(544)상으로 오퍼랜드 값을 구동시켜 오퍼랜드 값을 상기 관련된 실행 유니트로 전송한다.In each cycle in the operand forward step, the scheduler 280 selects an entry that supplies a value for the operand to be "fetched" using the batch bits generated by the issue status logic 530 and stored in the operand match register. The scheduler 280 may determine for each operand whether the value of the operand is from a scheduler entry or from a register file 290. Register file 290 defaults to no matching entry. During the operand forward step, the selected entry and / or register file 290 drives the operand value on the operand bus 544 to send the operand value to the associated execution unit.

발행 단계에서의 발행 선택 처리에서, 오퍼랜드 선택은 독립적이고 동시에 일어난다. 따라서, 오펴랜드 선택 로직(532)에는 오퍼랜드를 제공하기 위한 엔트리를 선택하기 위해 8개의 스캔 체인이 포함되어 있다. 각 엔트리에는 각 각의 오퍼랜드 버스 및 관련된 스캔 체인을 위한 오퍼랜드 매치 레지스터가 있다. 각 스캔 체인은 인출되는 오퍼랜드가 있는 동작이 포함되어 있는 엔트리보다 더 오래되고 매치되는 가장 새로운 엔트리를 찾는다. 논리적으로는, 상기 스캔은 인출되는 오퍼랜드가 있고 더 오래된 엔트리 방향으로 진행하는 동작을 포함하고 있는 엔트리로부터 오퍼랜드 매치 비트 세트가 있는 첫번째 엔트리까지 스캔을 시작한다(스캔 비트가 발생). 만일 매치 비트를 설정하는 엔트리가 발견되면, 그 엔트리는 다음 단계 동안 관련된 오퍼랜드 버스(554)의 구동에 의해 요구된 오퍼랜드를 공급한다. 만일 "매칭" 엔트리가 발견되지 않는다면, 스캔 비트는 상기 스캔 체인에서 출력되어 레지스터 화일(290)이 상기 오퍼랜드 값을 공급하게 한다.In the issue selection process at the issue stage, operand selection occurs independently and simultaneously. Thus, the operand selection logic 532 includes eight scan chains for selecting entries for providing operands. Each entry has an operand match register for each operand bus and associated scan chain. Each scan chain finds the oldest and newest matching entry than the entry containing the action with the fetched operand. Logically, the scan starts a scan from an entry that has an operand to be fetched and includes an operation that proceeds to an older entry direction (the scan bit occurs). If an entry is found that sets the match bit, the entry supplies the operand requested by the driving of the associated operand bus 554 during the next step. If no "matching" entry is found, a scan bit is output in the scan chain to cause register file 290 to supply the operand value.

만일 인출되는 오퍼랜드가 있는 동작이 오퍼랜드 포워드 단계를 앞서지 않는다면, 상기 오퍼랜드 선택 처리는 다음 사이클 내에서 다시 수행된다. 동작은 만일, 예를들어 매치 비트 세트가 있는 엔트리가 상기 오퍼랜드를 요구하는 모든 바이트들을 수정하지 않는다면(그래서 공급할 수 없게 되면), 앞서지 않는다. 필드 State 및 스케쥴링 저장기(540) 내의 동작의 물리적 위치가 각 사이클에서 변화될 수 있기 때문에, 새로운 선택의 출력은 현재 사이클의 출력과는 다를 수 있다. 당연히, 각 사이클동안, 상기 선택 처리는 그 사이클 동안 오퍼랜드 값을 포워드 하는데 무엇이 이루어질 필요가 있는지를 결정한다.If the operation with the fetched operand does not precede the operand forward step, the operand selection process is performed again in the next cycle. The operation is not advanced if, for example, an entry with a set of match bits does not modify (and thus cannot supply) all the bytes that require the operand. Since the physical state of the operation in the field state and scheduling store 540 may change in each cycle, the output of the new selection may be different from the output of the current cycle. Naturally, during each cycle, the selection process determines what needs to be done to forward the operand value during that cycle.

오퍼랜드 값을 위한 적절한 소스를 찾기 위한 스캔은 앞서 설명한 발행 선택 스캔과 같은 방법으로 수행될 수 있다. 그러나, 스캔은 상기 발행 선택 단계의방향과는 반대인 더 오래된 동작의 방향으로 된다. 더욱이, 오퍼랜드 선택을 위해, 상기 스캔 체인은 "전파-제거" 체인이 아니다. 오퍼랜드 선택 스캔 체인은 종래의 운반 또는 "발생-전파-제거" 체인과 유사하다. 스캔 체인으로의 초기 스캔 비트 Cin 은 제로이고, 인출되는 오퍼랜드가 있는 동작에 해당하는 엔트리가 상기 스캔 비트를 발생한다. 스캔 제거는 오퍼랜드 매치 비트 세트가 있는 이어지는 첫번째 엔트리에서 발생되고, 스캔 전파는 인터리빙 엔트리에서 발생된다.The scan to find the appropriate source for the operand value can be performed in the same way as the issue selection scan described above. However, the scan is in the direction of an older operation opposite to the direction of the issue selection step. Moreover, for operand selection, the scan chain is not a "propagation-removal" chain. Operand selection scan chains are similar to conventional conveying or "generating-propagating-removing" chains. The initial scan bit Cin into the scan chain is zero, and the entry corresponding to the operation with the fetched operand generates the scan bit. Scan elimination occurs at the first entry that follows the operand match bit set, and scan propagation occurs at the interleaving entry.

광역 제어 로직(520)은 최종/가장 오래된 엔트리로부터 상기 최종 출력 스캔 비트 Cout 를 사용하여 어느 엔트리가 선택되어 어느 레지스터 화일(290)이 오퍼랜드를 제공하기 위해 선택되야 하는지를 결정한다. 만일 Cout 가 표명되면, 광역 제어 로직(520)은 레지스터 화일(290)을 선택한다. 상기 선택된 소스는 상기 오퍼랜드 포워드 단계의 뒷 부분인 오퍼랜드 전송 단계 동안 해당 오퍼랜드를 구동한다. 상기 오퍼랜드 선택 단계 동안, 보통 원하는 오퍼랜드 값을 보유하는 레지스터 화일(290)내의 소스 레지스터는 레지스터 화일(290)이 상기 오퍼랜드 버스를 구동하기 위해 선택되는 경우 판독된다.The global control logic 520 uses the last output scan bit Cout from the last / oldest entry to determine which entry is selected and which register file 290 should be selected to provide the operand. If Cout is asserted, global control logic 520 selects register file 290. The selected source drives the operand during the operand transfer phase which is later in the operand forward phase. During the operand selection step, the source register in the register file 290 that normally holds the desired operand value is read when the register file 290 is selected to drive the operand bus.

상기 발행 선택 스캔 체인에서, 룩-어헤드 실행은 속도가 향상된다. 첨부 B 의 표 B.34 는 종래의 Generate-Propagate-Kill 식과 유사한 룩-어헤드 식으로 오퍼랜드 선택 스캔 체인의 예를 제공하고 있다.In the issue select scan chain, the look-ahead execution is speeded up. Table B.34 in Appendix B provides an example of an operand selection scan chain with a look-ahead equation similar to the conventional Generate-Propagate-Kill equation.

Ⅲ. B.2 오퍼랜드 전송 단계III. B.2 Operand Transfer Step

오퍼랜드 포워드 단계(440)의 오퍼랜드 전송 단계(442) 동안, 8개의 소스 오퍼랜드 각 각을 위한 값은 인출되고 오퍼랜드 버스(554)를 통해 관련된 실행 유니트의 입력 레지스터로 전송된다. 오퍼랜드 값은 32-비트 양이지만, 일부 바이트는 정의되지 않기도 한다. 수정 동작이 진행되는 동안, 실행 유니트는 정의되지 않은 오퍼랜드 바이트들은 사용하지 않는다. 몇 몇 엔트리 또는 레지스터 화일(290)은 각 오퍼랜드 버스(554)를 구동할 수 있고, 스케쥴링 저장기(540)의 각 엔트리는 일부 및/또는 모든 버스를 구동할 수 있다.During operand transfer step 442 of operand forward step 440, the values for each of the eight source operands are retrieved and transferred via operand bus 554 to the input register of the associated execution unit. The operand value is a 32-bit quantity, but some bytes are not defined. While the modify operation is in progress, the execution unit does not use undefined operand bytes. Some entries or register files 290 may drive each operand bus 554, and each entry in the scheduling store 540 may drive some and / or all buses.

한 실시예에서, 192개 오퍼랜드 선택 신호 및 8개의 스캔 체인 신호 Cout 가 상기 동작 선택 단계 동안 발생된다. 이러한 신호에 기초하여, 선택된 각 엔트리내의 로직은 상기 엔트리 내의 적절한 버스 구동기를 사용가능하게 한다. 만일 오퍼랜드를 위해 어느 엔트리도 선택되지 않는다면, 레지스터 화일(290)이 그 오퍼랜드를 위해 구동기를 사용가능하게 한다. 첨부 B 의 표 B.35 는 오퍼랜드 버스(554)를 위한 구동기를 사용가능하게 하는 로직을 설명하고 있다.In one embodiment, 192 operand select signals and 8 scan chain signals Cout are generated during the operation selection step. Based on this signal, the logic in each selected entry makes available the appropriate bus driver in that entry. If no entry is selected for the operand, register file 290 makes the driver available for that operand. Table B.35 in Appendix B describes the logic that enables the driver for operand bus 554.

실행 유니트(251 부터 254)내의 오퍼랜드 레지스터는 연속되는 파이프라인 단계에서의 사용을 위해 오퍼랜드 버스로부터 상기 오퍼랜드 값을 포획한다. 광역 제어 로직(520)은 처리 파이프라인 마다 하나의 제어 신호를 발생하여 상기 오퍼랜드 레지스터의 로딩을 제어한다. 오퍼랜드 포워드 단계의 동작이 실행 단계(450)를 앞설 수 있다면 실행 유니트로 새로운 오퍼랜드 값이 로드된다. 비슷하게, 신호 SUAdv1, RUXAdv1 및 RUYAdv1 은 각 각 상기 오퍼랜드 레지스터의 SU, RUX 및 RUY 로딩을 제어한다.Operand registers in execution units 251 through 254 capture the operand value from the operand bus for use in subsequent pipeline stages. Global control logic 520 controls the loading of the operand register by generating one control signal per processing pipeline. If the operation of the operand forward step can precede execution step 450, a new operand value is loaded into the execution unit. Similarly, signals SUAdv1, RUXAdv1, and RUYAdv1 control SU, RUX, and RUY loading of the operand registers, respectively.

4개의 처리 파이프라인의 오퍼랜드 포워드 단계(440)의 오퍼랜드 전송 단계(442)가 진행되는 동안, 오퍼랜드 값을 제공하기 위해 선택된 동작의 각 각에 관한 정보도 스케쥴러(280)의 밖에서 판독된다. 각 오퍼랜드 버스(554)에는 인출되는 오퍼랜드의 "원천(origin)"를 설명하는 오퍼랜드 상태 신호 OprndStat 를 운반하는 관련된 오프랜드 상태 버스(553)이 있다. 상기 엔트리로부터의 오퍼랜드 상태 신호는 상기 오퍼랜드 값을 제공하는 엔트리의 필드 State, DestBM, Type 및 Execl 의 연결이다. 외부 로직은 상기 오퍼랜드 전송 단계가 진행되는 동안 이 정보를 사용하여 유효한 오퍼랜드 값의 소스 및 사용가능성을 결정한다.During the operand transfer step 442 of the operand forward step 440 of the four processing pipelines, information about each of the selected operations to provide operand values is also read outside the scheduler 280. Each operand bus 554 has an associated offland status bus 553 that carries the operand status signal OprndStat describing the " origin " of the operand being fetched. The operand status signal from the entry is a concatenation of the fields State, DestBM, Type and Execl of the entry providing the operand value. External logic uses this information during the operand transfer step to determine the source and availability of valid operand values.

레지스터 화일(290)에도 오퍼랜드 상태 버스(553)가 정의된 값을 운반하는 것을 보장하는 오퍼랜드 상태 버스(553)을 위한 구동기 세트가 있는데, 상기 값은 상기 정보를 사용하는 로직에 의해 적절히 동작되는 결과를 가져온다. 첨부 B 의 표 B.36 은 상기 오퍼랜드 상태 신호 및 그 발생을 설명하고 있다.Register file 290 also has a set of drivers for operand status bus 553 that ensure operand status bus 553 carries a defined value, the result of which is properly operated by logic using the information. Bring it. Table B.36 in Appendix B describes the operand status signals and their occurrence.

실행 유니트로 운반되는 각 소스 오퍼랜드는 세 가지 가능성 소스의 하나로 부터 나온다: 스케쥴러 엔트리, 레지스터 화일(290) 또는 이 실행 유니트 또는 다른 실행 유니트의 결과 버스가 그것이다. 오퍼랜드 전송 단계(442)는 엔트리로부터 운반을 커버한다. 특히, 상기 원하는 오퍼랜드를 위한 레지스터 번호는 상기 방송 단계 동안 상기 동작으로부터 방송되며 레지스터 화일(290)의 적절한 판독 포트로 통과된다. 제공될 각 오퍼랜드를 위해, 스케쥴러(280)는 스케쥴러 엔트리 또는 레지스터 화일(290)이 상기 오퍼랜드에 해당하는 오퍼랜드 버스(554)를 구동하는지를 결정하고; 그 결과 오퍼랜드는 상기 오퍼랜드 전송 단계 동안 상기 오퍼랜드 버스(554)를 경유하여 상기 실행 유니트로 전송된다.Each source operand carried in an execution unit comes from one of three possible sources: a scheduler entry, a register file 290, or a result bus of this execution unit or another execution unit. Operand transfer step 442 covers the transport from the entry. In particular, the register number for the desired operand is broadcast from the operation during the broadcast phase and passed to the appropriate read port of the register file 290. For each operand to be provided, the scheduler 280 determines whether the scheduler entry or register file 290 drives the operand bus 554 corresponding to the operand; As a result, the operand is transmitted to the execution unit via the operand bus 554 during the operand transmission step.

도 10에 도시되어 있듯이, 오퍼랜드 버스(554)는 멀피플렉서(1010)을 통해 실행 유니트(251 부터 254) 내의 오퍼랜드 입력 레지스터(1021 부터 1024 및 1031 부터 1034)과 결합한다. 실행 유니트(251 부터 254)로부터의 결과 버스(561 부터 564)도 멀티플렉서(1010)와 연결된다. 따라서, 5개의 "오퍼랜드" 버스가 각 실행 유니트의 각 오퍼랜드 입력으로 진행되는데, 주로 오퍼랜드 버스(554)중 하나가 스케쥴러(280) 또는 레지스터(290)로부터 더하기 실행 유니트(251 부터 254)로부터의 4개의 결과 버스 입력에 전용된다. 상기 오퍼랜드 전송 단계 동안에는, 스케쥴러(280)는 각 오퍼랜드 입력 레지스터에서 5:1 멀티플렉서(1010)용 선택 신호를 발생한다. 상기 오퍼랜드 상태 신호는 원하는 오퍼랜드 값이 실행 유니트에서 사용가능한지 또는 단지 사용가능하게 될 수 도 있는지를 나타내고; 만일 그렇다면, 실행 유니트(251 부터 254)로부터의 결과 버스 및 값 Result_XX 가 선택된다. 그렇지 않으면, 오퍼랜드 버스(554)가 선택된다. 오퍼랜드의 유효성은 오퍼랜드 포워드 단계(440)내의 관련된 동작이 실행 단계(450)에 앞서서 실행 유니트로 실제 들어가는지에만 영향을 미치는 독립 발행이다.As shown in FIG. 10, operand bus 554 couples with operand input registers 1021 through 1024 and 1031 through 1034 in execution units 251 through 254 via mulplexplexer 1010. Result buses 561 to 564 from execution units 251 to 254 are also coupled to multiplexer 1010. Thus, five "operland" buses go to each operand input of each execution unit, mainly one of the operand buses 554 from the scheduler 280 or register 290 plus four from the execution units 251 to 254. Dedicated to the result bus inputs. During the operand transfer phase, the scheduler 280 generates a select signal for the 5: 1 multiplexer 1010 in each operand input register. The operand status signal indicates whether the desired operand value may or may not be available in the execution unit; If so, the result bus and the value Result_XX from execution units 251 to 254 are selected. Otherwise, operand bus 554 is selected. The validity of the operand is an independent issue that only affects whether the associated action in operand forward step 440 actually enters the execution unit prior to execution step 450.

Ⅲ. B.3 변위 포워딩III. B.3 Displacement Forwarding

레지스터 오퍼랜드에 부가하여, 스케쥴러(280)는 변위 오퍼랜드를 인출하고 오퍼랜드 전송 단계(442) 동안 LU 및 SU 처리 파이프라인으로 포워드 시킨다. 로드 유니트(251) 및 저장 유니트(252)에는 각 각 3개의 입력 오퍼랜드 버스가 있다(두 개의 레지스터 버스(554) 및 하나의 변위 버스(555)). 변위 오퍼랜드는 32-비트 양이지만, 변위 오퍼랜드의 일부 바이트들은 정의되지 않기도 하여 실행 유니트(251,252)의 수정 동작 동안에 사용되지 않는다.In addition to the register operand, the scheduler 280 fetches the displacement operand and forwards it to the LU and SU processing pipeline during the operand transfer step 442. The load unit 251 and the storage unit 252 each have three input operand buses (two register buses 554 and one displacement bus 555). The displacement operand is a 32-bit quantity, but some bytes of the displacement operand are not defined and are not used during the modify operation of execution units 251 and 252.

스케쥴러(280)는 동작 레지스터 결과 값과 비슷한 방법으로 변위를 처리한다. 변위는 처음에는 엔트리의 32-비트 DestVal 필드 내부에 저장되어 사용되다가 상기 오퍼랜드 전송 단계(442) 동안 필요하면 변위 버스(555)상에서 구동된다. 변위는 항상 RISC86 동작의 중간 값이어서, 레지스터 화일(290)으로부터의 포워딩 변위 값으 발생하지 않는다. 필드 DestVal은 LdOps 및 몇 몇 StOps 로부터의 결과 값을위해 사용되기도 하지만, 필드 DestVal 의 두 개의 사용은 결과 값이 변위가 엔트리 밖으로 포워드 한 다음까지, 즉 오퍼랜드 포워드 단계(440) 전에는 스케쥴러 엔트리로 로드되지 않기 때문에 충돌하지 않는다.The scheduler 280 processes the displacement in a manner similar to the operation register result. The displacement is initially stored and used inside the 32-bit DestVal field of the entry and then driven on the displacement bus 555 if necessary during the operand transfer step 442. The displacement is always an intermediate value of RISC86 operation, so that no forwarding displacement value from register file 290 occurs. The field DestVal is also used for result values from LdOps and some StOps, but the two uses of the field DestVal do not load the result value into the scheduler entry until after the displacement forwards out of the entry, i.e. before operand forward step 440. Because it does not crash.

동가 내부에 특정된 작은(8-비트) 변위는 큰(16/32-비트) 변위와는 다르게 다루어진다. 동작 복호기(510) 사인은 상기 작은 변위가 로드되기 전에 상기 관련된 LdStOp 를 유지하는 엔트리의 DestVal 필드로 작은 변위를 확대시킨다. 큰 변위는 상기 변위를 사용하여 LdStOp 에 바로 선행하는 LIMMOp 를 위한 엔트리의 DestVal 필드 내에 저장될 것으로 여겨진다. 일반적으로, 상기 선행하는 엔트리는 상기 LIMMOp 가 발행되거나 실행되지 않도록 완료된 상태로 스케쥴러(280)로 로드될 수 있는 "LIMM t0,[disp]" 동작을 유지한다.Small (8-bit) displacements specified inside the equivalent are treated differently than large (16 / 32-bit) displacements. The motion decoder 510 sine expands the small displacement into the DestVal field of the entry that holds the associated LdStOp before the small displacement is loaded. Large displacements are believed to be stored in the DestVal field of the entry for LIMMOp immediately preceding LdStOp using the displacement. In general, the preceding entry maintains a " LIMM t0, [disp] " operation that can be loaded into the scheduler 280 with the LIMMOp being completed or not executed.

각 사이클이 스케쥴러 엔트리의 스캐닝을 요구하지 않는 동안 변위 버스(555)를 구동시키기 위해 DestVal 필드를 선택한다. 대신, 각 엔트리는 그의 구동기 또는 선행하는 구동기에게 DestVal 필드 값을 적절한 변위 버스(555)상으로 표명하게 할 수 있는지 여부를 그의 State 및 Type 필드로부터 결정한다. 첨부 B의 표 B.37 은 각 엔트리 내부의 상기 변위 버스 구동기를 사용가능하게 하는 로직이 요약되어 있다.Select the DestVal field to drive the displacement bus 555 while each cycle does not require scanning of the scheduler entry. Instead, each entry determines from its State and Type fields whether it can cause its driver or a preceding driver to assert the DestVal field value onto the appropriate displacement bus 555. Table B.37 in Appendix B summarizes the logic that enables the displacement bus driver inside each entry.

Ⅲ. B.4 중간 값 포워딩III. B.4 Median Forwarding

RISC86 동작의 포맷의 예에서, 중간 값은 RegOps 의 오퍼랜드 src2 이다. 스케쥴러(280)는 중간 값 및 변위 유사성을 다룬다. 삭이 RISC86 명령 세트는 단지 RegOps 내의 작은(8-비트) 중간 값만을 사용하고 동작 복호기(510)는 상기 RegOp 를 유지하는 엔트리의 필드 DestVal 내에 상기 중간 값을 저장한다. 따라서, 중간 값은 엔트리의 DestVal 필드내에 저장되 변위와 같지만, 레지스터 오퍼랜드 버스(554)(특히 RUXsrc2 및 RUYsrc2 오퍼랜드 버스)에 포워드되는 레지스터 오퍼랜드와 같다. Src2 오퍼랜드를 위한 중간 값은 레지스터 값 대신 오퍼랜드 포워드 단계(440)의 오퍼랜드 전송 단계(442) 동안 각 각의 레지스터 실행 유니트로 포워드 된다. 레지스터 값 소스(즉, 스케쥴러 엔트리 또는 레지스터 화일(290))의 선택은 금지되며, 질문내의 엔트리는 바로 그의 DestVal 필드를 상기 적절한 오퍼랜드 버스(554)로 구동시킨다.In the example of the format of the RISC86 operation, the intermediate value is the operand src2 of RegOps. Scheduler 280 deals with median values and displacement similarities. The Shak RISC86 instruction set uses only a small (8-bit) intermediate value in RegOps and the operation decoder 510 stores the intermediate value in the field DestVal of the entry holding RegOp. Thus, the intermediate value is stored in the DestVal field of the entry, equal to the displacement, but equal to the register operand forwarded to the register operand bus 554 (especially the RUXsrc2 and RUYsrc2 operand buses). The intermediate value for the Src2 operand is forwarded to each register execution unit during operand transfer step 442 of operand forward step 440 instead of the register value. The selection of a register value source (ie scheduler entry or register file 290) is prohibited and the entry in the query drives its DestVal field directly into the appropriate operand bus 554.

RUX/RUY src2 오퍼랜드 선택의 금지는 상기 RegOp 를 보유하는 엔트리가 보통 오퍼랜드 선택 스캔 체인내에 표명하는 단일-엔트리 발생 항을 마스크 함으로서 오퍼랜드 선택 단계(441)동안 수행된다. 이것은 RUXsrc2 및 RUYsrc2 를 위해 분리되어 그리고 독립적으로 행해지고 RUX/Ysrc2 스캔 체인에 의해 어느 엔트리의 선택을 금지한다. 중간 값을 포함하고 있는 엔트리도 레지스터 화일(290)을 상기 디폴트 오퍼랜드 소스로 선택하는 것을 막는다. 표 B.34 에 설명된 RUX 및 RUY 오퍼랜드 선택 스캔 체인을 위한 단일 엔트리 항은 상기 금지를 보이고 있다.The prohibition of RUX / RUY src2 operand selection is performed during operand selection step 441 by masking a single-entry occurrence term that the entry holding RegOp normally asserts in the operand selection scan chain. This is done separately and independently for RUXsrc2 and RUYsrc2 and prohibits the selection of any entry by the RUX / Ysrc2 scan chain. The entry containing the intermediate value also prevents selecting register file 290 as the default operand source. The single entry term for the RUX and RUY operand selection scan chains described in Table B.34 shows this prohibition.

각 사이클 동안 상기 RUXsrc2 및 RUYsrc2 오퍼랜드 버스로 구동시키기 위한 작은 "중간" DestVal 값의 선택은 스케쥴러 엔트리의 스캐닝을 요구하지는 않는다. 대신, 각 엔트리는 그의 DestVal 필드의 구동기가 상기 엔트리의 State 필드 및 관련된 비트에 기초하여 간단히 적절한 오퍼랜드 버스(554)로 사용가능하게 한다. 동일한 구동기가 레지스터 오퍼랜드 값 포워딩 및 중간값 오퍼랜드 포워딩을 위해 사용될 수 있다. 첨부 B 의 표 B.38 은 오퍼랜드 버스(554)상의 중간 값을 구동시키기 위한 회로를 설명하고 있다. 엔트리가 중간 값을 오퍼랜드 버스(554)상에 구동시킬 때, 관련된 오퍼랜드 상태 버스(553)도 구동시킨다. 레지스터 오퍼랜드를 위한 동일한 버스 구동기 및 구동기 입력 값이 중간 값을 위해 추가 항 없이 사용되는 것이 표 B.38 에 도시되어 있다.The selection of small "middle" DestVal values for driving into the RUXsrc2 and RUYsrc2 operand busses during each cycle does not require scanning of the scheduler entries. Instead, each entry allows the driver of its DestVal field to simply be available to the appropriate operand bus 554 based on the entry's State field and associated bits. The same driver can be used for register operand value forwarding and median operand forwarding. Table B.38 in Appendix B describes the circuit for driving the intermediate value on operand bus 554. When an entry drives an intermediate value on operand bus 554, the associated operand status bus 553 also drives. It is shown in Table B.38 that the same bus driver and driver input values for the register operands are used without additional terms for intermediate values.

Ⅲ. C 데이터 오퍼랜드 인출III. C data operand fetch

StOp 에는 세 개의 레지스터 소스 오퍼랜드가 있고 목적 레지스터는 없다. 반면에 다른 동작은 두 개의 소스 오퍼랜드 및 하나의 목적 까지 있어야 한다. StOp 용 세 번째 소스 오퍼랜드는 저장된 데이터를 제공하는데 본 명세서 에서는 데이터 오퍼랜드로 언급된다. 상기 데이터 오퍼랜드는 StOp 의 실행을 시작시킬 필요가 없지만 StOp 의 완료는 필요하다. 데이터 오퍼랜드의 인출은 다른 소스 오퍼랜드의 인출과 비슷한 방법으로 수행되지만, "정상적인" 오퍼랜드 인출 처리는 발행 단계(430) 및 오퍼랜드 포워드 단계(440) 동안 발생하고, 상기 데이터 오퍼랜드 인출처리는 SU 실행 단계(450,460) 동안 발생한다. 스케쥴러(280)는 SU 실행 단계(460) 동안 데이터 오퍼랜드의 사용가능성을 검사하고 만일 상기 데이터 오퍼랜드가 사용가능하지 않다면 단계(460) 내의 관련된 StOp 를 유지한다.StOp has three register source operands and no destination register. On the other hand, the other operation must be up to two source operands and one purpose. The third source operand for StOp provides stored data, referred to herein as a data operand. The data operand does not need to start running StOp but needs to complete StOp. The withdrawal of the data operands is performed in a similar manner to the withdrawal of other source operands, but the "normal" operand withdrawal processing occurs during the issue phase 430 and the operand forward phase 440, and the data operand index is the SU execution phase ( 450,460). Scheduler 280 checks the availability of the data operands during SU execution step 460 and maintains the associated StOp in step 460 if the data operands are not available.

상기 데이터 오퍼랜드 인출 처리는 두 가지 다른 원리를 가지고 앞서 설명한 발행 및 오퍼랜드 포워드 단계와 크게 비슷하다. 첫 번째로, 동작 선택 단계(456)는 발행 선택 단계(431) 동안 발생하는 여러 후보들 간을 선택하기 위한 스케쥴러 오퍼랜드의 스캔을 필요로 하지 않는다. 대신, SU 단계(450)에서 상기 StOp 와 관련된 엔트리는 State 및 Type 필드와 자신을 식별하고 필요한 경우 저장 유니트(252)로 상기 데이터 오퍼랜드를 제공한다. 두 번째 차이는 상기 StOp 의 OpInfo 필드가 상기 데이터 오퍼랜드를 위한 방송 단계(457) 동안 저장 유니트(252)로 판독될(다시) 필요가 없다는 것이다. 대신, 저장 유니트(252)는 상기 StOp 가 발행되는 때로부터 상기 OpInfo 값을 유지하고 사용한다. 상기 SU 발행 단계(430) 동안 판독된 상기 OpInfo 값은 오퍼랜드 포워드 단계 및 SU 파이프라인의 제1 및 제2 실행 단계를 통해 아래로 통과된다.The data operand withdrawal process has two different principles and is very similar to the publish and operand forward steps described above. First, the operation selection step 456 does not require a scan of the scheduler operand to select between the various candidates that occur during the issue selection step 431. Instead, an entry associated with the StOp in SU step 450 identifies the State and Type fields and themselves and provides the data operands to storage unit 252 as needed. The second difference is that the OpInfo field of the StOp does not need to be read (again) into the storage unit 252 during the broadcast step 457 for the data operand. Instead, storage unit 252 maintains and uses the OpInfo value from when the StOp is issued. The OpInfo value read during the SU issue step 430 is passed down through the operand forward step and the first and second execution steps of the SU pipeline.

첨부 B 의 표 B.39 는 데이터 오퍼랜드 선택 및 포워딩을 위해 발생된 신호를 설명하고 있다.Table B.39 in Appendix B describes the signals generated for data operand selection and forwarding.

Ⅲ. D 레지스터 동작 충돌III. D register operation conflict

스케쥴러(280)는 주문 발행 선택 및 각 동작 타입용 처리에 기초하여 상기 실행 파이프라인을 관리한다. 상기 동작이 발행된 주문의 파이프라인으로 진행된 실행 유니트로 "정상적인" 동작이 발행된다. 동작이 SU 및 LU 파이프라인의 오퍼랜드 포워드 단계내에 정치되면, 예를들어 그 파이프로 발행을 위해 현재 선택되고 있는 동작도 동작이 처리 파이프라인 내부에 서로에 의해 통과되지 않기 때문에 정체된다. 그러나, RegOp 가 하나 또는 그 이상의 사용불가능한 오퍼랜드 값에 기인한 레지스터 유니트(253) 또는 레지스터 유니트(254) 중 하나의 오퍼랜드 포워드 단계내에 정체되면, RegOp 는 상기 처리 파이프 밖에 충돌할 수 도 있을 것이고 상기 미발행된 상태로 되돌아 가기도 할 것이다. 충돌은 상기 RegOp 의 State 필드를 b0000 으로 되돌아가게 설정한다. RegOp 가 오퍼랜드 포워드 단계(440) 밖에서 충돌하면, 그 레지스터로 발행을 위해 선택된 다른 RegOp 가 오퍼랜드 포워드 단계(440)에 앞서게 되고, 즉시 상기 충돌된 RegOp 를 대신하게 된다. 동시에, 상기 충돌한 RegOp 는 레지스터 유니트로 재발행될 자격을 얻지만, 같은 레지스터 유니트를 필요로 하지는 않는다.Scheduler 280 manages the execution pipeline based on order issuance selection and processing for each operation type. The "normal" operation is issued to the execution unit proceeding to the pipeline of the order in which the operation was issued. If an operation is left within the operand forward phases of the SU and LU pipelines, then the actions currently being selected for publication to that pipe, for example, are stagnant because the operations are not passed by each other within the processing pipeline. However, if RegOp stalls within an operand forward step of either register unit 253 or register unit 254 due to one or more unusable operand values, RegOp may crash outside the processing pipe and the unissued It will go back to the previous state. The conflict sets the RegOp's State field back to b0000. If RegOp collides outside operand forward step 440, then another RegOp selected for publication to that register precedes operand forward step 440 and immediately replaces the conflicting RegOp. At the same time, the conflicting RegOp is entitled to be reissued to a register unit, but does not require the same register unit.

충돌은 다음의 목적에 따라 모든 RegOp 에 적용가능하다. 먼저, RUX-only RegOp(RUX 오퍼랜드 포워드 단계 내)는 RUX-only RegOp 가 현재 충돌이 RUX-only RegOp 가 서로에 대해 주문으로 실행되는 제한을 위반하기 때문에 RUX 로의 발행을 위해 선택된다면 충돌하지 않는다. 두 번째로, RegOp 는 상기 RegOp 가 한 사이클 이상에서 스톨(stall)되는 경우 충돌 될 뿐, 그렇지 않으면 오퍼랜드 포워드 단계(440) 내의 상기 RegOp 를 떠나는 것은 실행 유니트 자원을 더욱 효과적으로 사용하는 것이 된다. 표 B.12 는 RegOp 충돌을 수행하기위해 엔트리의 State 필드를 변경시키는 회로를 설명하고 있다. 광역 제어 로직(520)은 신호 RUXAdv0 및 RUYAdv0의 강제 표명을 하는 광역 충돌 신호 BumpRUX 및 BumpRUY 를 발행하여 적절하게 발행된 RegOp 가 오퍼랜드 포워드 단계(440)을 앞서게 한다. 아래의 광역 제어 로직(520)의 설명은 RegOp 의 충돌하에서의 상태를 더 나타내고 있다.Conflicts are applicable to all RegOps for the following purposes: First, RUX-only RegOp (in the RUX operand forward phase) does not crash if RUX-only RegOp is selected for publication to RUX because the current conflict violates the restriction that RUX-only RegOp is executed on demand against each other. Secondly, RegOp only collides when RegOp stalls in more than one cycle, otherwise leaving the RegOp in operand forward step 440 results in more efficient use of execution unit resources. Table B.12 describes the circuit that changes the State field of an entry to perform a RegOp conflict. The wide area control logic 520 issues the wide area collision signals BumpRUX and BumpRUY forcing assertion of the signals RUXAdv0 and RUYAdv0 so that the properly issued RegOp precedes the operand forward step 440. The description of global control logic 520 below further illustrates the state under the collision of RegOp.

Ⅲ. E 로드/저장 주문III. E Load / Save Order

스케쥴러(280)는 LdOps 와 StOps 간의 필요한 주문 유지를 공급한다. 특히, 로드-저장 주문 로직(534)는 로드의 메모리 독립성을 공급하고 선택된 LdOps 및 StOps 의 상대적 나이를 나타냄으로서 저장한다. 만일 LdOp 또는 StOp가 아직 완료되지 않은 더 오래된 StOp 또는 LdOp 와 같은 어드레스를 액세스 할 가능성이 있다면, LU 및 SU 실행 파이프라인의 실행 단계(460)내의 동작을 유지하는 것이 적절한 로드-저장 주문을 유지하는 것이 된다.Scheduler 280 supplies the necessary order maintenance between LdOps and StOps. In particular, load-store order logic 534 stores the memory independence of the load and stores it by indicating the relative ages of the selected LdOps and StOps. If the LdOp or StOp is likely to access an address such as an older StOp or LdOp that has not yet completed, maintaining operation within the execution stage 460 of the LU and SU execution pipeline will maintain appropriate load-storage orders. It becomes.

로드 및 저장 유니트(251,252)에는 어드레스 비교기가 포함되어 있으며, 스케쥴러(280) 내의 주문 로직(534)는 버스(556)상에 단지 적절한 어드레스 비교가 상기 제2 실행 단계(460)내의 LdOp 또는 StOp 를 유지할지를 결정할 때 고려되도록 상기 LdStOp 의 상대적 나이를 나타내는 정보를 제공한다. 상대적 나이 결정 처리는 발행 선택/오퍼랜드 정보 방송 처리와 비슷하다. LdOp 및 StOp 를 위한 실행 단계(460)의 첫 번째 단계(463) 동안, 주문 로직(534)는 가장 오래된 것부터 가장 새로운 것 까지 모든 스케쥴러 엔트리를 스캔하는 5개의 "전파-제거" 스캔을 수행한다. 두 스캔은 SU 단계(460)내의 LdOp 와 StOp 를 비교하고, 세 스캔은 LU 단계(460) 내의 StOp 와 LdOp 를 비교한다. 두 번째 단계(464) 동안, 실행 단계(460)내의 상기 LdOp 및/또는 StOp 용 엔트리는 관련된 둘 또는 세개의 스캔 체인 결과를 샘플하고 버스(556)상에 원하는 상대 나이 정보를 바로 나타내는 광역 신호 SC_SU2OLDER, SC_SU1OLDER, SC_SU0OLDER SC_LU2OLDER 및 SC_LU1OLDER 를 구동시킨다.The load and storage units 251 and 252 include an address comparator, and the ordering logic 534 in the scheduler 280 allows only an appropriate address comparison on the bus 556 to perform LdOp or StOp in the second execution step 460. Provides information indicating the relative age of the LdStOp to be taken into consideration when determining whether to keep. The relative age determination process is similar to the issue selection / operland information broadcast process. During the first step 463 of execution step 460 for LdOp and StOp, order logic 534 performs five "propagation-removal" scans that scan all scheduler entries from the oldest to the newest. Two scans compare LdOp and StOp in SU stage 460, and three scans compare StOp and LdOp in LU stage 460. During the second step 464, the entry for LdOp and / or StOp in the execution step 460 samples the widespread signal SC_SU2OLDER, which samples the relevant two or three scan chain results and directly represents the desired relative age information on the bus 556. , SC_SU1OLDER, SC_SU0OLDER Drives SC_LU2OLDER and SC_LU1OLDER.

실행 단계(460) 또는 단계(450) 내의 LdOp 및 잘못배열된 로드의 두 번째 절반의 수행은 세 스캔 체인을 필요로 하여 StOp 의 세 카테고리오의 LdOp 의 상대적 나이를 결정한다. 각 스캔 체인은 카테고리 내의 가장 오래된 StOp 를 위해 스캔한다. 하나의 스캔 체인은 단계(460) 또는 단계(450) 내의 StOp 를 검출하고 잘못 배열된 저장의 두 번째 절반을 수행한다. 다른 스캔 체인은 단계(450) 내의 StOp 를 검출하고, 세 스캔 체인은 단계(450)내에 아직 가장 오래되지 않은 StOp 를 검출한다. 상기 스캔 체인 내의 어느 지점에서의 스캔 비트의 상태는 주어진 타입의 오래된 StOp 가 아직 발견되지 않았는지에 영향을 미친다. 따라서, LdOp 용 엔트리는 입력 스캔 비트로부터 주어진 카테고리내의 어느 StOp 에 관한 LdOp 의 나이를 결정한다. 만일 상기 입력 스캔 비트 Cin 이 "1" 이라면, 상기 스캔 신호는 아직 "제거" 되지 않고, 주어진 카테고리에 더 오래된 StOp 는 존재하지 않게 된다. 로드-저장 주문 로직(534)은, 필요하다면, 상기 어드레스 비교기로부터의 신호의 관련을 결정한다.Execution of the second half of LdOp and misaligned load in execution step 460 or 450 requires three scan chains to determine the relative age of the three categories of LdOp of StOp. Each scan chain scans for the oldest StOp in the category. One scan chain detects StOp in step 460 or 450 and performs the second half of misaligned storage. The other scan chain detects StOp in step 450, and the three scan chains detect StOp not yet the oldest in step 450. The state of the scan bit at any point in the scan chain affects whether an old StOp of a given type has not yet been found. Thus, the entry for LdOp determines the age of LdOp for any StOp in a given category from the input scan bits. If the input scan bit Cin is "1", the scan signal is not yet "removed" and there is no older StOp in a given category. Load-store order logic 534 determines the association of the signal from the address comparator, if necessary.

스테이지(460) 또는 스테이지(450)에서 잘못 정렬된 저장의 제 2 반부분을 수행하는 StOp는 LdOp의 2 범주와 관련하여 그 경시를 결정하기 위해 2 스캔 체인을 요구한다. 하나의 스캔 체인은 스테이지(460) 또는 스테이지(450)에서 잘못 정렬된 저장의 제 2 반부분을 수행하는 어떠한 StOp를 검출한다. 제 2 스캔 체인은 스테이지(460)에서 아직 검출되지 않은 어떠한 LdOps를 검출한다. 질의내에 StOp를 유지하는 엔트리로의 입력 스캔 비트 Cin에 기초하여, 순서 논리(534)는 주소 비교기로부터의 신호들이 관련되는지를 결정한다.StOp, which performs the second half of misaligned storage at stage 460 or stage 450, requires two scan chains to determine its downtime with respect to the two categories of LdOp. One scan chain detects any StOp that performs a second half of misaligned storage in stage 460 or stage 450. The second scan chain detects any LdOps that have not yet been detected at stage 460. Based on the input scan bit Cin into the entry that holds StOp in the query, the order logic 534 determines whether the signals from the address comparator are related.

각각의 스캔 체인은 가장 오래된 것부터 가장 최근의 스케쥴러 엔트리로의전파-킬 체인이다. 부록 B의 표 B.40 및 미국 특허 출원 제 08/592,209 호에 로드-저장 순서에 대해 기술하고 있다.Each scan chain is a propagation- kill chain from the oldest to the most recent scheduler entry. The load-storing sequence is described in Table B.40 of Appendix B and US Patent Application No. 08 / 592,209.

F. 중단 처리F. Suspension Processing

포기 사이클이 발생하는 경우, 스케쥴러(280)는 활성화된다. 모든 Op quad는 모든 Op quad 필드 OpQV를 클리어하므로써 유효하지 않게 되고, 엔트리의 필드 또한 무해한 값으로 세트된다. 필드 OpQV가 Op Quad 로딩 및 시프팅의 제어에만 영향을 미치고, 스케쥴러(280)내 다른 연산은 필드 OpQV를 무시하며, 엔트리가 유효한 것으로 가정하기 때문에 엔트리내 필드는 클리어되어야만 한다. 논리적으로 유효하지 않은 스케쥴러(280)내 연산은 유효하지만 무해한 연산으로 변경된다. 이것을 수행하기 위해, 연산의 State 필드는 완료된 것으로 세트되어, 연산이 이슈되거나 실행되지 않을 것이다. DestBM 및 StatMod 필드는 연산이 어떠한 레지스터 바이트나 상태 플래그를 수정하지 않는 것을 나타내도록 세트된다. 이러한 환경에서, 모든 다른 필드는 어떠한손상을 일으키지 않는 어떤 값을 가질 수 있다. 그러한 연산이 효과적인 No-op 연산이다.When the abandon cycle occurs, the scheduler 280 is activated. All Op quads become invalid by clearing all Op quad fields OpQV, and the fields of the entry are also set to harmless values. The field in the entry must be cleared because the field OpQV only affects the control of the Op Quad loading and shifting, other operations in the scheduler 280 ignore the field OpQV, and assume the entry is valid. Operations in scheduler 280 that are not logically valid are changed to valid but harmless operations. To do this, the State field of the operation is set to complete so that the operation will not be issued or executed. The DestBM and StatMod fields are set to indicate that the operation does not modify any register byte or status flag. In such circumstances, all other fields may have some value that does not cause any damage . Such an operation is an effective no-op operation.

새로운 Op quad는 스케쥴러(280)가 활성화되자마자 스케쥴러(280)내로 로드될 수 있다. 새로운 Op quad는 활성화될 필요가 없는 어떠한 Op quad와 관련되지 않는다. 대신, 그것은 포기에 논리적으로 새로운 제 1 Op quad가 된다. 이것은 포기된 또는 잘못 예언된 BRCOND 후에 발생된다. 포기 사이클 후에 새로운 제 1 Op quad은 제외 조건으로 인해 지연된다.The new Op quad can be loaded into the scheduler 280 as soon as the scheduler 280 is activated. The new op quad is not associated with any op quad that does not need to be activated. Instead, it becomes a logically new first op quad after giving up. This occurs after abandoned or mispredicted BRCOND. After the abandon cycle, the new first op quad is delayed due to the exclusion condition.

효과적으로, 다음의 상황 시퀀스가 포기 사이클의 끝에서 발생한다. 스케쥴러(280)내 저장 소자가 시스템 클럭 신호와 전체적으로 동기화되고, 다음 사이클 경계까지 입력에 응하여 상태를 변경시키지 않는다는 것을 주목해야 한다. 먼저, 필드 OpQV, State, DestBM, 및 StatMod에서의 변경은 상기한 바와 같이 발생한다. 그러면, Op quad의 모두 또는 일부가 하나의 위치로 시프트하거나, 또는 아무것도 하나의 위치로 시프트하지 않고, 새로운 Op quad는 최상의 스케쥴러 엔트리 위치로 로드된다. 제외 관련 포기에서, 새로운 Op quad는 또한 무효화되고, 모든 스케쥴러 Op quad가 활성화되기 때문에 발생하는 시프팅은 모두 일반적으로 무시된다. BRCOND 관련 포기에서, 새로운 Op quad는 유효하거나 또는 비어 있다.Effectively, the following sequence of events occurs at the end of the abandon cycle. Note that the storage elements in scheduler 280 are globally synchronized with the system clock signal and do not change state in response to input until the next cycle boundary. First, changes in the fields OpQV, State, DestBM, and StatMod occur as described above. The new Op quad is then loaded with the best scheduler entry position, with all or some of the Op quads shifting to one position or nothing shifting to one position. In the exclusion-related waiver, the new op quad is also invalidated, and any shifting that occurs because all scheduler op quads are active is generally ignored. In the BRCOND related disclaimer, the new Op quad is valid or empty.

포기 신호는어얼리레이트의 2개 변형으로 나타난다. 어얼리 변형은 SC_EAbort로 불리우고, 레이트 변형은 SC_Abort로 불리운다. 어얼리 포기 신호는 즉각적인 포기 확인을 요구하는 스케쥴러(280)의 섹션으로 전송된다. 레이트 변형은 어얼리와 동일하지만, 플립플롭에서 한 사이클 지연되고 좀더 폭넓게 전송된다.Abandonment signal appears in two variations, early and rate . Early deformation is called SC_EAbort, and rate deformation is called SC_Abort. The early abandon signal is sent to a section of the scheduler 280 that requires immediate abandon confirmation. Rate variation is the same as early, but one cycle delay in flip-flops and is transmitted more widely.

Ⅳ. 광역 제어 로직Ⅳ. Wide Area Control Logic

각각의 엔트리와 관련된 논리에 추가로, 스케쥴러(280)는 스케쥴러(280)를 전체적으로 제어하는 논리를 포함한다.In addition to the logic associated with each entry, the scheduler 280 includes logic that controls the scheduler 280 as a whole.

A. 외부 로직에 의해 사용된 스케쥴러 정보A. Scheduler Information Used by External Logic

글로벌 제어 논리(520) 및 실행 유닛(251,254)과 같은 외부 논리는 오퍼랜드 값을 추출하는 방송 및 오퍼랜드 전송 단계동안 스케쥴러(280)에 의해 제공된 다수의 정보를 사용한다. 대부분의 오퍼랜드 타입에서, 방송 및 오퍼랜드 전송 단계는 실행 파이프라인의 이슈 및 오퍼랜드 전송 스테이지 동안 있게 된다. 방송 단계동안, 그 오퍼랜드가 추출되는 연산에 관한 정보는 적절한 OpInfo 버스(551)상에서 읽혀지고; 연산의 2 소스 레지스터(Src1,Src2) 및 바이트 표시(Src1BM, Src2BM) 필드는 2개 관련된 OprndInfo 버스(552)상에서 읽혀진다. StOps의 데이터 오퍼랜드에서, 방송 단계 및 오퍼랜드 전송 단계는 SU 스테이지(450,460)에 있게 된다. StOp의 데이터 오퍼랜드의 정보는 관련된 OprndInfo 버스(552)상으로 구동되지만, 관련된 OpInfo는 없다. 저장 유닛(252)은 StOp가 이슈된 경우 연산 정보를 존속시킨다. 방송 오퍼랜드 정보는 다음 2 단계동안 사용된다. 연산 정보는 실행 유닛에서 파이프라인 아래로 간단하게 통과한다. 레지스터 유닛(253,254)의 경우에서, OprndInfo 버스(552)로부터의 2 소스 바이트 마크 Src1BM 및 Src2BM 비트 또한 파이프라인 아래로 통과한다. 오퍼랜드 전송 단계동안, 오퍼랜드 값의 소스가 되는 연산 각각에 관한 정보는 각각의 오퍼랜드 버스(554)와 관련된 OprndStat 버스(553)상에서 읽혀진다. 소스 연산의 상태를 설명하는 정보는 이 단계동안 직접적으로(단지) 사용된다. 표 B.41는 여러 시각에서 스케쥴러(280)에서 읽혀진 정보를 요약하고 있다.External logic, such as global control logic 520 and execution units 251, 254, uses a number of information provided by scheduler 280 during the broadcast and operand transmission phase of extracting operand values. For most operand types, the broadcast and operand transfer stages will be during the issue and operand transfer stages of the execution pipeline. During the broadcast phase, information about the operation from which the operand is extracted is read on the appropriate OpInfo bus 551; The two source registers (Src1, Src2) and byte representation (Src1BM, Src2BM) fields of the operation are read on two related OprndInfo buses 552. In the data operand of StOps, the broadcast phase and the operand transmission phase are at the SU stages 450,460. The information of the StOp's data operands is driven onto the associated OprndInfo bus 552, but there is no associated OpInfo. The storage unit 252 persists the operation information when StOp is issued. Broadcast operand information is used during the next two steps. Operation information simply passes down the pipeline in the execution unit. In the case of register units 253 and 254, the two source byte mark Src1BM and Src2BM bits from OprndInfo bus 552 also pass down the pipeline. During the operand transfer phase, information about each operation that is the source of the operand value is read on the OprndStat bus 553 associated with each operand bus 554. Information describing the state of the source operation is used directly (only) during this step. Table B.41 summarizes the information read from scheduler 280 at various times.

B. 광역 제어 기능B. Wide area control function

앞서 스케쥴러(280)의 코어를 구비하는 논리, 저장 소자, 및 버스를 설명한다. 스케쥴러(280)는 또한 스케쥴러(280)내에서의 시프팅을 조정하고 실행 유닛(251 내지 254)으로의 연산 및 오퍼랜드의공급을 조정하는 글로벌 제어 논리(520)를 포함한다. 다음에서는 오퍼랜드 추출 프로세스의 4단계에서 글로벌 제어 논리(520)의 피스를 설명한다.The logic, storage elements, and buses having the core of the scheduler 280 are described above. Scheduler 280 also includes global control logic 520 that coordinates shifting within scheduler 280 and coordinates the operation and supply of operands to execution units 251-254. The following describes the piece of global control logic 520 in step 4 of the operand extraction process.

이슈 선택 단계동안, 외부적인 관심은 연산이 각각의 프로세싱 파이프라인으로의 이슈를 위해 선택되었는지의 여부뿐이다. 적절한 연산을 발견하지 않은 각각의 이슈 선택에서, 어떠한 스케쥴러 엔트리도 대응하는 OpInfo 및 OprndInfo 버스(551,552)를 구동하지 않는다. 이러한 프로세싱 파이프라인동안의 다음의 3 단계 및 이들 버스상의 값은 고려되지 않는다. 유일한 요구는 실행 파이프라인의 오퍼랜드 전송 스테이지(440)를 위한 연산 유효 비트(OpV)가 이 파이프라인 스테이지에서 오퍼랜드 전송 스테이지(440)가 비었다는 것을 나타내기 위해 제로가 된다는 것이다.During the issue selection phase, the external concern is only whether an operation has been selected for the issue into each processing pipeline. In each issue selection that did not find a suitable operation, no scheduler entry drives the corresponding OpInfo and OprndInfo buses 551,552. The next three stages during this processing pipeline and the values on these buses are not taken into account. The only requirement is that the operation valid bit (OpV) for the operand transfer stage 440 of the execution pipeline is zero to indicate that the operand transfer stage 440 is empty in this pipeline stage.

오퍼랜드 전송 단계 연산 유효(OpV) 비트는 유효한 연산이 연산 유닛으로 이슈되는지를 나타낸다. 각각의 이슈 선택 스캔 체인의 출력 스캔 비트 Cout는 이슈 스테이지에서 연산을 위한 OpV 비트를 생성한다. 표 B.42는 연산 유효 비트 또는 OpV 비트를 설명하고 있다. 글로벌 신호 XXAdv0는 비어있는 연산의 진행을 따르기 위해 파이프라인 레지스터로 OpV 비트를 로드하는 것을 제어한다. 포기 사이클동안, 모든 파이프라인 레지스터는 실행 유닛을 활성화하기 위해 비조건부로 클리어된다.The operand transfer step operation valid (OpV) bit indicates whether a valid operation is issued to the operation unit. The output scan bit Cout of each issue select scan chain generates an OpV bit for operation in the issue stage. Table B.42 describes the operation valid bits or the OpV bits. The global signal XXAdv0 controls loading the OpV bit into the pipeline register to follow the progress of an empty operation. During the abandon cycle, all pipeline registers are unconditionally cleared to activate the execution unit.

방송 위상은 스케쥴러(280)로부터 판독한 정보(즉 OprndInfo 및 OpInfo 값)를 래치하는 파이프라인 레지스터를 제어하기 위한 것 이외에 다른 중요한 글로벌 제어 논리를 필요로 하지 않는다.The broadcast phase does not require any significant global control logic other than to control the pipeline registers latching the information read from the scheduler 280 (ie, OprndInfo and OpInfo values).

선회 선택 위상동안, 두 개의 외부 활동이 일어난다. 첫째로, 선행 위상동안 판독된 소스 레지스터 넘버(즉, 래치된 OprndInfo 값의 SrcYReg 필드)가 레지스터 파일(290)에 접근하기 위해 사용된다. 이는 스케쥴러(280)내의 선회 선택 스캔과 평행하게 실행된다. 9 소스 오퍼랜드까지가 각 사이클에 보내질 수 있다. 따라서, 레지스터 파일(290)은 9개의 대응 판독 포트를 구비하고, 각각은 오퍼랜드 버스(554)의 어느 하나와 관련된다. 이들 포트에 나타나는 레지스터 필드는 XXsrcY 및 SUsrcSt이고, 여기서 XX={LU,SU,RUX,RUY} 및 Y={1,2}이다.During the swing select phase, two external activities occur. First, the source register number (ie, the SrcYReg field of the latched OprndInfo value) read during the preceding phase is used to access the register file 290. This is done in parallel with the swing select scan in scheduler 280. Up to 9 source operands can be sent in each cycle. Thus, register file 290 has nine corresponding read ports, each associated with any one of operand bus 554. The register fields that appear in these ports are XXsrcY and SUsrcSt, where XX = {LU, SU, RUX, RUY} and Y = {1,2}.

오퍼랜드 선택 위상동안, 각 오퍼랜드 버스(554) 및 오퍼랜드 정보 버스(552)용으로 두 번째 외부 활동이 선택되고, 여기서 스케쥴러(280) 또는 레지스터 파일(290)은 다음 위상동안의 값을 제공할 것이다. 각 스케쥴러 엔트리는 직접 자신이 버스를 구동해야만 하는지 아닌지를 결정하여, 글로벌 제어 논리(550)는 단지 레지스터 파일(290)이 가능한지에 대하여 결정한다. 레지스터 파일(290)을 가능하게 하는 것은 어느 엔트리가 오퍼랜드 선택 위상동안 선택되었지 지시하는 출력 스캔 비트(Cout)에 기초한다. 오퍼랜드 선택 스캔 체인동안 최종 스캔신호 Cout가 관련 오퍼랜드 버스(554)용으로 엔트리가 없음을 지시하면, 글로벌 제어 논리는 레지스터 파일(290)이 관련 오퍼랜드 버스(554) 및 오퍼랜드 정보 버스(552)를 구동한다. 오퍼랜드 버스(554)상의 신호를 나타내는 방정식은 부록 B의 표 B. 35 및 표 B.36에 기재되었다.During the operand selection phase, a second external activity is selected for each operand bus 554 and operand information bus 552, where the scheduler 280 or register file 290 will provide values for the next phase. Each scheduler entry directly determines whether or not it must drive the bus, so that global control logic 550 only determines if register file 290 is possible. Enabling the register file 290 is based on an output scan bit Cout indicating which entry was selected during the operand select phase. If the last scan signal Cout during the operand select scan chain indicates that there is no entry for the associated operand bus 554, the global control logic causes the register file 290 to drive the associated operand bus 554 and operand information bus 552. do. Equations representing signals on operand bus 554 are described in Table B. 35 and Table B.36 of Appendix B.

오퍼랜드 전송 페이즈동안, 글로벌 제어 논리(520)는 : RegOp "범핑", 실행유닛의 모든 실행 유닛 입력 멀티플렉서(1010), 인출될 각 오퍼랜드 값용의 타당성 결정, 및 글로벌 파이프라인 레지스터 제어신호(XXAdvO)의 생성 인자인 신호 HoldXXO의 생성을 제어한다.During the operand transfer phase, the global control logic 520 includes: RegOp "bumping", all execution unit input multiplexers 1010 of the execution unit, validity determination for each operand value to be fetched, and the global pipeline register control signal (XXAdvO). Controls the generation of the signal HoldXXO, which is a generation factor.

하나의 RegOp 범핑의 실행은, 엔트리의 스테이트 필드를 변화시키는 각 스케쥴러 엔트리내의 논리, 및 글로벌 범프 신호 BumpRUX 및 BumpRUY 신호를 생성하고 신호 RUXAdvl 및 RUYAdvl 신호의 확인을 강제하는 글로벌 제어 논리(520)간의 분리이다. BumpRUX/Y 신호의 생성은 오퍼랜드 전송 페이즈동안 각 레지스터 유닛 소스 오퍼랜드(즉, OprndStat_RUXsrcY 및 OprndStat_RUYsrcY, 여기서 srcY={src1,src2})스케쥴러(280)로부터 판독된 OprndStat 값이다. 특히, 각 오퍼랜드 소스용 필드 스테이트 및 타이프는 시험되어 소싱오퍼레이션이 타당한 오퍼랜드 값의 제공으로부터 벗어난 적어도 두 개의 사이클인지 결정한다. 소싱오퍼레이션이 타당한 오퍼랜드값의 제공으로부터 벗어난 적어도 두 개의 사이클이라면, 종속 RegOp는 오퍼랜드 포워드 단계로부터 범프된다. RegOp가 오퍼랜드 포워드 단계에 도달되지 않았으면, RegOp는 오퍼랜드를 제공하는 것으로부터 벗어난 적어도 두 개의 사이클이다. LdOp가 첫 번째 실행단계까지 도달되지 않았으면, LdOp는 오퍼랜드의 제공으로부터 벗어난 적어도 두 개의 사이클이다.Execution of one RegOp bump separates the logic in each scheduler entry that changes the state field of the entry, and the global control logic 520, which generates the global bump signal BumpRUX and BumpRUY signals and forces confirmation of the signals RUXAdvl and RUYAdvl signals. to be. The generation of the BumpRUX / Y signal is the OprndStat value read from each register unit source operand (ie, OprndStat_RUXsrcY and OprndStat_RUYsrcY, where srcY = {src1, src2}) scheduler 280 during the operand transfer phase. In particular, the field state and type for each operand source is tested to determine if the sourcing operation is at least two cycles away from providing a valid operand value. If the sourcing operation is at least two cycles away from providing a valid operand value, the subordinate RegOp is bumped from the operand forward step. If RegOp has not reached the operand forward step, RegOp is at least two cycles away from providing the operand. If LdOp has not been reached by the first execution step, LdOp is at least two cycles away from the provision of the operand.

표 B.43은 신호 BumpRUX/Y의 생성을 요약한 것으로, 데드락 상황이 될 수있는 부가적인 타임아웃 기간을 포함한다. RUX 및 RUY 오퍼랜드 포워드 스테이지와 관련된 3-비트 카운터는 오퍼레이션이 오퍼랜드 포워드 스테이지 동안 타임아웃 기간 이상으로 홀드된 후 신호 RUX/Y 타임아웃을 생성한다. RUX를 예로 들면, RUX 오퍼랜드 포워드 스테이지가 로딩될 때마다(유효한 또는 유효하지 않은 오퍼레이션인지에 관계없이), 관련된 카운터는 시작 값으로 리셋된다. 다른 모든 사이클동안, 카운터는 감소된다. 카운터가 000에 도달하면, RUX 타임아웃이 확인되어 오퍼레이션이 너무 오랫동안 홀드되었음을 나타낸다.Table B.43 summarizes the generation of the signal BumpRUX / Y, which includes additional timeout periods that can result in deadlock situations. The 3-bit counter associated with the RUX and RUY operand forward stages generates a signal RUX / Y timeout after the operation is held above the timeout period during the operand forward stage. Taking RUX as an example, each time the RUX operand forward stage is loaded (whether it is a valid or invalid operation), the associated counter is reset to the starting value. During all other cycles, the counter is decremented. When the counter reaches 000, the RUX timeout is checked to indicate that the operation has been held for too long.

RUX/Y 타임아웃 신호는 레지스터 유닛(253,254)의 오퍼랜드 포워드 스테이지용으로 대응 오퍼레이션 신호 OpV가 세팅되도록 한다. 예를 들면, 신호 RUX 타임아웃은 즉시 신호 OpV_RUX_0가 0이 되도록 하고, 그리고 나서 파이프 라인 제어 신호 RUXAdv0의 어서션이 RUX 오퍼랜드 포워드 스테이지를 재로드 하도록 한다. 신호 OpV _RUX_0는 신호 RUXAdv1이 또한 어서트되면 RUX 실행 스테이지(450)가 충돌된 RegOp를 만나지 않도록 보증한다.The RUX / Y timeout signal causes the corresponding operation signal OpV to be set for the operand forward stage of the register units 253 and 254. For example, the signal RUX timeout immediately causes the signal OpV_RUX_0 to be zero, and then causes the assertion of the pipeline control signal RUXAdv0 to reload the RUX operand forward stage. Signal OpV_RUX_0 ensures that RUX execution stage 450 does not encounter a conflicting RegOp if signal RUXAdv1 is also asserted.

오퍼랜드 트랜스퍼 페이지동안 일어나는 두 번째 글로벌 제어 기능은 실행 유닛(251-254)에 연결된 각 소스 오퍼랜드 입력 멀티플렉서(1010)용의 제어 신호의 생성이다. 위에서 설명한 바와같이, 각 5:1 멀티플렉서(1010)는 오퍼랜드를 관련 오퍼랜드 버스(554) 또는 오퍼랜드 버스(561-564)중의 하나로부터 선택하여 관련 오퍼랜드 레지스트(1021-1024) 또는 (1031-1034)중의 어느 하나로 로드한다. 오퍼랜드 트랜스퍼 페이즈(442)동안, 제어 논리(520)는 오퍼랜드 상태 신호 OprndStat를 버스(553)으로부터 사용하여 각 멀티플렉서(1010)용 제어신호를 생성하고 오퍼랜드 OprndStat_SUsrcSt 및 OprndStat_XXsrcY를 선택하고, 여기서 XX={LU,ST,RUX,RUY} 및 Y={1,2}는 오퍼랜드 레지스터내로 로드된다. 특히, 글로벌 제어 논리(520)는 각 오퍼랜드 소스용 필드 스테이트 및 형태를 시험하여 소싱 오퍼레이션이 실행을 완료하고 만약 완료되지 않았다면 어느 실행 유닛이 소싱 오퍼레이션을 실행하는지 결정한다. 오퍼랜드 버스(554)는 소스가 레지스터 파일(290), 완료된 오퍼레이션, 또는 src2 인접한 값을 그 자신에 제공하는 오퍼레이션인 경우 선택된다. 그렇지 않다면, 소싱 오퍼레이션의 형태에 대응하는 실행 유닛으로부터 버스가 선택된다. 버스로부터의 오퍼랜드는 소싱 오퍼레이션이 그 사이클내에서 완료하지 않으면 타당하게 되지 않을 것이다.The second global control function that occurs during the operand transfer page is the generation of a control signal for each source operand input multiplexer 1010 coupled to execution units 251-254. As described above, each 5: 1 multiplexer 1010 selects an operand from one of the associated operand bus 554 or operand buses 561-564 to select one of the associated operand registers 1021-1024 or 1031-1034. Load into either. During operand transfer phase 442, control logic 520 uses operand status signal OprndStat from bus 553 to generate a control signal for each multiplexer 1010 and select operands OprndStat_SUsrcSt and OprndStat_XXsrcY, where XX = {LU , ST, RUX, RUY} and Y = {1,2} are loaded into the operand register. In particular, the global control logic 520 examines the field state and type for each operand source to determine which sourcing operation completes execution and if not, which execution unit executes the sourcing operation. Operand bus 554 is selected if the source is a register file 290, a completed operation, or an operation that provides itself with a src2 contiguous value. Otherwise, the bus is selected from the execution unit corresponding to the type of sourcing operation. Operands from the bus will not be valid unless the sourcing operation completes in that cycle.

오퍼랜드 트랜스퍼 페이즈동안 일어나는 세 번째 글로벌제어 기능은 실행 유닛 소스 오퍼랜드 레지스터에 출현하는 9개의 오퍼랜드 값의 각각의 타당성의 결정이다. 각 소스 오퍼랜드용으로 신호가 생성되어 소스 오퍼랜드 값이 타당한지 여부를 지시한다. 관련 실행 유닛 입력 멀티플렉서(1010)를 제어함으로써, 오퍼랜드 타당성 결정은 버스(533)으로부터의 OprndStat의 형태 및 필드 스테이트 값에 기초한다. 소싱 오퍼레이션은 타당하게 될 오퍼랜드용으로 완료된 실행 또는 현재 완료되는 실행중 어느 하나를 구비해야 한다. 또한, OprndStat 값의 DestBM 필드가 인출되는 오퍼랜드용 래치된 OprndInfo 값의 Src1BM 또는 Src2BM에 비교된다. 오퍼랜드가 유효하기 위해서는, 소싱 오퍼레이션의 바이트 마크는 요구되는 바이트 마크 Src1BM 또는 Src2BM의 슈퍼셋이어야 한다. src2 인접 값은 항상 유효하다. 신호 OprndInvld_XXsrcY는 실행 유닛 XX용 오퍼랜드 srcY가 유효함을 지시하기 위해 나타난다. 표 B.45는 신호 OprndInvld_XXsrcY를 생성하는 논리를 요약한 것이다.The third global control function that occurs during the operand transfer phase is the determination of the validity of each of the nine operand values appearing in the execution unit source operand register. A signal is generated for each source operand to indicate whether the source operand value is valid. By controlling the associated execution unit input multiplexer 1010, the operand feasibility determination is based on the shape of the OprndStat from the bus 533 and the field state value. The sourcing operation must have either a completed execution or a currently completed execution for the operand to be valid. Also, the DestBM field of the OprndStat value is compared to Src1BM or Src2BM of the latched OprndInfo value for the operand to be fetched. For the operand to be valid, the byte mark of the sourcing operation must be a superset of the required byte mark Src1BM or Src2BM. The adjacent value of src2 is always valid. The signal OprndInvld_XXsrcY appears to indicate that the operand srcY for execution unit XX is valid. Table B.45 summarizes the logic for generating the signal OprndInvld_XXsrcY.

오퍼랜드 트랜스퍼 페이즈 동안 일어나는 네 번째 글로벌 제어기능은, 진행용으로 요구되는 오퍼랜드가 유효하지 않을 때 파이프라인 스테이지내에서 오퍼레이션 업 홀드하는 파이프라인 제어 신호의 생성이다. 소스 오퍼랜드가 가능하지 않으면, 신호 SC_HoldXX0는 오퍼랜드 포워드 스테이지(440)내의 오퍼레이션을 홀드하지만, 시호 SC_HoldSU2는 데이터 오퍼랜드가 그 때 유효하지 않으며 두 번째 실행 스테이지(460)내의 StOp를 홀드한다. cc-dep RegOps는 요구되는 조건 코드가 유효하지 않으면 오퍼랜드 포워드 스테이지(440)내에서 홀드 업된다. 표B.46은 신호 SC_HoldXX0 및 SC_HoldSU2를 생성하는 논리를 요약한 것이다.The fourth global control function that occurs during the operand transfer phase is the generation of a pipeline control signal that holds up an operation in the pipeline stage when the operand required for progress is invalid. If the source operand is not possible, the signal SC_HoldXX0 holds the operation in operand forward stage 440, while the time signal SC_HoldSU2 holds the StOp in the second execution stage 460 when the data operand is not valid at that time. The cc-dep RegOps is held up in operand forward stage 440 if the required condition code is invalid. Table B.46 summarizes the logic for generating the signals SC_HoldXX0 and SC_HoldSU2.

Ⅴ. 스테이터스 플래그(Status Flags)Ⅴ. Status Flags

x86 아키텍춰럴 플래그 및 마이크로-아키텍춰럴 플래그용 스테이터스 플래그 논리(538)는 세 개의 기능영역: cc-dep RegOps용 스테이터스 플래그 오퍼랜드 값의 인출, BRCOND의 해상도용 스테이터스 플래그 값의 인출 , 및 비-중단 RegOps의 선행 BRCOND과의 동기화를 갖는다. 오퍼랜드 선택 논리(532) 및 LdOp-StOp 순서 논리(534)와는 다르게, 스테이터스 플래그 핸들링 논리(538)는 모든 스케쥴러 엔트리에 기록되지 않는다. 관련 오퍼레이션을 위한 스테이터스 플래그 핸들링은 단지 스테이터스 플래그가 스케쥴러(280)내의 특정 열내에 있음을 감지하는 동안만 실행된다. cc-dep RegOps는 스테이터스 오퍼랜드 인출이 실행될때(즉, RUX 오퍼랜드 포워드 스테이지동안) 사이클동안 열 3에 있어야 한다. BRCOND 및 비-중단 RegOps는 브랜치 평가 유닛(257) 및 RUX 오퍼랜드 포워드 스테이지에 의한 분해동안 열 4에 있어야 한다. 따라서, cc-dep 및 비-중단 RegOps는 그들이 열 3 및 4로 시프트 다운할때까지 RUX 오퍼랜드 포워드 스테이지내에 홀드 업되고, 열 3 및 4내의 Op 쿼드의 시프팅은 이들 열내의 Cc-dep 및 비-중단 RegOps가 RUX 실행 스테이지내로 진행할때까지 억제된다. BRCON은 평가가 유효하기 위해 스테이터스 플래그를 필요로 하는 동안 열 4내에 잔류한다.The status flag logic 538 for x86 architectural flags and micro-architecture flags has three functional areas: retrieval of status flag operand values for cc-dep RegOps, retrieval of status flag values for resolution of BRCOND, and non-stop RegOps. Has synchronization with the preceding BRCOND. Unlike operand selection logic 532 and LdOp-StOp order logic 534, status flag handling logic 538 is not written to all scheduler entries. Status flag handling for related operations is only performed while detecting that the status flag is within a particular column in the scheduler 280. The cc-dep RegOps must be in column 3 during the cycle when the status operand fetch is executed (ie, during the RUX operand forward stage). BRCOND and non-stop RegOps should be in column 4 during decomposition by branch evaluation unit 257 and RUX operand forward stage. Thus, the cc-dep and non-stop RegOps are held up in the RUX operand forward stage until they shift down to columns 3 and 4, and the shifting of the op quads in columns 3 and 4 results in Cc-dep and non- Abort RegOps is suppressed until proceeding into the RUX run stage. BRCON remains in column 4 while the evaluation requires a status flag to be valid.

오퍼레이션이 스케쥴러(280)의 특정열에 있을 때 cc-dep RegOps, 비-중단 RegOps, 및 BRCOND의 평가 및 실행의 억제는 스테이터스 플래그 핸들링 논리(538)을 단순화한다. 예를 들면, 스테이터스 플래그 핸들링 논리(538)는 적절한 스테이터스 플래그 값을 결정하기 위해 사용되는 하부의 세 개의 스케쥴러 열 및 하부의 두 개의 열내에서만 필요로 한다. 또한, 동일 스테이터스 플래그 값은 열 3내의 cc-dep regOp 및 열 4내의 BRCOND 모두에 의해 공유될 수 있다. 비-중단 RegOp 및 BRCON간의 동기화는 평가될 때 BRCOND의 위치가 고정되기 때문에 단순화된다.Suppression of evaluation and execution of cc-dep RegOps, non-stop RegOps, and BRCOND when the operation is in a particular column of scheduler 280 simplifies status flag handling logic 538. For example, status flag handling logic 538 is only needed within the bottom three scheduler columns and the bottom two columns used to determine the appropriate status flag value. In addition, the same status flag value may be shared by both cc-dep regOp in column 3 and BRCOND in column 4. Synchronization between non-stop RegOp and BRCON is simplified because the location of BRCOND is fixed when evaluated.

cc-dep RegOp, BRCOND, 및 비-중단 RegOp의 Op 쿼드내에서의 서로에 대한 위치결정시 가해지는 복수의 제한은 논리를 더 단순화한다. 이 제한은 일반적으로 엔코드용 코딩 규칙으로 변환되지만, 몇몇 경우에 사이클내에서 다중 매크로인스트럭션의 MacDec 242 디코딩을 또한 억제한다. 이 제한은 Op 쿼드가 다음을 포함할 것을 필요로 한다.The multiple restrictions imposed upon positioning each other within the op quads of cc-dep RegOp, BRCOND, and non-interrupted RegOp further simplify the logic. This restriction is generally translated into coding rules for encoding, but in some cases also suppresses the MacDec 242 decoding of multiple macroinstructions within the cycle. This limitation requires the Op quad to include:

1) BRCOND 후 RegOp의 cc 변화없음;1) no change in cc of RegOp after BRCOND;

2) cc-dep RegOp 이전에 RegOp의 cc 변화없음;2) no cc change of RegOp prior to cc-dep RegOp;

3) 비-중단 RegOp 및 BRCOND 함께 없음;3) none with non-stop RegOp and BRCOND;

4) 단지 하나의 cc-dep RegOp;4) only one cc-dep RegOp;

5) 단지 하나의 BRCOND; 및5) only one BRCOND; And

6)단지 하나의 비-중단 RegOp.6) Only one non-stop RegOp.

제한함으로써, 열 3내의 cc-dep RegOp용으로 올바른 스테이터스 프래그는 또한 열 4내의 BRCOND용으로도 올바르고, 또한 동일 스테이터스 플래그 회로는 두 개의 목적을 위해 작용한다.By way of limitation, the correct status flag for cc-dep RegOp in column 3 is also correct for BRCOND in column 4, and the same status flag circuit serves two purposes.

Ⅴ.A. 스테이터스 플래그 인출V.A. Status flag withdrawal

스테이터스 플래그 핸들링 논리(538)은 필드 StatMod의 네 개의 비트에 대응하는 스테이터스 플래그의 네 개의 독립된 그룹을 인출한다. 첨부물 B내의 표B.47은 네 개의 플래그 그룹과 그들에 대응하는 필드 StatMod를 나타낸다. 각 그룹이 오퍼레이션용으로 유효한지는 그룹을 수정할 수 있는 오래된 오퍼레이션이 완료되었는지에 따라서 독립적으로 결정된다.Status flag handling logic 538 draws four independent groups of status flags corresponding to four bits of the field StatMod. Table B.47 in Attachment B shows the four flag groups and their corresponding field StatMod. Whether each group is valid for an operation is determined independently, depending on whether the old operation that can modify the group is complete.

스테이터스 플래그 값을 직접 레지스터 유닛(253) 또는 유닛(254)로부터 레지스터 유닛으로 들어가는 cc-dep ReOp로 보내는 것은 실시예에 의해 뒷받침되지 않는다. 따라서, 스테이터스 플래그는 RegOp를 변화시키는 조건 코드의 완료에 뒤이은 사이클을 유효하게 한다. 이는 스테이터스 플래그의 특정 그룹을 수정하는 RegOp와 이 그룹을 이용하는 후속하는 cc-dep RegOp의 실행간의 지연을 최소로 한다. 이 지연의 통계학적 실행의 충격은 cc-dep RegOp가 전형적인 x86 코드를 디코딩할 때 상대적으로 희귀하기 때문에 최소이다. 또한, 지연의 충격은 지시 디코더(240)가 cc-dep RegOp용으로 필요로 하는 조건 코드를 변경하는 RegOp를 바로 뒤따르는 Op 쿼드내에서 cc-dep RegOp를 피하기 위한 RISC86을 명령하면 제거될수 있다.Sending the status flag value directly to register unit 253 or cc-dep ReOp entering unit register from unit 254 is not supported by the embodiment. Thus, the status flag validates the cycle following completion of the condition code that changes RegOp. This minimizes the delay between the execution of RegOp, which modifies a particular group of status flags, and subsequent execution of the cc-dep RegOp using this group. The impact of statistical execution of this delay is minimal because cc-dep RegOp is relatively rare when decoding typical x86 code. In addition, the impact of delay can be eliminated by instructing RISC86 to avoid cc-dep RegOp in the Op quad immediately following RegOp changing the condition code needed for the indication decoder 240 for cc-dep RegOp.

각 사이클 동안, 스케쥴러 열 3 및 4 간의 경계에서 효과적인 스테이터스 플래그 값의 설정이 계산된다. 계산된 스테이터스 플래그는 실행된 스테이터스 플래그 및 열 4 및 5내의 오퍼레이션에 의해 야기된 스테이터스 플래그의 변화를 포함한다. 위에서 설명한 바와같이, RegOp만이 스테이터스 플래그를 수정한다. 각 RegOp가 단지 하나, 둘, 셋, 또는 모든 네 개의 그룹만을 수정할 수 있기 때문에, 스테이터스 플래그 계산은 네 개의 그룹의 각각에 대하여 독립적으로 실행된다. 각 그룹에 대한 계산의 결과는 한 세트의 플래그 값과 그룹 세트에 대응하는 StatMod 비트를 구비한 최신의 RegOp로부터의 상태 정보이다. RegOp용 스테이트 필드는 RegOp가 완료되고 유효한 플래그 값을 제공하였는지를 지시한다.During each cycle, the setting of effective status flag values at the boundary between scheduler rows 3 and 4 is calculated. The calculated status flag includes the executed status flag and a change in the status flag caused by the operation in columns 4 and 5. As explained above, only RegOp modifies the status flag. Since each RegOp can modify only one, two, three, or all four groups, the status flag calculation is performed independently for each of the four groups. The result of the calculation for each group is the state information from the latest RegOp with a set of flag values and StatMod bits corresponding to the group set. The State field for RegOp indicates whether RegOp has completed and provided a valid flag value.

스테이터스 플래그 논리(538)는 8개의 스테이터스 플래그 비트 STATUS 및 표B. 47에 나타낸 4내의 스테이터스 플래그 그룹과 관련된 4개의 유효 비트 STATUSV를 생성한다. 이들 12 비트는 버스(557)를 경유하여 BRCOND과 cc-dep RegOp를 취급하는 레지스터 유닛(253)내의 논리를 평가하는 브랜치 평가 유닛(257)로 보내진다. 레지스터 유닛(253) 및 브랜치평가 유닛(257)은 유효비트 STATUSV로부터 요구되는 스테이터스 플래그가 유효한지 결정하고, 그리고 이들이 유효하다면 스테이터스 비트 STATUS를 사용하여 duf 3내의 cc-dep RegOp를 실행하고 열 4내의 BRCOND을 평가한다. 글로벌 제어 논리(520)는 필요로 하는 스테이터스 플래그가 타당한지에 따라서 시프트 제어 신호를 생성한다.The status flag logic 538 includes eight status flag bits STATUS and Table B. Generates four valid bit STATUSVs associated with the status flag group in 4 shown in 47. These 12 bits are sent via bus 557 to branch evaluation unit 257 which evaluates the logic in register unit 253 that handles BRCOND and cc-dep RegOp. The register unit 253 and the branch evaluation unit 257 determine whether the required status flags from the valid bit STATUSV are valid, and if they are valid, execute the cc-dep RegOp in duf 3 using the status bit STATUS and in column 4 Evaluate BRCOND. The global control logic 520 generates a shift control signal depending on whether the required status flag is reasonable.

레지스터 오퍼랜드 값 인출 과정과 동일한 과정은 각 스테이트서 플래그 그룹을 인출하여 스케쥴러(280)내의 열 3내의 최종 오퍼레이션으로 적합한 플래그 값을 얻는다. 이하에서, 표시 "OpX"는 스케쥴러(280)내의 X의 엔트리를 나타내고, 여기서 X=0 및 X=23은 각각 최신 및 가장 오래된 스케쥴러내의 오퍼레이션을 나타낸다. 예를 들면, 열 4는 Op16, Op17, Op18 및 Op19를 포함한다. 각 플래그 그룹에, Op16으로부터 Op23까지의 프로퍼게이트-킬-스타일 스캔이 이들 플래그 그룹 세트용 StatMod 비트로 첫 번째 오퍼레이션이 있게 하고, 엔트리의 완료된 스테이트 비트(즉 S3) 및 적절한 플래그 값의 세트가 판독된다. 이들 그룹의 StatusV 비트는 발견된 엔트리로부터의 스테이트 비트 S3이다. 만약 그러한 오퍼레이션 발견되지 않는다면, 요구되는 플래그 값은 아키텍춰럴 스테이터스 플래그 레지스터로부터 판독되고 신호 STATUSV는 그룹이 유효한지 나타내기 위해 설정된다. 표B.48은 각 플래그 그룹의 스테이터스 플래그 인출 논리를 나타낸다.The same process as the register operand value retrieval process fetches each stater flag group to obtain a suitable flag value for the final operation in column 3 in the scheduler 280. In the following, the indication " OpX " indicates an entry of X in the scheduler 280, where X = 0 and X = 23 indicate operations in the latest and oldest scheduler, respectively. For example, column 4 includes Op16, Op17, Op18 and Op19. For each flag group, the prop-kill-style scan from Op16 to Op23 causes the first operation to be done with the StatMod bit for these flag group sets, and the completed state bit of the entry (ie S3) and the set of appropriate flag values are read. do. The StatusV bits of these groups are state bits S3 from the found entry. If no such operation is found, the required flag value is read from the architectural status flag register and the signal STATUSV is set to indicate that the group is valid. Table B.48 shows the status flag retrieval logic for each flag group.

Ⅴ.B cc-Dep RegOps를 향한 스테이터스 포워딩Ⅴ.B Status Forwarding to cc-Dep RegOps

각 사이클동안, 글로벌 제어 논리(520)는 열 3내의 4개의 오퍼레이션을 시험하여 이들중 어느하나라도 cc-dep RegOp인 것이 있는지 결정한다. 만약 하나가 그러하다면, 그 RegOp는 디코드되어 어느 스테이터스 플래그의 그룹이 필요한지 결정하고, 그리고 이들 그룹이 모두 유효한지 결정하기 위해 StatusV 비트가 체크된다. 동시에, 스테이터스[7:0]은 맹목적으로 RUX 실행유닛으로 보내진다. 요구되는 플래그 그룹의 어느 하나가 현재 유효하지 않다면, cc-dep RegOp는 RUX로 실행 단계로의 진행이 홀드업 되고, 열 3으로부터의 Op 쿼드의 시프팅이 금지된다. 만약 모든 요구되는 프래그 그룹이 현재 유효하다면, cc-dep RegOp는 적어도 스테이터스 오퍼랜드 인출이 관련되는 한 RUX 실행 단계로의 진행이 허용된다. cc-dep RegOp는 오퍼랜드가 가능하지 않기 때문에 여전히 진행이 금지된다. cc-dep RegOp가 실행단계(460)로 진행하지 않는다면, 로우 3의 시프팅은 금지된다.During each cycle, global control logic 520 examines four operations in column 3 to determine if any of them are cc-dep RegOp. If so, the RegOp is decoded to determine which status flag groups are needed, and the StatusV bit is checked to determine if these groups are all valid. At the same time, status [7: 0] is sent blindly to the RUX execution unit. If any of the required flag groups are not currently valid, the cc-dep RegOp is held up in RUX to proceed to the run phase and the shifting of the Op quads from column 3 is prohibited. If all required flag groups are currently valid, cc-dep RegOp is allowed to proceed to the RUX execution phase, at least as long as the status operand fetch is involved. cc-dep RegOp is still prohibited because no operand is possible. If cc-dep RegOp does not proceed to execution step 460, shifting in row 3 is prohibited.

비실행된 cc-dep RegOp가 열 3 내지 5에 없지만, cc-dep RegOp가 RUX 오퍼랜드 포워드 단계에 있다면, RegOp는 무조건 오퍼랜드 포워드 스테이지내에 홀드업된다. 열 3내의 cc-dep RegOp가 실행되지 않았지만, cc-dep RegOp가 RUX 오퍼랜드 포워드 스테이지에 없다면, 열 3의 시프팅은 금지된다. 표B.49는 시프팅 및 오퍼레이션 진행을 제어하는 논리를 나타낸다.If the unexecuted cc-dep RegOp is not in columns 3 to 5, but the cc-dep RegOp is in the RUX operand forward phase, RegOp is unconditionally held up in the operand forward stage. If cc-dep RegOp in column 3 has not been executed, but cc-dep RegOp is not in the RUX operand forward stage, shifting in column 3 is prohibited. Table B.49 shows the logic that controls the shifting and operation progress.

Ⅴ. 브랜치 예측 분석Ⅴ. Branch prediction analysis

각 사이클 동안, BRCOND이 열 4내에서 발견되면, 이 BRCOND의 조건 코드(cc) 필드가 디코드되어 예측된 조건 값을 결정한다. 예측된 조건 값은, 관련된 유효 비트가 선택된 조건이 유효함을 지시하면 스테이터스 플래그 취급 논리(538)로부터의 스테이터스 플래그로부터 유도된 32 조건 값 중 선택된 하나에 비교된다. 선택된 조건이 아직 유효하지 않다면, 열 4내의 Op 쿼드의 시프팅은 금지되고 BRCOND의 평가가 다음 클록 사이클에서 다시 시도된다. 선택된 조건이 유효하다면, 예측된 조건의 비교 및 선택된 조건은 예측이 올바른지를 나타낸다.During each cycle, if BRCOND is found in column 4, the condition code (cc) field of this BRCOND is decoded to determine the predicted condition value. The predicted condition value is compared to a selected one of the 32 condition values derived from the status flag from status flag handling logic 538 if the associated valid bit indicates that the selected condition is valid. If the selected condition is not yet valid, shifting of the Op quad in column 4 is inhibited and evaluation of BRCOND is attempted again in the next clock cycle. If the selected condition is valid, the comparison of the predicted condition and the selected condition indicate whether the prediction is correct.

BRCOND이 잘못 예측된 것으로 발견되면( 따라서 파이프라이 재시작이 필요하면), 재시작 신호가 BROCOND이 MacDec 242로부터 나온것인지 또는 내부 또는 엔코드로부터의 엔코드 오퍼레이션인지에 따라 발하게 된다. 또한, 적절한 x86 매크로인스트럭션 또는 엔코드 벡터 어드레스 및 관련 복귀 어드레스 스택 TOS 값이 생성되고 인스트럭션 디코더(240)로 복귀하여 디코딩을 재시작한다.If a BRCOND is found to be incorrectly predicted (and thus requires a pipeline restart), a restart signal will be issued depending on whether BROCOND is from MacDec 242 or an encoding operation from internal or encoded. In addition, the appropriate x86 macroinstruction or encode vector address and associated return address stack TOS value are generated and returned to instruction decoder 240 to restart decoding.

이후에 설명하는 비-중단 RegOp 및 선행 BRCOND간의 동기화 취급 논리의 이점을 위해, 잘못 예측된 BRCOND의 기록이 그것이 눈에 띄는 동안 유지된다(즉, 중단 사이클이 실행될 때까지). 또한, 눈에 띄는 잘못 예측된 BRCOND은 중단 사이클이 실행될때까지 "새로운" Op쿼드의 로딩을 홀드업한다.For the benefit of the synchronization handling logic between the non-interrupted RegOp and the preceding BRCOND described later, a record of the incorrectly predicted BRCOND is maintained while it is noticeable (ie, until an abort cycle is executed). In addition, a noticeable mispredicted BRCOND holds up the loading of the "new" Opquad until the abort cycle is executed.

만약 BRCOND가 올바르게 예측되었다면, 취해질 동작은 BRCOND 스테이트 비트 S3를 설정하여 BRCOND가 완료되었음을 지시하는 것뿐이다. 표B. 50은 BRCOND 평가를 취급하는 논리를 나타낸다.If BRCOND is correctly predicted, the only action to be taken is to set the BRCOND state bit S3 to indicate that BRCOND is complete. Table B. 50 represents the logic for handling BRCOND evaluation.

Ⅵ. 비-중단 오퍼레이션의 동기화Ⅵ. Synchronization of non-stop operations

각 사이클동안, 비-중단 RegOp가 열 4내에서 발견되면, 스케쥴러(280)는 선행 잘못 예측된 BRCOND을 체크한다. 엔코드 코딩이 억제되기 때문에, 선행 BRCOND은 하부 로우에 있어야 하고 따라서 분석되어야 한다. 또한, 분석되고 있는 BRCOND(열 4에서)은 비-중단 RegOp 이후이고 따라서 유효하지 않다.During each cycle, if a non-interrupting RegOp is found in column 4, the scheduler 280 checks for a previous mispredicted BRCOND. Since encode coding is suppressed, the preceding BRCOND must be in the lower row and therefore analyzed. In addition, the BRCOND (in column 4) being analyzed is after the non-stop RegOp and is therefore not valid.

만약 잘못 예측된 BRCOND이 없으면, 요구되는 오퍼랜드가 아직도 유효하지 않아서 RegOp가 진행하지 않는다고 하더라도 비-중단 RegOp는 RUX 실행단계로의 진행이 허용된다. RegOp가 즉시 RUX 실행단계로 진행하지 않는다면, RegOp는 열 4에서 시프트하도록 허용된다.If there is no mispredicted BRCOND, the non-stop RegOp is allowed to proceed to the RUX execution phase even if RegOp does not proceed because the required operand is still invalid. If RegOp does not immediately proceed to RUX execution, RegOp is allowed to shift in column 4.

열 4 또는 5가 비실행된 비-중단 RegOp를 포함하지 않지만 비-중단 RegOp가 RUX 오퍼랜드 포워드 단계에 있다면, 비-중단 RegOp는 비-중단 RegOp가 열 4에 도달할 때까지 무조건 오퍼랜드 포워드 단계내에 홀드업된다. 열 4내의 비-중단 RegOp가 아직 실행되지 않았지만, 비-중단 RegOp가 RUX 오퍼랜드 포워드 단계내에 없거나 또는 비실행된 비-중단 RgeOp가 열 5내에 있으면, 열4 및 5의 시프팅은 금지된다. 표B. 51은 비-중단 RegOp의 취급 논리를 타나낸다.If column 4 or 5 does not contain a non-executed non-stop RegOp but the non-stop RegOp is in the RUX operand forward step, the non-stop RegOp is unconditionally in the operand forward step until the non-stop RegOp reaches column 4. It is held up. If the non-stop RegOp in column 4 has not yet been executed, but the non-stop RegOp is not in the RUX operand forward step or the non-executed non-stop RgeOp is in column 5, shifting in columns 4 and 5 is prohibited. Table B. 51 represents the handling logic of a non-stop RegOp.

Ⅶ. 자가-수정 코드 취급Iii. Self-modifying code handling

스토어 큐(270)는 처리될 데이터용 물리적 및 선형 어드레스의 몇가지 비트를 제공한다. 스토어 어드레스가 Op 쿼드의 지시 어드레스의 어느 하나와 매치되면, 지시로의 기록은 지시를 수정할 수 있고 스케쥴러(280)내에 현재 나타나는(디코드된) 오퍼레이션은 올바르지 않을수 있다. 올바르지 않은 오퍼레이션은 오퍼레이션으로부터의 결과가 주어지기 전에 수정되어야 한다.Store queue 270 provides several bits of physical and linear addresses for the data to be processed. If the store address matches any of the indication addresses of the Op quad, writing to the indication may modify the indication and the operation currently appearing (decoded) in the scheduler 280 may not be correct. Invalid operations must be corrected before the results from the operations are given.

본 발명의 실시예에 있어서, 자가-수정 코드 서포트 논리(536)는 스토어 큐(270)으로부터의 어드레스 비트를 각 Op쿼드의 지시 어드레스(또는 Op 쿼드내 지시가 다른 페이지로부터라면 어드레스)에 비교한다. 비교가 코드 수정의 가능성을 제거한다면, 논리(536)는 아무것도 실행하지 않는다. 가능성이 제거되지 않으면, 논리(536)는 스케쥴러(280)를 플러쉬하고 마지막으로 주어진 지시의 어드레스로부터의 인출/디코드 공정을 재시작한다. 논리적으로, 스케쥴러(280)내에서, 자가-수정 코드의 검지는 "트랩 펜딩"을 지시하는 신호내로의 인자 및 트랩의 한종류로 다루어진다. 표B. 52는 자가-수정 코드 취급 논리(536)를 나타낸다.In an embodiment of the invention, the self-modifying code support logic 536 compares the address bits from the store queue 270 to the instruction address of each Opquad (or if the instruction in the Op quad is from a different page). . If the comparison removes the possibility of code modification, logic 536 does nothing. If the possibility is not eliminated, logic 536 flushes scheduler 280 and restarts the fetch / decode process from the address of the last given instruction. Logically, within the scheduler 280, the detection of the self-modifying code is treated as a kind of factor and trap into the signal indicating "trap pending". Table B. 52 shows self-modifying code handling logic 536.

Ⅷ. 오퍼레이션 커미트 유닛Iii. Operation commit unit

OCU(Operation Commit Unit)(260)는 일반적으로 스케쥴러(280)의 최종열 바로이전 열(열 4 또는 5) 또는 최종열내의 오퍼레이션상에서 작동한다. OCU(260)의 주기능은 오퍼레이션의 결과를 부여(또는 영구적으로 만듬)하는 것과 스케쥴러(280)으로부터 Op 쿼드를 철회하는 것이다.Operation Commit Unit (OCU) 260 generally operates on an operation within the last row (column 4 or 5) or the last column of scheduler 280. The main functions of the OCU 260 are to give the result of the operation (or to make it permanent) and to withdraw the Op quad from the scheduler 280.

많은 형태의 결과 또는 상태 변화가 오퍼레이션의 실행으로부터 나올수 있다. 변화의 주된 형태는 중단가능이고: 레지스터 변호, 스테이터스 플래그 변화; 및 메모리 기록을 포함한다. RISC86 지시세트에서, 레지스터 변화는 모든 RegOp, LdOp, LIMMOp, LDK 오퍼레이션, 및 STUPD StOp로부터 나온다. 스테이터스 플래그 변화는 ".cc" RegOp로부터 나오고 메모리 기록은 STxx StOp로부터 나온다. 스케쥴러(280) 및 스토어 큐(270)는, 관련 오퍼레이션이 주어지고 철회될때까지, 일시적으로 스케쥴러(280)의 엔트리가 되는 레지스터 및 스테이터스를 저장하고 스토어 큐(270)의 엔트리가 되는 메모리 기록을 일시적으로 저장함으로써 중단가능 상태 변화를 서포트한다. 오퍼레이션 커미트먼트는 상태 변화-영구적으로 만든다. 새로운 상태값이 스케쥴러(280) 및 스토어 큐(270)내에 잔류하는 동안, 상태 값은 필요에 따라 디펜던트 오퍼레이션으로 진행한다.Many types of results or state changes can come from the execution of an operation. The main forms of change are breakable: register defense, status flag change; And memory writes. In the RISC86 instruction set, register changes come from all RegOp, LdOp, LIMMOp, LDK operations, and STUPD StOp. Status flag changes come from ".cc" RegOp and memory records come from STxx StOp. The scheduler 280 and store queue 270 temporarily store registers and statuses that are entries in the scheduler 280 and temporarily store memory records that are entries in the store queue 270 until an associated operation is given and withdrawn. Support for interruptible state changes by saving to. Operation commitments make state changes permanent. While new status values remain in scheduler 280 and store queue 270, the status values proceed to a dependent operation as needed.

모든 다른 상태 변화는 비-중단가능이고 비-중단 RegOp 실행으로부터 얻어진다. 비-중단가능 상태변화는 세그먼트 레지스터와 비-스테이터스 EFlag 비트 등의 표준 x86 레지스터로의 변화 및 RISC 오퍼레이션용 마이크로-아키텍춰럴 레지스터로의 변화를 포함한다. 비-중단가능 상태변화는 비-중단 가능 RegOp 실행동안 즉시 발생할 수 있고, 디코더(240) 및 스케쥴러(280)는 비-중단가능 오퍼레이션을 주위 오퍼레이션에 충분하게 동기화시키는데 책임이 있다.All other state changes are non-interruptible and are obtained from non-interrupted RegOp execution. Non-interruptible state changes include changes to standard x86 registers, such as segment registers and non-status EFlag bits, and to micro-architecture registers for RISC operations. Non-interruptible state changes can occur immediately during non-interruptible RegOp execution, and decoder 240 and scheduler 280 are responsible for sufficiently synchronizing non-interruptible operations to surrounding operations.

Ⅷ.A 커미트먼트Ⅷ.A commitment

각 사이클동안, OCU(260)는 스케쥴러(280)내의 열 4 및/또는 5내의 오퍼레이션을 검사하고 가능한 많은 오퍼레이션의 결과를 주려고한다. Op 쿼드내의 상태변화는 한 사이클 또는 더 많은 사이클에 주어질 수 있다. 하부 열의 Op쿼드의 모든 오퍼레이션이 주어졌거나 또는 충분히 주어지는 중이면, Op쿼드는 열 4로부터의 Op쿼드가 열 5로 시프트하고 오버라이트하도록 함으로써 현재 사이클의 마지막에 스케쥴러(280)로부터 철회된다. 그렇지 않으면, 가능한 많은 변화가 주어지고 열 5로의 시프팅은 금지된다. 커미트먼트 프로세스는 열 5내의 모든 오퍼레이션이 주어지고 열 4내의 Op 쿼드가 열 5로 시프트다운 될 때까지 반복된다.During each cycle, the OCU 260 examines operations in rows 4 and / or 5 in the scheduler 280 and attempts to give as many results as possible. State changes in the op quads can be given in one cycle or more. If all operations of the Op quad of the lower row are given or are being given enough, the Op quad is withdrawn from the scheduler 280 at the end of the current cycle by causing the Op quad from column 4 to shift to column 5 and overwrite. Otherwise, as many changes as possible are given and shifting to row 5 is prohibited. The commitment process is repeated until all operations in column 5 are given and the Op quads in column 4 are shifted down to column 5.

레지스터 결과, 스테이터스 결과, 및 메모리 기록의 커미트먼트는 독립적으로 실행된다. 다중 결과(예를 들면, 레지스터 및 스테이터스 결과가 있는 RegOp, 또는 레지스터 결과와 메모리 기록이 있는 STUPD 오퍼레이션)를 갖는 오퍼레이션을 위해, 다양한 결과가 동시에 주어질 필요는 없다. 한 형태의 상태 변화의 커미트먼트는 일반적으로 다른 형태의 상태변화의 커미트먼트보다 앞서거나 또는 뒤에 올수 있다. 오퍼레이션의 전체적인 커미트먼트는 OCU(260)가 오퍼레이션으로부터 마지막 결과가 주어질 때 실행된다.The register result, status result, and memory write commit are executed independently. For operations with multiple results (eg RegOp with register and status results, or STUPD operation with register results and memory writes), the various results do not need to be given simultaneously. A commitment of one type of state change may generally precede or follow a commitment of another type of state change. The overall commitment of the operation is executed when the OCU 260 is given the last result from the operation.

오퍼레이션의 결과는: 오퍼레이션 실행 상태가 오퍼레이션의 완료를 나타낼 때까지; 선행 포울터블 오퍼레이션 즉 BRCOND가 올바르게 예측되었음을 의미하는 선행 LdStOp가 완료할 때까지 주어지지 않는다. 디코더(240)가 각 FAULT 오퍼레이션을첫번째 "유효한" 오퍼레이션으로 Op 쿼드내에 위치시켜 FAULE 오퍼레이션으로서 동일 열내의 어떠한 오퍼레이션도 완료될 필요가 없기 때문에, FAULT 오퍼레이션은 고려되지 않는다. 메모리 기록을 생성하는 StOp를 위해, 부가적인 제한은 스토어 큐(270)으로부터 데이터 캐쉬(220)로의 사이클당 하나의 기록만이 주어질 수 있는 것이다.The result of the operation is: until the operation execution status indicates completion of the operation; It is not given until the leading LdStOp completes, which means that the preceding foulable operation, BRCOND, was correctly predicted. The FAULT operation is not considered because decoder 240 does not need to complete each operation in the same column as a FAULE operation by placing each FAULT operation within the Op quad as the first "valid" operation. For StOp to generate memory writes, an additional restriction is that only one write per cycle from store queue 270 to data cache 220 can be given.

OCU(260)은 사이클당 4개의 레지스터 및 4개의 스테이터스 결과 및 하나의 메모리 기록을 줄 수 있고, 전형적으로 매 사이클마다 스케쥴러(280)로부터 Op쿼드를 주고 철회한다. Op 쿼드는 스케쥴러(280)의 하부 열에 잔류하고 Op 쿼드가 다중 메노리 기록 StOp를 포함하거나 또는 Op 쿼드내 일부 오퍼레이션이 아직 완료되지 않았으면 한 사이클 이상 철회되지 않는다.The OCU 260 can give four registers and four status results and one memory write per cycle, typically giving and withdrawing an Op quad from the scheduler 280 every cycle. The op quad remains in the bottom row of the scheduler 280 and is not withdrawn for more than one cycle if the op quad contains multiple memory write StOp or some operations in the op quad have not yet completed.

하부 열내의 오퍼레이션이 포울트될 필요가 있으면, 예를 들면, 오퍼레이션이 FAULT 오퍼레이션이거나 오퍼레이션의 실행동안 포울트가 발생하면, 이후의 오퍼레이션의 커미트먼트는 금지된다. 포울트되는 Op 쿼드내의 모든 오래된 오퍼레이션이 주어지거나 또는 충분히 주어지는 중이라면, OCU(260)는 Op 쿼드를 철회하고 찰출 사이클을 시작한다. 탈출 사이클은 스케쥴러(280)와 모든 현재 오퍼레이션의 실행 유닛을 플러쉬한다.If an operation in a lower column needs to be fouled, for example, if the operation is a FAULT operation or a foul occurs during the execution of the operation, then the commitment of subsequent operations is prohibited. If all old operations within the op quad being fouled are being given or are being given enough, the OCU 260 withdraws the op quad and starts the chase cycle. The escape cycle flushes the scheduler 280 and execution units of all current operations.

탈출 사이클과 동시에, OCU(260)은 또한 지시 디코더(240)를 두 개의 가능한 인코드 "엔트리 포인트" 어드레스중의 어느 하나, "디포울트" 포울트 핸들러 어드레스(리셋 인코드에 의해 초기화되는), 또는 "얼터니트" 핸들러 어드레스(매크로인트트럭션 또는 익셉션 프로세싱 인코드에 의해 특정화되는)에 벡터한다. LDDHA 및 LDAHA 오퍼레이션은 스케쥴러(280)내에 완료된 상태로 로드되고 그들이 스케쥴러(280)의 하부에 도달할 때 OCU(260)에 의해 인식되고 "실행"되며, 포울트 디포울트와 얼터니트 핸들러 어드레스를 서포트한다.At the same time as the escape cycle, the OCU 260 also sends the indication decoder 240 to one of the two possible encode "entry point" addresses, the "depost" pole handler address (which is initialized by reset encoding), Or "alternative" handler address (specified by macroinstruction or exception processing encode). LDDHA and LDAHA operations are loaded in the scheduler 280 as completed and recognized by the OCU 260 when they reach the bottom of the scheduler 280 and are " executed " and support the foul depot and alternate handler addresses. do.

특정 형태의 오퍼레이션만이 포울트될 두 있고, 즉 LdOp, StoOp(LEA 오퍼레이션 제외), 및 FAULT 오퍼레이션이 포울트된다. LdOp 또는 StOp의 경우, 포울트는 LU 도는 SU 실행 파이프라인의 두 번째 실행 단계(460)에 의해 인식되고; 포울트가 검지되면 LdStOp는 관련 또는 관련되지 않은 탈출 사이클이 LdStOp를 스케쥴러(280) 및 실행 유닛(251) 또는 유닛(252)으로부터 플러쉬할때까지 두 번째 실행 단계내에 홀드업된다. 완료된 LdStOp내의 이 결과는 포울트-프리를 보증한다. OCU(260)는 포울팅 LdStOP 및 아직 완료되지 않은 LdStOp간을 구분하며, 이는 포울팅 오퍼레이션을 지시하는 실행유닛(251,252)으로부터의 신호가 그들 각각의 두 번째 실행단계내에 있음에 의한다. OCU(260)가 다음 비완료된 LdStOp 및 관련 실행 유닛(252 또는 251)에 두 번째 실행 단계내에 홀드되는 오퍼레이션용 포울트 시그널을 부여하려고 할 때, OCU(260)이 부여하려고 하는 오퍼레이션은 포울터와 만난 오퍼레이션이어야 한다. 관련 실행 유닛(251 또는 252)이 포울트 시그널을 나타내지 못하면, 비완료된 LdStOp에 대하여 결정될 수 있는 것이 아무것도 결정되지 않고 OCU(260)은 LdStOp가 완료할때까지 기다린다.Only certain types of operations are to be fouled, that is, LdOp, StoOp (except LEA operations), and FAULT operations. For LdOp or StOp, the foul is recognized by the second execution stage 460 of the LU or SU execution pipeline; If a foul is detected, LdStOp is held up in the second execution phase until an associated or unrelated escape cycle flushes LdStOp from scheduler 280 and execution unit 251 or unit 252. This result in the completed LdStOp guarantees foul-free. The OCU 260 distinguishes between the fouling LdStOP and the LdStOp not yet completed, because the signals from the execution units 251, 252 indicating the fouling operation are in their respective second execution phases. When the OCU 260 attempts to give the next incomplete LdStOp and associated execution unit 252 or 251 a foul signal for the operation held in the second execution step, the operation that the OCU 260 tries to grant is performed with the fouler. It must be an operation that has been met. If the associated execution unit 251 or 252 does not exhibit a foul signal, nothing can be determined that can be determined for an incomplete LdStOp and the OCU 260 waits until the LdStOp completes.

FAULT 오퍼레이션은 스케쥴러(280)내에 완료된 상태 및 항상 포울트로 로드된다. OCU(260)은 포울트 오퍼레이션의 커미트먼트와 포울트하는 LdStOp와 동일한 방식의 주위 오퍼레이션의 탈출을 취급한다.The FAULT operation is loaded into the completed state and always into the scheduler 280. The OCU 260 handles the commitment of the foul operation and the escape of the surrounding operation in the same manner as the LdStOp to foul.

또한, 특정 오퍼레이션 상에서 포울트하기 위해, OCU(260)는 또한 ERET로 지시되는 인코드 시이퀀스의 마지막까지 어큐믈레이트되고 기억되는 다양한 디버그 트랩 익셉션을 인식한다. "ERET" Op쿼드가 철회되고 트랩 익셉션이 계류중이면, OCU(260)은 포울트가 Op 쿼드내 5번째 및 최종 오퍼레이션에서 인식되었으면 포울트-스타일 탈출 사이클을 시작한다.In addition, to foul on a particular operation, the OCU 260 also recognizes various debug trap exceptions that are accumulated and stored until the end of the encode sequence indicated by ERET. If the "ERET" Op quad is withdrawn and the trap exception is pending, the OCU 260 starts a foul-style escape cycle once the foul has been recognized at the fifth and final operation in the Op quad.

OCU(260)은 "브랜치 타겟 제한 위반" 조건을 인식하고, 이는 Op 쿼드내 특정 오퍼레이션이 관련되는 동안 Op 쿼드로 태그된다. 이는 포울트가 Op 쿼드내 첫 번째 오퍼레이션에서 인식되면 무조건적으로 탈출 사이클을 개시한다.The OCU 260 recognizes the "branch target restriction violation" condition, which is tagged with the Op quad while certain operations in the Op quad are involved. This unconditionally initiates an escape cycle if the foul is recognized on the first operation in the Op quad.

OCU(260)가 주로 탈출가능 상태 변화를 생성하는 오퍼레이션과 관련되는 동안, OCU(260)은 또한 BRCOND을 취급한다. BRCOND은 열 4에 있을 때 결정된다. 잘못 예측이 검지되면, 매크로인스트럭션 인출 논리 및 인스트럭션 디코더(240)는 즉시 리셋되고 적절한 매크로인스트럭션 어드레스로부터 재시작한다. 잘못 예측된 BRCOND이 열 5에 도달하면, 잘못 예측된 BRCOND 보다 새로운 오퍼레이션이 커미트먼트는 금지되고, 탈출 사이클이 잘못 예측된 BRCOND에 선행하는 모든 오퍼레이션이 커미트되었거나 또는 커미트되는 중일 때 이후 시작한다. 탈출 사이클은 또한 "새로운" 오퍼레이션의 로딩을 가능하게 하여 디코더(240)로부터 스케쥴러(280)내로 실행 유닛(251-256)으로의 즉시 이슈하게 한다. 잘못 예측된 BRCOND 및 오퍼레이션 포울트 탈출은 잘못 예측된 BRCOND을 취해 인코드하기 위한 벡팅이 없는 것과는 다르다. 스케쥴러(280)의 하부에 도달하는 올바르게 예측된 BRCOND을 커미트하기 위해서는 아무것도 할 필요가 없다.OCU 260 also handles BRCOND, while OCU 260 is primarily concerned with operations that produce an escapeable state change. BRCOND is determined when in column 4. If a false prediction is detected, macroinstruction fetch logic and instruction decoder 240 immediately resets and restarts from the appropriate macroinstruction address. If an incorrectly predicted BRCOND reaches column 5, operations that are newer than the incorrectly predicted BRCOND are forbidden, and the escape cycle starts later when all operations preceding the incorrectly predicted BRCOND are committed or committed. The escape cycle also enables the loading of "new" operations to cause immediate issue from decoder 240 to scheduler 280 into execution units 251-256. Mispredicted BRCOND and operation foul escape differ from no betting to take and encode a mispredicted BRCOND. Nothing needs to be done to commit the correctly predicted BRCOND reaching the bottom of the scheduler 280.

OCU(260)은 각 BRCOND을 탈출하거나 또는 커미트한다. OCU(260)은 BRCOND 스케쥴러 엔트리 스테이트 필드에 따라 동작을 선택한다. BRCOND이 리졸브되면, 그 스케쥴러 엔트리 스테이트 필드는 올바르게 예측되었다면 변화되어 완료하고, 잘못 예측되었으면 언이슈 상태로 남아있는다. 따라서, BRCOND이 열 4내에서 완료되었는지는 직접 BRCOND이 잘못 예측되었는지를 나타낸다.OCU 260 exits or commits each BRCOND. OCU 260 selects an action according to the BRCOND scheduler entry state field. When BRCOND is resolved, the scheduler entry state field changes to complete if correctly predicted and remains unissued if incorrectly predicted. Thus, whether BRCOND was completed in column 4 directly indicates whether BRCOND was incorrectly predicted.

오퍼레이션 결과 커미트먼트의 실제 타이밍은 상대적으로 간단하고 커미 사이클의 후반부 동안 일어나는 것으로 생각될 수 잇다. 전형적으로, Op 쿼드는 동일 사이클동안 커미트되어 스케쥴러 (280)의 하부로 떨어지고, 사이클의 마지막에 스케쥴러(280)으로부터 철회된다. 사이클동안, 결과가 레지스터 파일(290)에 기록되는 동안 오퍼랜드 값은 레지스터 파일(290)이 아닌 스케쥴러(280)으로부터의 모든 종속 오퍼레이션으로 진행한다.The actual timing of the operation result commitment is relatively simple and can be thought of as occurring during the second half of the commit cycle. Typically, the Op quad is committed during the same cycle, falling to the bottom of the scheduler 280, and withdrawn from the scheduler 280 at the end of the cycle. During the cycle, the operand value proceeds to all dependent operations from scheduler 280 rather than register file 290 while the result is written to register file 290.

커미팅 메모리 기록은 2단계 기록 커미트 파이프라인의 형태로 실행되는 2단계 프로세스이다. 첫 번째 기록 커미트 파이프라인 단계는 OCU(260)이 고려되는 한 OCU(260)의 StOp 용 OCU(260)의 커미트 사이클에 대응되고, StOp는 이 파이프 라인의 두단계에 들어갈 때 커미트된다. StOp의 타이밍-와이즈는 스케쥴러(280)으로부터의 관련 Op 쿼드의 철회와 동시에 또는 이전에 두 번째 기록 커미트 단계로 들어가야 한다. StOp가 이 두 번째 단계에 들어갈 수 없으면, StOp는 커미트 가능하지 않은 것으로 생각되고 Op 쿼드의 철회는 홀드업된다.Committing memory writes are a two-step process executed in the form of a two-phase write commit pipeline. The first write commit pipeline stage corresponds to the commit cycle of the OCU 260 for StOp of the OCU 260 as long as the OCU 260 is considered, and StOp is committed when entering two stages of this pipeline. The timing-wise of StOp must enter the second write commit phase at the same time or prior to the withdrawal of the associated Op quad from scheduler 280. If StOp cannot enter this second phase, StOp is not considered committable and the revocation of the Op quad is held up.

OCU(260)가 오퍼레이션 포울트 때문에 탈출 사이클을 시작할 때, 탈출 신호 및 관련 인코드 벡터어드레스는 포울트 오퍼레이션을 포함하는 Op 쿼드의 커미트/철회 사이클동안 어서트된다 다음 사이클 동안, 스케쥴러(280)는 플러쉬되고, 타겟 인코드 Op 쿼드는 인출된다. 내부 인코드를 위해, 스케쥴러(280)는 이 하나의 사이클을 위해 비워질 것이다.When the OCU 260 starts an escape cycle because of an operation foul, the escape signal and the associated encode vector address are asserted during the commit / retract cycle of the op quad containing the foul operation. During the next cycle, the scheduler 280 It is flushed and the target encode Op quad is fetched. For internal encoding, the scheduler 280 will be empty for this one cycle.

잘못 예측된 BRCOND의 탈출 신호는 또한 관련 Op 쿼드의 커미트/철회 사이클동안 어서트된다. 지시 인출 및 디코드가 일찍 시작하기 때문에, 스케쥴러(280)은 바로 다음 사이클만큼 빨리 새로운 Op 쿼드로 리로드된다. 즉, 스케쥴러(280)은 하나의 사이클 동안 비워진 상태로 있지 않는다.The escape signal of the wrongly predicted BRCOND is also asserted during the commit / retract cycle of the associated Op quad. Because the instruction fetch and decode starts early, the scheduler 280 is reloaded into the new Op quad as soon as the next cycle. In other words, the scheduler 280 does not remain empty for one cycle.

OCU(260)가 탈출 사이클로 요거되는 Op 쿼드내 다중 오퍼레이션을 인식할 때, 이는 첫 번째 오퍼레이션을 선택하고 그 오퍼레이션의 적절한 타임에서의 오퍼레이션에 관한 적절한 탈출 동작을 시작한다.When the OCU 260 recognizes multiple operations in the Op quad that are required by the escape cycle, it selects the first operation and starts the appropriate escape operation for the operation at the appropriate time of that operation.

Ⅷ. A.1 레지스터 커미트먼트Iii. A.1 Register Commitment

OCU(260)은 레지스터 파일(290)로의 레지스터 결과의 커미팅을 관리하고 제어한다. 각 사이클동안, 스케쥴러(280)의 하부 2열의 하나안의 각 완료된 오퍼레이션의 레지스터 결과는 레지스터 파일(290)에 기록될 수 있다(사이클의 후반부 동안, 4개의 독립적인 기록부를 경유하여). 각 기록은 관련 스케쥴러 엔트리로부터의 바이트 마크, 실드 DestBM[2:0]에 따라 실행된다.OCU 260 manages and controls the committing of register results to register file 290. During each cycle, the register result of each completed operation in one of the lower two rows of scheduler 280 may be written to register file 290 (via the four independent writers, during the second half of the cycle). Each write is performed according to the byte mark from the associated scheduler entry, shield DestBM [2: 0].

오퍼레이션이 아직 완료되지 않고 커미트가능하지 않으면, 관련 레지스터 파일은 이 사이클동안 금지된다. 오퍼레이션이 개념적으로 레지스터 결과를 생성하지 않는 형태이면, 바이트 마크는 모두 클리어되고 레지스터 번호는 정해지지 않을 수 있다. 바이트가 아닌 이 결과는 레지스터 파일 기록동안 수정된다. 마찬가지로, 레지스터 t0(항상 제로인 레지스터)는 오퍼레이션의 방향으로 특정화되고, 바이크 마크는 다시 클리어된다. 이들 경우, 오퍼레이션 디코더(210)는 로딩동안 바이트 마크를 b000으로 한다.If the operation has not yet completed and is not committable, the associated register file is prohibited during this cycle. If the operation is of a type that conceptually does not produce a register result, the byte mark may all be cleared and the register number may not be determined. This result, not bytes, is modified during register file writing. Similarly, register t0 (the register always being zero) is specified in the direction of the operation, and the bike mark is cleared again. In these cases, the operation decoder 210 sets the byte mark to b000 during loading.

일반적으로, 논쟁 존재의 가능성 즉, 동일 레지스터로의 다중 동시 기록으 가능성이 있다. 요구되는 결과는 최신의 오퍼레이션으로부터 나오고, 그리고 오래된 기록은 금지되고 효과적으로 무시된다. 레지스터 파일(290)은 이들 기능을 OCU(260)의 레지스터 커미트먼트 프로세스의 제어로부터 분리하여 나타난 레지스터 번호와 관련 가능한 기록에 기초하여 취급한다.In general, there is a possibility of controversy, that is, multiple simultaneous writes to the same register. The required result comes from the latest operation, and old records are prohibited and effectively ignored. The register file 290 handles these functions based on the possible records associated with the register numbers indicated separately from the control of the register commitment process of the OCU 260.

또한, 경쟁하는 기록은 최신의 기록에 의해 수정되지 않는 레지스터 바이트를 수정하는 오래된 기록이므로, 효과적인 레지스터 파일 기록은 경쟁하는 오퍼레이션으포부터의 바이트의 조합이다. 예를 들면, 첫 번째(가장 오래된) 오퍼레이션은 {3,2,1,0} 바이트를 수정하고, 두 번째 오퍼레이션은 {1,0} 바이트를 수정하고, 세 번째(최신의) 오퍼레이션은 {1} 바이트를 수정하고, 액츄얼 레지스터 파일 기록은 첫 번째 오퍼레이션으로부터의 {3,2} 바이트, 두 번째 오퍼레이션으로부터의 {0} 바이트, 및 세 번째 오퍼레이션으로부터의 {1} 바이트를 취한다. 다른 경우, 레지스터 파일의 일부는 전혀 수정되지 않는다. 레지스터 파일(290)내 제어논리는 이 부가적인 기능을 취급한다. 실지로, 레지스터 파일(290)내 경쟁 결정 논리는 32-비트 워드 대신에 개개의 바이트에 기초하여 동작한다.In addition, since a competing record is an old record that modifies a register byte that is not modified by the latest record, an effective register file recording is a combination of bytes from a competing operation. For example, the first (oldest) operation modifies {3,2,1,0} bytes, the second operation modifies {1,0} bytes, and the third (latest) operation is {1 } Modify the byte, and the actual register file write takes {3,2} bytes from the first operation, {0} bytes from the second operation, and {1} bytes from the third operation. In other cases, part of the register file is not modified at all. Control logic in register file 290 handles this additional function. In practice, contention decision logic in register file 290 operates based on individual bytes instead of 32-bit words.

4개의 모든 오퍼레이션에 가능한 기록은 패럴렐하게 생성된다. 가능한 관련 기록은, Op 쿼드내 모든 선행/오래된 LdStOp 가 완료되고 선행/오래된 BRCOND이 잘못 예측된 것이 없으면 각 완료된 동작을 위해 레지스터 파일(290)에 어서트된다. 오퍼레이션의 결과가 레지스터 파일(290)에 기록될 때, 관련 DestBM 비트는 클리어되어 스케쥴러 엔트리가 더 이상 디펜던트 오퍼레이션에 레지스터 값을 제공하지 않음을 나타낸다. DestBM 필드의 클리어링은 또한 부분적인 레지스터 기록을 위해 실행된다. 디펜던트 오퍼레이션이 요구되는 모든 바이트를 한 오퍼레이션으로부터 얻을 수 없으면, 디펜던트 오퍼레이션은 레지스터 파일(290)로부터 모든 바이트를 얻을때까지 오퍼랜드 포워드 단계에 홀드업된다.Possible records for all four operations are generated in parallel. Possible related writes are asserted in register file 290 for each completed operation if all the preceding / old LdStOp in the Op quad are completed and the preceding / old BRCOND is incorrectly predicted. When the result of the operation is written to register file 290, the associated DestBM bit is cleared to indicate that the scheduler entry no longer provides a register value for the dependent operation. Clearing of the DestBM field is also performed for partial register writes. If a dependent operation cannot obtain all the bytes required from one operation, the dependent operation is held up in the operand forward step until all bytes are obtained from the register file 290.

또한, 스케쥴러 엔트리(위의 설명 참조)와 관련된 9개 신호 OprndMatch_XXsrcY가 그 엔트리내의 DestBM 비트가 클리어되려고 할 때 마크된다(즉, 매치가 아님을 지시하도록 된다.). 이는 스케쥴러(280)내의 레지스터 오퍼랜드 인출 프로세스의 파이프라인 특성 때문이다. 특히, 엔트리의 DestBM 비트는 이 프로세스의 양 단계에서 사용되고 양 사이클에 걸쳐 일치해야한다.In addition, the nine signals OprndMatch_XXsrcY associated with the scheduler entry (see description above) are marked when the DestBM bit in that entry is about to be cleared (i.e., indicating no match). This is due to the pipeline nature of the register operand fetch process in scheduler 280. In particular, the DestBM bit of the entry must be used at both stages of this process and must match across both cycles.

레지스터 커미트먼트 처리량을 증가시키기 위해, 오퍼레이션 레지스터 기록은 열 5내의 모든 오퍼레이션의 레지스터 커미트먼트가 완료할 때 열 4로부터 실행된다. 이는 열 5내의 4개의 오퍼레이션 도는 열 4의 네 개의 오퍼레이션을 고려하기 위한 RegOp 기록 가능 논리를 일반화함으로써 이루어진다. 선택된 열의 오퍼레이션은 Op23으로부터 Op20 또는 Op19로부터 Op16을 대신하여 "OpA"로부터 "OpD" 로 명명된다. 표B.53은 레지스터 파일(290)로의 커미트먼트용 결과를 선택하는 논리를 나타낸다.To increase register commitment throughput, operation register writes are executed from column 4 when the register commitments of all operations in column 5 complete. This is done by generalizing the RegOp writeable logic to account for four operations in column 5 or four operations in column 4. The operation of the selected column is named "OpA" to "OpD" in place of Op20 from Op23 or Op16 from Op19. Table B.53 shows the logic for selecting the results for commitment to register file 290.

Ⅷ.A.2 스테이터스 플래그 커미트먼트A.A.2 Status flag commitment

OCU(260)은 또한 ".cc" RegOp에 의해 생성되는 스테이터스 플래그 결과의 아키텍춰럴 EFlag 레지스터로의 커미트먼트를 제어하고 관리한다. 레지스터 결과의 커미트먼트와는 다르게, 열 5로부터의 오퍼레이션의 스테이터스 플래그 결과의 어느것도(4개까지) 열 5내의 Op 쿼드가 철회되거나 탈출하려고 할 때까지 EFlag로 기록되지 않는다. 정상적인 경우, Op 쿼드내 모든 오퍼레이션이 완전히 커미트되거나 충분히 커미트되는 중이라면, 누적하는 또는 모든 4내의 스테이터스 결과의 실행된 전체적인 결과는 Op 쿼드가 스케쥴러(280)로부터 철회될 때 EFlag로 사이클의 마지막에 기록된다. 포울팅 오퍼레이션 또는 잘못 예측된 BRCOND을 포함하는 Op 쿼드를 위해, 포울팅 지시 또는 BRCOND 이전의 오퍼레이션으로부터의 스테이터스 결과만이 커미트되고 누적 결과는 사이클 탈출 동안 또는 사이클 탈출 마지막에 기록된다.The OCU 260 also controls and manages the commitment of the status flag result generated by the ".cc" RegOp to the architectural EFlag register. Unlike the commitment of the register result, none of the status flag results of the operation from column 5 (up to four) are written to the EFlag until the Op quad in column 5 is withdrawn or tries to escape. Normally, if all operations in an Op quad are fully committed or fully committed, the executed overall result of cumulative or status results within all fours is recorded at the end of the cycle with EFlag when the Op quad is withdrawn from scheduler 280 do. For an op quad containing a fouling operation or an incorrectly predicted BRCOND, only the status result from the fouling instruction or the operation before BRCOND is committed and the cumulative result is recorded during the cycle escape or at the end of the cycle escape.

이 프로세스는 x86 아키텍춰럴 스테이터스 플래그 뿐만아니라 마이크로-아키텍춰럴 스테이터스 플래그(EZF 및 ECF)에 적용된다. 특히, 아키텍춰럴 EFlag 레지스터는 34비트로 확장되어 여분의 두 개의 스테이터스 플래그를 위한 공간을 만든다. RDFGLG 및 WRFLG RegOp는 이 확장된 EFlag 레지스터의 표준 32-비트 부분을 참고로 한다.This process applies to the micro-architecture status flags (EZF and ECF) as well as the x86 architectural status flags. In particular, the architectural EFlag register is extended to 34 bits to make room for the two extra status flags. RDFGLG and WRFLG RegOp refer to the standard 32-bit portion of this extended EFlag register.

누적 스테이터스 결과의 생성은 하부열내의 4개의 엔트리의 각각으로부터의 스테이터스 비트 마크(StatMod[3:0])에 기초한다. 8개의 스테이터스 플래그는 8개의 개개의 비트마크를 갖는 대신에 수정 프로세스를 위해 4개의 그룹으로 분리된다. 레지스터 파일내 일반적인 레지스터 업데이트함으로써, 경쟁 존재의 가능성 즉 스테이터스 플래그의 동일 그룹으로의 다중 수정의 가능성이 있다. 요구되는 결과는 스테이터스 플래그의 각 그룹의 최신의 수정 값이다.The generation of the cumulative status result is based on a status bit mark (StatMod [3: 0]) from each of the four entries in the lower column. The eight status flags are separated into four groups for the modification process instead of having eight individual bitmarks. By updating a general register in a register file, there is a possibility of contention, that is, multiple modifications to the same group of status flags. The required result is the latest revision of each group of status flags.

누적 스테이터스 결과의 생성은 또한 4개의 오퍼레이션의 각각의 완료된 스테이터스(State[3])에 기초한다. 탈출하는 Op쿼드를 위해, 필드 상태는 어느 스테이터스 결과가 커미트되어야 할 것인지 어느 것이 커미트되지 말아햐 할지 지시한다. 커미트먼트를 위해, 모든 선행 오퍼레이션은 완료되어야 하고 포울트 및 잘못 예측이 없게 된다. 표B. 54는 스테이터스 플래그 변화를 누적하는 논리를 요약한 것이다.The generation of cumulative status results is also based on each completed status State [3] of four operations. For an escaped quad, the field state indicates which status result should be committed and which should not be committed. For commitments, all preceding operations must be completed and there are no fouls and mispredictions. Table B. 54 summarizes the logic of accumulating status flag changes.

오퍼레이션 커미트먼트 및 철회에 외부로부터의 제어 또는 제한이 스테이터스 플래그 결과가 고려되는 한 요구되지 않는다. 스테이터스 플래그 변화가 RegOp로부터 나오고 모든 RegOp가 레지스터 상태 변화(심지어 t0까지)를 생성하기 때문에, Op 쿼드는 Op쿼드내 모든 RegOp가 완료되고 따라서 유효한 스테이터스 결과값을 갖을 때까지 철회될 수 없다. 스테이터스 플래그값이 (BRCOND 및 "cc-디펜던트" RegOp로)진행되면, 하부 열의 오퍼레이션의 StatMod 필드의 삭제할 필요가 없다.No external control or restriction on operation commitment and withdrawal is required as long as the status flag results are considered. Because the status flag change comes from RegOp and every RegOp produces a register state change (even up to t0), the Op quad cannot be withdrawn until all RegOp in the Op quad is completed and thus has a valid status result. If the status flag value is advanced (with BRCOND and "cc-dependent" RegOp), there is no need to delete the StatMod field of the operation in the lower column.

Ⅷ.A.3 메모리 기록 커미트먼트A.A.3 Memory Write Commitment

OCU(260)의 세 번째 기능은 "메모리"(데이터 캐쉬 및/또는 메인 메모리)로의 메노리 기록 데이터 값의 커미트먼트를 제어하는 것이다. 이는 레지스터의 커미트먼트 및 스테이터스 결과와는 여러 가지로 다르고: 메모리 기록 커미트먼트는 관련 스터어 큐 엔트리(대부분의 경우)를 포함하고; 사이클당 한 메모리 기록이 커미트되고; 커미트먼트 프로세스는 두단계 커미트 파이프라인을 갖는다. OCU(260)은 하부 두 개의 열을 스캔하여 커미트할 메모리 기록용 StOp를 찾는다.The third function of the OCU 260 is to control the commitment of the memory write data values to " memory " (data cache and / or main memory). This differs in many ways from the commitment and status results of a register: the memory write commitment includes the associated steer queue entry (in most cases); One memory write per cycle is committed; The commitment process has a two-phase commit pipeline. OCU 260 scans the bottom two rows to find the StOp for memory write to commit.

메모리 기록은 모두 StOp(실제적으로 메모리를 참고하지 않는 LEA, CIA, 및 CDA 오퍼레이션을 제외함)와 관련된다. StOp가 실행을 완료할 때, 관련 메모리 어드레스 및 스토어 데이터는 스토어 큐(270)로 들어간다. 나중에, StOp의 메모리 기록이 커미트될 때, 이 엔트리는 캐시 메모리로 판독되고 스토어 큐(270)로부터 철회된다. StOp는 스토어 큐(270)가 단순한 FIFO로 작동하도록 하기 위해 실행되고 커미트되고, 스케쥴러 StOp 와 관련된 스토어 큐 엔트리의 매칭은 자동이다.Memory writes are all related to StOp (except for LEA, CIA, and CDA operations that do not actually reference memory). When StOp completes execution, the associated memory address and store data enters store queue 270. Later, when StOp's memory write is committed, this entry is read into cache memory and withdrawn from store queue 270. StOp is executed and committed to allow store queue 270 to act as a simple FIFO, and the matching of store queue entries associated with the scheduler StOp is automatic.

실제 커미트먼트 프로세스는 보다 복잡하며 이하에서 설명하기로 한다. 일반적으로, 최종/가장 오래된 스토어 큐가 첫 번째로 판독되고 어드레스가 데이터 캐쉬(220)내에서 룩업되는 두단계 프로세스가 필요하고; 룩업의 스테이터스에 기초하고, 스토어 데이터는 데이터 캐쉬(220)안으로 및/또는 메모리로부터 기록된다. 후자의 경우, 데이터 및 어드레스는 전형적으로 단순히 기록 버퍼(Write Buffer)로 로딩되고, 나중에 메모리밖에 기록된다.The actual commitment process is more complex and will be described below. In general, a two-step process is needed where the last / oldest store queue is read first and the address is looked up in the data cache 220; Based on the status of the lookup, store data is written into the data cache 220 and / or from memory. In the latter case, data and addresses are typically simply loaded into a write buffer and later written out of memory.

두단계 기록 커미트 파이프라인에서, 첫 번째 단계(즉, 데이터 캐쉬 태그 룩업)는 레지스터의 커미트 사이클 및 스테이터스 결과에 대응되고, 즉 Op 쿼드의 포함은 단계의 사이클의 마지막에 철회될 수 있다. OCU(260)의 견지로부터, 커미트 프로세스는 성공하거나 또는 지연되는 단일 사이클/단일 단계 동작으로 생각될 수 있다. 메모리 기록의 커미트먼트는 레지스터 상태 변화와 동일한 이유로 홀드업될 수 있고, 또한 기록 커미트가 커미트 파이프의 단계 2로 들어갈수 없다면 홀드업된다. 기록이 커미트 단계 2로 들어갈 때, 관련 StOp는 스케쥴러(280)로부터 철회될 수 있고, 나머지 커미트 프로세스는 OCU(260) 및 스케쥴러(280)에 비동기된다.In a two-phase write commit pipeline, the first stage (ie, data cache tag lookup) corresponds to the commit cycle and status result of the register, i.e. the inclusion of the Op quad can be withdrawn at the end of the cycle of the stage. From the standpoint of the OCU 260, the commit process can be thought of as a single cycle / single step operation that succeeds or is delayed. The commitment of the memory write can be held up for the same reason as the change of the register state, and also held up if the write commit cannot enter step 2 of the commit pipe. When a write enters commit phase 2, the associated StOp can be withdrawn from scheduler 280, and the remaining commit processes are asynchronous to OCU 260 and scheduler 280.

첫 번째 커미트 단계동안, 제어 결정은 만들어지지 않는다. 데이터 캐쉬 태그 룩업은 실행되고, 접근된 태그 데이터는 두 번째 커미트 단계동안 검사를 위해 래치된다.During the first commit phase, no control decision is made. The data cache tag lookup is executed and the accessed tag data is latched for inspection during the second commit phase.

기록 커미트 파이프 라인은 단일 파이프라인이고 따라서 사이클당 하나의 메모리 기록의 커미트먼트를 서포트한다. 하나의 메모리-기록 StOp를 포함하는 Op쿼드를 위해, 이는 각 사이클의 가능한 Op 쿼드의 철회 및 커미트먼트를 허용한다( 레지스터 상태 변화의 커미트먼트로부터 나오는 동일한 경고와 동일한 종류를 받는). 두 개, 세 개 또는 네 개의 StOp를 포함하는 Op 쿼드를 위해, 대응하는 최소수의 사이클이 적어도 그와 같은 수의 사이클동안 스케쥴러(280)의 하부에 잔류하도록 하는 Op 쿼드를 커미트하기 위해 필요로 한다. 열 5 또는 열 4의 StOp와 관련된 메모리 기록의 커미팅은 Op 쿼드내 다중 StOp에 의해 야기되는 홀드업을 감소시킨다. 그 메모리 기록이 순서대로 커미트되면, OCU(260)은 하부 Op 쿼드가 홀드업될 때 다중 기록 Op 쿼드상에 "헤드 스타트"를 얻을 수 있고, 그렇지 않다면 커미트되지 않은 메모리 기록의 공간 또는 하부 Op 쿼드는 단지 StOp를 포함하지 않는다. 이는 사이클당 OCU의 하나의 기록 커미트먼트 용량을 Op 쿼드당 1보다 작은 Op 쿼드당 평균 기록의 수와 보다 잘 매치하는데 도움을 준다.The write commit pipeline is a single pipeline and therefore supports the commitment of one memory write per cycle. For an Op quad containing one memory-write StOp, this allows for the withdrawal and commitment of the possible Op quads of each cycle (receiving the same kind as the same warning coming from the commitment of the register state change). For Op quads that contain two, three, or four StOp, it is necessary to commit the Op quads so that the corresponding minimum number of cycles remain at the bottom of the scheduler 280 for at least that number of cycles. do. The committing of the memory writes associated with the StOp in column 5 or column 4 reduces the holdup caused by multiple StOp in the Op quad. If the memory writes are committed in order, the OCU 260 can get a “head start” on the multi-write op quad when the bottom op quad is held up, otherwise the space of the uncommitted memory write or the bottom op quad Does not just contain StOp. This helps to better match one write commitment capacity of the OCU per cycle with the average number of writes per op quad less than one per op quad.

각 사이클동안, OCU의 메모리 기록 커미트 논리는 가장 오래된 커미트되지 않은 메모리-기록 StOp(즉,다음의 StOp 및 커미트하려고 하는 기록에 관련된 것을 위한)를 찾는다. 선택된 오퍼레이션은 현재 하부/가장 오래된 스토어 큐 엔트리를 생성한다. 동시에, 오퍼레이션을 선택함으로써, 가장 오래된 스토어 큐 엔트리의 어드레스는 데이터 캐쉬에 주어지고 태그 룩업이 시작된다. 이는 "블라인드하게" 즉 관련 StOp가 실제로 커미트 가능하게 나타나는지에 관계없이 실행됨에 주의하여야 한다.During each cycle, the OCU's memory write commit logic finds the oldest uncommitted memory-write StOp (ie, related to the next StOp and the write to be committed). The selected operation creates the current lower / oldest store queue entry. At the same time, by selecting the operation, the address of the oldest store queue entry is given to the data cache and the tag lookup begins. Note that this is done "blind", ie regardless of whether the associated StOp actually appears commitable.

선택된 StOp가 커미트가능하고 기록 커미트가 두 번째 기록 커미트 단계로 진행가능하다면, OCU(260)은 StOp가 커미트되어야 한다고 생각한다. 다음 사이클에서, OCU(260)은 다음 메모리-기록 StOp를 찾는다. StOp 커미트먼트의 기준은 레지스터 결과 커미트먼트와 동일하고: 선택된 StOp는 완료되어야 하고, 모든 선행/오래된 Op 쿼드(그리고 이 StOp가 최종열에 있으면 선행 Op 쿼드)내 LdStOp는 또한 완료되어야 하고, 선행/오래된 잘못 예측된 BRCOND이 없어야만 한다. 기록 커미트는 커미트 단계 2로 그 단계가 비워졌거나 충분히 기록의 커미트먼트를 완료할 때 진행할 수 있다.If the selected StOp is commitable and the write commit can proceed to the second write commit step, the OCU 260 thinks that StOp should be committed. In the next cycle, the OCU 260 finds the next memory-write StOp. The criterion of the StOp commitment is the same as the register result commitment: the selected StOp must be completed, the LdStOp in all preceding / old Op quads (and the preceding Op quad if this StOp is in the last column) must also be completed, and the preceding / old wrong prediction There should be no BRCOND. Write commit can proceed when commit phase 2 has been emptied or has fully completed the commitment of recording.

선택된 StOp가 그것이 완료되지 않았기 때문에 커미트가능하지 않다면, OCU(260)은 StOP가 그 단계내에 검지된 포울트 조건으로 "스턱"되었는지 지시하는 두 번째 SU 실행 단계로부터의 신호를 검사한다. 그러한 오퍼레이션이 있으면, OCU(260)가 커미트하려고 하는 것은 동일 StOp 이고, 따라서 OCU(260)에 의해 탈출되어야 한다. 적절한 탈출 사이클이 StOp가 하부열내에 있을때까지 시작하지 않고, Op 쿼드내 모든 선행 오퍼레이션은 커미트되고 , 선행 BRCOND은 잘못 예측되지 않는다. 이는 본질적으로 커미트 가능한 StOp의 확장 조건이다. 한편, OCU(260)은 탈출 사이클이 시작할때까지 선행 오퍼레이션동안 이 상태로 남아있는다.If the selected StOp is not commitable because it is not completed, the OCU 260 checks the signal from the second SU execution step, indicating whether the StOP has "stuck" into the foul condition detected in that step. If there is such an operation, it is the same StOp that the OCU 260 attempts to commit, and therefore must be escaped by the OCU 260. The proper escape cycle does not start until StOp is in the bottom row, all preceding operations in the Op quad are committed, and the preceding BRCOND is not predicted incorrectly. This is essentially a committable extension of StOp. OCU 260, on the other hand, remains in this state for a preceding operation until the escape cycle begins.

OCU(260)는 주로 메모리-입력 StOps와 관계가 있지만, 상기 연산은 OCU(260)가 검지되고 커밋되어야하는 폴트가능한 메모리 주소를 발생하기 때문에 핸들 CIA 및 CDA 연산과는 관계가 없다. 폴트-프리를 실행하는 연산과 같은 일반적인 경우에, OCU(260)는 다음 사이클에서 다음 StOp를 커밋하기 위해 움직이고 연산 실행에의해 사이클을 조금 소비한다. 연산이 실행되는 동안 저장 큐 엔트리가 발생되기 때문에 엔트리는 저장 큐로부터 중단되지 않는다. 만약 CIA 및 CDA 연산이 실행되는 동안 폴트가 제거된다면, 제 2 SU 실행 스테이지에서 연산이 "스턱"되고 OCU(260)은 다른 StOps처럼 동일한 형태로 정확하게 중단된다.OCU 260 is primarily related to memory-input StOps, but the operation is not related to handle CIA and CDA operations since OCU 260 generates a faultable memory address that must be detected and committed. In a typical case, such as an operation that executes fault-free, the OCU 260 moves to commit the next StOp in the next cycle and consumes a little cycle by the execution of the operation. Because a store queue entry occurs while the operation is running, the entry is not suspended from the store queue. If the fault is cleared while the CIA and CDA operations are being executed, the operation is "stuck" at the second SU execution stage and the OCU 260 stops exactly in the same form as other StOps.

StOp의 메모리 참조가 얼라인먼트 경계(현재 8 바이트)를 가로지르고 두 개의 연관 저장 순서 엔트리를 가지는 두 개의 메모리 입력으로 저장 유닛(252)에 의해 분리될 때 OCU(260)의 제 2 특별 상황이 발생한다. 상기 상황에서, OCU(260)는 제 2 사이클까지 StOp를 표면적으로 커밋하지는 않고 두 개의 저장 큐 엔트리를 중단하기 위해 두 사이클을 취한다. 만약 StOp가 폴트를 가진다면, 어떤 저장 큐 엔트리의 중단없이도 중지된다.A second special situation of OCU 260 occurs when StOp's memory reference is separated by storage unit 252 into two memory inputs that cross an alignment boundary (currently 8 bytes) and have two associated storage order entries. . In this situation, the OCU 260 takes two cycles to abort two storage queue entries without apparently committing StOp until the second cycle. If StOp has a fault, it stops without interrupting any stored queue entries.

OCU(260)의 모범 실시예는 최후 두 열내의 커밋팅 메모리-입력 StOp의 OCU 진행을 나타내는 매스크 비트(CmtMask[7:0])를 사용한다. 8개의 매스크 비트 CmtMask[7:0]의 각각은 최후 두 열내의 8 엔트리에 대응한다. 비트(비트 0부터 출발)의 제 1 세트는 최후 클리어 비트에 대응하는 엔트리에 StOps를 커밋하고 대응 엔트리를 검색하는 OCU(260)를 정확히 지시한다. 최후 클리어 비트에 대응하는 엔트리는 커밋되어지는 다음 StOp를 포함한다. 세트 매스크 비트에 대응하는 엔트리들은 커밋가능한 StOp를 위해 검색되어진다. OCU(260)는 커밋되지않은 메모리-입력 StOps를 포함하는 최후의 두 열에서 엔트리를 지시하는 비트(UncmtStOp[7:0])를 지속한다.The exemplary embodiment of the OCU 260 uses a mask bit (CmtMask [7: 0]) indicating the OCU progression of the committing memory-input StOp in the last two columns. Each of the eight mask bits CmtMask [7: 0] corresponds to eight entries in the last two columns. The first set of bits (starting at bit 0) correctly instructs the OCU 260 to commit StOps to the entry corresponding to the last clear bit and retrieve the corresponding entry. The entry corresponding to the last clear bit contains the next StOp that is committed. The entries corresponding to the set mask bits are retrieved for commitable StOp. OCU 260 persists the bits (UncmtStOp [7: 0]) indicating entries in the last two columns that contain uncommitted memory-input StOps.

각 사이클동안, OCU(260)는 다음 예정에 없던 StOp를 선택하고, 상기 StOp를 포함하는 엔트리에 근거한 매스크 비트의 새로운 세트를 발생한다. 매스크되지 않은 엔트리들은 선택된 StOp가 현재 커밋가능거나 중지 사이클은 시작되는 것이 필요한지를 결정하기 위해 검사된다. 만약 선택된 StOp가 커밋 가능하고 커밋 파이프라인의 스테이지(2)가 사이클의 단부에서 새로운 입력 커밋을 수용하기에 가능하다. UncmtStOp 비트는 최후 두 열의 시프트를 매치하기 위해 업데이트/시프트된다. 부록 B의 표 B.55는 상기 논리를 기술한다.During each cycle, the OCU 260 selects a StOp that was not next scheduled and generates a new set of mask bits based on the entry containing the StOp. Unmasked entries are checked to determine if the selected StOp is currently commitable or a pause cycle needs to be started. If the selected StOp is commitable and the stage 2 of the commit pipeline is available to accept new input commits at the end of the cycle. The UncmtStOp bit is updated / shifted to match the shift of the last two columns. Table B.55 in Appendix B describes the logic.

Ⅷ.B. Op Quad 종료Ⅷ.B. Op Quad Exit

스케쥴러(280)의 바닥 열내에서 모든 연산의 중지가능 상태 변경이 발생되었을 때 또는 연속적으로 발생중일 때, DCU(260)는 사이클의 끝에서 스케쥴러(280)로부터 Op quad를 종료한다. 이는 다음 Op quad가 스케쥴러(280)의 바닥열로 시프트하게 한다. 상기 모든 연산 결과가 발생하는 것은 아닌 사이클내에서 Op quad가 종료되지 않고, 실행 프로세싱을 위해 유지되거나 사이클을 중지하기 위해 무효가 된다. 만약 무효가 된다면 중지 사이클은 열(5)내의 연산중 하나에서 인식되어지는 오류에 따른다.When a stopable state change of all operations has occurred or is occurring continuously in the bottom row of scheduler 280, DCU 260 terminates the Op quad from scheduler 280 at the end of the cycle. This causes the next Op quad to shift to the bottom row of the scheduler 280. Op quads are not terminated within a cycle in which not all the computational results occur, and are maintained for execution processing or invalidated to stop the cycle. If invalid, the stop cycle is subject to an error that is recognized by one of the operations in column 5.

특히, Op quad의 종료는 모든 레지스터 결과, 스테이터스 결과 및 실행된 메모리 입력을 종료하고, Op quad내에 잘못 예언된 BRCOND 또는 FAULT 연산은 없다. 만약 Op quad가 무효로 마크된다면 Op quad의 종료 또한 즉시 발생한다. 스케쥴러의 시프트 제어 논리는 이를 자동적으로 처리한다. 스테이터스 결과는 Op quad의 종료(또는 중지)와 관련하여 모두 실행된다. 표 B.56은 Op quad의 종료를 위해 OCU(260)내의 회로를 나타낸다.In particular, the termination of the Op quad terminates all register results, status results, and executed memory inputs, and there are no mispredicted BRCOND or FAULT operations in the Op quad. If the Op quad is marked as invalid, the termination of the Op quad also occurs immediately. The scheduler's shift control logic handles this automatically. Status results are all performed in relation to the termination (or stop) of the op quad. Table B.56 shows the circuitry in the OCU 260 for the termination of the op quad.

Ⅷ.C. 폴트 조정Ⅷ.C. Fault adjustment

Ⅷ.C.1. 로드 연산 폴트 조정Ⅷ.C.1. Load calculation fault adjustment

LdOps는 일반적으로 레지스터 스테이트 변경에만 기인하기 때문에 LdOps는 OCU(260)에 의한 어떤 특별한 조정을 필요로하지 않는다. 대부분의 StOps처럼, LdOps도 실행되는 동안 오류를 만날 수 있다. OCU(260)내의 특별한 논리는 LdOps 폴트와 같은 방법으로 LdOps 폴트를 인식하고 조정한다. 폴팅 LdOp가 스케쥴러(280)의 바닥열에 존재하는 지를 결정하기 위해, OCU(260)는 완성되고 실행되는 선행/오래된 연산을 가지는 LdOp인 연산을 위한 열(5)을 검색하고, 선행 잘못예언된 BRCOND는 아니다. OCU(260)는, 검지된 폴트 상태를 가지는 LdOp가 LU 파이프라인의 제 2 실행 스테이지의 "스턱"인지를 가리키는 로드 유닛(251)으로부터 신호를 검사한다.LdOps does not require any special adjustments by the OCU 260 because LdOps are generally due to register state changes only. Like most StOps, LdOps may encounter errors while running. Special logic in the OCU 260 recognizes and handles LdOps faults in the same way as LdOps faults. To determine if a faulting LdOp exists in the bottom column of the scheduler 280, the OCU 260 retrieves the column 5 for the operation that is the LdOp with the previous / old operation completed and executed, and the preceding mispredicted BRCOND. Is not. The OCU 260 checks the signal from the load unit 251 indicating whether the LdOp with the detected fault condition is a "stuck" of the second execution stage of the LU pipeline.

만약 삽입된 LU 스테이지로부터 신호와 연산을 실행하고 완성함으로써 열(5)내의 LdOp가 완성되지 않고 진행한다면, OCU(260)는 폴팅 LdOp를 인식하고 다음 연산과 LdOp를 중지하기 위해 즉시 적당한 중지 사이클을 시작한다. 표 B.57은 OCU의 LdOp 폴팅 조정 논리를 나타낸다.If the LdOp in column (5) proceeds without completion by executing and completing signals and operations from the inserted LU stage, the OCU 260 recognizes the faulting LdOp and immediately takes the appropriate stop cycle to stop the next operation and LdOp. To start. Table B.57 shows the LdOp fault adjustment logic of the OCU.

Ⅷ.C.2. FAULT 및 LDDHA/LDAHA 연산 조정C.C.2. Tuning FAULT and LDDHA / LDAHA Operations

약간의 특별한 연산, FAULT, LDDHA 및 LDAHA 연산은 부가적이고 특별한 실행 조정을 필요로한다. 이들 연산중 어떠한 것도 실행 유닛에 의해 실행되어지거나 이슈되지 않는다. FAULT, LDDHA 및 LDAHA 연산은 다른 연산에 의존한 실행을 하지 않고 단지 OCU(260)에 대해서만 중요하다.Some special operations, FAULT, LDDHA and LDAHA operations require additional and special execution tuning. None of these operations are executed or issued by the execution unit. FAULT, LDDHA, and LDAHA operations are important only for the OCU 260 without having to perform execution dependent on other operations.

OCU(260)는 폴팅 LdStOp와 같은 FAULT 연산을 조정한다. 중지 사이클은 현재 코드된 OCU 폴트 핸들러로 인도하는 것에 따라 시작된다. 폴팅 LdStOp와 달리, 인식하기 위한 폴트가 있는지 그리고 언제 중지 사이클이 시작되는 이슈는 없다. 조정 FAULT 연산을 위한 OCU의 논리를 간단히 하기 위해, 다음 구속이 디코더(240, 510)상에 가해진다 : 1)FAULT 연산은 Op quad의 제 1 연산 위치에 있어야하고, 2)Op quad내의 다음 연산은 "NO-OPs"(즉 LDK t0,xx) 및 3)이어야 하고, 3)다음 Op quad는 메모리-입력 StOps를 포함하지 않아야 한다. 다음 Op quad로부터 금지 메모리-입력 StOps는 어떤 특별한 고려 없이도 "FAULT" Op quad상에 작동가능한 다른 OCU실행 논리를 확실하게 한다.OCU 260 coordinates FAULT operations such as faulting LdStOp. The stop cycle begins by leading to the currently coded OCU fault handler. Unlike Fault LdStOp, there is no issue to recognize when there is a fault and when the pause cycle begins. To simplify the logic of the OCU for coordinating FAULT operations, the following constraints are applied on decoders 240 and 510: 1) The FAULT operation must be at the first operation position of the op quad, and 2) the next operation in the op quad. Must be "NO-OPs" (ie LDK t0, xx) and 3), and 3) the next Op quad must not contain memory-input StOps. Forbidden memory-input StOps from the next op quad ensures other OCU execution logic that can operate on the "FAULT" op quad without any special consideration.

FAULT 연산의 스테이터스는 스케쥴러(280)로 로드될 때 'b0000"로 시작된다. FAULT 연산이 열(5)에 도달할 때, FAULT 연산의 불완전한 상태는 Op quad를 중단함으로써 OCU의 Op quad 종료 논리를 금지하고, OCU(260) FAULT 연산 실행 논리는 중지 사이클을 시작한다. 중지 사이클의 특성은 LdStOps상의 폴트와 동일하다. 차이점은 단지 특이한 폴트 ID의 발생이다. 표 B.58은 FAULT 연산을 위한 중지 신호를 발생하는 논리를 나타낸다.The status of the FAULT operation begins with 'b0000' when loaded into the scheduler 280. When the FAULT operation reaches column 5, the incomplete state of the FAULT operation clears the OCU's op quad termination logic by stopping the op quad. Prohibit, OCU 260 FAULT operation execution logic starts a stop cycle The characteristics of the stop cycle are the same as the fault on LdStOps The difference is only the occurrence of a unique fault ID Table B.58 shows the stop for FAULT operations Represents the logic that generates the signal.

LDDHA/LDAHA 연산은 진로를 인도하는 OCU-인식된 익셉션인 엔코드 ROM(246)의 주소를 변경하고 설정하기 위한 엔코드를 가능하게 한다. OCU(260)는 두 개의 벡터 주소 레지스터를 보유하는데, 하나는 "디폴트" 핸들러 주소를 가지기 위한 것이고, 다른 하나는 "대안" 핸들러 주소를 가지기 위한 것이다. 제 1 벡터 주소 레지스터는 폴트에 의한 엔코드(매크로 명령과 익셉션 프로세싱 엔코드)를 위해 작용하고, LDDHA 연산(프로세서(200)는 재설정후 초기화를 위한 재설정 엔코드를 실행한다)을 경유하는 재설정 엔코드에 의해 단 한번 설정된다. 제 2 벡터 주소 레지스터는 LDAHA 연산을 경유하여 설정된다.The LDDHA / LDAHA operation enables encoding to change and set the address of the encode ROM 246, which is an OCU-aware exception that leads the course. OCU 260 holds two vector address registers, one for having a "default" handler address and the other for having a "alternative" handler address. The first vector address register acts for fault encoding (macro instruction and exception processing encoding), and reset encoder via LDDHA operation (processor 200 executes a reset encoding for initialization after reset). Set only once by The second vector address register is set via an LDAHA operation.

LDAHA 연산을 포함하지 않는 벡터 디코더(244)(ERET를 통해 엔트리 포인드로부터 정의되는)로부터 엔코드 순서를 위해, 순서내의 연산상의 OCU(260)에 의해 인식되는 폴트는 폴트 핸들러 주소 레지스터의 주소로 벡터되는 것에 기인한다. LDAHA 연산을 포함하는 엔코드 순서를 위해, LDAHA 연산을 포함하는 것 전에 Op quad에서 연산상의 폴트는 디폴트 주소에 벡터되는 것에 기인한다 : 그러나 Op quad 연산 상의 폴트는 LDAHA 연산 또는 다음 Op quad를 포함하고 엔코드 순서의 마지막 quad를 포함하고, 제 2 벡터 주소 레지스터의 주소에 벡터되는 것에 기인한다. LDAHA 연산의 다음 발생때까지 "ERET" Op quad의 종료는 다음 연산을 위한 디폴트 핸들러 주소 레지스터를 효과적으로 재활성화한다. 중지 사이클의 발생 또한 디폴트 핸들러 주소 레지스터를 재활성화한다.For the encoding order from the vector decoder 244 (defined from the entry point via ERET) that does not include the LDAHA operation, the fault recognized by the OCU 260 on the operations in the sequence is the vector to the address of the fault handler address register. Due to being. For an encoding sequence that includes an LDAHA operation, the operational fault in the Op quad prior to including the LDAHA operation is vectored to the default address: however, the fault on the Op quad operation includes the LDAHA operation or the next Op quad. It is due to being vectored to the address of the second vector address register, including the last quad of the encoding order. Termination of the "ERET" Op quad until the next occurrence of the LDAHA operation effectively reactivates the default handler address register for the next operation. The occurrence of a pause cycle also reactivates the default handler address register.

OCU(260)를 위해 문제를 간단히 하기 위해, LDDHA/LDHAH 연산은 Op quad의 가장 오래된 연산 위치에 위치하도록 강제된다. "유효" 연산은 Op quad의 다음 연산 위치에서 허용된다. 표 B.59는 OCU의 LDDHA/LDAHA 연산 핸들링 논리를 나타낸다.To simplify the problem for the OCU 260, the LDDHA / LDHAH operation is forced to be at the oldest operation position of the Op quad. "Valid" operations are allowed at the next operation position of the op quad. Table B.59 shows the LDDHA / LDAHA operation handling logic of the OCU.

Ⅷ.C.3. 타겟 한계 위배 핸들링C.C.3. Target Limit Violation Handling

Op quad내의 각 연산과 연관한 스테이트 변경의 실행에 부가하여, OCU(260) 또한, 전체로써 Op quad를 위해 표시된 특별한 상태를 인식한다. MacDec(260)가 전위 제어 명령을 디코드할 때, 그리고 코드 세그먼트 한계 위배가 타켓 주소상에 검지될 때(MacDec이 Op quad를 발생하고, Op quad가 스케쥴러(280)로 위치되어진 후), Op quad는 Op quad과 관련하여 검지되는 위배와 같은 것을 가리키도록 마크된다.In addition to the execution of state changes associated with each operation in the op quad, the OCU 260 also recognizes the special state indicated for the op quad as a whole. When the MacDec 260 decodes a potential control command, and when a code segment limit violation is detected on the target address (after MacDec generates an Op quad and the Op quad is placed into the scheduler 280), the Op quad. Is marked to indicate something like a violation detected with respect to the op quad.

Op quad가 OCU(260)에 도달하고 실행되어질 때, 설정 태그 비트는 인식되고 중지 사이클은 Op quad내의 연산으로부터 어떤 스테이트 변경의 실행없이도 시작된다. 효과적이게도 전체 Op quad는 폴트된다. 만약 FAULT 연산이 Op quad에 있다면 효과는 유사하다. 표 B.60은 브랜치 타겟 한계 위배를 핸들링하기 위한 논리를 나타낸다.When the op quad reaches the OCU 260 and is executed, the set tag bit is recognized and the stop cycle begins without executing any state change from the operation in the op quad. Effectively, the entire op quad is faulted. If the FAULT operation is on the op quad, the effect is similar. Table B.60 shows the logic for handling branch target limit violations.

Ⅷ.C.4. 잘못예언된 브랜치 핸들링C.C.4. Mispredicted Branch Handling

다양한 특별 경우의 핸들링과 중지 가능 스테이트 변경의 실행외에도, OCU(260)는 잘못예언된 BRCONDs를 위한 중지 사이클의 발생을 조정한다. 상술한 바와 같이, 명령 패치와 디코더 영역의 재시작은 BRCOND가 스케쥴러(280)의 바닥에 도달하기 전에 발생된다. 스케쥴러(280)는 결과적으로 중지를 발생하고, 단지 실행되는 선행 연산만이 확실시된다. 연산 폴트를 위한 중지 사이클의 발생 때문에, 중지는 모든 선행 연산이 실행되어질 때까지 시작하지 않는다. 표 B.61은 잘못예언된 브랜치를 위한 중지를 발생하는 논리를 나타낸다.In addition to the handling of various special cases and the execution of a stopable state change, the OCU 260 coordinates the occurrence of stop cycles for mispredicted BRCONDs. As discussed above, restarting of the command patch and decoder region occurs before BRCOND reaches the bottom of the scheduler 280. The scheduler 280 results in a stop as a result, and only the preceding operation to be executed is guaranteed. Because of the occurrence of a stop cycle for an operation fault, the stop does not start until all preceding operations have been executed. Table B.61 shows the logic for generating a break for a mispredicted branch.

Ⅷ.D. 중지 사이클 발생Ⅷ.D. Stop cycle occurs

OCU(260)은 두 가지 상황 : Op 폴트의 인식(LdStOp 또는 FAULT상에서)과 잘못예언된 BRCOND의 인식에서 중지 사이클을 발생한다. 앞부분 섹션과 표 B.55, B.57, B.58 및 B.61은 중지 사이클(예를 들면, 신호 StAbort, LdAbort, FltAbort, LimAbort 및 BrAbort)을 시작하는 신호의 발생범위에 걸친 것이다. 본 섹션은 관련 정보와 일반적인 Abort 신호의 발생을 기술한다.The OCU 260 generates stop cycles in two situations: recognition of an Op fault (on LdStOp or FAULT) and recognition of an incorrectly predicted BRCOND. The preceding section and Tables B.55, B.57, B.58, and B.61 span the generation range of signals that initiate a pause cycle (eg, signals StAbort, LdAbort, FltAbort, LimAbort, and BrAbort). This section describes relevant information and the generation of generic Abort signals.

Abort 신호는 연산이나 스테이트 변경의 특별한 형태의 실행과 관련한 개별적인 중지 신호의 조합이다. BRCOND 관련 중지가 아니라 단지 폴트 관련 중지에 의해서만 정의되는 관련 엔코드 벡터 주소는 상기에 기술된 것과 같은 FltVecAddr이다. 중지 신호는 모든 특별한 연산의 스케쥴러(280)와 모든 실행 유닛(251부터 257까지)을 플러쉬하고, 명령 디코더(240)로부터 새로운 연산을 검지하기 위한 준비로 이들 영역을 재초기화한다. BRCOND 관련 중지를 위해, 브랜치 평가 유닛(257)이 명령 디코더(240)와 x86 매크로 명령 패치 및 엔코드를 사전에 재시작하기 때문에 이것으로 충분하다.The Abort signal is a combination of individual stop signals associated with the execution of a particular type of operation or state change. The associated encode vector address, which is defined only by the fault related stop and not by the BRCOND related stop, is FltVecAddr as described above. The stop signal flushes the scheduler 280 and all execution units 251 to 257 of all special operations and reinitializes these areas in preparation for detecting new operations from the instruction decoder 240. This is sufficient because the branch evaluation unit 257 restarts the instruction decoder 240 and x86 macro instruction patches and encodes in advance for the BRCOND related stops.

익셉션 관련 중지를 위해, 명령 디코더(240) 또한 폴트 핸들러 주소에서 재시작되어야 할 필요가 있다. 명령 패치/디코드가 잘못예언된 BRCOND와 연산 익셉션을 위해 동시에 재시작될 때, 연산 익셉션은 큰 선행권이 주어진다. 적당한 재시작 신호의 발생과 재시작을 위한 벡터 주소는 적절히 발생한다. 폴트 관련 중지가 발생할 때, OCU(260) 또한 폴트에 대한 정보를 입수하는데, 즉 x86 매크로 명령 프로그램은 (효과적으로 폴트되는 x86 명령들의 논리 주소를) 레지스터 SR4로 입수한다. 표 B.62는 OCU 중지 사이클 발생 논리를 나타낸다.For an exception related stop, the instruction decoder 240 also needs to be restarted at the fault handler address. When an instruction patch / decode is restarted at the same time for an incorrectly predicted BRCOND and operation exception, the operation exception is given a large precedence. The generation of the appropriate restart signal and the vector address for the restart occur appropriately. When a fault related stop occurs, the OCU 260 also obtains information about the fault, that is, the x86 macro instruction program obtains the logical address of the x86 instructions that are effectively faulted into register SR4. Table B.62 shows the logic for generating OCU stop cycles.

Ⅸ. 프로세싱 시스템Iii. Processing system

본 발명의 실시예는 광범위하고 다양한 프로세싱 시스템을 포함하는데, 실질적으로 독립형 및 네트워크형 퍼스널 컴퓨터 시스템, 워크스테이션 시스템, 멀티미디어 시스템, 네트워크 서버 시스템, 멀티프로세서 시스템, 매입형 시스템, 인티그레이티드 전화기술 시스템 및 화상 회의 시스템을 포함한다. 도 11A에서 11C까지는, 버스 구성, 메모리 계층과 캐시 구성, I/O 인터페이스, 제어기, 장치 및 주변 요소를 구비한 본 발명에 따라 수퍼스칼라 프로세서(200)를 결합하는 프로세싱 시스템의 도식적 세트를 묘사한다. 도 11A에서 11A까지에는 프로세싱 시스템의 세트가 도시되어 있다. 수퍼스칼라 프로세서(200)를 통합하는 시스템을 위한 적당한 형태는 다음과 같은 요소, 카드, 인터페이스 및 장치를 포함한다:Embodiments of the present invention include a wide variety of processing systems, including substantially standalone and networked personal computer systems, workstation systems, multimedia systems, network server systems, multiprocessor systems, embedded systems, integrated telephone technology systems. And video conferencing systems. 11A-11C depict a schematic set of processing systems incorporating a superscalar processor 200 in accordance with the present invention having a bus configuration, memory hierarchy and cache configuration, I / O interfaces, controllers, devices and peripheral elements. . 11A through 11A illustrate a set of processing systems. Suitable forms for systems incorporating superscalar processor 200 include the following elements, cards, interfaces, and devices:

1. 화상 표시 장치, 모니터, 평면 표시 및 터치 스크린;1. Image display device, monitor, flat display and touch screen;

2. 포인팅 장치와 키보드;2. pointing device and keyboard;

3. 상호-프로세서, 플로팅 포인트 프로세서, 그래픽 프로세서, I/O 제어기 및 UARTs;3. inter-processors, floating point processors, graphics processors, I / O controllers and UARTs;

4. 2차와 3차 저장 장치, 제어기 및 인터페이스, 캐시, RAM, ROM, 플래시 메모리, 스태틱 RAM, 다이나믹 RMA;4. secondary and tertiary storage, controllers and interfaces, cache, RAM, ROM, flash memory, static RAM, dynamic RMA;

5. CD-ROM, 고정된 디스크, 이동가능 미디어 저장 장치, 플로피 디스크, WORMs, IDE 제어기, 증속-IDE 제어기, SCSI 장치, 스캐너 및 쥬크 박스;5. CD-ROM, fixed disk, removable media storage device, floppy disk, WORMs, IDE controller, speed-IDE controller, SCSI device, scanner and juke box;

6. PCMCIA 인터페이스와 장치, ISA 버스와 장치, EISA 버스와 장치, PCI 로컬 버스와 장치, VESA 로컬 버스와 장치, 마이크로 채널 아키텍쳐 버스와 장치;6. PCMCIA interfaces and devices, ISA buses and devices, EISA buses and devices, PCI local buses and devices, VESA local buses and devices, micro channel architecture buses and devices;

7. 네트워크 인터페이스, 이서네트와 같은 것을 위한 카드와 어댑터, 토큰 링, 10 베이스-T, 트위스트된 쌍, 언트위스티드된 쌍, ATM 네트워크, 프레임 계전기, ISDN 등;7. Network interfaces, cards and adapters for things like Ethernet, token rings, 10 base-T, twisted pairs, untwisted pairs, ATM networks, frame relays, ISDN, etc .;

8. 비디오 카드와 장치, 2-D와 3-D 그래픽 카드, 프레임 버퍼, MPEG/JPEG 압축/비압축 논리와 장치, 화상 회의 카드와 장치, 및 비디오 카메라와 프레임 캡쳐 장치;8. Video cards and devices, 2-D and 3-D graphics cards, frame buffers, MPEG / JPEG compressed / uncompressed logic and devices, video conferencing cards and devices, and video cameras and frame capture devices;

9. 팩스 카드와 장치, 모뎀 카드와 장치, 전화 기술 카드와 장치를 통합한 컴퓨터;9. Computers incorporating fax cards and devices, modem cards and devices, telephone technology cards and devices;

10. 사운드 카드와 장치, 오디오와 비디오 입력 장치, 마이크로폰, 및 스피커;10. sound cards and devices, audio and video input devices, microphones, and speakers;

11. 데이터 획득과 제어 카드와 인터페이스, 압축/비압축 논리와 장치, 암호/암호해독 논리와 장치; 및11. Data acquisition and control cards and interfaces, compressed and uncompressed logic and devices, encryption and decryption logic and devices; And

12. 테이프 백업 유닛, RAID와 ECC 메모리와 같은 잉여/디폴트 허용 요소와 장치.12. Redundant / default allowable elements and devices such as tape backup units, RAID, and ECC memory.

상기 요소, 카드, 인터페이스 및 장치(상기에 열거된 비교할 수 있는 요소, 카드, 인터페이스 및 장치를 포함한다)의 적당한 조합은 열거하기에 너무 많다.There are too many suitable combinations of the elements, cards, interfaces and devices (including comparable elements, cards, interfaces and devices listed above).

수퍼스칼라 프로세서(200)를 통합하는 네트워크된 퍼스널 컴퓨터(100)는 도 11A에 도시되어 있다. 수퍼스칼라 프로세서(200)는 메모리 서브시스템(120)에 연결되어 있다. 메모리 서브시스템(120)은 RAM으로써 도시되지만, 대안 실시예는 RAM과 수퍼스칼라 프로세서(200)사이에 삽입된 하나의 캐시나 캐시들을 포함한다. 수퍼스칼라 프로세서(200)와 메모리 서브시스템(120)은 컴퓨터(100)의 마더보드(101)의 일부로써 포함된다. 일련의 어댑터, 인터페이스 및 제어기는 장치와 주변 요소로 프로세서(200)를 연결한다. 상기 어댑터, 인터페이스 및 제어기는 마더보드(101)의 백플레인 버스에서 카드로써 프로세서(200)에 전형적으로 결합되어진다. 그러나, 대안 실시예는 개개의 어댑터, 인터페이스 및 제어기를 마더보드(101)로 통합할 수 있다. 병렬 인터페이스(109)와 시리얼 인터페이스(108)는 각각 병렬 포트 장치(예를 들면, 병렬 프린터(102)와 같은 프린터, 테이프 백업 유닛 등)와 시리얼 장치(예를 들면, 모뎀(103), 포인팅 장치 및 프린터)에 접하는 인터페이스 신호를 보내는 병렬 포트와 시리얼 포트를 제공한다. 하드 디스크/ 플로피 디스크 제어기(130)는 하드 디스크(132)와 플로피 디스크(131)로의 접근을 제어한다. LAN 어댑터(107)는, 토큰 링 네트워크와 트위스트된 쌍, 10 베이스-T 및 802.3 이서네트와 같은 로컬 에리어 네트워크에 인터페이스로 접속되는 네트워크를 구비한 컴퓨터(100)를 제공한다. 다른 어댑터와 인터페이스를 구비한 것처럼, LAN 어댑터(107)는 마더보드(101)의 백플랜 버스에서 카드로써 프로세서(200)에 결합되어진다.Networked personal computer 100 incorporating superscalar processor 200 is shown in FIG. 11A. Superscalar processor 200 is coupled to memory subsystem 120. Although memory subsystem 120 is shown as RAM, an alternative embodiment includes one cache or caches inserted between RAM and superscalar processor 200. The superscalar processor 200 and the memory subsystem 120 are included as part of the motherboard 101 of the computer 100. A series of adapters, interfaces, and controllers connect the processor 200 to the device and peripheral elements. The adapter, interface, and controller are typically coupled to the processor 200 as a card on the backplane bus of the motherboard 101. However, alternative embodiments may integrate individual adapters, interfaces, and controllers into the motherboard 101. The parallel interface 109 and the serial interface 108 are each a parallel port device (e.g., a printer such as the parallel printer 102, a tape backup unit, etc.) and a serial device (e.g., a modem 103, a pointing device). And a parallel port and a serial port for sending an interface signal to a printer). The hard disk / floppy disk controller 130 controls access to the hard disk 132 and the floppy disk 131. The LAN adapter 107 provides a computer 100 having a network that is interfaced to a twisted pair with a token ring network, local area networks such as 10 Base-T and 802.3 Ethernet. As with other adapters and interfaces, the LAN adapter 107 is coupled to the processor 200 as a card on the backplane bus of the motherboard 101.

레벨(2) 캐시(125)와 프로세서 버스(123)로 결합되어 도시될 때 도 11B에 도시된 바와 같은 네트워크 서버 구성에서 수퍼스칼라 프로세서(200)는 프로세서(200)는 프로세서 또는 다양한 프로세서 중 하나로써 특히 흥미가 있다. 각 수퍼스칼라 프로세서(200)는 프로세서 버스(123)를 경유하는 시스템 제어기(150)와 메모리 제어기(121)에 결합된다. 메모리 제어기(121)는 에러 정정 코드(ECC)를 지원하기 위한 8비트 패러티 인터페이스를 포함하는 메모리(122)에 64 비트 인터페이스를 제공한다. ECC메모리는 바람직하지만 선택적이지는 않다. 시스템 제어기(150)는 64 비트 프로세서 버스(123)와 32 비트 로컬 버스(151) 사이에 인터페이스(또는 브릿지)를 제공한다. 로컬 버스(151)는 고속 I/O 버스인데, 예를들면 VESA 로컬 버스(VL 버스) 또는 주변 요소 상호 접속(PCI) 버스이다. 시스템 제어기(150)는 프로세서 버스(123)와 로컬 버스(151)의 잠재적인 이종 클록율을 지원하기 위한 버퍼링을 제공한다. 시스템 제어기(150)는 두 개의 버스(123과 151)의 사용을 위해 중재하고, 어떤 형태에서는 두 버스를 교차하는 버스트 데이터 트랜잭션을 지원할 수도 있다. 로컬 버스(151)는 다양한 로컬 버스 장치와 요소들(실제적으로는 SCSI) 어댑터(170), IDE 제어기(180), LAN( 어댑터(157) 및 브릿지와 주변 제어기(160)에 연결된다. 표시 장치 필수품은 퍼스널 컴퓨터나 워크스테이션 구조보다 네트워크 서버 구조에서 일반적으로 적은 수리가 필요하기 때문에, 표시 어댑터(112)는 저대역폭 ISA 버스(161)에 결합되어 도시된다.In a network server configuration as shown in FIG. 11B when shown coupled to the level (2) cache 125 and the processor bus 123, the superscalar processor 200 may be a processor or a processor. Of particular interest. Each superscalar processor 200 is coupled to the system controller 150 and the memory controller 121 via the processor bus 123. The memory controller 121 provides a 64-bit interface to the memory 122 including an 8-bit parity interface for supporting error correction code (ECC). ECC memory is preferred but not optional. System controller 150 provides an interface (or bridge) between 64-bit processor bus 123 and 32-bit local bus 151. The local bus 151 is a high speed I / O bus, for example a VESA local bus (VL bus) or a peripheral element interconnect (PCI) bus. System controller 150 provides buffering to support the potential heterogeneous clock rates of processor bus 123 and local bus 151. System controller 150 may arbitrate for the use of two buses 123 and 151, and in some forms may support burst data transactions that intersect the two buses. The local bus 151 is connected to various local bus devices and elements (actually SCSI) adapters 170, IDE controllers 180, LANs (adapters 157 and bridges and peripheral controllers 160). The display adapter 112 is shown coupled to the low bandwidth ISA bus 161 because the necessity typically requires less repair in a network server architecture than a personal computer or workstation architecture.

IDE 제어기(180)는, 디스크, 테이프 드라이버 및 CD-ROM과 같은 저장 장치를 인터페이스 접속하기 위한 다양한 제어기 형태(IDE, 증진된 IDE, ATA 및 증진된 소규모 장치 인터페이스(ESDI) 제어기 형태를 포함)를 나타낸다. IDE 제어기(180)는 테이프 백업 유닛(183)과 두 개의 디스크(하드 디스크(181)와 플로피 디스크(182))에 연결된다. 대안 구조는 IDE 제어기(180)를 경유하여 IDE/증진된 IDE CD-ROM을 인터페이스 접속할 수 있지만, CD-ROM(172)과 CD 쥬크 박스(173)는 도 11B의 실시예에서 소규모 컴퓨터 시스템 인터페이스(SCSI)를 경유하여 인터페이스 접속된다.The IDE controller 180 includes various controller forms (including IDE, enhanced IDE, ATA, and enhanced small device interface (ESDI) controller forms) for interfacing storage devices such as disks, tape drivers, and CD-ROMs. Indicates. The IDE controller 180 is connected to the tape backup unit 183 and two disks (hard disk 181 and floppy disk 182). An alternative architecture may interface the IDE / enhanced IDE CD-ROM via IDE controller 180, while CD-ROM 172 and CD juke box 173 may be a small computer system interface (see FIG. 11B). Interface is connected via SCSI).

SCSI 어댑터(180)는 훌륭한 체인 구조에서 다양한 SCSI 장치(스캐너(174), CD 쥬크 박스(173), 스캐너(2016), CD-ROM(172) 및 비싸지 않은 디스크(RAID)(171)의 여분의 열)와 로컬 버스(151)로 연결된다. 실제적인 목적을 위해서, SCSI 장치의 훌륭한 체인은 도 11B에 버스로써 도시된다. LAN 어댑터(157)는 IEEE 802.x 표준(예를 들면 동축 미디어상의 802.3 베이스밴드 이서네트, 트위스트와 언트위스트된 미디어 쌍, 10 베이스-T, 802.3 광역 네트워크, 802.4 토큰 패싱 네트워크, 802.5 토큰 링 네트워크 등)에 근거한 것과 광섬유 분배 데이터 인터페이스(FDDI) 표준에 근거한 것과 같은 적당한 네트워크 어댑터를 나타낸다. ISA 버스(161)는 주변 제어기(160)와 브릿지를 경유하는 로컬 버스(151)에 연결되고 수퍼 I/O(135)와 같이 다기능 I/O 카드, 전화기술 카드(136), 표시장치 어댑터(112)를 포함하는 다양한 주변 요소를 위한 모듈러 연결과 16비트 I/O 버스를 제공한다. 슈퍼 I/O(135)는 디스크(131), 병렬 포트(139), 시리얼 포트(138) 및 포인팅 장치(137)를 위한 지원을 제공한다.SCSI adapter 180 provides a spare chain of various SCSI devices (scanner 174, CD juke box 173, scanner 2016, CD-ROM 172, and inexpensive disk (RAID) 171 in a good chain structure). Row) and the local bus 151. For practical purposes, a good chain of SCSI devices is shown as a bus in FIG. 11B. The LAN adapter 157 is an IEEE 802.x standard (e.g. 802.3 baseband ethernet on coaxial media, twisted and untwisted media pairs, 10 base-T, 802.3 wide area network, 802.4 token passing network, 802.5 token ring network). And other suitable network adapters such as those based on the Optical Fiber Distribution Data Interface (FDDI) standard. The ISA bus 161 is connected to the local bus 151 via a bridge with the peripheral controller 160 and, like the super I / O 135, has a multifunction I / O card, telephony technology card 136, display adapter ( It provides modular connections and 16-bit I / O buses for various peripheral elements, including 112). Super I / O 135 provides support for disk 131, parallel port 139, serial port 138, and pointing device 137.

슈퍼스칼라 프로세서(200)를 위한 멀티미디어 워크스테이션 구조가 도 11C에 도시되어 있다. 도 11B의 서버구조처럼, 멀티미디어 워크스테이션 구조는 장치와 거기에 연결된 요소에 각각 매치되는 다양한 실행 특성을 가지는 버스의 조직을 포함한다. 당업자라면, 도 11C의 버스 조직에서 다양한 변화가 가능하다. 메모리 버스(126)는 브릿지(129), 메모리(128), 캐시(127) 및 슈퍼스칼라 프로세서(200)를 연결한다. 도 11B의 네트워크 서버 구조에서처럼, 다양한 캐시 구조는 멀티미디어 워크스테이션에 적당하다. 로컬 버스(151)는 바람직하게도 VL 버스나 PCI 버스와 같은 고속 I/O 버스이다. SCSI 어댑터(170), LAN 어댑터(157), 그래픽 어댑터(114), 사운드 어댑터(190) 및 모션 비디오 어댑터(195)는 I/O 버스(151)를 경유하는 수퍼스칼라 프로세서(200)와 서로에 대해 연결된다. 부품, 장치와 함께 SCSI 어댑터(170), LAN 어댑터(157), 및 확장 버스 브릿지(160)는 도 11B를 참조하여 상술한 장치, 부품 및 어댑터에 대응하여 각각 비교가능하다. 특히, SCSI 어댑터(170)는 훌륭한 체인 구조에서 다양한 SCSI 장치(실제적으로 디스크(175), 테이프 백업 유닛(176) 및 CD-ROM(172))에 연결된다.The multimedia workstation architecture for the superscalar processor 200 is shown in FIG. 11C. Like the server architecture of FIG. 11B, the multimedia workstation architecture includes an organization of buses with various execution characteristics that each match a device and its associated elements. Those skilled in the art can make various changes in the bus organization of FIG. 11C. The memory bus 126 connects the bridge 129, the memory 128, the cache 127, and the superscalar processor 200. As with the network server architecture of FIG. 11B, various cache structures are suitable for multimedia workstations. The local bus 151 is preferably a high speed I / O bus, such as a VL bus or a PCI bus. The SCSI adapter 170, the LAN adapter 157, the graphics adapter 114, the sound adapter 190, and the motion video adapter 195 communicate with the superscalar processor 200 via the I / O bus 151. Is connected about. SCSI adapter 170, LAN adapter 157, and expansion bus bridge 160, along with components and devices, are comparable to the devices, components, and adapters described above with reference to FIG. 11B, respectively. In particular, SCSI adapter 170 is connected to various SCSI devices (actually disk 175, tape backup unit 176 and CD-ROM 172) in a good chain structure.

슈퍼스칼라 프로세서(200)의 실시예에 따라, 슈퍼스칼라 프로세서(200)는 x86 명령 세트에 멀티미디어 확장을 실행하기 위한 멀티미디어 유닛(256)을 포함할 수도 있다. 도 11C를 다시 참조해보면, 사운드 어댑터(190)와 같은 멀티미디어 어댑터, 모션 비디오 어댑터(195) 및 그래픽 어댑터(114)는 버스(151, 126)를 경유하여 수퍼스칼라 프로세서(200)에 각각 연결되고, 2차 저장 장치(예를 들면, 디스크(175), 메모리(128) 및 멀티미디어 어댑터 사이에 멀티미디어 데이터를 위한 고대역 전송을 제공한다. 사운드 어댑터(190)는 오디오 신호를 각각 샘플링하고 신시사이징하기 위한 아날로그-디지털(A/D) 및 디지털-아날로그(D/A) 인터페이스를 제공한다. 사운드 어댑터(190)의 A/D 및 D/A 인터페이스는 스피커(192)와 마이크로폰(191)에 각각 연결된다. 사운드 카드를 위한 적당한 설계는 당업자에게 공지되어 있으며 사운드 어댑터(190)는 상기와 같은 적당한 설계이다.According to an embodiment of the superscalar processor 200, the superscalar processor 200 may include a multimedia unit 256 for executing multimedia extensions in the x86 instruction set. Referring back to FIG. 11C, a multimedia adapter, such as a sound adapter 190, a motion video adapter 195, and a graphics adapter 114 are connected to the superscalar processor 200 via buses 151 and 126, respectively. Provides high-bandwidth transmission for multimedia data between secondary storage devices (e.g., disk 175, memory 128, and multimedia adapters). Sound adapter 190 provides for sampling and synthesizing audio signals, respectively. Provide analog-to-digital (A / D) and digital-to-analog (D / A) interfaces The A / D and D / A interfaces of the sound adapter 190 are connected to the speaker 192 and the microphone 191, respectively. Suitable designs for sound cards are known to those skilled in the art and the sound adapter 190 is of such suitable design.

모션 비디오 어댑터(195)는 예를들면 비디오 카메라(196)와 같은 비디오 신호를 포착하고 압축하기 위한 지원을 제공한다. 게다가, 모션 비디오 어댑터(195)는 프레임 버퍼(197)를 경유하는 표시 신호를 구비한 고분해능 컴퓨터 모니터, 고해상력 텔레비젼 또는 텔레비젼과 같은 표시 장치(198)를 제공한다. 모션 비디오 어댑터(195)의 대안 실시예는 프레임 버퍼(197)를 제거할 수 있고, 래스터 표시를 직접 구동한다. 더구나, 모션 비디오 어댑터(195)의 대안 실시예는 모션 비디오 어댑터의 비디오 입력과 비디오 출력 기능을 분리하고 대신에 분리된 비디오 입력과 비디오 출력 구성을 제공한다.Motion video adapter 195 provides support for capturing and compressing video signals, such as, for example, video camera 196. In addition, the motion video adapter 195 provides a display device 198 such as a high resolution computer monitor, a high resolution television or a television with a display signal via the frame buffer 197. An alternative embodiment of the motion video adapter 195 may remove the frame buffer 197 and drive the raster display directly. Moreover, alternative embodiments of motion video adapter 195 separate the video input and video output functions of the motion video adapter and instead provide separate video input and video output configurations.

비디오 정보는 대용량의 저장 공간을 필요로하기 때문에, 일반적으로 압축되어진다. 따라서, CD-ROM(172)의 콤팩트 디스크상에 나타나는 데이터로부터 압축된 비디오 정보를 표시하기 위해. 압축된 비디오 정보는 압축이 해제되어야 한다. 고대역 버스트 모드 데이터 전송은 I/O 버스(151)에 의해 지원되고, 이는 임의의 길이 버스트 데이터 전송을 위해 지원하는 PCI와 같은 로컬 버스가 바람직하다. 비디오 압축과 압축 해제는 스케쥴러 프로세서(200)(멀티미디오 유닛에서 멀티미디어 기능을 실행하는)에 의하고/또는 모션 비디오 어댑터(195)에 의해 실행되어질 수 있다. 그래서, 메모리 버스(126)와 브릿지(129)는 바람직하게도 메모리 버스(126)와 I/O 버스(151) 사이에서 브릿지(129)를 교차하는 버스트 데이터 전송을 지원한다.Video information is generally compressed because it requires a large amount of storage space. Thus, to display the compressed video information from the data appearing on the compact disc of the CD-ROM 172. Compressed video information should be decompressed. Highband burst mode data transmission is supported by I / O bus 151, which is preferably a local bus such as PCI that supports for any length of burst data transmission. Video compression and decompression may be performed by the scheduler processor 200 (executing multimedia functions in the multimedia unit) and / or by the motion video adapter 195. Thus, memory bus 126 and bridge 129 preferably support burst data transfer across bridge 129 between memory bus 126 and I / O bus 151.

Ⅹ. 결론Iii. conclusion

본 발명은 특별한 실시예를 참조로하여 상술되었지만, 상세한 설명은 본 발명의 출원인에 의한 실시예일뿐이며, 한정적이지 않다. 실시예의 다양한 응용과 결합은 본 발명의 범위내에 공지되어 있다.Although the present invention has been described above with reference to specific embodiments, the detailed description is only an embodiment by the applicant of the present invention and is not intended to be limiting. Various applications and combinations of embodiments are known within the scope of the present invention.

부록 A : RISC86Appendix A: RISC86 TMTM 구문construction

이 부록은 도 3에 설명된 RISC86TM구문에 따라 Op코드를 설명하고 있다.This appendix describes Opcodes according to the RISC86 syntax described in FIG.

RegOp 정의Definition of RegOp

Op코드의 비트 36 및 37은 RegOp를 식별하기 위해 00이 된다. 비트 10 및 11은 사용되지 않고, 00이 되어야 한다.Bits 36 and 37 of the opcode go to 00 to identify RegOp. Bits 10 and 11 are not used and should be 00.

A.1 RegOp 타입 필드 엔코딩A.1 RegOp type field encoding

"/"에 의해 분리된 니모닉들은 동일한 타입 필드를 갖고, 레지스터 유닛(253,254)에 의해 동일하게 취급된다. 이러한 RegOp들은 필드(Ext,SS)에 의해 표시되고 OCU 260에 의해 수행된 상태 수정에서 다르다.Mnemonics separated by "/" have the same type field and are treated identically by register units 253 and 254. These RegOps are represented by fields (Ext, SS) and differ in the state modifications performed by OCU 260.

타입 필드는 필드(DSz)에 기초하여 다르게 인터럽트된다. 상기한 바와 같이, 실행 유닛은 바이트 크기 RegOp를 위한 한 연산 및 16/32 비트 크기 RegOp를 위한 또다른 연산을 실행한다.The type field is interrupted differently based on the field DSz. As mentioned above, the execution unit executes one operation for the byte size RegOp and another operation for the 16/32 bit size RegOp.

모든 바이트 크기 RegOps 및 x1xxxx, 1x1xxx, 또는 xx01xx의 형태의 타입 필드를 갖는 모든 RegOps는 RUX만의 연산이 된다.All byte sizes RegOps and all RegOps with type fields of the form x1xxxx, 1x1xxx, or xx01xx are RUX only operations.

하드웨어는 xx01xx 형태의 타입 필드를 갖는 모든 RegOps를 "cc 종속적"인 것으로 취급하고, 따라서 연산의 실행을 전송하는 상태 오퍼랜드로 동기화 한다.The hardware treats all RegOps with type fields of the form xx01xx as being "cc dependent", thus synchronizing to the state operands that carry the execution of the operation.

A.2 RegOp 확장 필드 Ext[3:0]A.2 RegOp Extended Field Ext [3: 0]

MOVcc Op's에서, {Type[0],Ext[3:0]}은 5비트 상태 코드를 지정한다.In MOVcc Op's, {Type [0], Ext [3: 0]} specifies a 5-bit status code.

RDxxx/WRxxx Op's에서, {Type[0],Ext[3:0]}은 5비트 특수 레지스터 번호를 지정한다. WRFLG(.cc)에서, ".cc"가 지정된 경우 엔코드한 spec 레지스터 번호는 요구된 StatMod 값과 일치한다. RDSEG Ops에서, Ext[3:0]은 4비트 세그먼트 (선택기) 레지스터를 지정한다. 세그먼트 레지스터의 세트는 x86 구조 레지스터 및 추가적인 특수 세그먼트 레지스터를 포함한다.In RDxxx / WRxxx Op's, {Type [0], Ext [3: 0]} specifies a 5-bit special register number. In WRFLG (.cc), if ".cc" is specified, the encoded spec register number matches the required StatMod value. In RDSEG Ops, Ext [3: 0] specifies a 4-bit segment (selector) register. The set of segment registers includes x86 structure registers and additional special segment registers.

OS 세그먼트 레지스터는 모방 환경으로부터의 현 3비트 레지스터 번호에 의해 Op 디코드 시간에서 대체된다.The OS segment register is replaced at Op decode time by the current 3-bit register number from the copy environment.

필드(SS=1)를 가진 다른 연산에서, {Type[0],Ext[3:0]}은 (스케쥴러 280에 저장된 것과 같이) 4 상태 수정 비트를 지정한다.In another operation with field (SS = 1), {Type [0], Ext [3: 0]} specifies four state modification bits (as stored in scheduler 280).

A.3 RegOp 연산/데이터 크기 필드 DSz[2:0]A.3 RegOp Operation / Data Size Field DSz [2: 0]

필드 Dsz는 연산을 위한 데이터 크기를 나타낸다.Field Dsz represents the data size for the operation.

크기(DSize,ASize,SSize)는 환경 치환동안 대응하는 환경 변수로 대체되는 플레이스홀더가 된다.The size (DSize, ASize, SSize) becomes a placeholder that is replaced by the corresponding environment variable during environment substitution.

A.4 RegOp RUX-only 필드 R1A.4 RegOp RUX-only field R1

R1은 RegOp가 레지스터 유닛(251)으로만 발생가능한 것을 나타내도록 세트된다.R1 is set to indicate that RegOp can only occur with the register unit 251.

A.5 RegOp 착신지 필드 Dest[4:0]A.5 RegOp Destination Field Dest [4: 0]

필드 Dest[4:0]는 연산을 위한 착신지 레지스터를 식별하는 5비트 일반 레지스터 번호를 갖는다.Fields Dest [4: 0] have a 5-bit general register number that identifies the destination register for the operation.

A.6 RegOp 제 1 소스 필드 Scrl[4:0]A.6 RegOp First Source Field Scrl [4: 0]

필드 Scrl[4:0]는 연산을 위한 제 1 소스 레지스터를 식별하는 5비트 일반 레지스터 번호를 갖는다.Field Scrl [4: 0] has a 5-bit general register number that identifies the first source register for the operation.

A.6 RegOp 세트 상태 필드 SSA.6 RegOp Set Status Field SS

필드 SS는 연산이 필드 Ext에 의해 표시된 상태 플래그를 수정한다는 것을 나타내기 위해 세트된다.Field SS is set to indicate that the operation modifies the status flag indicated by field Ext.

A.6 RegOp 필드 IA.6 RegOp Field I

필드 I는 필드 Imm8/Src2가 즉석의 값 또는 레지스터 번호를 포함하는 여부를 나타낸다.Field I indicates whether field Imm8 / Src2 contains an instant value or register number.

A.6 RegOp 필드 Imm8/Src2[7:0]A.6 RegOp Field Imm8 / Src2 [7: 0]

필드 Imm8/Src2는 제 2 소스 오퍼랜드의 일시적인 값 또는 레지스터 번호를 갖는다. 만일 I=0이면, Imm8/Src2[4:0]은 5비트 레지스터 번호를 포함한다. 만일 I=1이면, Imm8/Src2[7:0]는 필드 DSz에 의해 표시된 크기로 확장된 사인이 되는 8비트 사인 즉석값을 지정한다.Field Imm8 / Src2 has a temporary value or register number of the second source operand. If I = 0, Imm8 / Src2 [4: 0] contains a 5-bit register number. If I = 1, Imm8 / Src2 [7: 0] specifies an 8-bit sine instantaneous value that becomes a sine extended to the size indicated by field DSz.

LdStOp 정의LdStOp Definition

Op코드의 비트 37 및 36은 LdStOp를 나타내기 위해 0 및 1이 된다.Bits 37 and 36 of the opcode are 0 and 1 to indicate LdStOp.

A.7 LdStOp 타입 필드 타입[3:0]A.7 LdStOp Type Field Type [3: 0]

A.8 LdStOp 주소 계산 크기 필드 ASz[1:0]A.8 LdStOp address calculation size field ASz [1: 0]

환경 치환을 엔코드하기 전에, 필드 ASz[1:0]는 다음과 같은 주소 계산 크기를 나타낸다.Before encoding the environment substitution, the fields ASz [1: 0] represent the following address calculation sizes.

엔코드 환경 치환은 ASize,SSize, 또는 DSize를 적절한 고정 크기로 변경한다.Encode environment substitutions change ASize, SSize, or DSize to an appropriate fixed size.

A.9 LdStOp 데이터 크기 필드 DSz[1:0]A.9 LdStOp Data Size Field DSz [1: 0]

A.10 LdStOp 데이터 필드 Data[4:0]A.10 LdStOp Data Field Data [4: 0]

필드 Data는 저장 소스 또는 로드 착신지 레지스터의 5비트 일반 레지스터 번호를 나타낸다.Field Data represents the 5-bit general register number of the storage source or load destination register.

A.10 LdStOp 세그먼트 필드 Seg[3:0]A.10 LdStOp Segment Field Seg [3: 0]

필드 Seg[3:0]는 세그먼트 레지스터를 식별한다.Fields Seg [3: 0] identify the segment register.

A.11 LdStOp 베이스 오퍼랜드 필드 Base[3:0]A.11 LdStOp Base Operand Field Base [3: 0]

필드 Base는 레지스터 파일의 아래 반 부분내 범용 레지스터를 나타내는 4비트 레지스터 번호를 포함한다. 레지스터로부터의 값은 주소 계산을 위한 베이스가 된다.The field Base contains a 4-bit register number representing the general register in the lower half of the register file. The value from the register becomes the base for address calculation.

A.12 LdStOp 인덱스 필드 Index[3:0]A.12 LdStOp Index Field Index [3: 0]

필드 Base는 레지스터 파일의 아래 반 부분내 범용 레지스터를 나타내는 4비트 레지스터 번호를 포함한다. 레지스터로부터의 값은 주소 계산동안 베이스에 추가되고 스케일된 주소 인덱스로서 사용된다.The field Base contains a 4-bit register number representing the general register in the lower half of the register file. The value from the register is added to the base during address calculation and used as the scaled address index.

A.13 LdStOp 인덱스 스케일 인수 필드 ISF[1:0]A.13 LdStOp index scale factor field ISF [1: 0]

필드 ISF는 인덱스가 인수 1,2,4, 또는 8에 의해 스케일되어야 하는 것을 나타낸다.Field ISF indicates that the index should be scaled by the factors 1,2,4, or 8.

A.14 LdStOp 큰 변위 필드 LDA.14 LdStOp Large Displacement Field LD

필드 LD는 연산이 앞선 LIMMOp로부터의 큰(32비트) 변위 또는 필드 Disp8로부터의 작은(8비트) 변위를 사용하는지 여부를 나타낸다.Field LD indicates whether the operation uses a large (32-bit) displacement from LIMMOp or a small (8-bit) displacement from field Disp8.

A.15 LdStOp 작은 변위 필드 Disp8[7:0]A.15 LdStOp Small Displacement Field Disp8 [7: 0]

필드 Disp8[7:0]는 필드 ASz에 의해 표시된 크기로 확장된 사인이 되는 8비트 변위를 포함한다.Field Disp8 [7: 0] contains an 8-bit displacement that becomes a sine extended to the size indicated by field ASz.

LIMMOp 정의LIMMOp definitions

Op코드의 비트 37 및 36은 LIMMOp를 나타내기 위해 11이 된다.Bits 37 and 36 of the opcode are 11 to indicate LIMMOp.

A.16 LIMMOp 즉시 필드 ImmHi 및 ImmLoA.16 LIMMOp Immediate Fields ImmHi and ImmLo

필드 ImmHi[14:0] 및 ImmLo[16:0]는 각각 32비트 즉시값의 최상위 15비트 및 최하위 17비트를 포함한다.Fields ImmHi [14: 0] and ImmLo [16: 0] contain the most significant 15 bits and the least significant 17 bits of the 32 bit immediate value, respectively.

A.17 LIMMOp 착신지 필드 Dest[3:0]A.17 LIMMOp Destination Field Dest [3: 0]

필드 Dest[3:0]는 즉시값을 위한 착신지를 나타내는 4비트 레지스터 번호를 저장한다.Fields Dest [3: 0] store a 4-bit register number indicating the destination for an immediate value.

노트:표준 NO-OP는 완료된 상태에서 스케쥴러로 로드되고, 쓰기에 의해 변하지 않는 레지스터(t0)로 즉시값 <undefined>을 써서 수행되는 "LIMM t0, <undefined>이 된다.Note: The standard NO-OP is "LIMM t0, <undefined>", which is loaded into the scheduler on completion and is written using the immediate value <undefined> to a register (t0) that does not change by writing.

SpecOp 정의SpecOp definition

Op코드의 비트 37 및 36은 SpecOp를 나타내기 위해 10이 된다. 비트 35는 이 부록에서 정의되었지만 FpOps에서 명확한 SpecOps를 위해 세트된다.Bits 37 and 36 of the Opcode are 10 to indicate SpecOp. Bit 35 is defined in this appendix but is set for explicit SpecOps in FpOps.

A.18 SpecOp 타입 필드 Type[3:0]A.18 SpecOp Type Field Type [3: 0]

A.19 SpecOp 상태 코드 필드 cc[4:0]A.19 SpecOp Status Code Field cc [4: 0]

필드 cc[4:0]는 BRCOND 연산을 위한 5비트 상태 코드를 포함한다. 비트 cc[4:1]는 테스트될 상태를 다음과 같이 지정한다.Fields cc [4: 0] contain a 5-bit status code for the BRCOND operation. Bits cc [4: 1] specify the state to be tested as follows.

비트 cc[4:0]는 상태 또는 그 구성요소가 계산되는지 여부를 지정한다.Bits cc [4: 0] specify whether the state or its components are computed.

상기 정의에서, "∼", "˙", "+", 및 "^"는 각각 논리적 NOT, AND, OR, 및 XOR를 나타낸다. OF, SF, ZF, AF, PF, 및 CF는 표준 x86 상태 비트이다. EZF 및 ECF는 구조적 제로 플래그 ZF 및 올림수 플래그 CF가 변경되지 않는 경우 엔코드가 x86 명령을 구현하는 시퀀스로 사용하는 모방 제로 플래그 및 모방 올림수 플래그이다. IP, DTF, 및 SSTF는 각각 인터럽트 펜딩, 디버그 트랩 플래그, 및 싱글 스텝 트랩 플래그를 나타내는 신호이다.In the above definitions, "to", "˙", "+", and "^" represent logical NOT, AND, OR, and XOR, respectively. OF, SF, ZF, AF, PF, and CF are standard x86 status bits. EZF and ECF are mimic zero flags and mimic rounding flags that the encoder uses as a sequence to implement the x86 instruction when the structural zero flag ZF and the rounding flag CF do not change. IP, DTF, and SSTF are signals representing interrupt pending, debug trap flags, and single step trap flags, respectively.

분기 상태 STRZ 및 MSTRC는 논리적으로 동일하고, 이동 스트링 명령 MOVS과 같은 x86 명령을 구현하는데 사용된다. 그러한 x86 명령에서, 엠코드는 레지스터내에 인덱스를 저장하고, BRCOND로 끝나는 루프를 생성한다. 각각의 루프 반복은 데이터의 청크(chunk)를 이동시키고, 인덱스를 감소시킨다. 분기 예언은 BRCOND가 루프의 시작으로 분기할 것이라고 초기에 예언한다. 상태 MSTRC는 인덱스가 x86 명령의 완료 가까이의 미리 정의된 포인트에 도달하는 경우 분기 계산 논리(257)가 명령어 디코더(240)를 시그널한다는 것을 나타낸다. 그러면 디코더(240)는 스케쥴러(280)로 로드되는 BRCOND의 분기 예언을 변경한다. 따라서, 잘못 예언된 분기 및 관련된 포기는 루핑이 완료되는 경우 피할 수 있다. 이것은 프로세서 유효성을 개선한다.Branch states STRZ and MSTRC are logically identical and are used to implement x86 instructions, such as the move string instruction MOVS. In such x86 instructions, the MPEG stores the index in a register and creates a loop that ends with BRCOND. Each loop iteration shifts the chunk of data and reduces the index. Branch prophecy initially predicts that BRCOND will branch to the beginning of the loop. State MSTRC indicates that branch calculation logic 257 signals instruction decoder 240 when the index reaches a predefined point near the completion of the x86 instruction. Decoder 240 then changes the branch prediction of BRCOND that is loaded into scheduler 280. Thus, mispredicted branching and related abandonment can be avoided when the looping is complete. This improves processor validity.

A.20 SpecOp 데이터 크기 필드 DSz[1:0]A.20 SpecOp Data Size Field DSz [1: 0]

필드 DSz[1:0]는 로드 상수 연산 LDK 및 LDKD의 데이터 크기인 1바이트, 4바이트, 또는 DSize를 나타낸다.The fields DSz [1: 0] indicate one byte, four bytes, or DSize, which are data sizes of the load constant operations LDK and LDKD.

A.21 SpecOp 착신지 필드 Dest[4:0]A.21 SpecOp Destination Field Dest [4: 0]

필드 Dest는 연산 LDK 및 LDKD의 착신지인 5비트 레지스터 번호를 갖는다.The field Dest has a 5-bit register number that is the destination of the operations LDK and LDKD.

A.21 SpecOp 즉시값 필드 Imm17[16:0]A.21 SpecOp Immediate Value Field Imm17 [16: 0]

필드 Imm17[16:0]는 17비트 상수를 포함하고, 즉시 사인된 17비트, 또는 14비트 Op 주소를 포함한다.Field Imm17 [16: 0] contains a 17-bit constant and contains an immediately signed 17-bit or 14-bit op address.

범용 레지스터 정의General register definition

24 정수 범용 레지스터가 있다. 처음 8 레지스터는 x86 범용 레지스터(AX 내지 DI)에 대응한다. 남아있는 16 레지스터는 CISC 명령어를 구현하는 다중 연산 시퀀스에서 사용된 임시 또는 스크래치 레지스터로서 서브한다. 5비트 레지스터 번호를 사용하는 연산은 32 레지스터를 액세스할 수 있고, 정수 레지스터에서 사용되지 않는 남아있는 레지스터 번호는 환경 변수 치환을 위한 멀티미디어 레지스터 또는 플레이스홀더가 될 수 있다.There are 24 integer general registers. The first eight registers correspond to x86 general purpose registers (AX to DI). The remaining 16 registers serve as temporary or scratch registers used in multiple operation sequences that implement CISC instructions. Operations using 5-bit register numbers can access 32 registers, and the remaining register numbers not used in integer registers can be multimedia registers or placeholders for environment variable substitution.

x86 정수 레지스터 세트는 레지스터(AX,CX,DC,BX)의 반의 낮은 쪽 2바이트 중 한쪽의 바이트 연산을 위해 어드레싱을 돕는다. 레지스터 크기 설명에 기초하여, x86 명령어내 3비트 레지스터 번호가 hi/lo 바이트 레지스터 또는 word/dword 레지스터로서 번역된다. 전망하는 연산에서, 이러한 크기는 연산의 ASz 또는 DSz 필드(ASz 또는 LkStOps의 베이스 및 인덱스 레지스터; 및 일반적으로 Data/Dest의 DSz, Srcl, 및 Src2 레지스터)에 의해 지정된다. 스크래치 정수 레지스터 세트는 레지스터의 반(t1-t4 및 t8-t11)의 낮은 2바이트의 유사한 어드레싱을 다시 돕는다.The x86 integer register set aids addressing for one of the two lower half bytes of the register (AX, CX, DC, BX). Based on the register size description, the 3-bit register number in the x86 instruction is translated as a hi / lo byte register or a word / dword register. In prospective operations, this size is specified by the ASz or DSz fields of the operation (base and index registers of ASz or LkStOps; and generally DSz, Srcl, and Src2 registers of Data / Dest). The scratch integer register set again helps with similar low-byte addressing of half of the registers (t1-t4 and t8-t11).

다음의 표는 명명된 레지스터로 1 내지 24의 레지스터 번호를 사상한다.The following table maps register numbers from 1 to 24 into named registers.

니모닉 "t0" 및 "_"은 그 위로 쓰여질 수 있지만 읽힐 때 항상 제로값을 반환하는 레지스터의 시너님이 된다. "_"은 일반적으로 오퍼랜드 또는 결과값을 무시하는 상황에서 사용된다. 앞서 표시된 바와 같이, 레지스터(t0)는 바이트 모드로 참조될 수 없다.The mnemonics "t0" and "_" can be written on top of it, but they become synergy in registers that always return zero when read. "_" Is generally used in situations where an operand or a result is ignored. As indicated above, register t0 cannot be referenced in byte mode.

부록 B : 의사-RTL 설명Appendix B: Pseudo-RTL Description

이 부록내 표들은 프로세서(200)의 실시예를 통해 사용되는 신호를 생성하는 논리를 설명한다. 각각의 표는 추가로 다른 표를 설명하거나 또는 참조하지 않고 다른 표에서 설명된 신호를 사용할 수 있다. 이 부록에서 설명된 신호는 달리 표시되지 않는한 높게 활성인 것으로 가정된다.The tables in this appendix describe the logic for generating signals used through embodiments of the processor 200. Each table may use the signals described in the other table with or without further description of the other table. The signals described in this appendix are assumed to be highly active unless otherwise indicated.

다음의 표기법이 사용된다. "∼"는 인버터에 의해 제공되는 것과 같은 신호의 보수 또는 역을 나타낸다. "˙", " ", 및 "&"를 통해 연결된 신호는 AND 게이트에 의해 구현될 수 있는 것과 같이 논리적 AND로서 결합된다. "+"를 통해 연결된 신호는 OR 게이트에 의해 구현될 수 있는 것과 같이 논리적 OR 게이트로서 결합된다. "^"를 통해 연결된 신호는 XOR 게이트에 의해 구현될 수 있는 것과 같이 논리적 배타적 OR로서 결합된다. "if (a) x=b else x=c" 또는 "if (a) x=b:c"의 표기법은 만일 신호 a가 가정되는 경우 출력 신호 x가 신호 b와 동일하고 그렇지 않으면 신호 b가 c와 동일한 멀티플렉서를 나타낸다. 만일 "else x=c"가 생략되면, 신호 a가 낮은 경우 신호 x는 낮게 된다. 또다른 표기법은 출력 신호 x가 다중비트 선택 신호 A의 값에 종속적인 값 x1 또는 x2 또는...xn을 갖는 경우 멀티플렉서가 "x=switch(A) case A1:x1 case A2:x2... case An:xn"인 것을 나타낸다. "x=switch(A) x1:x2:...xn"과 같이 case가 빠지는 경우, x1 내지 xn의 출력값은 순서적인 신호값에 대응한다. 설명된 대부분의 신호는 각각의 클럭 사이클을 변경시킨다. 표기 @(clock)는 신호가 잇따른 클럭 사이클에서 사용하기 위한 신호 클럭의 에지에서 레지스터로 래치되는 것을 나타낸다.The following notation is used. "-" Represents the complement or inverse of the signal as provided by the inverter. Signals connected via "˙", "", and "&" are combined as a logical AND, as may be implemented by an AND gate. Signals connected via "+" are combined as logical OR gates, as may be implemented by OR gates. Signals connected via "^" are combined as logically exclusive OR, as may be implemented by an XOR gate. The notation "if (a) x = b else x = c" or "if (a) x = b: c" indicates that if signal a is assumed output signal x is equal to signal b and signal b is c Represent the same multiplexer as If " else x = c " is omitted, the signal x becomes low if the signal a is low. Another notation is that if the output signal x has a value x1 or x2 or ... xn dependent on the value of the multi-bit select signal A, then the multiplexer will return "x = switch (A) case A1: x1 case A2: x2 ... case An: xn ". When the case is omitted such as "x = switch (A) x1: x2: ... xn", the output values of x1 to xn correspond to the ordered signal values. Most of the signals described change each clock cycle. The notation @ (clock) indicates that the signal is latched into a register at the edge of the signal clock for use in subsequent clock cycles.

당 기술분야에서 통상의 지식을 가진 자에 의해 이해될 수 있는 바와 같이, 후술된 논리는 여러 방법으로 구현될 수 있다.As will be appreciated by one of ordinary skill in the art, the logic described below may be implemented in a number of ways.

표 B.1 정적 필드 기억 소자 연산Table B.1 Static Field Memory Operation

표 B.2 동적 필드 기억 소자 연산Table B.2 Dynamic Field Memory Operation

스케쥴러(280)의 글로벌 제어 논리(520)는 각각의 플립플롭으로 로드된 신호를 선택하는 독립 신호 LdEntry[i]를 생성한다.The global control logic 520 of the scheduler 280 generates an independent signal LdEntry [i] that selects the signal loaded into each flip-flop.

표기 xxOp.yyy는 xxOp 타입의 RISC86 명령어에서 정의된 필드 yyy로부터의 값을 나타내는 연산 디코더(510)로 입력 신호를 참조한다. 예를 들어, RegOp.Srcl은 도 3의 RegOp.의 Srcl 필드와 동일한 위치에서 명령어내 비트를 참조하고, 부록 A는 RegOp, LdStOp, LIMMOp, 및 SpecOp를 위한 예시적인 필드 정의를 정의한다.The notation xxOp.yyy refers to the input signal to the operation decoder 510 representing the value from the field yyy defined in the xxOp type RISC86 instruction. For example, RegOp.Srcl refers to the bits in the instruction at the same location as the Srcl field of RegOp. In FIG. 3, and Appendix A defines example field definitions for RegOp, LdStOp, LIMMOp, and SpecOp.

표 B.3 필드 타입Table B.3 Field Types

"RUYD"는 디버깅을 위해 제 2 레지스터 유닛 RUY을 불능케하는 특수 레지스터이다."RUYD" is a special register that disables the second register unit RUY for debugging.

표 B.4 필드 LD_ImmTable B.4 Field LD_Imm

표 B.5 필드 SrclRegTable B.5 Field SrclReg

표 B.6 필드 Src2RegTable B.6 Field Src2Reg

표 B.7 필드 SrcStRegTable B.7 Fields SrcStReg

표 B.8 필드 DestRegTable B.8 Fields DestReg

표 B.9 필드 SrclBM, Src2BM, 및 Srcl2BMTable B.9 Fields SrclBM, Src2BM, and Srcl2BM

표 B.10 필드 SrcStBMTable B.10 Fields SrcStBM

표 B.11 필드 OpInfoTable B.11 Field OpInfo

연산 디코더(510)는 대응하는 RISC86 명령어의 OpId 필드에 따라 field State[3:0]를 (발생되지 않은) b0000 또는 (완료되지 않은) b1111과 같이 초기화한다.The operation decoder 510 initializes field State [3: 0] as b0000 (not generated) or b1111 (not completed) according to the OpId field of the corresponding RISC86 instruction.

표 B.12 상태 필드Table B.12 Status Fields

표 B.13 필드 ExeclTable B.13 Field Execl

연산 디코더(510)는 필드 Execl를 낮게 초기화한다.The operation decoder 510 initializes the field Execl low.

Execl = XExecl = X

계속해서, 필드 Execl는 다음과 같이 변경된다.Subsequently, the field Execl is changed as follows.

if (S0Enbl) Execl = IssueOpToRUXif (S0Enbl) Execl = IssueOpToRUX

신호 IssueOpToRUX는 레지스터 유닛(253)을 위한 이슈 선택 스캔 체인동안 엔트리내에서 생성된다.Signal IssueOpToRUX is generated in the entry during the issue selection scan chain for register unit 253.

표 B.14 필드 DestBMTable B.14 Fields DestBM

연산 디코더(520)는 착신지 레지스터의 바이트가 수정될 것이라는 것을 나타내는 연산에 따라 필드 DestBM를 초기화한다.The operation decoder 520 initializes the field DestBM in accordance with an operation indicating that the byte of the destination register will be modified.

필드 DestBM는 다음과 같이 명확해진다:The field DestBM becomes clear as follows:

if (SC_Abort) DestBM = 3'b0if (SC_Abort) DestBM = 3'b0

표 B.15 필드 DestValTable B.15 Fields DestVal

연산 디코더(510)는 다음의 논리를 사용하여 관련된 RISC86 명령어로부터 필드 DestVal를 생성한다.Arithmetic decoder 510 generates field DestVal from the associated RISC86 instruction using the following logic.

연산 필드 DestVal의 잇따른 실행은 다음과 같이 변경된다.Subsequent execution of the operation field DestVal changes as follows.

이때 신호 DC_DestRes, SU1_DestRes, RUX_DestRes, 및 RUY_DestRes는 연산을 실행한 실행 유닛으로부터 발생된다.At this time, the signals DC_DestRes, SU1_DestRes, RUX_DestRes, and RUY_DestRes are generated from the execution unit that performed the operation.

표 B.16 필드 StatModTable B.16 Field StatMod

연산 디코더(510)는 관련된 연산에 따라 필드 StatMod를 세트한다.The operation decoder 510 sets the field StatMod in accordance with the associated operation.

표 B.17 필드 StatVal 생성 논리Table B.17 Field StatVal Generation Logic

필드 StatVal는 초기에 제로가 된다.The field StatVal is initially zero.

StatVal = 8'bXStatVal = 8'bX

그리고 RegOp가 완료되는 경우에 변경된다.It is changed when RegOp completes.

if (∼S3·S1) StatVal = (Execl) ?RUX_StatRes : RUY_StatResif (~ S3 · S1) StatVal = (Execl)? RUX_StatRes: RUY_StatRes

표 B.18 필드 OprndMatch_XXsrcYTable B.18 Fields OprndMatch_XXsrcY

필드 OprndMatch_XXsrcY는 이슈 스테이지로부터 각각의 프로세싱 파이프라인의 오퍼랜드 전송 스테이지로 정보를 전달하고(또는 한 경우에서 SU의 스테이지 1에서 스테이지 2로), 값들은 글로벌 신호 XXAdvY(특별히 XXAdv0 또는 SUAdv2)에 의해 제어된다.The field OprndMatch_XXsrcY passes information from the issue stage to the operand transfer stage of each processing pipeline (or from stage 1 to stage 2 of SU in one case) and the values are controlled by the global signal XXAdvY (especially XXAdv0 or SUAdv2). .

표 B.19 필드 DBNTable B.19 Field DBNs

필드 DBN는 초기값이 제로가 된다.The field DBN has an initial value of zero.

DBN = 4'b0DBN = 4'b0

그리고 실행동안 다음과 같이 변경된다.And during execution it changes to

if ((AdvLU2 + AdvSU2)·∼S3·S2)DBN[3:0] = (DBN_LU[3:0]·LU) + (DBN_SU[3:0]·SU)if ((AdvLU2 + AdvSU2) ... S3S2) DBN [3: 0] = (DBN_LU [3: 0] LU) + (DBN_SU [3: 0] SU)

표 B.20 Op Quad 필드 EmcodeTable B.20 Op Quad Field Emcodes

표 B.21 Op Quad 필드 EretTable B.21 Op Quad Field Eret

표 B.22 Op Quad 필드 FaultPCTable B.22 Op Quad Field FaultPC

Op quad에서 먼저 디코드된 x86의 논리적 PCLogical PC on x86 first decoded on op quad

표 B.23 Op Quad 필드 BPTInfoTable B.23 Op Quad Fields BPTInfo

현 BPT 액세스로부터의 정보Information from Current BPT Access

표 B.24 Op Quad 필드 RASPtrTable B.24 Op Quad Field RASPtr

현 반환 주소 스택Current return address stack

표 B.25 Op Quad 필드 OpQVTable B.25 Op Quad Field OpQV

연산 디코더(510)는 스케쥴러(280)의 톱으로 로드된 Op quad가 유효한지 여부를 나타내기 위해 필드 OpQV를 초기에 세트한다.The operation decoder 510 initially sets the field OpQV to indicate whether the op quad loaded into the top of the scheduler 280 is valid.

이 멀티플렉서는 유일한 것이 아니다; 유사한 (그러나 3:1) 멀티플렉서로부터 나온 모든 새로운 Op quad 필드는 ExcpAbort의 설명을 위해 OCU 설명을 참조한다.This multiplexer is not the only one; All new Op quad fields from similar (but 3: 1) multiplexers refer to the OCU description for an explanation of ExcpAbort.

필드 OpQV는 Op quad를 무효로 하도록 포기한 후 명확해질 수 있고, 실행을 막는다.The field OpQV can be clarified after giving up to invalidate the op quad and prevent execution.

표 B.26 Op Quad 필드 LimViolTable B.26 Op Quad Field LimViol

LimViol = 'b0LimViol = 'b0

필드 LimViol는 실제로 상기한 다른 모든 필드들보다 한 사이클뒤에 로드된다(즉, 새로운 Op quad가 스케쥴러내에 존재하고 유효한 제 1 사이클동안). 이것은 이 Op quad의 상기한 설명에서 반영된다.Field LimViol is actually loaded one cycle after all the other fields described above (i.e. during the first valid cycle, a new Op quad is present in the scheduler). This is reflected in the above description of this Op quad.

표 B.27 시프트 제어 논리Table B.27 Shift Control Logic

도 6을 참고로 설명한 바와 같이, (새로운 Op quad를 가진) 열 0을 (열 4로부터의 Op quad를 가진) 로딩 열 5로 로드하는 것을 제어한다. 이 표에서, OCU(260)로부터의 입력 신호 OpQRetire는 스케쥴러(280)의 최하열내 유효한 Op quad가 끝내질 수 있는 때를 나타내고, 입력 신호 HoldOpQ3, HoldOpQ4A, 및 HoldOpQ4B는 상태 코드 계산이 열 3 또는 열 4에서 연산을 연기했는지 여부를 나타낸다.As described with reference to FIG. 6, control loading column 0 (with the new op quad) into loading column 5 (with the op quad from column 4). In this table, the input signal OpQRetire from the OCU 260 indicates when a valid op quad in the lowest column of the scheduler 280 can be terminated, and the input signals HoldOpQ3, HoldOpQ4A, and HoldOpQ4B show the status code calculation in column 3 or column. Indicates whether the operation was postponed at 4.

표 B.28 싱글-엔트리 이슈 스캔 항Table B.28 Single-Entry Issue Scan Terms

싱글-엔트리 항은:Single-entry terms are:

여기서 "State=Unissued"는 ∼S0이고, "Executable by xx"는 각각 실행 파이프라인 LU/SU/RUX/RUY과 동일하다. 사용된 것과 같은 타입 비트 LUi, SUi, RUi, RUXi는: LdOps에서 LU=1; StOps에서 SU=1(LEA와 같은 연산 포함); 모든 RegOps에서 RU=1; 및 RUY에 의해 실행가능한 RegOps에서 RUY=1이다.Here, "State = Unissued" is -S0, and "Executable by xx" is the same as the execution pipeline LU / SU / RUX / RUY, respectively. The same type bits LUi, SUi, RUi, RUXi as used are: LU = 1 in LdOps; SU = 1 in StOps (including operations like LEA); RU = 1 in all RegOps; And RUY = 1 in RegOps executable by RUY.

표 B.29 LU, SU, 및 RUX 룩 어헤드 스캔 체인Table B.29 LU, SU, and RUX Look Ahead Scan Chains

6 싱글-엔트리 신호는 XX가 LU, SU, 또는 RUX인 경우에서 스캔 체인 XX을 위한 4 그룹 전파 신호 XXPgrp[3:0] 및 그룹 킬 신호 XXKgrp[3:0]를 형성한다. 각각의 그룹 신호는 스케쥴러(280)의 사분 구간에 대응한다. 다음은 스캔 체인중의 하나를 위한 엔트리 0 내지 5를 포함하는 제 1 사분 구간(사분 구간(0))의 그룹 신호이다.The six single-entry signal forms the four group propagation signal XXPgrp [3: 0] and the group kill signal XXKgrp [3: 0] for scan chain XX when XX is LU, SU, or RUX. Each group signal corresponds to a quadrant section of the scheduler 280. The following is a group signal of a first quadrant interval (quadrant interval 0) containing entries 0-5 for one of the scan chains.

여기서 P0 내지 P5 및 K0 내지 K5는 6 연속 엔트리 및 파이프라인 XX의 싱글-엔트리 항이다.Where P0 to P5 and K0 to K5 are the single-entry terms of 6 consecutive entries and pipeline XX.

그룹은 만일 그 그룹 킬 신호 XXKgrp가 가정되는 경우 선택된 명령어를 포함하고, 더 오래되지 않은 그룹들은 스캔 비트를 없앤다. XXIssueQuadrant[0:3]으로부터의 비트는 파이프라인 XX으로의 이슈를 위해 선택된 연산을 포함하는 그룹을 식별하기 위해 가정된다. 신호 XXIssueQuadrant[0:3]는 다음과 같이 생성된다.The group contains the selected instruction if the group kill signal XXKgrp is assumed, and older groups clear the scan bit. Bits from XXIssueQuadrant [0: 3] are assumed to identify the group containing the operation selected for the issue into pipeline XX. The signal XXIssueQuadrant [0: 3] is generated as follows.

신호 IssueToXX[i]는 만일 있다면 파이프라인 XX으로 이슈된 연산을 나타내고, 신호 IssueQuadrant 및 싱글-엔트리 킬 항 IssuableToXX으로부터 다음과 같이 생성된다.The signal IssueToXX [i], if present, represents the operation issued to the pipeline XX and is generated from the signal IssueQuadrant and the single-entry kill term IssuableToXX as follows.

표 B.30 RUY 스캔 체인(3비트 그룹)Table B.30 RUY Scan Chains (3-bit Group)

싱글-엔트리 P, K, O, 및 G는 3 엔트리의 8 그룹을 위한 그룹항 Ggrp[7:0], Pgrp[7:0], 및 Ogrp[7:0]을 산출하기 위해 결합된다. 그룹 0에서, 그룹항은:Single-entries P, K, O, and G are combined to yield group terms Ggrp [7: 0], Pgrp [7: 0], and Ogrp [7: 0] for 8 groups of 3 entries. In group 0, the group term is:

여기서 x, y, 및 z는 그룹 i에서 가장 오래된 엔트리, 중간 엔트리, 및 최근 엔트리를 각각 식별한다. 싱글 엔트리 G항은 신호 IssuableToRUX[23:0]의 비트가 되고, 싱글-엔트리 K 항은 IssuableToRUY[23:0]의 비트이다.Where x, y, and z identify the oldest, middle, and most recent entries in group i, respectively. The single entry G term is a bit of the signal IssuableToRUX [23: 0], and the single-entry K term is a bit of IssuableToRUY [23: 0].

그룹항은 더 큰 그룹의 그룹항을 형성하기 위해 스테이지에서 결합된다. 다음의 연산은 그룹 X와 그룹 Y의 연합인 그룹 XY의 그룹항을 형성하기 위해 그룹항 GX, OX, PX, GY, OY 및 PY를 결합하는 논리를 설명하고 있다.Group terms are combined at the stage to form a larger group of group terms. The following operation describes the logic to combine group terms GX, OX, PX, GY, OY and PY to form a group term of group XY, which is a combination of group X and group Y.

GXY = GX·PY + ∼OX·GYGXY = GX, PY +-OX, GY

PXY = PX·PYPXY = PXPY

OXY = OX + OYOXY = OX + OY

신호 CinGrp[6:0] 및 OinGrp[6:0]는 결합으로부터의 출력이 된다. 신호 CinGrp[6:0]는 신호 G_7, G_67, G_567, G_4567, G_34567, G_234567, 및 G_1234567이 되고, 출력 신호 OinGrp[6:0]는 신호 O_7, O_67, O_567, O_4567, O_34567, O_234567, 및 O_1234567가 된다.The signals CinGrp [6: 0] and OinGrp [6: 0] are the output from the combination. Signals CinGrp [6: 0] become signals G_7, G_67, G_567, G_4567, G_34567, G_234567, and G_1234567, and output signal OinGrp [6: 0] is signals O_7, O_67, O_567, O_4567, O_34567, O_234567, and O_1234567 Becomes

신호 IssueOpToRUY[23:0]중의 한 비트는 선택된 엔트리를 식별하기 위해 가정된다. 다음의 수학식은 신호 IssueOpToRUY를 생성하는 논리를 설명하고 있다.One bit of the signal IssueOpToRUY [23: 0] is assumed to identify the selected entry. The following equation describes the logic for generating the signal IssueOpToRUY.

표 B.31 오퍼랜드 정보 방송Table B.31 Operand Information Broadcast

각각의 엔트리는 엔트리에 포함된 연산의 소스 오퍼랜드를 설명하는 신호 Src1Info 및 Src2Info를 생성한다.Each entry produces signals Src1Info and Src2Info that describe the source operands of the operations contained in the entry.

Src1Info[7:0] = {Src1BM[2:0],Src1Reg[4:0]}Src1Info [7: 0] = {Src1BM [2: 0], Src1Reg [4: 0]}

Src2Info[7:0] = {Src2BM[2:0],Src2Reg[4:0]}Src2Info [7: 0] = {Src2BM [2: 0], Src2Reg [4: 0]}

만일 연산이 이슈하기 위해 선택되면, 엔트리는 연산이 발생할 실행 유닛과 관련된 오퍼랜드 정보 버스에서 신호 Src1Info 및 Src2Info를 구동한다. 신호 OprndInfo_XXsrcY는 실행 유닛 XX의 소스 오퍼랜드 Y와 관련된 오퍼랜드 정보 버스에 의해 실제 전달된 신호이고, 다음과 같이 생성된다.If the operation is selected to issue, the entry drives signals Src1Info and Src2Info on the operand information bus associated with the execution unit in which the operation is to take place. The signal OprndInfo_XXsrcY is a signal actually transmitted by the operand information bus associated with the source operand Y of the execution unit XX, and is generated as follows.

표 B.32 오퍼랜드 정보 매치 비교Table B.32 Operand Information Match Comparison

다음의 수학식은 혼합 비교를 요약한다:The following equation summarizes the mixed comparison:

여기서 "XXsrcY"는 LUsrc1, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1, 및 RUYsrc2 중의 하나가 되고, "bus"는 오퍼랜드 정보 버스(552)중의 한 버스상에 있는 신호 OprndInfo_XXsrcY를 인용한다. 바이트 표시 체킹은 간략화 및 교환으로서 BM[2]을 포함하지 않는다. BM[2]=1은 (BM[1]BM[0])=0이라는 의미이고, 따라서 만일 busBM[2]=1이면, DestBM[2]를 고려하지 않고 매치가 시그널된다.Where "XXsrcY" is one of LUsrc1, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1, and RUYsrc2, and "bus" refers to the signal OprndInfo_XXsrcY on one bus of operand information bus 552. Byte notation checking does not include BM [2] as a simplification and exchange. BM [2] = 1 means (BM [1] BM [0]) = 0, so if busBM [2] = 1, the match is signaled without considering DestBM [2].

표 B.33 오퍼랜드 정보 방송Table B.33 Operand Information Broadcast

다음의 수학식은 발생된 연산을 포함하는 엔트리로부터 OpInfo 필드의 정보읽기(readout)를 요약한다. 다음의 수학식에 따르면, 각각의 엔트리는 LU, SU, RUX, 또는 RUY 파이프라인에 대응하는 연산 정보 버스상에서 신호 OpInfo_LU, OpInfo_SU, OpInfo_RUX, 또는 OpInfo_RUY를 생성한다.The following equation summarizes the readout of the OpInfo field from the entry containing the generated operation. According to the following equation, each entry produces a signal OpInfo_LU, OpInfo_SU, OpInfo_RUX, or OpInfo_RUY on an operation information bus corresponding to the LU, SU, RUX, or RUY pipeline.

발생된 연산을 포함하는 엔트리만 버스(551)상에서 신호를 구동한다.Only the entry containing the generated operation drives a signal on bus 551.

신호 XXAdv0는 그들이 내부 레지스터를 제어하는 것과 동일한 방법으로 이들 외부 파이프라인 레지스터를 제어한다.The signal XXAdv0 controls these external pipeline registers in the same way that they control internal registers.

표 B.34 오퍼랜드 선택 스캔 체인Table B.34 Operand Selection Scan Chain

싱글-엔트리항은 8 스캔 체인 LUsrc1, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1, 및 RUYsrc2을 위한 것이다.The single-entry term is for 8 scan chains LUsrc1, LUsrc2, SUsrc1, SUsrc2, RUXsrc1, RUXsrc2, RUYsrc1, and RUYsrc2.

4비트 그룹의 그룹항은 다음과 같이 형성된다.The group term of the 4-bit group is formed as follows.

대신, 3비트 또는 6비트 그룹이 사용될 수 있다.Instead, 3 or 6 bit groups can be used.

각각의 엔트리는 엔트리가 오퍼랜드 srcY를 실행 파이프라인 XX으로 제공하는지 여부를 나타내는 신호 SupplyValueToXXsrcY를 생성하는 논리 신호를 포함한다.Each entry contains a logic signal that generates a signal SupplyValueToXXsrcY indicating whether the entry provides operand srcY to execution pipeline XX.

XXsrcYchain.CIN 및 XXsrcYchain.K는 입력 스캔 비트 신호 및 파이프라인 XX의 오퍼랜드 srcY에 대응하는 스캔 체인내 엔트리내 킬 항이다.XXsrcYchain.CIN and XXsrcYchain.K are the kill terms in the entry in the scan chain that correspond to the input scan bit signal and the operand srcY of pipeline XX.

표 B.35 오퍼랜드 전송을 위한 실행가능한 논리Table B.35 Actionable Logic for Operand Transfer

각각의 엔트리는 전송될 8 오퍼랜드 신호 Oprnd_XXsrcY에 대응하는 8 구동기를 갖는다. 엔트리는 만일 신호 SupplyValueToXXSrcY가 오퍼랜드 선택 단계동안 가정되는 경우 그 구동기가 연산 결과값을 공급할 수 있게 한다.Each entry has 8 drivers corresponding to 8 operand signals Oprnd_XXsrcY to be transmitted. The entry allows the driver to supply the result of the operation if the signal SupplyValueToXXSrcY is assumed during the operand selection phase.

레지스터 화일(290)은 만일 스캔 체인으로부터의 스캔 비트 출력이 세트되는 경우 그 구동기가 신호 Oprnd_XXsrcY를 공급할 수 있게 한다.The register file 290 allows the driver to supply the signal Oprnd_XXsrcY if the scan bit output from the scan chain is set.

표 B.36 오퍼랜드 정보 신호Table B.36 Operand Information Signals

오퍼랜드를 제공하는 엔트리는 다음과 같이 오퍼랜드 상태 신호도 제공한다.The entry providing the operand also provides the operand status signal as follows.

오퍼랜드 구동기를 위해 실행가능한 신호는 다음과 같이 오퍼랜드 상태 신호에서 구동기를 실행가능하게 한다.The executable signal for the operand driver makes the driver executable on the operand status signal as follows.

레지스터 파일(290)은 오퍼랜드 상태 버스에 대응하는 오퍼랜드를 제공하기 위해 선택된 엔트리들중에 있지 않은 오퍼랜드 상태 버스(553)를 구동한다. 레지스터 파일(290)로부터의 오퍼랜드 상태 신호는 다음과 같은 형태가 된다.Register file 290 drives operand status bus 553 that is not among the entries selected to provide an operand corresponding to the operand status bus. The operand status signal from the register file 290 has the following form.

레지스터 파일(290)이 오퍼랜드 상태 버스(553)를 구동할 수 있게 하는 논리가 다음과 같이 요약된다.The logic that enables the register file 290 to drive the operand status bus 553 is summarized as follows.

표 B.37 전위 전송Table B.37 Potential Transmission

오퍼랜드 전송 스테이지 동안, 엔트리로부터의 전위 전송은 스케쥴러(280)내 앞선 엔트리에 의해 또는 엔트리에 의해 가능해진다. 다음에 신호 Disp_LU 및 Disp_SU를 로드 유닛(251) 및 저장 유닛(252)으로 전송하는 것을 요약하고 있다.During the operand transfer stage, the potential transfer from the entry is made possible by the previous entry in the scheduler 280 or by the entry. Next, the transmission of the signals Disp_LU and Disp_SU to the load unit 251 and the storage unit 252 is summarized.

값 "thisOp" 및 "nextOp"는 뒤이은 신호 LU, S1, S0, 및 LD로부터 오는 물리적 엔트리를 식별한다. 또한, 스케쥴러(280)내 제 1/최근 엔트리의 경우, NextOp항은 제로이다.The values "thisOp" and "nextOp" identify the physical entries from the following signals LU, S1, S0, and LD. Also, for the first / last entry in the scheduler 280, the NextOp term is zero.

표 B.38 즉시값 전송Table B.38 Immediate Value Transfer

구동기는 즉시값을 레지스터 유닛(253,254)으로 다음과 같이 제공한다.The driver provides the immediate value to the register units 253 and 254 as follows.

다음의 수학식은 오퍼랜드 상태 신호를 위한 분리된 버스를 가능하게 하는 것을 요약한다.The following equation summarizes the enabling of separate buses for operand status signals.

표 B.39 데이터 오퍼랜드 선택 및 전송Table B.39 Selecting and Sending Data Operands

연산 선택 단계(456)동안, 각각의 엔트리는 그것이 실행 스테이지(450)내에 있는지 여부를 결정한다.During the operation selection step 456, each entry determines whether it is in the execution stage 450.

"Select for data operand fetch" = SU·∼S2·S1"Select for data operand fetch" = SU-S2S1

데이터 오퍼랜드 방송 스테이지동안, 실행 스테이지(450)에 있는 것으로 결정된 연산을 포함하는 엔트리는 데이터 오퍼랜드 정보를 다음과 같이 생성한다.During the data operand broadcast stage, an entry containing an operation determined to be in execution stage 450 generates data operand information as follows.

각각의 엔트리는 데이터 오퍼랜드 정보 신호로부터 엔트리가 데이터 오퍼랜드의 소스 레지스터에 영향을 주는 연산을 포함하는지 여부를 결정한다. 각각의 엔트리내 데이터 오퍼랜드 매치 레지스터는 엔트리가 데이터 오퍼랜드 소스에 영향을 주는지 여부를 나타내는 값 OprndMatch_SUsrcSt을 래치한다.Each entry determines from the data operand information signal whether the entry includes an operation that affects the source register of the data operand. The data operand match register in each entry latches the value OprndMatch_SUsrcSt indicating whether the entry affects the data operand source.

여기서 "bus"는 OprndInfo_SUsrcSt를 인용한다.Where "bus" quotes OprndInfo_SUsrcSt.

오퍼랜드 선택 단계(461) 동안, 선택된 엔트리로부터 시작하는 스캔 체인은 데이터 오퍼랜드의 소스를 선택한다. 소스는 만일 데이터 오퍼랜드에 영향을 주는 어떠한 앞선 엔트리도 없는 경우 데이터 오퍼랜드의 소스 또는 레지스터 파일(290)에 영향을 주는 가장 새로운 앞선 엔트리가 된다. 스캔 체인은 싱글-엔트리 스캔 항을 갖는다:During operand selection step 461, the scan chain starting from the selected entry selects the source of the data operand. The source is the newest advanced entry affecting the source or register file 290 of the data operand if there is no previous entry affecting the data operand. The scan chain has a single-entry scan term:

∼P = K = OprndMatch_SUsrcStP = K = OprndMatch_SUsrcSt

G = SU·∼S3·S2G = SU-S3S2

그룹 레벨 스캔 수학식은 표 B.34에서와 같이 다른 오퍼랜드 선택 스캔 체인에서도 동일하고, 각각의 엔트리는 입력 스캔 비트 및 엔트리를 위한 킬 항으로부터 엔트리가 선택되는지 여부를 결정한다.The group level scan equation is the same for other operand selection scan chains as in Table B.34, where each entry determines whether an entry is selected from an input scan bit and a kill term for the entry.

데이터 오퍼랜드 전송 단계(462) 동안, 각각의 스케쥴러 엔트리내 구동기는 다음과 같이 가능해진다.During the data operand transfer step 462, the driver in each scheduler entry is enabled as follows.

만일 엔트리내 아무런 구동기도 실행가능하지 않다면, 레지스터 파일의 출력에서 구동기는 다음과 같이 실행가능해진다.If no driver in the entry is executable, the driver in the output of the register file becomes executable as follows.

버스(554)를 통해 전송된 데이터 오퍼랜드 Oprnd_SUsrcSt는 저장 유닛(252)내 레지스터(1052)에서 얻어진다. 데이터 오퍼랜드 전송 단계(462) 동안, 제어 논리(520)는 읽혀진 오퍼랜드 상태 값을 이용한다.The data operand Oprnd_SUsrcSt sent over bus 554 is obtained in register 1052 in storage unit 252. During the data operand transfer step 462, the control logic 520 uses the read operand status value.

표 B.40 로드-저장 오더링 스캔 체인Table B.40 Load-Store Ordering Scan Chains

로드-저장 오더링 스캔 체인은 각각의 엔트리의 State 및 Type 필드에 기초한 싱글-엔트리 전파/킬(P/K)항을 갖는다. 3 LdOp 스캔 체인에서, ST Type 비트는 SU비트 대신 사용된다. 이것은 논리적 주소만을 생성하는 LEA 연산으로부터 메모리를 실제로 인용하는 StOps를 구별한다. LUst2/LUst1/LUst0 및 SUld2/SUld1는 로드 유닛(251) 및 저장 유닛(252)을 위한 각각의 스캔 체인을 나타낸다.The load-store ordering scan chain has a single-entry propagation / kill (P / K) term based on the State and Type fields of each entry. In a 3 LdOp scan chain, the ST Type bit is used instead of the SU bit. This distinguishes StOps, which actually quotes memory from a LEA operation that only generates logical addresses. LUst2 / LUst1 / LUst0 and SUld2 / SUld1 represent the respective scan chains for load unit 251 and storage unit 252.

스캔 체인을 위한 싱글-엔트리 항은:Single-entry terms for the scan chain are:

(4개의 그룹에 기초한) 그룹 룩 어헤드 항은:The group look-ahead term (based on four groups) is:

Op quad를 위한 스캔 비트 입력 신호는:The scan bit input signal for the op quad is:

LdStOp의 실행 스테이지(460)의 제 2 단계(462)동안, LdStOp를 유지하는 엔트리로의 2/3 스캔 비트 Cin's는 24:1 멀티플렉서와 다음과 같이 결합된다.During the second stage 462 of the execution stage 460 of LdStOp, 2/3 scan bits Cin's into the entry holding LdStOp are combined with a 24: 1 multiplexer as follows.

스캔 비트 Cin는 만일 글로벌 신호가 하나이면 관련된 스테이지는 더 오래된 연산을 포함하는 결과로 글로벌 신호로 구동되는 경우 변환된다.The scan bit Cin is translated if the global signal is one if the associated stage is driven with the global signal resulting in an older operation.

표 B.41 스케쥴러로부터 외부 논리로의 정보Table B.41 Information from the Scheduler to External Logic

다음은 외부 사용을 위해 여러 시각에서 스케쥴러(280)를 독출하는 정보를 요약하고 있다.The following summarizes the information for reading the scheduler 280 at various times for external use.

오퍼랜드 정보 방송 단계 동안:During the operand information broadcast phase:

오퍼랜드 전송 단계 동안:During the operand transfer phase:

주의: XX = {LU,SU,RUX,RUY}; Y={1,2}Attention: XX = {LU, SU, RUX, RUY}; Y = {1,2}

표 B.42 연산 유효 비트Table B.42 Operation Valid Bits

다음은 4 실행 파이프라인의 이슈 스테이지에서의 OpV 비트를 요약하고 있다.The following summarizes the OpV bits in the issue stage of the four execution pipeline.

표 B.43 RegOp 범핑Table B.43 RegOp Bumping

글로벌 제어 논리(520)는 신호 BumpRUX/Y를 다음과 같이 생성하는 논리를 포함한다. 아래에는 그렇지 않으면 데드록 상황이 될 수 있는 것을 처리하는 항이 포함된다.Global control logic 520 includes logic to generate signal BumpRUX / Y as follows. Below is a section dealing with what could otherwise be a deadlock situation.

신호 InhBumpRUX는 만일 오퍼랜드 전송 스테이지가 RUX-only 연산이 되고, 발생될 RegOp 또한 RUX-only 연산인 경우 RegOp 범핑을 금지한다.The signal InhBumpRUX inhibits RegOp bumping if the operand transfer stage becomes a RUX-only operation and the RegOp to be generated is also a RUX-only operation.

InhBumpRUX = OpInfo_RUX(RegOp). R1·OpV_RUX_Iss·OpInfo_RUX_0(RegOp).R1InhBumpRUX = OpInfo_RUX (RegOp). R1OpV_RUX_IssOpInfo_RUX_0 (RegOp) .R1

신호 BumpRUX는 금지되지 않는다면 실행 유닛(253)의 오퍼랜드 전송 스테이지밖에서 RegOp를 범프하기 위해 가정되고, 소스 연산중의 하나는 발생되지 않거나 또는 오퍼랜드 전송 스테이지내 LdOp 또는 타임아웃 신호는 타임아웃 카운트 이상동안 보류되는 오퍼랜드 전송 스테이지내 RegOp에 응하여 가정된다.The signal BumpRUX is assumed to bump RegOp outside the operand transfer stage of the execution unit 253 if not prohibited, and either one of the source operations is not generated or the LdOp or timeout signal in the operand transfer stage is held for longer than the timeout count. It is assumed in response to RegOp in the operand transfer stage.

제 2 레지스터 유닛(254) 밖으로 RegOp를 범프하는 신호 BumpRUY는 금지될 수 없지만, 그렇지않으면 신호 BumpRUX와 동일한 이유로 가정된다.The signal BumpRUY bumping RegOp out of the second register unit 254 cannot be inhibited, otherwise it is assumed for the same reason as the signal BumpRUX.

표 B.44 오퍼랜드 전송 멀티플렉서 제어Table B.44 Operand Transport Multiplexer Control

다음의 수학식은 각각의 오퍼랜드 멀티플렉서를 위한 5 입력 선택 신호를 요약한다. 글로벌 제어 논리(520)는 오퍼랜드를 제공하기 위해 오퍼랜드 버스(554) 또는 결과 버스(561 내지 564)중의 하나를 선택하기 위해 버스(553)상에서 오퍼랜드 상태 신호를 사용한다. 대부분의 오퍼랜드에서, 오퍼랜드 버스(554)는 만일 소스 연산이 완료되는 경우 선택된다.The following equation summarizes the five input selection signals for each operand multiplexer. Global control logic 520 uses operand status signals on bus 553 to select either operand bus 554 or result buses 561-564 to provide operands. In most operands, operand bus 554 is selected if the source operation is complete.

SelOprndBus_XXsrcY = State[3] + State[2]·Type[1]SelOprndBus_XXsrcY = State [3] + State [2] · Type [1]

RegOps의 제 2 오퍼랜드에서, 오퍼랜드 버스는 만일 소스 연산이 완료되거나 또는 오퍼랜드가 즉시값인 경우 선택된다.In the second operand of RegOps, the operand bus is selected if the source operation is complete or if the operand is an immediate value.

여기서 신호 RUXsrc2Imm 및 RUYsrc2Imm는 src2 오퍼랜드가 즉시값이라는 것을 나타낸다.Where signals RUXsrc2Imm and RUYsrc2Imm indicate that the src2 operand is an immediate value.

소스 연산을 실행하는 실행 유닛(251 내지 254)중의 하나로부터의 결과 버스는 만일 오퍼랜드 버스(554)가 선택되지 않는 경우 선택된다.The resulting bus from one of the execution units 251-254 executing the source operation is selected if the operand bus 554 is not selected.

선택된 오퍼랜드는 유효하지 않을 수 있다. 실행 유닛은 관련된 연산이 실행 스테이지(450)로부터 진행되는 것을 막으므로써 유효하지 않은 오퍼랜드를 사용하는 것을 방지한다.The selected operand may not be valid. The execution unit prevents the use of invalid operands by preventing the associated operation from proceeding from the execution stage 450.

표 B.45 유효하지 않은 오퍼랜드의 식별Table B.45 Identification of Invalid Operands

글로벌 제어 논리(520)는 실행 유닛 XX(XX={LU,SU,RUX,RUY}을 위한 오퍼랜드 srcY(Y={1,2})인지 여부를 나타내는 신호 OprndInvld_XXsrcY를 생성하기 위해 버스(553)로부터의 오퍼랜드 상태 신호를 사용한다.Global control logic 520 is generated from bus 553 to generate signal OprndInvld_XXsrcY indicating whether operand srcY (Y = {1,2}) for execution unit XX (XX = {LU, SU, RUX, RUY}). Use the operand status signal of.

OprndInvld_XXsrcY = ∼State[1] + ∼Type[1]·(∼State[2] + ∼State[3]·∼CHP_LUAdv2) + SrcYBM[2]·∼DestBM[2] + SrcYBM[1]·∼DestBM[1] + SrcYBM[0]·∼DestBM[0]OprndInvld_XXsrcY = -State [1] + -Type [1]-(-State [2] + -State [3]-CHP_LUAdv2) + SrcYBM [2]-DestBM [2] + SrcYBM [1]-DestBM [ 1] + SrcYBM [0] · DestBM [0]

표 B.46 홀드 신호 논리Table B.46 Hold Signal Logic

홀드 신호 SC_HoldXX0는 만일 요구된 오퍼랜드가 유효하지 않은 경우 연산이 실행 스테이지(450)로 진행하는 것을 방지하기 위해 생성된다. StOps는 제 2 실행 스테이지(460)때까지 데이터 오퍼랜드가 요구되지 않기 때문에 데이터 오퍼랜드가 아직 유효하지 않더라도 실행 스테이지로 진행하는 것을 허용받는다. 그런 만일 데이터 오퍼랜드가 여전히 유효하지 않다면 신호 SC_HoldSU2는 실행 스테이지(460)에서 연산을 유지한다.Hold signal SC_HoldXX0 is generated to prevent the operation from proceeding to execution stage 450 if the requested operand is invalid. StOps is allowed to proceed to the execution stage even though the data operand is not yet valid because no data operand is required until the second execution stage 460. If the data operand is still not valid, the signal SC_HoldSU2 holds the operation at execution stage 460.

표 B.47 상태 플래그 그룹Table B.47 Status Flag Groups

표준 x86 상태 플래그 비트 OF, SF, ZF, PF, CF, EZF, 및 ECF는 신호 STATUSV 및 필드 StatMod의 비트에 대응하는 4 그룹으로 다음과 같이 분할된다.The standard x86 status flag bits OF, SF, ZF, PF, CF, EZF, and ECF are divided into four groups corresponding to the bits of the signal STATUSV and field StatMod as follows.

표 B.48 상태 플래그 추출Table B.48 Status Flag Extraction

각각의 엔트리(16 내지 23)는 4 플래그 그룹에 대응하고 4 플래그 그룹의 상태 플래그 및 유효성 비트를 나타내는 신호 StatInfo_1, StatInfo_2, StatInfo_3, 및 StatInfo_4를 생성한다. 신호 StatInfo_1, StatInfo_2, StatInfo_3, 및 StatInfo_4 중 하나 또는 그 이상의 신호는 만일 엔트리가 대응하는 그룹의 스캔 체인에 의해 선택된는 경우 신호 STATUS 및 STATUSV를 생성하기 위해 사용된다. 다음에서, 접두사 "OPj:"는 필드 또는 신호 형태 엔트리 j를 나타낸다.Each entry 16 to 23 generates signals StatInfo_1, StatInfo_2, StatInfo_3, and StatInfo_4 corresponding to four flag groups and representing the status flags and validity bits of the four flag groups. One or more of the signals StatInfo_1, StatInfo_2, StatInfo_3, and StatInfo_4 are used to generate signals STATUS and STATUSV if the entry is selected by the scan chain of the corresponding group. In the following, the prefix "OPj:" denotes a field or signal type entry j.

구조적 상태 플래그 레지스터는 신호 FlgStatInfo_1, FlgStatInfo_2를 생성한다.The structural status flag register generates the signals FlgStatInfo_1 and FlgStatInfo_2.

다음의 논리는 플래그 그룹을 제공하기 위해 엔트리를 위치시키기 위한 룩 어헤드없는 4 스캔 체인을 나타낸다.The following logic represents a 4 scan chain without lookahead for locating entries to provide a flag group.

출력 상태 플래그 정보 신호는:The output status flag information signal is:

표 B.49 cc-RegOp 처리Table B.49 cc-RegOp Processing

신호 CCDepInRUX_0는 cc-dep RegOp가 레지스터 유닛 RUX의 오퍼랜드 전송 스테이지내에 있는지 여부를 나타내고, 오퍼랜드 전송 스테이지에서의 연산을 위한 연산 정보 및 유효 비트를 포함하는 파이프라인 레지스터로부터 생성된다.The signal CCDepInRUX_0 indicates whether cc-dep RegOp is in the operand transfer stage of the register unit RUX and is generated from a pipeline register containing operation information and valid bits for the operation at the operand transfer stage.

CCDepInRUX_0 = (OpInfo_RUX_0(RegOp)l.Type[3:2] = 'b01)·OpV_RUX_0CCDepInRUX_0 = (OpInfo_RUX_0 (RegOp) l.Type [3: 2] = 'b01) · OpV_RUX_0

신호 UnexecCCDepInQ3는 실행되지 않은 cc-dep RegOp가 열 3에 있는지 여부를 나타내고, 열 3의 엔트리내 타입 및 상태 비트로부터 생성된다.The signal UnexecCCDepInQ3 indicates whether an unexecuted cc-dep RegOp is in column 3, and is generated from the type and status bits in the entry of column 3.

다음의 논리는 오퍼랜드 전송 스테이지에서 RegOp에 요구된 상태 비트 그룹이 유효한지 여부를 나타내는 신호 StatV를 생성하도록 결정한다.The following logic determines to generate a signal StatV indicating whether the group of status bits required for RegOp is valid at the operand transfer stage.

신호 StrtExecCCDep는 실행되지 않은 cc-dep RegOp가 열 3에 있는 경우의 트랙을 유지한다.The signal StrtExecCCDep keeps track of when an unexecuted cc-dep RegOp is in column 3.

신호 UnexecCCDepInQ4는 실행되지 않은 cc-dep RegOp가 열 4에 있는 경우의 트랙을 유지한다.The signal UnexecCCDepInQ4 keeps track of when the unexecuted cc-dep RegOp is in column 4.

RUX 유닛으로부터, 신호 RUX_NoStatMod는 실행되는 연산이 상태 플래그를 수정하지 않는 것을 나타낸다. 사이클 지연 버전은 NoStatMod라고 불리운다.From the RUX unit, the signal RUX_NoStatMod indicates that the operation to be executed does not modify the status flag. The cycle delay version is called NoStatMod.

표 B.50 BRCOND 처리Table B.50 BRCOND Processing

다음의 수학식은 BRCOND 처리를 설명한다. 각각 중단점 및 싱글-스텝 트랩을 나타내는 신호인 신호 DTF 및 SSTF 아래에서 참조가 이루어진다. "다중 디코드 불가"의 신호 MDD는 한 시각에 하나 이상의 매크로 명령어가 스케쥴러(280)로 삽입되는 것을 방지하기 위해 디버그하는데 사용될 수 있다.The following equation describes BRCOND processing. Reference is made under the signals DTF and SSTF, which are signals representing breakpoints and single-step traps, respectively. A signal MDD of "no multiple decode" can be used to debug to prevent one or more macro instructions from being inserted into the scheduler 280 at a time.

BRCOND 처리는 먼저 BRCOND가 열 4에 있는지 여부를 결정한다. 신호 BRCONDj는 OPj가 계산되지 않은 BRCOND인지 여부를 나타낸다.The BRCOND process first determines whether BRCOND is in column 4. The signal BRCONDj indicates whether OPj is a BRCOND not calculated.

여기서 j는 엔트리 번호이고, Type, OpInfo, 및 S3은 엔트리 j의 필드이다. 신호 BRCONDInQ4는 열 4가 BRCOND를 포함하는지 여부를 나타낸다.Where j is an entry number and Type, OpInfo, and S3 are fields of entry j. Signal BRCONDInQ4 indicates whether column 4 contains BRCOND.

만일 BRCOND가 열 4에 있다면, 예언된 조건 코드는 BRCOND를 포함하는 엔트리의 필드 OpInfo로부터의 (SpecOp.cc)가 된다.If BRCOND is in column 4, the predicted condition code is (SpecOp.cc) from the field OpInfo of the entry containing BRCOND.

신호 CondCode[4:1]의 값은 다음과 같이 정의된다.(비트 CondCode[0]는 감각에 반응한다.)The value of the signal CondCode [4: 1] is defined as follows (bit CondCode [0] responds to the senses):

신호 CondV는 BRCOND의 계산에 요구되는 상태 비트가 유효한지 여부를 나타낸다.The signal CondV indicates whether the status bit required for the calculation of BRCOND is valid.

신호 HoldOpQ4A는 만일 BRCOND가 열 4에 있고 계산에 필요한 조건이 유효하지 않은 경우 열 4에서 Op quad의 시프트를 금지한다.The signal HoldOpQ4A prohibits the shift of the op quad in column 4 if BRCOND is in column 4 and the conditions required for the calculation are not valid.

여기서 신호 IP는 IP = SI_NMIP + SI_INTRP로 정의되고, 어떤 활성 h/w 인터럽트 요청이 있는지 여부를 나타낸다.Here, the signal IP is defined as IP = SI_NMIP + SI_INTRP, and indicates whether there are any active h / w interrupt requests.

신호 SC_Resolve는 해결 조건 분기를 나타낸다.The signal SC_Resolve indicates a solving condition branch.

레지스터는 quad 4에서 BRCOND의 해결을 나타내는 Signal Resolved를 기록한다.The register writes a Signal Resolved that represents the resolution of BRCOND in quad 4.

x86 MOVS(move string) 명령어는 연산의 엠코드 루프로 디코드된다. MOVS 명령어가 수행되는 속도를 개선하기 위해, 루프의 바이트 카운트가 4 이하가 될 때까지 전체 32비트 전송이 수행된다. 조건 BRCOND는 MOVS를 위한 카운트의 체크에서 사용된다. 신호 TermMOVS는 만일 이동 스트링이 거의 수행된 경우 엠코드 루프를 종료한다.The x86 MOVS (move string) instruction is decoded into the encode loop of the operation. To improve the speed at which MOVS instructions are performed, a full 32-bit transfer is performed until the byte count of the loop is less than or equal to four. The condition BRCOND is used in the check of counts for MOVS. The signal TermMOVS ends the encode loop if the moving string is nearly performed.

BRCOND를 위한 필드 DestVal로부터의 신호 BrVecAddrssm는 만일 분기가 잘못 예언되었다면 사용될 엠코드 또는 명령어 벡터 주소를 나타낸다.The signal BrVecAddrssm from the field DestVal for BRCOND indicates the MPEG or instruction vector address to be used if the branch is mispredicted.

신호 SC_OldRASPtr, SC_OldBPTInfo, 및 SC_RestartAddr는 명령어 디코더(240)를 재시작하기 위해 전송된다. 잘못 예언된 분기 또는 폴트에 응하여 재시작이 생성될 수 있다. 잘못 예언되거나 또는 폴트인 엔트리의 필드 RASPtr로부터의 신호 SC_OldRASPtr는 RASTOS 포인터를 재저장하기 위한 것이다. 신호 SC_OldBPTInfo는 분기 예언표를 정확하게 하기 위한 명확한 분기 예언표 정보를 나타낸다. 신호 SC_RestartAddr는 재시작에 따른 프로그램 카운터를 나타낸다.The signals SC_OldRASPtr, SC_OldBPTInfo, and SC_RestartAddr are sent to restart the instruction decoder 240. Restarts may be generated in response to mispredicted branches or faults. The signal SC_OldRASPtr from the field RASPtr of the entry that is mispredicted or faulted is for restoring the RASTOS pointer. Signal SC_OldBPTInfo represents clear branch prediction table information for correcting branch prediction table. The signal SC_RestartAddr indicates a program counter according to restart.

신호 BrVec2Emc 및 BrVec2Dec는 엠코더 또는 MacDec(252)으로부터의 BRCOND의 경우에서 잘못 예언된 BRCOND 때문에 재시작이 요구된다는 것을 나타낸다.The signals BrVec2Emc and BrVec2Dec indicate that a restart is required because of the mispredicted BRCOND in the case of an encoder or BRCOND from MacDec 252.

레지스터는 잘못된 예언을 기록한다:The register records false prophecies:

만일 BRCOND가 정확히 예언되지 않았다면, BRCOND는 다음과 같이 완료된 것으로 표시된다.If BRCOND was not predicted correctly, BRCOND is marked complete as follows.

성공적으로 해결되는 BRCOND는 열 5이 시프트할 수 있어서 열 4이 시프트하는 것을 막을 수 있기 때문에 한 사이클 이상동안 열 4에 안착할 수 있다. 이 시간동안, 신호 SC_Resolve는 가정되고, 신호 BrVec2XX중의 하나가 전체 시간(5 사이클 동안)동안 가정되어 버스(558)에 남게 된다. 명령어 디코더(240)는 신호 BrVec2XX가 비가정할 때까지 각각의 사이클을 재시작하는 것을 계속한다. 벡터 주소와 같은 모든 다른 관련된 신호들은 이 시간을 통해 적절한 값을 유지한다.Successfully resolved BRCOND can settle in column 4 for more than one cycle because column 5 can shift, preventing column 4 from shifting. During this time, the signal SC_Resolve is assumed, and one of the signals BrVec2XX is assumed for the entire time (for five cycles) and remains on the bus 558. The instruction decoder 240 continues to restart each cycle until the signal BrVec2XX is indeterminate. All other related signals, such as vector addresses, maintain their proper values through this time.

표 B.51 포기할 수 없는 RegOp 처리Table B.51 Non-Givable RegOp Processing

신호 NonAbInRUX_0는 포기가능하지 않은 RegOp가 RUX 오퍼랜드 전송 스테이지에 있는 것을 나타내기 위해 가정된다.The signal NonAbInRUX_0 is assumed to indicate that RegOp that is not abandonable is in the RUX operand transfer stage.

신호 UnexecNonAbInQ4는 포기가능하지 않은 RegOp가 스케쥴러(280)의 열 4에 있는 것을 나타내고, 엔트리(16 내지 19)의 필드 Type, OpInfo, 및 State로부터 생성된다.The signal UnexecNonAbInQ4 indicates that a non-abandonable RegOp is in column 4 of the scheduler 280 and is generated from the field Type, OpInfo, and State of entries 16-19.

신호 NonAbSync는 만일 포기가능하지 않은 RegOp가 RUX 오퍼랜드 전송 스테이지에 있고 열 4에 있지않거나 또는 앞선 BRCOND가 잘못 예언되었거나 트랩이 지연되는 경우, RUX 오퍼랜드 전송 스테이지로부터 진행을 보류하기 위해 사용된다.The signal NonAbSync is used to suspend progress from the RUX operand transport stage if a non-abandonable RegOp is in the RUX operand transport stage and not in column 4, or if the preceding BRCOND is mispredicted or the trap is delayed.

포기가능하지 않은 RegOp는 그것이 RUX 실행 스테이지로 진행할 때까지 열 4의 시프트를 막는다.RegOp, which is not abandonable, blocks the shift of column 4 until it proceeds to the RUX run stage.

HoldOpQ4B = UnexecNonAbInQ4HoldOpQ4B = UnexecNonAbInQ4

표 B.52 자체 수정 코드 처리 논리Table B.52 Self-Modifying Code Processing Logic

자체 수정 코드 처리 논리는 코드가 수정된 가능성을 제거하기위해 다음과 같이 비교한다.The self-modifying code processing logic compares to remove the possibility of code being modified.

표 B.53 레지스터 파일로의 실행Table B.53 Execution with Register Files

다음의 수학식은 쓰기 가능한 레지스터 파일 및 Op quad의 각각의 연산을 위한 DestBM 필드 및 신호 OprndMatch_XXsrcY 수정을 요약한다. 실행되도록 선택된 연산 결과는 신호 RegCmtSel에 의해 열 4 또는 열 5부터이다.The following equation summarizes the DestBM field and signal OprndMatch_XXsrcY modifications for each operation of the writable register file and the op quad. The result of the operation selected to be executed is from column 4 or column 5 by the signal RegCmtSel.

신호 CmtInh는 만일 열 5에서 연산에 제한 방해가 발생하거나 또는 트랩이 지연되는 경우 실행을 금지한다. 신호 RegCmtInh는 레지스터 실행을 금지한다.The signal CmtInh prohibits execution if a limiting disturbance occurs in the column 5 or if the trap is delayed. The signal RegCmtInh prohibits register execution.

신호 WrEnbli는 만일 실행되는 Op quad에 제한 방해가 없고, 열 내 더 오래된 연산이 더 오래되어 실행되는 경우 레지스터 파일(290)로의 실행을 가능하게 한다.The signal WrEnbli is free from restrictions on the Op quads that are executed, and allows execution into the register file 290 if the older operation in the column is older.

바이트 표시 DestBM는 결과가 레지스터 파일(290)로 실행되는 사이클에서 명확하다.The byte representation DestBM is clear in the cycle in which the result is executed into register file 290.

신호 OprndMatch_XXsrcY가 효과적으로 표시되어, 레지스터 파일(290)은 오퍼랜드를 제공한다.The signal OprndMatch_XXsrcY is effectively indicated so that register file 290 provides the operand.

표 B.54 상태 플래그 실행Table B.54 Status Flags Execution

다음의 수학식은 상태 그룹을 위한 누적 결과 생성 또는 선택 프로세스를 요약한다.The following equation summarizes the cumulative result generation or selection process for a state group.

표 B.55 StOp 실행Table B.55 StOp Execution

신호 StCmtSel는 엔트리(23 내지 16)중에 실행을 위해 선택된 StOp를 포함하는 것을 나타낸다. 실행되지 않은 StOp를 포함하는 가장 오래된 엔트리가 선택된다.Signal StCmtSel indicates to include the StOp selected for execution among entries 23-16. The oldest entry containing the StOp that was not executed is selected.

StCmtSel[3:0] = priority_encode((OPQ5:OpQV·UncmtStOp[0]),...,(OPQ5:OpQV·UncmtStOp[3]), (OPQ5:OpQV·UncmtStOp[4]),...,(OPQ5:OpQV·UncmtStOp[7]))StCmtSel [3: 0] = priority_encode ((OPQ5: OpQVUncmtStOp [0]), ..., (OPQ5: OpQVUncmtStOp [3]), (OPQ5: OpQVUncmtStOp [4]), ..., (OPQ5: OpQV ・ UncmtStOp [7]))

StCmtSel은 만일 엔트리(23 내지 16)가 선택되는 경우, b0000 내지 b0111와 동일하다. StCmtSel은 만일 아무런 엔트리도 선택되지 않는 경우, b1111와 동일하다.StCmtSel is equal to b0000 to b0111 if entries 23 to 16 are selected. StCmtSel is the same as b1111 if no entry is selected.

신호 CmtMask는 스케쥴러(280)의 마지막 2열내에 8 엔트리에 대응하는 8비트를 갖는다. 선택된 엔트리까지에서 가장 오래된 엔트리에 대응하는 비트는 제로이고, 남아있는 비트는 1이다.The signal CmtMask has 8 bits corresponding to 8 entries in the last two columns of the scheduler 280. The bit corresponding to the oldest entry up to the selected entry is zero, and the remaining bits are one.

신호 CmtCiaCda는 선택된 StOp가 CIA 또는 CDA 명령어라는 것을 나타낸다.The signal CmtCiaCda indicates that the selected StOp is a CIA or CDA command.

신호 StCmtInh는 만일 모든 실행이 금지되는 경우 StOp의 실행을 금지한다.The signal StCmtInh prohibits the execution of StOp if all executions are prohibited.

신호 StCmtV 및 Q5StCmtV는 열 5내 StOp 및 StOp가 이 사이클을 실행할 준비가 되어있는지 여부를 각각 나타낸다. 만일 아무런 StOp도 선택되지 않거나, StOp 실행이 금지되거나, 선택된 StOp가 완료되지 않았거나, 또는 더 오래된 StOp가 완료되지 않은 경우, StOp 실행은 없다.The signals StCmtV and Q5StCmtV indicate whether StOp and StOp in column 5 are ready to execute this cycle, respectively. If no StOp is selected, StOp execution is forbidden, the selected StOp has not completed, or older StOp has not completed, there is no StOp execution.

신호 StAdv는 StOp가 저장 실행 파이프라인의 스테이지(2)로 진행할 수 있는지 여부를 나타낸다.The signal StAdv indicates whether StOp can proceed to stage 2 of the storage execution pipeline.

신호 StRetire 및 Q5StRetire는 열-5 StOp중 어떤 것이 이 사이클을 실행하는지 여부를 나타낸다.The signals StRetire and Q5StRetire indicate which of the column-5 StOp executes this cycle.

신호 NewUncmtStOp는 실행되지도 않았고 실행되고 있지도 않은 최하 2열에서 모든 StOps를 식별한다.The signal NewUncmtStOp identifies all StOps in the bottom two columns that are neither running nor running.

만일 StOp가 실행되는 경우, UncmtStOp 비트는 다음과 같이 갱신된다.If StOp is executed, the UncmtStOp bit is updated as follows.

신호 Al1StCmt는 열 5의 모든 메모리 기록 StOps가 실행되었거나 또는 성공적으로 실행되고 있는지를 나타낸다.The signal Al1StCmt indicates whether all memory write StOps in column 5 have been executed or have been executed successfully.

신호 SC_HoldSC1는 OCU(260)가 저장 실행이 스테이지(2)로 진행할 준비가 된 것을 확신하는지를 나타낸다.The signal SC_HoldSC1 indicates whether the OCU 260 is sure that the store run is ready to proceed to stage 2.

SC_HoldSC1 = ∼StCmtV + CmtCiaCdaSC_HoldSC1 =-StCmtV + CmtCiaCda

저장 유닛(252)은 제 2 실행 스테이지에서 발생한 StOp에서의 폴트를 표시하는 신호 SUViol를 생성한다. 만일 선택된 StOp가 제 2 실행 스테이지에서 삭제되어 폴트를 일으키는 경우 생성될 것이다.The storage unit 252 generates a signal SUViol indicating a fault in StOp that occurred at the second execution stage. It will be created if the selected StOp is deleted at the second execution stage causing a fault.

표 B.56 Op quad 회수Table B.56 Op quad count

다음의 수학식은 OCU의 Op quad 회수 제어 논리를 요약한다.The following equation summarizes the op quad retrieval control logic of the OCU.

OpQRetire = OP20:S3·OP21:S3·OP22:S3·OP23:S3·AllStCmtOpQRetire = OP20: S3, OP21: S3, OP22: S3, OP23: S3, AllStCmt

신호 OpQRetire는 동일한 Op quad를 위한 다중 사이클을 위해 가정될 수 있다. 이것은 최하 Op quad의 시프트가 일시적으로 금지되는 경우에 발생한다.The signal OpQRetire can be assumed for multiple cycles for the same Op quad. This occurs when the shift of the lowest Op quad is temporarily prohibited.

Op quad가 회수 또는 포기되는 경우, 누적된 상태 플래그가 실행된다.When the op quad is reclaimed or abandoned, the accumulated status flag is executed.

표 B.57 LdOp 포기Table B.57 LdOp Abandonment

OCU(260)는 만일 그것이 완료되지 않고 더 오래된 모든 연산이 완료되고 실행된 경우 열 5에서 LdOp를 위한 포기 신호 LdAbort를 생성한다.OCU 260 generates abandon signal LdAbort for LdOp in column 5 if it is not completed and all older operations are completed and executed.

표 B.58 FAULT OP 포기Table B.58 FAULT OP Waiver

다음의 수학식은 OCU의 FAULT 연산 처리 논리를 요약한다.The following equation summarizes the FAULT operation processing logic of the OCU.

표 B.59 LDDHA/LDAHA 처리 논리Table B.59 LDDHA / LDAHA Processing Logic

OCU는 그들이 적절한 디폴트 처리기 주소 레지스터로 DestVal을 로드하므로써 엔트리(23)에 도달하는 경우 LDDHA 및 LDAHA 연산을 처리한다.The OCU handles LDDHA and LDAHA operations when they arrive at entry 23 by loading DestVal into the appropriate default handler address register.

신호 EffAltFltVecAddr는 LDAHA 연산과 동일한 Op quad내 Ops상에 폴트를 위한 새로운 대체 처리기 주소를 제공한다.The signal EffAltFltVecAddr provides a new alternate processor address for faults on Ops in the same Op quad as the LDAHA operation.

처리기 주소간의 교환 및 스위치는 주위 연산상의 폴트 인식으로 동기화된다.Exchanges and switches between processor addresses are synchronized with fault recognition on surrounding operations.

OPQ는 Op quad 필드를 인용한다.OPQ quotes the Op quad field.

표 B.60 분기 목표 제한 방해 처리Table B.60 Quarterly Target Limit Interference Handling

만일 분기 목표 제한 방해를 갖는 것과 같이 태그된 유효한 Op quad가 열 5에 도달하는 경우 OCU(260)는 포기 신호 LimAbort를 생성한다.OCU 260 generates abandon signal LimAbort if a valid valid quad tagged with a branch target limit disturb reaches column 5.

LimAbort = OPQ5:(OpQV·LimViol)LimAbort = OPQ5: (OpQVLimViol)

표 B.61 잘못 예언된 BRCOND에서의 포기Table B.61 Abandonment in Mispredicted BRCOND

OCU(260)는 열 5에서 완료되지 않은 BRCOND를 앞선 모든 연산이 완료된 경우 잘못 예언된 BRCOND을 위한 포기 신호 BrAbort를 생성한다.OCU 260 generates abandonment signal BrAbort for the mispredicted BRCOND when all operations preceding BRCOND that have not been completed in column 5 are completed.

다음 연산의 실행은 완료되지 않은 BRCOND의 State(즉, ∼S3)에 의해 금지된다. 또한, FltAbort가 가정되는 경우 BrAbort가 가정되지만, 이것은 해가 되는 것은 아니다.Execution of the next operation is prohibited by the state of BRCOND (that is, S3) that is not completed. Further, BrAbort is assumed when FltAbort is assumed, but this is not harmful.

표 B.62 포기 사이클 논리Table B.62 Abandon Cycle Logic

신호 ExcpAbort는 재시작을 위해 벡터 주소를 요구하는 어떠한 포기 조건에서의 포기를 나타낸다.The signal ExcpAbort indicates abandonment in any abandonment condition that requires a vector address for restart.

ExcpAbort = LdAbort + StAbort + FltAbort + TrapAbort + SCResetExcpAbort = LdAbort + StAbort + FltAbort + TrapAbort + SCReset

신호 SC_EAbort 또한 잘못 예언된 BRCOND에서의 포기를 포함한다.The signal SC_EAbort also includes abandonment in the mispredicted BRCOND.

SC_EAbort = ExcpAbort + BrAbortSC_EAbort = ExcpAbort + BrAbort

포기는 클럭 에지에서 신호 SC_Abort에 의해 초기화된다.Abandonment is initiated by the signal SC_Abort at the clock edge.

@clk:SC_Abort = SC_EAbort@clk: SC_Abort = SC_EAbort

포기로 인해 발행된 차이를 위해 요구된 정보는 다음과 같이 제공된다.The information required for the differences issued by the waiver is provided as follows:

엠코드 벡터 주소 선택:Select MPEG Vector Address:

Claims (27)

다수의 실행 유닛; 및 실행 유닛과 연결된 스케쥴러로 이루어지고,Multiple execution units; And a scheduler associated with the execution unit, 상기 스케쥴러는The scheduler 각각의 엔트리가 엔트리와 관련된 연산을 설명하는 정보를 저장하기 위한 메모리 필드를 포함하는 다수의 엔트리; 실행을 위해 실행 유닛으로 발생하기 위한 연산을 선택하도록 엔트리를 스캔하는 논리; 발생된 연산의 실행을 위해 실행 유닛으로 정보를 제공하는 논리; 및 앞서 발생된 연산과 관련된 엔트리내 앞서 발생된 연산의 실행으로부터의 결과를 저장하는 논리로 이루어지는 것을 특징으로 하는 프로세싱 시스템.A plurality of entries, each entry including a memory field for storing information describing an operation associated with the entry; Logic to scan the entry to select an operation to occur in the execution unit for execution; Logic for providing information to an execution unit for execution of the generated operation; And logic to store the result from the execution of the previously generated operation in the entry associated with the previously generated operation. 제 1 항에 있어서,The method of claim 1, 스케쥴러와 연결된 연산 수행 유닛을 구비하고,A calculation execution unit connected to the scheduler, 연산 수행 유닛은 새로운 연산이 스케쥴러내 엔트리와 관련될 수 있도록 스케쥴러에서 연산을 끝내고 제거하며,The operation execution unit finishes and removes operations from the scheduler so that new operations can be associated with entries in the scheduler, 연산 수행 유닛은 만일 결과가 엔트리에 저장되고 프로세싱 시스템에 의해 실행된 프로그램에 요구되는 경우 결과를 상치(常置)하는 것을 특징으로 하는 프로세싱 시스템.And wherein the operation performing unit replaces the result if the result is stored in an entry and is required by a program executed by the processing system. 제 2 항에 있어서,The method of claim 2, 레지스터 화일을 구비하고, 연산 수행 유닛은 스케쥴러내 엔트리로부터 레지스터 파일로 결과를 전송하므로써 결과를 상치하는 것을 특징으로 하는 프로세싱 시스템.And a register file, wherein the operation performing unit offsets the result by transferring the result from an entry in the scheduler to a register file. 제 3 항에 있어서,The method of claim 3, wherein 상태 레지스터를 구비하고, 연산 수행 유닛은 결과에 의해 표시된 상태 플래그값을 엔트리로부터 상태 플래그 레지스터로 전송하므로써 결과를 상치하는 것을 특징으로 하는 프로세싱 시스템.And a status register, wherein the operation performing unit offsets the result by transferring the status flag value indicated by the result from the entry to the status flag register. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서,The method according to any one of claims 1 to 4, 스케쥴러내 엔트리는 최상열에서 시작하여 최하열에서 끝나는 열의 시퀀스로 그룹되고, 각각의 열은 다수의 엔트리를 포함하며, 최하열을 제외한 각각의 열의 엔트리의 메모리 필드는 시퀀스의 다음 열내 엔트리의 메모리 필드와 연결되고,The entries in the scheduler are grouped into a sequence of columns starting at the top row and ending at the bottom row, each column containing a number of entries, the memory field of each entry except the bottom row being concatenated with the memory field of the entry in the next column of the sequence, , 스케쥴러는 최하열을 제외한 각각의 열의 제어 신호를 생성하는 글로벌 제어 논리를 구비하며, 각각의 제어 신호는 열의 메모리 필드에 저장된 정보가 시퀀스의 다음 열내 메모리 필드로 시프트하는 것을 특징으로 하는 프로세싱 시스템.The scheduler has global control logic to generate a control signal for each column except the lowest column, wherein each control signal shifts the information stored in the memory field of the column to the memory field in the next column of the sequence. 제 5 항에 있어서,The method of claim 5, 제어 논리는 연산 수행 유닛이 스케쥴러의 최하열내 엔트리와 관련된 모든 연산을 끝내는 것에 응하여 스케쥴러의 열의 정보를 스케쥴러의 최하열로 시프트하게 하는 신호를 생성하는 것을 특징으로 하는 프로세싱 시스템.And the control logic generates a signal that causes the operation performing unit to shift the information in the scheduler's column to the lowest column in the scheduler in response to completing all operations associated with the entry in the lowest column of the scheduler. 제 5 항 또는 제 6 항에 있어서,The method according to claim 5 or 6, 프로세싱 시스템에 의해 실행될 프로그램을 구성하는 명령어로부터 연산 세트를 생성하는 명령어 디코더를 구비하고, 명령어 디코더는 연산 세트와 관련된 정보를 스케쥴러의 최상열의 엔트리로 로드하도록 연결된는 것을 특징으로 하는 프로세싱 시스템.And an instruction decoder for generating an operation set from instructions constituting a program to be executed by the processing system, wherein the instruction decoder is coupled to load information associated with the operation set into the topmost entry of the scheduler. 제 7 항에 있어서,The method of claim 7, wherein 글로벌 제어 논리는 스케쥴러의 최상열로 마지막 로드된 정보가 시프트하지 않거나 스케쥴러의 다음 열로 현재 시프트하고 있지 않다면, 스케쥴러의 최상열에 연산 세트를 로드하는 것을 금지하는 명령어 디코더로 신호를 생성하는 것을 특징으로 하는 프로세싱 시스템.The global control logic generates a signal with a command decoder that prohibits loading a set of operations into the top row of the scheduler if the last loaded information in the top row of the scheduler does not shift or is currently shifting to the next row in the scheduler. system. 제 7 항 또는 제 8 항에 있어서,The method according to claim 7 or 8, 명령어 디코더가 실행될 프로그램내 조건부 분기 명령을 만나는 경우, 명령어 디코더는:If the instruction decoder encounters a conditional branch instruction in the program to be executed, the instruction decoder: 예언된 명령어 주소가 조건부 분기 명령을 따르도록 결정; 및Determine that the predicted instruction address follows a conditional branch instruction; And 실행될 때 예언이 정확했는지 여부를 발생시키는 연산과 관련된 정보를 스케쥴러의 최상열의 엔트리로 로드하는 것을 특징으로 하는 프로세싱 시스템.Processing information that, when executed, loads information related to the operation that generates whether the prediction was correct into the entry in the top row of the scheduler. 제 5 항 내지 제 9 항 중 어느 한 항에 있어서,The method according to any one of claims 5 to 9, 스케쥴러는The scheduler 상태 레지스터; 및Status register; And 상태 레지스터에 저장된 값으로부터 상태 플래그 비트를 생성하고, 스케쥴러의 필드에 저장되도록 하며, 상태 플래그 비트가 상태 플래그 논리와 관련되는 스케쥴러의 선택된 행의 경계에서 연산에 유효한지 여부를 나타내는 유효성 비트를 생성하는 것을 특징으로 하는 프로세싱 시스템.Generate a status flag bit from the value stored in the status register, cause it to be stored in a field of the scheduler, and generate a validity bit indicating whether the status flag bit is valid for operation at the boundary of the selected row of the scheduler associated with the status flag logic. Processing system, characterized in that. 제 10 항에 있어서,The method of claim 10, 제 1 연산의 특정한 실행 스테이지의 완료를 위해 상태 플래그 비트를 요구하는 제 1 연산에서, 상태 플래그 논리는 제 1 연산과 관련된 정보가 상태 플래그 논리와 관련된 선택된 열의 경계로 시프트할 때까지 제 1 연산이 실행 스테이지로 들어가는 것을 방지하는 신호를 생성하는 것을 특징으로 하는 프로세싱 시스템.In a first operation that requires a state flag bit for completion of a particular execution stage of the first operation, the state flag logic continues to operate until the information associated with the first operation shifts to the boundary of the selected column associated with the state flag logic. And a signal generation to prevent entry into the execution stage. 제 11 항에 있어서,The method of claim 11, 글로벌 제어 논리는 제 1 연산이 선택된 열의 경계에 도달한 후 상태 비트를 요구하는 실행 스테이지에 제공되는 연산에서 상태 플래그 비트가 유효할 때까지 경계로부터 떨어진 제 1 연산으로 시프트하는 것을 금지하는 신호를 생성하는 것을 특징으로 하는 프로세싱 시스템.The global control logic generates a signal that prevents the first operation from shifting to the first operation away from the boundary until the status flag bit is valid in an operation provided to the execution stage that requires the status bit after reaching the boundary of the selected column. Processing system, characterized in that. 제 11 항 또는 제 12 항에 있어서,The method according to claim 11 or 12, 상태 플래그 논리는 제 1 연산 타입이 선택된 경계 위의 열에 있는 경우 제 1 연산 타입의 실행을 위해 상태 플래그 비트를 동시에 제공할 수 있고, 제 2 연산 타입이 선택된 경계 아래의 열에 있는 경우 제 2 연산 타입의 실행을 위해 상태 플래그 비트를 동시에 제공할 수 있는 것을 특징으로 하는 프로세싱 시스템.The status flag logic may simultaneously provide status flag bits for execution of the first operation type if the first operation type is in a column above the selected boundary, and the second operation type if the second operation type is in a column below the selected boundary. And may simultaneously provide a status flag bit for execution of the. 제 13 항에 있어서,The method of claim 13, 제 2 연산 타입은 조건부 분기 계산인 것을 특징으로 하는 프로세싱 시스템.And the second type of operation is a conditional branch calculation. 제 1 항 내지 제 14 항 중 어느 한 항에 있어서,The method according to any one of claims 1 to 14, 프로세싱 시스템은 싱글 칩 프로세서의 일부분을 구성하는 것을 특징으로 하는 프로세싱 시스템.The processing system comprises part of a single chip processor. 제 1 항 내지 제 14 항 중 어느 한 항에 있어서,The method according to any one of claims 1 to 14, 데이터 및 명령을 저장하는 메모리 서브시스템을 구비하는 것을 특징으로 하는 프로세싱 시스템.And a memory subsystem for storing data and instructions. 제 16 항에 있어서,The method of claim 16, 프로세싱 시스템은 컴퓨터 머더보드의 구성요소중의 일부분을 구성하는 것을 특징으로 하는 프로세싱 시스템.The processing system comprises a portion of the components of the computer motherboard. 제 17 항에 있어서,The method of claim 17, 머더보드는 프로세서와 실시가능하게 연결된 백플레인 버스를 구비하고, 프로세싱 시스템은 백플레인 버스를 통해 머더보드와 연결된 카드상에 하나 또는 그 이상의 장치를 구비하는 것을 특징으로 하는 프로세싱 시스템.The motherboard includes a backplane bus operatively coupled to the processor, and the processing system includes one or more devices on a card connected with the motherboard via the backplane bus. 제 1 항 내지 제 14 항 또는 제 16 항 중 어느 한 항에 있어서,The method according to any one of claims 1 to 14 or 16, 프로세싱 시스템은 네트워크 서버의 일부분을 구성하는 것을 특징으로 하는 프로세싱 시스템.The processing system comprises part of a network server. 제 1 항 내지 제 14 항 또는 제 16 항 중 어느 한 항에 있어서,The method according to any one of claims 1 to 14 or 16, 프로세싱 시스템은 멀티미디어 컴퓨터 시스템의 일부분을 구성하고,The processing system forms part of the multimedia computer system, 멀티미디어 컴퓨터 시스템은: 멀티미디어 성능 장치; 멀티미디어 성능 장치와 연결되고, 멀티미디어 신호 포착 장치와 연결되며, 멀티미디어 신호를 합성하고 샘플링하기 위한 신호 변환 인터페이스를 포함하는 멀티미디어 어댑터; 및 멀티미디어 데이터의 전송을 통신하기 위해 멀티미디어 어댑터와 연결된 입출력 버스로 이루어지며,The multimedia computer system includes: a multimedia performance device; A multimedia adapter coupled with the multimedia performance device, coupled with the multimedia signal acquisition device, and including a signal conversion interface for synthesizing and sampling the multimedia signal; And an input / output bus connected to the multimedia adapter for communicating the transmission of the multimedia data. 프로세싱 시스템은 멀티미디어 데이터를 프로세스하고 프로세싱 시스템과 멀티미디어 어댑터사이에서의 멀티미디어 데이터의 통신을 제어하는 입출력 버스와 연결되는 것을 특징으로 하는 프로세싱 시스템.The processing system is connected to an input / output bus that processes the multimedia data and controls the communication of the multimedia data between the processing system and the multimedia adapter. 그 프로그램 순서가 엔트리의 물리적 순서와 일치하는 연산을 유지하는 다수의 엔트리;A plurality of entries for maintaining operations whose program order matches the physical order of entries; 제 1 실행 유닛에 의해 실행될 연산의 물리적 순서에 따라 다수의 엔트리를 서치하는 제 1 이슈 선택 회로;First issue selection circuitry for searching a plurality of entries according to a physical order of operations to be executed by the first execution unit; 오퍼랜드 값을 스케쥴러로부터 제 1 실행 유닛으로 전송하는 오퍼랜드 전송 회로; 및Operand transmission circuitry for transmitting the operand value from the scheduler to the first execution unit; And 결과가 오퍼랜드 전송 회로에 의한 전송에 유효한 경우 실행된 연산에 대응하는 엔트리내 제 1 실행에 의해 실행된 연산 결과를 저장하는 결과 전송 회로로 이루어지는 것을 특징으로 하는 연산 스케쥴러.And a result transfer circuit for storing the result of the operation executed by the first execution in the entry corresponding to the executed operation if the result is valid for transfer by the operand transfer circuit. 제 21 항에 있어서,The method of claim 21, 제 2 실행 유닛에 의해 실행될 연산의 물리적 순서에 따라 다수의 엔트리를 서치하는 제 2 이슈 선택 회로를 구비하고, 오퍼랜드 전송 회로는 오퍼랜드 값을 스케쥴러로부터 제 2 실행 유닛으로 전송하며, 결과 전송 회로는 실행된 연산에 대응하는 엔트리에서 제 2 실행에 의해 실행된 연산의 결과를 저장하는 것을 특징으로 하는 연산 스케쥴러.A second issue selection circuit for searching a plurality of entries according to the physical order of the operations to be executed by the second execution unit, the operand transmission circuit transferring the operand value from the scheduler to the second execution unit, and the result transmission circuit executing And a result of the operation executed by the second execution in the entry corresponding to the calculated operation. 제 22 항에 있어서,The method of claim 22, 제 1 실행 유닛은 제 2 실행 유닛이 실행되도록 디자인되지 않은 연산을 실행할 수 있는 것을 특징으로 하는 연산 스케쥴러.And wherein the first execution unit is capable of executing an operation that is not designed for execution by the second execution unit. 프로그램에서 디코드된 비규칙적 연산 실행 방법에 있어서,In a program that executes decoded irregular operations, 만일 스케쥴러의 최상열이 비었거나 또는 다음 낮은 열로 시프트하는 경우 스케쥴러의 최상열내 엔트리로 연산 세트를 로드하는 단계;Loading a set of operations into entries in the top column of the scheduler if the top column of the scheduler is empty or shifts to the next lower column; 만일 다음 낮은 열이 비었거나 또는 다음 낮은 열내 연산이 시프트하는 경우 스케쥴러의 각각의 열의 연산을 다음 낮은 열로 시프트하는 단계;Shifting the operation of each column of the scheduler to the next lower column if the next lower column is empty or the next lower intra column operation shifts; 실행 유닛 발생을 위한 연산을 선택하기 위해 최하열에서 최상열의 방향으로 스케쥴러를 스캐닝하는 단계;Scanning the scheduler in the direction of the lowest column to the highest column to select an operation for execution unit generation; 연산에 대응하는 스케쥴러의 엔트리내 연산의 실행으로부터의 결과를 일시적으로 저장하는 단계;Temporarily storing a result from the execution of an operation in the entry of the scheduler corresponding to the operation; 스케쥴러의 최하열로부터의 결과를 레지스터 파일로 수행하는 단계; 및Performing results from the lowest column of the scheduler into a register file; And 만일 현재 최하열내 정보와 관련된 모든 연산의 실행으로부터의 결과가 수행되었거나 또는 요구되지 않은 경우 최하열로 정보를 시프트하는 단계로 이루어지는 것을 특징으로 하는 방법.Shifting the information to the lowest column if a result from the execution of all operations related to the current lowest column information is performed or not required. 제 24 항에 있어서,The method of claim 24, 포기 연산을 선행한 어떠한 연산을 수행하는 단계; 및 포기 연산이 스케쥴러의 최하열에 도달하는 경우 스케쥴러내 모든 연산을 포기하는 단계를 구비하고,Performing any operation preceding the abandon operation; And abandoning all operations in the scheduler when the abandon operation reaches the lowest column of the scheduler. 연산을 포기하는 단계에서는 연산의 실행이 요구되지 않는다고 표시하도록 연산을 세트하는 것을 특징으로 하는 방법.Giving up the operation to indicate that execution of the operation is not required. 제 24 항 또는 제 25 항에 있어서,The method of claim 24 or 25, 제 1 실행 유닛으로 발생된 제 1 연산을 선행한 어떤 연산을 수행하는 단계;Performing any operation preceding the first operation generated in the first execution unit; 제 1 연산이 최하열에 있는 동안, 제 1 실행 유닛이 제 1 연산의 실행을 완료했는지 여부를 결정하는 단계; 및While the first operation is at the bottom row, determining whether the first execution unit has completed execution of the first operation; And 최하열에 있는 경우 완료되지 않은 제 1 연산에 응하여 스케쥴러내 모든 연산을 포기하며 제 1 실행 유닛은 제외하는 것을 시그널하는 단계를 구비하고,If at the bottom row, signaling all operations in the scheduler to be abandoned in response to an incomplete first operation and excluding the first execution unit, 연산을 포기하는 단계는 연산의 수행이 요구되지 않는다고 표시하는 상태로 연산을 세트하는 것을 특징으로 하는 방법.Abandoning an operation comprises setting the operation to a state that indicates that the operation is not required. 제 24 항에 있어서,The method of claim 24, 명령어 디코더가 조건부 분기 연산을 잘못 예언했는지 여부를 결정하기 위해 조건부 분기 연산을 실행하는 단계;Executing a conditional branch operation to determine whether the instruction decoder incorrectly predicted the conditional branch operation; 조건부 분기 연산이 잘못 예언되었는지를 결정할 때 명령어 디코더를 재시작하는 단계;Restarting the instruction decoder when determining whether the conditional branch operation has been mispredicted; 조건부 분기가 최하열에 도달할 때까지 스케쥴러로 연산을 로드하는 것을 금지하는 단계;Inhibiting loading the operation into the scheduler until the conditional branch reaches the bottom row; 조건부 분기를 선행한 어떠한 연산을 수행하는 단계; 및Performing any operation preceding a conditional branch; And 조건부 분기가 스케쥴러의 최하열에 있는 경우 스케쥴러내 모든 연산을 포기하는 단계를 구비하고,Abandoning all operations in the scheduler if the conditional branch is at the bottom of the scheduler, 상기 조건부 분기 연산을 실행하는 단계는 조건부 분기 연산이 스케쥴러의 최상열과 최하열 사이의 열에 있는 경우 발생하며, 상기 연산을 포기하는 단계는 연산의 실행이 요구되지 않은 것을 나타내는 상태로 연산을 세트하는 것을 특징으로 하는 방법.The step of executing the conditional branch operation occurs when the conditional branch operation is in a column between the top and bottom columns of the scheduler, and the step of abandoning the operation sets the operation to a state indicating that the execution of the operation is not required. How to.
KR10-1998-0702572A 1995-10-06 1996-10-04 Unified multi-function operation scheduler for out-of-order execution in a superscalar processor KR100459152B1 (en)

Applications Claiming Priority (9)

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

Publications (2)

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

Family

ID=65985787

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-1998-0702572A KR100459152B1 (en) 1995-10-06 1996-10-04 Unified multi-function operation scheduler for out-of-order execution in a superscalar processor

Country Status (1)

Country Link
KR (1) KR100459152B1 (en)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10635439B2 (en) * 2018-06-13 2020-04-28 Samsung Electronics Co., Ltd. Efficient interface and transport mechanism for binding bindless shader programs to run-time specified graphics pipeline configurations and objects

Also Published As

Publication number Publication date
KR100459152B1 (en) 2005-06-23

Similar Documents

Publication Publication Date Title
US5799165A (en) Out-of-order processing that removes an issued operation from an execution pipeline upon determining that the operation would cause a lengthy pipeline delay
US5884059A (en) Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
EP0870228B1 (en) Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5682492A (en) Computer processor with distributed pipeline control that allows functional units to complete operations out of order while maintaining precise interrupts
EP0651321B1 (en) Superscalar microprocessors
US5632023A (en) Superscalar microprocessor including flag operand renaming and forwarding apparatus
US5881261A (en) Processing system that rapidly indentifies first or second operations of selected types for execution
US5835747A (en) Hierarchical scan logic for out-of-order load/store execution control
EP0957428B1 (en) Method and apparatus for fetching non-contiguous instructions in a data processing system
KR20020025687A (en) Converting short branches to predicated instructions
US20040064684A1 (en) System and method for selectively updating pointers used in conditionally executed load/store with update instructions
US8683261B2 (en) Out of order millicode control operation
EP1099158B1 (en) Processor configured to selectively free physical registers upon retirement of instructions
JP3153906B2 (en) Computer distributed pipeline control apparatus and method
JP3683439B2 (en) Information processing apparatus and method for suppressing branch prediction
KR100384213B1 (en) A processing system, selection circuit and methods for identifying first or second objects of selected types in a sequential list
KR19990064093A (en) Integrated function scheduler for irregular execution in superscalar processors
EP0853787B1 (en) Scan chain for rapidly identifying first or second objects of selected types in a sequential list
EP0853786B1 (en) Out-of-order processing with operation bumping to reduce pipeline delay

Legal Events

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

Payment date: 20101029

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee