KR20070108939A - 포워드 룩킹 브렌치 타겟 어드레스 캐싱 - Google Patents

포워드 룩킹 브렌치 타겟 어드레스 캐싱 Download PDF

Info

Publication number
KR20070108939A
KR20070108939A KR1020077022665A KR20077022665A KR20070108939A KR 20070108939 A KR20070108939 A KR 20070108939A KR 1020077022665 A KR1020077022665 A KR 1020077022665A KR 20077022665 A KR20077022665 A KR 20077022665A KR 20070108939 A KR20070108939 A KR 20070108939A
Authority
KR
South Korea
Prior art keywords
fetch
instruction
address
btac
branch
Prior art date
Application number
KR1020077022665A
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 KR20070108939A publication Critical patent/KR20070108939A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1063Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

파이프라인화된 프로세서는, 명령 캐시 (i캐시), 브렌치 타겟 어드레스 캐시 (BTAC), 및 그 i캐시 및 그 BTAC로부터 페치하기 위한 스테이지를 포함하는 프로세싱 스테이지들을 포함한다. BTAC로부터 브렌치 타겟 어드레스를 페치하는데 필요한 사이클들의 수를 보상하기 위해, BTAC로부터의 페치는 i캐시로부터의 브렌치 명령의 페치를 BTAC로부터 페치하는데 필요한 사이클들과 관련된 양만큼 리드한다. 개시된 예들은, BTAC 페치에 필요한 사이클들의 수보다 1 작은 사이클에 본질적으로 대응하는 양만큼, BTAC의 기입 어드레스를 감분시키거나 BTAC의 페치 어드레스를 증분시킨다.
파이프라인 프로세서, 브렌치 타겟 어드레스 캐시, 포워드 룩킹

Description

포워드 룩킹 브렌치 타겟 어드레스 캐싱{FORWARD LOOKING BRANCH TARGET ADDRESS CACHING}
기술분야
본 발명의 교시는, 특히, 캐싱된 브렌치 명령의 페치에 관하여 캐싱된 타겟 어드레스의 진보한 페치로 브렌치 명령 타겟 어드레스들을 캐싱하는 기술들 및 그러한 기술들을 사용하는 프로세서들에 관한 것이다.
배경기술
현대의 마이크로프로세서들 및 다른 프로그래밍가능 프로세서 회로들은, 실행 속도를 개선시키기 위해, 파이프라인 프로세싱 구조에 종종 의존한다. 파이프라인화된 프로세서는, 각각의 명령이 파이프라인을 통과할 때 그 명령을 순차적으로 프로세싱하기 위한 다중의 프로세싱 스테이지들을 포함한다. 일 스테이지가 일 명령을 프로세싱하고 있는 동안, 파이프라인을 따른 다른 스테이지들은 다른 명령들을 동시에 프로세싱한다.
파이프라인의 각각의 스테이지는, 각각의 프로그램 명령의 전체 프로세싱에서 필요한, 상이한 기능을 수행한다. 순서 및/또는 기능들이 다소 변할 수도 있지만, 통상적인 간단한 파이프라인은, 명령 페치 (Fetch) 스테이지, 명령 디코딩 (Decode) 스테이지, 메모리 액세스 또는 판독 (Readout) 스테이지, 명령 실행 (Execute) 스테이지 및 결과 후기입 (Write-back) 스테이지를 포함한다. 더 진 보된 프로세서 설계들은 이들 스테이지들의 일부 또는 전부를, 이러한 기능들의 서브-부분들을 수행하기 위한 수개의 별개의 스테이지들로 분해한다. 슈퍼 스칼라 설계들은, 유사한 깊이의 병렬 파이프라인들에서의 동작들을 수행하기 위해, 그 기능들을 추가적으로 분해 및/또는 중복 기능들을 제공한다.
동작에서, 명령 페치 스테이지는 현재의 실행 프로그램에서 다음의 명령을 페치한다. 종종, 다음의 명령은 다음의 순차적인 메모리 어드레스 위치에서의 명령이다. 일부 명령들의 프로세싱은 브렌치 동작을 초래할 수도 있으며, 그 경우, 다음의 명령은, 후속 프로세싱을 위한 타겟 브렌치를 취하는 실행 동안의 디코딩 및 판정에 의해 생성된 비-순차적인 타겟 어드레스에 존재한다.
브렌치 명령들의 2개의 일반적인 클래스, 즉 조건부 브렌치 명령 및 무조건부 브렌치 명령이 존재한다. 프로세서는, 명령을 프로세싱하는 시간에 브렌치의 조건(들)이 만족되는지의 여부에 의존하여, 조건부 브렌치 명령을 취할지의 여부를 판정한다. 프로세서는 그 프로세서가 명령을 실행할 때마다 무조건부 브렌치를 취한다. 브렌치 명령 이후 다음에 프로세싱될 명령, 즉, 명령의 타겟 어드레스는 특정 브렌치 명령에 기초하여 계산에 의해 결정된다. 특히, 조건부 브렌치에 있어서, 브렌치 결과의 타겟 어드레스는, 브렌치 조건이 만족된다고 프로세서가 결정할 때까지 명확하게 알려지지 않을 수도 있다.
소정의 페치 동작에 있어서, 먼저 페치 스테이지는 명령 캐시 (i캐시; iCache) 로부터의 어드레싱된 명령을 페치하는 것을 시도한다. 명령이 그 i캐시에 아직 포함되지 않으면, 페치 스테이지는, 시스템의 메인 메모리 또는 레벨 2 명령 캐시와 같은 더 높은 레벨의 메모리로부터 그 명령을 페치한다. 더 높은 레벨 메모리로부터 페치되면, 명령은 i캐시에 로딩된다.
페치 스테이지는 각각의 페치된 명령을 명령 디코딩 스테이지에 제공한다. 명령 디코딩 스테이지의 로직은 수신된 명령 바이트들을 디코딩하여, 파이프라인의 다음 스테이지, 즉, 간단한 스칼라 파이프라인에서는 판독 스테이지에 그 결과를 공급한다. 명령이 브렌치 명령이면, 디코딩 프로세싱의 일부는 브렌치 타겟 어드레스의 계산을 포함할 수도 있다. 판독 스테이지의 로직은 메모리 또는 다른 리소스들에 액세스하여, 명령에 따라 프로세싱하기 위한 피연산 데이터 (operand data) 를 획득한다. 명령 및 피연산 데이터는, 검색된 데이터에 대한 특정 명령을 실행하여 결과를 생성하는 실행 스테이지로 전달된다. 통상적인 실행 스테이지는 산술 로직 유닛 (ALU) 를 구현할 수도 있다. 5번째 스테이지는 실행의 결과들을 레지스터 또는 메모리에 역으로 기입한다.
그러한 동작들에서, 실행 스테이지는 브렌치 명령들 중 하나의 명령을 시간에 따라 수신 및 프로세싱할 것이다. 브렌치 명령을 프로세싱하는 경우, 실행 스테이지의 로직은 브렌치가 취해질 지의 여부, 예를 들어, 조건부 브렌치 동작에 대한 조건이 만족될지의 여부를 판정한다. 브렌치가 취해지면, 결과의 일부는, 파이프라인을 통하여 프로세싱하기 위해, 다음의 명령을 페치하도록 페치 스테이지가 명령 어드레스로서 이용할 (종종 명령 디코딩 스테이지에 의해 계산되는) 타겟 어드레스이다. 성능을 향상시키기 위해, 타겟 어드레스는 명령들의 캐시 프로세싱과 유사한 방식으로 캐싱될 수도 있다. 예를 들어, 취해진 브렌치에 있어 서, 계산된 타겟 어드레스는, 통상적으로, 타겟 어드레스를 생성하였던 브렌치 명령의 어드레스와 관련하여 브렌치 타겟 어드레스 캐시 (BTAC) 에 저장될 수도 있다.
각각의 페치 동작에 있어서, 페치 스테이지는 신규한 명령 어드레스를 사용하고, i캐시 및 BTAC 양자를 그러한 페치 어드레스에 액세스하는 것을 시도한다. 명령이 i캐시에 로딩된다고 가정하면, i캐시는 어드레싱된 명령을 페치 스테이지 로직에 공급할 것이다. 어드레스가 브렌치 명령에 대응하고 브렌치가 이전에 취해지지 않았다면, BTAC가 그러한 명령 어드레스에 대해 저장된 타겟 어드레스를 가질 것이고 BTAC가 캐싱된 타겟 어드레스를 페치 로직에 공급할 것이라는 점에서, BTAC에서 '히트 (hit)' 가 존재할 것이다. 현재의 페치 어드레스가 브렌치 명령에 대응하지 않거나 브렌치가 아직 취해지지 않았다면, BTAC가 현재의 페치 명령 어드레스에 대해 저장된 타겟 어드레스를 가지지 않을 것이므로, 히트가 존재하지 않는다.
BTAC 히트가 존재하는 경우, 로직은 브렌치가 다시 취해질 가능성이 있는지의 여부를 예측할 수도 있다. 그러하다면, 타겟 어드레스는 (다음의 순차적인 어드레스 대신에) 다음의 어드레스로서 사용을 위해 페치 로직에 적용된다. 따라서, 브렌치 명령의 페치에 후속하는 다음의 페치 동작은 BTAC로부터 검색된 캐싱된 타겟 어드레스를 사용하여, 타겟 어드레스에 대응하는 명령을 페치한다.
프로세서 속도가 증가함에 따라, 소정의 스테이지가 그의 기능을 수행하는데 걸리는 시간이 작아진다. 성능을 유지하거나 추가적으로 개선시키기 위해, 각 각의 스테이지는 세분된다. 각각의 신규한 스테이지는 소정의 사이클 동안 더 적은 작업을 수행하지만, 더 높은 클록 레이트에서 동시에 동작하는 더 많은 스테이지들이 존재한다. 메모리 및 프로세서들이 개선됨에 따라, 명령들의 길이 및 명령 어드레스의 길이가 증가한다. 많은 파이프라인 프로세스들에서, 페치 동작은 분해되고 2개 이상의 스테이지들 사이에서 분배되므로, i캐시로부터의 명령들 및 BTAC로부터의 타겟 어드레스들을 페치하는 것은 2개 이상의 프로세싱 사이클이 걸린다. 그 결과, i캐시 페치들을 수행하는 스테이지들이 하나 이상의 후속 i캐시 페치들로 이동하고 그 i캐시 페치들에 대한 페치 동작들을 시작하는 동안, BTAC 페치에서 히트가 존재하는지의 여부를 판정하는데 다수의 사이클들이 걸릴 수도 있다. 멀티-사이클 페치 동작에서, BTAC 히트의 검출시에, 다음의 페치 동작이 BTAC에서 식별된 어드레스를 이용하여야 하므로, 후속 페치 프로세싱은 폐기되어야 한다. 그 폐기는 지연들을 야기하고 BTAC 캐싱의 이점을 감소시킨다. BTAC 페치에 대해 요구되는 사이클들의 수가 증가함에 따라, 성능에서의 열화가 증가한다. 따라서, BTAC 히트의 경우에 브렌치 타겟 어드레스 캐싱 기술들이 i캐시의 불필요한 프로세싱을 감소 또는 제거하는데 도움을 줄 수도 있으므로, 그 브렌치 타겟 어드레스 캐싱 기술들에서의 추가적인 개선을 위한 요구가 존재한다.
요약
배경기술의 설명으로부터 명백한 바와 같이, 일반적인 동작은, 명령 페치 동안 명령 캐시 및 브렌치 타겟 어드레스 캐시 (BTAC) 양자에 동시에 액세스하기 위해 동일한 어드레스를 사용한다. 성능을 추가적으로 개선시키기 위해, BTAC 페 치 동작이 명령 캐시로부터의 명령 페치 이전을 예상하고, 즉, 페치한다. 개시된 예들에서, 장래의 명령 어드레스를 사용함으로써, 또는 타겟이 더 이전의 어드레스 값으로 BTAC에 기입되었기 때문에, BTAC 페치는 i캐시 페치를 예상한다. 이러한 교시들의 양태들은 방법 및 프로세서 양자에 관한 것이다.
파이프라인 프로세서에서의 사용을 위해 명령들을 페치하는 그러한 제 1 방법은, 명령 캐시로부터 명령들을 페치하는 단계, 및 명령의 각각의 페치 동안 브렌치 타겟 어드레스 캐시 (BTAC) 에 동시에 액세스하는 단계를 포함한다. BTAC 액세스는, 그 BTAC가 브렌치 타겟 어드레스를 저장하는지의 여부를 판정한다. BTAC의 각각의 액세스는 2개 이상의 프로세싱 사이클들이 걸린다. 또한, 그 방법은, 브렌치 명령의 페치를 개시하기 전에, 하나 이상의 사이클에서 브렌치 명령에 관한 BTAC의 액세스를 시작하기 위해, 페치 동작에 대해 소정의 양만큼 액세스 동작들을 오프셋하는 단계를 포함한다.
상세히 후술될 다양한 예들에서, 오프셋은, 브렌치 명령의 페치를 시작했었던 프로세싱 사이클에 바로 후속하는 프로세싱 사이클에서 시작하는 후속 명령 페치에서의 사용을 위해, BTAC로부터의 브렌치 명령에 대응하는 브렌치 타겟 어드레스를 페치하는데 충분하다. 이러한 방법의 특정 예들은 BTAC 페치에 대한 어드레스의 증분을 페치 동작들의 일부로서 제공하거나, 브렌치 타겟을 BTAC에 기입하기 위해 어드레스의 감분을 제공한다. 더 이후의 옵션은 페치 동작 그 자체에서 구현될 필요는 없지만, 파이프라인 프로세싱의 더 이후의 스테이지들 중 하나 이상의 스테이지에서의 프로세싱으로 구현될 수도 있거나 그 프로세싱에 응답할 수 도 있다.
오프셋의 양은, 브렌치 명령의 페치를 시작했었던 사이클에 바로 후속하는 프로세싱 사이클에서 시작하는 후속 명령 페치에서의 사용을 위해, BTAC로부터의 브렌치 명령에 대응하는 브렌치 타겟 어드레스의 페치를 인에이블하는데 충분하다. 이 예들에서, 오프셋 양은, BTAC의 각각의 액세스에 대해 요구되는 사이클들의 수보다 1이 작은 수와 동일한 BTAC와 명령 캐시 사이의 어드레스 차이를 포함한다.
파이프라인 프로세서에서의 사용을 위해 명령들을 페치하는 또 다른 방법은, 명령 캐시로부터의 제 1 명령의 페치를 시작하는 단계, 및 동시에, BTAC에서 페치를 개시하는 단계를 포함한다. BTAC 액세스는 그 제 1 명령에 후속하는 브렌치 명령에 대응하는 타겟 어드레스를 페치하기 위한 것이다. 또한, 이러한 방법은 그 명령 캐시로부터의 브렌치 명령의 페치를 시작하는 단계를 포함한다. 그 브렌치 명령의 페치의 시작에 후속하여, 그 브렌치 명령에 대응하는 타겟 어드레스는 명령 캐시로부터의 타겟 명령의 페치를 개시하는데 사용된다.
본 발명의 교시에 따른 프로세서는 명령 캐시, 브렌치 타겟 어드레스 캐시, 및 프로세싱 스테이지들을 포함한다. 저장된 명령들 중 하나의 명령은 브렌치 명령이며, 브렌치 타겟 어드레스 캐시는 그 명령에 대응하는 브렌치 타겟 어드레스를 저장한다. 프로세싱 스테이지들은, 페치 스테이지, 및 페치된 명령들에 따라 하나 이상의 프로세싱 기능들을 수행하기 위한 하나 이상의 후속 프로세싱 스테이지를 포함한다. 그 페치 스테이지는 명령 캐시로부터 명령들을 페치하고, 브렌치 타겟 어드레스 캐시로부터 브렌치 타겟 어드레스를 페치한다. 또한, 프로 세서는 오프셋 로직을 포함한다. 그 로직은, 브렌치 타겟 어드레스 캐시로부터의 각각의 페치를 완료하는데 요구되는 프로세싱 사이클들의 수와 관련된 양만큼, 명령 캐시로부터의 명령들의 페치 이전의 브렌치 타겟 어드레스 캐시로부터의 페치의 오프셋을 제공한다.
이 예들에서, 포워드 룩킹 오프셋 양은, 브렌치 타겟 어드레스 캐시로부터의 각각의 페치를 완료하는데 요구되는 프로세싱 사이클들의 수보다 1이 작다. 오프셋 로직은, 예를 들어, 페치 스테이지로 하여금 브렌치 타겟 어드레스 캐시로부터 페치하도록 선두 (leading) 어드레스를 사용하게 하기 위해, 명령 페치 어드레스를 증분시키도록 페치 스테이지와 관련있을 수도 있다. 다른 방법으로, 오프셋 로직은, 감분된 명령 어드레스 값을 사용하여 브렌치 타겟 어드레스 캐시에 브렌치 타겟들을 기입할 수도 있다.
예시적인 프로세서들은, 종종 5개 이상의 스테이지들을 갖는 파이프라인 프로세서들이다. 후속 프로세싱 스테이지들은, 명령 디코딩 스테이지, 판독 스테이지, 명령 실행 스테이지 및 결과 후기입 스테이지를 포함할 수도 있다. 물론, 각각의 이들 스테이지들은 분해되거나 파이프라인화될 수도 있다. 또한, 페치 스테이지는 다중의 프로세싱 스테이지들을 포함하도록 파이프라인화될 수도 있다.
일 예에서, BTAC 페치를 위해 사용되는 어드레스는, 히트의 경우에서 BTAC로부터 페치할 시의 지연을 보상하기 위해 의도되는 오프셋만큼, 명령 캐시 페치에서 사용되는 어드레스를 리드한다. 페치 동안 구현되면, 이것은 페치 어드레스에 서의 증분을 포함한다. 다른 방법으로, 캐시들에 기입할 경우, BTAC 기입 어드레스는, 적절한 오프셋 양만큼 명령 캐시에서의 브렌치 명령의 저장을 위해 사용되는 어드레스를 리드할 수도 있다. 그것이 기입 동작에 관해 구현되지만, 대응하는 명령 캐시 페치 이전에 판독 또는 페치를 야기하기 위해 의도되므로, 기입 동작은 BTAC에 타겟 어드레스를 기입하는데 사용되는 어드레스를 감분시킨다.
부가적인 목적들, 이점들 및 신규한 특성들은 후속할 설명에서 부분적으로 설명될 것이며, 부분적으로는, 다음의 및 첨부한 도면들의 검토시에 당업자에게 명백할 것이고, 또한, 예들의 생산 또는 동작에 의해 습득될 수도 있다. 본 교시들의 목적들 및 이점들은, 특히 첨부된 청구항에서의 방법들, 수단들 및 조합들의 실행 또는 사용에 의해 실현 및 획득될 수도 있다.
도면의 간단한 설명
도면은, 제한이 아닌 예로서 본 발명의 교시들을 따른 하나 이상의 구현들을 나타낸다. 도면에서, 동일한 참조 부호는 동일 또는 유사한 엘리먼트들을 지칭한다.
도 1은, 명령 캐시로부터의 대응하는 페치 이전에 브렌치 타겟 어드레스 캐시로부터의 페치의 포워드 룩킹 오프셋을 갖는 파이프라인 프로세서의 간단한 예의 기능적 블록도이다.
도 2는, 2-사이클 (또는 2개의 스테이지) 페치를 구현하는, 파이프라인 프로세서의 페치 및 디코딩 스테이지의 간단한 예의 기능적 블록도이다.
도 3은, 명령 캐시로부터의 페치와 브렌치 타겟 어드레스 캐시로부터의 대응 하는 페치 사이의 오프셋 없는, 도 2의 페치 스테이지에서의 사이클 타이밍을 설명하는데 유용한 테이블이다.
도 4는, 브렌치 타겟 어드레스 캐시로부터의 페치와 명령 캐시로부터의 대응하는 페치 사이의 오프셋을 갖는, 도 2의 페치 스테이지에서의 사이클 타이밍을 설명하는데 유용한 테이블이며, 여기서, 그 오프셋은 타겟 어드레스 페치를 구현하는 사이클들의 수 또는 스테이지들의 수 (예를 들어, 1이 작은 수) 와 관련된다.
도 5는, 3-사이클 (또는 3개의 스테이지) 페치를 구현하는, 파이프라인 프로세서의 페치 및 디코딩 스테이지의 간단한 예의 기능적 블록도이다.
도 6은, 브렌치 타겟 어드레스 캐시로부터의 페치와 명령 캐시로부터의 대응하는 페치 사이의 오프셋을 갖는, 도 5의 페치 스테이지에서의 사이클 타이밍을 설명하는데 유용한 테이블이며, 여기서, 그 오프셋은 타겟 어드레스 페치를 구현하는 사이클들의 수 또는 스테이지들의 수 (예를 들어, 1이 작은 수) 와 관련된다.
도 7은, 일 예를 이해하는데 유용한 부분적인 블록도 및 흐름도이며, 여기서, 오프셋은 명령 페치 어드레스의 증분으로 구현된다.
도 8은, 일 예를 이해하는데 유용한 부분적인 블록도 및 흐름도이며, 여기서, 오프셋은 브렌치 타겟 어드레스 캐시에 타겟 어드레스를 기입하는데 사용되는 명령 어드레스로서 구현된다.
상세한 설명
다음의 상세한 설명에서, 관련 교시들의 완전한 이해를 제공하기 위해, 많은 특정 세부사항들이 예로서 설명된다. 그러나, 본 발명의 교시들이 그러한 세부 사항들 없이 구현될 수도 있다는 것이 당업자에게는 명백할 것이다. 다른 예시들에서, 주지된 방법들, 절차들, 컴포넌트들 및 회로는, 본 교시들의 양태들을 불필요하게 불명확하게 하는 것을 회피하기 위해, 세부사항없이 비교적 높은-레벨로 설명된다.
여기에 개시된 다양한 기술들은, 특히 페치들이 파이프라인 타입 프로세싱에서 수행될 경우와 같이, 대응하는 명령 페치 이전의 브렌치 타겟 어드레스 페치의 바람직한 타이밍에 관한 것이다. 다음으로, 첨부한 도면에서 도시된 예들을 상세히 참조하고, 후술한다. 도 1은 파이프라인 프로세서 (10) 의 간략화된 블록도이다. 그 간략화된 파이프라인은 5개의 스테이지들을 포함한다.
프로세서 (10) 에서 파이프라인의 제 1 스테이지는 명령 페치 스테이지 (11) 이다. 그 페치 스테이지는 더 이후의 스테이지들에 의한 프로세싱을 위한 명령들을 획득한다. 페치 스테이지 (11) 는 각각의 명령을 디코딩 스테이지 (13) 에 공급한다. 명령 디코딩 스테이지 (13) 의 로직은 수신된 명령 바이트들을 디코딩하여, 그 결과를 파이프라인의 다음 스테이지에 공급한다. 간단한 예에서, 다음의 스테이지는 데이터 액세스 또는 판독 스테이지 (15) 이다. 판독 스테이지 (15) 의 로직은 메모리 또는 다른 리소스들 (미도시) 에 액세스하여, 명령에 따른 프로세싱을 위해 피연산 데이터를 획득한다. 명령 및 피연산 데이터는, 검색된 데이터에 대한 특정 명령을 실행하여 결과를 생산하는 실행 스테이지 (17) 에 전달된다. 5번째 스테이지 (19) 는 레지스터 및/또는 메모리 (미도시) 에 그 결과들을 역으로 기입한다.
이러한 방식에서 프로세싱 구조의 파이프라인화는 연속하는 명령들에 대한 스테이지들 (11 내지 19) 의 동시 동작을 허용한다. 특히 고-성능 애플리케이션들에 있어서, 현대의 구현들은 통상적으로 이러한 스테이지들을 다수의 서브-스테이지들로 분해한다. 슈퍼-스칼라 설계들은, 병렬로 동시에 동작하는 실질적으로 동일한 깊이의 2개 이상의 파이프라인들을 이용한다. 그러나, 설명의 용이함을 위해, 프로세서 (10) 에서와 같은 간단한 5-스테이지 파이프라인 예에 그 예들을 계속 관련시킬 것이다.
종종, 페치 스테이지 로직은 명령 캐시 (i캐시; 21) 를 포함하거나 그 캐시에 인터페이싱할 것이다. 어드레스에 의해 식별된 명령을 페치할 경우, 먼저 페치 스테이지 (11) 의 로직은 그 명령을 검색하기 위해 i캐시 (21) 를 검색할 것이다. 어드레싱된 명령이 i캐시에 아직 존재하지 않으면, 페치 스테이지 (11) 의 로직은, 레벨 2 (L2) 캐시 (23) 또는 메인 메모리 (25) 와 같은 다른 리소스들로부터 i캐시 (21) 로 명령을 페치할 것이다. 명령 및 어드레스는 i캐시 (21) 에 저장된다. 그 후, 페치 스테이지 로직은 i캐시 (21) 로부터 명령을 페치할 수 있다. 또한, 그 후에 필요하다면, 명령은 i캐시 (21) 에서 이용가능할 것이다.
많은 명령들의 실행은 프로그램 시퀀스에서의 현재의 위치로부터 또 다른 명령, 즉, 메모리에서의 상이한 위치에 저장된 (및 비-순차적인 어드레스에 대응하는) 명령으로의 브렌치를 초래한다. 브렌치 명령을 프로세싱하는 것은 타겟 어드레스에 대한 브렌치의 계산을 포함한다. 페치 동작들의 속도를 증가시키기 위해, 페치 스테이지 로직은, i캐시 (21) 의 기능과 유사한 방식으로 타겟 어드레스들을 캐싱하기 위해, 종종, 브렌치 타겟 어드레스 캐시 (BTAC; 27) 를 포함하거나 그 캐시에 인터페이싱할 것이다. 본 교시들에 따르면, BTAC (27) 로부터 검색된 타겟 어드레스는 i캐시 (21) 에서의 대응하는 명령의 타겟 어드레스로부터 오프셋되므로, BTAC (27) 로부터 타겟 어드레스를 검색할 시의 레이턴시 (latency) 를 보상하기 위해, BTAC 룩업 (lookup) 프로세싱은 i캐시 (21) 에서의 대응하는 브렌치 명령의 룩업 이전에 하나 이상의 사이클들을 시작한다.
도면 부호 (29) 에서 구현된 오프셋은, 시간의 관점에서, 하나 이상의 클록 또는 프로세싱 사이클들로서, 넘버링한 (numbering) 오프셋 등으로서 표현될 수 있다. i캐시로부터의 명령 페치를 위해 사용된 페치 어드레스와 비교하는 경우, 시간 또는 명령 시퀀스에서 다소 앞선 (증분) 페치 어드레스를 식별하는 일 예가 후술된다. 또 다른 예는 적절한 오프셋 (감분) 으로 브렌치 타겟 어드레스를 BTAC에 기입하므로, 양 페치들은 동일한 어드레스를 사용하지만, 여전히 BTAC 페치는 원하는 오프셋 양만큼 i캐시 페치를 리드한다. 어느 예에서든지, BTAC (27) 에서 브렌치 타겟 어드레스가 존재하면, 브렌치 명령에 바로 후속하는 타겟 명령을 페치하는 것을 시작하도록, 그 브렌치 어드레스는 페치 스테이지의 로직에 적용된다.
i캐시 (21) 에 이전에 카피되지 않은 브렌치 명령에 있어서, BTAC (27) 는 브렌치 동작에 대한 타겟 어드레스를 포함하지 않을 것이다. 예를 들어, 프로세싱이 특정 브렌치를 아직 취하지 않기 때문에, i캐시 (21) 가 브렌치 명령을 포 함하더라도, BTAC (27) 가 타겟 어드레스를 포함하지 않는 일부 상황들이 존재할 수도 있다. 타겟 브렌치 어드레스가 BTAC (27) 에 포함되지 않은 그러한 임의의 경우에서, 명령 디코딩 로직의 일부 (31) 는 디코딩 스테이지 (13) 에서의 브렌치 명령의 프로세싱 동안 타겟 어드레스를 계산할 것이다.
디코딩 로직의 일부로서 계산되는 경우, 프로세서는 계산된 타겟 어드레스를 BTAC (27) 에 기입할 수 있다. 그러나, 예를 들어, 조건부 브렌치 명령에 대한 조건이 충족되지 않기 때문에, 모든 브렌치들이 취해지지는 않는다. 실행 스테이지 (17) 의 로직은, 브렌치가 취해져야 하는지의 여부를 판정하기 위해 로직 (33) 을 포함할 것이다. 취해져야 한다면, 프로세싱은, 계산된 브렌치 타겟 어드레스를 BTAC (27) 에 기입하기 위해 기입 동작 (도면 부호 (35) 에 도시된 로직) 을 포함할 것이다. 개별적으로 도시되지 않았지만, 특정 브렌치를 취하기 위한 실행의 결과는, 파이프라인을 통한 후속 프로세싱을 위해 타겟 명령을 페치하도록 페치 스테이지 로직에 타겟 어드레스를 제공하는 단계를 포함할 것이다.
일반적인 동작 또는 BTAC 액세스가 단일 페치 사이클을 소비하는 동작은, 명령 페치 동안 i캐시 (21) 및 BTAC (27) 양자에 동시에 액세스하기 위해 동일한 어드레스를 사용한다. 성능을 추가적으로 개선시키기 위해, BTAC 액세스가 다중의 사이클들을 요구하는 경우, BTAC 페치 동작은, 도 1의 도면 부호 (29) 에서 구현된 오프셋에 기초하여 i캐시에서 페치된 명령 이전에 페치한다.
BTAC 페치를 위해 요구되는 사이클들의 수는, 포워드 룩킹 오프셋을 위해 요구되는 사이클들의 수 또는 길이를 결정한다. BTAC 액세스가 2개의 사이클이 걸리면, BTAC 페치는 i캐시 페치 이전의 하나의 페치 사이클을 검색해야 한다. BTAC 액세스가 3개의 사이클들이 걸리면, BTAC 페치는 i캐시 페치 이전의 2개의 페치 사이클을 검색해야 하며, 이하 동일하다. 나타낸 바와 같이, BTAC 액세스가 하나의 페치 사이클을 요구하면, 오프셋을 필요로 하지 않을 수도 있다.
일 예에서, BTAC 페치를 위해 사용된 어드레스는, 히트의 경우에서 BTAC로부터 페치할 시의 지연을 보상하기 위해 의도되는 오프셋만큼, i캐시 페치에서 사용된 어드레스를 리드한다. 페치 동안 구현되면, 이것은 페치 어드레스에서의 증분을 포함한다. 다른 방법으로, 캐시들에 기입할 경우, BTAC 기입 어드레스는, 적절한 오프셋 양만큼 i캐시에서의 브렌치 명령의 저장을 위해 사용되는 어드레스를 리드할 수도 있다. 그것이 기입 동작에 관해 구현되지만, 대응하는 i캐시 페치 이전에 판독 또는 페치를 야기하기 위해 의도되므로, 기입 동작은 BTAC에 타겟 어드레스를 기입하는데 사용되는 어드레스를 감분시킨다.
포워드 룩킹 동작들을 완전하게 이해하기 위해, 일부 예들을 고려하는 것이 도움이 될 수도 있다. 도 2 내지 4에 관하여, BTAC 페치가 2개의 프로세싱 사이클들을 요구한다고 가정한다. 2개의 페치들에 대한 사이클들이 항상 동일하지 않을 수도 있지만, 설명의 용이함을 위해, 이러한 예에서 i캐시로부터의 명령 페치가 유사하게 2개의 사이클들을 요구한다. 본질적으로, 페치 스테이지 (112)는 파이프라인화된 것으로 고려할 수도 있다. 페치 스테이지들이 결합될 수도 있지만, 이러한 예에 있어서, 각각의 타입의 페치가 2개의 별개의 파이프라인 스테 이지들에서 수행되고 i캐시 페치 파이프라인은 BTAC 페치 파이프라인을 형성하는 스테이지들과 함께 병렬로 구동한다고 가정한다. 따라서, 각각의 파이프라인은 2개의 스테이지들로 구성된다.
페치 파이프라인 (112) 의 각각의 스테이지는, 각각의 프로그램 명령의 전체 프로세싱에서 필요한 상이한 기능을 수행한다. 명령 페치 프로세싱과 관련된 제 1 스테이지 (i캐시 F1) 는 명령 어드레스 (i어드레스) 를 수신하고, 어드레싱된 명령의 페치를 시작하기 위해 그 기능적 프로세싱을 수행하며, 명령 페치 프로세싱과 관련된 제 2 스테이지 (i캐시 F2) 에 그 결과를 전달한다. 다음의 사이클 동안, i캐시 F1은 또 다른 명령 어드레스를 수신하지만, i캐시 F2는 제 1 어드레스에 대한 페치 프로세싱을 완료하여 그 결과, 즉, 페치된 명령을 디코딩 스테이지 (13) 에 전달한다.
병렬로, 타겟 어드레스 (BTAC) 페치 프로세싱과 관련된 제 1 스테이지 (BTAC F1) 는 BTAC 페치 어드레스를 수신하고, BTAC로부터 페치를 시작하기 위해 그 기능적 프로세싱을 수행하며, 명령 페치 프로세싱과 관련된 제 2 스테이지 (BTAC F2) 에 그 결과를 전달한다. 다음의 사이클 동안, BTAC F1 스테이지는 또 다른 명령 어드레스를 수신하지만, i캐시 F2는 제 1 어드레스에 대한 페치 프로세싱을 완료하여, 존재한다면, 그 결과를 디코딩 스테이지 (13) 에 전달한다. BTAC 프로세싱이 BTAC (27) 로부터 브렌치 타겟 어드레스를 페치하면, 제 2 BTAC 파이프라인 스테이지 (BTAC F2) 는 명령 페치 프로세싱과 관련된 제 1 스테이지 (i캐시 F1) 에 히트 결과들을 제공하므로, 다음의 신규한 명령 페치가 캐시 (27) 로부터 적절한 타겟 브렌치 어드레스를 이용할 것이다.
도 3은 도 2에 도시된 스테이지 (112) 와 같은 2-사이클 페치 스테이지에서 사이클 타이밍 및 관련 프로세싱을 나타낸 테이블 또는 타이밍 다이어그램이다. 테이블에서 알파벳 문자들은 명령 어드레스를 나타낸다. 예를 들어, A, B 및 C는, 그들이 애플리케이션 프로그램의 시작에서 프로세싱될 수도 있을 때, 순차적인 어드레스이다. Z는 타겟 어드레스, 즉, 취해진 브렌치 명령의 프로세싱시에 프로세싱될 다음의 명령을 나타낸다.
도 3의 예에서, 설명의 목적을 위해, i캐시 페치 스테이지들에 대한 프로세싱과 BTAC 페치 스테이지들에 대한 프로세싱 사이에 오프셋이 존재하지 않는다고 가정한다. 따라서, 프로세싱 사이클 1 동안, i캐시 F1 스테이지는 그의 페치 관련 프로세싱을 제 1 어드레스 A에 대하여 수행하고, BTAC F1 스테이지는 그의 페치 관련 프로세싱을 제 1 어드레스 A에 대하여 수행한다. 2개의 F1 스테이지들은, 제 2 사이클에서의 프로세싱을 위해 각각의 결과들을 대응하는 F2 스테이지들에 전달한다. 제 2 사이클 동안, i캐시 F1 스테이지는 그의 페치 관련 프로세싱을 제 2 어드레스 B에 대하여 수행하고, BTAC F1 스테이지는 그의 페치 관련 프로세싱을 제 2 어드레스 B에 대하여 수행한다. F2 스테이지들 양자는 제 3 사이클의 말단에서 제 2 어드레스 B에 대한 프로세싱을 완료한다. 그러나, 그 제 3 사이클 동안, F1 스테이지들 양자는 제 3의 순차적인 명령 C를 프로세싱한다.
다음으로, 제 2 명령 B는, BTAC (27) 가 타겟 브렌치 어드레스 Z를 저장하는 브렌치 명령이라고 가정한다. BTAC 파이프라인의 제 2 스테이지 (BTAC F2) 는 히트를 발견하고 제 3 사이클에서 타겟 어드레스 Z를 제공한다. 다음의 프로세싱 사이클, 즉 제 4 사이클에서의 i캐시 F1 스테이지에서, 타겟 어드레스 Z가 이용가능하게 되고 명령 페치 어드레스로서 프로세싱된다.
그러나, 도시된 바와 같이, 양 F1 스테이지들은 (원형의 어드레스 C에 의해 나타낸 바와 같이) 제 3 사이클에서의 순차적인 어드레스를 프로세싱하는 것을 시작하였다. 그러한 프로세싱은 관계없는 것이고 임의의 결과들은 파이프라인으로부터 제거되어야 한다. 유사한 프로세싱이 발생할 수도 있으며, (원형의 어드레스 C에 의해 나타낸 바와 같이) 다음의 (제 4) 프로세싱 사이클에서의 F2 스테이지들로부터 제거될 필요가 있을 수도 있다. 제 3 순차적인 어드레스의 불필요한 프로세싱은 프로세싱 시간의 낭비이며, 임의의 관련 데이터를 스테이지들로부터 제거할 필요는 지연을 발생시키고 성능을 감소시킨다.
도 4는, 도 2에 도시된 스테이지 (112) 와 같은 2-사이클 페치 스테이지에서 사이클 타이밍 및 관련 프로세싱을 나타내는 테이블 또는 타이밍 다이어그램이며, 여기서, 페치 스테이지 (112) 는 i캐시 페치에 관한 BTAC 페치의 포워드 룩킹 오프셋을 구현한다. 도 4의 테이블은, 양자가 동일한 표시를 사용한다는 점에서 도 3의 테이블과 유사하다. 그러나, 도 4에 나타낸 오프셋은 낭비된 i캐시 페치 프로세싱 사이클들을 제거한다.
도 4의 예에서, i캐시 페치 스테이지들에 대한 프로세싱과 BTAC 페치 스테이지들에 대한 프로세싱 사이의 오프셋은 하나의 명령 어드레스에 대응한다. 설명의 목적을 위해, 오프셋은 페치 어드레스 증분에 의해 나타낸다. 상술된 바와 같이, 동일한 결과들이 BTAC 기입 어드레스의 감분 오프셋에 의해 달성될 수도 있다.
프로세싱 사이클 1 동안, i캐시 F1 스테이지는 그의 페치 관련 프로세싱을 제 1 어드레스 A에 대하여 수행하지만, BTAC F1 스테이지는 그의 페치 관련 프로세싱을 제 2 어드레스 B에 대하여 수행한다. 2개의 F1 스테이지들은, 각각, 제 2 사이클에서 A 및 B와 관련된 프로세싱을 위해 대응하는 F2 스테이지들에 각각의 결과들을 전달한다. 제 2 사이클 동안, i캐시 F1 스테이지는 그의 페치 관련 프로세싱을 제 2 어드레스 B에 대하여 수행하고, BTAC F1 스테이지는 그의 페치 관련 프로세싱을 제 3 어드레스 C에 대하여 수행한다.
BTAC F2 스테이지는 제 2 사이클의 말단에서 제 2 어드레스 B에 대한 그의 프로세싱을 완료한다. 이러한 예에서, BTAC (27) 가 타겟 브렌치 어드레스 Z를 저장하는 제 2 명령 B가 브렌치 명령이므로, BTAC 파이프라인의 BTAC F2 스테이지는 히트를 발견하고 제 2 사이클에서 타겟 어드레스 Z를 제공한다. 다음의 프로세싱 사이클, 즉 제 3 사이클에서의 i캐시 F1 스테이지에서, 타겟 어드레스 Z는 이용가능하게 되고 명령 페치 어드레스로서 프로세싱된다. 따라서, i캐시 파이프라인 스테이지들은, 다음의 순차적인 어드레스를 프로세싱하는 것을 과도하게 시작하지 않고, 타겟 브렌치 어드레스에 대응하는 명령을 즉시 프로세싱할 수 있다.
(원형의 어드레스 C에 의해 나타낸 바와 같이) BTAC 파이프라인 스테이지들에서 다음의 순차적인 어드레스의 일부 불필요한 프로세싱이 여전히 존재할 수도 있다. 그러나, 브렌치 명령들, 특히 연속적으로 브렌치가 취해진 명령들의 발생의 낮은 주파수 때문에, BTAC 파이프라인에서의 그러한 불필요한 프로세싱에 대한 데이터를 제거하는 것은 전체 프로세서 성능에 비교적 거의 영향을 주지 않는다.
시작에서, 오프셋에 대응하는 초기 사이클(들)에서 i캐시 (21) 로부터 페치된 명령들은 대응하는 BTAC 페치를 갖지 않는다는 것이 도 2 및 4의 간단한 예의 설명으로부터 명백할 것이다. 통상적으로, 제 1 명령은 브렌치가 아니므로, 이는 문제가 되지 않는다. 그러나, BTAC 페치의 사이클들의 수가 증가하고 부수적인 오프셋이 증가하므로, BTAC 오프셋을 먼저 전달하기 이전에 명령들의 제 1 시리즈에서 브렌치 동작들을 회피하는 것이 바람직할 수도 있다.
도 5 및 6은, BTAC 페치 동작들이 3개의 프로세싱 사이클들을 포함하는 프로세서에 대하여, 파이프라인 프로세싱 및 관련 타이밍을 도시한다. i캐시 사이클 및 BTAC 사이클이 항상 동일하지 않을 수도 있지만, 설명의 용이함을 위해, 이러한 예에서, i캐시로부터의 명령 캐시는 유사하게 3개의 사이클들을 요구한다. 본질적으로, 페치 스테이지 (113) 는 파이프라인화된 것으로 고려될 수도 있다. 페치 스테이지들이 결합될 수도 있지만, 이러한 예에 있어서, 각각의 타입의 페치가 2개의 별개의 파이프라인 스테이지들에서 수행되고 i캐시 페치 파이프라인이 BTAC 페치 파이프라인을 형성하는 스테이지들과 함께 병렬로 구동한다고 가정한다. 따라서, 각각의 파이프라인들은 3개의 스테이지들로 구성된다.
페치 파이프라인 (113) 의 각각의 스테이지는 각각의 프로그램 명령의 전체 프로세싱에서 필요한 상이한 기능을 수행한다. 명령 페치 프로세싱과 관련된 제 1 스테이지 (i캐시 F1) 는 명령 어드레스 (i어드레스) 를 수신하고, 어드레싱된 명령의 페치를 시작하기 위해 그 기능적 프로세싱을 수행하며, 명령 페치 프로세싱과 관련된 제 2 스테이지 (i캐시 F2) 에 그 결과들을 전달한다. 다음의 사이클 동안, i캐시 F1 스테이지는 또 다른 명령 어드레스를 수신하지만, i캐시 F2 스테이지는 제 1 어드레스에 대한 그 F2 스테이지의 페치 프로세싱을 수행하여 그 결과들을 다음의 스테이지에 전달한다. 제 3 사이클 동안, i캐시 F1 스테이지는 또 다른 어드레스를 수신하지만, i캐시 F2 스테이지는 제 2 어드레스에 대한 그 F2 스테이지의 페치 프로세싱을 수행하며, 명령 페치 프로세싱과 관련된 제 3 스테이지 (i캐시 F3) 는 제 1 명령 어드레스에 대한 프로세싱을 완료하여 그 결과들을 디코딩 스테이지 (13) 에 전달한다.
병렬로, 타겟 어드레스 (BTAC) 페치 프로세싱과 관련된 제 1 스테이지 (BTAC F1) 는 BTAC 페치 어드레스를 수신하고, 그 기능적 프로세싱을 수행하며, 명령 패치 프로세싱과 관련된 제 2 스테이지 (BTAC F2) 에 그 결과들을 전달한다. 다음의 사이클 동안, 스테이지 BTAC F1은 또 다른 명령 어드레스를 수신하지만, BTAC F2 스테이지는 제 1 어드레스에 관한 F2 스테이지의 페치 프로세싱을 수행하여 그 결과들을 다음의 스테이지에 전달한다. 제 3 사이클 동안, BTAC F1은 또 다른 명령 어드레스를 수신하지만, BTAC F2는 제 2 BTAC 어드레스에 대한 그 F2의 페치 프로세싱을 수행하며, 명령 페치 프로세싱과 관련된 제 3 스테이지 (BTAC F3) 는 제 1 BTAC 어드레스에 대한 프로세싱을 완료하여 그 결과들을 디코딩 스테이지 (13) 에 전달한다.
도 6은, 도 5에 도시된 스테이지와 같은 3-사이클 페치 스테이지에서 사이클 타이밍 및 관련 프로세싱을 나타내는 테이블 또는 타이밍 다이어그램이며, 여기서, 페치 스테이지 파이프라인 (113) 은, 2개의 어드레스에 대응하여, i캐시 페치에 대한 BTAC 페치의 포워드 룩킹 오프셋을 구현한다. 도 6의 테이블은, 유사한 표시를 사용한다는 점에서, 도 4의 테이블과 유사하다. 이러한 3-사이클 예에서, 편의를 위해, 제 3 순차적인 명령 C는 타겟 어드레스가 BTAC (27) 에 이미 저장된 브렌치 명령이라고 가정한다.
도 6의 예에서, i캐시 페치 스테이지에 대한 프로세싱과 BTAC 페치 스테이지에 대한 프로세싱 사이의 오프셋은 2개의 명령 어드레스들에 대응한다. 설명의 목적을 위해, 오프셋은 페치 어드레스 증분으로 나타낸다. 상술된 바와 같이, 동일한 결과가 BTAC 기입 어드레스의 감분 오프셋에 의해 달성될 수도 있다.
프로세싱 사이클 1 동안, i캐시 F1 스테이지는 그의 페치 관련 프로세싱을 제 1 어드레스 A에 대하여 수행하지만, BTAC F1 스테이지는 그의 페치 관련 프로세싱을 제 1 어드레스 C에 대하여 수행한다. 2개의 F1 스테이지들은, 각각, 제 2 사이클에서 A 및 C에 대한 프로세싱을 위해 대응하는 F2 스테이지들에 각각의 결과들을 전달한다. 제 2 사이클 동안, i캐시 F1 스테이지는 그의 페치 관련 프로세싱을 제 2 어드레스 B에 대하여 수행하고, i캐시 F2 스테이지는 그의 페치 관련 프로세싱을 제 1 어드레스 A에 대하여 수행한다. 그러한 동일한 사이클 동안, BTAC F2 스테이지는 그의 페치 관련 프로세싱을 어드레스 C에 대하여 수행한다.
제 3 프로세싱 사이클에서, i캐시 F1 스테이지는 제 3 어드레스 C를 프로세싱하고, i캐시 F2 스테이지는 그의 페치 관련 프로세싱을 어드레스 B에 대하여 수행하며, i캐시 F3 스테이지는 그의 페치 관련 프로세싱을 어드레스 A에 대하여 수행한다. 동시에, BTAC 파이프라인에서, BTAC F3 스테이지는 어드레스 C에 대한 프로세싱을 완료하고 있다. 이러한 예에서, 그러한 프로세싱은 히트를 생산하고, BTAC 페치는 타겟 어드레스 Z (테이블의 저부 라인) 를 페치한다.
명령 C는 BTAC (27) 가 타겟 브렌치 어드레스 Z를 저장하는 브렌치 명령이므로, BTAC 파이프라인의 BTAC F3 스테이지는 히트를 발견하고, 제 3 사이클에서 타겟 어드레스 Z를 제공한다. 다음의 프로세싱 사이클, 즉, 이러한 예의 제 4 사이클에서의 i캐시 F1 스테이지에서, 타겟 어드레스 Z는 이용가능하게 되고 명령 페치 어드레스로서 프로세싱된다. 따라서, i캐시 파이프라인 스테이지들은, 다음의 순차적인 어드레스를 프로세싱하는 것을 과도하게 시작하지 않고, 타겟 브렌치 어드레스에 대응하는 명령을 즉시 프로세싱할 수 있다.
포워드 룩킹 BTAC 페치는 i캐시 및 BTAC를 갖는 임의의 파이프라인 프로세서에서 구현될 수 있다는 것을 알 수 있다. 페치 스테이지는 파이프라인화될 필 요가 없으며, 만약 파이프라인화된다면, 페치 스테이지는 도 2 및 5의 예에 도시된 방식으로 반드시 파이프라인화될 필요는 없다. 포워드 룩킹 BTAC 페치를 인에이블하기 위한 오프셋의 이점들은, 페치 동작이 2개 이상의 프로세싱 사이클들을 요구하는 임의의 프로세서에서 구현될 수도 있다.
예들에서, 페치 스테이지가 i캐시 페치를 시작하는 프로세싱 사이클은, 오프셋에 의해 정의된 하나 이상의 프로세싱 사이클들, 즉, BTAC 페치를 수행하는데 요구되는 것보다 하나 더 작은 프로세싱 사이클들에 의해 대응하는 BTAC 페치를 추적한다 (또는 BTAC 페치가 i캐시 페치를 리드한다). 예를 들어, 도 4에서, i캐시 F1 스테이지는, BTAC F1 스테이지에 의한 B 타겟 어드레스에 대한 페치의 대응하는 시작 이후의 일 사이클인 사이클 2에서 브렌치 명령 B의 페치를 시작한다. 그러한 제 1 예에서, BTAC 페치는 2개의 사이클을 요구한다. 유사하게, 도 6에서, i캐시 F1 스테이지는, BTAC F1 스테이지에 의한 C 타겟 어드레스에 대한 페치의 대응하는 시작 이후의 2 사이클인 사이클 3에서 브렌치 명령 C의 페치를 시작한다. 도 5 및 6의 예에서, BTAC 페치는 3개의 프로세싱 사이클을 요구한다. 각각의 경우에서, i캐시 페치 프로세싱에서 불필요한 중간 프로세싱이 존재하지 않는다.
상술된 도 2 내지 6의 예들에서, i캐시 페치를 위해 사용된 어드레스 이전인 또는 선두 어드레스였던 BTAC 페치에 대한 어드레스와 오프셋이 관련있다고 가정하였다. 페치 프로세싱 동안 그러한 동작을 구현하기 위해, 페치 로직은 어드레스 증분을 구현할 것이다. 본질적으로, 페치 스테이지 (11) 가 명령 페치에 대 한 어드레스를 수신하는 경우, 그 페치 스테이지는 그 어드레스를 i캐시 명령 어드레스로서 사용하지만, 그 로직은 그 어드레스를 증분시켜 BTAC 페치에 대한 어드레스를 생성한다. 도 7은 그러한 페치 동작에 관련된 엘리먼트들의 기능적 블록도이며, BTAC 페치에 대한 어드레스를 획득하기 위해 페치 어드레스의 증분을 수반한다. 설명의 용이함을 위해, 파이프라인의 다른 엘리먼트들은 생략되었다.
도시된 바와 같이, 페치 스테이지에서의 로직 (71) 은, i캐시 (21) 및 BTAC (27) 양자에 액세스할 시에 사용을 위해 페치 어드레스를 제공한다. 로직 (71) 으로부터의 페치 어드레스는 i캐시에 액세스하기 위한 어드레스로서 직접 사용된다. 일반적인 프로세싱에서, 페치 스테이지는 2개 이상의 프로세싱 사이클들을 경험하여 i캐시 (21) 로부터 대응하는 명령을 획득할 것이다. i캐시 (21) 로부터의 명령은, 디코딩 스테이지로의 전달을 위해, 레지스터 (73) 에 로딩 및/또는 로직 (71) 에 제공된다. 이전에 설명된 바와 같이, 명령 디코딩 로직의 일부 (31) 는 디코딩 스테이지 (13) 에서의 명령의 프로세싱 동안 타겟 어드레스를 계산할 것이고, 실행 스테이지 (17) 의 로직은, 브렌치가 취해져야 하는지의 여부를 판정하기 위해 로직 (33) 을 포함할 것이다. 취해져야 한다면, 프로세싱은, 계산된 브렌치 타겟 어드레스를 BTAC (27) 에 기입하기 위해 기입 동작 (도 1의 도면 부호 (35) 에서 도시된 로직) 을 포함할 것이다. 이러한 예에서, 기입 동작은 변형되지 않는다.
그러나, 페치 스테이지는, BTAC 페치 어드레스를 생성하기 위해 적절한 오프셋 양만큼 페치 어드레스를 증분시키는 (페치 스테이지 로직 (71) 에 포함되거나 그 페치 로직과 관련된) 로직 회로 (291) 를 포함한다. 도 2 및 4의 2-사이클 페치 예에서, 회로 (291) 는, BTAC 페치가 1 사이클만큼 i캐시 페치를 리드하도록 페치 어드레스를 1 어드레스 값만큼 증분시킬 것이다. 도 5 및 6의 3-사이클 페치 예에서, 회로 (291) 는, BTAC 페치가 2 사이클만큼 i캐시 페치를 리드하도록 2 어드레스 값만큼 증분시킬 것이다. 이러한 방식으로, 페치 스테이지는, 적절한 장래의 명령에 대응하는 BTAC 히트가 존재하는지의 여부를 판정하기 위해 2개 이상의 프로세싱 사이클들을 경험하고, 존재한다면, BTAC (27) 로부터 캐싱된 브렌치 타겟 어드레스를 검색할 것이다. 타겟 어드레스는 레지스터 (75) 에 로딩되고 로직 (71) 에 제공된다. 로직 (71) 은, 다음의 페치 프로세싱 사이클에서, 다음의 페치 어드레스로서 브렌치 타겟 어드레스를 사용하기 위해 충분히 일찍 그 브렌치 타겟 어드레스를 수신한다 (도 4 및 6 참조). 편의를 위해 경로가 도시되어 있지는 않지만, 또한 통상적으로 결과적인 타겟 어드레스는, 파이프라인의 더 아래의 브렌치 명령의 프로세싱을 용이하게 하기 위해 대응하는 브렌치 명령과 함께 디코딩 스테이지에 전달된다.
페치 동작 동안 어드레스를 증분시키기 위한 대안이, 원하는 포워드 룩킹 BTAC 페치를 여전히 제공하기 때문에, 데이터를 BTAC (27) 에 기입할 경우, 브렌치 타겟 데이터의 BTAC 어드레스를 변형시키는 것이 또한 가능하다. 관련 명령 어드레스 및 브렌치 타겟 어드레스가 메모리에 기입되는 경우에 그 관련 명령 어드레스가 감분되면, 현재의 명령 어드레스에 기초한 BTAC로부터의 후속 페치는 i캐시로 부터의 브렌치 명령의 페치의 후속 페치를 리드할 것이다. 어드레스 감분이 적절하면, 즉, 어드레스 오프셋이 BTAC 페치를 위해 요구되는 사이클들의 수보다 1 작으면, i캐시 (21) 로부터의 명령들의 페치 및 BTAC (27) 로부터의 임의의 관련 타겟 어드레스들은 이전의 예들에서와 같이 정확히 동일할 것이다. 실제로, 매 페치 동작들 동안에 페치 어드레스를 증분시키는 것보다는, 실행 동안 취해진 브렌치가 존재하는 경우 기입 어드레스를 변형함으로써 오프셋을 구현하는 것이 종종 더 용이할 것이다.
도 8은 그러한 페치 동작에 관련된 엘리먼트들의 기능적 블록도이며, 계산된 브렌치 타겟 어드레스를 BTAC에 기입할 경우 타겟 데이터의 어드레스의 감분과 관련있다. 설명의 용이함을 위해, 파이프라인의 다른 엘리먼트들은 생략되었다. 도시된 바와 같이, 페치 스테이지에서의 로직 (71) 은 i캐시 (21) 및 BTAC (27) 양자에 액세스할 시에 사용을 위해 페치 어드레스를 제공한다. 이러한 예에서, 페치들 모두는, 즉, i캐시 (21) 로부터 명령을 페치하고 BTAC (27) 에 액세스하기 위해, 동일한 어드레스를 사용한다.
페치 스테이지는 2개 이상의 프로세싱 사이클들을 경험하여, i캐시 (21) 로부터 대응하는 명령을 획득할 것이다. i캐시 (21) 로부터의 명령은, 디코딩 스테이지로의 전달을 위해, 레지스터 (73) 로 로딩 및/또는 로직 (71) 에 제공된다. 상술된 바와 같이, 명령 디코딩 로직의 일부 (31) 는 디코딩 스테이지 (13) 에서의 명령의 프로세싱 동안 타겟 어드레스를 계산할 것이고, 실행 스테이지 (17) 의 로직은, 브렌치가 취해져야 하는지의 여부를 판정하기 위해 로직 (33) 을 포함 할 것이다. 취해져야 한다면, 프로세싱은, 계산된 브렌치 타겟 어드레스를 BTAC (27) 로 기입하기 위해 기입 동작을 포함할 것이다.
이러한 예에서, 기입 동작은 변형된다. 상세하게, 실행 스테이지에서의 기입 로직은 감분된 (-) 오프셋 로직 회로 (292) 를 포함한다. 일반적으로, 타겟 어드레스 데이터를 BTAC (27) 에 기입하는데 사용되는 기입 어드레스는, 브렌치 어드레스를 생성했던 브렌치 명령의 어드레스이다. 그러나, 도 8의 예에서, 회로 (292) 는 적절한 오프셋 양만큼 그 어드레스를 감분시킨다. 2-사이클 페치를 구현한 파이프라인 프로세서에 있어서, 회로 (292) 는 일 어드레스 값만큼 기입 어드레스를 감분시킬 것이다. 3-사이클 페치를 구현한 프로세서에 있어서, 회로 (292) 는 2 어드레스만큼 기입 어드레스를 감분시킬 것이다.
다음으로, 페치 동작을 다시 고려한다. 로직 (71) 이 페치 어드레스를 생성하는 경우, 그 어드레스는 i캐시 (21) 에서의 현재 원하는 명령을 가리킨다. 그러나, 타겟 데이터를 BTAC (27) 로 기입하기 위한 기입 어드레스의 감분때문에, 페치에서 사용된 어드레스는, 오프셋의 양에 의해 결정된 더 이후의 명령 어드레스에 실제로 대응한다. 오프셋이 일 어드레스 값이면, 페치 어드레스는 i캐시 (21) 로부터 풀 (pull) 될 다음의 명령에 대한 잠재적인 BTAC 히트를 실제로 가리킨다. 유사하게, 오프셋이 2 어드레스이면, 페치 어드레스는 i캐시 (21) 로부터 현재 풀될 명령 이전의 2개의 명령들에 대한 잠재적인 BTAC 히트를 실제로 가리킨다.
이러한 방식에서, 페치 스테이지는, 적절한 장래의 명령에 대응하는 BTAC 히트가 존재하는지의 여부를 판정하기 위해 2개 이상의 프로세싱 사이클들을 경험하고, 존재한다면, BTAC (27) 로부터 캐싱된 브렌치 타겟 명령을 검색할 것이다. 타겟 어드레스는 레지스터 (75) 에 로딩 및 로직 (71) 에 제공된다. 대응하는 브렌치 명령에 대한 i캐시 페치를 개시한 이후의 다음 페치 프로세싱 사이클에서, 로직 (71) 은, 다음의 페치 어드레스로서 브렌치 타겟 어드레스를 사용하기 위해 충분히 일찍 그 브렌치 타겟 어드레스를 수신한다 (도 4 및 6참조). 편의를 위해 경로가 도시되어 있지는 않지만, 또한 통상적으로 결과적인 타겟 어드레스는, 파이프라인의 더 아래의 브렌치 명령의 프로세싱을 용이하게 하기 위해 대응하는 브렌치 명령과 함께 디코딩 스테이지에 전달된다.
예들이 2 및 3 사이클 BTAC 페치 프로세싱 및 대응하는 오프셋들을 어드레싱하지만, BTAC 페치가 더 큰 수의 사이클들과 관련있는 페치 프로세싱에 대해 본 발명의 교시들이 용이하게 수용가능하다는 것을 당업자는 인식할 것이다. 각각의 경우에서, 최적의 오프셋은 BTAC 페치에서의 사이클들의 수보다 1 작을 것이다. 그러나, 페치 시퀀스의 시작에서, 오프셋에 대응하는 일부 수의 명령들은, BTAC 히트를 스킵핑 (skip) 하는 것을 회피하기 위해, 브렌치 명령을 포함하지 않아야 한다. 브렌치 명령이 더 이전에 포함되면, 프로그램의 제 1 구동은 BTAC 히트가 존재하지 않는 (브렌치가 이전에 취해지지 않음) 브렌치 명령으로서 그 브렌치 명령을 프로세싱하고, 그렇지 않으면 BTAC 히트를 검출함으로써 제공될 성능 개선이 없다는 것을 제외하고, 프로그램은 일반적인 방식으로 구동할 것이다.
본 발명은 최상의 모드 및/또는 다른 예들로 고려될 것을 설명하였지만, 다양한 변형들이 여기에서 행해질 수도 있고, 여기에 개시된 사항이 다양한 형태들 및 예들로 구현될 수도 있으며, 본 교시들이 다수의 애플리케이션들에 적용될 수도 있고 그 다수의 애플리케이션들 중 일부만이 여기에 설명되어 있다는 것을 알 수 있다. 본 교시들의 실제 범위내에 있는 임의의 및 모든 애플리케이션들, 변형들, 및 변동들을 청구하는 것이 다음의 청구항들에 의해 의도된다.

Claims (30)

  1. 파이프라인 프로세서에서의 사용을 위한 명령들을 페치 (fetch) 하는 방법으로서,
    명령 캐시 (cache) 로부터 명령들을 페치하는 단계;
    명령의 각각의 페치 동안, 브렌치 타겟 어드레스 캐시 (BTAC) 가 브렌치 타겟 어드레스를 저장하는지의 여부를 판정하기 위해 상기 BTAC에 동시에 액세스하는 단계로서, 상기 BTAC의 각각의 액세스는 2개 이상의 프로세싱 사이클들을 포함하는, 상기 액세스 단계; 및
    상기 명령 캐시로부터의 상기 브렌치 명령의 페치를 개시하기 전에, 하나 이상의 사이클에서 브렌치 명령에 대한 상기 BTAC의 액세스를 시작하기 위해, 페치 동작들에 대해 소정의 양만큼 액세스 동작들을 오프셋하는 단계를 포함하는, 명령 페치 방법.
  2. 제 1 항에 있어서,
    상기 명령 캐시로부터의 각각의 페치하는 단계는 페치될 명령에 대한 페치 어드레스를 생성하는 단계를 포함하고,
    상기 오프셋 단계는 상기 소정의 양만큼 각각의 페치 어드레스를 증분시키는 단계를 포함하며,
    상기 BTAC의 각각의 액세스 단계는 상기 오프셋 단계로부터 초래되는 증분된 페치 어드레스를 사용하여 상기 BTAC로부터 페치하는 단계를 포함하는, 명령 페치 방법.
  3. 제 1 항에 있어서,
    상기 오프셋 단계는, 상기 브렌치 명령에 대한 어드레스를 감분시키는 단계, 및 상기 브렌치 타겟 어드레스 및 상기 감분된 어드레스를 상기 BTAC에 기입하는 단계를 포함하고,
    상기 방법은, 각각의 사이클 동안, 페치될 명령에 대한 페치 어드레스를 생성하는 단계를 더 포함하며,
    각각의 사이클에서 시작된 페치 단계 및 액세스 단계 모두는 상기 사이클 동안 생성된 상기 페치 어드레스를 사용하는, 명령 페치 방법.
  4. 제 1 항에 있어서,
    상기 오프셋 단계의 소정의 양은, 명령의 페치가 상기 브렌치 명령의 페치를 시작하였던 프로세싱 사이클에 바로 후속하는 프로세싱 사이클에서 시작하는 후속 명령 페치에서의 사용을 위해, 상기 BTAC로부터의 상기 브렌치 명령에 대응하는 브렌치 타겟 어드레스의 페치를 인에이블하는데 충분한, 명령 페치 방법.
  5. 제 4 항에 있어서,
    상기 소정의 양은 상기 명령 캐시로부터의 페치 단계와 상기 BTAC로의 각각 의 액세스에서의 사이클들의 수보다 1 작은 수와 동일한 BTAC의 액세스 단계 사이의 어드레스 차이를 포함하는, 명령 페치 방법.
  6. 제 5 항에 있어서,
    상기 BTAC의 각각의 액세스는 2개의 프로세싱 사이클들로 구성되고,
    상기 소정의 양은 상기 명령 캐시로부터의 명령들의 페치 단계와 일 명령 어드레스와 동일한 BTAC의 액세스 단계 사이의 어드레스 차이를 포함하는, 명령 페치 방법.
  7. 제 5 항에 있어서,
    상기 BTAC의 각각의 액세스는 3개의 프로세싱 사이클들로 구성되고,
    상기 소정의 양은 상기 명령 캐시로부터의 명령들의 페치 단계와 2개의 명령 어드레스와 동일한 BTAC의 액세스 단계 사이의 어드레스 차이를 포함하는, 명령 페치 방법.
  8. 파이프라인 프로세서에서의 사용을 위한 명령들을 페치하는 방법으로서,
    명령 캐시로부터 제 1 명령의 페치를 시작하는 단계;
    상기 제 1 명령의 페치의 시작과 동시에, 상기 제 1 명령에 후속하는 브렌치 명령에 대응하는 타겟 어드레스를 페치하기 위해 브렌치 타겟 어드레스 캐시 (BTAC) 에서 페치를 개시하는 단계;
    상기 명령 캐시로부터 상기 브렌치 명령의 페치를 시작하는 단계; 및
    상기 브렌치 명령의 페치의 시작에 후속하여, 상기 명령 캐시로부터의 타겟 명령의 페치를 시작하기 위해 상기 브렌치 명령에 대응하는 타겟 어드레스를 사용하는 단계를 포함하는, 명령 페치 방법.
  9. 제 8 항에 있어서,
    상기 BTAC에서의 페치는 2개 이상의 프로세싱 사이클들을 요구하는, 명령 페치 방법.
  10. 제 9 항에 있어서,
    상기 BTAC에서의 페치의 개시 단계는, 하나 이상의 프로세싱 사이클만큼 상기 명령 캐시로부터의 상기 브렌치 명령의 페치의 시작 단계에 선행하는, 명령 페치 방법.
  11. 제 10 항에 있어서,
    상기 BTAC에서의 페치가 상기 명령 캐시로부터의 브렌치 명령의 페치의 시작 단계에 선행하는 상기 하나 이상의 프로세싱 사이클들은, 상기 BTAC에서의 페치를 위해 요구되는 2개 이상의 사이클보다 1 작은, 명령 페치 방법.
  12. 제 8 항에 있어서,
    상기 제 1 명령의 페치는 페치 어드레스를 사용하고,
    상기 BTAC에서의 페치는 상기 페치 어드레스에 대해 증분된 어드레스를 사용하는, 명령 페치 방법.
  13. 제 8 항에 있어서,
    상기 제 1 명령의 페치는 페치 어드레스를 사용하고,
    상기 BTAC에서의 동시 페치는 상기 페치 어드레스를 사용하며,
    브렌치 어드레스는 상기 페치 어드레스에 대응하기 위한 감분된 어드레스와 함께 상기 BTAC에 기입되는, 명령 페치 방법.
  14. 파이프라인 프로세서에서의 사용을 위한 명령들을 페치하는 방법으로서,
    제 1 프로세싱 사이클에서, 명령 캐시로부터 제 1 명령의 페치를 시작하는 단계;
    상기 제 1 프로세싱 사이클에서, 소정의 양만큼 상기 제 1 명령에 후속하는 브렌치 명령에 대응하는 타겟 어드레스를 페치하기 위해 브렌치 타겟 어드레스 캐시 (BTAC) 에서 페치를 개시하는 단계;
    상기 제 1 프로세싱 사이클 이후인 제 2 프로세싱 사이클에서, 상기 명령 캐시로부터의 상기 브렌치 명령의 페치를 시작하고 상기 BTAC로부터의 타겟 어드레스의 페치를 완료하는 단계; 및
    상기 제 2 프로세싱 사이클 이후인 제 3 프로세싱 사이클에서, 상기 명령 캐 시로부터의 타겟 명령의 페치를 시작하기 위해 상기 브렌치 명령에 대응하는 타겟 어드레스를 사용하는 단계를 포함하는, 명령 페치 방법.
  15. 제 14 항에 있어서,
    상기 제 2 프로세싱 사이클은, 상기 BTAC로부터의 상기 페치를 완료하는데 요구되는 2개 이상의 프로세싱 사이클들의 수보다 1 작은 하나 이상의 프로세싱 사이클들의 수만큼 상기 제 1 프로세싱 사이클에 후속하는, 명령 페치 방법.
  16. 제 14 항에 있어서,
    상기 BTAC에서 페치를 개시하는 단계는,
    상기 제 1 프로세싱 사이클에서 상기 명령 캐시로부터의 제 1 명령의 페치의 시작 단계에서 사용된 명령 어드레스를 상기 소정의 양만큼 증분시키는 단계; 및
    상기 브렌치 명령에 대응하는 타겟 어드레스를 페치하기 위해, 상기 BTAC에서의 페치를 시작하도록 상기 증분된 어드레스를 사용하는 단계를 포함하는, 명령 페치 방법.
  17. 제 16 항에 있어서,
    각각의 증분은, 상기 BTAC로부터의 페치를 완료하는데 요구되는 2개 이상의 프로세싱 사이클들의 수보다 1 작은 하나 이상의 어드레스의 수 만큼인, 명령 페치 방법.
  18. 제 14 항에 있어서,
    상기 제 1 프로세싱 사이클에서 상기 BTAC에서의 페치를 개시하는 단계는, 상기 제 1 프로세싱 사이클에서 상기 명령 캐시로부터의 상기 제 1 명령의 페치의 시작 단계에서 사용된 명령 어드레스를 사용하여 상기 BTAC에 액세스하는 단계를 포함하며,
    상기 BTAC에서의 타겟 어드레스의 어드레스가 상기 제 1 프로세싱 사이클에서 상기 명령 캐시로부터의 상기 제 1 명령의 페치의 시작 단계에서 사용된 명령 어드레스에 대응하도록, 상기 브렌치 타겟 어드레스를 상기 BTAC에 기입하는데 사용된 어드레스는, 상기 브렌치 명령을 상기 명령 캐시에 기입하는데 사용된 명령 어드레스로부터 상기 소정의 양만큼 이전에 감분되는, 명령 페치 방법.
  19. 제 18 항에 있어서,
    상기 감분은, 상기 BTAC로부터의 페치를 완료하는데 요구되는 2개 이상의 프로세싱 사이클들의 수보다 1 작은 하나 이상의 어드레스 수 만큼인, 명령 페치 방법.
  20. 명령들을 저장하기 위한 명령 캐시;
    브렌치 명령을 포함하는 상기 저장된 명령들 중 하나의 명령에 대응하는 브렌치 타겟 어드레스를 저장하기 위한 브렌치 타겟 어드레스 캐시;
    상기 명령 캐시로부터 명령들을 페치하고 상기 브렌치 타겟 어드레스 캐시로부터 상기 브렌치 타겟 어드레스를 페치하기 위한 페치 스테이지;
    상기 페치된 명령들에 따라 하나 이상의 프로세싱 기능들을 수행하기 위한 하나 이상의 후속 프로세싱 스테이지; 및
    상기 브렌치 타겟 어드레스 캐시로부터의 각각의 페치를 완료하는데 요구되는 프로세싱 사이클들의 수와 관련된 양만큼, 상기 명령 캐시로부터의 상기 명령들의 페치 이전에 상기 브렌치 타겟 어드레스 캐시로부터의 페치를 오프셋하기 위한 로직을 포함하는, 프로세서.
  21. 제 20 항에 있어서,
    상기 양은 상기 브렌치 타겟 어드레스 캐시로부터의 각각의 페치를 완료하는데 요구되는 프로세싱 사이클들의 수보다 1 작은 수인, 프로세서.
  22. 제 20 항에 있어서,
    상기 로직은, 상기 페치 스테이지가 상기 명령 캐시로부터 페치하도록 사용한 어드레스를 증분시키기 위해 상기 페치 스테이지와 관련된 로직을 포함하고,
    상기 페치 스테이지는 상기 브렌치 타겟 어드레스 캐시로부터 페치하기 위해 상기 증분된 어드레스를 사용하는, 프로세서.
  23. 제 20 항에 있어서,
    상기 페치 스테이지는, 상기 명령 캐시로부터의 페치 및 상기 브렌치 타겟 어드레스 캐시로부터의 페치 모두를 위해 명령 어드레스를 동시에 사용하고;
    상기 로직은, 상기 브렌치 명령의 어드레스를 감분시키고, 상기 브렌치 타겟 어드레스를 상기 브렌치 타겟 어드레스 캐시에 기입하도록 상기 감분된 어드레스를 사용하기 위한 로직을 포함하는, 프로세서.
  24. 제 23 항에 있어서,
    상기 감분을 위한 로직은 상기 하나 이상의 후속 프로세싱 스테이지와 관련된, 프로세서.
  25. 제 20 항에 있어서,
    상기 페치 스테이지는 다수의 파이프라인화된 프로세싱 스테이지들을 포함하는, 프로세서.
  26. 제 25 항에 있어서,
    상기 브렌치 타겟 어드레스 캐시로부터의 각각의 페치를 완료하는데 요구되는 프로세싱 사이클들의 수는 상기 파이프라인화된 프로세싱 스테이지들의 수와 동일한, 프로세서.
  27. 제 20 항에 있어서,
    상기 하나 이상의 후속 프로세싱 스테이지는,
    명령 디코딩 스테이지;
    판독 스테이지;
    명령 실행 스테이지; 및
    결과 후기입 스테이지를 포함하는, 프로세서.
  28. 명령 캐시로부터 명령들을 페치하고 브렌치 타겟 어드레스 캐시로부터의 브렌치 명령에 대응하는 브렌치 타겟 어드레스를 페치하기 위한 페치 스테이지로서, 상기 명령들 중 하나의 명령은 브렌치 명령인, 상기 페치 스테이지;
    상기 페치된 명령들에 따라 하나 이상의 프로세싱 기능들을 수행하기 위한 하나 이상의 후속 프로세싱 스테이지; 및
    상기 브렌치 타겟 어드레스 캐시로부터의 각각의 페치를 완료하는데 요구되는 프로세싱 사이클들의 수를 보상하기 위해, 상기 명령 캐시로부터의 명령들의 페치를 리드하도록 상기 브렌치 타겟 어드레스 캐시로부터의 페치를 오프셋하는 수단을 포함하는, 파이프라인 프로세서.
  29. 제 28 항에 있어서,
    상기 페치 스테이지는 다수의 파이프라인화된 프로세싱 스테이지들을 포함하는, 파이프라인 프로세서.
  30. 제 28 항에 있어서,
    상기 하나 이상의 프로세싱 스테이지는,
    명령 디코딩 스테이지;
    판독 스테이지;
    명령 실행 스테이지; 및
    결과 후기입 스테이지를 포함하는, 파이프라인 프로세서.
KR1020077022665A 2005-03-04 2006-03-03 포워드 룩킹 브렌치 타겟 어드레스 캐싱 KR20070108939A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/073,283 US20060200655A1 (en) 2005-03-04 2005-03-04 Forward looking branch target address caching
US11/073,283 2005-03-04

Publications (1)

Publication Number Publication Date
KR20070108939A true KR20070108939A (ko) 2007-11-13

Family

ID=36945389

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077022665A KR20070108939A (ko) 2005-03-04 2006-03-03 포워드 룩킹 브렌치 타겟 어드레스 캐싱

Country Status (9)

Country Link
US (1) US20060200655A1 (ko)
EP (1) EP1853997A2 (ko)
KR (1) KR20070108939A (ko)
CN (1) CN101164043A (ko)
CA (1) CA2599724A1 (ko)
IL (1) IL185593A0 (ko)
RU (1) RU2358310C1 (ko)
TW (1) TW200707284A (ko)
WO (1) WO2006096569A2 (ko)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7797520B2 (en) * 2005-06-30 2010-09-14 Arm Limited Early branch instruction prediction
EP2011018B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7917731B2 (en) * 2006-08-02 2011-03-29 Qualcomm Incorporated Method and apparatus for prefetching non-sequential instruction addresses
EP2122461A4 (en) 2006-11-14 2010-03-24 Soft Machines Inc DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES
JP5145809B2 (ja) * 2007-07-31 2013-02-20 日本電気株式会社 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
CN107092467B (zh) 2010-10-12 2021-10-29 英特尔公司 用于增强分支预测效率的指令序列缓冲器
KR101638225B1 (ko) 2011-03-25 2016-07-08 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 명령어 시퀀스 코드 블록의 실행
CN103562866B (zh) 2011-03-25 2018-03-30 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
JP5696210B2 (ja) * 2011-03-31 2015-04-08 ルネサスエレクトロニクス株式会社 プロセッサ及びその命令処理方法
WO2012162189A1 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. An interconnect structure to support the execution of instruction sequences by a plurality of engines
TWI666551B (zh) 2011-05-20 2019-07-21 美商英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9740612B2 (en) 2012-07-30 2017-08-22 Intel Corporation Systems and methods for maintaining the coherency of a store coalescing cache and a load cache
US9916253B2 (en) 2012-07-30 2018-03-13 Intel Corporation Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9678882B2 (en) 2012-10-11 2017-06-13 Intel Corporation Systems and methods for non-blocking implementation of cache flush instructions
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source 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
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
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
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
CN105210040B (zh) 2013-03-15 2019-04-02 英特尔公司 用于执行分组成块的多线程指令的方法
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
CN105247484B (zh) 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10664280B2 (en) * 2015-11-09 2020-05-26 MIPS Tech, LLC Fetch ahead branch target buffer
CN107479860B (zh) * 2016-06-07 2020-10-09 华为技术有限公司 一种处理器芯片以及指令缓存的预取方法
US10747540B2 (en) 2016-11-01 2020-08-18 Oracle International Corporation Hybrid lookahead branch target cache
US10853076B2 (en) * 2018-02-21 2020-12-01 Arm Limited Performing at least two branch predictions for non-contiguous instruction blocks at the same time using a prediction mapping
US11334495B2 (en) * 2019-08-23 2022-05-17 Arm Limited Cache eviction

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5163140A (en) * 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
US5987599A (en) * 1997-03-28 1999-11-16 Intel Corporation Target instructions prefetch cache
US6279105B1 (en) * 1998-10-15 2001-08-21 International Business Machines Corporation Pipelined two-cycle branch target address cache
US6895498B2 (en) * 2001-05-04 2005-05-17 Ip-First, Llc Apparatus and method for target address replacement in speculative branch target address cache
US6823444B1 (en) * 2001-07-03 2004-11-23 Ip-First, Llc Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap

Also Published As

Publication number Publication date
IL185593A0 (en) 2008-01-06
WO2006096569A2 (en) 2006-09-14
US20060200655A1 (en) 2006-09-07
CA2599724A1 (en) 2006-09-14
EP1853997A2 (en) 2007-11-14
CN101164043A (zh) 2008-04-16
RU2358310C1 (ru) 2009-06-10
TW200707284A (en) 2007-02-16
WO2006096569A3 (en) 2006-12-21

Similar Documents

Publication Publication Date Title
KR20070108939A (ko) 포워드 룩킹 브렌치 타겟 어드레스 캐싱
US6553488B2 (en) Method and apparatus for branch prediction using first and second level branch prediction tables
JP5410281B2 (ja) 非シーケンシャル命令アドレスをプリフェッチするための方法および装置
US20050278505A1 (en) Microprocessor architecture including zero impact predictive data pre-fetch mechanism for pipeline data memory
US7516312B2 (en) Presbyopic branch target prefetch method and apparatus
JP5209633B2 (ja) ワーキング・グローバル・ヒストリ・レジスタを備えるシステム及び方法
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
CA2659310C (en) Methods and apparatus for reducing lookups in a branch target address cache
US10747540B2 (en) Hybrid lookahead branch target cache
US20040225866A1 (en) Branch prediction in a data processing system
US7234046B2 (en) Branch prediction using precedent instruction address of relative offset determined based on branch type and enabling skipping
US20080065870A1 (en) Information processing apparatus
TWI768547B (zh) 管線式電腦系統與指令處理方法
US10318303B2 (en) Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors
JP2004505345A (ja) 分岐ターゲットバッファを有するデータプロセッサ
US9395985B2 (en) Efficient central processing unit (CPU) return address and instruction cache
WO2012132214A1 (ja) プロセッサ及びその命令処理方法
US7343481B2 (en) Branch prediction in a data processing system utilizing a cache of previous static predictions
US20060259752A1 (en) Stateless Branch Prediction Scheme for VLIW Processor
CN114546494A (zh) 管线式电脑系统与指令处理方法
JPH06301538A (ja) 条件分岐命令処理装置
KR19980084635A (ko) 분기 예측 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application