KR20010050794A - 개선된 분기 제어 명령을 이용하는 프로세서 구조 및동작 - Google Patents

개선된 분기 제어 명령을 이용하는 프로세서 구조 및동작 Download PDF

Info

Publication number
KR20010050794A
KR20010050794A KR1020000057686A KR20000057686A KR20010050794A KR 20010050794 A KR20010050794 A KR 20010050794A KR 1020000057686 A KR1020000057686 A KR 1020000057686A KR 20000057686 A KR20000057686 A KR 20000057686A KR 20010050794 A KR20010050794 A KR 20010050794A
Authority
KR
South Korea
Prior art keywords
instruction
branch
target
address
instructions
Prior art date
Application number
KR1020000057686A
Other languages
English (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
Application filed by 가나이 쓰토무, 가부시키가이샤 히타치세이사쿠쇼 filed Critical 가나이 쓰토무
Publication of KR20010050794A publication Critical patent/KR20010050794A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy

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)
  • Executing Machine-Instructions (AREA)

Abstract

프로그램 실행 성능을 최적화하기 위해 개선된 분기 제어 및 분기 명령을 사용하는 프로세서가 개시된다. 유연한 명령 파라미터 필드는 특정 컴퓨팅 환경에 가장 적합한 다양한 새로운 분기 제어 및 분기 명령 구현을 허용한다. 이들 명령은 또한 프로그램 실행에 앞서 타겟 명령 버퍼의 적재를 최적화하는 데 사용되는 개별 예측 비트를 가짐으로써 프로세서 내의 파이프라인이 실제 프로그램 실행 동안 우수한 성능을 갖도록 한다.

Description

개선된 분기 제어 명령을 이용하는 프로세서 구조 및 동작{PROCESSOR ARCHITECTURE AND OPERATION FOR EXPLOITING IMPROVED BRANCH CONTROL INSTRUCTION}
본 발명은 고성능 컴퓨팅 시스템 및 명령 실행을 개선하기 위한 방법에 관한 것으로서, 특히 고도로 파이프라인화된 프로세서에서의 명령 지연을 줄이는 데 유용한 시스템 및 방법에 관한 것이다.
현대의 많은 컴퓨팅 시스템은 명령 처리량을 증가시키기 위해 파이프라인식 구조를 가진 프로세서를 사용하고 있다. 이론적으로, 파이프라인식 프로세서는 잘 정돈된 순차 명령 스트림이 실행되고 있을 때 머신 싸이클 당 하나의 명령을 실행할 수 있다. 이것은 명령 자체가 다수의 독립적인 마이크로 명령이 실행될 것을 요구하는 경우에도 이루어진다. 파이프라인식 프로세서는 하나의 명령의 실행을 하나의 머신 싸이클이 완료되기를 각각 요구하는 여러 개의 단계로 분할함으로써 작동된다. 예컨대, 통상의 시스템에서 하나의 명령은 많은 머신 싸이클(페치, 디코드, ALU 연산 등)이 완료되는 것을 필요로 한다. 파이프라인식 프로세서에서는 제1 명령의 실제적인 실행이 완료되기 전에 제2 명령의 처리를 시작함으로써 레이턴시가 감소된다. 상기 예에서, 사실은 다수의 명령은 임의의 주어진 시간에 각종 처리 단계에 있을 수 있다. 따라서, 시스템의 전체 명령 실행 레이턴시(이것은 일반적으로 명령열이 시작되는 시간과 실행이 종료되는 시간 사이의 지연으로 생각될 수 있음)가 크게 감소될 수 있다.
상기한 구조는 프로그램 실행이 순차적인 흐름 경로를 따를 때 양호하게 작동된다. 즉, 이 모델은 순차적인 프로그램 실행 모델을 전제로 하는데, 여기서 프로그램 내의 각 명령은 바로 실행된 명령을 뒤따르는 메모리 내의 바로 다음 명령이다. 그러나, 프로그램의 중요한 요건 및 특징은 프로그램 실행 흐름을 다른 명령 세트로 분기 또는 리다이렉트(redirect)시키는 능력이며, 현재의 프로그램과 다른 실행 프로그램에서 분기 명령을 사용하여 조건부적인 제어 전달이 몇몇 다른 경로로 이루어질 수 있다. 그러나, 이 경로는 방금 실행된 명령을 뒤따르는 바로 다음 명령 세트와 일치할 수도 있고 일치하지 않을 수도 있다.
일반적으로, 종래의 프로세서는 실행될 명령을 위한 분기 타겟 어드레스를 포함하는 단일 어드레스 레지스터를 구비하고 있다. 분기 타겟 어드레스는 분기 명령의 목적 어드레스를 나타내는 어드레스이다. 분기 명령은 정확한 분기 명령용 타겟 어드레스가 이미 어드레스 레지스터에 저장되어 있는 경우에 프로세서에 의해 빠르게 실행된다. 그러나, 분기 명령은 임의의 특정 프로그램에서 임의로 발생할 수 있으며, 프로그램 흐름이 리다이렉트될 것인가를 빨리 확실하게 예측하는 것을 불가능하다. 분기 명령의 결과에 대해 추측하는 다양한 기술이 공지되어 있으며, 흐름이 다른 명령 세트로 지정되는 경우에 정확한 타겟 어드레스는 미리 계산될 수 있으며, 대응하는 명령 세트가 메모리로부터 미리 프리페치되어 적재됨으로써 메모리 액세스 레이턴시를 줄일 수 있게 된다. 일반적으로, 메모리 액세스는 파이프라인 동작보다 매우 느리게 실행되므로, 다음 명령의 검색 중에 실행이 지연될 수 있다.
그러나, 종종 분기 결과에 대한 추측은 정확하지 않으며, 이것은 "버블" 또는 파이프라인 정지를 일으킬 수 있다. 버블 또는 정지는 일반적으로 파이프라인이 원하는 프로그램 흐름을 나타내지 않는 명령(즉, 예컨대 부정확하게 예측된 분기 결과로부터 발생)을 포함할 때 발생한다. 따라서, 에러 명령을 제거하고 파이프라인을 소제하고 파이프라인에 정확한 명령열을 재적재해야 하므로 커다란 시간 페널티가 초래된다. 파이프라인의 크기에 따라 이러한 페널티는 매우 클 수 있으며, 따라서 (효과적인 명령 처리량의 증가를 위한) 긴 파이프라인 설계에 대한 요구는 파이프라인이 소제되고 재적재되어야 할 때 발생하는 정지 페널티와 상당한 정도로 균형을 이루어야 한다. 따라서, 분기 명령 레이턴시를 감소시키기 위한 지능 메카니즘을 연구하고 설계하고 구현함에 상당한 노력이 있어 왔다.
분기 명령 레이턴시를 분석하기 위하여, 분기 명령이 3개의 연산 단계로 이루어진 것으로 생각하는 것이 도움이 된다.
(1) 분기 결과를 결정하는 단계
(2) 분기 타겟 어드레스(즉, 적재되어야 하는 명령의 위치)를 계산하는 단계
(3) 정확한 명령이 다음에 실행되도록 제어를 전달하는 단계.
대부분의 시스템에서, 단계 (1) 및 (2)는 분기 명령에 의해 이 순서대로 해결되어야 한다. 또한, 분기 명령은 일반적으로 2가지 종류, 즉 조건부 및 무조건부적이다. 분기가 항상 일어날 때 이를 무조건부 분기라고 하며, 상기 3가지 연산 단계가 요구되지 않는다. 단계 (1)의 결과에 따라 조건부 분기가 일어난다. 분기가 발생하지 않는 경우, 다음 순차 명령이 페치되어 실행된다. 분기가 발생하는 경우, 단계 (2)에서 분기 타겟 어드레스가 계산된 다음, 단계 (3)에서 제어가 그 경로로 전달된다. 분기 예측의 최신의 양호한 설명이 컴퓨터 구조라는 제목의 책자의 4.3절에서 발견될 수 있는데, 패터슨 및 헤네시에 의한 정량적 접근 2판의 262-278쪽이 본 명세서에 참조된다.
일반적으로, 분기 명령과 관련된 페널티 싸이클의 수는 2개의 카테고리, 즉 (1) 분기의 디코드로부터의 타겟 명령의 페치 레이턴시(이것은 일반적으로 분기의 타겟 명령이 식별된 후 페치되어 파이프라인 안에 놓이는 데 필요한 시간으로 언급됨), 및 (2) 분기 조건 생성의 레이턴시(이것은 일반적으로 분기가 실제로 발생하는지의 여부를 결정하는 프로세스로 언급됨)로 나뉠 수 있다. 특정 시스템에서는 대개 카테고리 (1)의 페널티를 줄이는 것이 더 중요한데, 이는 이들이 조건부 및 무조건부 분기 양자에 영향을 미치는 반면, 카테고리 (2)의 페널티는 조건부 분기에만 연관되기 때문이다. 더욱이, 카테고리 (2)의 페널티는 분기 예측을 포함하는 공지 기술에 의해 어느 정도 개선될 수 있다. 예컨대, 본 명세서에 반영된 미국 특허 제5,742,804에서는, 컴파일러가 실제 분기 명령 전에 어느 땐가 분기 예측 명령을 삽입한다. 또한, 이 예측 명령은 실행 시간을 더 절약하기 위하여 분기의 타겟 어드레스를 특정한다. 명령들은 예측 명령에 의해 제공되는 힌트에 따라 프리페치되어, 제어가 전달될 때 실행을 준비할 수 있다. 분기 결과에 대한 예측 그 자체는 컴파일러에 의해 얻어진 정보에 기초하여 실시간으로 이루어진다. 그러나, 상기 특허에서는 최적의 오류 예측의 처리인 것 같지 않으며, 이러한 오류는 분기 페널티 관점에서 비용을 초래할 수 있다. 따라서, 이 특허에 개시된 방법도 심각한 한계를 갖는다.
특정 파이프라인 컴퓨팅 시스템에서의 카테고리 (1)의 시간 페널티의 구분을 더 구체적으로 살펴보면, 이는 분기 오퍼랜드를 판독하는 단계(0 내지 1 싸이클); 분기 타겟 어드레스를 계산하는 단계(1-2 싸이클); 및 명령 캐시를 액세스하고 타겟 명령을 파이프라인의 디코드 단계에 놓은 단계(1-2 싸이클)로 이루어진다는 것을 알 수 있다. 따라서, 최악의 경우, 5 싸이클의 분기 명령 레이턴시가 발생할 수 있다. 분기 명령이 어느 정도 규칙적으로(즉, 시간의 20%) 실행되는 몇몇 종류의 프로그램에서는 평균 분기 명령 페널티가 매우 높을 수 있다는 것이 분명하다(명령당 평균 1 싸이클).
분기 명령을 위한 실제 실행 시간 레이턴시를 최소화하기 위한 다양한 메카니즘이 제안되어 왔다. 예컨대, 종래에 사용된 하나의 방법은 분기 명령을 디코딩하면서 분기 어드레스를 계산하는 것이다. 이것은 평균 분기 명령 싸이클을 줄일 수 있지만, 추가적인 어드레스 가산기를 필요로 하며, 다른 기능에 사용할 영역 및 전력을 소모한다.
종래에 사용된 또 다른 방법은 타겟 명령 이력 버퍼에 의해 이루어진다. 이러한 예는 참고로 반영된 미국 특허 제4,725,947호, 제4,763,245호 및 제5,794,027호에 있다. 이러한 종류의 시스템에서, 이력 버퍼 내의 각 타겟 명령 엔트리는 과거에 실행된 분기 명령의 프로그램 카운터와 연관되어 있다. 분기가 실행될 때, 엔트리는 적당한 타겟 명령에 의해 채워진다. 분기가 디코딩 단계에 있는 다음 번에, 프로그램 카운터를 이력 버퍼 내의 상기 엔트리에 매칭시킴으로써 분기 타겟 명령이 준비될 수 있다. 이러한 방법의 유효 적중률을 증가시키기 위하여 많은 수의 엔트리가 장시간 동안 유지되어야 한다. 이것도 바람직하지 않은 양의 실리콘 영역 및 전력을 필요로 한다. 더욱이, 매칭 메카니즘 자체도 비교할 엔트리가 많은 경우에는 잠재적인 지연 소스가 될 수 있다.
또 다른 방법이 본 명세서에 반영된 논문 (1) "Implementation of the PIPE Processor" by Farrens and Pleszkun on pages 65-70 of the January 1991 edition of the journal Computer; (2) "A Simulation Study of Architectural Data Queues and Prepare-T0-Branch Instruction," by Young and Goodman on pages 544-549 of the October 1984 IEEE International Conference on Computer Design: VLSI in Computers 에 설명되어 있다. 이들 참조 논문에 설명된 방법에서는 분기 준비(PTB) 명령을 사용하여 지연된 분기 형태가 제안된다. PTB 명령은 분기 명령 전에 삽입되어, 분기 결과를 결정한 다음, 제어의 전달 전에 지연을 특정한다. 명령이 완료될 때 분기 조건이 평가되었을 것을 보증할 만큼 지연이 충분히 클 것을 보장함으로써 파이프라인이 채워진 채 유지된다. 그러나, 이러한 방법의 문제는 타겟 어드레스 계산(단계 2)에 의해 발생하는 레이턴시가 매우 크기 때문에 완전히 수용될 수 없다는 사실에 있다. 또한, 본 명세서에 참조된 미국 특허 제5,615,386호도 PTB 명령의 사용을 특정한다. 이 특허도 비교 동작(단계 1)과 타겟 어드레스 계산(단계 2)을 분리함으로써 분기 실행을 개선할 수 있다는 것을 설명하고 있다. 분기 어드레스를 순서 없이 계산함으로써 분기에 관련된 레이턴시가 더 감소할 수 있다. 이 특허는 다수의 일반적인 방법을 설명하고 있지만, 다음과 같은 사실에 의해 제한된다. (1) 폴디드 비교 방법을 사용하지 않으므로 개별적인 비교 및 분기 명령이 요구되며, 이것은 코드 크기, 동적 실행 시간 등을 증가시킨다. (2) 비교 결과가 레지스터 대신에 내부 플래그에 의해 인식되어야 하며, 이것은 유연성을 감소시킨다. (3) 링크 레지스터와 같은 레지스터의 사용 없이는 함수 서브루틴이 문맥을 저장/스위치하는 것이 더 어렵기 때문에 그 실행이 더 어렵다. (4) 명세는 또한 일종의 복잡한 지명 프로세스에 의존하므로 루프의 실행이 후속 관련 루프에 대한 예측 가중을 발생시킨다.
종래 기술의 관련 문제는 프로그램 흐름에 다수의 분기가 포함되어 있다는 사실에 기인한다. 이 경우, 각 분기 명령에 대해 어드레스 레지스터 내의 타겟 어드레스를 갱신하는 것이 필요하다. 이러한 갱신은 추가적인 시간을 필요로 하며, 따라서 프로그램 실행을 느리게 한다.
따라서, 본 발명의 목적은 종래 기술과 관련된 전술한 많은 문제점을 극복하는 데 있다.
본 발명의 다른 목적은 프로그램 설계자가 소프트웨어 프로그램을 구성하는 데 사용할 수 있는 다양한 구현 도구를 가질 수 있도록 파이프라인식 프로세서에 의해 강력하고 유연성 있게 구현되는 개선된 분기 동작 명령 포맷을 제공하는 데 있다.
본 발명의 또 다른 목적은 많은 경우에 파이프라인식 프로세서에서의 액세스 레이턴시가 감소되거나 제거될 수 있도록 독립적인 제어 및 분기 명령으로 구성된 개선된 분기 동작을 제공하는 데 있다.
본 발명의 또 다른 목적은 코드 크기가 감소되고 실행 속도가 증가할 수 있도록 비교 및 분기 동작과 같은 다수의 명령을 결합하는 새로운 유형의 분기 명령을 제공하는 데 있다.
본 발명의 또 다른 목적은 프로그래밍 유연성을 향상시킬 수 있도록 레지스터들 간의 비교를 포함하는 개선된 비교 논리 동작을 지원하는 새로운 유형의 분기 명령을 제공하는 데 있다.
본 발명의 또 다른 목적은 분기 타겟 명령 유효성을 위하여 총 적중률을 향상시키기 위하여 2개의 다른 예측 및/또는 타겟 적재 파라미터를 가진 독립적인 제어 및 분기 명령을 구현하는 데 있다.
본 발명의 또 다른 목적은 전체 프로그램 분기 동작이 더 빠르고 더 작은 레이턴시로 처리될 수 있도록 파이프라인식 프로세서의 형태로 전술한 분기 제어/분기 명령을 실행하기 위한 개선된 컴퓨팅 시스템을 제공하는 데 있다.
본 발명의 또 다른 목적은 다수의 프로그램 분기를 위한 명령이 쉽고 빠르게 적재되고 실행될 수 있도록 적재 가능하고 구조적으로 가시적인 다수의 분기 타겟 어드레스 레지스터를 포함하는 파이프라인식 구조의 프로세서를 제공하는 데 있다.
본 발명의 또 다른 목적은 다수의 프로그램 분기를 위한 명령이 파이프라인에 의해 빠르게 액세스될 수 있도록 분기 타겟 어드레스에 대응하는 타겟 명령을 저장하는 다수의 적재 가능한 분기 타겟 명령 레지스터를 포함하는 파이프라인식 구조의 프로세서를 제공하는 데 있다.
본 발명의 또 다른 목적은 본 명세서에 설명된 개선된 분기 명령을 사용하는 개선된 소프트웨어는 물론 기본 분기 명령 포맷을 사용하는 기존의 소프트웨어를 동시에 지원하기 위하여 2개의 다른 명령 세트로부터 분기 명령을 효율적으로 실행할 수 있는 프로세서를 제공하는 데 있다.
본 발명의 또 다른 목적은 필요한 명령을 파이프라인 내의 적재에 사용할 수 있다는 것을 보장하기 위해 컴퓨팅 시스템 내에 지능형 사전 적재 회로를 제공하는 데 있다.
본 발명의 또 다른 목적은 상기 사전 적재 회로가 어떤 명령이 다른 것들보다 더 필요할 것이라는 것을 결정하기 위한 우선 순위화 기법을 사용할 수 있도록 하는 데 있다.
본 발명의 또 다른 목적은 전술한 개선된 프로세서 및 명령 구조에 적합하고 시스템 복잡성을 감소시킬 수 있는 예외 처리 메카니즘을 제공하는 데 있다.
따라서, 본 발명의 한 특징은 컴퓨팅 머신에서 프로그램 분기 명령의 동작을 용이하게 하는 개선된 머신 실행 가능 분기 제어 명령에 관한 것이다. 일반적으로 제어 명령은 프로그램 분기가 제1형 분기 명령(PC 기반 분기) 또는 제2형 분기 명령(레지스터 기반 분기)을 포함하는지를 특정하기 위한 제1 부분(R 비트)을 포함한다. 제어 명령의 제2 부분은 프로그램 분기 명령을 위한 타겟 어드레스와 관련된다. 제3 부분은 타겟 어드레스를 저장하기 위한 타겟 어드레스 레지스터를 지정한다. 실행시, 제어 명령은 프로그램 분기 명령이 실행되기 전에 컴퓨팅 머신이 타겟 어드레스를 계산하도록 한다. 분기 제어 명령은 제2 부분의 가변량(edisp 또는 disp+edisp)이 컴퓨팅 머신이 타겟 어드레스를 계산하는 데 사용하도록 구성되는데, 이는 PC에 기초한 직접적인 어드레스 계산 형태가 레지스터에 기초한 어드레스 계산(6 비트)보다 더(최대 19 비트) 많이 발생하기 때문이다. 어드레싱 유형은 제어 명령의 제1 부분에서 설정함으로써 분기 제어 명령에서 지정된다.
본 발명의 다른 특징은 제어 명령의 제4 부분(L 비트)이 분기 타겟 명령이 적어도 하나의 프로그램 동작을 위해 프로그램의 일부로 사용되고 있을 확률을 특정하는 예측값을 갖는다는 사실이다. 이러한 이론적인 예측은 종래의 힌트 비트와 다른 방식으로 도출되는데, 이는 이러한 예측이 격리된 단 하나가 아니라 다수의 관련 프로그램 분기의 매크로 거동을 검사하기 때문이다. 이것은 프로그램의 집단 거동이 고려될 수 있으므로 더 나은 명령 적재를 발생시킨다.
일반적으로, 분기 제어 명령은 2개 이상의 독립적인 프로그램 분기 명령과 관련될 수 있으며, 따라서 코드 크기를 감소시켜 타겟 명령 적재 등을 향상시킬 수 있다. 컴퓨팅 머신이 임의의 실제 프로그램 분기 명령을 실행하기 전에도 분기 분석을 통해 분기 제어 명령으로 인하여 다수의 타겟 어드레스가 계산되어 사용될 수 있다.
본 발명의 또 다른 특징은 프로그램 명령 스트림 내의 전술한 분기 제어 명령과 관련되고 이를 따르는 개선된 분기 명령을 커버함으로써, 분기 명령에 필요한 제어 파라미터가 분기 제어 명령에 의해 컴퓨팅 머신 파이프라인 내에 미리 설정된다. 분기 명령은 폴디드 또는 결합 포맷을 가짐으로써 더 빠른 실행과 더 간편한 구현 등을 위해 비교 및 분기 동작을 하나로 결합한다. 분기의 제1 부분은 분기 결정을 수행하기 위한 분기 파라미터(즉, 레지스터 식별자 Rm, Rn 및/또는 동작 확장-BNE 등)를 포함하여 프로그램 분기가 컴퓨팅 머신에 의해 행해져야 하는지를 결정한다. 제2 부분(IARn)은 프로그램 분기가 발생할 때 명령 실행 흐름을 분기 타겟 어드레스로 재지정하기 위해 컴퓨팅 머신에 의해 사용되는 분기 타겟 어드레스 정보를 포함한다. 이러한 포맷을 사용하여, 분기 명령과 관련된 분기 결정 및 명령 실행 흐름 재지정은 컴퓨팅 머신에서 동시에 해결될 수 있다. 또한, 분기 명령은 전술한 분기 제어 명령과 결합하여 동작함으로써 분기 타겟 어드레스가 분기 결정 및 명령 실행 흐름의 재지정 전에 계산된다.
바람직하게도, 하나 이상의 분기 타겟 어드레스 레지스터가 사용되며, 분기 명령은 분기 타겟 어드레스 결정을 위해 이들 중 어느 하나를 지정할 수 있다. 한 실시예에서, 제1 부분은 2개의 레지스터 지정 필드(Rm, Rn)에 의해 취해져, 이러한 레지스터를 수반한 산술/논리 연산이 비교 프로세스의 일부로서 평가될 수 있다. 또한, 술어 오퍼랜드를 사용한 논리 연산도 비교 동작의 일부로 지정될 수 있으며, 따라서 예컨대 제1 부분에서 식별된 가변 A 또는 가변 B가 논리적으로 참이거나 이들 양자가 참인 경우 등에 분기가 발생할 수 있다.
본 발명의 또 다른 특징은 전술한 분기 제어 및 분기 명령을 포함하는 컴퓨터 프로그램에 관련된다. 이러한 프로그램은 명령의 필드 포맷을 이용하도록 설정된 프로세서 파이프라인 구조의 속도 및 레이턴시 특성을 최적화하도록 실행될 수 있다. 특히, 프로그램 분기 타겟은 1 내지 n(n〉2) 범위의 우선순위 값을 갖도록 구성되어 타겟 명령의 상대적인 페칭 우선순위가 또한 프로세서 파이프라인 내에 구성될 수 있다. 우선순위 값은 분기 타겟 어드레스를 저장하기 위해 어느 분기 타겟 어드레스 레지스터(즉, 0 내지 7)가 사용될 것인지의 선택에 의해 설정될 수 있다.
분기 제어 및 분기 명령을 실행하는 프로세서는 본 발명의 특징 중 또 하나를 구체화한다. 이러한 프로세서는 일반적으로 다수의 타겟 어드레스 레지스터, 공급되는 명령을 디코딩하여 디코딩 결과에 따라 제어 신호를 제공하는 명령 디코더, 및 제어 신호에 응답하여 명령을 실행하는 실행부를 포함한다. 전술한 바와 같이, 분기 제어 명령은 후에 분기 명령이 명령 스트림 내에서 따르는 프로세서에 대한 플래그 또는 지시자의 역할을 한다. 따라서, 분기 제어 명령은 분기를 위한 어드레스를 계산하는 데 사용되는 어드레스 필드, 및 분기 어드레스를 계산한 후에 이를 저장하기 위하여 다수의 타겟 어드레스 레지스터 중 하나를 지정하기 위한 제1 레지스터 선택과 함께 분기 제어 동작을 정의하는 그 자신의 동작 코드 필드를 갖는다. 이어지는 분기 명령은 분기 동작(바람직하게는 비교 동작은 물론)을 정의하는 동작 코드 필드, 및 분기 동작에 사용될 어드레스를 저장하는 다수의 어드레스 레지스터 중 하나를 지정하기 위한 제2 레지스터 선택 필드를 포함한다. 따라서, 분기 명령이 실행될 때, 분기 제어 명령은 이미 분기 타겟 어드레스가 계산되도록 하여 필요한 경우 명령 흐름의 재지정을 위한 분기 명령에 이용될 수 있도록 한다.
분기 어드레스는 다양한 다른 방식, 예컨대 프로그램 카운터(PC)에 대한 변위를 이용하는 방식이 있다. 이 경우, 분기 제어 명령의 어드레스 필드는 인접 데이타를 위한 필드도 포함하며, 따라서 분기 어드레스는 프로그램 카운터의 내용에 인접 데이타를 추가함으로써 계산된다. 다른 변형에 있어서, 다수의 범용 레지스터 중 어느 하나에 포함된 데이타는 분기 어드레스 정보의 소스로서 지정된 다음 분기 타겟 어드레스 레지스터 중 하나에 저장될 수 있다. 이러한 2개의 변형례는 또한 원하는 경우에는 결합될 수 있다.
바람직한 실시예에서, 분기 제어 및 분기 제어 명령은 독립적인 예측/추측 형태들을 위한 비트 필드를 포함한다. 이들은 상보적인 목적으로 사용되며, 타겟 명령 사전 적재 성능을 향상시키는 데 도움이 된다. 이러한 2 종류의 예측 파라미터를 계산함으로써 추측적인 사전 적재, 프리페치 등이 특정 구조에 맞춰질 수 있다.
또 다른 변형으로서, 프로세서는 다른 길이(예컨대 16 비트 및 32 비트)를 가진 분기 명령을 실행할 수 있으며, 따라서 필요한 경우 2가지 다른 동작 모드가 지원될 수 있다.
바람직한 실시예의 프로세서는 또한 분기 제어 명령과 결합하여 동작하는 예외 처리 회로를 포함하여, 계산된 분기 타겟 어드레스에 대한 예외 검사가 다수의 분기 타겟 어드레스 레지스터 중 하나에 분기 타겟 어드레스를 저장하기 전에 발생하도록 한다. 이러한 방식으로 명령 스트림에서 조기에 소프트웨어 에러가 검사되어 디버깅을 쉽게 할 수 있게 된다. 또한, 잠재적인 에러 어드레스 데이타를 검사하지 않고 분기 어드레스 버퍼와 관련하여 논리의 절약이 실현된다.
파이프라인 프로세서를 구동하는 바람직한 방법은 전술한 바와 같이 분기 처리, 타겟 명령 적재 및 타겟 명령 사전 적재를 포함하여 레이턴시 처리를 향상시킴으로써 캐시 액세스가 레이턴시 관점에서 필수적으로 숨겨질 수 있도록 한다. 랜덤 액세스 멀티 엔트리 어드레스 버퍼 및 이와 관련된 랜덤 액세스 멀티 엔트리 타겟 명령 버퍼는 본 발명의 또 다른 유용한 특징을 구성한다. 어드레스 엔트리 각각은 하나 이상의 디코딩된 분기 제어 명령에 포함된 어드레스 필드에 기초하여 계산된 어드레스를 저장한다. 타겟 명령 버퍼는 타겟 어드레스에 기초하여 적재 또는 사전 적재되어, 실행 시간 동안, 대응하는 분기 동작이 동일한 것을 요구하는 경우에 다수의 분기 타겟 명령이 유효하게 유지된다. 한 실시예에서, 어드레스 레지스터의 수는 명령 레지스터의 수보다 크다. 바람직한 실시예에서 명령 버퍼 내의 각 레지스터는 2개의 명령을 포함하여 관련 캐시로부터의 적재를 최적화한다. 다른 변형에 있어서, 타겟 명령 레지스터는 구성 명령이 임의의 명령을 결정할 수 있고 레지스터에 적절히 적재할 수 있는 경우 임의의 명령이 실행되기 전에 적재된다.
전술한 방식으로 전술한 분기 타겟 어드레스 및 분기 타겟 명령 버퍼를 구동하는 방법은 본 발명의 또 다른 특징을 구성한다.
분기 타겟 명령 버퍼는 프리페치 제어기의 제어하에 바람직하게 적재되는데, 이는 본 발명의 또 다른 특징을 나타낸다. 일반적으로, 프리페치 제어기는 분기 타겟 어드레스 버퍼 내의 타겟 어드레스 엔트리의 우선순위를 계산한 것에 기초하여 분기 타겟 명령 버퍼를 추측하여 적재한다. 즉, 어느 특정 싸이클 동안에 가장 높은 우선순위의 타겟 어드레스 엔트리가 사전 적재를 위해 고려되는데, 이것은 유효 싸이클 시간이 없는 경우 낮은 우선순위의 타겟 어드레스 엔트리가 고려될 수 없다는 것이 가능하다는 것을 의미한다. 프리페치 제어기는 2 종류의 사전 적재, 즉 능동 및 수동 사전 적재를 실시한다. 능동 사전 적재는 대응하는 분기가 타겟 명령을 요구하기도 전에 이 타겟 명령을 적재하려고 시도하며, 수동 사전 적재는 분기가 검출된 경우 명령 버퍼가 적어도 임의의 2차 반복에서의 레이턴시를 피하기 위해 적재된 것을 확인한다. 프리페치 제어기는 바람직하게, 명령 버퍼에 이미 들어 있는 분기 타겟 명령이 프레시 타겟 명령으로 가장 유용하게 대체될 것이기 때문에 무효인가를 결정하기 위한 모니터링 수단을 포함한다. 선택 수단은 무효 분기 타겟 명령이 발견된 때 분기 어드레스 레지스터 세트에 다수의 잠재적인 분기 타게 어드레스를 순위화함으로써 대체 분기 타겟 명령을 선택한다. 그 다음, 적재 수단이 명령 캐시가 분기 타겟 명령 버퍼에 무효 분기 타겟 명령을 중복 기입하도록 함으로써 무효 분기 타겟 명령을 대체 분기 타겟 명령으로 대체한다.
바람직한 실시예에서, 모니터링 수단은 유효 적재 마스크의 역할을 하는 N 비트 레지스터를 포함하며, 이것은 N 엔트리 분기 타겟 명령 버퍼에 저장된 N개의 독립적인 분기 타겟 명령의 유효 상태에 따라 적재되어, N 비트 레지스터의 각 비트가 분기 타겟 명령 버퍼 내의 대응 엔트리가 유효 또는 무효인지를 식별하도록 한다. 또한, 바람직한 방법에 있어서, 선택 수단은 사전 적재 레지스터 마스크를 포함하며, 레지스터는 잠재적인 분기 타겟 어드레스를 유지하는 임의의 저장 장소가 대체 분기 타겟 명령을 적재하기 위해 사용될 수 있는가를 식별하는 비트를 포함한다. 또한, 분기 명령 힌트 레지스터 마스크도 고려되는데, 이것이 분기 타겟 명령이 필요할 것인지를 식별하는 비트를 분기 타겟 어드레스 버퍼 내의 각 엔트리에 포함하기 때문이다.
본 발명의 프리페치 제어 버퍼는 상기 유효, 선택 및 힌트 마스크를 포함하여 파이프라인 프로세서에서의 명령 적재를 최적화하기 위한 프리페치 제어기의 역할을 한다.
엔트리의 순위화는 각각의 잠재적인 분기 타겟 어드레스에 대해 저장 장소 식별을 검사함으로써 수행되어, 분기 타겟 어드레스가 관련된 저장 장소에 따라 순위화될 수 있도록 한다. 예컨대, 분기 타겟 어드레스 버퍼의 더 높은 번호 레지스터 내의 분기 타겟 어드레스는 더 낮은 번호의 레지스터에 앞서 고려된다(또는 사용된 논리에 따라). 그러나, 사전 적재 동작은 명령 스트림의 순차 명령이 공급되는 명령 버퍼를 유지하는 데 사용되는 정상 캐시 액세스와 간섭하지 않도록 논리적으로 구성된다.
또한, 타겟 명령이 타겟 명령 버퍼에 사전 적재된 후에 정상적인 명령 흐름을 보장하기 위하여 페치 제어기에 의해 추가적인 증분 타겟 어드레스 버퍼가 사용된다. 이 버퍼에 대체 타겟 명령을 따르는 명령의 어드레스가 저장되어, 대체 타겟 명령이 파이프라인에 의해 후에 실제로 실행되는 경우에 캐시 액세스를 위해 상기 증분 타겟 어드레스가 사용될 수 있도록 한다.
따라서, 본 발명의 컴퓨팅 시스템에 대한 명령의 공급을 유지하는 방법은 실행을 위해 파이프라인에서 이미 유효한 임의의 분기 타겟 명령의 상태 조건을 모니터링하는 단계; 다수의 잠재적인 분기 타겟 어드레스를 순위화하는 단계; 상기 상태 조건 및 상기 순위화에 기초하여 새로운 분기 타겟 명령을 선택하는 단계; 및 상기 잠재적인 분기 타겟 어드레스의 상기 순위화에 기초하여 가장 높은 순위의 새로운 분기 타겟 명령을 적재하는 단계를 포함하며, 상기 가장 높은 순위의 새로운 분기 명령은 파이프라인에 적재할 필요가 있는 경우에 유효하게 된다.
도 1은 본 발명의 컴퓨팅 시스템의 바람직한 실시예를 나타내는 블록도.
도 1a는 분기 동작을 처리하기 위해 본 발명의 컴퓨팅 시스템에서 사용되는 범용 프로세스를 나타내는 순서도.
도 2는 본 발명의 컴퓨팅 시스템에서 사용되는 파이프라인에서 사용되는 각종 연산 단계를 나타내는 도면.
도 2a는 본 발명의 분기 제어 및 디코더 회로들간의 중요한 신호 상호접속의 상세도.
도 2b는 본 발명의 분기 제어, 페치 제어 및 캐시 제어기 회로들간의 중요한 신호 상호접속의 상세도.
도 2c는 본 발명의 컴퓨팅 시스템의 분기 동작 처리 성능을 요약한 도표.
도 2d-2l은 각종 분기 동작시 파이프라인의 연산의 상세한 시각적, 시간적 설명을 나타내는 도면.
도 3a-3h는 분기 처리 동작을 수행할 때 컴퓨팅 시스템에 의해 표명된 제어 신호의 타이밍 및 관계를 나타내는 타이밍도.
도 4a는 본 발명의 분기 제어 명령의 바람직한 실시예를 나타내는 도면.
도 4b는 본 발명의 조건부 분기 명령의 바람직한 실시예를 나타내는 도면.
도 4c는 본 컴퓨팅 시스템에 의해 실행될 수 있는 대표적인 프로그램에서 전술한 분기 제어 및 분기 명령의 대표적인 사용예를 나타내는 도면.
도 4d는 본 발명의 무조건부 분기 명령의 바람직한 실시예를 나타내는 도면.
〈도면의 주요 부분에 대한 부호의 설명〉
100 : 프로세서
106 : 제어 라인
110 : 명령 버퍼
115 : 명령 어드레스 레지스터 타겟 버퍼
120 : 디코드 명령 버퍼
125 : 디코드 유닛
140 : 명령 어드레스 레지스터
150 : 분기 제어 회로
도 1은 다음의 기능 회로를 구비한 파이프라인 프로세서를 포함하는 개량된 컴퓨팅 머신(100)을 포함하는 본 발명의 다양한 특징을 나타내는 블록도이다.
먼저, 페치 제어기(FECTL; 101)는 아래에 상세히 설명되는 방식으로 페치 멀티플렉서/선택기(102) 및 온보드 캐시를 제어한다. 이 회로는 프로세서 파이프라인의 제1 단계에 수반되어 파이프라인을 통한 적당한 명령 흐름을 보장하도록 명령을 페치 및 프리페치한다. 도 1에 도시된 바와 같이, 페치될 명령의 어드레스는 페치 명령 어드레스(FAL) 래치(103)에 저장되어, 후술하는 바와 같이 페치 MUX(102)로부터의 출력에 따라 적재된다.
힌트 비트 버퍼(HB; 104)가 페치/프리페치 동작을 돕는다. 바람직한 실시예에서 HB는 3개의 개별 제어 레지스터, 즉 (1) 각 비트가 타겟 명령 레지스터 세트 내의 대응하는 엔트리의 유효성을 나타내도록 구성된 명령 유효 레지스터(아래 참조), (2) 각 비트가 명령 어드레스 레지스터의 대응하는 레지스터에 대한 힌트/예측 비트의 상태를 나타내는 사전 적재 마스크 레지스터(아래 참조), 및 (3) 사전 적재를 위해 타겟 명령 레지스터 중 어느 것이 유효한가를 나타내는 선택 마스크 레지스터를 포함한다. 명령 힌트 비트는 분기 명령이 실행될 때 특정 명령이 상기 분기 명령의 실제 타겟인지에 관하여 컴파일러(또는 실행시의 소프트웨어 프로그램)에 의해 미리 생성되는 예측을 나타낸다. 물론, 다른 변형이 가능하며, 본 발명의 몇몇 응용에 있어서는 더 바람직할 수 있다.
페치 명령 어드레스 래치(FAL; 103)에 의해 지정된 명령은 제어 라인(106)을 사용한 파이프라인에서의 제1 단계의 제1 단계(F1) 동안에 명령 캐시(IC) 및 캐시 제어기(105)로부터 검색된다. IC(105)는 프로세서(100)에 의해 실행될 수 있는 다수의 32비트 폭 프로그램 명령을 저장할 수 있다. 바람직한 실시예에서, IC(105)의 용량은 32KB이며, 캐시 라인 크기는 32B이다. 이러한 캐시는 예컨대 당해 분야에 공지된 구조, 방법 및 기술을 이용한 4-웨이 세트 연상 캐시 메모리로 구성될 수 있다. 프로세서(100)의 의도 성능 및 하드웨어 특성에 따라서는 다른 방법이 더 바람직할 수 있다. 물론, 캐시 미스의 경우에는 버스 인터페이스 유닛(도시되지 않음)을 사용하는 종래의 메모리 액세스 싸이클이 필요한 명령을 검색하기 위해 실행되어야 한다. 그 다음, IC(105)는 종래의 방식으로 갱신된다.
다수의 순차 프로그램 명령을 저장하는 명령 버퍼(IB; 110)가 64비트 명령 버스(108)를 통해 IC(105)에 결합된다. 바람직한 실시예에서, IB(110)는 IC(105)로부터 싸이클 당 2개의 명령을 적재 받으며, 4개의 독립 엔트리(일반적으로 ib0, ib1, ib2, ib3로 표시되는 각 32비트의 4개 명령)의 용량을 갖는다. 이 구조는 프로세서(100)의 파이프라인의 제1 단계의 제2 위상(F2) 동안에 적재 받는다. 따라서, 임의의 순간에 이 단계와 관련된 최대 레이턴시는 2 싸이클이다(이 단계는 공백 상태이며 새로운 명령 세트로 채워져야 하는 것으로 가정). 또한, IB(110)에 대한 이러한 접근은 극히 깊은 버퍼와 극히 얕은 버퍼간의 절충이며, 본 발명의 이점은 환경에 따라 특정 구현이 다소 변할 경우에도 실현될 수 있다는 것이다.
또한, 명령 어드레스 레지스터 타겟(IART) 버퍼(115)가 버스(108)에 결합된다. IB(110)에 비해, IART(115)는 후술하는 바와 같이 분기 명령의 목적지로서 실행될 준비가 되도록 미리 적재된 타겟 명령들을 저장한다. 바람직한 실시예에서, IART는 8개의 엔트리를 가지며, 각 엔트리는 2개의 명령을 저장한다. 또한, 다른 특정 구현이 사용될 수 있으며, 본 발명은 이러한 특정 구조에 제한되지 않는다.
멀티플렉서/선택기 회로(MUX_D; 118)는 후술하는 각종 파라미터(분기 명령이 미리 디코딩되었는지의 여부를 포함)에 따라 IB(110)(입력 A) 또는 IART(115)(입력 B)로부터 출력된 명령을 결합시키고 이 명령을 디코드 명령 버퍼(D; 120)로 루팅하는 선택기이다. 이 버퍼는 또한 파이프라인의 제1 단계의 제2 위상(F2) 동안에 적재된다. 이 래치에 저장된 명령은 마이크로프로세서 파이프라인의 후속 "디코딩 단계"에 있는 프로그램 명령에 대응한다. MUX_D(118)의 동작 논리는 다음과 같다:
If (branch instruction)
Select input A
Else
Select input B
프로그램 카운터 레지스터(PC-D; 128b)는 디코드 명령 버퍼(D; 120)에 저장된 명령에 대응하는 프로그램 카운터(PC)를 위한 엔트리를 포함한다. 정상적인 순차 명령 실행 동안, PC-D(128b)는 유효 명령 경로가 파이프라인을 통해 흐르고 있을 때 증분기(128)에서 4 만큼 증분된다(각 명령은 1 바이트이므로). 마찬가지로, 명령 경로 내의 분기 명령이 실행될 때(후술됨), 분기 명령의 정확한 타겟 어드레스는 또한 MUX_PC(128a)로의 입력 A를 통해 PC-D(128b)에 설정되어, 정확한 타겟 명령이 또한 디코드 명령 버퍼(120) 내에 적재된다.
이후, 파이프라인의 단계들은 제2 파이프라인 단계 동안 프리 디코딩 및 디코딩 동작을 실시하기 위하여 디코드 유닛(DEC; 125)을 사용한다. DEC(125)는 프리 디코딩/디코딩된 명령의 유형에 기초하여 다수의 제어 신호를 생성하며, 이들 신호(후술됨)는 제어 신호 버스(129)를 통해 전달된다. 바람직한 실시예에서, 프리 디코드 동작은 명령이 적재될 때 매우 빠르게 수행되어 분기 명령인지의 여부를 결정한다. 이러한 방식으로, 분기 제어 처리도 매우 빠르게 실행될 수 있다. 이러한 프리 디코드 동작은 특정 명령 유형을 빠르게 식별하기 위해 당 분야에서 공통으로 사용하는 다양한 표준 기술의 어느 것으로도 구현될 수 있다. 도 2에 도시된 바와 같이, 실제로 프리 디코드 동작(P)은 파이프라인 동작의 제1 단계 동안(F 단계의 제2 위상 F2 동안)(오버랩)에 제2 디코딩 단계(D)에 앞서 발생하여 분기 제어 회로의 나머지에 대해 적당한 타이밍을 보장한다.
도 1을 참조하면, DEC(125)로부터 출력된 디코딩된 명령은 제2 파이프라인 단계의 일부로서 산술 논리 유닛(ALU; 130)에 의해 수행되는 실행 단계(도 2의 E1 단계)에서 처리되고 있는 프로그램 명령을 위한 오퍼랜드를 저장하기 위해 2개의 E1 오퍼랜드 버퍼(E1)(127a, 127b)로 전달된다. 도 2에서 알 수 있듯이, 실제로 3개의 실행 단계(E1, E2, E3)가 존재하며, 이러한 단계 동안 발생하는 동작은 다음을 포함한다:
E1: ALU(130)는 분기 제어(PT) 명령 내의 정보에 기초하여 타겟 어드레스를 계산하는 것을 포함하는 대부분의 계산을 여기(ADD, SUB 등)에서 수행하며, 모든 조건부 분기도 해결한다. 대표적인 구현에 있어서, 분기와 관련된 비교 동작의 결과는 E1 단계(도 2) 동안 FECTL(101)로 1비트 결과(분기 거짓 신호)로서 전달되어 HB(104)를 갱신하는 데 사용된다. 이후, 액티브 사전 적재가 일어날 수 있다. 동일한 결과가 BRCTL(150) 및 DEC(125)에도 공급된다. 분기 내의 모든 것이 예측된 대로라면, 분기 실행, 타겟 어드레스, 타겟 명령 또는 이들의 적재에 아무 변화도 생기지 않는다. 그러나 그렇지 않은 경우에는 오류 예측 수정 프로세스(후술됨)가 다음 단계(E2)에서 실시된다.
E2: 이 싸이클은 적재/저장 래치(136)를 통해 데이타 캐시(145)에 액세스하기 위해 그리고 다른 멀티 싸이클 명령(예컨대 MUL)을 계속 실행하기 위해 사용된다. 또한, 이 싸이클 동안 오류 예측이 발생하는 경우, BRCTL(150)은 이 단계 동안 프로그램 흐름을 정확한 흐름으로 재지정한다. 실제 분기 명령에 따라, 그리고 정확한 다음 명령이 페치되었는지의 여부에 따라 파이프라인에 약간의 버블이 도입될 수 있다. 또한, 분기 제어(PT) 명령에 대해 E1에서 계산된 타겟 어드레스 레지스터의 새로운 내용이 이 싸이클 동안 BRCTL(150)에 전달된다. 후속 단계(W)에서, 이 내용은 후술하는 타겟 어드레스 레지스터에 실제로 기록된다. 그러나, 동일한 정보가 E2 단계 동안 FECTL(101)로도 전달되어 타겟 명령이 실제 분기 명령을 위한 준비로서 사전 적재될 수 있다.
E3: 이 싸이클 동안, DC(145)는 적재/저장 동작에 필요한 모든 데이타를 되돌리며, 멀티 싸이클 명령이 실행을 계속한다. 이 싸이클 동안 IC(105)는 분기 제어(PT) 명령에 의해 지시된 타겟 명령의 사전 적재를 시작하도록 액세스될 수 있다. 바람직한 실시예에서, IC(105)로부터의 임의의 더 높은 우선순위 페치 동작이 타겟 사전 적재에 앞서 해결될 수 있다.
한 세트의 범용 레지스터(GPR; 135), 및 후속 파이프라인 단계의 일부로서 데이타 캐시(140)와 함께 적재/저장 동작을 위해 사용되는 어드레스를 저장하기 위한 적재/저장 어드레스 레지스터(138)가 ALU(130)의 출력에 접속된다. 이 회로들은 도 2에 도시된 W 단계 동안 갱신된다. 바람직한 실시예에서, 데이타 캐시는 4 웨이 32 바이트 라인 연상 캐시를 포함하며, 전체 용량은 32 KB이다.
분기 타겟의 어드레스를 위한 명령 어드레스 레지스터 세트(IAR.A; 140)는 ALU(130)에 의해 계산되고 W 단계 동안 적재될 때 분기 명령의 타겟 어드레스를 저장한다. IAR.A(140) 내의 엔트리 각각은 IART(110) 내에 관련된 대응 엔트리를 갖고 있다. 전술한 바와 같이, 분기 제어(PT) 명령을 사용함으로써 타겟 어드레스가 미리 준비되어 8개의 엔트리 중 하나에 32 비트 엔티티로서 저장될 수 있다. IAR.A(140) 및 ALU(130)의 출력은 모두, 분기 제어 라인(151) 상의 분기 제어 회로(150)(BRCTL)에 의해 제공되는 제어 신호에 기초하여 하나의 입력을 선택하는 분기 선택기/MUX(146)으로 공급된다.
BRCTL(150)은 일반적으로 후술하는 바와 같이 어느 분기 명령도 실행해야 한다. 이 회로는 디코딩된 분기 및 분기 제어 명령을 수신하여 분기 조건 및 타겟 어드레스가 알려진 것인지를 결정하고, 분기의 결과를 해석/예측한다. 분기 조건이 알려지지 않은 경우, BRCTL(150)은 분기 명령 내의 분기 힌트 비트(BHB)(후술됨)에 기초하여 분기를 조건부로 예측한다. 이때, 타겟 어드레스는 분기 제어(PT) 명령에 의해 이미 알려져 있어야 한다(후술됨). 많은 경우, 분기 레이턴시는 예측이 정확한 경우 효과적으로 제거될 수 있다. 이것은 분기가 실행될 때 대개 (1) 타겟 명령이 이미 IART(115)에 적재되어 분기가 정확히 예측된 경우에 사용될 수 있거나, (2) 타겟 명령이 IART(115)에 적재되어 있지 않지만 분기 조건이 해석되기도 전에 페치되어 디코딩될 수 있는 경우이기 때문이다. 반면, 몇몇 이유로 인해 분기 명령이 디코딩될 때 타겟 어드레스가 알려지지 않은 경우에는 타겟 어드레스가 준비될 때까지 분기 명령이 디코드 단계에 유지되기 때문에 약간의 레이턴시가 존재한다.
따라서, 컴퓨팅 시스템(100)에서 다음과 같은 일반적인 절차가 분기 동작시에 이용된다.
(1) 디코딩 단계(D)에서, BRCTL은 분기 타겟 어드레스, IAR 번호 및 분기 예측 정보를 FECTL(101)로 전송한다. 분기가 발생할 것으로 예측되고 타겟 명령이 이미 IART(115)에 사전 적재된 경우, 분기 명령은 이 버퍼로부터 판독되어 D(120)에 적재되며, 이에 따라 다음 싸이클에서 디코딩할 준비가 이루어진다.
(2) 여전히 디코딩 단계(D)에서, IART(115)가 사전 적재되지 않은 경우, FECTL(101)은 BRCTL(150)에 의해 제공된 분기 타겟 어드레스를 사용하여 IC(105)에 페치 요구를 전송한다. 이에 따라 예측이 정확한 것으로 입증된 경우에 명령이 디코딩될 시간에 캐시(105)로부터 IB(110)로 적재된다. IART(115)가 사전 적재된 경우, FECTL(101)은 BRCTL(150)에 의해 제공된 타겟 어드레스 대신에 IAR.IA 내의 중분된 타겟 어드레스를 사용하여 페치 요구를 IC(105)로 전달하여 IART(115)를 위한 타겟 명령으로서 요구되는 다음 명령을 페치한다.
(3) 디코드 단계에서 예측이 취해지지 않고, 실패 명령(분기 후의 다음 명령, 그러나 분기가 취해지지 않은 경우 분기의 타겟은 아님)이 IB(110) 내에 있는 경우, 이 명령은 다음 싸이클에서의 디코딩을 준비하기 위해 시프트된다. FECTL(101)은 예측되고 취해지지 않은 명령이 IART(115)에 미리 적재되어 있지 않은 경우 이에 대한 사전 적재 요구를 전달한다. 이것은 분기 명령이 잘못 예측된 경우에 도움이 되는데, 이는 분기 명령이 후에 필요할 것으로 판명되는 경우에 사용 가능하기 때문이다.
(4) E1 단계에서, BRCTL(150)은 분기 조건의 실제 해석을 수신하여 이 싸이클의 종료 전에 예측에 대해 검증한다. 그 다음, BRCTL은 IAR 번호를 FECTL에 공급하여 E2 단계에서의 실제 분기를 준비한다.
(5) E2 단계에서, 예측이 정확한 경우, 모든 것은 정상적으로 진행되다. 그렇지 않은 경우, BRCTL은 스쿼시 신호를 전송하여 퍼징이 필요한 단계로부터 무효 명령을 제거한다. 분기 예측이 취해지지 않았으나 실제로는 취해진 경우, BRCTL은 분기가 실제로 취해졌다는 정보(AKTN 명령)와 함께 정확한 타겟 어드레스를 FECTL(101)로 전송한다. 그 다음, FECTL(101)은 명령 스트림을 정확한 타겟 명령으로 변경하고, 필요한 경우 추가 명령이 IC(105)로부터 요구된다.
(6) E2 단계에서 오류 예측이 다른 변화, 즉 예측이 취해졌으나 실제로는 취해지지 않은 경우, BRCTL은 취해진 예측이 실패하였다는 정보(CONT 명령)와 함께 분기 명령을 따르는 명령의 PC를 FECTL로 전송한다. 그 다음, FECTL은 실행 방향을 역순으로 변경하고 다음 싸이클에서의 디코딩을 준비하는 다음 실패 명령을 얻는다.
(7) 무조건부 분기가 D 단계에서 존재하는 경우, BRCTL(150)은 분기 타겟 어드레스 및 타겟 레지스터 번호를 FECTL(101)로 전달한다. IART(115)가 사전 적재된 경우, 타겟 명령이 판독되어 D(120)로 이동되어 다음 싸이클에서 디코딩된다. IART(115)가 사전 적재되지 않은 경우, FECTL은 IC(105)에 페치 명령을 발행하여 필요한 타겟 명령을 얻는다.
이상은 시간적인 관점에서의 컴퓨팅 시스템(100)의 동작의 상세한 설명이다(즉, 다른 시간에서의 특정 파이프라인 단계의 상태를 본 것임). 이하에서는 명령 관점에서 본 추가적인 보충 설명이 제공된다(즉, 컴퓨팅 시스템(100), 특히 분기 명령의 특정 유형에 응답하는 BRCTL(150)의 거동을 본 것임).
BRCTL(150)에 의해 생성된 분기 제어 신호도 아래에서 전반적인 타이밍도를 포함한 첨부 도면을 참조하여 더 상세히 설명된다. 이러한 회로의 구조 및 타이밍 요건은 본 명세서를 참조하여 쉽게 조사되며, 적당히 구성되고 접속된 당해 분야에 공지된 하드웨어 논리, 메모리 및 클럭킹 회로로 다양하게 구현될 수 있으며, 이러한 회로들은 여기서 길게 설명되지 않는다.
타겟 명령 어드레스 레지스터 증분 어드레스 버퍼(IAR.IA; 155)는 IART(115)에 저장된 대응하는 명령이 분기에 유효한 타겟 명령을 나타내는 경우 증분된 타겟 어드레스를 포함하는 엔트리를 저장한다. 이 실시예에서, IAR.IA(155)에 대해 8개의 개별 엔트리가 제공된다. 이 회로는 분기 명령의 타겟 명령 어드레스에 대응할 때 페치 명령 래치(103)에 의해 출력되는 페치 어드레스를 판독하고 증분시킴으로써(+4 또는 +8 만큼) 적재되다.
더욱이, 도시되지는 않았지만, IC(105) 및 DC(145)를 갱신하기 위한 버스 인터페이스 유닛, 부동 소수점 유닛, 멀티미디어 유닛 등을 포함하는, 프로세서(100)와 통상적으로 연관된 다른 지원 회로들은 본 발명의 이해에 단지 부수적인 것이므로 본 명세서에는 설명되지 않음을 당업자는 이해할 것이다. 이들은 단지 예이며, 본 발명은 다양한 회로들과 함께 동작할 수 있으며, 이러한 회로들은 본 발명의 가르침에 중요하지 않은 다양한 방법으로 구현될 수 있다는 것을 이해해야 한다. 또한, 하나의 파이프라인만이 도시되었지만, 본 발명은 이러한 실시예에 제한되는 것은 아니며, 본 발명의 이점은 멀티 파이프라인 환경에도 확장될 수 있다.
전술한 바와 같이, 도 2a에 도시된 아래의 제어 신호가 사전 디코딩 단계(도 2) 동안 디코드 제어 라인(129) 상에 BRCTL(150)에서 사용하기 위한 입력으로서 DEC(125)에 의해 생성된다:
(1) dec_branch_pd: 이 신호는 분기 명령이 사전 디코딩 단계(DEC 125)에 있음을 나타낸다.
(2) dec_unconditional: 이 신호는 디코딩 단계 125에서 무조건부 분기가 존재한다는 것을 나타낸다.
(3) dec_link: 무조건부 분기/링크가 디코딩 단계에 있음을 나타내는 신호.
(4) dec_folded: 이 신호는 디코딩 단계에서 조건부 분기(폴디드)가 있음을 나타낸다.
(5) dec_pt: 이 신호는 디코딩 단계(125)에서 분기 제어 명령(PT)이 존재함을 나타낸다.
(6) dec_iar_pd[2:0]: 3비트 폭의 이 신호는 어느 명령 어드레스 레지스터가 PT 및/또는 분기 명령에 의해 타겟 어드레스를 포함하는 것으로서 지정되는가를 나타낸다.
(7) dec_hint: 이 신호는 PT 및 조건부 분기 명령에 첨부된 힌트 비트이다.
전술한 바와 같이, 도 2b에 도시된 아래의 제어 신호가 FECTL(101)에서 사용하기 위한 입력으로서 분기 제어 라인(152) 상에 BRCTL(150)에 의해 생성된다:
(1) br_fe_pt_vld_el: 이 신호는 E1에서의 분기 제어(PT) 명령이 실행되고 있음을 나타낸다.
(2) br_fe_br_addr[31:0]: 이 신호는 분기 타겟 어드레스를 제공한다.
(3) br_fe_pt_iar[2:0]: 이 신호는 E1 단계에서 PT 명령에 의해 지정된 IAR 번호를 나타낸다.
(4) br_fe_pt_hint: 이 신호는 PT 명령의 BHB의 값을 나타낸다.
(5) br_fe_squash: 이 신호는 오류 예측의 경우에 타겟 페치를 스쿼시하는 데 사용된다.
(6) br_fe_br_iarnum[2:0]: 이 신호는 br_fe_br_command에 첨부된 IAR 번호를 나타낸다.
(7) br_fe_br_command: 이 신호는 분기 명령을 나타낸다. 이 명령들은 또한 다음의 정보를 포함하도록 구성된다:
[i] PTKN: 예측이 취해짐
[ii] ATKN: 실제 취해짐
[iii] CNT: 연속=예측 실패
[iv] PRLD: 사전 적재
[v] IDLE: 유휴 상태
BRCTL(150)은 또한 유효하지 않은 명령들을 DEC(125) 및 ALU(130)로부터 제거하기 위하여 파이프라인 제어 유닛(도시되지 않음)에 의해 사용되는 "스쿼시"-br_squash_dec 및 br_ppc_squash_E1을 생성한다. 이러한 유형의 명령 스쿼싱 동작은 당해 분야에 공지되어 있으며, 따라서 본 발명에 적당한 임의의 종래 구현이 사용될 수 있다. BRCTL(150)은 또한 imu_fcmp_pred_ex1으로서 도면에서 다른 장소에서 더 구체적으로 식별되는 전술한 분기 거짓 신호를 수신한다.
마찬가지로, 도 2b에 도시된 아래의 제어 신호가 BRCTL(150)에서 사용하기 위한 입력으로서 분기 제어 라인(152) 상에 FECTL(101)에 의해 생성된다:
(1) fe_br_iar_req: 이 신호는 사전 적재 요구를 나타낸다.
(2) fe_br_req_iar[2:0]: 이 신호는 fe_br_iar_req에 첨부된 IAR 번호를 나타낸다.
(3) fe_br_pred_ignore: 예측된 타겟 페치가 무시됨을 나타내는 신호.
또한, IC(105)의 제어부로부터 피드백 신호 ic_fe_data를 수신하는데, 이 신호는 사전 적재 요구에 응답하여 캐시로부터 2개의 명령이 판독되었음을 확인하는 데 사용된다.
전술한 바와 같이, MUX_BR(146)은 타겟 어드레스에 대한 선택기이다. MUX_BR(146)은 BRCTL(150)에 의해 분기 어드레스 제어 라인(151) 상에 출력되는 선택 신호에 의해 제어되는데, 이 신호는 미해결 PT 명령이 존재하는지의 여부를 나타낸다. 이 선택기의 제어 논리는 다음과 같다:
If (oustanding PT instruction)
Select Input A
Else
Select Input B
그러나, 분기가 잘못 예측된 경우, 입력 C는 나중에 게이트되어 정상적인 순차 명령 흐름(PC+4)을 복원한다.
마찬가지로, MUX_FE(102)는 페치 어드레스에 대한 선택기이다. MUX_FE(102)는 제어 라인(106) 상에 FECTL(101)(분기 명령이 존재하는지, IAR.IA 엔트리가 유효한지를 나타냄)로부터의 선택 신호에 의해 제어된다. 이 선택기의 제어 논리는 다음과 같다:
If (branch instruction)
If (IAR.IA entry is valid)
Select Input A
Else
Select Input B
Else
Select Input C
전술한 바와 같이 페치 어드레스가 명령 페치 어드레스 래치(IFAL;103)에 저장된다. 이 어드레스가 IC(105)로 전송될 때, 도 2b에 icc_fe_commnad로서 도시된 추가적인 페치 명령 신호 세트가 FECTL(101)에 의해 생성되어 캐시 액세스를 제어하기 위하여 라인(106)을 따라 전송된다. 이것은 다음의 제어 정보를 포함한다:
(1) cache_fill: 캐시가 잘못 발생된 때 캐시 충전을 위해 메인 메모리에 액세스한다.
(2) cache_no_fill: 캐시가 잘못 발생된 때 캐시 충전을 위해 메인 메모리에 액세스하지 않는다.
(3) idle: 캐시에 액세스하지 않음.
본 발명의 다른 다양한 발명적인 특징을 포함하는 프로세서(100)의 동작이 도 1a 및 이에 따르는 예를 참조하여 조사될 수 있다. 도 1a에 도시된 바와 같이, 본 발명에 이용되는 전체 프로세스는 아래의 기본 단계를 포함한다. 단계 180에서 먼저 분기 동작이 검출된다. 이 경우, 분기 제어 명령은 사실상 시작될 동작을 컴퓨팅 시스템(100)에 신호한다. 그 다음, 단계 182에서, 컴파일러/소프트웨어 분석에 기초하여, (전술한 힌트 비트를 설정함으로써) 분기 명령이 취해질 것인지의 여부에 관한 예측이 이루어진다. 그 다음, 단계 184에서, PT 명령에 제공된 정보에 기초하여 분기 타겟 어드레스 정보가 준비된다. 후술하는 바와 같이, 이 정보는 사전 적재 동작으로 인하여 분기를 검출하기 전에 이미 사용 가능할 수 있다. 그 다음, 단계 186에서, 컴퓨팅 시스템(100)은 이러한 데이터와 함께 적당한 타겟 어드레스 레지스터 및 타겟 명령 레지스터를 사전 적재하도록 파이프라인을 설정한다. 그 다음, 단계 188에서 분기 조건이 해결되어 분기가 실제로 발생하는지가 결정된다. 단계 190에서 이러한 결정에 기초하여 컴퓨팅 시스템은 오류 예측으로 인해 파이프라인에 임의의 조정이 필요한지를 결정한다. 최종적으로, 단계 192에서, 정확하게 예측된 분기를 위한 임의의 필요한 타겟 명령이 이제 실행을 위해 유효하다는 사실에 기초하여 명령 흐름이 정확한 명령 시퀀스로 적당히 진행된다. 전술한 단계들이 특정 시퀀스로 도시되었지만, 반드시 이러한 방식으로 실행되어야 하는 것은 아니며, 본 발명은 이러한 단계들의 특정 배열 또는 타이밍에 제한되지 않는다. 예컨대, 분기 검출 동작(단계 180)은 디코딩 유닛(DEC;125)에서 실시되지만, 이것은 모든 분기 동작이 그 때 이미 예측(단계 182)되어 있는 경우이다. 더욱이, 전술한 설명으로부터 명백하듯이, 동시에 많은 단계가 발생할 수 있거나 시간상 상당히 중첩될 수 있다. 따라서, 상기한 설명은 본 명세서 및 첨부 도면에 설명된 상세한 동작의 간단한 설명이며, 본 발명에 사용되는 다양한 프로세스들간의 임의의 필요한, 또는 일정한 관계를 설명하는 것을 의도하는 것이 아니라는 것을 당업자는 이해할 것이다.
전술한 분기 처리 회로에 의해 수행되는 특정 기능 및 분기 동작시의 이들의 상호 작용에 대한 더 상세한 설명이 아래에 주어진다.
비분기 명령(덧셈 명령과 같은 일반 명령)
분기 명령을 포함하지 않는 통상적인 경우에, FAL(103)에 페치 어드레스가 설정된다. 파이프라인 동작의 F1 및 F2 단계(2 싸이클) 동안 IC(105)는 페치 어드레스에 기초하여 액세스되고, 판독된 데이터는 IB(110로 전송된다. 명령 버스(107)는 그 폭이 64비트이므로 한 번에 2개의 순차 명령이 전송될 수 있다. IB(110)는 (상부로부터) 판독된 다음, 단계 F2에서 디코드 버퍼(120)에 명령이 저장된다. 이 경우, 이전 명령은 분기 명령이 아니므로 IB(110) 및 D(120)는 MUX_D(118)를 통해 접속된다. 이 경우, D 내의 덧셈 명령은 디코드 단계 동안 DEC(125)에 의해 디코드된다. 또한, D 단계 동안 GPR(135)로부터 임의의 필요한 데이터 항목이 판독되어 덧셈 명령의 오퍼랜드로서 E1 래치(127a, 127b)에 설정된다. 그 다음, E1(127a, 127b) 내의 오퍼랜드는 E1 단계 동안 ALU(130)에 의해 작용되어 덧셈 연산이 실행된다. 이러한 계산의 결과는 기록(W) 단계 동안 GPR(135)에 저장된다. 도 1에 도시되지는 않았지만, 지정된 회로(130) 내에서 추가적인 파이프라인 단계(예컨대 E2 및 E3)가 존재한다는 것은 명백하며, 이들은 본 발명의 설명에 필요한 경우 아래에서 참조된다. 그러나, 본 발명의 이해에 중요하지 않기 때문에 본 명세서에서는 동일한 사항은 생략되었다.
분기 제어(PT) 명령
분기 제어(PT) 명령이 DEC(125)에 의해 디코드될 때 임의의 필요한 데이타가 GPR(135) 또는 PC_D(128b)로부터 판독되어(PT 명령의 유연성 때문에, 즉 PC 또는 레지스터 세트로부터의 편이가 타겟 어드레스를 계산하는 데 사용될 수 있으므로) E1 래치(127b)에 오퍼랜드로서 설정되어야 하는 점을 제외하고는 전술한 것과 동일한 동작이 발생한다. 이 동일한 D 단계 동안, DEC(125)는 dec_iar_pd 및 dec_hint를 포함하는 PT 명령과 관련된 추가적인 파라미터에 대한 정보는 물론 dec_pt(PT 명령의 디코드를 나타냄)를 포함하는 일련의 제어 신호를 BRCTL로의 라인(129) 상에 생성한다. 그 다음, E1 단계 동안, E1 래치(127b)에 저장된 오퍼랜드는 ALU(130)에 의해 연산된다. 동시에, BRCTL(150)은 전술한 바와 같이, br_fe_pt_el(분기 제어 명령의 실행을 나타냄), br_fe_pt_iar 및 br_fe_pt_hint를 포함하는 다수의 제어 신호를 FECTL(101)로의 라인(152) 상에 표명한다. 또한, 바람직한 실시예에서, br_fe_pt_iar 및 br_fe_pt_hint에 대한 정보는 DEC(125)에 의해 디코딩 단계(D)에서 조사되었다. 이 동일한 E1 단계 동안, BRCTL(150)은 IAR.A(140)에 저장되고 br_fe_pt_iar에 의해 지정된 타겟 어드레스를 갖는 IART(115) 내의 임의의 명령 엔트리를 무효화한다. 이것은 HB(104) 내의 타겟 명령에 대해 명령 유효 레지스터 내의 제1(유효) 비트를 0으로 설정함으로써 행해진다. 또한, br_fe_pt_hint 정보는 타겟 명령에 대해 HB(104) 내의 제2(힌트) 비트를 설정하는 데 사용된다. E2 단계 후에, 후술하는 바와 같이, 새로운 타겟 어드레스가 사전 적재에 사용될 수 있다. W 단계 동안, 새로운 타겟 어드레스의 계산을 포함하는 ALU(130)의 결과가 br_fe_pt_iar에 의해 지정된 IAR.A(140) 엔트리에 저장된다.
능동 사전 적재
FECTL(101)은 본 발명에서 분기 타겟 명령의 사전 적재 및 예측 분기 타겟 명령의 페칭을 포함하는 다수의 중요한 기능을 수행한다. 후자의 기능은 조건부 분기와 관련하여 후에 더 상세히 설명되지만, 일반적으로 순차 실행(IB(110) 안에 적재될 명령의 페치) 또는 분기 실행(IART(115)를 검색하고 타겟 명령이 발견되지 않는 경우 적재될 명령을 페치)으로부터 정상 프로그램 흐름을 유지하도록 명령 캐시로부터 명령을 적재하는 프로세스를 말한다.
사전 적재는 연속적이고 인터럽트되지 않은 명령 스트림을 보장하기 위하여 유휴 캐시 기간 동안 FECTL(101)에 의해 명령이 식별되고 검색되어 미리(즉 필요하기 전에) 파이프라인 안에 적재되는 프로세스를 말한다. 바람직한 실시예에서, 능동 및 수동 사전 적재 프로세스가 모두 사용된다. 본 명세서의 내용 안에서 능동 적재는 일반적으로 FECTL이 예측된 분기 조건에 기초하여(즉, 발생 또는 발생하지 않음) IC(105)로부터 추측으로 명령을 요구한다는 사실을 말한다. 즉, 능동 사전 적재는 분기 명령의 발생 전에 IART(115)에 명령을 적재하려고 시도한다. 본 발명의 능동 사전 적재 절차는 매우 복잡하며 후술된다.
대조적으로, 수동 사전 적재는 훨씬 더 간단하며, 아래에 설명될 수 있다. 기본적으로, 이 절차는 정상 프로그램 흐름 동안에 발생하는 타겟 명령을 IART(115)에 적재하는 것을 포함한다. IART(115)에 필요한 타겟 명령을 사전 적재하는 것이 항상 가능한 것은 아니다(2 싸이클의 페널티가 발생). 이 경우, 정상 프로그램 흐름 동안 IC(105)로부터 타겟 명령이 대신 검색될 때, 그럼에도 불구하고 IART(115)에는 DEC(125)에 의해 디코딩된 후에 명령들이 적재되어 분기가 다시 발생하는 경우에도 정확한 타겟 명령이 사용될 수 있는 것을 보장한다. 따라서, 이러한 유형의 사전 적재는 분기 타겟이 디코딩된 후에 발생하지만, 관련 분기 타겟 명령이 기껏해야 한 번 사용할 수 없는 것을 보장한다.
본 발명에서 능동 적재는 바람직한 실시예에서의 명령의 실행과 동시에 이루어지지 않지만, 그럼에도 불구하고 본 발명의 다른 응용에서 상기 방식으로 수행될 수 있음이 명백하다.
이제, 능동 사전 적재를 더 깊이 설명하면, FECTL(101)은 바람직하게 그럴 가능성이 있는 경우(즉, BRCTL이 분기를 위한 명령 페치와 같은 몇몇 다른 동작을 요구하지 않는 경우), 그리고 IB(110)에 파이프라인을 채울 만큼 충분한 명령이 존재할 때 IC(105)로의 사전 적재 요구를 발생시킨다. 바람직한 실시예에서, 디코딩의 준비를 위해 IB(110)에 적어도 2개의 유효 명령이 존재하지 않는 경우에는 사전 적재가 수행되지 않는데, 이것은 파이프라인이 정상 명령 페치와 간섭하는 사전 적재 요구의 과잉에 의해 중지되지 않는 것을 보장하기 위한 절충이다.
어느 명령이 사전 적재되고 어느 IART 엔트리가 무효화될 것인지를 결정하기 위하여 FECTL(101)은 HB(104)에 저장된 타겟 명령 엔트리에 대한 정보를 모니터링한다. 보다 구체적으로, 임의의 클럭 싸이클 동안, FECTL은 명령 유효 레지스터가 IART(115) 내의 대응 엔트리가 무효(즉, 유효 비트=0)인 것을 나타내는 비트 값을 갖고 IART 엔트리를 위한 사전 적재 마스크 레지스터 내의 관련 힌트 비트가 타겟 명령으로의 분기의 높은 가능성(즉, 힌트 비트=1)을 나타내는 엔트리를 선택한다. 이러한 방식으로, 본 발명은 발생할 가능성이 있으나 실행 준비된 장소에 유효 명령이 없는 분기에 집중하는 예측 기법에 기초하여 사전 적재 프로세스를 수행한다.
이러한 하나 이상의 엔트리가 검출되는 경우, HB(104) 내의 적재 우선순위에 기초하여 여전히 하나의 엔트리가 바람직하게 선택되는데, 예컨대 간단한 방법으로는 가장 작은 인덱스 번호를 가진 엔트리를 사용하는 것이다. 따라서, 선택 마스크 레지스터가 고려되며, 가능한 최저 순위 IAR이 선택된다. 이 IAR 엔트리가 사전 적재를 위해 선택된 후, 선택 마스크 레지스터 내의 대응 비트는 이 엔트리를 다시 사전 적재하기 위한 후속 시도가 존재하지 않음을 보장하기 위하여 소거된다. 프리 페칭 동작에 이용할 수 있는 제한된 유휴 시간으로 인하여 어떤 환경에서는 더 낮은 순위의 IAR(예컨대 IAR6 또는 IAR7)은 능동 사전 적재 요구를 위해 도달될 수 없다는 것을 알 수 있다. IAR 엔트리가 이제 명령 레벨에서 지정될 수 있으므로(분기 제어 명령의 일부로서), 컴퓨팅 시스템(100)의 마이크로 구조의 능동 사전 적재 거동은 코드 레벨로 제어될 수 있다. 즉, 컴파일러는 이 구조에 대해 다른 순위의 IAR들을 지정함으로써 사전 적재를 능동적으로 순위화 및 우선순위화할 수 있다. 예컨대, 가능성 있는 분기를 위한 분기 제어 명령이 낮은 순위의 IAR을 지정할 수 있으며, 가능성 없는 분기에는 높은 순위의 IAR이 제공될 수 있다. 이러한 우선순위화 방법은 FIFO 및 LIFO와 같은 다른 방법에 비해 많은 이점을 갖는다. 전자의 경우, 모든 IAR에 동일한 기회가 주어지므로 우선순위화가 불가능하며, 따라서 사전 적재 거동에 영향을 주거나 제어하는 능력이 없게 된다. 후자의 경우는 가장 최근의 분기 제어 명령에 대한 적중률을 증가시키는 데 사용될 수 있지만, 다소 구현하기 복잡하다. 이 때문에 바람직한 실시예에서는 최하위 대 최고 순위 방법이 사전 적재를 위해 사용되며, 선택 마스크 레지스터는 어느 IAR이 어느 순간에 유효하게 남는가를 지시한다.
본 방법은 또한 사전 적재 요구를 위한 의사 결정 프로세스에 BRTCL(150)을 포함시키는데, 이는 본 발명자가 BRCTL을 포함시키는 것에 의해 프로세서(100)의 파이프라인 단계에 명령을 최적으로 공급하는 것이 가능해진다는 것을 발견했기 때문이다. 따라서, FECTL(101)이 사전 적재를 위한 유효 엔트리를 검출한 때, FECTL은 사전 적재 요구를 발생시키기 위하여 라인(152) 상에 fe_br_preload_req를 표명하며, 또한 BRCTL(150)에 fe_br_prload_iar에 지정된 사전 적재 제어 데이터를 가진 엔트리 번호를 통지한다. BRCTL(150)은 fe_br_preload_iar을 수신한 후, 이 신호에 기초하여 IAR.A의 지정 엔트리로부터 타겟 어드레스를 판독한다.
이때, 동일 싸이클에서 실행되는 데 필요한 분기 명령이 없는 경우, 전술한 br_fe_br_command를 통해 BRCTL(150)에 의해 사전 적재 명령(PRLD)이 생성되어 FECTL(101)로 라인(152) 상에 표명된다. 동시에, 판독된 타겟 어드레스는 MUX_BR(146)의 입력에 제공된다. 또한, fe_br_preload_iar에 의해 지정된 레지스터 번호는 IAR.IA(155)의 저장/엔트리 제어를 위하여 BRCTL(150)으로부터의 신호 br_fe_br_iarnum[2:0]을 통해 전송된다.
동일 싸이클 내에 실행되어야 하는 임의의 분기 명령들이 존재하는 경우, FECTL(101)로부터의 신호 fe_br_preload_req의 사전 적재 요구는 BRCTL(150)에 의해 무시된다. FECTL(101)이 br_fe_br_command에 구현된 PRLD 명령을 수신하고, IB(110)를 더 많은 명령으로 채울 필요가 없을 때(즉, IB(110)에 2 이상의 명령이 저장된 때), FECTL(101)은 사적 적재를 실행하기 시작한다. 즉, FECTL(101)은 MUX_BR(146)을 제어하여 라인 B 상에 IAR.A(140)로부터 타겟 어드레스를 선택한 후, MUX_FE(102)가 그 곳에 존재하는 입력 B를 선택하도록 제어함으로써 이 어드레스를 FAL(103)에 설정한다. 사전 적재 동작이 발생할 때, 신호 cache_no_fill은 또한 icc_fe_commmand 내에서 FECTL(101)에 의해 IC(105)로 표명되어 프로세서에 의해 사용되는 메인 메모리 시스템(도시되지 않음)에 대한 불필요한 액세스를 방지한다.
타겟 어드레스에 대응하는 유효 명령이 IC(105)에 위치하는 경우, 이 명려은 명령 라인(107)을 통해 전송되어 IART(115)에 저장된다. 동시에, FAL의 내용은 가산기(157)에 의해 +4 또는 +8 만큼 증분되고(IC(105)로부터 페치된 명령 수에 따라), 엔트리가 IAR.IA(155)에 저장되다. 이 단계의 목적은 IART(115)에서 명령을 사용하는 임의의 분기 명령의 후속 실행 동안 추가 타겟 명령이 빠르게 사전 적재될 수 있도록 하는 것이다.
전술한 사전 적재 동작은 대응 분기 제어 명령의 E2 스테이지 후의 어느 때엔가 실행된다. PT 명령의 실행이 완전히 종료되지 않고 타겟 어드레스가 아직 IAR.A(140)에 저장되지 않은 경우, BRCTL(150)은 실행되고 있는 PT 명령이 있음을 검출하여, MUX_BR(146)이 ALU(130)(입력 A)의 계산 결과를 타겟 어드레스로서 직접 전송하도록 제어한다. 언제 명령을 사전 적재할 것인지를 결정함에 있어서 FECTL(101)에 의해 실시되는 결정은 또한 필요한 경우 타겟 명령을 프리페치하는 데 사용될 수 있다는 것은 당업자에게 명백하다(즉, 타겟 명령이 명령 캐시에서 유효하지 않은 경우 메인 메모리로부터 페치되어야 한다).
분기 명령
본 바람직한 실시예에서, 3 종류의 분기 명령이 처리될 수 있다. 이들은 (1) 무조건부 분기 명령, (2) 분기 힌트 비트(BHB)를 가진 조건부 분기 명령, 및 (3) BHB=0인 조건부 분기 명령을 포함한다.
다른 유형의 분기 명령에 대한 본 발명의 분기 처리 성능의 개요가 도 2c의 도표에 제공된다. 헤드는 분기 유형(무조건부 또는 조건부), 예측(즉, 분기 발생이 예측되는지의 여부), 실제 분기 방향(즉, 분기가 실제로 발생하는지의 여부), 및 다양한 가능한 타겟 명령 레지스터 조건(즉, 2 명령, 1 명령, 0 명령을 가진 IAR.T 및 준비되지 않은 IAR.A)을 포함한다. 각 잠재 상황에 대해 관련된 페널티 싸이클 수가 식별된다. 세 개의 분기 페널티 싸이클의 소스가 존재하는데, 이들은 다음과 같이 간단하게 요약된다.
(1) 계산될 타겟 어드레스를 기다림. 본 발명에서 분기 명령이 빠르게 프리 디코딩될 수 있다는 사실 때문에 분기 명령이 완전히 디코딩되기 전에는 물론 이때에도 타겟 어드레스가 준비되어야 한다. 분기 제어 명령은 E2 스테이지까지 타겟 어드레스를 전송하지 않기 때문에 분기 제어 명령 및 분기 명령이 배면 대 배면으로 배치될 때 생성되는 적어도 하나의 버블(명령이 실행되지 않는 파이프라인 내의 단일 스테이지 갭)이 존재한다. 그러나, 대부분의 경우, 적당히 효율적인 컴파일러가 이러한 문제를 방지하기 위하여 2개 사이에 충분한 명령 이상이 존재하는 것을 보장할 수 있다.
(2) 페치될 타겟 명령을 기다림. 이 지연은 IC(105)의 레이턴시 싸이클 및 IART(115)가 명령을 준비하고 있는지의 여부의 함수이다. 바람직한 실시예에서, IC(105)는 2 싸이클 레이턴시를 가지며, IART는 2 명령을 유지할 수 있다. 이 것은 최악의 시나리오에서 2 싸이클을 필요로 하며, 최상의 시나리오에서 싸이클이 필요하지 않다는 것을 의미한다.
(3) 오류 예측에 대한 파이프라인 적재의 정정. 오류 예측 명령은 E2 스테이지에서 기껏해야 2 명령이 제거될 필요가 있다는 정정이 결정될 수 있으므로 스쿼시(파이프라인으로부터의 제거)되어야 한다.
이 도표로부터, 사전 적재가 성공적인 경우(제4 열에 도시된 바와 같이 IART(115)에 2 명령이 준비된 경우), 본 발명은 컴퓨팅 시스템(100)에서 레이턴시를 감소/제거하는 데 매우 효과적이라는 것을 알 수 있다.
이제, 특정 예측 시나리오(예측의 발생 여부) 및 동작 환경(즉, IART의 준비 여부) 하에서 특정 유형의 분기 명령(즉, 조건부 또는 무조건부)의 흐름의 상세한 설명이 제공된다. 아래에 모든 가능한 시나리오가 설명되지는 않지만, 본 발명의 요점은 실시예 및 첨부 도면에 의해 당업자에게 본 발명을 실시하고 이용하는 방법을 적당히 가르치는 방식으로 완전하고 정확히 설명된다.
무조건부 분기 명령
전술한 바와 같이, 정상 동작 동안, FAL(103)에 페치 어드레스가 이미 설정되어 있다. 그 다음, IC(105)는 F1 및 F2 스테이지 동안 이 어드레스에 기초하여 액세스하며, 명령이 IB(110)로 전송된다. 전술한 바와 같이, IB(110)의 내용이 (버퍼의 상부로부터) 판독되어 래치(D; 120)에 저장된다. D 스테이지 동안(사실상 프리 디코딩 스테이지(P)에서), 이 명령은 DEC(125)에 의해 디코딩되고, 이것이 무조건부 분기 명령일 때, DEC(125)에 의해 dec_branch_pd, dec_conditional (=0), dec_hint 및 dec_iar_pe의 신호가 생성되어 라인(129)에서 BRCTL(150)에 대한 입력으로서 표명된다. 그 다음, BRCTL(150)은 IART(115)가 이 특정 무조건부 분기 명령에 대한 유효 타겟 명령을 갖는지를 결정하기 위하여 dec_iar_pd에 의해 지정된 HB(104) 내의 대응 엔트리에 대한 유효 필드(제1 비트)를 검사한다. 그 다음, IART(115) 내의 유효 명령을 지시하는 유효 비트=1일 때, BRCTL(150)은 IART(115)의 적당한 엔트리로부터 타겟 명령을 게이트(판독)하도록 진행하며, 이 명령을 MUX_D(118)을 통해 래치 D(120)로 전송한다. 이러한 방법은 페널티 싸이클 없이 D 스테이지에 타겟 명령을 놓는 것을 가능하게 한다. 즉, 실행될 다음 명령이 프로그램 시퀀스 내의 무조건부 분기 명령을 바로 뒤따르지 않아도 전술한 바와 같이 적당한 타겟 어드레스, 타겟 명령 등을 셋업하는 분기 제어 명령의 디코딩/실행에 기초하여 이미 사전 적재되었다는 사실에 의해 실행될 수 있으며, 따라서 ??르은 분기 명령이 파이프라인에서 디코딩될 때 바로 준비된다.
또한 분기 명령의 디코딩 스테이지 동안, 신호 ATKN(실제 분기 발생)이 BRCTL(150)에 의해 br_fe_br_command를 사용하여 FECTL(101)로 전송된다. 또한, 타겟 어드레스는 dec_iar_pd에 의해 지정된 IAR.A 내의 엔트리로부터 판독되어 입력 B로서 MUX_BR(140)로 제공된다. 타겟 어드레스를 유지하는 IAR 번호도 br_fe_br_iarmun에 의해 BRCTL(150)에서 FECTL(101)로 전송된다. FECTL(101)이 ATKN 신호를 수신할 때, IART 엔트리에 대응하는 HB(104)의 제1(유효) 비트를 다시 검사함으로써 br_fe_br_iarnum에 의해 지시된 IART 엔트리의 유효성을 검사한다.
이때, IART(115) 내의 엔트리가 2개의 유효 명령을 갖는 경우, 이것은 타겟 명령이 이미 사전 적재되어 실행에 유효하므로 레이턴시 페널티 없이 분기가 실행된다는 것을 의미한다. 따라서, 프리페치 동작은 IC(105)로부터 IART(115)에 이미 저장된 명령을 바로 뒤따르는 명령을 얻는다. 그러나, 이 명령의 어드레스는 전술한 방식으로 이미 계산되어 IAR.IA에 저장되었다. 따라서, 다음 타겟 어드레스가 IAR.IA(155)로부터(IAR.A(140) 대신) 판독되어 MUX_FE(102)의 입력 A 상에 표명된 다음, FECTL(101)에 의해 선택되어 IC(105)에 대한 페치 어드레스로서 FAL(103)로 전송된다. 따라서, FECTL(101)은 이 미리 계산된(증분된) 타겟 어드레스에 기초하여 IC(105)에 액세스한다. 그 다음, IB(110)에는 이 타겟 어드레스에 의해 지시된 IC(105) 내의 명령이 적재된다. 이러한 방식으로, 적당한 타겟 명령이 파이프라인에 정확한 시퀀스로 연속 제공되어, 파이프라인 플러싱, 새로운 명령을 적재하기 위한 명령 캐시의 리액세싱, 명령 버퍼로의 명령의 재적재 등으로부터 분기 명령이 실행될 때 종래 기술에서 발생하는 통상적인 페널티 싸이클을 피할 수 있게 된다. 이 바람직한 실시예에서, 다음 명령은 물론 타겟 명령이 IART(115)로부터 적재되며, 그 다음 임의의 후속 명령이 IC(105)로부터 IB(110)으로 적재된다. 몇몇 환경에서는 유효 레이아웃 공간, 전력 요건 등에 따라 IART(115)의 크기를 변화시키는 것이 바람직할 수 있다. 그러나 일반적으로는 양호한 성능을 얻기 위하여 버퍼는 어떠한 명령 캐시 레이턴시도 오프셋할 수 있도록 충분히 깊어야 한다(본 실시예에서는 2 엔트리로 충분함).
전술한 시나리오에서 전술한 신호들 사이의 타이밍 관계를 나타내는 타이밍도가 도 3a에 제공되다.
대신 IART 엔트리가 유효하지 않은 것으로 밝혀진 경우, MUX_D(118)는 입력 B 상에서 IB(110)를 선택하도록 제어된다. FECTL(101)은 IAR.A(140)으로부터 들어오는 입력 B 상의 타겟 어드레스를 선택하도록 MUX_FE(102)를 제어한다. 그 다음, IAR.A로부터 전송된 이 타겟 어드레스는 FAL(103)에 적재되고, 전술한 바와 같이 적당한 타겟 명령을 찾기 위한 IC(105)로의 액세스가 실시된다. 그 다음, IC(105)로부터의 유효 명령이 전송되어 IB(110) 및 IART(115)에 저장된다. 이 방법에 따르면, 분기 명령이 제1회에 유효하지 않은 경우에도 적어도 동일한 무조건부 분기 명령이 다시 실행될 때, IART는 정확한 타겟 명령을 저장해야 한다. 따라서, 이러한 명령을 후에 만날 때, 바로 위의 문단에 설명된 절차가 수행되며, 적당한 타겟 명령이 사전 적재되었다는 사실로 인하여 다수의 잠재적인 페널티 싸이클이 절약된다.
도 2d 내지 2f는 파이프라인에서 무조건부 분기 명령이 발생할 수 있을 때 무조건부 분기 명령을 위한 3가지 가능한 시나리오에 대한 컴퓨팅 시스템(100)에서의 파이프라인의 상태의 스냅 사진이다. 이들은 (1) 타겟 명령이 IART(115)에서 유효한 무조건부 분기, (2) 타겟 명령이 IART(115)에서 유효하지 않은 무조건부 분기, (3) 타겟 어드레스조차 준비되지 않은(예컨대 이 경우 PT 명령과 관련 분기 명령 사이에 시간적으로 적당한 독립이 존재하지 않는다) 무조건부 분기를 포함한다. 각 경우, 파이프라인 적재, 및 분기 실행과 관련된 최대 레이턴시 페널티에 대한 표시?? 주어진다.
BHB=1을 포함하는 조건부 분기 명령
기본적으로, BHB=1인 조건부 분기 명령의 동작/거동은 전술한 무조건부 분기 명령의 그것과 동일하다. 주요 차이점은 다음과 같다. BHB=1인 조건부 분기 명령이 D 스테이지에서 디코딩될 때, BRCT(150)은 신호 PTKN(실제 발생한 대신 예측된 ATKN)를 생성하여 FECTL(101)에 표명한다. 조건부 분기 조건이 예측된 대로 실제로 취해진 경우에, 시스템은 무조건부 분기 명령 동작에 대해 전술한 바와 실질적으로 동일하게 거동한다. 이 시나리오를 위한 제어 신호들 간의 관계를 나타내는 타이밍도가 도 3b에 제공된다. 파이프라인 적재는 또한 기본적으로 정확히 예측된 경우에 도 2d 내지 2f와 동일하며, 따라서 이들은 반복 설명되지 않는다.
그러나, 오류 예측이 발생한 때(즉, 조건부 분기 실제로 발생하지 않은 때)에는 대신 다음의 흐름이 발생한다. 조건부 분기의 E2 스테이지에서, ALU(130)는 분기의 조건이 거짓임을 결정하고, 이 사실을 신호 imu_fomp_pred_Ex1을 통해 BRCTL(150)에 알린다. 그 다음, BRCTL(150)은 br_fe_br_command를 사용하여 신호 CNT(실패 예측 발생과 함께 계속)를 생성하여 새로운 타겟 어드레스와 함께 FECTL(101)에 표명한다. 이 경우, 분기가 취해지지 않은 경우, 실행될 다음 명령은 프로그램 흐름에서 순차적으로 분기 명령을 따르는 IB(110) 내의 하나이어야 한다. 따라서, 새로운 타겟 어드레스는 분기 명령의 프로그램 카운터(PC)+4이며, 이것은 MUX_BR(146)의 입력 C를 통해 적재된다. 래치 D(120) 및 E1 래치(127a)를 포함한 파이프라인의 스테이지의 일부에서의 정보는 BRCTL(150)에 의해 무효화되는데, 이것은 이들이 현재 정확하지 않은 IART(115)로부터 적재된 명령을 포함하기 때문이다. 이것은 분기가 실제로 취해지지 않지만 파이프라인이 아직 처리에 유효한 적당한 명령을 갖고 있기 때문에 레이턴시 페널티를 감소시킨다. 수행되어야 할 것은 잘못 적재된 명령이 스쿼시(제거)되고 파이프라인에 정확한 명령 스트림이 다시 채워져야 한다는 것이다. 그럼에도, 오류 예측 분기의 수는 작은 것으로 예측되므로, 이러한 레이턴시 페널티는 설명된 전반적인 분기 처리 구조에 의해 달성되는 성능 이점에 의해 실질적으로 중요한 것으로 믿어진다.
그 다음, FECTL(101)이 CNT 신호를 수신할 때, 이를 사용하는 MUX_D(102)를 통해 FAL(103)에 전술한 방식으로 전송하여 파이프라인이 재적재될 수 있도록 하기 위하여 적당한 타겟 명령을 검색한다. 이 시나리오를 위한 관련 제어 신호들 간의 관계를 나타내는 타이밍도가 도 3g에 제공되다.
도 2g 내지 2j는 조건부 분기 명령이 잘못 예측되고 실제로 취해지지 않은 3개의 가능한 시나리오에 대한 컴퓨팅 시스템(100)에서의 파이프라인의 상태의 스냅 사진을 제공한다. 이들은 (1) 예측이 취해졌으나 실제로는 발생하지 않았으며 타겟 명령이 IART(115)에서 유효한 조건부 분기, (2) 예측이 취해졌으나 실제로는 발생하지 않았으며 타겟 명령이 IART(115)에서 유효하지 않은 조건부 분기, (3) 예측이 취해졌으나 실제로는 발생하지 않았으며 타겟 어드레스조차도 준비되지 않은 조건부 분기를 포함한다. 각 경우에, 파이프라인 적재, 및 이 분기 실행과 관련된 최대 레이턴시 페널티에 대한 표시가 주어진다.
BHB=0의 조건부 분기 명령
이 상황에서, 분기 명령의 D 스테이지 동안, 분기 명령을 위한 사전 적재 요구가 BRCTL(150)에 의해 발행된다. 즉, BRCTL(150)이 라인(129) 상에서 DEC로부터 dec_branch_pd=1, dec_conditional=1 및 dec_hint=0를 수신할 때, HB(104)내의 대응 레지스터 엔트리 내의 제1 비트(유효 비트)를 관찰함으로써 dec_iar_pd에 의해 지정된 IART(115) 내의 엔트리의 유효성을 검사한다. IART 엔트리가 유효한 경우, BRCTL은 더 이상 아무 것도 행하지 않는다. 이것은 성능 관점에서 볼 때 취해지고 있지 않은 분기의 예측이 후에 부정확한 것으로 입증되는 경우에도 분기를 위한 정확한 타겟 어드레스가 이미 IART(115)에 적재되어 있기 때문에 레이턴시 페널티가 존재하지 않는다는 점 때문이다. 이 시나리오의 신호 타이밍 관계가 도 3d에 제공된다.
반면, IART(115) 내의 대응 엔트리가 유효하지 않은 경우, BRCTL(150)은 IAR.A(140)에 지정된 타겟 어드레스를 판독하여 br_fe_br_commnad 내의 제어 신호 PRLD(사전 적재)와 함께 라인 B 상에서 FECTL(101)로 전송한다. 이것은 또한 br_fe_br_iarnum 신호를 사용하여 분기 명령에 의해 지정된 IAR.A(140) 엔트리 번호를 전송한다. IB(110) 충전에 대해 명령 페치과의 경쟁이 없는 경우, 사전 적재 요구가 IC(105)로 전송된 다음, 능동 사전 적재 절차에 대해 설명한 바와 동일하게 동작이 진행된다.
동작 관점에서 볼 때, BHB가 분기가 취해지지 않을 것이고 분기가 실제로 취해지지 않은 것을 지시할 때, 프로그램 실행 흐름은 통상 명령의 그것과 꼭 같으며, 레이턴시가 발생하지 않는다는 것을 알 수 있다. BHB가 분기가 취해지지 않을 것이고 분기가 실제로 취해진 것을 지시할 때, E2 스테이지에서의 실행 흐름은 무조건부 분기 상황에서의 D 스테이지의 그것과 동일하다. 이 경우, D 래치(120) 및 E1 래치(127a, 127b)는 무효화되어야 한다.
전술한 바와 같이, 정확하게 예측되고 실제로 취해진 시나리오에 대해 예측되고 취해지지 않은 분기, 즉 실제로 취해지지 않은 사건은 무조건부 경우에 대해 도 2d에 도시된 것과 기본적으로 동일한 파이프라인 파라미터를 갖는다.
예측이 취해지지 않고 실제로 취해진 유형의 부정확한 예측의 경우에 대해 도 2j 내지 2l은 조건부 분기 명령이 취해지지 않은 것처럼 잘못 예측되고, 실제로 취해진 3개의 가능한 시나리오에 대한 컴퓨팅 시스템(100) 내의 파이프라인의 상태의 스냅 사진을 제공한다. 이들은 (1) 예측이 취해지지 않았으나 실제로는 취해졌으며 타겟 명령이 IART(115)에서 유효한 조건부 분기, (2) 예측이 취해지지 않았으나 실제로는 취해졌으며 타겟 명령이 IART(115)에서 유효하지 않은 조건부 분기, (3) 예측이 취해지지 않았으나 실제로는 취해졌으며 타겟 어드레스조차 준비되지 않은 조건부 분기를 포함한다. 각 경우에, 파이프라인 적재, 및 분기 실행과 관련되 최대 레이턴시 페널티에 대한 표시가 제공된다.
도면들로부터 알 수 있듯이, 본 발명은 이러한 유형의 오류 예측에 대해서도 정정하려는 추가적인 시도를 이용한다. 이것은 도 2j에서 알 수 있듯이 IART(115)가 분기가 잘못 예측된 경우에도 실행을 위해 준비된 분기 명령을 가질 수 있기 때문이다. 더욱이, IART(115)가 이러한 명령을 갖지 않은 경우에도 BRCTL(150)은 계류중인 더 높은 우선순취 페치가 존재하지 않는 경우 FECTL의 도움으로 이들을 적재하려고 시도한다(분기를 위한 예측이 취해지지 않은 상태에서도). 따라서, 상당한 잠재적인 레이턴시 싸이클이 방지된다.
신호 타이밍 고려
도 3a 내지 3g는 분기 명령 처리 프로세스를 포함하는 설명된 실시예의 동작 동안에 사용되는 다양한 신호( 및 이들의 관계)를 나타내는 타이밍도이다. 이 도면은 특히 (1) 파이프라인 스테이지의 상태, (2) 그 안의 명령 스트림의 진행, (3) 컴퓨팅 시스템(100)에서 발생할 수 있는 다양한 특정 동작 상태에 대해 DEC(125), BRCTL(150), FECTL(101) 및 다른 제어 논리에 의해 발생되는 전술한 제어 신호의 식별자 및 상대 타이밍 관계를 도시한다. 구체적으로, 설명된 잠재 상태들은 (1) 도 3a-IART(115)가 타겟 명령과 함께 준비된 때 처리하는 무조건부 분기 명령, 도 3b-예측(힌트 비트)이 분기가 취해질 것을 지시하고, IART(115)가 분기가 취해질 때 타겟 명령과 함께 준비된 조건부 분기, 도 3c-도 3b에서 IART(115)가 준비되지 않은 점 외에는 동일, (4) 도 3d-예측(힌트 비트)이 분기가 취해지지 않을 것을 지시하고, 이러한 분기가 실제로 취해지지 않지만, IART(115)가 타겟 명령과 함께 준비되지 않은 조건부 분기, (5) 도 3e-예측이 분기가 취해지지 않을 것을 지시하고, IART(115)가 타겟 명령과 함께 준비되고, 이러한 분기가 실제로 취해지는 조건부 분기, (6) 도 3f-IART(115)가 준비되지 않은 것을 제외하고는 도 3e와 동일, (7) 도 3g-IART(115)가 타겟 명령과 함께 준비된 것을 제외하고는 도 3d와 동일-을 포함한다. 이 도면들에 사용되는 바와 같이, T0-T7은 전술한 IAR을 나타내며, ibO은 IB(110)을 나타낸다. 그러나, 물론 잠재적인 명령 상태의 대표적인 예가 있으며, 컴퓨팅 시스템(100)의 다른 동작 상태를 처리하는 데 필요한 제어 신호의 다른 조합은 본 명세서로부터 당업자에게 명백할 것이다.
또한, 도 3h는 개선된 분기 제어 명령이 컴퓨팅 시스템(100)에 의해 처리되는 방법을 나타낸다. 무조건부 분기 명령(도면에 blink로 표시)이 파이프라인에서 분기 제어 명령을 따를 때, 이에 필요한 타겟 어드레스는 이미 계산되었으며, 따라서 분기 명령의 실행 스테이지(E1) 동안에 타겟 어드레스 명령(T0)을 적재하는 데 사용할 수 없다.
본 발명의 가르침의 주의깊은 검토로부터 당업자는 본 발명의 이점의 일부가 다음을 포함한다는 것을 알 것이다:
(1) 분기가 한 번만 실행되는 경우에도, IART(115)에서 타겟 명령에 대한 적중이 만들어질 수 있다.
(2) 컴파일러가 전체 프로그램을 분석할 수 있고 따라서 버퍼 내의 유효 엔트리의 이용을 최적화할 수 있으므로 IART(115)는 매우 클 필요가 없으며, 이에 따라 이러한 구조를 사용하는 프로세서(100)를 위한 공간 및 소비 전력이 절약된다.
(3) IART(115) 내의 타겟 명령 엔트리는 분기 제어 명령에 의해 직접 공급된 명령 어드레스 레지스터(IAR) 번호에 의해 액세스되어 지연이 최소화되거나 제거될 수 있다.
(4) 디코딩된 분기 명령(정상적으로 2 싸이클)에 기초하여 캐시 엔트리(2 명령)를 검색하는 것과 관련된 페치 레이턴시는 많은 경우에 발명적인 사전 적재 프로세스에 의해 실질적으로 제거되는데, 이는 각 사전 적재된 엔트리가 2개의 명령을 제공할 수 있기 때문이다(따라서 2 싸이클의 절약).
(5) 상기 프로세스를 극도로 효과적으로 만들기 위하여 기껏해야 3개의 명령만이 분기 제어 명령과 분기 명령 사이의 프로그램에 배치되면 된다. 이것은 PT 명령이 디코딩된 후, 타겟 어드레스는 PT 명령의 실행의 E2 단계에서 유효하게 되며, 따라서 타겟을 필요로 하는 분기 명령은 아직 D 단계에서(즉, 2 단계/명령 이상 후에) 최적으로 되지 않는다는 사실에 기인한다. 물론, 이 형태는 파이프라인의 특정 구조에 기초하여 파이프라인에 따라 변한다.
(6) 능동 및 수동의 2 종류의 사전 적재가 이용된다. 이러한 방법은 적당한 타겟 명령이 실행될 시간에 적재될 기회를 향상시킨다.
향상된 분기 제어/분기 명령
전술한 마이크로 구조는 독립 포맷을 사용하여 분기 처리를 조정하도록 설계되며, 이에 따라 분기 명령이 파이프라인을 미리 셋업하여 후속 분기 명령이 빠르고 효과적으로 실행될 수 있도록 한다. 본 명세서의 다음 부분은 분기 제어 명령 및 관련 분기 명령을 위한 구조의 바람직한 실시예에 대해 더 구체적으로 설명한다. 이들 실시예는 도 4a 및 4b에 각각 도시된다.
최초 설명 포인트로서 분기 제어 명령이 실제 분기 명령으로부터의 완전히 독립된 명령으로서 설명된다. 이 명령은 다수의 목적에 도움이 되지만 간명화의 관점에서 주 기능의 하나는 컴퓨팅 시스템에게 명령 스트림에서 곧 분기를 준비해야 할 것을 알리는 것이다. 따라서, 이 명령은 통상의 분기 명령과 공통으로 관련되지 않은 몇몇 기능을 수행하지만, 그럼에도 동작/기능 관점에서 실제 분기 명령의 논리 성분으로 고려될 수 있는데, 이는 이들 둘이 논리적으로 동작적으로 링크되기 때문이다. 또한, 본 명세서는 본 발명을 더 잘 설명하기 위하여 양 명령을 설명하지만, 본 발명의 어느 특정 명령에 응용에 있어서, 이들 두 명령을 통합 형태로 프로그래머에게 투명한 방식으로 구현하는 것도 고려할 수 있다는 것을 알아야 한다. 예컨대, 본 발명을 이용하는 컴퓨팅 시스템의 프로그램을 설계할 때, 통합 분기 명령만이 소프트웨어 프로그램 개발자/작성자에게 보일 수 있는 것이 가능하다. 개발자는 분기 제어 명령을 자체적으로 하이 레벨 포맷으로 구현하기 위한 명백한 도구에 노출되거나 제공 받을 수 있거나 그렇지 않을 수 있다. 그 대신, 조건부 루프 부분을 포함하는 하이 레벨 언어 명령 세트로 전체 프로그램 코드를 작성한 후에, 컴파일러는 특정 컴퓨팅 시스템(100)에서의 실행을 위해 가장 적당하고 최적인 포맷으로 하이 레벨 언어 명령을 적당한 분기 제어/분기 쌍으로 번역한다. 또한, 컴파일러는 필요한 타겟 명령 어드레스 계산 및 타겟 명령을 조사하여, IART(115)가 특정 프로그램 코드 내의 분기 동작을 처리하도록 효과적으로 사전 적재될 수 있도록 한다.
따라서, 특정 포맷의 분기 제어 명령(410)을 조사하는 도 4a를 참조할 때 다음 필드를 포함하는 것을 알 수 있다:
(1) Opcode(6 비트): 이 필드는 사전 디코딩 프로세스 동안에 컴퓨팅 시스템(100)에 독특하게 명령을 식별하기 위해 사용된다.
(2) Rm/edisp(6 비트): 이 필드는 후술하는 바와 같이 GPR 내의 레지스터들 중 하나를 지정하거나 PC 상대 분기를 위해 사용하는 확장 필드로서 사용되며, 오프셋을 위한 상대 또는 절대 베이스를 관련시키는 타겟 어드레스 베이스 파라미터로서 고려될 수 있다.
(3) Disp(13 비트): 이 필드는 PC 상대 분기를 위한 PC로부터의 오프셋을 나타내며, 19 비트 변위를 생성하기 위하여 edisp(6 비트)와 연결될 수 있다.
(4) L(1 비트): PT 명령의 확률 비트(예측 비트)로서 타겟 명령이 적어도 하나의 분기에 의해 필요할 수 있는 확률을 나타내는데, 이 파라미터는 후술하는 바와 같이 종래의 예측 비트보다 약간 다르고 더 복잡한 평가를 포함하며, 이는 다수의 분기 동작에 대한 누적 기대치를 고려하기 때문이다.
(5) R(1 비트): 타겟 계산이 레지스터 또는 PC와 관련되는지를 나타낸다.
(6) IAR(3 비트): 8개의 IAR.A 레지스터 중 어느 것에 계산된 타겟 어드레스가 적재될 것인지를 지정한다.
(7) Res(2 비트): 이것은 미래의 기능을 위해 남겨진 것이다.
본 실시예는 특히 전술한 바와 같은 컴퓨팅 시스템(100)에 사용하기 적당하지만, 특정 설계 선택, 시스템 구조 등에 따라 다양한 변형이 가능하며, 이러한 변형은 본 발명의 가르침의 영역에 있는 것으로 의도된다는 것이 명백하다. 분기 제어 명령의 몇몇 추가적인 특징은 컴퓨팅 시스템(100)에 사용되는 분기 제어 논리의 유연성 및 효율적인 이용성을 더 향상시킨다. 타겟 어드레스는 미리 계산되므로 IAR.A(140)의 IAR들 중 하나에 실제로 저장되기 전에 예외 검사가 이루어질 수 있다. 타겟 어드레스가 검사되어 어드레스 공간의 구현 부분 내에 있는지를 보장할 수 있으며, 그렇지 않은 경우 예외가 발생할 수 있다. 타겟 어드레스는 타겟 명령을 위해 적당히 정렬된 것을 보장하도록 검사될 수 있으며, 그렇지 않은 경우 예외가 발생할 수 있다. 다른 응용은 추가적인 예외 유형이 검사될 것을 요구할 수 있다.
이러한 예외는 명령 스트림에서 소프트웨어 에러가 조기에 발견되는 것을 가능하게 하며, 이것은 디버깅을 간단하게 해준다. 또한, 이러한 예외 경우의 사전 검출은 유효 명령 어드레스만이 IAR에 저장되는 것을 보장한다. 이것은 예컨대 구현되지 않은 어드레스 공간에 대응하는 어드레스 비트를 저장할 필요가 없거나 IAR에 저장된 값이 오류인 것을 지시할 필요가 없게 되므로 IAR의 저장량을 감소시킬 수 있다. 또한, 이러한 구조는 구현이 간단한데, 이는 IAR 값이 오류인 경우를 고려하기 위한 논리를 구현하는 후속 프리페치 또는 분기 메카니즘이 필요 없기 때문이다. 더욱이, 전술한 타게 어드레스 베이스 파라미터 및 변위 필드의 크기 때문에 분기 명령의 유효 제어 필드가 더 양호하게 사용될 수 있다(이는 어드레스 계산이 필요하지 않기 때문이다). 본 실시예에서, 적어도 4 종류의 PT 명령이 지원될 수 있다:
PTA offset, target: PC에 변위 필드에 기초한 상수를 더함으로써 PC에 대한 타겟 어드레스를 준비한다.
PTB offset, target: 전술한 바와 같이, 다른 상수가 사용되어 이 명령이 모드 B 타겟 명령으로의 분기에 사용될 수 있는 것을 제외한다.
PTABS address, register: 지정 IAR에 저장된 값을 사용하여 타겟 어드레스를 준비한다.
PTREL offset, target: PC에 지정 IAR 중 하나에 저장된 값을 더함으로써 타겟 어드레스를 준비한다.
다른 유형들도 당업자에게 명백하며, PT 명령(410)에 사용되는 코딩 필드의 유효성 및 다양성에 기초하여 쉽게 구현될 수 있다. 또한, 전술한 바와 같이, 분기 제어 명령은 또한 그 자신의 독립적인 예측 비트를 포함할 수 있는데, 이 파라미터는 실제로 후술하는 본 발명의 분기 명령에 고려되는 것과 아주 다른 정보를 고려한다. 이것의 의미는 이 파라미터가 종래 기술에서는 가능하지 않을 것이라고 믿어지는 독립적인 예측 레벨을 더한다는 점에서 아주 중요하다. 이것은 전술한 바와 같이 PT 힌트 비트가 대개 컴퓨팅 시스템(100)에서 추측적으로 프리페치 동작을 예측/실행하는 데 사용되고 특정 분기 타겟 명령을 필요로 할 수 있는 다수의 잠재적인 분기 동작의 누적 가능성을 고려한다는 사실에 기인한다. 이것은 분기 예측 힌트와 매우 다른데, 이것은 분기 예측 힌트가 명령 스트림의 후속 흐름을 구별(발생 여부)하는 데에만 사용되기 때문이다. PT 힌트 비트를 결정하는 데 있어서, 다수의 경쟁적인 고려가 이용될 수 있다. 예컨대, 후술하는 바와 같이, 다수의 분기 명령이 단일 PT 명령과 관련되는 것이 가능하다. 따라서, PT 힌트 비트는 잠재적인 분기 중 어느 하나가 타겟 명령을 포함하거나 요구할 수 있는 가능성을 고려해야 한다. 따라서, 하이 레벨 관점에서, PT 힌트는 기본적으로 IART(115)에 특정 타겟 명령이 필요할 가능성이 있는지를 예측한다. 본 출원인의 경험으로는, 이러한 분기 확률의 누적 계산은 더 정확한 타겟 명령 예측 프로세스를 제공하여, 더 적당한 명령이 미리 적재되어 필요시 실행될 준비가 되는 것을 보장한다. 예컨대, 컴파일러 분석으로부터 3개의 개별 분기가 동일한 타겟 어드레스를 사용할 것으로 결정하고, 이들 각각이 약 40%(3/5)의 발생 기회를 갖는 경우, 분기 힌트 비트는 이들 분기 중 어느 것도 취하지 않도록 설정되는 것이 가능하다. 그러나, 전반적으로, 이들 중 적어도 하나가 타겟 어드레스를 사용할 확률은 98/125 또는 약 80%라는 것을 알 수 있다. 따라서, 성능의 관점에서, IART(115)에 타겟 명령을 사전 적재하는 것이 매우 이로운데, 이는 타겟 명령이 프로그램 실행시에 어느 때인가 사용될 가능성이 매우 높고 그렇게 함으로써 많은 페널티 싸이클이 제거될 수 있기 때문이다.
통상의 프로그램에서 PT 명령의 사용의 대표적인 배치예가 도 4b에 나타나 있는데, 여기에는 2 개의 PT 명령이 2개의 다른 루프(BEGIN_LOOP 및 INC)의 정면에 배치되어 있다. 전술한 이유 때문에, 이들 명령은 이들 대응 분기 명령의 앞에 배치된다. 도 4b에 도시된 바와 같이, 가장 실질적인 이득은 PT 명령이 내부 루프 밖에 배치될 때 실현된다. 바람직하게는 이들 분기 제어 명령은 타겟 어드레스 레지스터를 판독하는 분기 명령으로부터 동적 명령 스트림이 최대로 독립되도록 배열된다. 또한, 이것은 명령의 흐름이 페널티 없이 변경 또는 유지되도록 배치하기 위한 최대 시간량을 분기 메카니즘에 제공한다. 이들 명령의 배치는 루프/블록-불변 코드 모션, 공통 서브 익스프레션 제거, 레지스터 할당 및 명령 스케쥴링과 같은 표준 컴파일러 기술을 사용하여 최적화될 수 있다. 하나 이상의 분기로부터의 PT 명령이 동일한 타겟 명령을 참조하는 경우, PT 명령은 병합될 수 있으며, 전술한 바와 같이, PT 힌트 비트는 예측 명령 흐름 조건을 더 양호하게 반영하도록 다수의 분기에 대한 예측 시나리오의 평가에 따라 조정될 수 있다. 실제적인 측면에서 이러한 최적화에 대한 유일한 제한은 프로그램 내의 호출 함수의 크기, 사용 어드레스 레지스터의 수 및 임의의 데이타/제어 종속성과 같은 특정 환경 제한에 기초한다.
이제 도 4b에서 개선된 분기 명령(420)의 특정 포맷을 검사하면, 다음 필드를 포함하는 것을 알 수 있다:
(1) Opcode(6 비트): 이 필드는 프리 디코딩 프로세스 동안 컴퓨팅 시스템(100)에 독특하게 명령을 식별하는 데 사용된다.
(2) Rm/Pm(6 비트): 이 필드는 GPR(135) 내의 레지스터 중 하나 또는 레지스터 술어(즉, 참/거짓과 같은 논리 조건)를 지정하는 데 사용된다.
(3) Rn/Pn(6 비트): 이 필드는 GPR(135) 내의 레지스터 중 다른 하나 또는 제2 레지스터 술어를 지정하는 데 사용된다.
(4) Res/imm(5 비트): 이들은 예약된다.
(5) L(1 비트): PT 명령의 예측 비트
(6) IAR(3 비트): IAR.A 레지스터 중 어느 것에 계산된 타겟 어드레스가 적재될 것인지를 지정한다.
(7) Extension(3 비트): 분기 동작을 조절하는 논리 동작, 또는 BEQ, BGE, JMP, BSR 등의 분기의 논리 유형을 지정하는데, 이들 동작은 전술한 바와 같이 2개의 독립 레지스터의 산술 또는 술어 조건에도 기초할 수 있다.
(8) Res(2 비트): 이들은 미래의 기능을 위해 예약된다.
PT 명령(410)에 대해, 본 실시예는 전술한 바와 같이 컴퓨팅 시스템(100)에 사용하기에 적당하지만, 특정 설계 선택, 시스템 구조 등에 따라 다양한 변형이 가능하며, 이러한 변형은 본 가르침의 영역에 포함되는 것이 의도된다는 것은 명백하다.
분기 명령(420)의 몇몇 추가 특징은 컴퓨팅 시스템(100)에 사용되는 분기 제어 논리의 유연성 및 효율적인 이용을 더 향상시킨다. 먼저, 타겟 어드레스는 미리 계산되므로, 현재 유효한 파라미터 필드는 일반적으로 "비교-폴드"로서 설명될 수 있는 동작을 실행하는 데 사용될 수 있다. 이것은 프로그램에서 공통으로 사용되는 비교 명령이 이제 분기 명령 자체로 폴드(병합)될 수 있다는 것을 의미한다. 물론, 이것은 전체 명령을 제거함으로써 상당한 시간을 절약하며 전체 코드 크기를 크게 줄일 수 있다. Rm 및 Rn 필드는 다음을 포함하는 많은 다른 유형의 분기 명령 중 하나를 구현하기 위하여 분기 확장 필드에 지정된 분기 유형에 의해 오퍼랜드로서 사용된다:
BEQ source1, source2, target Branch if equal (64 bit compare)
BNE source1, source1, target Branch if not equal (64 bit compare)
BGT source1, source1, target Branch if greater (64 bit signed)
BGE source1, source2, target Branch if greater than or equal (64 bit signed)
BGTU source1, source2, target Branch if greater than (64 bit unsigned)
BGEU source1, source2, target Branch if greater than or equal (64 bit unsigned)
전술한 바와 같이, 분기 명령(420)에 사용할 수 있는 여유 공간은 분기 평가시 범용 레지스터 비교 동작을 이용하기 위해 레지스터를 코딩하는 능력을 포함한 이로운 사용에 배당된다. 이것은 일반적으로 종래 기술에서는 가능하지 않은데, 레지스터 사양이 절차를 유용하게 하기 위해서는 적어도 5 비트(Rm, Rn 각각에 대해)를 필요로 하며, 이것은 종래의 분기 명령에서 유효하지 않다. 더욱이, 유효한 추가 연산 코드 공간으로 인하여 조건부 분기가 코딩되어 오퍼랜드(또는 레지스터) 술어 평가에 기초하여 몇몇 응용에서 실행될 수 있다. 즉, 양 술어(Pm, Pn)(이것은 레지스터 값일 수 있다)가 논리적으로 참(또는 거짓)으로 평가되거나 하나 또는 다른 하나가 참 조건을 갖는 경우 둥에만 분기가 발생할 수 있다. 다수의 술어 오퍼랜드를 비교 동작의 일부로서 평가하는 다른 유형의 분기 명령을 구성하기 위한 추가적인 방법은 본 가르침으로부터 당업자에게 명백할 것이다.
많은 분기 동작은 분기 파라미터와 0과의 비교를 필요로 한다. 레지스터(63)가 항상 0의 값을 갖도록 할당된 경우, 이 동작은 오퍼랜드의 하나로서 R63 세트를 가진 단일 분기 명령으로 대체될 수 있다. 이것은 명령의 포맷팅을 크게 단순화하며 실행 속도를 향상시킨다. 다른 유형의 분기 명령도 당업자에게 자명하며, PT 명령(410)에 사용되는 코딩 필드의 유효성 및 다양성에 기초하여 쉽게 구현될 수 있다. 예컨대, 본 발명에서 구현될 수 있는 추가적인 조건부 분기 명령은 레지스터에서 지정되지 않은 상수와 레지스터 값을 비교하는 것을 포함한다.
분기 조건이 만족된 경우, 레지스터 오퍼랜드를 사용한 논리 동작에 기초하여 분기 타겟이 IAR에 의해 지정된 내용을 사용하여 페치된다. 마이크로 구조의 잠재 분기 페널티를 더 감소시키기 위하여, 본 발명의 조건부 분기 명령은 코드 전반에 순차적으로 배열됨으로써 실패(즉 명령의 흐름의 재지정이 안됨)를 지원하여 분기 페널티를 방지한다.
전술한 바와 같이, 조건부 분기 명령(420)은 예측 비트(L)를 포함한다. 이 비트는 컴퓨팅 시스템(100)이 분기 조건이 해결되기 전에도 예측 경로의 실행을 시작해야 하는지를 결정하는 데 도움을 준다. 표준 컴파일러 발견적 방법 또는 분기 프로파일 정보를 분석하는 것에 기초하여 이 비트를 설정하기 위해 다양한 공지 기술이 사용될 수 있다.
또한, 전술한 바와 같이, 프로그램의 실행 전에 IART(115)에 하나 이상의 타겟 명령이 사전 적재되어 분기 속도를 향상시키고 전체 프로그램 성능을 향상시킬 수 있다. 이것은 코드 스캐닝(분기 명령 식별을 위해) 또는 루프와 같은 프로그램의 일부를 실행하기 전에 분기 타겟 어드레스, 타겟 명령 등을 IAR.T(115) 및 IAR.A(140)에 직접 식별 및 저장할 수 있는 구성 명령을 통한 명백한 레지스터 적재를 포함하는 다양한 기술에 의해 수행될 수 있다. 즉, 심지어 PT 명령의 발생에 앞서, 컴퓨팅 시스템(100)의 구조(예상 분기 타겟 어드레스 포함)를 셋업하는 구성 명령이 실행되어 하나 이상의 코드 부분의 실행을 위해 준비될 수 있다. 어느 분기 어드레스/명령이 적재될 것인지에 대한 결정은 전문적인 프로그램 설계자에 의한 고려의 수에 기초할 수 있으며, 다양한 시스템 특징 때문에, 정확한 방법은 응용에 따라 변할 것으로 예상된다.
도 4d에 도시된 바와 같이, 무조건부 분기 명령(430)은 다소 다른 포맷을 가지며, 포맷 BLINK Target, Link를 가진 분기 및 링크(BLINK) 명령으로 고려될 수 있다. 이 명령에서 필드들은 아래와 같이 정의된다:
(1) Opcode (6 비트): 이 필드는 컴퓨팅 시스템(100)에 독특하게 명령을 식별하기 위하여 프리 디코딩 프로세스 동안에 사용된다.
(2) r (4 비트), 7 비트 및 4 비트: 이 필드는 예약된다.
(3) b (3 비트): 이 필드는 타겟 어드레스(IAR) 레지스터 중 하나를 타겟 어드레스 소스로서 지정한다.
(4) d (6 비트): 이 필드는 분기를 따르는 명령의 어드레스로서 사용될 GPR(135) 내의 레지스터 중 하나를 지정하는 데 사용된다.
전술한 포맷은 디코딩이 훨씬 더 빠르게 수행될 수 있기 때문에 항상 참인 조건부 분기에 대해 바람직하다. BLINK는 후속 명령의 타겟 어드레스를 GPR(135) 내의 목적 레지스터(Rd)에 기록한다. 이것은 타겟 명령 시퀀스가 제어를 유발한 명령 시퀀스로 제어를 되돌리는 것을 허용하기 때문에 링크 메카니즘으로 고려될 수 있다. 따라서, 이것은 표준 호출 및 복귀 메카니즘을 구현하는 데 사용될 수 있다.
링크 없이 무조건부 분기 명령(430)을 구현하기 위하여, 특수 레지스터가 GPR(135)에 전용으로 사용되어 BLINK Target, R63으로서 포맷된 분기 명령이 목적 레지스터에 기록하지 않고 제어를 전달할 수 있다.
또한, 본 명세서로부터 분기 제어/분기 명령의 많은 다른 변형 및 조합이 가능하다는 것을 이해해야 한다. 사실, 다른 파이프라인 구조를 사용하는 다른 프로세서에서는 이러한 명령의 구조/포맷은 사용되는 특정 마이크로 구조를 최상으로 맞추기 위하여 약간 조정될 필요가 있다. 그럼에도, 이러한 응용이 설명된 원리 및 특징을 이용하는 경우, 분기 동작 성능 관점에서 매우 이로울 것이 예상된다.
다른 명령 세트를 위한 추가 동작 모드
본 발명의 또 하나의 특징은 컴퓨팅 시스템(100)이 몇몇 경우에 2개의 개별 명령 세트를 지원하는 데 사용될 수 있다는 것인데, 이 명령 세트들은 설명의 편의를 위해 세트 A 및 세트 B로 참조된다. 이 경우, 프로세서는 2개의 개별 동작 모드(즉, 모드 A 및 모드 B)로 실행된다. 하나 이상의 명령 세트의 사용은 프로그래밍 최적화를 지원하는 몇몇 응용에서(즉, 프로그램 성능이 하나의 모드 또는 다른 모드에서 실질적으로 우수한 것으로 결정되는 경우), 또는 상속 소프트웨어(즉, 더 많은 기본 명령만을 포함하는 프로그램)를 지원하는 것이 바람직한 경우에 도움이 된다.
본 바람직한 실시예에서, 컴퓨팅 시스템(100)은 후술하는 바와 같이 32 비트 명령인 모드 A 명령을 실행하는 데 최적화되어 있지만, 전술한 바와 같이 16 비트 명령으로 구성된 명령 세트 B를 지원할 수도 있다. 모드 A 동작은 전체 구조, 타이밍, 버스 프로토콜, 데이터 경로, 특정 회로 구현 등이 세트 A의 명령을 지원하도록 구성되어 있다는 관점에서 최적화되어 있다. 세트 B 명령을 실행하기 위하여 다른 세트 A 명령을 사용하여 이들을 에뮬레이션하여 하드웨어 및 프로그래밍 복잡성이 제거될 수 있도록 하는 것이 바람직하다.
예컨대, 파이프라인 안으로 명령이 들어와 IB(110)에 저장될 때, 본 컴퓨팅 시스템(100)은 세트 A 또는 세트 B로부터의 명령과 같이 그 상태에 관하여 구별을 하지 않는다. 이러한 구별은 예컨대 디코딩 또는 프리 디코딩 동작 동안에 디코더(125)에 의해 만들어진다. 세트 B로부터의 명령을 만났을 때, 이 명령은 개별 파이프라인 스테이지(도시되지 않음)로 전송되어 (다양한 종래 기술을 사용하여) 하나 이상의 세트 A 명령으로 변환될 수 있다. 그 다음, 이러한 세트 A 교체 명령이 임의의 다른 세트 A 명령으로서 정상적인 방식으로 실행되도록 파이프라인의 적당한 스테이지에 삽입된다.
그럼에도, 2개의 명령 세트가 동일한 분기 명령 포맷 또는 분기 제어 처리를 갖지 않을 수도 있다. 이 경우, 적어도 컴퓨팅 시스템(100)의 모드 A 동작이 전술한 독립 분기 프로세스, 즉 타겟 어드레스를 미리 계산하고 시스템(100) 내에 버퍼 및 논리를 셋업하는 데 사용되고, 또한 분기 명령 자체에 대한 폴디드 분기 조건/방향 포맷을 포함하는 프로그램 흐름에서 일찍이 제공된 분기 제어 명령과 결합된 분기 명령을 사용하는 것이 바람직하다(도 3b 참조).
이와 달리, 명령 세트 B는 타겟 어드레스를 계산하는 데 개별 분기 제어 명령을 사용하지 않고, 개별 비교 명령을 사용하여 분기 조건을 해결한다. 또한, 모드 B 동작에 사용되는 분기 프로세스는 분기를 따르는 명령을 실행시키는 지연된 분기 명령을 무조건적으로 더한다.
따라서, 본 발명은 전술한 에뮬레이션 방법과 일관되게 모드 A 분기 명령이 뒤따르는 분기 제어 명령에 의해 모드 B 분기 명령을 에뮬레이션한다. 이 경우, 배면 대 배면 PT 및 분기 명령이 파이프라인 버블을 유발하기 때문에 모드 B 분기에 대해 1 싸이클의 페널티가 불가결하게 존재하게 된다. 모드 B 지원 동작을 위한 지원이 대부분의 응용에서 큰 것으로 예상되지 않기 때문에, 이것은 사실상 매우 수용할만한 결과이다. 모드 B 명령을 디코딩하는 데 필요한 여분의 파이프라인 스테이지로 인하여, 추가 버블이 발생하는 것이 가능하다. 모드 B 명령의 처리를 간단히 하기 위하여, 분기 예측이 수행되지 않는 것도 바람직하다. 즉, 모든 조건부 분기가 취해지지 않는 것으로 예측된다. 이것은 이 경우에 분기 제어 명령이 DEC(125)에 의해 생성되고(컴파일러/소프트웨어 결정에 의해서가 아니라), 따라서 관련 힌트 비트가 신뢰성 있게 생성될 수 없다는 사실의 결과이다. 그러나, 일부 환경에서(분기 명령에 의해 취해진 경로에 기초하여) 추가적인 모니터링 논리(도시되지 않음)에 의해 힌트 비트가 조정될 수 있으며, 모드 A 명령 기반의 프로그램을 위해 만들어진 컴파일러 결정의 거동을 유사하게 모방할 수 있는 것도 가능하다.
모드 B 지연 분기 명령을 지원하기 위하여, 모드 A의 실패 명령이 무조건적으로 실행된다. 실제로 취해진 분기에 대해, BRCTL(150)은 FECTL(101)이 새로운 명령 페치를 시작하기 위해 분기 타겟 어드레스를 받아 드릴 수 있을 때까지 분기 타겟 어드레스를 유지한다. 이것은 모드 B 지연 슬롯 명령이 IC(105) 내의 다른 캐시 라인에 있으며, 따라서 IB(110) 내의 정확한 시간 및 위치에 반드시 적재되는 것은 아니기 때문이다. 정상적으로, BRCTL(150)은 분기 방향을 결정한 다음, 대기 없이 페치 경로를 재지정한다. 그러나, 분기가 지연된 경우에, 지연 슬롯 명령이 캐시 액세스를 놓친 경우에는 명령이 페치되기 전까지 프로그램 흐름의 방향이 변경될 수 없다.
본원 발명은 프로그램 실행 성능을 최적화하기 위해 개선된 분기 제어 및 분기 명령을 사용하는 프로세서를 제공한다. 따라서, 유연한 명령 파라미터 필드가 특정 컴퓨팅 환경에 가장 적합한 다양한 새로운 분기 제어 및 분기 명령 구현을 허용하고, 이들 명령들이 또한 프로그램 실행에 앞서 타겟 명령 버퍼의 적재를 최적화하는 데 사용되는 개별 예측 비트를 가짐으로써 프로세서 내의 파이프라인이 실제 프로그램 실행 동안 우수한 성능을 갖도록 한다.
본 발명을 구현하는 전술한 실시예들은 단지 예로서 제공되는 것이며, 어느 면에서도 본 발명을 제한하는 것으로 의도되지 않는다. 본 명세서의 가르침에 기초하여 다양한 변형이 가능하다는 것은 당업자에게 자명하다. 따라서, 이러한 모든 변형 및 수정은 첨부된 청구범위에 정의된 바와 같이 본 발명의 영역 및 사상 안에 포함되는 것으로 의도된다.

Claims (43)

  1. 명령을 디코딩하는 명령 디코더;
    각각이 하나 이상의 상기 디코딩된 명령에 포함된 어드레스 필드에 기초하여 계산되는 어드레스를 저장하는 다수의 어드레스 레지스터; 및
    각각이 상기 다수의 어드레스 레지스터 중 하나에 유지되는 대응 어드레스에 관련된 타겟 명령을 저장하는 다수의 명령 레지스터
    를 포함하는 것을 특징으로 하는 마이크로프로세서.
  2. 제1항에 있어서, 상기 명령은 상기 마이크로프로세서 분기 동작을 위한 어드레스를 계산하도록 하는 것을 특징으로 하는 마이크로프로세서.
  3. 제1항에 있어서, 상기 다수의 어드레스 레지스터의 수는 상기 다수의 명령 레지스터의 수보다 큰 것을 특징으로 하는 마이크로프로세서.
  4. 제1항에 있어서, 다수의 제2 어드레스 레지스터를 더 포함하고, 상기 제2 어드레스들 각각은 상기 다수의 어드레스 레지스터 중 하나에 유지되는 어드레스의 증분 버젼을 나타내는 어드레스를 저장할 수 있는 것을 특징으로 하는 마이크로프로세서.
  5. 제1항에 있어서, 상기 명령 레지스터에 유지되는 타겟 명령이 유효한지 무효한지를 나타내기 위한 유효성 필드가 사용되는 것을 특징으로 하는 마이크로프로세서.
  6. 제1항에 있어서, 상기 유효성 필드는 힌트 버퍼에 저장되는 엔트리의 제1 필드이고, 상기 힌트 버퍼는 상기 다수의 명령 레지스터로부터 분리되어 있으며, 상기 힌트 버퍼 엔트리는 또한 상기 명령 레지스터 내의 명령 엔트리에 따라 인덱스되어, 상기 타겟 명령의 유효성이 상기 힌트 버퍼를 검사함으로서 결정될 수 있는 것을 특징으로 하는 마이크로프로세서.
  7. 제6항에 있어서, 상기 힌트 버퍼는 상기 타겟 명령이 실행될 가능성이 있는지에 관한 예측을 지정하는 힌트 필드를 더 포함하고, 상기 다수의 명령 레지스터는 상기 유효성 필드 및 힌트 필드의 내용에 기초하여 제어되는 것을 특징으로 하는 마이크로프로세서.
  8. 컴퓨팅 시스템에 사용되는 분기 타겟 명령 메모리에 있어서,
    각각이 상기 컴퓨팅 시스템에 의해 실행될 수 있는 프로그램 내의 분기 명령의 타겟 명령을 구성하는 분기 타겟 명령을 저장하는 다수의 타겟 명령 레지스터를 포함하고,
    상기 다수의 타겟 명령 레지스터는 무작위로 액세스될 수 있어, 상기 분기 타겟 명령 중 어느 하나가 상기 분기 타겟 명령에 관련된 타겟 명령 어드레스에 따라 상기 컴퓨팅 시스템 내의 디코더 회로에 적재(load)될 수 있으며,
    상기 메모리는 하나 이상의 상기 타겟 명령 레지스터에 상기 프로그램의 대응 분기 부분이 실행되기 전에 분기 타겟 명령이 적재될 수 있도록 구성된
    것을 특징으로 하는 것을 특징으로 하는 분기 타겟 명령 메모리.
  9. 제8항에 있어서, 상기 메모리에는 상기 프로그램의 명령 스트림에서 분기 명령이 더 늦게 뒤따른다는 것을 나타내는 상기 디코딩 회로의 결과에 따라 분기 타겟 명령이 더 적재될 수 있는 것을 특징으로 하는 분기 타겟 명령 메모리.
  10. 제8항에 있어서, 상기 메모리에는 상기 프로그램의 명령 스트림이 실행되고 있는 동안 추론적으로 분기 타겟 명령이 더 적재될 수 있는 것을 특징으로 하는 분기 타겟 명령 메모리.
  11. 제8항에 있어서, 하나 이상의 상기 타겟 명령 레지스터에는 상기 분기 명령 각각이 상기 프로그램에서 실행될 확률의 분석에 기초하여 미리 적재되는 것을 특징으로 하는 분기 타겟 명령 메모리.
  12. 제8항에 있어서, 상기 타겟 명령 레지스터는 분기 명령을 위한 타겟 명령으로서 2개의 순차 명령을 저장하는 것을 특징으로 하는 분기 타겟 명령 메모리.
  13. 컴퓨팅 시스템에서 사용되는 분기 타겟 명령 메모리에 있어서,
    각각이 상기 컴퓨팅 시스템에 의해 실행될 수 있는 프로그램 내의 분기 명령의 타겟 명령을 구성하는 분기 타겟 명령을 저장하는 다수의 타겟 명령 레지스터를 포함하고,
    상기 다수의 타겟 명령 레지스터는 무작위로 액세스될 수 있어, 상기 분기 타겟 명령 중 어느 하나가 상기 분기 타겟 명령에 관련된 타겟 명령 어드레스에 따라 상기 프로세서 내의 디코더 회로에 적재될 수 있으며,
    상기 메모리는 상기 프로그램의 대응하는 분기 명령이 상기 컴퓨팅 시스템에 의해 실행되기 전에 분기 타겟 명령이 추론적으로 적재될 수 있도록 구성된
    것을 특징으로 하는 것을 특징으로 하는 분기 타겟 명령 메모리.
  14. 제13항에 있어서, 상기 메모리에는 분기 명령이 상기 프로그램의 명령 스트림에서 더 늦게 뒤따른다는 것을 나타내는 상기 디코딩 회로의 결과에 따라 분기 타겟 명령이 적재될 수 있는 것을 특징으로 하는 분기 타겟 명령 메모리.
  15. 제13항에 있어서, 상기 추론적인 적재는, 타겟 어드레스 엔트리가 분기 타겟 명령이 상기 컴퓨팅 시스템에 의한 실행을 위해 요구될 가능성이 있는지를 결정하기 위하여 개별 분기 타겟 어드레스 메모리 내의 타겟 어드레스 엔트리를 평가하는 것에 기초하는 것을 특징으로 하는 분기 타겟 명령 메모리.
  16. 제15항에 있어서, 상기 추론적인 적재는 또한 상기 개별 분기 타겟 어드레스 메모리 내의 상기 타겟 어드레스 엔트리의 우선 순위를 평가하는 것에 기초함으로써, 더 높은 우선 순위의 타겟 어드레스 엔트리가 더 낮은 우선 순위 타겟 어드레스 엔트리에 앞서 추론적인 적재에 사용되는 것을 특징으로 하는 분기 타겟 명령 메모리.
  17. 제13항에 있어서, 상기 프로세서는 분기 명령이 실행되고 있지 않은 시간 동안 사전 적재를 실행하여, 상기 분기 명령을 대한 타겟 명령이 상기 분기 명령이 적재되기 전에 사전 적재될 수 있는 것을 특징으로 하는 분기 타겟 명령 메모리.
  18. 컴퓨팅 시스템에서 명령 캐시에서 파이프라인으로의 명령의 적재를 제어하는 회로에 있어서,
    상기 파이프라인에서 적재용으로 이용가능한 분기 타겟 명령이 유효하지 않은지를 결정하기 위한 모니터링 수단;
    무효 분기 타겟 명령이 발견된 때 교체 분기 타겟 명령을 선택하기 위한 선택 수단 -상기 교체 분기 명령은 다수의 잠재적인 분기 타겟 어드레스를 순위화함으로써 선택됨-; 및
    상기 명령 캐시로 하여금 상기 파이프라인에서의 실행을 위한 상기 교체 분기 타겟 명령을 적재시킴으로써 상기 무효 분기 타겟 명령을 상기 교체 분기 타겟 명령으로 교체하는 적재 수단
    을 포함하는 것을 특징으로 하는 회로.
  19. 제18항에 있어서, 상기 모니터링 수단은 N 엔트리 분기 타겟 명령 버퍼에 저장된 N 개별 분기 타겟 명령의 유효성 상태에 따라 적재되는 N 비트 레지스터를 포함하여, N 비트 레지스터의 각 비트가 상기 분기 타겟 명령 버퍼 내의 대응 엔트리가 유효한지의 여부를 식별하도록 하는 것을 특징으로 하는 회로.
  20. 제18항에 있어서, 상기 적재 수단은 N〉8인 경우 상기 교체 분기 타겟 명령을 N 엔트리 분기 타겟 명령 버퍼에 적재하는 것을 특징으로 하는 회로.
  21. 제18항에 있어서, 상기 선택 수단은 사전 적재 레지스터를 포함하고, 상기 사전 적재 레지스터는 상기 잠재적인 분기 타겟 어드레스를 유지하는 임의의 저장 위치가 교체 분기 타겟 명령을 적재하는 데 사용될 수 있는지를 식별하는 비트를 포함하는 것을 특징으로 하는 회로.
  22. 제21항에 있어서, 상기 선택 수단은 분기 타겟 명령이 필요하게 될 가능성이 있는지를 식별하는 비트를 포함하는 분기 명령 힌트 레지스터를 포함하는 것을 특징으로 하는 회로.
  23. 제18항에 있어서, 상기 순위화는 각각의 잠재적인 분기 타겟 어드레스에 대한 저장 위치 식별을 검사함으로써 수행되고, 이에 의해 분기 타겟 어드레스가 관련 저장 위치에 따라 우선 순위화될 수 있는 것을 특징으로 하는 회로.
  24. 제18항에 있어서, 상기 적재 수단은 캐시 액세스 요청이 계류중인 경우 상기 교체 분기 타겟 명령의 적재를 중지하는 것을 특징으로 하는 회로.
  25. 제18항에 있어서, 상기 적재 수단은 상기 파이프라인 내의 명령 버퍼가 선정된 명령 레벨 임계치 이하인 경우에 상기 교체 분기 타겟 명령의 적재를 중지시키는 것을 특징으로 하는 회로.
  26. 제18항에 있어서, 상기 교체 분기 타겟 명령은 상기 분기 타겟 명령을 요구하는 분기 명령의 제1 실행에 앞서 추론적으로 적재되는 것을 특징으로 하는 회로.
  27. 제18항에 있어서, 상기 적재 수단은 분기 명령이 파이프라인에서 실제로 디코딩될 때 분기 타겟 명령을 적재하기 위한 캐시 액세스 요청을 발생시키는 것을 특징으로 하는 회로.
  28. 제18항에 있어서, 상기 적재 수단과 결합된 타겟 어드레스 버퍼를 더 포함하고, 상기 타겟 어드레스 버퍼에는 상기 교체 타겟 명령을 따르는 명령의 어드레스에 대응하는 증분된 타겟 어드레스가 적재되어, 상기 교체 타겟 명령이 상기 파이프라인에 의해 실제로 후에 실행되는 경우에 상기 증분된 타겟 어드레스가 캐시 액세스에 사용될 수 있는 것을 특징으로 하는 회로.
  29. 컴퓨팅 시스템에서 파이프라인으로의 명령의 공급을 유지하는 방법에 있어서,
    (a) 상기 파이프라인에서 실행을 위해 이미 이용할 수 있는 임의의 분기 타겟 명령의 상태 조건을 모니터링하는 단계;
    (b) 다수의 잠재적인 분기 타겟 어드레스를 순위화하는 단계;
    (c) 상기 상태 조건 및 상기 순위화에 기초하여 새로운 분기 타겟 명령을 선택하는 단계; 및
    (d) 상기 잠재적인 분기 타겟 어드레스의 상기 순위화에 기초하여 가장 높은 순위의 새로운 분기 타겟 명령을 적재함으로써 상기 가장 높은 순위의 새로운 분기 타겟 명령이 상기 파이프라인 내의 적재용으로 필요한 때에 이용될 수 있도록 하는 단계
    를 포함하는 것을 특징으로 하는 방법.
  30. 제29항에 있어서, 상기 새로운 분기 타겟 명령은, 명령 캐시가 상기 파이프라인에서의 실행을 위해 상기 가장 높은 순위의 새로운 분기 타겟 명령을 적재하도록 하여 무효 상태를 가진 분기 타겟 명령을 대체함으로써 적재되는 것을 특징으로 하는 방법.
  31. 제29항에 있어서, 상기 선택 단계는 상기 잠재적인 분기 타겟 어드레스를 유지하는 임의의 저장 위치가 새로운 분기 타겟 명령을 적재하기에 적합한지를 식별하는 것을 특징으로 하는 방법.
  32. 제31항에 있어서, 상기 선택 단계는 또한 상기 새로운 분기 타겟 명령이 요구될 것인지에 관한 분기 예측 힌트를 검사하는 것을 특징으로 하는 방법.
  33. 제29항에 있어서, 상기 순위화는 각각의 잠재 분기 타겟 어드레스를 대한 저장 위치 식별을 검사함으로써 수행되어, 분기 타겟 어드레스가 관련 저장 위치에 의해 우선 순위화 될 수 있는 것을 특징으로 하는 방법.
  34. 제29항에 있어서, 상기 적재 단계는 파이프라인 내의 유효 명령 공급이 선정된 명령 레벨 임계치 이하인 경우에는 수행되지 않는 것을 특징으로 하는 방법.
  35. 제29항에 있어서, 상기 새로운 분기 타겟 명령은 상기 새로운 분기 타겟 명령을 요구하는 분기 명령의 제1 실행에 앞서 추론적으로 적재되는 것을 특징으로 하는 방법.
  36. 제29항에 있어서, (e) 상기 새로운 분기 타겟 명령을 위한 분기 타겟 어드레스를 증분하여 저장하는 단계를 더 포함하여, 상기 새로운 타겟 명령이 상기 파이프라인에 의해 후에 실제로 실행되는 경우에 상기 증분된 분기 타겟 어드레스가 캐시 액세스를 위해 사용될 수 있는 것을 특징으로 하는 방법.
  37. 프로세서에 사용되는 명령 캐시, 분기 타겟 명령 버퍼 및 분기 타겟 어드레스 버퍼 사이의 동작을 페칭하는 데 조력하는 분기 제어 메모리에 있어서,
    상기 분기 타겟 명령 버퍼 내의 타겟 명령이 유효한지를 식별하기 위한 제1 필드를 구비한 제1 버퍼;
    상기 분기 타겟 어드레스 버퍼 내의 상기 분기 타겟 어드레스가 분기 타겟 명령을 사전 적재하는데 사용가능한지의 여부를 식별하기 위한 제2 필드를 구비한 제2 버퍼; 및
    상기 분기 타겟 어드레스 버퍼 내의 상기 분기 타겟 어드레스가 상기 프로세서에 의해 실행되는 분기 명령에 의해 사용될 것인지를 식별하기 위한 제3 필드를 구비한 제3 버퍼
    를 포함하며,
    상기 분기 타겟 명령 버퍼 내의 분기 타겟 명령이 유효한지, 상기 분기 타겟 어드레스가 사용될 것인지, 및 상기 분기 타겟 어드레스가 사전 적재를 위해 사용될 것인지에 대한 상기 프로세서의 평가에 응답하여, 상기 프로세서는 상기 분기 타겟 어드레스와 관련된 어드레스를 가진 하나 이상의 명령을 상기 명령 캐시에서 상기 분기 타겟 명령 버퍼로 적재하는 것을 특징으로 하는 분기 제어 메모리.
  38. 제37항에 있어서, 상기 프로세서는 상기 타겟 명령 메모리에서 무효 명령을 찾기 위하여 상기 제1 버퍼를 주기적으로 모니터링하도록 구성되며, 더 높은 우선 순위 액세스가 존재하지 않는 경우, 상기 프로세서는 상기 명령 캐시로부터 명령을 페치하여 상기 분기 타겟 명령 버퍼에 적재하기에 적합한 것을 특징으로 하는 분기 제어 메모리.
  39. 제37항에 있어서, 상기 제2 버퍼는 다른 분기 타겟 어드레스를 저장하기 위한 다수의 레지스터를 포함하고, 상기 레지스터 각각은 레지스터 번호에 의해 식별되며, 상기 프로세서는 상기 레지스터들이 명령을 사전 적재하는 데 사용되는 방법을 레지스터 번호에 의해 우선 순위화하는 것을 특징으로 하는 분기 제어 메모리.
  40. 제37항에 있어서, 분기 타겟 어드레스가 하나 이상의 명령을 상기 분기 타겟 명령 버퍼에 사전 적재하는 데 사용되는 경우, 상기 제2 필드는 상기 분기 타겟 어드레스가 사전 적재에 이용될 수 없다는 것을 지시하도록 변경되는 것을 특징으로 하는 분기 제어 메모리.
  41. 제37항에 있어서, 상기 프로세서는 상기 제3 필드가 상기 분기 타겟 어드레스가 사용되지 않을 것이라는 것을 지시하는 경우에는 분기 어드레스에 대한 명령을 사전 적재하지 않는 것을 특징으로 하는 분기 제어 메모리.
  42. 제37항에 있어서, 상기 프로세서는 또한 분기 명령이 실행되고 있지 않는 시간 동안에 사전 적재를 수행함으로써, 상기 분기 명령에 대한 타겟 명령이 상기 분기 명령이 적재되기 전에 적재될 수 있는 것을 특징으로 하는 분기 제어 메모리.
  43. 프로세서에 있어서,
    (a) 상기 프로세서에 의해 실행되는 프로그램과 관련된 명령을 저장하기 위한 명령 버퍼 -상기 명령은 [i] 분기 명령에 대한 타겟 어드레스를 계산하는 데 사용되는 어드레스 정보를 위한 필드, 상기 타겟 어드레스를 저장하기 위한 타겟 어드레스 저장 위치를 지정하는 필드, 및 상기 타겟 명령이 실행될 것인지를 나타내기 위한 필드를 포함하는 프로그램 분기 제어 명령; [ii] 프로그램 분기를 위해 무조건적으로 실행되는 타겟 명령을 위한 타겟 어드레스를 포함함으로서 상기 타겟 어드레스 저장 위치를 식별하는 필드를 포함하는 제1 유형의 프로그램 분기 명령; 및 [iii] 제2 유형의 프로그램 분기 명령 -상기 제2 유형의 프로그램 분기 명령은 상기 제2 유형의 프로그램 분기 명령에 의해 지정되는 조건이 만족될 때 실행되는 타겟 명령에 대한 타겟 어드레스를 포함함으로써 상기 타겟 어드레스 저장 위치를 식별하며, 상기 제2 유형의 프로그램 분기 명령은 프로그램 분기가 취해질 것인지를 나타내는 필드를 포함함-을 포함함-;
    (b) 타겟 명령 메모리 -상기 타겟 명령 메모리는 다수의 타겟 명령에 임의로 액세스할 수 있고 이들을 저장할 수 있으며, 상기 타겟 명령들은 대응하는 프로그램 분기의 타겟 명령을 구성하고, 각각이 타겟 어드레스 저장 위치에 저장된 타겟 어드레스를 구비함-; 및
    (c) 명령 디코더 -상기 명령 디코더는 상기 명령을 디코딩하여 상기 명령을 상기 프로세서의 실행부로 전송하기 위하여, 1) 상기 프로그램 분기 제어 명령이 디코딩될 때, 상기 타겟 어드레스가 상기 실행부에 의해 계산되어 상기 타겟 어드레스 저장 위치에 저장되고, 2) 상기 제1 유형의 프로그램 분기 명령이 디코딩될 때, 상기 타겟 어드레스 저장 위치가 타겟 명령을 식별하는 데 사용되며, 상기 타겟 명령이 상기 타겟 명령 메모리에 존재하는 경우, 상기 타겟 명령이 상기 명령 디코더로의 적재를 위해 준비되고, 3) 상기 제2 유형의 프로그램 분기 명령이 디코딩될 때, 상기 타겟 어드레스 저장 위치가 타겟 명령을 식별하는 데 사용되며, 상기 타겟 명령이 상기 타겟 명령 메모리에 존재하고, 상기 프로그램 분기가 취해질 것으로 예측되는 경우, 상기 타겟 명령이 상기 명령 디코더로의 적재를 위해 준비되도록 구성됨-
    를 포함하며,
    상기 타겟 명령이 상기 타겟 명령 메모리에 존재하지 않을 때, 상기 타겟 명령은 상기 타겟 명령 메모리 및 상기 명령 디코더로의 적재를 위해 페치되는 것을 특징으로 하는 프로세서.
KR1020000057686A 1999-10-01 2000-09-30 개선된 분기 제어 명령을 이용하는 프로세서 구조 및동작 KR20010050794A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/410,682 US6772325B1 (en) 1999-10-01 1999-10-01 Processor architecture and operation for exploiting improved branch control instruction
US9/410,682 1999-10-01

Publications (1)

Publication Number Publication Date
KR20010050794A true KR20010050794A (ko) 2001-06-25

Family

ID=23625778

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000057686A KR20010050794A (ko) 1999-10-01 2000-09-30 개선된 분기 제어 명령을 이용하는 프로세서 구조 및동작

Country Status (5)

Country Link
US (2) US6772325B1 (ko)
EP (1) EP1089170A3 (ko)
JP (1) JP2001147807A (ko)
KR (1) KR20010050794A (ko)
TW (1) TW523711B (ko)

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140093721A (ko) * 2011-11-22 2014-07-28 소프트 머신즈, 인크. 마이크로프로세서 가속 코드 최적화기
KR20140094014A (ko) * 2011-11-22 2014-07-29 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US9766893B2 (en) 2011-03-25 2017-09-19 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US9811377B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for executing multithreaded instructions grouped into blocks
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9823930B2 (en) 2013-03-15 2017-11-21 Intel Corporation Method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US9842005B2 (en) 2011-03-25 2017-12-12 Intel Corporation Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9858080B2 (en) 2013-03-15 2018-01-02 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886416B2 (en) 2006-04-12 2018-02-06 Intel Corporation Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9898412B2 (en) 2013-03-15 2018-02-20 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9921845B2 (en) 2011-03-25 2018-03-20 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9934042B2 (en) 2013-03-15 2018-04-03 Intel Corporation Method for dependency broadcasting through a block organized source view data structure
US9940134B2 (en) 2011-05-20 2018-04-10 Intel Corporation Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
US9965281B2 (en) 2006-11-14 2018-05-08 Intel Corporation Cache storing data fetched by address calculating load instruction with label used as associated name for consuming instruction to refer
US10031784B2 (en) 2011-05-20 2018-07-24 Intel Corporation Interconnect system to support the execution of instruction sequences by a plurality of partitionable engines
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US10146548B2 (en) 2013-03-15 2018-12-04 Intel Corporation Method for populating a source view data structure by using register template snapshots
US10162615B2 (en) 2014-12-11 2018-12-25 Samsung Electronics Co., Ltd. Compiler
US10169045B2 (en) 2013-03-15 2019-01-01 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10198266B2 (en) 2013-03-15 2019-02-05 Intel Corporation Method for populating register view data structure by using register template snapshots
US10228949B2 (en) 2010-09-17 2019-03-12 Intel Corporation Single cycle multi-branch prediction including shadow cache for early far branch prediction
KR102268112B1 (ko) * 2019-12-24 2021-06-22 한국항공우주연구원 위성 커맨드 저장 처리 방법 및 위성 커맨드 저장 처리 시스템

Families Citing this family (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7171547B1 (en) * 1999-12-28 2007-01-30 Intel Corporation Method and apparatus to save processor architectural state for later process resumption
US6904057B2 (en) * 2001-05-04 2005-06-07 Slt Logic Llc Method and apparatus for providing multi-protocol, multi-stage, real-time frame classification
US6944168B2 (en) * 2001-05-04 2005-09-13 Slt Logic Llc System and method for providing transformation of multi-protocol packets in a data stream
US6901052B2 (en) * 2001-05-04 2005-05-31 Slt Logic Llc System and method for policing multiple data flows and multi-protocol data flows
US7127593B2 (en) * 2001-06-11 2006-10-24 Broadcom Corporation Conditional execution with multiple destination stores
US7861071B2 (en) * 2001-06-11 2010-12-28 Broadcom Corporation Conditional branch instruction capable of testing a plurality of indicators in a predicate register
US6986025B2 (en) * 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
US20030204705A1 (en) * 2002-04-30 2003-10-30 Oldfield William H. Prediction of branch instructions in a data processing apparatus
TW200602974A (en) 2004-05-19 2006-01-16 Arc Internat Uk Ltd Microprocessor architecture
US7861063B1 (en) * 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a processor
US7774558B2 (en) 2005-08-29 2010-08-10 The Invention Science Fund I, Inc Multiprocessor resource optimization
US7739524B2 (en) * 2005-08-29 2010-06-15 The Invention Science Fund I, Inc Power consumption management
US8516300B2 (en) 2005-08-29 2013-08-20 The Invention Science Fund I, Llc Multi-votage synchronous systems
US7647487B2 (en) * 2005-08-29 2010-01-12 Searete, Llc Instruction-associated processor resource optimization
US7779213B2 (en) 2005-08-29 2010-08-17 The Invention Science Fund I, Inc Optimization of instruction group execution through hardware resource management policies
US7627739B2 (en) * 2005-08-29 2009-12-01 Searete, Llc Optimization of a hardware resource shared by a multiprocessor
US8402257B2 (en) * 2005-08-29 2013-03-19 The Invention Science Fund I, PLLC Alteration of execution of a program in response to an execution-optimization information
US8209524B2 (en) * 2005-08-29 2012-06-26 The Invention Science Fund I, Llc Cross-architecture optimization
US8255745B2 (en) 2005-08-29 2012-08-28 The Invention Science Fund I, Llc Hardware-error tolerant computing
US8214191B2 (en) * 2005-08-29 2012-07-03 The Invention Science Fund I, Llc Cross-architecture execution optimization
US7877584B2 (en) * 2005-08-29 2011-01-25 The Invention Science Fund I, Llc Predictive processor resource management
US7493516B2 (en) * 2005-08-29 2009-02-17 Searete Llc Hardware-error tolerant computing
US8181004B2 (en) 2005-08-29 2012-05-15 The Invention Science Fund I, Llc Selecting a resource management policy for a resource available to a processor
US8423824B2 (en) 2005-08-29 2013-04-16 The Invention Science Fund I, Llc Power sparing synchronous apparatus
US7653834B2 (en) * 2005-08-29 2010-01-26 Searete, Llc Power sparing synchronous apparatus
US7725693B2 (en) * 2005-08-29 2010-05-25 Searete, Llc Execution optimization using a processor resource management policy saved in an association with an instruction group
WO2007049150A2 (en) 2005-09-28 2007-05-03 Arc International (Uk) Limited Architecture for microprocessor-based systems including simd processing unit and associated systems and methods
US7958181B2 (en) * 2006-09-21 2011-06-07 Intel Corporation Method and apparatus for performing logical compare operations
US8959500B2 (en) * 2006-12-11 2015-02-17 Nytell Software LLC Pipelined processor and compiler/scheduler for variable number branch delay slots
EP1953959A1 (en) * 2007-02-01 2008-08-06 British Telecommunications Public Limited Company Data communication
US8218003B2 (en) * 2007-10-05 2012-07-10 Seiko Epson Corporation Optimization strategies for GPU view projection matrix implementation
US20100057427A1 (en) * 2008-09-04 2010-03-04 Anthony Dean Walker Simulated processor execution using branch override
KR101579589B1 (ko) * 2009-02-12 2015-12-22 삼성전자 주식회사 파이프라인 프로세서를 위한 정적 분기 예측 방법과 이를 위한 컴파일 방법
US9104399B2 (en) * 2009-12-23 2015-08-11 International Business Machines Corporation Dual issuing of complex instruction set instructions
US8082467B2 (en) * 2009-12-23 2011-12-20 International Business Machines Corporation Triggering workaround capabilities based on events active in a processor pipeline
US9135005B2 (en) * 2010-01-28 2015-09-15 International Business Machines Corporation History and alignment based cracking for store multiple instructions for optimizing operand store compare penalties
US8495341B2 (en) * 2010-02-17 2013-07-23 International Business Machines Corporation Instruction length based cracking for instruction of variable length storage operands
US8938605B2 (en) * 2010-03-05 2015-01-20 International Business Machines Corporation Instruction cracking based on machine state
US8464030B2 (en) 2010-04-09 2013-06-11 International Business Machines Corporation Instruction cracking and issue shortening based on instruction base fields, index fields, operand fields, and various other instruction text bits
US8645669B2 (en) 2010-05-05 2014-02-04 International Business Machines Corporation Cracking destructively overlapping operands in variable length instructions
US20130159679A1 (en) * 2011-12-20 2013-06-20 James E. McCormick, Jr. Providing Hint Register Storage For A Processor
US8806456B2 (en) * 2012-05-31 2014-08-12 New York University Configuration-preserving preprocessor and configuration-preserving parser
US9135012B2 (en) * 2012-06-14 2015-09-15 International Business Machines Corporation Instruction filtering
US9104532B2 (en) * 2012-12-14 2015-08-11 International Business Machines Corporation Sequential location accesses in an active memory device
JP5863855B2 (ja) * 2014-02-26 2016-02-17 ファナック株式会社 分岐命令を高速に処理するためのインストラクションキャッシュを有するプログラマブルコントローラ
US9588774B2 (en) 2014-03-18 2017-03-07 International Business Machines Corporation Common boot sequence for control utility able to be initialized in multiple architectures
US9916185B2 (en) 2014-03-18 2018-03-13 International Business Machines Corporation Managing processing associated with selected architectural facilities
US9582295B2 (en) 2014-03-18 2017-02-28 International Business Machines Corporation Architectural mode configuration
US9507598B1 (en) 2015-12-15 2016-11-29 International Business Machines Corporation Auxiliary branch prediction with usefulness tracking
US10866805B2 (en) * 2018-01-03 2020-12-15 Arm Limited Speculation barrier instruction
US11003454B2 (en) * 2019-07-17 2021-05-11 Arm Limited Apparatus and method for speculative execution of instructions
US20220197657A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Segmented branch target buffer based on branch instruction type

Family Cites Families (94)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3573854A (en) * 1968-12-04 1971-04-06 Texas Instruments Inc Look-ahead control for operation of program loops
JPS549456B2 (ko) * 1972-07-05 1979-04-24
JPS5927935B2 (ja) * 1980-02-29 1984-07-09 株式会社日立製作所 情報処理装置
US4332010A (en) * 1980-03-17 1982-05-25 International Business Machines Corporation Cache synonym detection and handling mechanism
US4400770A (en) * 1980-11-10 1983-08-23 International Business Machines Corporation Cache synonym detection and handling means
US4680698A (en) * 1982-11-26 1987-07-14 Inmos Limited High density ROM in separate isolation well on single with chip
JPS6051948A (ja) * 1983-08-31 1985-03-23 Hitachi Ltd 情報処理装置
US4868742A (en) * 1984-06-20 1989-09-19 Convex Computer Corporation Input/output bus for system which generates a new header parcel when an interrupted data block transfer between a computer and peripherals is resumed
US4873629A (en) * 1984-06-20 1989-10-10 Convex Computer Corporation Instruction processing unit for computer
US4763245A (en) * 1985-10-30 1988-08-09 International Business Machines Corporation Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table
US4935867A (en) * 1986-03-04 1990-06-19 Advanced Micro Devices, Inc. Signal processor memory management unit with indirect addressing using selectable offsets and modulo values for indexed address calculations
US4797814A (en) * 1986-05-01 1989-01-10 International Business Machines Corporation Variable address mode cache
US4814981A (en) * 1986-09-18 1989-03-21 Digital Equipment Corporation Cache invalidate protocol for digital data processing system
JPH0221342A (ja) * 1987-02-27 1990-01-24 Hitachi Ltd マルチプロセッサシステム及びマルチプロセッサシステムにおける論理キャッシュメモリのアクセス方法
US4926317A (en) * 1987-07-24 1990-05-15 Convex Computer Corporation Hierarchical memory system with logical cache, physical cache, and address translation unit for generating a sequence of physical addresses
US5193205A (en) * 1988-03-01 1993-03-09 Mitsubishi Denki Kabushiki Kaisha Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
US5483518A (en) * 1992-06-17 1996-01-09 Texas Instruments Incorporated Addressable shadow port and protocol for serial bus networks
JPH0666056B2 (ja) * 1989-10-12 1994-08-24 甲府日本電気株式会社 情報処理システム
US5148538A (en) * 1989-10-20 1992-09-15 International Business Machines Corporation Translation look ahead based cache access
JPH03217949A (ja) * 1990-01-23 1991-09-25 Hitachi Ltd 計算機システム
US5163140A (en) * 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
US5452432A (en) * 1990-08-14 1995-09-19 Chips And Technologies, Inc. Partially resettable, segmented DMA counter
JP2984463B2 (ja) * 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
US5423050A (en) * 1991-11-27 1995-06-06 Ncr Corporation Intermodule test across system bus utilizing serial test bus
US5724549A (en) * 1992-04-06 1998-03-03 Cyrix Corporation Cache coherency without bus master arbitration signals
GB2266606B (en) * 1992-04-27 1996-02-14 Intel Corp A microprocessor with an external command mode
US5448576A (en) * 1992-10-29 1995-09-05 Bull Hn Information Systems Inc. Boundary scan architecture extension
JP3524110B2 (ja) * 1992-11-06 2004-05-10 株式会社ルネサステクノロジ マイクロコンピュータシステム
JP3231429B2 (ja) * 1992-11-06 2001-11-19 株式会社日立製作所 中央処理装置と乗算器とを有する半導体集積回路装置
JPH06150023A (ja) * 1992-11-06 1994-05-31 Hitachi Ltd マイクロコンピュータ及びマイクロコンピュータシステム
US5627842A (en) * 1993-01-21 1997-05-06 Digital Equipment Corporation Architecture for system-wide standardized intra-module and inter-module fault testing
JP2731692B2 (ja) * 1993-04-28 1998-03-25 日本電気アイシーマイコンシステム株式会社 デバッグ装置
DE4345028A1 (de) * 1993-05-06 1994-11-10 Hewlett Packard Co Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
JP2596712B2 (ja) * 1993-07-01 1997-04-02 インターナショナル・ビジネス・マシーンズ・コーポレイション 近接した分岐命令を含む命令の実行を管理するシステム及び方法
US5598551A (en) * 1993-07-16 1997-01-28 Unisys Corporation Cache invalidation sequence system utilizing odd and even invalidation queues with shorter invalidation cycles
DE69415600T2 (de) * 1993-07-28 1999-07-15 Koninkl Philips Electronics Nv Mikrokontroller mit hardwaremässiger Fehlerbeseitigungsunterstützung nach dem Boundary-Scanverfahren
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
JP3904244B2 (ja) * 1993-09-17 2007-04-11 株式会社ルネサステクノロジ シングル・チップ・データ処理装置
EP0652516A1 (en) 1993-11-03 1995-05-10 Advanced Micro Devices, Inc. Integrated microprocessor
US5596734A (en) * 1993-12-17 1997-01-21 Intel Corporation Method and apparatus for programming embedded memories of a variety of integrated circuits using the IEEE test access port
US5828825A (en) * 1993-12-22 1998-10-27 Intel Corporation Method and apparatus for pseudo-direct access to embedded memories of a micro-controller integrated circuit via the IEEE test access port
US5434804A (en) * 1993-12-29 1995-07-18 Intel Corporation Method and apparatus for synchronizing a JTAG test control signal to an on-chip clock signal
US5488688A (en) * 1994-03-30 1996-01-30 Motorola, Inc. Data processor with real-time diagnostic capability
JPH07287668A (ja) * 1994-04-19 1995-10-31 Hitachi Ltd データ処理装置
JPH082819A (ja) 1994-06-13 1996-01-09 Murata Mach Ltd 風綿回収装置のダストコレクター
GB9412487D0 (en) * 1994-06-22 1994-08-10 Inmos Ltd A computer system for executing branch instructions
GB9417602D0 (en) * 1994-09-01 1994-10-19 Inmos Ltd A controller for implementing scan testing
US5907867A (en) * 1994-09-09 1999-05-25 Hitachi, Ltd. Translation lookaside buffer supporting multiple page sizes
JP3713312B2 (ja) * 1994-09-09 2005-11-09 株式会社ルネサステクノロジ データ処理装置
JP3672634B2 (ja) * 1994-09-09 2005-07-20 株式会社ルネサステクノロジ データ処理装置
JP3740195B2 (ja) * 1994-09-09 2006-02-01 株式会社ルネサステクノロジ データ処理装置
US5848247A (en) * 1994-09-13 1998-12-08 Hitachi, Ltd. Microprocessor having PC card interface
US5613153A (en) * 1994-10-03 1997-03-18 International Business Machines Corporation Coherency and synchronization mechanisms for I/O channel controllers in a data processing system
US5751621A (en) * 1994-11-17 1998-05-12 Hitachi, Ltd. Multiply-add unit and data processing apparatus using it
TW330265B (en) * 1994-11-22 1998-04-21 Hitachi Ltd Semiconductor apparatus
JP2752592B2 (ja) * 1994-12-28 1998-05-18 日本ヒューレット・パッカード株式会社 マイクロプロセッサ、マイクロプロセッサ−デバッグツール間信号伝送方法及びトレース方法
US5778237A (en) * 1995-01-10 1998-07-07 Hitachi, Ltd. Data processor and single-chip microcomputer with changing clock frequency and operating voltage
US5664197A (en) * 1995-04-21 1997-09-02 Intel Corporation Method and apparatus for handling bus master channel and direct memory access (DMA) channel access requests at an I/O controller
US5867726A (en) * 1995-05-02 1999-02-02 Hitachi, Ltd. Microcomputer
US5570375A (en) * 1995-05-10 1996-10-29 National Science Council Of R.O.C. IEEE Std. 1149.1 boundary scan circuit capable of built-in self-testing
GB9509989D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
GB9509988D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Matrix transposition
US5860127A (en) * 1995-06-01 1999-01-12 Hitachi, Ltd. Cache memory employing dynamically controlled data array start timing and a microcomputer using the same
US5774701A (en) * 1995-07-10 1998-06-30 Hitachi, Ltd. Microprocessor operating at high and low clok frequencies
GB9514684D0 (en) * 1995-07-18 1995-09-13 Sgs Thomson Microelectronics An arithmetic unit
US5708773A (en) * 1995-07-20 1998-01-13 Unisys Corporation JTAG interface system for communicating with compliant and non-compliant JTAG devices
US5737516A (en) * 1995-08-30 1998-04-07 Motorola, Inc. Data processing system for performing a debug function and method therefor
US5704034A (en) * 1995-08-30 1997-12-30 Motorola, Inc. Method and circuit for initializing a data processing system
JP3655403B2 (ja) * 1995-10-09 2005-06-02 株式会社ルネサステクノロジ データ処理装置
JP3623840B2 (ja) * 1996-01-31 2005-02-23 株式会社ルネサステクノロジ データ処理装置及びマイクロプロセッサ
US5950012A (en) * 1996-03-08 1999-09-07 Texas Instruments Incorporated Single chip microprocessor circuits, systems, and methods for self-loading patch micro-operation codes and patch microinstruction codes
US5978874A (en) * 1996-07-01 1999-11-02 Sun Microsystems, Inc. Implementing snooping on a split-transaction computer system bus
TW334546B (en) * 1996-03-18 1998-06-21 Hitachi Ltd Data processor
US5742804A (en) * 1996-07-24 1998-04-21 Institute For The Development Of Emerging Architectures, L.L.C. Instruction prefetch mechanism utilizing a branch predict instruction
JP3579205B2 (ja) * 1996-08-06 2004-10-20 株式会社ルネサステクノロジ 半導体記憶装置、半導体装置、データ処理装置及びコンピュータシステム
GB9617033D0 (en) * 1996-08-14 1996-09-25 Int Computers Ltd Diagnostic memory access
US5768152A (en) * 1996-08-28 1998-06-16 International Business Machines Corp. Performance monitoring through JTAG 1149.1 interface
JP3790307B2 (ja) * 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
KR19980032776A (ko) * 1996-10-16 1998-07-25 가나이 츠토무 데이타 프로세서 및 데이타 처리시스템
JP3641327B2 (ja) * 1996-10-18 2005-04-20 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
GB9622686D0 (en) * 1996-10-31 1997-01-08 Sgs Thomson Microelectronics A test port controller and a method of effecting communication using the same
US5953538A (en) * 1996-11-12 1999-09-14 Digital Equipment Corporation Method and apparatus providing DMA transfers between devices coupled to different host bus bridges
US5983017A (en) * 1996-11-12 1999-11-09 Lsi Logic Corporation Virtual monitor debugging method and apparatus
US5771240A (en) * 1996-11-14 1998-06-23 Hewlett-Packard Company Test systems for obtaining a sample-on-the-fly event trace for an integrated circuit with an integrated debug trigger apparatus and an external pulse pin
US5956477A (en) * 1996-11-25 1999-09-21 Hewlett-Packard Company Method for processing information in a microprocessor to facilitate debug and performance monitoring
US5857104A (en) 1996-11-26 1999-01-05 Hewlett-Packard Company Synthetic dynamic branch prediction
US6119222A (en) * 1996-12-23 2000-09-12 Texas Instruments Incorporated Combined branch prediction and cache prefetch in a microprocessor
US5896550A (en) * 1997-04-03 1999-04-20 Vlsi Technology, Inc. Direct memory access controller with full read/write capability
US5978902A (en) * 1997-04-08 1999-11-02 Advanced Micro Devices, Inc. Debug interface including operating system access of a serial/parallel debug port
US5944841A (en) * 1997-04-15 1999-08-31 Advanced Micro Devices, Inc. Microprocessor with built-in instruction tracing capability
GB9802097D0 (en) 1998-01-30 1998-03-25 Sgs Thomson Microelectronics DMA controller
GB9806184D0 (en) * 1998-03-23 1998-05-20 Sgs Thomson Microelectronics A cache coherency mechanism
GB9809203D0 (en) * 1998-04-29 1998-07-01 Sgs Thomson Microelectronics Packet distribution in a microcomputer
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions

Cited By (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9886416B2 (en) 2006-04-12 2018-02-06 Intel Corporation Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US10289605B2 (en) 2006-04-12 2019-05-14 Intel Corporation Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US11163720B2 (en) 2006-04-12 2021-11-02 Intel Corporation Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US9965281B2 (en) 2006-11-14 2018-05-08 Intel Corporation Cache storing data fetched by address calculating load instruction with label used as associated name for consuming instruction to refer
US10585670B2 (en) 2006-11-14 2020-03-10 Intel Corporation Cache storing data fetched by address calculating load instruction with label used as associated name for consuming instruction to refer
US10228949B2 (en) 2010-09-17 2019-03-12 Intel Corporation Single cycle multi-branch prediction including shadow cache for early far branch prediction
US11204769B2 (en) 2011-03-25 2021-12-21 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US10564975B2 (en) 2011-03-25 2020-02-18 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9842005B2 (en) 2011-03-25 2017-12-12 Intel Corporation Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9921845B2 (en) 2011-03-25 2018-03-20 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9934072B2 (en) 2011-03-25 2018-04-03 Intel Corporation Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9766893B2 (en) 2011-03-25 2017-09-19 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US9990200B2 (en) 2011-03-25 2018-06-05 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US10372454B2 (en) 2011-05-20 2019-08-06 Intel Corporation Allocation of a segmented interconnect to support the execution of instruction sequences by a plurality of engines
US9940134B2 (en) 2011-05-20 2018-04-10 Intel Corporation Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
US10031784B2 (en) 2011-05-20 2018-07-24 Intel Corporation Interconnect system to support the execution of instruction sequences by a plurality of partitionable engines
KR20140093721A (ko) * 2011-11-22 2014-07-28 소프트 머신즈, 인크. 마이크로프로세서 가속 코드 최적화기
US10191746B2 (en) 2011-11-22 2019-01-29 Intel Corporation Accelerated code optimizer for a multiengine microprocessor
US10521239B2 (en) 2011-11-22 2019-12-31 Intel Corporation Microprocessor accelerated code optimizer
KR20140094014A (ko) * 2011-11-22 2014-07-29 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9898412B2 (en) 2013-03-15 2018-02-20 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10146548B2 (en) 2013-03-15 2018-12-04 Intel Corporation Method for populating a source view data structure by using register template snapshots
US11656875B2 (en) 2013-03-15 2023-05-23 Intel Corporation Method and system for instruction block to execution unit grouping
US10169045B2 (en) 2013-03-15 2019-01-01 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9934042B2 (en) 2013-03-15 2018-04-03 Intel Corporation Method for dependency broadcasting through a block organized source view data structure
US10198266B2 (en) 2013-03-15 2019-02-05 Intel Corporation Method for populating register view data structure by using register template snapshots
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10248570B2 (en) 2013-03-15 2019-04-02 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10255076B2 (en) 2013-03-15 2019-04-09 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10146576B2 (en) 2013-03-15 2018-12-04 Intel Corporation Method for executing multithreaded instructions grouped into blocks
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US10503514B2 (en) 2013-03-15 2019-12-10 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9858080B2 (en) 2013-03-15 2018-01-02 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9823930B2 (en) 2013-03-15 2017-11-21 Intel Corporation Method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US10740126B2 (en) 2013-03-15 2020-08-11 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9811377B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for executing multithreaded instructions grouped into blocks
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US10162615B2 (en) 2014-12-11 2018-12-25 Samsung Electronics Co., Ltd. Compiler
KR102268112B1 (ko) * 2019-12-24 2021-06-22 한국항공우주연구원 위성 커맨드 저장 처리 방법 및 위성 커맨드 저장 처리 시스템

Also Published As

Publication number Publication date
US20040225871A1 (en) 2004-11-11
TW523711B (en) 2003-03-11
EP1089170A3 (en) 2004-02-04
US7159102B2 (en) 2007-01-02
EP1089170A2 (en) 2001-04-04
US6772325B1 (en) 2004-08-03
JP2001147807A (ja) 2001-05-29

Similar Documents

Publication Publication Date Title
KR100667120B1 (ko) 이중 모드 시스템에서 혼합 명령 스트림 내의 상이한 명령세트의 분기 명령 에뮬레이팅
KR20010050794A (ko) 개선된 분기 제어 명령을 이용하는 프로세서 구조 및동작
US6324643B1 (en) Branch prediction and target instruction control for processor
Ditzel et al. Branch folding in the CRISP microprocessor: Reducing branch delay to zero
US5553255A (en) Data processor with programmable levels of speculative instruction fetching and method of operation
JP5917616B2 (ja) 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置
US7441110B1 (en) Prefetching using future branch path information derived from branch prediction
EP0381444B1 (en) Branch prediction
US6523110B1 (en) Decoupled fetch-execute engine with static branch prediction support
US6381692B1 (en) Pipelined asynchronous processing
US6944718B2 (en) Apparatus and method for speculative prefetching after data cache misses
US10338923B2 (en) Branch prediction path wrong guess instruction
US20050216713A1 (en) Instruction text controlled selectively stated branches for prediction via a branch target buffer
GB2283595A (en) Data processor with both static and dynamic branch prediction, and method of operation
EP0666538A2 (en) Data processor with branch target address cache and method of operation
JP2001142707A (ja) プロセッサおよびそれを用いて実行されるプログラム分岐に対する例外チェックの実行方法
IE901520A1 (en) Branch prediction

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid