KR100708010B1 - 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼 - Google Patents

인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼 Download PDF

Info

Publication number
KR100708010B1
KR100708010B1 KR1020027006075A KR20027006075A KR100708010B1 KR 100708010 B1 KR100708010 B1 KR 100708010B1 KR 1020027006075 A KR1020027006075 A KR 1020027006075A KR 20027006075 A KR20027006075 A KR 20027006075A KR 100708010 B1 KR100708010 B1 KR 100708010B1
Authority
KR
South Korea
Prior art keywords
load
hit
data
storage
address
Prior art date
Application number
KR1020027006075A
Other languages
English (en)
Other versions
KR20020087929A (ko
Inventor
후게스윌리암에이.
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20020087929A publication Critical patent/KR20020087929A/ko
Application granted granted Critical
Publication of KR100708010B1 publication Critical patent/KR100708010B1/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/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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/608Details relating to cache mapping
    • G06F2212/6082Way prediction in set-associative cache

Landscapes

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

Abstract

본 발명의 장치는 저장 메모리 동작들에 대응하는 정보를 저장하도록 된 버퍼와 상기 버퍼에서 나타내어지는 저장들 중 하나에 적중하는 로드를 검출하는 회로부를 포함한다. 특히, 회로부는 로드 어드레스의 인덱스 부분과 버퍼에 저장된 저장 어드레스의 인덱스 부분을 비교할 수 있다. 만일 상기 인덱스들이 정합되고, 로드와 저장 모두가 상기 데이터 캐시에서 적중하면, 로드와 저장은 동일한 캐시 라인에 엑세싱한다. 만일 캐시 라인 내부의 하나 이상의 바이트들이 저장에 의해 갱신 및 로드에 의해 판독되면, 저장 데이터는 로드를 위해 포워드된다. 일 실시예에서, 회로부는 로드 및 저장 인덱스들이 정합되고 저장이 데이터 캐시에서 적중이라면, 데이터를 추론적으로 포워드한다. 이어서, 로드가 캐시에서 적중/적중실패한 것으로 결정되면, 상기 포워딩은 로드의 적중/적중실패 표시를 이용하여 검증된다. 세트 결합된 실시예들에서, 상기 포워딩의 정확성을 더 검증하기 위해 로드가 적중하는 경로는 저장이 적중하는 경로와 비교된다.

Description

인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼{STORE BUFFER WHICH FORWARDS DATA BASED ON INDEX AND OPTIONAL WAY MATCH}
본 발명은 프로세서 분야에 관한 것으로, 특히, 종속 로드(dependent load)를 위하여 저장 버퍼로부터 데이터를 포워딩하는 것에 관한 것이다.
프로세서들은 전형적으로, 실행되었지만(예를 들어, 저장 어드레스를 생성했고 저장 데이터를 가질 수 있음), 아직은 추론적(speculative)이며, 따라서 메모리(혹은 프로세서에 의해 이용되는 데이터 캐시)로 전달될 준비가 되지 않은 저장 메모리 동작들을 저장하기 위한 버퍼를 이용한다. 본원에서 사용된 바와같이, 용어 "메모리 동작"은 (비록 전송이 캐시에서 완수될 수 있지만은) 프로세서와 메모리간의 데이터 전송을 특정하는 동작으로 지칭한다. 로드 메모리 동작들은 메모리에서 프로세서로의 데이터 전송을 특정하고, 그리고 저장 메모리 동작들은 프로세서에서 메모리로의 데이터 전송을 특정한다. 로드 메모리 동작들은 본원에서 좀더 간단히 "로드들"로 지칭되고, 마찬가지로, 저장 메모리 동작들은 "저장들"로 지칭될 것이다. 메모리 동작들은 프로세서에 의해 사용되는 명령 세트에 따라 그 정의된 기능(예를 들어, 산술, 논리 등)을 수행하기 위해 메모리 피연산자(operand)에 직접적으로 엑세스하는 명령 내에 내포되거나, 상기 데이터 전송만을 수행하는 명시적(explicit) 명령일 수 있다. 일반적으로, 메모리 동작들은 상기 메모리 동작의 하나 이상의 피연산자들로부터 생성된 어드레스를 통해 관련 메모리 위치를 특정한다. 이러한 어드레스는 본원에서 일반적으로 "데이터 어드레스"로 혹은 (대응 메모리 동작이 로드 메모리 동작이면) 로드 어드레스로 또는 (대응 메모리 동작이 저장 메모리 동작이면) 저장 어드레스로 지칭될 것이다. 다른 한편으로, 명령들을 메모리 내부에 위치시키는 어드레스들은 "명령 어드레스들"로 지칭된다.
후속 로드들이 실행될 때 저장들이 버퍼에서 큐잉(queuing)되기 때문에, 프로세서는 전형적으로 로드에 의해 판독되는 하나 이상의 바이트들을 갱신하는 저장이 버퍼에 큐잉되는지를 결정하기 위해(즉, 로드가 저장에 종속적이거나 저장에 "적중(hits)"하는지를 결정하기 위해) 버퍼를 검사한다. 일반적으로, 상기 로드 어드레스는 로드가 저장에 적중하는지를 판단하기 위해 저장 어드레스와 비교된다. 만일 적중이 검출되면, 저장 데이터가 로드에 대한 캐시 데이터 대신에 포워딩될 수 있다. 따라서, 캐시로부터 데이터를 엑세스하는데 필요한 시간과 동일 시간 또는 그 이하의 시간에서 적중을 검출하는 것이 바람직하다.
로드 지연(load latency)(예를 들어, 로드의 실행으로부터 로드에 의해 판독되는 데이터를 사용할 수 있을 때까지의 시간 )의 최소화는 많은 프로세서들의 성능에 대한 열쇠가 된다. 불행하게도, 어드레스들을 비교하는 것은 상기 어드레스들이 비교적 큰 수의 비트들(예를 들어, 32비트, 혹은 32비트 이상, 최대 64비트가 일반적임)을 포함하기 때문에 시간-소모적인 동작일 수 있다. 따라서, 로드들이 버퍼의 저장들에 적중하는지를 판단하는데 요구되는 시간량을 줄이는 것은, 이러한 감소가 로드 지연을 줄일 수 있기 때문에 프로세서의 성능 증가를 가져올 수 있다. 대안적으로, 소정의 주기 시간과 소정의 로드 지연에 대한 시간적 제약을 만족시키는 것은 만일 상기 어드레스들을 비교하는데 사용되는 시간의 양이 줄어든다면 쉬워질 것이다.
가상 어드레싱 및 어드레스 변환의 사용은 버퍼 내의 저장 어드레스들에 대한 로드 어드레스의 검사 동안 경과되는 시간량을 줄여야하는 부가적인 문제를 생성할 것이다. 가상 어드레싱이 사용되는 때에, 로드들과 저장들을 실행함으로써 생성되는 데이터 어드레스는 (예를 들어, 페이징 변환 방식을 통해) 물리적 어드레스들로 변환되는 가상 어드레스이다. 다중 가상 어드레스들은 소정의 물리적 어드레스에 대응하며("에일리어싱(aliasing)"으로 지칭됨), 따라서 로드 및 저장들의 물리적 데이터 어드레스들은 상기 버퍼로부터의 정확한 포워딩(또는 그 결여)을 보장하기 위해 비교된다. 불행하게, 로드의 물리적 어드레스는 전형적으로 변환 룩어사이드 버퍼(Translation lookaside buffer:TLB)로부터 생성됨에 따라 캐시 액세스가 거의 완료될 때까지 종종 이용가능하지 않는바, 이는 빠르지만 정확한 방식으로 버퍼의 저장들에 대한 적중을 검출하는 문제를 더욱 악화시킨다. 유럽특허 제 0 871 109호는 슈퍼 스칼라 프로세서를 설명하는데, 저장 명령과 관련된 데이터가 로드 명령으로 포워딩되고, 이로인해 로딩 명령은 저장되거나 버려지지 않고 실행을 계속할 수 있다.
상기 개관된 문제들은 본원에서 설명되는 바와 같이 로드들을 위해 저장 데이터를 포워딩하기 위한 장치에 의해 대부분 해소된다. 상기 장치는 저장 메모리 동작들에 대응하는 정보를 저장하도록 구성된 버퍼와 상기 버퍼에서 나타내어지는 상기 저장들 중 하나에 적중하는 로드를 검출하는 회로부를 포함한다. 특히, 회로부는 로드 어드레스의 인덱스 부분과 버퍼에 저장된 저장 어드레스의 인덱스 부분을 비교할 수 있다. 만일 상기 인덱스들이 정합되고, 로드와 저장 모두가 데이터 캐시에서 적중하면, 로드와 저장은 동일한 캐시 라인을 엑세싱한다. 만일 상기 캐시라인 내부에서 하나 이상의 바이트들이 저장에 의해 갱신되고 로드에 의해 판독되면, 저장 데이터는 로드를 위해 포워딩된다. 로드와 저장 인덱스들의 비교적으로 작은 비교는 빠르게 완료될 수 있는 이점이 있다. 부가적으로, 상기 인덱스 중 비록 전부는 아니지만은 대부분은 전형적으로 물리적(변환되지 않은) 비트들이기 대문에, 상기 비교는 상기 비교의 정확도에 큰 영향을 주지 않으면서 상기 로드 어드레스가 변환되기 이전에 수행될 수 있다.
일 실시예에서, 회로부는 로드 및 저장 인덱스들이 정합되고 저장이 상기 데이터 캐시에서 적중이라면, 데이터를 추론적으로 포워딩한다. 이어서, 로드가 캐시에서의 적중/적중실패(miss)한 것으로 판단되면, 상기 포워딩은 로드의 적중/적중실패 표시를 이용하여 검증된다. 세트 결합된 실시예들에서, 상기 포워딩의 정확성을 더 확인하기 위해 로드가 적중하는 경로(way)는 저장이 적중하는 경로와 비교된다.
대체로 말하면, 일 장치가 제공된다. 상기 장치는 버퍼 및 상기 버퍼에 결합된 회로부를 포함한다. 상기 버퍼는 복수의 엔트리들을 포함하는데, 여기서 상기 복수의 엔트리들 각각은 (i) 저장 메모리 동작의 저장 어드레스의 적어도 인덱스 부분과, (ii) 상기 저장 메모리 동작이 데이터 캐시에서 적중하는지 여부의 적중 표시와, 그리고 (ⅲ) 상기 저장 메모리 동작에 대응하는 저장 데이터를 저장한다. 상기 회로부는 (i) 상기 데이터 캐시를 프로빙(probing)하는 로드 메모리 동작의 로드 어드레스의 인덱스 부분과, 그리고 (ii) 상기 로드 메모리 동작이 상기 데이터 캐시에서 적중하는지 여부를 나타내는 로드 적중 신호를 수신하도록 연결된다. 상기 회로부는 상기 데이터 캐시를 프로빙하는 로드 메모리 동작의 로드 어드레스의 인덱스 부분과, 상기 로드 메모리 동작이 상기 데이터 캐시에 적중하는지 여부를 나타내는 로드 적중 신호를 수신하도록 연결되며, 여기서 상기 회로부는 복수의 엔트리들 중 제 1 엔트리에 저장된 인덱스 부분이 상기 로드 어드레스의 인덱스 부분과 정합됨에 응답하여, 그리고 또한 적중을 나타내는 상기 제 1 엔트리에서의 적중 표시 및 적중을 나타내는 로드 적중 신호에 응답하여, 저장 데이터가 상기 제 1 엔트리로부터 포워딩 되게 한다.
부가적으로, 상기 설명된 장치를 포함하는 프로세서가 제공된다.
또한, 일 방법이 제공된다. 데이터 캐시가 로드 어드레스로 프로빙된다. 상기 로드 어드레스의 인덱스 부분은 버퍼에 저장된 저장 어드레스의 인덱스 부분과 비교된다. 상기 저장 어드레스에 대응하는 저장 데이터는 상기 로드 어드레스에 대응하는 로드 메모리 동작을 위해 포워딩된다. 상기 포워딩은 상기 로드 어드레스의 인덱스 부분이 상기 저장 어드레스의 인덱스 부분과 정합되는지를 결정하는 비교에 응답하여, 그리고 또한 데이터 캐시에 적중하는 로드 어드레스 및 저장 어드레스 모두에 응답하여 이루어진다.
본 발명의 다른 목적들과 이점들은 첨부한 도면들을 참조로 하여 다음의 상세한 설명으로부터 명백해질 것이다.
도 1은 저장 큐의 일실시예에 대한 블록도이다.
도 2는 프로세서의 일실시예에 대한 블록도이다.
도 3은 도 2에 예시된 디코드 유닛, 예약 스테이션, 기능 유닛, 재배열 버퍼, 로드/저장 유닛, 데이터 캐시, 그리고 버스 인터페이스 유닛의 일 실시예를 예시하는 블록도인데, 이들 간의 상호결합의 일 실시예를 강조한다.
도 4는 도 2와 3에 도시한 로드/저장 유닛의 일 실시예에 대한 블록도이다.
도 5는 로드/저장 유닛과 데이터 캐시의 일실시예의 일부에 대한 블록도이다.
도 6은 도 5에 도시된 제어 회로의 일부를 예시하는 블록도이다.
도 7은 일 실시예에 따라서, 도 4에 도시되는 LS1버퍼로부터 선택된 메모리 동작들에 해당하는 타이밍 도이다.
도 8은 일 실시예에 따라서, 도 4에 도시되는 LS2버퍼로부터 선택된 메모리 동작들에 해당하는 타이밍 도이다.
도 9는 저장 어드레스에 적중하는 로드 어드레스의 검출 동안, 도 6에 도시된 제어 회로의 일실시예의 동작을 예시하는 흐름도이다.
도 10은 로드 어드레스가 저장 어드레스에 적중하는지를 검증하는 동안, 도 6에 도시된 제어 회로의 일실시예의 동작을 예시하는 흐름도이다.
도 11은 컴퓨터 시스템의 제 1실시예에 대한 블록도이다.
도 12는 컴퓨터 시스템의 제 2실시예에 대한 블록도이다.
비록 본 발명에 대한 다양한 변경들과 대안적 형태들이 가능하지만은, 본 발명의 특정 실시예들만을 도면들에서 예제로써 나타냈으며, 이들에 대해 자세히 설명하기로 한다. 그러나, 상기 도면들 및 이들에 대한 상세한 설명은 개시된 특정 형태로 본 발명을 제한하고자 함이 아니며, 첨부되는 청구항들에의해 정의되는 본 발명의 사상과 범위에 속하는 모든 변형들, 균등물 및 대체물들을 포괄하고자 함이라는 것을 이해해야 할 것이다.
도 1에서, 저장 큐(400), 적중 제어 회로부(402), 및 비교기들(404와 406)의 일 실시예의 블록도가 도시된다. 도 1의 장치는 저장들에 관련된 정보를 이 저장들이 데이터 캐시(그리고/또는 메모리)로 전달될 때까지 유지하기 위해 데이터 캐시를 갖는 프로세서에서 사용되거나, 상기 저장들에 적중하는 로드들을 검출하고 상기 로드를 위해 저장 큐(400)로부터 저장 데이터를 포워딩하기 위해서도 사용될 수 있다. 다른 실시예들이 가능하며, 창안될 수 있다. 도 1의 실시예에서, 저장 큐(400)는 실행되는 저장들에 대응하는 저장 정보를 수신하도록 연결되며, 이는 적중 제어 회로부(402)와 비교기들(404와 406)과도 또한 연결된다. 비교기들(404와 406)은 또한 적중 제어 회로부(402)와 연결된다. 적중 제어 회로부(402)는 포워드 신호와 취소 포워드 신호를 제공하도록 연결된다.
대체로 말하면, 도 1의 장치는 저장 큐(400)에 나타내어지는 저장에 적중하는 로드를 검출하고,(상기 데이터 캐시로부터의 캐시 데이터 대신에) 상기 로드를 위해 저장 큐(400)로부터 상기 저장에 대응하는 데이터를 포워딩하도록 구성된다. 전체 로드 어드레스와 저장 큐(400)에 저장된 저장 어드레스를 비교하는 대신, 상기 장치는 로드 어드레스의 인덱스 부분("로드 인덱스")과 상기 저장 어드레스의 인덱스 부분("저장 인덱스")을 비교한다. 어드레스의 일부가 비교되기 때문에, 상기 비교는 좀더 빠르게 수행될 수 있으며, 이로 인해 로드가 저장 큐(400)에 나타내어지는 저장에 적중하는지를 검출하는 시간의 양이 줄어든다. 만일 로드와 저장 모두가 데이터 캐시에서 적중하고 인덱스 부분들이 정합되면, 로드 및 저장은 데이터 캐시의 동일 캐시 라인에 엑세스할 수 있다. 만일 데이터 캐시가 세트 결합적이라면, 저장에 의해 적중되는 경로와 로드에 의해 적중되는 경로의 비교가 로드와 저장이 동일 캐시 라인을 엑세스하는지를 결정하기 위해 사용될 수 있다. 만일 로드가 적중이고 저장이 적중실패(또는 그 반대의 경우)라면, (인덱스 부분 중 어떠한 것도 가상적이지 않다고 가정하면) 로드 및 저장은 동일 캐시 라인을 엑세스하지 않으며, 이로 인해 로드는 저장에 적중되지 않고 저장 데이터는 저장 큐(400)로부터 포워딩될 필요가 없다. 만일 로드 및 저장 모두가 적중실패이라면, 로드 및 저장은 동일 캐시 라인에 엑세스할 수 있다. 그러나, 데이터 캐시는 만일 로드가 적중실패이면 로드를 위해 캐시로부터 데이터를 포워딩하지 않으며, 이로 인해 저장 큐(400)로부터 저장 데이터는 포워딩될 필요가 없다. 로드는 데이터 캐시가 로드에 의해 판독되는 캐시 라인으로 채워진 이후(채워진 데이터를 캐시에 기록하는 동안) 재시도되며, 캐시 라인으로의 임의의 저장들은 캐시가 채워지는 동안 적중하게 될 것이다. 그래서, 저장에 적중하는 로드는 로드의 재시도 중에 검출될 수 있다.
가상 어드레스에서 물리적 어드레스로의 변환들은 전형적으로 페이지 입상(page granularity)을 통해 수행된다. 최하위 어드레스 비트들은 상기 페이지로 오프셋을 형성하고 상기 변환에 의해서 변형되지 않는다. 최상위 어드레스 비트들은 가상에서 물리적으로 변환된다. 예를 들어, 32비트 가상 어드레스와 4킬로바이트 페이지 크기를 이용한 실시예에서, 최하위 12 비트들은 페이지 오프셋이고, 최상위 20비트들이 변환된다. 다른 페이지 크기들이 고려될 수 있다. 전형적으로, (전부는 아니지만은) 대부분의 어드레스 인덱스 부분은 상기 페이지 오프셋 내의 비트들이고, 이로 인해 가상에서 물리적 어드레스로의 변환 중에도 변형되지 않는다. 따라서, 저장에 대한 로드의 적중 검출의 정확도에 대한 에일리어싱 영향은 줄어들거나 없어진다. 또한, 상기 가상 로드 어드레스는 비교에 사용될 수 있고, 그리고, 저장 큐(400)는 (메모리 등에 제공하기 위해 사용될 수 있는) 물리적 저장 어드레스를 저장할 수 있다. 만일 상기 인덱스 부분의 하나 이상의 비트들이 가상에서 물리적으로의 변환에 의해 변형되는 경우, 상기 가상 비트들 역시 저장될 수 있다. 따라서, 가상 로드 어드레스들과의 비교를 위해 가상 저장 어드레스들(예를 들어, 변환되며, 인덱스의 일부이기도 한 이들의 비트들)을 저장하는 추가 저장부는 최소화될 수 있다.
도 1에 예시된 실시예는 세트 결합된 데이터 캐시를 이용하는 프로세서에서 사용될 수 있다. 직접-맵핑된 데이터 캐시를 이용하는 실시예들은 경로 표시들과 관련 비교기들을 제거할 수 있다. 특히, 저장 큐(400)는 다중 엔트리들을 포함할 수 있다. 예를 들어, 엔트리들(408A 및 408B)이 도 1에 도시되며, 저장 큐(400)는 부가적인 엔트리들(미도시)을 포함할 수 있다. 각 엔트리(408)는 저장 메모리 동작에 대응하는 정보를 저장하도록 구성된다. 저장 큐(400)는 상기 저장의 실행시에 저장에 대응하는 정보를 수신할 수 있고, 상기 저장이 퇴거(retire)되고 상기 데이터 캐시 및/또는 메모리로 전달되는 이후까지 상기 정보를 보유할 수 있다. 예시적인 실시예에서, 엔트리는 유효 표시(V), 적중 표시(H), 퇴거 표시(R), 어드레스 태그 부분(ADDR-태그), 어드레스 인덱스 부분(ADDR-인덱스), 오프셋 및 크기 정보(오프셋 및 크기), 경로 표시(경로), 및 데이터(데이터)를 포함할 수 있다. 상기 유효 표시는 상기 엔트리가 유효한지 여부(예를 들어, 저장이 엔트리의 정보로 나타내어지는 지의 여부)를 나타낸다. 적중 표시는 저장이 데이터 캐시에서 적중인지 여부를 표시한다. 퇴거 표시는 저장이 퇴거되었는지(그리고 이로 인해 데이터 캐시 및/또는 메모리로 전달되기에 적당한지) 여부를 표시한다. 모든 적절한 표시들이 상기 유효, 적중, 그리고 퇴거 표시들에 사용될 수 있다. 예를 들어, 각 표시는 세트되면 하나의 상태를 나타내고, 소거되면 다른 상태를 나타내는 비트를 포함할 수 있다. (이하 도 5와 6에 도시되는 실시예의 논의를 포함하는) 이러한 논의의 나머지는 유효, 적중, 그리고 퇴거 비트들로서의 유효, 적중, 및 퇴거 표시들로서 간주될 것이다. 그러나, 다른 실시예들은 상기 인코딩에 역행하거나 다른 인코딩들을 사용할 수 있다. 상기 어드레스 태그 부분은 상기 데이터 캐시에 의해 태그로서 저장되는 어드레스의 일부인 반면, 어드레스 인덱스 부분은 데이터 캐시에 의해 인덱스로서 사용되는 부분이다. 오프셋 및 크기 정보는 상기 저장에 의해 상기 캐시 라인 내부의 어떤 바이트들이 갱신되는지를 나타낸다. 경로 표시는 만일 적중 비트가 세트되면(저장 적중을 나타냄), (세트 결합된 실시예들에 대해서) 상기 데이터 캐시의 어느 경로에서 상기 저장이 적중되는지를 나타낸다. 마지막으로, 데이터는 데이터 캐시 및/또는 메모리로 전달되는 저장 데이터이다.
비교기(404)는 저장 큐(400)의 각 엔트리로부터 저장 인덱스를 수신하기 위해 연결되고, 실행되는 로드의 로드 인덱스를 수신하기 위해 연결된다. 비교기(404)는 로드 및 저장 인덱스들을 비교하고, 만일 정합이 검출되면, 적중 제어 회로부(402)로 신호를 어서팅(asserting)한다. 따라서, 비교기(404)는 저장 큐(400)의 각 엔트리에 대한 비교 회로를 나타낼 수 있으며, 각 비교기 회로는 출력 신호를 적중 제어 회로부(402)에 제공할 수 있다. 유사하게는, 비교기(406)는 저장 큐(400)의 각 엔트리에 저장된 경로 표시를 수신하기 위해 연결되고, 로드 경로 표시를 수신하기 위해 연결된다. 비교기(406)는 로드 및 저장 경로 표시들을 비교하고, 만일 정합이 검출되면, 적중 제어 회로부(402)로 신호를 어서팅한다. 따라서, 비교기(406)는 저장 큐(400)의 각 엔트리에 대한 비교 회로를 나타낼 수 있으며, 각 비교기 회로는 출력 신호를 적중 제어 회로부(402)에 제공할 수 있다. 주목할 사항으로, 비교기들(404와 406)은 필요한 경우 내용-어드레스가능한 메모리(CAM)로서 저장 큐(400)에 통합될 수 있다.
적중 제어 회로(402)는 각 엔트리에 대한 적중 비트와 실행되는 상기 로드에 대한 적중 신호를 수신하기 위해 연결될 수 있다. 만일 로드 인덱스와 저장 큐(400)에 나타내어지는 저장의 저장 인덱스가 정합되고, 로드 및 저장이 적중이며, 그리고 로드의 경로 표시들과 저장이 정합되면, 적중 제어 회로부(402)는 로드를 위해 저장 큐(400)로부터 데이터가 포워딩되도록 한다. 특히, 적중 제어 회로부(402)는 적중되는 엔트리의 전체 수의 표시를 저장 큐(400)에 신호하고, 저장 큐(400)는 데이터 캐시로부터의 캐시 데이터 대신 포워딩하기 위해 상기 엔트리로부터의 데이터를 제공한다.
주목할 사항으로, 로드 어드레스는 데이터 캐시에 대한 로드의 프로브의 시작에서 비교를 위해 이용될 수 있고, 로드의 적중 신호는 데이터 캐시에 대한 프로브가 거의 종료될 때(예를 들어, 로드 어드레스는 변환되고 캐시 태그들에 대해 비교된 이후) 까지 결정되지 않을 수 있다. 부가적으로, 로드에 대한 경로 표시 역시 적중 신호가 결정되기 전까지 결정되지 않을 수 있다. 따라서, 본 실시예의 적중 제어 회로(402)는 로드 인덱스와 저장 인덱스의 정합과 저장이 적중이라는 저장 표시의 적중 비트에 응답하여 저장 큐(400)로부터의 데이터 포워딩을 신호하도록(그리고 저장 큐(400)가 데이터를 포워드하도록) 구성된다. 적중 제어 회로(402)는 데이터의 포워딩을 신호하기 위해 도 1에 도시된 포워드 신호를 어서팅할 수 있다. 이어서, 로드를 위해 적중 신호와 경로 표시가 결정될 수 있다. 적중 제어 회로부(402)는 로드 경로 표시와 저장 경로 표시를 비교하고, 적중 신호가 적중을 표시하도록 어서팅되는지를 검증함으로써 로드가 저장에 적중함을 검증할 수 있다. 만일 경로 표시들이 정합되고 로드의 적중 신호가 적중을 나타내면, 적중 제어 회로부(402)는 포워딩이 정확하다고 결정한다. 반면에, 만일 포워딩이 정확하지 않다면, 적중 제어 회로부(402)는 부정확한 포워딩의 포워드된 저장 데이터를 수신한 프로세서의 부분들에 알리기 위해 도 1에 도시되는 취소 포워드 신호를 어서팅할 수 있다. 일 특정 실시예에서, 데이터의 포워딩은 제 1클럭 주기에서 수행되며, 포워딩의 취소는 제 1 클럭 주기에 후속하는 제 2클럭 주기에서 수행될 수 있다.
상기 논의는 실행되는 단일 로드에 대해 도 1에 도시된 장치의 동작을 설명한 것이다. 그러나, 실시예들은 다중 로드들이 동시적으로 실행되는 경우에서도 고려될 수 있다. 각 로드는 상기 설명된 바와 같이 동시적으로 처리될 수 있다.
로드와 저장 인덱스들(그리고 데이터 어드레스들에 의해 적중되는 경로들)의 비교는 로드와 저장이 동일 캐시 라인을 엑세스하는지를 결정할 수 있다. 부가적인 정보가 저장이 로드에 의해 판독되는 적어도 하나의 바이트를 갱신하는지를 결정하기 위해 사용될 수 있다. 예를 들어, 로드 및 저장에 의해 영향받는 어드레스와 크기의 오프셋 부분(즉, 바이트들의 수)이 사용될 수 있다. 오프셋 및 크기 정보는 설계 선택에 따라서 임의의 적절한 포맷으로 제공되고 인코딩될 수 있다. 예를 들어, 오프셋 및 크기 정보는 캐시 라인의 각 바이트에 대해 한 비트를 가지는 바이트 인에이블 마스크(byte enable mask)를 포함할 수 있다. 만일 비트가 세트되면, 해당 바이트가 엑세스된다. 로드 및 저장에 대한 바이트 인에이블 마스크의 각 비트는 만일 상기 바이트가 로드에 의한 판독과 저장에 의한 판독 모두가 되는지를 결정하기 위해 함께 AND연산될 수 있다. 바이트 인에이블 마스크는 캐시 라인의 일부(예를 들어, 만일 캐시가 캐시 라인 당 다중 뱅크들을 가지면, 하나의 뱅크)에 대해 생성될 수 있고, 그리고 상기 뱅크를 선택하는데 사용되는 오프셋의 일부는 바이트 인에이블 마스크 비트들을 AND연산하는 것에 부가적으로 로드 및 저장 어드레스들 사이에서 비교될 수 있다. 상기 로드 및 저장 어드레스들의 오프셋 부분은 상기 인덱스 비교에 부가하여 비교기(404)를 이용하여 비교될 수 있다. 적중 제어 회로(402)는 로드를 위해 저장 큐(400)에 저장되는 데이터의 포워딩을 유발하는지 여부를 결정하기 위해 (상기 설명된 인덱스 비교들, 적중 비트들, 그리고 경로 표시들에 부가하여) 오프셋 및 크기 정보를 이용할 수 있다.
주목할 사항으로, 저장 큐(400)의 하나 이상의 엔트리는 로드의 실행 중 적중될 수 있다. 적중 제어 회로부(402)는 적중된 엔트리들에 해당하는 저장들 중 프로그램 순서에서 가장 최신(youngest)(가장 최근에 실행된) 저장을 결정하고 엔트리로부터 데이터를 포워딩할 수 있다. 더 주목할 사항으로, 로드에 의해 판독되는 하나 이상의 바이트들은 로드에 의해 판독되는 하나 이상의 다른 바이트들을 위해서 로드에 의한 저장 적중에 의해 갱신되지 않을 수 있다. 이러한 경우들에 있어서, 데이터 캐시는 로드에 의해 판독되는 바이트들을 제공하기 위해서 캐시 데이터와 저장 데이터를 병합(merging)할 수 있다. 만일 다중 저장들이 로드에 의해 판독되는 바이트들과 상이한 바이트들을 제공한다면, 로드는 퇴거되고 재시도될 수 있다. 다중 저장들 중 하나 이상이 퇴거되고 데이터 캐시로 전달되며, 이러한 저장들에 의해 갱신되고 로드에 의해 판독되는 바이트들은 데이터 캐시로부터 제공되어질 수 있다. 대안적으로, 도 1의 장치는 로드 데이터를 제공하기 위해 상이한 저장들로부터의 바이트들을 병합할 수 있다. 다른 실시예들은 필요하다면, 상기 시나리오들을 다른 방식들로 처리할 수 있다.
주목할 사항으로, 비교기(406)가 저장 큐(400)에 저장되는 경로 표시들을 로드의 경로 표시와 비교하는 것으로 도시되었지만, 대안적인 실시예는 로드를 위한 데이터를 포워딩하는데 사용되는 엔트리로부터 경로 표시를 판독하고(여기서 상기 포워딩은 인덱스 비교와 상기 데이터 캐시의 저장 적중을 기반으로 함), 그리고 판독되는 경로 표시는 로드와 저장 적중이 동일한 경로라는 것을 검증하기 위해 로드 경로 표시와 비교될 수 있다.
본원에서 사용되는 바와 같이, 어드레스의 인덱스 부분(또는 간단히 "인덱스")은 그 어드레스에 해당하는 데이터를 저장하는데 적절한 하나 이상의 캐시 엔트리들을 선택하는데 사용된다. 부가적으로, 데이터 어드레스는 만일 데이터 어드레스에 의해 식별되는 데이터가 데이터 캐시에 저장되는 경우, 데이터 캐시에 "적중한다." 데이터 어드레스는 만일 데이터 캐시에 의해 저장되는 데이터 어드레스에 의해 식별되는 데이터가 데이터 캐시에 있으면 "적중 실패한다." 부가적으로, 세트 결합된 데이터 캐시는 소정의 인덱스에 해당하는 캐시 라인을 저장하는데 적당한 다중 캐시 엔트리들을 포함한다. 각 엔트리는 그 인덱스에 대해 상이한 경로이다.
이하에서, 도 2는 로드/저장 유닛 내부의 저장 큐(400)를 이용한 프로세서의 예시적인 실시예를 보인것이다. 대안적으로, 프로세서와 로드/저장 유닛은 도 4-6에 대해 설명되는 큐잉 구조를 사용할 수 있다. 도 1의 장치 또는 도 4-6의 실시예 중 하나를 이용할 수 있는 다른 프로세서 실시예들 역시 고려될 수 있다.
프로세서 개요
도 2에 있어서, 프로세서(10)의 일 실시예의 블록도가 도시된다. 다른 실시예들도 가능하며 고려될 수 있다. 도 2에 도시된 바와 같이, 프로세서(10)는 프리패치/프리디코드 유닛(12), 분기 예측 유닛(14), 명령 캐시(16), 명령 정렬 유닛(18), 다수의 디코드 유닛들(20A-20C), 다수의 예약 스테이션들(22A-22C), 다수의 기능 유닛들(24A-24C), 로드/저장 유닛(26), 데이터 캐시(28), 레지스터 파일(30), 재배열 버퍼(32), MROM 유닛(34), 및 버스 인터페이스 유닛(37)을 포함한다. 여기서 문자가 뒤따르는 특정한 참조 번호로 언급되는 구성요소들은 단지 그 참조번호에 의해 포괄적으로 간주될 수 있다. 예를 들어, 디코드 유닛들(20A-20C)은 디코드 유닛들(20)로 포괄하여 표기될 수 있다.
프리패치/프리디코드 유닛(12)은 명령들을 수신하기 위해 버스 인터페이스 유닛(37)과 연결되고, 명령 캐시(16) 및 분기 예측 유닛(14)과도 연결된다. 유사하게는, 분기 예측 유닛(14)은 명령 캐시(16)와 연결된다. 또한, 분기 예측 유닛(14)은 디코드 유닛들(20)과 기능 유닛들(24)과도 연결된다. 명령 캐시(16)는 MROM 유닛(34)과 명령 정렬 유닛(18)과도 연결된다. 명령 정렬 유닛(18)은 또한 디코드 유닛들(20)과 연결된다. 각 디코드 유닛들(20A-20C)은 로드/저장 유닛(26)과 개별적인 예약 스테이션들(22A-C)과 연결된다. 예약 스테이션들(22A-22C)은 개별적인 기능 유닛들(24A-C)과도 연결된다. 부가적으로, 디코드 유닛들(20)과 예약 스테이션들(22)은 레지스터 파일(30) 및 재배열 버퍼(32)와 연결된다. 기능 유닛들(24)은 로드/저장 유닛(26), 레지스터 파일(30), 그리고 재배열 버퍼(32)와도 연결된다. 데이터 캐시(28)는 로드/저장 유닛(26) 및 버스 인터페이스 유닛(37)과 연결된다. 버스 인터페이스 유닛(37)은 L2 인터페이스를 거쳐 L2 캐시 및 버스에 연결된다. 마지막으로, MROM 유닛(34)은 디코드 유닛(20)과 연결된다.
명령 캐시(16)는 명령들을 저장하기 위해 제공되는 고속 캐시 메모리이다. 명령들은 명령 캐시(16)로부터 패치되고 디코드 유닛들(20)로 디스패치된다. 일 실시예에서, 명령 캐시(16)는 64바이트 라인들(한 바이트는 8비트들로 구성됨)을 가지는 양방향 세트 결합된 구성으로 최대 64킬로바이트의 명령들을 저장할 수 있도록 구성된다. 대안적으로, 다른 바람직한 구성 및 크기가 적용될 수 있다. 예를 들어, 명령 캐시(16)는 전체 결합된, 세트 결합된 혹은 직접 맵핑된 구성으로서 실시될 수 있다는 것에 주목하기 바란다.
명령들은 프리패치/프리디코드 유닛(12)을 통해 명령 캐시(16)에 저장된다.명령들은 프리패치 방식에 따라 명령 캐시(16)로부터 요청되기 전에 프리패치될 수 있다. 다양한 프리패치 방식들이 프리패치/프리디코드 유닛(12)에 의해 이용될 수 있다. 프리패치/프리디코드 유닛(12)이 명령들을 명령 캐시(16)로 전송하면, 프리패치/프리디코드 유닛(12)은 명령들의 각 바이트에 대해 3개의 프리디코드 비트들: 시작 비트, 종료 비트, 및 기능 비트를 생성한다. 프리디코드 비트들은 각 명령의 경계들을 지시하는 태그들을 형성한다. 프리디코드 태그들은 또한 소정의 명령이 디코드 유닛들(20)에 의해 직접 디코딩될 수 있는지, 혹은 상기 명령이, MROM 유닛(34)에 의해 제어되는 마이크로코드 절차를 호출함으로써 실행되는 지와 같은 부가적인 정보를 전달할 수 있는데, 이에 대해서는 하기에서 상세히 설명하기로 한다. 또한, 프리패치/프리디코드 유닛(12)은 분기 명령들을 검출하고, 분기 명령들에 해당하는 분기 예측 정보를 분기 예측 유닛(14)에 저장하도록 구성될 수 있다. 다른 실시예들은 임의의 적절한 프리디코드 방식을 이용할 수 있다.
가변 바이트 길이 명령 세트를 이용하는 프로세서(10)의 한 실시예에 있어서 프리디코드 태그들의 인코딩에 관해 다음에 설명될 것이다. 가변 바이트 길이 명령 세트는 상이한 명령들이 상이한 수의 바이트들을 점유하는 명령 세트이다. 프로세서(10)의 일 실시예에 의해 이용되는 예시적 가변 바이트 길이 명령 세트는 x86 명령 세트이다.
예시적 인코딩에서, 소정의 바이트가 명령의 제 1바이트인 경우, 상기 바이트에 대한 시작 비트가 세트된다. 만일 상기 바이트가 명령의 최종 바이트인 경우, 바이트에 대한 종료 비트가 세트된다. 디코드 유닛들(20)로 직접 디코딩되는 명령들은 "고속 경로" 명령들로 간주된다. 일 실시예에 따르면, 나머지 x86 명령들은 MROM 명령들로 간주된다. 고속 경로 명령들에 있어서, 기능 비트는 명령들에 포함되는 각 접두 바이트에 대해 세트되고, 다른 바이트들에 대해 클리어된다. 대안적으로, MROM 명령들에 대해서, 기능 비트는 각 접두 바이트에 대해 클리어되고 다른 바이트들에 대해 세트된다. 이런 타입의 명령은 종료 바이트에 해당하는 기능 비트를 검사함으로써 결정될 수 있다. 만일 기능 비트가 클리어되면, 명령은 고속 경로 명령이 된다. 반대로, 만일 기능 비트가 세트되면, 명령은 MROM 명령이 된다. 이로 인해, 명령의 오피코드(opcode)는 명령어 내에 직접 위치될 수 있는데, 이는 명령의 제 1클리어 기능 비트와 조합된 바이트로서, 디코드 유닛들(20)에 의해 직접 디코딩된다. 예를 들어, 2개의 접두 바이트들을 갖는 고속 경로 명령, Mod R/M 바이트, 및 직접(immediate) 바이트는 다음과 같은 시작, 종료 및 기능 비트들을 가질 수 있다.
기능 비트들 10000
종료 비트들 00001
기능 비트들 11000
MROM 명령들은 디코드 유닛들(20)로 디코딩되기에 너무 복잡한 것으로 결정되는 명령들이다. MROM 명령들은 MROM 유닛(34)을 호출하여 실행된다. 특히, MROM 명령을 만나면, MROM 유닛(34)은 바람직한 동작을 달성하기위해서 상기 명령을 정의된 고속 경로 명령들의 하부셋으로 구분해석(parse) 및 전달(issue)한다. MROM 유닛(34)은 고속 경로 명령들의 하부셋을 디코드 유닛들(20)에 전송한다.
프로세서(10)는 다음의 조건 분기 명령들에 후속하는 명령을 추론적으로 패치하기 위해서 분기 예측을 이용할 수 있다. 분기 예측 유닛(14)은 분기 예측 연산들을 수행하기 위해 포함된다. 일 실시예에서, 분기 예측 유닛(14)은 최대 두개의 분기 타겟 어드레스들과 명령 캐시(16)에서 한 캐시 라인의 각 16바이트 부분당 대응 채택(taken)/비채택(not taken) 예측들을 캐시하는 분기 타겟 버퍼를 이용한다. 예를 들어, 분기 타겟 버퍼는 2048 엔트리들 또는 다른 적당한 수의 엔트리들로 구성된다. 프리패치/프리디코드 유닛(12)은 특정 라인이 프리디코드되는 경우 초기 분기 타겟들을 결정한다. 캐시 라인 내부에서 명령들을 수행하기 때문에 캐시 라인에 해당하는 분기 타겟들이 후속적으로 갱신된다. 명령 캐시(16)는 패치되는 명령 어드레스의 표시를 제공하며, 이로인해 분기 예측 유닛(14)은 분기 예측을 구성하기위해 어떤 분기 타겟 어드레스들을 선택할지 결정할 수 있다. 디코드 유닛들(20)과 기능 유닛들(24)은 분기 예측 유닛(14)에 갱신 정보를 제공한다. 디코드 유닛들(20)은 분기 예측 유닛(14)에 의해 예측되지 않는 분기 명령들을 검출한다. 기능 유닛(24)은 분기 명령들을 실행하고, 예측된 분기 방향이 부정확한 지를 결정한다. 분기 방향은 "채택"으로 될 수 있는데, 이때, 후속 명령들은 분기 명령의 타겟 어드레스로부터 패치된다. 반대로, 분기 방향은 "비 채택"으로 될 수 있는데, 이때, 후속 명령들은 분기 명령의 연속적 메모리 위치에서 패치된다. 잘못 예측된 분기 명령이 검출되면, 예측 실패된 분기에 대한 후속 명령들은 프로세서(10)의 다양한 유닛들로부터 버려진다. 대안적인 구성에 있어서, 분기 예측 유닛(14)은 디코드 유닛들(20)과 기능 유닛들(24) 대신 재배열 버퍼(32)와 연결될 수 있고, 재배열 버퍼(32)로부터 예측 실패된 분기 정보를 수신할 수 있다. 다양하고 적절한 분기 예측 알고리즘들이 분기 예측 유닛(14)에 의해 이용될 수 있다.
명령 캐시(16)로부터 패치된 명령 바이트들은 명령 정렬 유닛(18)으로 전송된다. 명령들이 명령 캐시(16)로부터 패치되면, 해당하는 프리디코드 데이터는 패치되는 명령들에 관한 정보를 명령 정렬 유닛(18)에(그리고 MROM 유닛(34)에) 제공하기 위해서 검색된다. 명령 정렬 유닛(18)은 명령들을 각 디코드 유닛들(20)에 정렬시키는 검색 데이터를 이용한다. 일 실시예에서, 명령 정렬 유닛(18)은 8개 명령 바이트들의 3개 세트로부터의 명령들을 디코드 유닛들(20)에 정렬시킨다. 디코드 유닛(20A)은 디코드 유닛들(20B와 20C)로부터 동시에 수신되는 명령들에 우선하는 명령을 수신한다(프로그램 순서에 따름). 유사하게는, 디코드 유닛(20B)은 프로그램 순서에 따라 디코드 유닛(20C)으로부터 동시에 수신되는 명령에 우선하는 명령을 수신한다.
디코드 유닛들(20)은 명령 정렬 유닛(18)으로부터 수신된 명령들을 디코딩하도록 구성된다. 레지스터 피연산자 정보가 검출되고, 레지스터 파일(30) 및 재배열 버퍼(32)로 전달된다. 부가적으로, 만일 명령들이 수행을 위해 하나 이상의 메모리 연산들을 요구하면, 디코드 유닛들(20)은 메모리 연산들을 로드/저장 유닛(26)으로 디스패치한다. 각 명령은 기능 유닛들(24)에 대한 제어 값들의 세트로 디코딩되고, 이러한 제어 값들은 피연산자 어드레스 정보 및 변위 혹은 상기 명령 내에 포함된 직접 데이터에 따라서 예약 스테이션들(22)로 디스패치된다. 일 특정 실시예에 있어서, 각 명령은 기능 유닛들(24A-24C)에 의해 개별적으로 실행될 수 있는 최대 두개의 피연산자들로 디코딩된다.
프로세서(10)는 순서에 따르지 않는 실행을 지원하고, 이에 따라 레지스터 판독 및 기록 동작을 위한 원래 프로그램 순서를 따르며, 레지스터 변경(renaming)을 실행하고, 추론적 명령 수행 및 분기 예측 실패를 복구하고, 그리고 정밀한 예외(precise exception)들을 용이하게 하도록 재배열 버퍼(32)를 이용한다. 재배열 버퍼(32) 내의 임시 저장 위치가 레지스터의 갱신을 수반하는 명령의 디코드 시에 예약됨으로써 추론적 레지스터 상태를 저장하게 된다. 만일 분기 예측이 정확하지 않다면, 상기 잘못 예측된 통로를 따라 추론적으로 실행된 명령들의 결과는 이들이 레지스터 파일(30)에 기록되기 전에 상기 재배열 버퍼(32)에서 무효화 된다. 유사하게는, 만일 특정 명령이 예외를 유발하면, 상기 특정 명령에 후속하는 명령들은 폐기될 수 있다. 이러한 방식으로, 예외들은 "정밀"하게 된다(즉, 예외를 유발하는 특정 명령에 후속하는 명령들은 그 예외 이전에 완결되지 않는다). 만일 주목할 사항으로, 특정 명령이 프로그램 순서상 상기 특정 명령에 선행하는 명령 보다 먼저 실행되면 상기 특정 명령은 추론적으로 실행된다. 선행 명령들은 분기 명령이거나 예외-유발 명령일 수 있고, 이러한 경우, 상기 추론적인 결과는 재배열 버퍼(32)에 의해 폐기될 수 있다.
상기 디코드 유닛들(20)의 출력에서 제공되는 명령 제어 값, 직접 또는 변위 데이터는 개별적인 예약 스테이션들(22)로 직접 전달된다. 일 실시예에서, 각 예약 스테이션(22)은 해당 기능 유닛에 전달되기를 대기하는 최대 6개의 진행 명령들에 대해 명령 정보(즉, 명령 제어 값들, 피연산자 값들, 피연산자 태그들 및/또는 직접 데이터)를 보유할 수 있다. 도 2의 실시예에서, 각 예약 스테이션(22)은 전용 기능 유닛(24)과 연결되는 것을 유의하기 바란다. 따라서, 세개의 전용 "전달 지점들"은 예약 스테이션들(22)과 기능 유닛들(24)로 형성된다. 다시 말해서, 전달 지점(0)은 예약 스테이션(22A) 및 기능 유닛(24A)으로 형성된다. 예약 스테이션(22A)으로 정렬되고 디스패치되는 명령들은 기능 유닛(24A)에 의해 실행된다. 유사하게는, 전달 지점(1)은 예약 스테이션(22B) 및 기능 유닛(24B)으로 형성되고, 전달 지점(2)은 예약 스테이션(22C) 및 기능 유닛(24C)으로 형성된다.
특정 명령의 디코딩에 있어서, 만일 요구된 피연산자가 레지스터 위치라면, 레지스터 어드레스 정보는 재배열 버퍼(32) 및 레지스터 파일(30)로 동시에 전송된다. 당업자라면, 상기 x86 레지스터 파일이 8개의 32비트 실제 레지스터들(즉, 전형적으로 EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP로 간주됨)을 포함한다는 것을 이해할 수 있을 것이다. 상기 x86 프로세서 구조를 이용한 프로세서(10)의 실시예들에서, 레지스터 파일(30)은 상기 32비트 실제 레지스터들 각각의 저장 위치들을 포함한다. 부가적인 저장 위치들은 MROM 유닛(34)에 의해 사용되기 위한 레지스터 파일(30) 내에 포함될 수 있다. 재배열 버퍼(32)는 이러한 레지스터들의 내용을 변경하는 결과들을 저장하기 위한 임시 저장 위치들을 포함함으로써, 순서에 따르지 않는 실행을 허용한다. 디코딩 시에, 상기 실제 레지스터들 중 하나의 내용을 변경하도록 결정된 각 명령에 대해 재배열 버퍼(32)의 임시 저장 위치가 예약된다. 따라서, 특정 프로그램의 실행 중 다양한 지점들에서, 재배열 버퍼(32)는 소정의 레지스터에 대해 추론적으로 실시되는 내용을 포함하는 하나 이상의 위치들을 가질 수 있다. 만일 명령의 디코딩 이후에 재배열 버퍼(32)가 상기 소정의 명령에서 피연산자로 사용된 레지스터에 할당된 이전 위치(들)를 가지면, 재배열 버퍼(32)는 1)가장 최근에 할당된 위치의 값, 또는 2)만일 상기 값이 상기 이전 명령을 결과적으로 실행할 상기 기능 유닛에 의해 생성되지 않았으면, 상기 가장 최근에 할당된 위치에 대한 태그를 상기 해당 예약 스테이션으로 보낸다. 만일 재배열 버퍼(32)가 소정의 레지스터에 대해 예약된 위치를 가지면, 상기 피연산자 값(또는 재배열 버퍼 태그)은 레지스터 파일(30)이 아닌 재배열 버퍼(32)로부터 제공된다. 만일 재배열 버퍼(32)에서 어떤 요청된 레지스터에 대해 예약된 위치가 없는 경우, 상기 값은 레지스터 파일(30)에서 직접 취해진다. 만일 상기 피연산자가 메모리 위치에 해당하면, 상기 피연산자 값은 로드/저장 유닛(26)을 통해 상기 예약 스테이션에 제공된다.
일 특정 실시예에서, 재배열 버퍼(32)는 동시에 디코딩된 명령들을 한 단위로 저장 및 취급하도록 구성된다. 이러한 구성은 여기서 "라인-지향(line-oriented)"으로 간주될 것이다. 여러개의 명령들을 함께 취급함으로써, 재배열 버퍼(32) 내에 이용되는 하드웨어는 단순화될 수 있다. 예를 들어, 본 실시예에 포함되는 라인-지향 재배열 버퍼는 하나 이상의 명령들이 디코드 유닛들(20)에 의해 디스패치될 때마다 3개의 명령들에 속하는 명령 정보에 대해 충분한 저장부를 할당한다. 반면에, 통상적인 재배열 버퍼들에서는 실질적으로 디스패치되는 명령들의 수에 따라 가변적인 양의 저장부가 할당된다. 가변 저장부를 할당하는데 비교적 많은 수의 논리 게이트들이 필요할 수 있다. 동시에 디코딩된 명령들 각각이 실행되는 경우, 상기 명령의 결과들은 동시에 레지스터 파일(30)에 저장된다. 그 다음, 상기 저장부는 동시에 디코딩된 다른 세트의 명령들로의 할당을 위해 비워진다. 부가적으로, 명령 당 이용되는 제어 논리 회로부의 양은 줄어드는데, 그 이유는 제어 논리가 동시에 디코딩된 몇몇 명령들에 대해 상각(amortize)되기 때문이다. 특정 명령을 식별하는 재배열 버퍼 태그는 두개의 필드들로 분리될 수 있는데, 라인 태그와 오프셋 태그가 이들이다. 라인 태그는 특정 명령을 포함하는 동시에 디코딩된 명령들의 세트를 식별하고, 오프셋 태그는 특정 명령에 해당하는 세트 내부의 명령을 식별한다. 주목할 사항으로, 레지스터 파일(30)에 명령의 결과들을 저장하고 해당 저장부를 공백상태로 하는 것을 명령들을 "퇴거"하는 것으로 언급하기로한다. 또한 주목할 사항으로, 임의의 재배열 버퍼 구성이 프로세서(10)의 다양한 실시예들에 이용될 수 있다.
전술한 바와 같이, 예약 스테이션들(22)은 명령들이 해당 기능 유닛(24)에 의해 실행되기까지 명령들을 저장한다. 만일 (i)명령의 피연산자들이 제공되는 경우, 그리고 (ii) 동일한 예약 스테이션(22A-22C) 내에 있으며 상기 명령에 우선하는 명령들에 대해 상기 피연산자들이 아직 제공되지 않은 경우, 어떤 명령이 실행을 위해 선택된다. 주목할 사항으로, 어떠한 명령이 기능 유닛들(24) 중 하나에 의해 실행되는 경우, 그 명령의 결과는 상기 결과가 재배열 버퍼(32)를 갱신하도록 전달되는 것과 동시에 상기 결과를 기다리는 임의의 예약 스테이션들(22)로 직접 전달한다(이러한 기법을 일반적으로 "결과 포워딩"으로 간주한다). 상기 관련된 결과가 포워딩되는 클럭 주기 동안 어떤 명령이 실행을 위해 선택되어 기능 유닛(24A-24C)으로 전달된다. 이러한 경우, 예약 스테이션들(22)은 상기 포워딩되는 결과를 기능 유닛(24)으로 전달한다. 기능 유닛들(24)에 의해 실행되도록 명령들이 다중 동작들로 디코딩되는 실시예들에서, 상기 동작들은 각각 개별적으로 스케쥴될 수 있다.
일 실시예에 있어서, 각 기능 유닛들(24)은 덧셈과 뺄샘의 정수 산술 연산 뿐만 아니라 쉬프트, 순환(rotating), 논리 연산, 및 분기 연산들을 수행하도록 구성된다. 상기 동작들은 디코드 유닛들(20)을 이용하여 특정 명령에 대해 디코딩되는 제어 값들에 응답하여 수행된다. 부동 소숫점 연산들을 수행하기위해 부동 소숫점 연산(미도시)이 역시 적용될 수 있다. 상기 부동 소숫점 유닛은 코프로세서(coprocessor)로서 동작될 수 있으며, MROM 유닛(34) 또는 재배열 버퍼(32)로부터 명령들을 수신하고, 명령들을 완료하기 위해 재배열 버퍼(32)와 순차적으로 통신한다. 부가적으로, 기능 유닛들(24)은 로드/저장 유닛(26)에 의해 수행되는 로드 및 저장 메모리 동작들을 위한 어드레스 생성을 수행하도록 구성될 수 있다. 특정 일 실시예에 있어서, 각 기능 유닛(24)은 어드레스들의 생성을 위한 어드레스 생성 유닛과 나머지 기능들을 수행하기 위한 실행 유닛을 포함할 수 있다. 이들 두 유닛들은 한 클럭 주기 동안 상이한 명령들 또는 연산들 하에서 독립적으로 동작을 수행할 수 있다.
각 기능 유닛들(24)은 또한 조건 분기 명령들의 실행에 관한 정보들을 상기 분기 예측 유닛(14)에 제공한다. 만일 분기 예측이 정확하지 않다면, 분기 예측 유닛(14)은 잘못 예측된 분기에 후속하는 명령 처리 파이프라인에 인가된 명령들을 플러싱(flush)하고, 명령 캐시(16) 또는 주 메모리로부터 요구된 명령들이 패치되도록 한다. 주목할 사항으로, 이러한 경우 상기 잘못 예측된 분기 명령 후 발생하는 (추론적으로 실행되고 로드/저장 유닛(26)과 재배열 버퍼(32)에 임시적으로 저장된 것들을 비롯한) 원래 프로그램 절차에서 명령들의 결과들은 모두 버려진다. 또한 주목할 사항으로, 기능 유닛들(24)에 대한 분기 예측 실패를 나타내는 분기 실행 결과들이 기능 유닛들(24)에서 재배열 버퍼(32)로 제공될 수 있다.
기능 유닛들(24)에 의해 생성되는 결과들은, 만일 레지스터 값이 갱신되면, 재배열 버퍼(32)로 전달되고, 만일 상기 메모리 위치의 내용들이 변경되면 로드/저장 유닛(26)으로 전달된다. 만일 상기 결과가 레지스터에 저장되면, 재배열 버퍼(32)는 상기 명령이 디코딩되었을때 상기 레지스터 값에 대해 예약된 위치에 상기 결과를 저장한다. 복수의 결과 버스들(38)이 기능 유닛들(24)과 로드/저장 유닛(26)으로부터의 결과들을 전송하도록 포함된다. 결과 버스들(38)은 생성된 결과들 및 상기 명령이 실행됨을 식별하는 재배열 버퍼 태그를 전달한다.
로드/저장 유닛(26)은 기능 유닛들(24)과 데이터 캐시(28) 간에 인터페이스를 제공한다. 일 실시예에서, 로드/저장 유닛(26)은 데이터 캐시(28)의 엑세스 되지 않은 계류중인 로드들과 저장들에 대한 데이터 및 어드레스 정보의 저장 위치들을 갖는 제 1로드/저장 버퍼와, 데이터 캐시(28)에 엑세스된 로드들과 저장들에 대한 데이터 및 어드레스 정보의 저장 위치들을 갖는 제 2로드/저장 버퍼로 구성된다. 예를 들어, 상기 제 1버퍼는 12개의 위치들을 포함할 수 있으며, 제 2버퍼는 32개 위치들을 포함할 수 있다. 디코드 유닛들(20)은 상기 로드/저장 유닛(26)에 대한 엑세스를 중재한다. 제 1 버퍼가 가득 차면, 디코드 유닛들(20)은 로드/저장 유닛(26)이 계류중인 로드 또는 저장 요청 정보에 대한 공간을 가질 때 까지 대기한다. 또한, 로드/저장 유닛(26)은 데이터 코히어런시(coherency)가 유지되도록 계류중인 저장 메모리 동작들에 대한 로드 메모리 동작들의 종속성 검사를 실시한다. 메모리 동작은 프로세서(10)와 상기 주 메모리 하부 시스템간의 데이터 전송이다. 메모리 동작들은 메모리에 저장된 피연산자를 이용하는 명령의 결과일 수 있거나, 다른 동작 없이 상기 데이터의 전달만을 유발하는 로드/저장 명령의 결과일 수 있다. 부가적으로, 로드/저장 유닛(26)은 세그먼트 레지스터들 및 상기 x86 프로세서 구조로 정의되는 어드레스 전달 메커니즘에 관련된 다른 레지스터들과 같은 특별한 레지스터 저장부를 포함할 수 있다.
데이터 캐시(28)는 로드/저장 유닛(26)과 상기 주 메모리 하부 시스템간에 전송되는 데이터를 임시적으로 저장하기 위해 제공되는 고속 캐시 메모리이다. 일 실시예에서, 데이터 캐시(28)는 양방향 세트 결합된 구조로 최대 64킬로바이트까지 저장할 수 있는 용량을 갖는다. 데이터 캐시(28)는 세트 결합된 구성, 전체 결합된 구성, 직접-맵핑된 구성, 및 임의의 적절한 크기의 다른 구성을 포함하는 다양한 특정 메모리 구조들에 적용될 수 있다는 것을 이해할 수 있을 것이다.
x86 프로세서 구조를 이용한 프로세서(10)의 일 특정 실시예에서, 명령 캐시(16) 및 데이터 캐시(28)는 선형으로 어드레스되고 물리적으로 태그된다. 선형 어드레스는 명령으로 특정되는 오프셋과 x86 어드레스 변환 메커니즘의 세그먼트 부분으로 특정되는 기본 어드레스로부터 형성된다. 선형 어드레스들은 주 메모리에 엑세스하기 위해 물리적인 어드레스들로 선택적으로 변환될 수 있다. 선형 어드레스를 물리적 어드레스로 변환하는 것은 x86 어드레스 변환 메커니즘의 페이징 부분으로 특정된다. 물리적 어드레스는 적중/적중실패 상태를 결정하기 위해 물리적 태그들과 비교된다.
버스 인터페이스 유닛(37)은 버스를 통해 프로세서(10)와 컴퓨터 시스템의 다른 구성원들이 서로 통신하도록 구성된다. 예를 들어, 버스는 디지털 이퀴프먼트 코포레이션에 의해 개발된 EV-6 버스와 호환될 수 있다. 대안적으로, 패킷-기반, 단방향 또는 양방향 링크들 등을 포함하는 임의의 적절한 내부결합 구조가 사용될 수 있다. 선택적 L2 캐시 인터페이스 역시 레벨 2캐시에 대한 인터페이싱을 위해 이용될 수 있다.
로드/저장 유닛
이하, 로드/저장 유닛(26)의 일실시예에 대해 좀더 자세히 논의한다. 다른 실시예들이 가능하며 고려된다. 도 3은 프로세서(10)의 일실시예에 따라, 로드/저장 유닛(26), 재배열 버퍼(32), 데이터 캐시(28), 버스 인터페이스 유닛(BIU)(37), 디코드 유닛(20A), 예약 스테이션(22A), 및 기능 유닛(24A)을 이들 간의 특정 상호결합을 강조하기위해 도시한다. 다른 실시예들은, 바람직한 바와 같이 부가적, 대안적, 또는 대체 상호결합을 이용할 수 있다. 디코드 유닛들(20B-20C), 예약 스테이션들(22B-22C), 기능 유닛들(24B-24C), 및 도 3에 도시된 다른 유닛들 사이의 상호결합은 도 3에 도시된 것과 유사할 수 있다.
디코드 유닛(20A)은 명령 정렬 유닛(18)으로부터 명령을 수신하고 명령을 디코딩한다. 디코드 유닛(20A)은 예약 스테이션(22A)으로 상기 디코드된 명령을 제공하고, 이는 상기 디코딩된 명령을 상기 명령이 실행을 위해 선택될때까지 저장한다. 부가적으로, 만일 명령이 로드 혹은 저장 메모리 명령을 특정하면, 디코드 유닛(20A)은 L/S 라인들(46A)을 통해 로드/저장 유닛(26)에 신호한다. 디코드 유닛들(20B-20C)로부터의 유사한 신호들 역시 로드/저장 유닛(26)에 의해 수신된다. L/S 라인들(46A)은 로드 메모리 동작, 저장 메모리 동작, 혹은 모두가 디코딩되는 상기 명령에 의해 특정되는지를 나타낸다. 예를 들어, L/S 라인들(46A)은 로드 라인과 저장 라인을 포함할 수 있다. 만일 메모리 동작이 특정되지 않으면, 모든 라인들 상의 신호는 디어서팅(deasserting)된다. 로드 라인 상의 신호는 로드 메모리 동작이 특정되면 어서팅되고, 유사하게는 저장 라인 상의 신호는 저장 메모리 동작이 특정되면 어서팅된다. 모든 신호들은 로드 메모리 동작 및 저장 메모리 동작 모두가 특정되면 어서팅된다. L/S 라인들(46A) 상의 신호들에 응답하여, 로드/저장 유닛(26)은 해당 메모리 동작을 저장하기 위해 여기에 포함되는 로드/저장 버퍼의 엔트리를 할당한다.
전술한 것에 부가하여, 디코드 유닛(20A)은 디코딩되는 명령에 관한 정보를 재배열 버퍼(32)에 제공한다. 재배열 버퍼(32)는 상기 정보(및 다른 디코드 유닛들(20B-20C)로부터의 유사한 정보)를 수신하고 그에 대한 응답으로 재배열 버퍼 엔트리들을 할당한다. 상기 할당된 버퍼 엔트리들은 재배열 버퍼 태그들에 의해 식별되며, 이는 명령 태그들 버스(48)를 통해 로드/저장 유닛(26)으로 전송된다. 명령 태그 버스(48)는 각각의 가능한 명령에 대한 태그(예를 들어, 본 실시예에서는 3개이며, 각 디코드 유닛들(20A-20C)에 대해 하나씩임)를 전송하도록 구성될 수 있다. 대안적으로, 상기 설명된 라인-지향 구조를 이용하는 일 실시예에서, 재배열 버퍼(32)는 상기 라인에 대해 라인 태그를 전송하도록 구성되고, 그리고 로드/저장 유닛(26)은 상기 라인 태그를 특정 로드 또는 저장을 신호하는 전달 지점의 오프셋 태그만큼 증가시킨다.
상기 명령의 레지스터 피연산자들에 대한 종속성 검사를 수행하도록 재배열 버퍼(32)가 더 구성된다. 레지스터 피연산자들은 디코드 유닛들(20)에 의해 전송되는 명령 정보에서 식별된다. 저장 메모리 동작들에 있어서, 상기 저장 데이터는 로드/저장 유닛(26)이 저장 어드레스에 부가적으로 수신하는 소스 피연산자이다. 따라서, 재배열 버퍼(32)는 각 저장 메모리 동작에 대한 저장 데이터를 생성하고 그리고 저장 데이터/태그들 버스(50) 상의 저장 데이터에 대해서, 저장 데이터(만일 재배열 버퍼(32) 또는 저장 메모리 동작의 디스패치 하에서 레지스터 파일(30) 내부에서 이용가능하다면) 또는 저장 데이터 태그 중 하나를 전달하는 명령을 결정한다. 만일 상기 저장 메모리 동작에 해당하는 명령이 레지스터의 내용들을 메모리로 저장하는 명시적 저장 명령이라면, 상기 저장 데이터를 생성하는 명령의 명령 태그(또는, 이용가능하다면 저장 데이터)가 전달된다. 반면에 다른 한편으로, 상기 명령은 만일 상기 명령이 명시적 동작으로서 저장 메모리 동작을 포함한다면, 상기 저장 데이터를 자체적으로 생성한다. 이러한 경우들에서, 재배열 버퍼(32)는 저장 데이터 태그로서 상기 명령의 명령 태그를 제공한다.
비록 도면의 간략화를 위해 도 3에 도시되지는 않았지만, 예약 스테이션(22A)은 또한 피연산자 태그들 및/또는 재배열 버퍼(32)로부터의 명령에 대한 데이터를 수신한다. 예약 스테이션(22A)은 피연산자 태그들 및/또는 데이터를 포획(capture)하고 결과 버스들(38)로부터의 (상기 피연산자 태그들로 식별되는) 임의의 나머지 피연산자 데이터의 전달을 대기한다. 일단 명령이 그 피연산자들을 수신하면, 이는 기능 유닛(24A)에 의해 실행되기에 적합해진다. 특히, 도시된 실시예에서, 기능 유닛(24A)은 실행 유닛(EXU)(40)과 어드레스 생성 유닛(AGU)(42)을 포함한다. 실행 유닛(40)은 결과 버스(38A)(결과 버스들(38) 중 하나)를 통해 로드/저장 유닛(26), 예약 스테이션들(22), 및 재배열 버퍼(32)로 포워딩되는 결과들을 생성하기 위해서 명령 동작들(예를 들어, 산술 및 논리 연산들)을 수행한다. AGU(42)는 메모리 동작에 사용되기 위한 데이터 어드레스 또는 명령으로 특정되는 동작들을 생성하고, 데이터 어드레스들을 어드레스 버스(44A)를 통해 로드/저장 유닛(26)으로 전송한다. 주목할 사항으로, 다른 실시예들이 이용될 수 있는데, 여기서 AGU(42)와 실행 유닛(40)은 결과 버스(38A)를 공유하고, 그리고 여기서 기능 유닛(24A)은 어드레스 생성 및 다른 명령 실행 동작들을 수행하는 실행 유닛만을 포함한다. 로드/저장 유닛(26)은 다른 기능 유닛들(24B-24C) 내부의 실행 유닛들 및 AGU들로부터의 결과 버스들 및 어드레스 버스들과도 수신을 위해 더 연결된다.
도시된 본 실시예가 AGU(42)를 이용하기 때문에, 예약 스테이션(22A)은, 일단 어드레스를 형성하기 위해 사용되는 피연산자들이 명령이 특정하는 임의의 부가적인 피연산자들을 수신 이전에 수신되면, AUG(42)에 의해 실행되기 위한 명령의 어드레스 생성 부분을 선택할 수 있다. AGU(42)는 생성되는 데이터 어드레스에 대한 명령의 명령 태그에 따라, 어드레스 버스(44A) 상의 로드/저장 유닛(26)으로 생성된 어드레스를 전송한다. 따라서, 로드/저장 유닛(26)은 해당하는 데이터 어드레스의 로드 또는 저장을 결정하기 위해서 어드레스 버스(44A) 상에서 수신된 태그와 상기 로드/저장 버퍼에 저장된 명령 태그들을 비교할 수 있다.
로드/저장 유닛(26)은 저장 메모리 동작들에 대한 저장 데이터를 포획하기 위해서 결과 버스들(38) 상에 제공되는 결과 태그들을 관찰한다. 만일 결과 태그들이 로드/저장 유닛(26) 내부의 저장 데이터 태그와 정합되면, 로드/저장 유닛(26)은 해당 데이터를 포획하고 상기 해당 저장 명령과 상기 데이터를 관련시킨다.
로드/저장 유닛(26)은 데이터 캐시 인터페이스를 통해 데이터 캐시(28)와 연결된다. 로드/저장 유닛(26)은 데이터 캐시 인터페이스를 통해 데이터 캐시(28)를 프로빙하기 위해 메모리 동작들을 선택하고, 데이터 캐시 인터페이스로부터 프로브 결과들을 수신한다. 대체적으로 말하면, 특정 메모리 동작에 대한 데이터 캐시의 "프로브"는 데이터 캐시(28)가 데이터 어드레스가 그 내부에서 적중했는지를 결정할 수 있도록 하기위해, 특정 메모리 동작의 데이터 어드레스를 데이터 캐시(28)로 전송하는 단계를 포함한다. 데이터 캐시(28)는 프로브 결과(예를 들어, 적중/적중실패 표시)를 로드/저장 유닛(26)으로 돌려준다. 부가적으로, 만일 특정 메모리 동작이 로드 메모리 동작이고 적중하면, 데이터 캐시(28)는 결과 버스(38D) 상의 해당 로드 데이터를 예약 스테이션들(22), 재배열 버퍼(32), 및 로드/저장 유닛(26)으로 포워딩한다. 일 실시예에서, 데이터 캐시(28)는 두개의 포트들을 포함하므로 최대 2개의 프로브들을 동시적으로 수신할 수 있다. 데이터 캐시(28)는 예를 들어, 뱅크 구성을 이용할 수 있으며, 여기서 캐시 라인들은 적어도 두개의 뱅크들에 걸쳐서 저장되고 두개의 프로브들은 이들이 상이한 뱅크들을 엑세스하는 한 동시적으로 사용될 수 있다. 일 특정 실시예에서, 데이터 캐시(28)는 8개의 뱅크들을 사용한다. 데이터 캐시 인터페이스의 다양한 실시예들은 이후 상세히 설명될 것이다.
데이터 캐시(28)는 그 적중실패를 프로브한 것에 대한 응답으로 캐시 라인들을 할당하도록 구성되고, 그리고 상기 적중실패 캐시 라인들을 패치하기위해 버스 인터페이스 유닛(37)과 통신한다. 부가적으로, 데이터 캐시(28)는 주 메모리를 갱신하기위해서 변경된 퇴거 캐시 라인들을 버스 인터페이스 유닛(37)으로 전송한다.
버스 인터페이스 유닛(37)은 데이터 캐시(28)와 연결되고 스누프(snoop) 인터페이스(52)를 통해 로드/저장 유닛(26)과 연결된다. 스누프 인터페이스(52)는, 상기 버스로부터 수신된 스누프 동작에 응답하여 코히어런시 활동이 수행되어야 하는지를 결정하기위해서 버스 인터페이스 유닛(37)에 의해 사용될 수 있다. 일반적으로, "스누프 동작"은 상기 버스와 연결된 (예를 들어, 프로세서 내부의) 캐시들에 대한 메모리 코히어런시를 유지할 목적으로 버스 상에서 수행된다. 코히어런시가 적절하게 유지되면, 특정 메모리 위치에 해당하고 캐시들 중 하나에 저장되는 데이터 사본은 상호 캐시에 저장된 사본들과 일치한다. 스누프 동작은 명시적 동작이거나 특정 메모리 위치의 어드레스에 대해 수행되는 동작의 함축적인 부분일 수 있다. 일반적으로, 스누프 동작은 어드레스가 캐시 내에 저장된 경우, 스누프되기위한 어드레스("스누프 어드레스")와 캐시 라인의 바람직한 상태를 특정한다. 버스 인터페이스 유닛은 스누프 인터페이스(52)를 통해 스누프 요청을 데이터 캐시(28)로 전송하고 스누프 동작을 수행하기위해서 로드/저장 유닛(26)으로 전송한다.
재배열 버퍼(32)는 명령들의 퇴거를 관리한다. 재배열 버퍼(32)는 퇴거되거나 퇴거될 준비가 된것 중 하나로 명령들을 식별하기위해 퇴거 인터페이스(54)를 통해 로드/저장 유닛(26)과 통신한다. 예를 들어, 일 실시예에서, 저장들은 이들이 퇴거되기 전까지는 데이터 캐시(28)(또는 주 메모리)를 갱신하지 않는다. 대안적으로, 특정 로드 명령들은 비-추론적으로 실행되도록 제한될 수 있다. 재배열 버퍼(32)는 퇴거 인터페이스(54)를 통해 로드/저장 유닛(26)으로 퇴거되거나 퇴거될 수 있는 메모리 동작들을 표시할 수 있다. 따라서, 각 명령에 대해서, 디코드 유닛(20)에 의해 재배열 버퍼(32)로 제공되는 명령 정보는 명령이 로드 또는 저장 동작을 포함하는 지 여부에 대한 표시를 포함할 수 있다. 로드/저장 유닛(26)은 특정 메모리 동작이 퇴거로 로깅(logging)된다는 승인을 상기 재배열 버퍼(32)로 돌려줄 수 있고, 재배열 버퍼(32)는 해당 명령을 후속적으로 퇴거시킨다.
로드/저장 유닛(26)이 종종 가득차기 때문에, 로드/저장 유닛(26)은 후속 메모리 동작을 위해 로드/저장 버퍼 내부의 충분한 엔트리들이 (이전 메모리 동작들의 완료를 통해) 비워질때 까지 디코드 유닛들(20)에서의 후속 메모리 동작들을 지연시키기위한 흐름 제어 메커니즘을 이용할 수 있다. 예를 들어, 로드/저장 유닛(26)은 비워진 엔트리들의 계수를 디코드 유닛들(20)로 통보(broadcast)할 수 있으며, 만일 상기 계수가 디코드된 명령들의 메모리 동작을 위해 이용가능한 엔트리들이 불충분하다는 것을 나타내면 지연될 수 있다. 일 특정 실시예에서, 디코드 유닛들(20)에 의해 동시에 디코딩되는 명령들은 잠금단계(lockstep)의 예약 스테이션들(22)로 이동한다(따라서, 도 2에 관해 상기 설명된 바와 같이, 라인은 명령에 대해 재배열 버퍼(32)에 할당될 수 있다). 이러한 실시예에서, 디코드 유닛들(20)은 충분한 엔트리들이 동시에 디코딩되는 명령들의 세트 내부의 모든 메모리 동작들에 대해서 이용가능할때 까지 지연된다. 대안적으로, 로드/저장 유닛(26)은 버퍼 엔트리들이 이용가능할 때까지 후속 메모리 동작들을 지연시키기위한 지연 신호를 사용한다. 임의의 적절한 흐름 제어 메커니즘이 사용될 수 있다.
도 4에서, 로드/저장 유닛(26)의 일 실시예의 블록도가 도시된다. 다른 실시예들이 가능하며 고려될 수 있다. 도 4의 실시예에서, 로드/저장 유닛(26)은 제 1로드/저장 버퍼(LS1 버퍼)(60), 제 2로드/저장 버퍼(LS2 버퍼), LS1 제어 회로부(64), LS2 제어 회로부(66), 임시 버퍼(68), 세그먼트 가산기들(70), 포트 0 멀티플랙서(먹스)(72), 포트 1 먹스(74), 그리고 LS2 재프로브(reprobe) 먹스(76)를 포함한다. 세그먼트 가산기들(70)은 기능 유닛들(24A-24C) 내부의 AGU들(42)로부터 데이터 어드레스들을 수신하도록 연결된다(예를 들어, 도 3에 도시된 어드레스 버스(44A)의 일부인 어드레스 버스(44AA)는 기능 유닛(24A) 내의의 AGU들(42)로부터 데이터 어드레스를 전달한다). 먹스들(70과 72)은 AGU들(42)로부터 데이터 어드레스 및 세그먼트 가산기들(70)의 출력들을 수신하도록 연결되고, LS1 버퍼(60)와도 연결된다. 먹스(72)는 LS2 재프로브 먹스(76)로부터의 입력도 수신한다. 또한, LS1 버퍼(60)는 세그먼트 가산기들(70), LS1 제어 회로부(64), 임시 버퍼(68), 명령 태그들 버퍼(48), 저장 데이터/태그들 버스(50), 및 결과 버스들(38a)(결과 버스들(38)의 결과 데이터 부분)과 연결된다. LS1 제어 회로부(64)는 먹스들(72와 74) 및 제어 회로부(66)와 연결된다. 또한, LS1 제어 회로부(64)는 AGU들(42)로부터의 어드레스 태그들(예를 들어, 도 3에 도시된 어드레스 태그 버스(44A)의 일부인 어드레스 태그 버스(44AB)는 기능 유닛(24A)내의 AGU들(42)로부터 어드레스 태그를 전달함), 결과 태그 버스들(38b)을 통한 결과 태그들(결과 버스들(38)의 결과 태그 부분), 및 (디코드 유닛(20A)으로부터의 L/S 라인들(46A)을 포함하는) L/S 라인들(46)과 수신을 위해 연결된다.
임시 버퍼(68)와 LS2 버퍼(62)는 결과 버스들(38a) 및 결과 태그 버스들(38b)과 연결된다. LS2 버퍼(62)가 또한 적중실패 어드레스 버퍼(MAB) 태그 버스(78) 상의 MAB 태그와, 물리적 어드레스 버스(80)를 통해 데이터 캐시(28)로부터 물리적 어드레스를 수신하기위해 연결된다. LS2 버퍼(62)는 먹스(76), LS2 제어 회로부(66), 및 임시 버퍼(68)와도 연결된다. L2 제어 회로부(66)는 먹스(76), 퇴거 인터페이스(54), 결과 태그 버스들(38b), 스누프 인터페이스(52), 데이터 캐시(28)로부터의 적중/적중실패 신호들(82) 및 버스 인터페이스 유닛(37)으로부터의 채움 태그(fill tag) 버스(84)와도 연결된다.
대체적으로 말하면, 로드/저장 유닛(26)은 프리-캐시 버퍼(pre-cache buffer)(LS1 버퍼(60)) 및 포스트-캐시 버퍼(post-cache buffer)(LS2 버퍼(62))를 포함한다. 메모리 동작들은 프로세서(10) 내의 디스패치에 따라 LS1 버퍼에 할당되고, 데이터 캐시(28)를 프로빙하기위해 선택될때까지 LS1 버퍼(60) 내에 남아있는다. 데이터 캐시(28)의 프로빙에 후속하여, 메모리 동작들은 프로브 상태(예를 들어 적중/적중실패 등)에 독립적으로 LS2 버퍼(62)로 이동된다.
적중실패된 메모리 동작들이 데이터 캐시(28)를 재프로브하기위해 LS2 재프로브 먹스(76) 및 포트 0 먹스(72)를 통해 후속적으로 선택될 수 있다. 여기에 사용되는 용어 "재프로브"는 특정 메모리 동작에 대한 제 1프로브 이후 두번째 혹은 후속 시도를 위해 캐시를 프로빙하는 것을 나타낸다. 부가적으로, 저장 메모리 동작들은 저장들이 퇴거를 위한 조건이 될때까지 LS 버퍼(62)에 보유될 수 있다.
L/S 라인들(46) 상의 신호들에 응답하여, LS1 제어 회로(64)는 LS1 버퍼(60) 내의 엔트리들을 로드 및 저장 메모리 동작들을 식별하기위해 할당한다. 개별적인 명령 태그들과 저장 데이터/태그들(만일 이용가능하다면)은 LS1 제어 회로부(64)의 제어 하에서 LS1 버퍼(60)에 의해 할당된 엔트리들로 수신된다. 후속적으로, 해당 데이터 어드레스들은 (LS1 제어 회로부(64)에 의해 수신되는 어드레스 태그들에의해 식별되는) AGU들로부터 수신되고 할당된 엔트리들에 저장된다.
어드레스를 수신한 메모리 동작은 데이터 캐시(28)를 프로빙하기 적합해진다. LS1 제어 회로(64)는 데이터 캐시(28)를 프로빙하기위해 메모리 동작들에 대한 LS1 버퍼 엔트리들을 검사하고, 포트 0 먹스(72)와 포트 1 먹스(74)에 대한 선택 제어들을 생성한다. 따라서, 예시된 실시예에서, 최대 2개의 메모리 동작들이 클럭 주기당 데이터 캐시(28)를 프로빙할 수 있다. 일 특정 실시예에 따라서, LS1 제어 회로(64)는 프로그램 순서에 따라 데이터 캐시(28)를 프로빙하기위한 메모리 동작들을 선택한다. 따라서, LS1 제어 회로부(64)는 LS1 버퍼(60)내의 가장 오래된 메모리 동작들에 대한 검사를 제한하도록 구성될 수 있다. 메모리 동작들의 "프로그램 순서"는 만일 상기 명령들이 한번에 하나씩 패치되고 실행되었다면 명령들이 실행되는 순서이다. 또한, (예를 들어, 분기 예측들에 따라) 추론적으로 패치되는 상기 명령들의 프로그램 순서는 투기가 정확하다는 가정 하에서 상술된 바와 같이 실행되는 명령들의 순서이다. 프로그램 순서의 다른 명령들 이전의 명령들은 다른 명령들보다 오래되었다고 칭해진다. 반대로, 프로그램 순서에서 다른 명령들에 후속하는 명령들은 다른 명령들 보다 더 최신(young)이라고 칭해진다. 주목할 사항으로, 다른 실시들은 필요하다면, 순서 없이 데이터 캐시(28)를 프로빙하기위해 메모리 명령들을 선택할 수 있다.
LS1 제어 회로부(64)는 (본 실시예에서, LS1제어 회로부(64)에 의해 검사되는 엔트리 내의 메모리 동작으로 제공되는) 수신된 데이터 어드레스로서 데이터 캐시(28)를 프로빙하기 위해 메모리 동작을 선택하도록 구성된다. 만일 상기 AGU들(42)로부터 수신된 상기 어드레스 태그들이 다른 방법으로 선택될 수 있는 메모리 동작들의 명령 태그와 정합되면, LS1 제어 회로부(64)는 먹스들(72 및 74) 중 하나를 통해 AGU(42)로부터 수신되는 해당 데이터 어드레스를 선택한다.
데이터 어드레스가 로드/저장 유닛(26)에 제공되는 바와 같이 프로빙을 위해 선택될 수 있지만, 데이터 어드레스는 세그먼트 가산기들(70) 중 하나에도 제공되어질 수 있다. 세그먼트 가산기들(70)은 x86 어드레싱 방식의 세그먼테이션 부분을 처리하기위해 본 실시예에 포함된다. x86 명령 세트 구조를 이용하지 않는 실시예들은 세그먼트 가산기들(70)을 삭제할 수 있다. 일반적으로, AGU들(42)은 메모리 동작에 해당하는 논리적 어드레스를 생성한다. 상기 논리적 어드레스는 명령의 어드레스 피연산자를 가산함으로써 생성되는 어드레스이다. x86 구조에서, 이층(two-tiered) 변환 방식은 세그멘테이션 방식을 통해 논리 어드레스에서 선형 어드레스로 바꾼 후 페이징 방식을 통해 물리적 어드레스로 바꾸는 것으로 정의된다. AGU들(42)이 명령의 어드레스 피연산자들을 가산하기 때문에, AGU들에 의해 제공되는 데이터 어드레스는 논리적 어드레스이다. 그러나, 현재 명령 코드는 일반적으로, (선형 어드레스를 생성하기위해 논리적 어드레스에 가산되는) 세그먼트 베이스 어드레스들이 0으로 프로그램되는, "플랫 어드레싱 모드(flat addressing mode)"를 사용한다. 따라서, 로드/저장 유닛(26)은 상기 세그먼트 베이스 어드레스가 0(따라서 논리적 및 선형 어드레스들이 동일함)이고 데이터 캐시(28)를 프로빙하기위해 논리적 어드레스를 선택한다고 가정한다. 세그먼트 어드레스들(70)은 상기 메모리 동작에 대해 상기 선택된 세그먼트의 세그먼트 베이스 어드레스를 가산하고 상기 선형 어드레스를 먹스들(72와 74)에 제공하며, 저장을 위해 LS1 버퍼(60)에 제공한다. 만일 특정 메모리 동작에 대한 세그먼트 베이스 어드레스가 0이 아니고 메모리 동작이 논리적 어드레스를 수신함에 따라 데이터 캐시(28)를 프로빙하기위해 선택되지 않으면, LS1 제어 회로부(64)는 이전 엑세스를 취소(따라서 로드 데이터는 포워드되지 않음)하고 데이터 캐시(28)를 프로빙하기위해 해당 세그먼트 가산기(70)의 출력으로부터 해당 선형 어드레스를 선택할 수 있다. 다른 대안적인 실시예들에서, AGU들(42)은 세그먼트 베이스 어드레스를 수신하고 선형 어드레스들을 생성할 수 있다. 또 다른 실시예들은 플랫 어드레싱 모드를 요구할 수 있고, 세그먼트 베이스 어드레스가 무시될 수 있다.
먹스들(72와 74)은 LS1 버퍼(60)내의 엔트리들로부터 데이터 어드레스들을 수신하기위해 연결된다. 메모리 동작에 해당하는 데이터 어드레스는 AGU들(42)로부터의 수신에 따라 메모리 동작에 할당되는 LS1 엔트리에 저장된다. 데이터 어드레스는 데이터 캐시(28)를 프로빙하기위해 메모리 동작을 선택함으로써 상기 엔트리로부터 선택된다. 주목할 사항으로, 데이터 어드레스에 부가적으로, 다른 정보가 먹스들(70과 72)을 통해 데이터 캐시(28)로 전송될 수 있다. 예를 들어, 메모리 동작이 로드인지 저장인지에 대한 표시가 전달될 수 있다. 메모리 동작의 명령 태그는 로드 메모리 동작들에 대한 로드 데이터와 같이 결과 버스들(38D) 상의 포워딩을위해 전달될 수 있다. (적절한 데이터를 먹싱 출력하기위한) 상기 동작의 크기 역시 전달될 수 있다. 임의의 원하는 정보가 설계상 선택에 따라서 전달될 수 있다.
저장 데이터는 저장 메모리 동작이 LS1 버퍼(60)에 존재하는 동안 저장 메모리 동작을 위해 제공된다. 따라서, LS1 제어 회로(64)는 결과 태그들 버스들(38b)을 감시한다. 만일 LS1 버퍼(64) 내의 저장 데이터 태그와 정합되는 태그가 수신되면, 결과 버스들(38a) 중 해당하는 하나로부터의 저장 데이터는 상기 정합되는 저장 데이터 태그를 갖는 엔트리로 포획된다.
LS1 제어 회로(64)는 데이터 캐시(28)를 프로빙하는 메모리 동작에 응답하여 LS1 버퍼(60)로부터 메모리 동작들을 제거한다. 일 특정 실시예에서, 메모리 동작들은 데이터 캐시(28)를 프로빙하기위해 이들이 선택되는 이후 주기에서 제거된다. AGU들(42) 중 하나에 의한 데이터 어드레스의 생성에 따라 메모리 동작이 선택되는 경우들에서, 상기 이후 주기는 데이터 어드레스가 LS1 버퍼(60)로 전달할 수 있도록 사용될 수 있다. 다른 실시예들은 메모리 동작들이 선택되는 주기동안 메모리 동작들의 제거를 선택할 수 있다. 메모리 동작들이 이들이 선택된 이후 주기에서 제거되기 때문에, LS1 제어 회로부(64)는 데이터 캐시(28)를 프로빙하기위한 메모리 동작들을 선택하기위해 LS1 버퍼(60)의 가장 오래된 4개의 엔트리들(이전 클럭 주기에서 선택된 최대 2개의 엔트리들과 현재 클럭 주기에서 선택될 수 있는 2개의 엔트리들)을 검사하도록 구성된다.
LS1 버퍼(60)로부터 제거되는 메모리 동작들은 임시 버퍼(68)로 이동된다. 임시 버퍼(68)는 LS1 버퍼(6)로부터의 엔트리들의 판독과 LS2 버퍼(62)에 대한 이들의 기록에서 타이밍 제한들을 완화시키기위해 제공될 수 있다. 따라서, 임시 버퍼(68)는 단지 설계 편의를 위한 것이며 전적으로 선택적이다. 메모리 동작이 임시 버퍼(68)로 이동된 이후의 클럭 주기에서 이는 LS2 버퍼(62)로 이동된다. 저장 데이터가 상기 클럭 주기동안 결과 버스들(38) 상에서 수신될 수 있기 때문에, 저장 메모리 동작은 임시 버퍼(68)에서 보유되고, 임시 버퍼(68)는 결과 버스들(38b) 상의 결과 태그들을 감시하며, 그리고 데이터를 포획하는 LS1 버퍼(60)와 유사한 방식으로 결과 버스들(38a)로부터 데이터를 포획한다.
따라서, 프로빙된 데이터 캐시(28)를 갖는 메모리 동작들은 LS2 버퍼(62) 상에 위치된다. 본 실시예에서, 모든 메모리 동작들은 데이터 캐시(28)의 초기 프로브 이후 LS2 버퍼(62)에 위치된다. 저장들은 이들이 데이터 캐시로 전달될 수 있을때까지(즉, 이들이 데이터 캐시(28)를 갱신할 수 있을 때까지) LS2 버퍼(62)에 보유된다. 일반적으로, 저장들은 이들이 비-추론적으로될 때 전달될 수 있다. 일 실시예에서, 저장들은 이들의 (퇴거 인터페이스(54)를 통해 표시되는) 퇴거에 응답하거나 그 이후의 임의의 시간에 전달될 수 있다. 본 실시예에서, 로드들은 이들이 퇴거될때까지 LS2 버퍼(62)에 보유된다. 로드 적중실패들은 적어도 로드에의해 엑세스되는 캐시 라인이 데이터 캐시(28)로 전송될때까지 LS2에 보유된다. 캐시를 갱신하기위해 스케쥴되는 캐시 라인(또는 로드 데이터를 포함하는 그의 일부)에 응답하여, 로드 적중실패는 데이터 캐시(28)를 재프로빙하기위해 스케쥴된다. 재프로빙에 따라, 로드 적중실패는 로드 적중이 되고(그리고 로드 데이터는 데이터 캐시(28)에 의해 포워드되며) 그리고 퇴거까지 그대로 보유된다.
LS2 제어 회로부(66)는 데이터 캐시(28)를 프로브한 메모리 동작들을 LS2 버퍼(62) 내의 엔트리들에 할당한다. 부가적으로, LS2 제어 회로부(66)는 적중/적중실패 신호들(82) 상에서 각 프로브들에 대해 데이터 캐시(28)로부터 프로브 상태 정보를 수신한다. 상기 적중/적중실패 정보는 상기 프로브 상태를 제공하는 상기 메모리 동작에 해당하는 버퍼 엔트리에 저장된다. 일 실시예에서, 데이터 캐시(28)는 데이터 캐시로의 엑세스와 병행하여 가상 어드레스를 물리적 어드레스로 변환을 시도하는 어드레스 변환 회로부를 포함한다. 만일 변환이 상기 어드레스 변환 회로부에서 이용가능하지 않으면, 상기 프로브는 (예를 들어, 주 메모리의 변환 표들로 관리되는 검색 소프트웨어에 의해서) 변환이 설정될때까지 적중실패로서 식별될 것이다. 어떠한 특정 실시에서, 데이터 캐시(28) 내의 상기 어드레스 변환 회로부는 2레벨 변환 룩어사이드 버퍼(TLB)를 포함하며, 이는 32개 엔트리 1레벨 TLB와 4방향의 세트 집합적인 256엔트리 2레벨 TLB를 가진다.
만일 메모리 동작의 데이터 어드레스가 데이터 캐시(28)에 의해 성공적으로 변환되면, 해당 물리적 어드레스는 물리적 어드레스 버스(80)에 제공된다. LS2 제어 회로는 해당 엔트리가 가상 어드레스를 물리적 어드레스로 덮어쓰도록 한다. 그러나, 데이터 캐시(28)가 가상적으로 인덱스되고 물리적으로 태그되는 실시예들의 경우에 특정 가상 어드레스 비트들이 재프로빙 및 저장 데이터 전송에서 인덱스를 목적으로 개별적으로 보유될 수 있다.
데이터 캐시(28)에 적중실패하는 메모리 동작에 있어서, 데이터 캐시(28)는 그 내에 포함된 적중실패 어드레스 버퍼의 엔트리에 할당된다. 적중실패 어드레스 버퍼는 버스 인터페이스 유닛(37)으로의 전송을 위해 적중실패 어드레스들을 큐하며, 버스 인터페이스 유닛은 상기 어드레스들을 L2 캐시 또는 주 메모리로부터 패치한다. 적중실패 어드레스 버퍼 내의 엔트리를 식별하는 태그(MAB 태그)는 적중실패하는 각 메모리 동작을 위해 MAB 태그 버스(78) 상에 제공된다. 주목할 사항으로, 데이터 캐시(28)는 캐시 라인을 기반으로 적중실패 버퍼 엔트리들을 할당한다. 따라서, 동일 캐시라인에 대한 후속 적중실패는 동일 MAB 태그를 수신하고, 부가적인 적중실패 어드레스 버퍼 엔트리가 할당되지 않게한다.
버스 인터페이스 유닛(37)은 적중 실패된 캐시 라인을 후속적으로 패치하고 채움 데이터(fill data)로서 캐시 라인을 데이터 캐시(28)에 돌려준다. 또한, 버스 인터페이스 유닛(37)은 채움 태그(fill tag) 버스(84) 상에 채움 태그로서 캐시 라인에 해당하는 MAB 태그를 제공한다. LS2 제어 회로부(66)는 채움 태그를 LS2 버퍼(62)내의 MAB 태그들과 비교한다. 만일 로드 메모리 동작에 대해 MAB 태그에서 정합이 발생하면, 로드는 데이터 캐시(28)를 재프로빙하기위해 선택될 것이다. 만일 하나 이상의 정합이 검출되면, 가장 오래된 정합 로드는 후속 클럭 주기들 동안 선택되는 다른 메모리 동작들과 함께 선택된다. MAB 태그와 정합되는 저장들은 적중으로 표기되지만, 데이터 전달을 시도하기 전에 비-추론적으로 되도록 대기한다.
일 실시예에서, 데이터의 캐시라인은 다중 패킷들을 이용하여 복귀된다. 각 로드 메모리 동작은 자신이 엑세스하는 패킷(또는 로드 어드레스의 적절한 어드레스 비트들로부터 식별될 수 있는 패킷)을 저장할 것이며, 버스 인터페이스 유닛(37)은 채움 태그에 따라 복귀되는 패킷을 식별할 수 있다. 따라서, 복귀되는 상기 패킷에 엑세스하는 이러한 로드들 만이 재프로빙을 위해 선택될 수 있다.
버스 인터페이스 유닛(37)은 로드가 재프로빙을 위해 선택되도록 하고, 그리고 데이터 캐시(28)에 도달하는 데이터의 패킷괴 동시에 데이터 포워딩 스테이지에 도달할 수 있게 포트 0을 통해 데이터 캐시(28)로 상기 로드가 전송되도록 하기위해서, 채움 데이터 이전에 채움 태그를 제공한다. 그 다음, 엑세스된 데이터가 포워드될 수 있다.
데이터 캐시(28)를 프로빙한 이후 저장들이 LS2 버퍼(62)로 이동되고, 후속 로드들이 LS1 버퍼(60)로부터 데이터 캐시(28)를 프로브하고 이로부터 데이터를 포워드하도록 하기 때문에, 더 오래된 저장이 엑세싱하는 것과 동일한 메모리 위치를 엑세싱하는 더 최신의 로드 엑세싱은 더 오래된 저장이 그의 데이터를 데이터 캐시(28)로 전달하기 이전에 데이터 캐시(28)를 프로빙할 것이다. 로드의 정확한 결과는 더 오래된 저장에 해당하는 저장 데이터를 수신하는 것이다. 따라서, LS2 제어 회로부(66)는 프로브 어드레스들을 감시하고, 어드레스들에 대한 더 오래된 저장부들이 LS2 버퍼(62)내에 있는지를 결정한다. 만일 정합이 검출되고 저장 데이터가 LS2 버퍼(62) 내에서 이용가능하면, LS2 제어 회로부(66)는 포워딩을 위해 LS2 버퍼(62)로부터 제공되는 데이터를 선택하고 선택된 데이터를 제공하기위해서 데이터 캐시(28)에 신호한다. 반면에, 만일 정합이 검출되고, 저장 데이터가 LS2 버퍼(62) 내에서 이용가능하지 않으면, 데이터 캐시(28)로부터의 데이터 포워딩은 취소된다. 로드는 LS2 버퍼(62)로 이동되고, 그리고 저장 데이터가 이용가능해질때까지 재프로빙을 위해 선택된다. 로드 포워딩의 저장에 관해서는 다음에 자세히 설명될 것이다.
일반적으로, LS2 제어 회로부(66)는 LS2 버퍼(62) 내의 엔트리들을 검사하고 데이터 캐시(28)를 재프로브하기위해 메모리 동작들을 선택한다. 로드 적중실패들은 데이터 캐시(28)로 복귀되는 데이터에 응답하여 재프로브하기위해 선택된다. 더 오래된 저장들에 적중하는 로드들은 이들이 현재 재프로브되고 있지 않으면 재프로브를 위해 선택된다. 저장들은 퇴거에 응답하여 재프로브하기위해 선택된다. 만일 다중 메모리 동작들이 선택될 수 있으면, LS2 제어 회로부(66)는 다중 메모리 동작들 중 가장 오래된 것을 선택할 것이다. 만일 LS2제어 회로부(66)가 (포트 0 먹스(72)를 통해) 포트 0을 이용하면, LS2 제어 회로부(66)는 포트 0 먹스(72)를 통해 LS2 입력을 선택하고 그 클럭 주기에서 포트 0 상의 LS1 버퍼(60)로부터 메모리 동작 선택을 디스에이블하도록 LS1 제어 회로부(64)에 신호한다.
스누프 인터페이스(52)를 통해 버스 인터페이스 유닛(37)으로부터의 스누프 요청들을 수신하도록 LS2 제어 회로부(66)가 또한 연결된다. 일반적으로, LS2 버퍼(62)의 메모리 동작들은 스누프되는데, 이는 이들이 데이터 캐시(28)를 프로브함으로써 상기 스누프 동작에 응답하는 교정 행위가 요구되기 때문이다. 예를 들어, (종속 명령들로 데이터를 포워드한) 로드 적중들은 버려지고 재실행될 필요가 있다. 저장들은 이들의 프로브로부터 캐시 상태를 저장할 수 있으며, 이는 변경될 필요가 있다. 반대로, LS1 버퍼(60) 내부의 메모리 동작들은 데이터 캐시(28)를 프로브하지 않았기 때문에, 스누프될 필요가 없다.
LS2 제어 회로부(66)는 스누프 요청을 수신하고, 스누프 요청에 대해 LS2 버퍼 엔트리들을 시험하며, 그리고 스누프 인터페이스(52)를 통해 버스 인터페이스 유닛(37)에 응답한다. 부가적으로, LS2 제어 회로부(66)는 상기 스누프에 응답하여 LS2 버퍼 내의 엔트리들의 갱신을 수행할 수 있다.
대체적으로 말하면, 버퍼는 나중의 검색을 위해 하나 이상의 정보 항목들을 저장하는데 사용되는 저장 요소이다. 버퍼는 다수의 레지스터들, 래치들, 플립-플롭들, 또는 다른 클럭되는 저장 디바이스들을 포함한다. 대안적으로, 버퍼는 랜덤 엑세스 메모리(RAM) 셀의 적절하게 구성된 세트를 포함한다. 버퍼는 다수의 엔트리들로 나뉘어지며, 여기서 각 엔트리는 버퍼가 설계되는 정보의 한 항목을 저장하도록 되어 있다. 엔트리들은 임의의 적절한 방식으로 할당 및 비할당될 수 있다. 예를 들어, 버퍼들은 쉬프팅 선입 선출(FIFO) 버퍼들로서 동작할 수 있고, 여기서 엔트리들은 오래된 엔트리들이 삭제됨에 따라 다운 쉬프트된다. 대안적으로, 버퍼에서 가장 오래된것과 가장 최신의 것을 지시하기위해 헤드(head) 및 테일(tail) 포인터들이 사용될 수 있고, 엔트리들은 이로부터 삭제될때까지 버퍼의 특정 저장 위치에 남아 있을 수 있다. 도 1에 예시된 저장 큐(400)는 버퍼의 한 타입일 수 있다. 여기서 사용되는 용어 "제어 회로부"는 설명된 동작을 달성하기위한 조합 논리 회로들, 클럭 저장 회로부, 그리고/또는 입력에 따른 동작을 수행하고 그에 응답하여 출력을 생성하는 상태 머신들의 임의 조합으로 간주된다.
주목할 사항으로, 일 실시예에서, 로드/저장 유닛(26)은 LS1으로부터의 저장 프로브들을 동일 포트 상의 더 오래된 저장의 데이터 전달과 오버랩한다. 이는 상기 저장 프로브가 적중/적중실패에 대한 데이터 캐시 태그들 만을 검사하기 때문에 수행될 수 있으며, 검색이나 상기 데이터 저장부 내의 데이터를 갱신하려하지 않는다. 더 주목할 사항으로, 비록 상기 설명이 모든 메모리 동작들이 LS2 버퍼(62)에 위치되는 일 실시예에 관해 설명하지만, 다른 실시예들은 이러한 방식으로 동작하지 않는다. 예를 들어, 로드 적중들은 어떠한 실시예들에서 LS2 버퍼(62)에 저장되지 않는다. 예를 들어, 메모리 순서화의 유지가 크게 요구되지 않는다면 이러한 실시예들이 활용될 수 있다.
저장에서 로드로의 포워딩
도 5는 로드/저장 유닛(26)과 데이터 캐시(28)의 일부의 일 실시예를 예시한다. 다른 실시예들이 가능하며 고려될 수 있다. 도 5의 실시예에서, 로드/저장 유닛(26)은 LS2 버퍼(62), LS2 제어 회로부(66), 데이터 포워드 먹스(100), 그리고 어드레스 및 경로 비교기들(102A-102B)을 포함한다. 부가적으로, 도 5의 실시예에서, 데이터 캐시(28)는 포트 1데이터 먹스(110)와 포트 0 데이터 먹스(112)를 포함한다. LS2 버퍼(62)는 데이터 포워드 먹스(100), 비교기들(102A-102B), 그리고 LS2 제어 회로부(66)와 연결된다. LS2 제어 회로부(66)는 먹스들(100, 110, 그리고 112)과 또한 연결된다. LS2제어 회로부(66)는 비교기들(102A-102B)과 또한 연결된다. 비교기들(102A-102B)은 데이터 캐시(28)의 포트들(0과 1) 상에 제공되는 데이터 어드레스들과 경로들을 수신하기위해 연결된다. 먹스(112)는 결과 버스(38DA)에 결과들을 제공하기위해 연결되고, 유사하게, 먹스(110)는 결과 버스(38DB)에 결과들을 제공하기위해 연결된다. 결과 버스들(38DA-38DB)은 도 3에 도시된 바와 같이 결과 버스들(38D)의 일 실시예를 구성할 수 있다.
대체적으로 말하면, 로드/저장 유닛(26)은 프로빙 로드 메모리 동작이 LS2 버퍼(62)에 저장된 더 오래된 저장 메모리에 적중하는 경우들을 처리하도록 구성된다. 로드/저장 유닛(26)은 LS1 버퍼(60)로부터 데이터 캐시(28)를 프로빙하는 메모리 동작의 데이터 어드레스들의 인덱스 부분들과 LS2 버퍼(62) 내부의 메모리 동작들의 데이터 어드레스들의 인덱스 부분들을 비교한다. 만일 인덱스들이 정합되고 메모리 동작들이 데이터 캐시(28)에서와 동일한 경로로 적중하면, 프로빙 메모리 동작은 LS2 버퍼(62)의 저장에 적중한다. 만일 프로빙 로드가 LS2 버퍼(62)의 저장에 적중하고 저장 데이터가 LS2 버퍼(62)내에서 이용가능하면, 저장 데이터는 캐시 내에 있는 임의의 로드 데이터를 대신하여 포워딩하기위해 데이터 캐시(28)로 전송된다. 반면에, 프로빙 로드는 저장 데이터가 이용가능하지 않은 LS2 버퍼(62)에서 임의 저장에 적중할 수 있다. 이러한 경우, 데이터 캐시(28)로부터의 데이터 포워딩은 취소되고 로드 메모리 동작은 저장 데이터가 이용가능해질때까지 LS2 버퍼(62)로부터 재프로빙을 위해 선택된다. 결국, 저장 데이터는 로드를 재프로빙하는 동안 LS2 버퍼(62) 내에서 이용가능해지고, 이로부터 포워드되거나, 혹은 로드에의해 재프로빙되는 동안 저장은 데이터 캐시(28)를 갱신할 수 있고 데이터 캐시(28)로부터 포워드될 수 있다.
대체적으로 말하면, 저장 데이터는 저장 데이터가 그 저장 위치에 실질적으로 저장되면 저장 위치로부터 "이용가능"하다. 만일 데이터가 조금 나중에 저장부 위치에 저장되지만 아직 그곳에 저장되지 않았으면, 데이터는 "이용가능하지 않게(not available)", "아직 이용가능하지 않게" 또는 "이용할 수 없게" 된다. 예를 들어, 만일 저장 데이터가 저장 데이터의 소스로부터 LS2 버퍼 엔트리로 전송되지 않았으면, LS2 버퍼 엔트리에서 이용가능하지 않다. 저장 데이터의 소스는 저장 데이터를 생성하기위해 실행되는 명령이며, 저장에 해당하는 동일 명령 (목적지로서 메모리 피연산자를 특정하는 명령) 혹은 더 오래된 명령일 수 있다. 저장 데이터 태그는 저장 데이터의 소스를 식별함으로써 저장 데이터를 포획하기위해 실행 유닛(40)으로부터의 결과 태그들과 비교된다.
전술한바와 같이, 오래된 저장들에 적중하는 로드들을 검출하기 위해 LS2 버퍼(62)내에 어드레스들 및 경로 표시들을 저장하기 위해 로드 어드레스들 및 경 로 표시들을 비교한다. 따라서, 비교기(102)들과 같은 비교기들이 제공된다. 데이터 캐시(28)의 각 포트의 어드레스와 경로 표시들을 비교하기 위해 비교기(102)들이 제공된다. 주목할 사항으로, 이 비교기(102)들은 필요한 경우 CAM 구조로서 LS2 버퍼(62)내에 집적될 수도 있다.
만일 로드 엔트리에서 로드 적중이 검출되고 그리고 대응 저장 데이터가 이용가능하면, LS2 제어 회로(66)는 데이터 포워드 먹스(100)를 이용하여 저장 데이터를 선택하고, 적중이 검출되는 포트에 근거하여 포드 0 먹스(112) 또는 포트 1 먹스(110)에 데이터를 제공한다. 따라서, 데이터 포워드 먹스(100)는 각 포트에 대해 하나씩 한 세트의 독립적인 먹스를 포함한다. 또한, LS2 제어 회로(66)는 데이터 캐시(28)가 적중 로드에 대해 데이터 캐시(28)로부터 판독된 캐시 데이터 대신에 포워드된 데이터를 선택하도록, 데이터 캐시(28)에 대응 신호를 어서팅한다.
또한, 주목할 사항으로, 비록 본 발명은 LS2 버퍼와 함께 사용하는 것으로 보여졌지만은 다른 실시예들이 고려될수 있으며, 여기서 저장 포워딩 메커니즘은 데이터 캐시(28)를 프로브한 저장 메모리 동작들만을 저장하는 일반적인 저장 큐와 함께 수행된다 (예를 들어, 저장 큐(400)는 일 특정 실시예에서 사용된다). 더욱 주목할 사항으로, 비록 먹스들(110과 112)이 데이터 캐시(28) 내에 도시되었지만, 이런 회로부는 필요하다면 로드/저장 유닛(26) 내에 이용될 수 있다. 또한, 비록 먹스(100)가 포워딩을 위해 LS2 버퍼(62)로부터 데이터를 선택하는 것으로 도시되었지만, 먹스(100)는 LS2 버퍼(62)가 개별 클럭 저장 디바이스(예를 들어, 레지스터들)가 아닌 RAM 구조라면, 데이터가 판독되는 LS2 버퍼(62)에 판독 엔트리 숫자를 제공하기 위하여 제거될 수 있다.
또한, 주목할 사항으로, 어떠한 특정 실시에서, 로드/저장 유닛(26)은 해당 저장이 이용가능하지 않은 저장에 적중하는 로드가 검출되는 경우, 데이터의 포워딩을 가속하기위해 종속성 링크 파일을 사용할 수 있다. 이러한 로드의 검출에 응답하여, 로드/저장 유닛(26)은 로드를 위해 종속성 링크 파일의 엔트리를 할당할 수 있다. 종속성 링크 파일 엔트리는 저장에 적중하는 로드를 식별하는 로드 식별자(예를 들어, 재배열 버퍼(32)에의해 로드에 해당하는 명령에 할당되는 명령 태그)와 로드에의해 적중되는 저장에 해당하는 저장 데이터의 소스를 식별하는 소스 데이터 식별자(예를 들어, 저장 데이터 태그)를 저장한다. 그 다음, 로드/저장 유닛(26)은 종속성 링크 파일 내부에 저장된 저장 데이터 태그들을 위해 결과 버스들(38)을 감시할 수 있다. 이러한 저장 데이터가 결과 버스들(38) 중 하나에 제공된다는 것을 검출함에 따라, 로드/저장 유닛(26)은 데이터 캐시(28)가 해당 결과 버스로부터의 데이터를 데이터 캐시(28)로부터의 결과 버스 상으로 포워드하도록한다. 부가적으로, 해당 엔트리로부터의 로드 식별자는 결과 태그로서 포워드될 수 있다. 주목할 사항으로, 종속성 링크 파일은 완전히 선택적인 성능 개선이다. 상기 종속성 링크 파일을 이용하지 않는 실시예들이 고려된다.
도 6에서, LS2 제어 회로부(66)와 LS2 엔트리(94)의 일실시예의 일부에 대한 블록도가 도시된다. 다른 실시예들과 특정 실시들이 고려된다. 도 6의 실시예는 비교기(102AA), 비교기(102AB), AND 게이트(120), 적중 제어 회로부(132), 그리고 데이터 포워드 먹스(100)를 포함한다. 적중 제어 회로부(132)는 적중 엔트리 레지스터(134)를 포함한다. 비교기(102AA)는 포트0으로부터 적어도 데이터 어드레스의 인덱스 부분(참조번호 136)을 수신하고 어드레스-엔트리(94)의 필드(96A)에 저장된 데이터 어드레스의 인덱스 부분을 수신하기위해 연결된다. 비교기(102AA)는 AND 게이트(120)에 출력을 제공하고, AND 게이트(120)는 저장 유효 비트(ST V 필드(96B))와 엔트리(94)로부터 적중 비트(H 필드(96C))를 수신하도록 연결된다. AND 게이트(120)의 출력은 적중 저장 신호로서 적중 제어 회로부(132)와 연결되며, 적중 제어 회로부(132)는 포트 0 로드 신호(참조번호 140), 포트 0 적중 신호(참조번호 122), 그리고 포트 0 오프셋 및 크기 정보(참조번호 124)를 더 수신도록 연결된다. 비교기(102AB)는 경로 필드(96E)의 내용들을 수신하기위해 연결되고, 그리고 포트 0 경로 표시(참조번호 142)를 수신하기위해 연결된다. 비교기(102AB)는 출력을 적중 경로 신호로서 적중 제어 회로부(132)에 제공하기위해 연결된다. 적중 제어 회로부(132)는 데이터 유효 필드(96G)로부터의 데이터 유효 비트와 오프셋 및 크기 필드(96F)로부터의 오프셋 및 크기 정보를 수신하도록 더 연결된다. 다른 엔트리들에 해당하는 유사한 적중 저장, 적중 경로, 데이터 유효, 그리고 오프셋 및 크기 신호들 역시 적중 제어 회로부(132)에의해 수신될 수 있다. 적중 제어 회로부(132)는 예약 스테이션들(22) 및 재배열 버퍼(32)(참조번호 146)에 취소 데이터 FWD 신호들을 제공하고, 데이터 캐시(28)(참조번호 148)에 선택 LS2 신호들을 제공하기위해 연결된다. 또한, 적중 제어 회로부(132)는 먹스(100)에 선택 제어들을 제공하기위해 연결된다. 먹스(100)는 저장 데이터 필드(96H)로부터의 저장 데이터와(그리고 다른 LS2 버퍼 엔트리들로부터의 저장 데이터)를 수신하도록 연결된다.
일반적으로, 도 6에 예시된 논리부는 포트 0상의 로드에의해 엔트리(94)의 저장에 대한 적중을 검출할 수 있다. 유사한 논리부가 포트 1 및 엔트리(94)에 관해서 이용될 수 있으며, 다른 엔트리들에 대한 모든 포트들에 관해서 이용될 수 있다. 특히, 비교기(102AA)는 포트 0 상의 데이터 어드레스의 인덱스 부분을 어드레스-어드레스 필드(96C)의 인덱스와 비교한다. 인덱스들이 정합되면, 비교기(102AA)는 그의 출력 신호를 어서팅한다. AND 게이트(120)는 비교기(102AA)의 출력 신호를 수신하고, 출력 신호와 저장 유효 비트 및 적중 비트를 조합한다. 저장 유효 비트는 (엔트리(94) 그리고 다른 LS2 버퍼 엔트리들이 로드들이나 저장들 중 하나에 해당하는 정보를 저장하기 때문에) 엔트리(94)가 저장 메모리 동작에 해당하는 정보를 저장하는지를 표시하고, 그리고 저장 비트는 저장이 데이터 캐시(28)를 프로브한 경우, 데이터 캐시(28) 내에서 저장이 적중하는지를 표시한다. 따라서, AND 게이트(120)에의해 제공되는 적중 저장 신호가 어서팅되는 경우, 로드 인덱스가 데이터 캐시(28)에서 적중인 저장 인덱스에 적중한다는 것을 나타낼 수 있다.
적중 제어 회로(132)는 포트 0의 메모리 동작에 대한 데이터 포워딩 신호를 생성하기위해서, 엔트리(94)에 해당하는 적중 저장 신호와 포트 0 및 포트 0 로드 신호(140)에 해당하는 다른 적중 저장 신호들을 조합한다. 본 실시예에서, 적중 제어 회로부(132)는 로드들에 대한 두가지 상황들을 검출할 수 있는데, 이들은, (i) 적중 저장 신호가 어서팅되고 해당 데이터 유효 비트(96G)가 세트되는 경우, 그리고 (ii) 적중 저장 신호가 어서팅되고 해당 데이터 유효 비트(96G)가 클리어되는 경우이다. 만일 적중 저장 신호가 어서팅되지 않거나 포트 0 상의 메모리 동작이 로드가 아니라면, 적중 제어 회로부(132)는 그 메모리 동작에 대해 무효(idle)하다. 유사한 적중 제어 회로부는 본 실시예에서, 포트 1 상의 메모리 동작을 위해 이용될 수 있다.
경우(i)에 있어서, 적중 제어 회로부(132)는 데이터 포워드 먹스(100)에 대한 먹스 선택 신호들을 생성하고, 데이터 포워드 먹스(110)가 어서팅된 적중 저장 신호에 해당하는 LS2 버퍼 엔트리의 저장 데이터 필드(96H)로부터 저장 데이터를 선택하도록 한다. 예를 들어, 만일 AND 게이트(120)에의해 생성되는 적중 저장 신호가 어서팅되면, 적중 제어 회로부(132)는 먹스(100)로 하여금 엔트리(94)의 저장 데이터 필드(96H)로부터 저장 데이터를 선택하도록 하고, 포트 0 먹스(112)에 해당하는 선택 LS2 신호(148)을 어서팅하도록 한다. 선택된 데이터는 도 5를 통해 상기 설명된 바와 같이, 데이터 캐시(28)에의해 포워드된다. 경우(ii)에 있어서, 적중 제어 회로(132)는 예약 스테이션들(22)과 재배열 버퍼(32)로, 이러한 유닛들이 그 클럭 주기동안 포트 0 상의 로드를 위해 포워드된 데이터를 무시하도록 알리는 취소 FWD 신호를 어서팅할 수 있다.
따라서, 적중 제어 회로(132)는 엔트리(94)의 저장 인덱스와 저장 인덱스 및 데이터 캐시(28)에서 적중된 저장의 정합을 기반으로 엔트리(94)로부터 데이터를 포워드한다. 특히. 로드가 캐시 데이터(28)에서 적중인지, 혹은 상기 로드와 상기 저장이 동일 경로에서 적중인지가 아직 결정되지 않을 수 있다. 이러한 정보는 로드의 프로브의 종료까지는 이용가능하지 않으며, 이는 본 실시예에서는 후속 클럭 주기에서 수행된다. 따라서, 적중 제어 회로부(132)는 LS2 버퍼(62)의 엔트리 수를 포획할 수 있으며, 이로부터 데이터는 적중 엔트리 레지스터(134)에서 포워드된다. 데이터 포워딩은 로드가 데이터 캐시(28)에서 (포트 0 상에 적중 신호(122)가 신호되는) 적중이고, 적중 엔트리 레지스터(134)에 의해 식별되는 엔트리에 저장되는 로드 및 저장에 대한 경로 식별자들이 정합되면 (예를 들어, 만일 비교기(102AB)가 포트 0에 대한 경로 지시자와 경로 필드(96E)로부터의 경로 지시자 간의 정합을 검출하고, 만일 엔트리(94)가 적중 엔트리 레지스터(134)에의해 식별되면) 정확한 것이다. 만일 포워딩이 정확하지 않다면, 적중 제어 회로(132)는 포트 0으로 이전에 포워드된 데이터를 무시하도록 예약 스테이션들(22) 그리고/또는 재배열 버퍼(32)에 알리기위해서 취소 FWD 신호(146)를 어서팅할 수 있다. 적중 제어 회로(132)는 (상술된 바와 같이) 데이터가 이용가능하지 않기 때문에, 그리고 데이터가 포워드되는 저장과는 다른 방식으로 적중실패 또는 적중인 로드에 대한 정확하지 않은 포워딩 때문에 포워딩을 취소하기위한 개별 취소 데이터 FWD 신호들(146)을 제공하는데, 이는 이들 신호들이 동일 로드에 대해 서로 다른 시간에 어서팅될 수 있기 때문이다.
도 1에 관해 전술한 바와 같이, 적중 제어 회로부(132)는 적어도 로드에의해 판독되는 한 바이트가 저장에의해 갱신되었는지를 결정하기위해 로드 및 저장에대한 (캐시 라인 내부의) 오프셋 및 크기 정보를 이용함으로써 LS2 버퍼(62)로부터의 저장 데이터가 포워드 되어야 하는지를 더 결정할 수 있다. 오프셋 및 크기 정보는 상술된 바와 같은(예를 들어, 어드레스 비트들과 바이트 인에이블 마스크들의 어떠한 조합), 임의의 용이한 형태로 제공되어질 수 있다. 주목할 사항으로, 만일 적중 제어 회로부(132)가 로드 및 저장 어드레스들의 오프셋 부분을 비교하면, 그 부분은 필요하다면 인덱스 부분에 부가적으로 비교기(102AA)에서 비교될 수 있다.
또한, 주목할 사항으로, 적중 제어 회로부(132)는 소정의 로드에 대해서 하나 이상의 저장이 적중됨을 검출할 수 있다. 적중 제어 회로부(132)는 데이터 포워딩을 위한 로드보다 오래된 가장 최신의 저장을 결정할 것이다. 대안적으로, 각 LS2 버퍼 엔트리는 소정의 어드레스를 갱신하는 LS2 버퍼(62)의 최종 저장을 식별하는 최종 버퍼 표시를 포함할 수 있다. 상기 LIB 표시는 LS2 버퍼(62)의 가장 최신의 저장을 제외한 적중 저장 신호의 어서팅을 방지하기위해 AND 게이트(120)에서 사용될 수 있다. 따라서, 다중 적중들의 우선순위화(p를 피할 수 있다. 저장들이 LS2 버퍼(62)로 위치되면 그의 LIB 비트들은 세트되고, 동일 어드레스에 대한 임의의 더 오래된 저장들의 LIB 비트들은 클리어된다.
주목할 사항으로, 비록 비교기(102AB)가 LS2 버퍼 엔트리(94)에 저장된 경로 표시들과 로드의 경로 표시을 비교하는 것으로 도시되어졌지만, 대안적 실시예는 로드를 위해 데이터를 포워드하는데 사용되는 엔트리로부터 경로 표시를 판독하고(여기서 상기 포워딩은 인덱스 비교와 데이터 캐시에 적중하는 저장을 기반으로 하며), 그리고 판독되는 경로 표시는 동일 경로에서 로드와 저장이 적중함을 확인하기위해서 로드 경로 표시와 비교될 수 있다. 경로 표시는 후속 비교를 위해 적중 엔트리 레지스터(134)와 유사한 레지스터에 저장될 수 있다.
또한, 주목할 사항으로, 로드에 의해 판독되는 하나 이상의 바이트들은 로드에 의해 판독되는 하나 이상의 바이트들에 대하여 로드에 의해 적중되는 저장에 의해 갱신되지 않을 수 있다. 이러한 경우들에서, 데이터 캐시는 저장 데이터를 로드에 의해 판독되는 바이트들을 제공하기위한 캐시 데이터와 병합될 수 있다. 다중 저장들이 로드에 의해 판독되는 바이트들의 개별적인 바이트들을 제공하는 경우, 로드가 퇴거되고 재프로브 된다. 하나 이상의 다중 저장들은 퇴거되어 데이터 캐시로 넘겨지며, 이러한 저장들에 의해 갱신되고 로드에 의해 판독되는 바이트들이 데이터 캐시로부터 제공된다. 변형적으로, 도 6의 장치는 서로 다른 저장들로부터의 바이트들을 통합하여 로드 데이터를 제공한다. 다른 실시예들은 요구되는 대로 상기 시나리오들을 다른 방식들로 처리한다.
도 6에 예시된 논리부는 단지 예시적인 것이다. (도시된 논리의 모든 불 등가들(boolean equivalents)을 포함하는) 모든 적절한 조합 논리부가 이용될 수 있다는 것을 유념하자. 또한, 엔트리(94)는 예시적인 LS2 버퍼 엔트리라는 것을 유념하자. 엔트리(94)는 설계 선택에 따라, 도 6에 도시된 것 이상의 부가 정보를 저장할 수 있다.
다음으로, 도 7은 LS1 버퍼(60)로부터 데이터 캐시(28)를 프로브하는 메모리 동작에 대한 예시적인 파이프라인을 도시한 타이밍도를 예시한다. 다른 파이프라인들을 이용하는 다른 실시예들이 가능하며 고려된다. 도 7에서, 클럭 주기들은 수직 실선들에 의해 범위가 정해진다. 수평 점선이 또한 도시된다. 다른 요소들의 로드/저장 유닛(26)으로의 인터페이스를 예시하기 위하여, 프로세서(10)의 나머지 부분들에 관련된 파이프라인 스테이지들이 도시된다.
클럭 주기(CLK0)는 메모리 동작을 지정하는 명령에 대한 디코드/디스패치 주기이다. 클럭 주기(CLK0) 동안, 명령을 디코드하는 디코드 유닛(20)은 메모리 동작에 관하여 로드/저장 유닛(26)에 신호를 보낸다. LS1 제어 회로(64)는 대응하는 명령에 대한 디코드/디스패치 스테이지 동안 메모리 동작에 대하여 LS1 버퍼 엔트리를 할당한다. 또한, 디코드 유닛(20)은 디코딩된 명령을 대응하는 예약 스테이션(22)으로 전송한다.
클럭 주기(CLK1) 동안, 어드레스 생성 유닛은 메모리 동작에 대한 데이터 어드레스를 생성시킨 다음, 이 데이터 어드레스를 로드/저장 유닛(26)으로 전송한다. 이 클럭 주기 동안, 메모리 동작은 (제공되고 있는 데이터 어드레스에 의해) LS1 제어 회로(64)에 의해 수행되는 검사에 참여하고, 데이터 캐시(28)를 프로브하도록 선택된다. 이에 따라, 메모리 동작은 LS1 파이프라인의 검사 파이프라인 스테이지 내에 있게 된다.
클럭 주기(CLK2) 동안, 데이터 어드레스는 데이터 캐시(28)로 전송된다. 클럭 주기(CLK2) 내에서 화살표로 나타낸 바와 같이, 클럭 주기(CLK2)의 끝에서 메모리 동작은 LS1 버퍼(60)로부터 임시 버퍼(68)로 이동된다. 메모리 동작은 클럭 주기(CLK2) 동안 LS1의 파이프라인의 데이터 캐시 스테이지로의 어드레스에 있게 된다.
클럭 주기(CLK3) 동안, 데이터 어드레스는 데이터 캐시(28)를 엑세스한다. (메모리 동작이 로드인 경우), 이 메모리 동작에 대응하는 데이터가 클럭 주기(CLK3)의 끝에서 전송된다. 구체적으로, 로드 어드레스의 인덱스 부분이 LS2 버퍼(62) 내의 저장 어드레스의 인덱스 부분과 정합되고 저장이 데이터 캐시(28) 내에 적중된다면, 클럭 주기(CLK3) 동안 LS2 버퍼(62)로부터의 데이터가 캐시 데이터 대신에 전송된다. 또한, 메모리 동작은 임시 버퍼(68)로부터 LS2 버퍼(62)로 이동된다. 메모리 동작은 클럭 주기(CLK3) 동안 캐시 엑세스 스테이지 내에 있게 된다.
클럭 주기(CLK4) 동안, (메모리 동작이 로드인 경우) 그 메모리 동작에 종속하는 명령이 실행된다. 이에 따라, 도 7에 예시된 파이프라인은 종속 동작 실행 로드 지연에 세 개의 클럭 주기 어드레스를 생성시킨다. 또한, 메모리 동작은 클럭 주기(CLK4) 동안 응답 파이프라인 스테이지 내에 있게 된다. 데이터 캐시(28)는 응답 스테이지 동안 (적중에 대한 경로 표시를 포함하는) 적중/적중 실패 정보 및 물리적인 어드레스를 제공한다. 이에 따라, LS2 제어 회로(66)는 응답 스테이지에서 적중/적중 실패 정보 및 물리적인 어드레스와 메모리 동작을 연결시킨다. 또한, 로드에 대한 경로 표시 및 적중/적중 실패 표시는 (적용가능한 경우) 클럭 주기(CLK3) 동안 LS2 버퍼(62)로부터 전송된 데이터를 확인하는 데에 이용된다. 만일 전송된 데이터가 다른 방식으로 적중 또는 적중 실패되는 로드로 인하여 부정확하게 전송된다면, 취소 FWD 신호가 어서팅된다.
클럭 주기(CLK5) 동안, 메모리 동작은 응답2 파이프라인 스테이지 내에 있게 된다. 이 스테이지 동안, (메모리 동작이 적중 실패인 경우) 이 메모리 동작에 의해 엑세스되는 캐시 라인에 할당된 적중 실패 어드레스 버퍼 엔트리를 확인하는 적중 실패 어드레스 버퍼 태그가 데이터 캐시(28)에 의해 제공된다. 이에 따라, 응답2 스테이지 동안, LS2 제어 회로(66)는 데이터 캐시(28)로부터 수신된 MAB 태그와 메모리 동작을 연결시킨다.
다음으로, 도 8은 LS2 버퍼(62)로부터의 데이터 캐시(28)를 재프로브하는 메모리 연산에 대한 예시적인 파이프라인을 도시한 타이밍도를 예시한다. 다른 파이프라인들을 이용하는 다른 실시예들이 가능하며 고려된다. 도 8에서, 클럭 주기들은 수직 실선들에 의해 범위가 정해진다. 수평 점선이 또한 도시된다. 다른 요소들의 로드/저장 유닛(26)으로의 인터페이스를 예시하기 위하여, 프로세서(10)의 나머지 부분들에 관련된 파이프라인 스테이지들이 도시된다.
클럭 주기(CLK0) 동안, 메모리 동작은 LS2 버퍼 엔트리들의 검사에 참여하며, 데이터 캐시(28)를 재프로브시키도록 선택된다. 클럭 주기(CLK0) 아래의 화살표로 도시한 바와 같이, 메모리 동작은 메모리 동작에 대한 MAG 태그를 정합시키는 채움 태그가 수신되는 경우, 메모리 동작이 이전 프로브 상에서 데이터가 이용될 수 없었던 LS2 버퍼(62) 내의 더 오래된 저장을 적중시키는 로드인 경우, 또는 메모리 동작이 재배열 버퍼(32)에 의해 퇴거되었던 저장인 경우 선택된다.
클럭 주기(CLK1) 동안, 검사1 스테이지 동안 선택된 메모리 동작은 스캔2 스테이지로 들어간다. 검사2 스테이지 동안, 메모리 동작은 데이터 캐시(28)로의 전송을 위하여 멀티플렉서들(76 및 72)을 통하여 선택된다. 이에 따라, LS2 제어 회로(66)는 멀티플렉서(76)를 통하여 검사2 스테이지 내에서 메모리 동작을 선택한다. 클럭 주기들(CLK2, CLK3, CLK4 및 CLK5)은 LS2 버퍼 재프로브 파이프라인의 데이터 캐시에 대한 어드레스, 캐시 엑세스, 응답 및 응답 2 스테이지들이며, 상기 설명된 대응하는 스테이지들과 유사하다. 이에 따라, 본 실시예에서, 버스 인터페이스 유닛(37)은 대응하는 데이터를 제공하기 전에 MAB 태그 4 클럭들을 제공하여, 채움 데이터가 데이터 캐시(28)에 도달하고 (이에 따라 채움 데이터가 전송되는) 클럭 주기 동안 캐시 엑세스 스테이지에서 전송될 대응하는 채움 데이터를 엑세스하는 로드를 선택할 수 있게 한다.
도 7 및 8의 점선들 윗쪽의 명령 파이프라인 스테이지들과 점선들 아랫쪽의 메모리 동작 파이프라인 스테이지들 간의 타이밍은 도 7 및 8에 도시된 것들로부터 연장될 수 있다는 것을 유념하자. 예를 들어, 도 7에서, 어드레스는 디코드/디스패치 주기 바로 다음의 클럭 주기에서 정확히 생성되지 않는다. 피연산자들이 이용될 수 없거나, 대신에 더 오래된 명령들이 어드레스 생성을 위해 선택된다. 또한, 메모리 동작은 어드레스가 제공되는 클럭 주기 동안에는 엑세스를 위하여 검사되지 않는데, 이는 나머지 더 오래된 메모리 동작들이 대신에 검사되기 때문이다.
다음으로, 도 9는 (예를 들어, 로드의 프로브의 캐시 엑세스 파이프라인 스테이지 동안) LS2 버퍼(62)로부터의 전송을 위해 데이터를 선택하기 위하여 로드를 프로브하는 동안, 적중 제어 회로(132)의 일 실시예의 동작을 도시한 흐름도를 예시한다. 다른 실시예들이 가능하며 고려된다. 도 9에 도시된 단계들은 이해의 용이를 위하여 특정한 순서로 도시되었지만, 모든 적절한 순서가 이용될 수 있다. 또한, 도 9에 도시된 단계들은 적중 제어 회로(132) 내의 조합 논리부에 의해 동시에 수행될 수 있다.
적중 제어 회로(132)는 로드가 저장에 적중되는 지와 저장이 캐시 적중인지를 결정한다(결정 블록(150)). 구체적으로, 적중 제어 회로(132)는 로드 인덱스가 저장 인덱스와 정합되고 (오프셋 및 크기 정보가 정합되는 경우), 로드가 저장을 적중시키는 지를 결정한다. 이러한 결정은, 로드 적중 정보 및 경로 표시가 (도 10의 하부에 도시된 바와 같이) 이후의 클럭 주기들에서 이용가능해질 때, 정확한 것으로서, 또는 부정확한 것으로서 확인된다. 만일 결정 블록(150)이 "예"로 결정되면, 적중 제어 회로(32)는 캐시 데이터 대신에 LS2 버퍼(62)로부터 제공된 데이터를 선택하도록 데이터 캐시(28)에 신호를 보내고, 적중 엔트리로부터 비롯되는 데이터를 멀티플렉싱하며(단계 152), 그리고 적중 엔트리 레지스터(134) 내에 적중하는 LS2 버퍼 엔트리를 기록한다(단계 154). 만일 결정 블록(150)이 "아니오"로 결정되면, 적중 제어 회로(132)는 그 로드에 관련된 어떠한 부가적인 동작도 하지 않는다.
도 10은 (예를 들어, 로드의 프로브의 응답 파이프라인 스테이지 동안) LS2 버퍼(62)로부터의 전송을 확인하기 위하여 로드를 프로빙하는 동안, 적중 제어 회로(132)의 일 실시예의 동작을 예시한 흐름도이다. 다른 실시예들이 가능하며 고려된다. 도 10에 도시된 단계들은 이해의 용이를 위하여 특정한 순서로 도시되었지만, 모든 적절한 순서가 이용될 수 있다. 또한, 도 10에 도시된 단계들은 적중 제어 회로(132) 내의 조합 논리부에 의해 동시에 수행될 수 있다.
적중 제어 회로(132)는 엔트리가 적중 엔트리 레지스터(134) 내에 기록되었는 지를 결정한다(결정 블록(160)). 예를 들어, 적중 엔트리 레지스터(134)는 유효 비트를 포함할 수 있는데, 이 유효 비트는 데이터가 인덱스 비교들 및 적중되는 저장을 기초로 전송될 때 세트될 수 있으며, 그리고 로드 적중 및 경로 표시 정합을 확인한 후 리셋될 수 있다. 엔트리가 적중 엔트리 레지스터(134) 내에 기록되지 않는 경우, 적중 제어 회로(132)는 로드에 관련하여 어떠한 부가적인 동작도 하지 않는다. 엔트리가 적중 엔트리 레지스터(34)에 기록되는 경우, 적중 제어 회로(134)는 로드 경로 표시가 적중 엔트리 레지스터(134) 내에 기록된 엔트리의 저장 경로 표시와 정합되는 지와, 로드가 적중하는 지를 결정한다(결정 블록(162)). 로드가 적중 실패하거나, 또는 로드 경로 표시가 저장 경로 표시와 정합되지 않는 경우, 적중 제어 회로(132)는 취소 FWD 신호를 어서팅한다(단계 164)). 로드가 적중하고, 로드 경로 표시가 적중 엔트리 레지스터(134) 내에 기록된 엔트리의 저장 경로 표시와 정합되는 경우, 적중 제어 회로(132)는 이 로드에 관련하여 어떠한 부가적인 동작도 하지 않는다.
또한, 본원의 설명은 다양한 신호들의 어서팅에 주목하고 있다는 것을 유념하자. 본원에서 이용되는 바와 같이, 신호는 특정한 조건을 나타내는 값을 전달하는 경우 "어서팅된다". 반대로, 특정한 조건의 결여를 나타내는 값을 전달하는 경우에는 "디어서팅된다". 신호는 논리 0 값을 전달할 때, 반대로 논리 1 값을 전달할 때에 어서팅되는 것으로 정의된다.
컴퓨터 시스템들
도 11에서, 버스 브리지(202)를 통해 다양한 시스템 요소들과 연결되는 다중 프로세서 컴퓨터(100)를 포함하는 컴퓨터 시스템(200) 일 실시예의 블록도가 도시된다. 다른 실시예들이 가능하며 고려될 수 있다. 상기 묘사된 시스템에서, 주 메모리(204)는 메모리 버스(206)를 통해 버스 브리지(202)와 연결되고, 그래픽 콘트롤러(208)는 AGP 버스(210)를 통해 버스 브리지(202)와 연결된다. 마지막으로 다수의 PCI 디바이스들(212A-212B)이 PCI 버스(214)를 통해 버스 브리지(202)와 연결된다. 보조 버스 브리지(216)가 EISA/ISA 버스(220)를 통해 하나 이상의 EISA 또는 ISA 디바이스들(218)과의 전기적 인터페이스를 수용할 수 있도록 더 제공된다. 다중 프로세서 컴퓨터(100)는 CPU 버스(224)를 통해 버스 브리지(202) 및 선택적 L2 캐시(228)와 연결된다. CPU 버스(224) 및 L2 캐시(228)로의 인터페이스는, 버스 인터페이스 유닛(37)이 연결된 인터페이스들을 포함한다.
버스 브리지(202)는 다중 프로세서 컴퓨터(100), 주 메모리(204), 그래픽 콘트롤러(208), 그리고 PCI 버스(214)에 부착된 디바이스들 간의 인터페이스를 제공한다. 버스 브리지(202)와 연결된 디바이스들 중 하나에서 동작이 수신되면, 버스 브리지(202)는 상기 동작의 타겟(예를 들어, 특정 디바이스 또는 PCI 버스(214)의 경우, 그 타겟은 PCI 버스(214)에 있는 특정 디바이스임)를 식별한다. 버스 브리지(202)는 상기 동작을 타겟 디바이스로 전달한다. 버스 브리지(202)는 일반적으로 소스 디바이스에 의해 사용되는 프로토콜 또는 타겟 디바이스 혹은 버스에 의해 사용되는 프로토콜로부터 동작을 해석한다.
PCI 버스(214)를 위한 ISA/EISA 버스에 인터페이스를 제공하는데 부가적으로, 보조 버스 브리지(216)는 바람직한 부가적인 기능을 더 포함할 수 있다. 보조 버스 브리지(216)의 외부 또는 내부적으로 포함되는 입/출력 콘트롤러(미도시) 역시 필요하다면 키보드 및 마우스(222) 그리고 다양한 직렬 및 병렬 포트들을 선택적으로 지원하도록 컴퓨터 시스템(200) 내에 포함될 수 있다. 외부 캐시 유닛(미도시)이 다중 프로세서 컴퓨터(100)와 버스 브리지(202) 간의 CPU 버스(224)에 더 연결될 수 있다. 대안적으로, 외부 캐시는 버스 브리지(202)와 연결될 수 있고, 외부 캐시에 대한 캐시 제어 논리부는 버스 브리지(202)에 집적될 수 있다. L2 캐시(228)는 프로세서(10)의 후면 구성에서 더 도시된다. L2 캐시(228)는 다중 프로세서 컴퓨터(100)와 분리되고, 다중 프로세서 컴퓨터(100)와 한 카트리지(예를 들어 슬롯 1 또는 슬롯 A)에 집적되거나 심지어는 다중 프로세서 컴퓨터(100)와 하나의 반도체 기판 상에 집적될 수 있다.
주 메모리(204)는 어플리케이션 프로그램들이 저장되고, 이로부터 다중 프로세서 컴퓨터(100)가 우선적으로 실행하는 메모리이다. 적절한 주 메모리(240)에는 DRAM(동적 랜덤 엑세스 메모리)이 있다. 예를 들어, 다수의 뱅크들의 SDRAM(동기 DRAM) 또는 램버스 DRAM(RDRAM)이 적절할 수 있다.
PCI 디바이스들(212A-212B)은 예를 들어 네트워크 인터페이스 카드들, 비디오 가속기들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브들 혹은 드라이브 콘트롤러들, SCSI(소형 컴퓨터 시스템 인터페이스) 어탭터들 그리고 전화기 카드들과 같은 다양한 주변 디바이스들의 예시이다. 유사하게, ISA 디바이스(218)는 모뎀, 음악 카드, 그리고 예를 들어 GPIB 또는 필드 버스 인터페이스 카드들 같은 다양한 데이터 수집 카드들과 같은 다양한 종류의 주변 디바이스들의 예시이다.
그래픽 콘트롤러(208)는 표시부(226) 상에 문자나 그림들의 표시를 제어하기위해 제공된다. 그래픽 콘트롤러(208)는 당 업계에서 잘 알려진 바와 같이 3차원 데이터 구조들을 주 메모리(204)로/이로부터 효율적으로 이동시킬 수 있도록 한 전형적인 그래픽 가속기로 구체화 될 수 있다. 따라서, 그래픽 콘트롤러(208)는 AGP 버스(210)의 마스터일 수 있고, 즉, 버스 브리지(202) 내의 목표 인터페이스에 대해 엑세스를 요청 및 수신할 수 있어 주 메모리(204)에 대한 엑세스들 획득할 수 있다. 전용 그래픽 버스는 주 메모리(204)로부터의 빠른 검사를 수용한다. 특정한 동작들에서, 그래픽 콘트롤러(208)는 AGP 버스(210)상에서 PCI 프로토콜 트랜잭션(transaction)들을 생성하도록 더 구성될 수 있다. 따라서, 버스 브리지(202)의 상기 AGP 인터페이스는 AGP 프로토콜 처리 및 PCI 프로토콜 목표 및 초기화 처리들 모두를 지원하기 위한 기능을 포함할 수 있다. 표시부(226)는 그림과 문자가 표시될 수 있는 임의의 전자 표시부이다. 적절한 표시부(226)는 캐소드 광선 튜브("CRT"), 액정 표시기("LCD")등을 포함한다.
AGP, PCI, 그리고 ISA 또는 EISA 버스들이 상기 설명에서 예제로 사용되어졌지만, 바람직한 어떠한 버스 구조들도 대신 사용될 수 있다는 것을 유의한다. 컴퓨터 시스템(200)은 부가적인 다중 프로세서 컴퓨터들(예를 들어 컴퓨터 시스템(200)의 선택적 요소로서 도시된 다중 프로세서 컴퓨터(10a))을 포함하는 다중 처리 컴퓨터 시스템일 수 있다는 것에도 유의한다. 다중 프로세서 컴퓨터(10a)는 다중 프로세서 컴퓨터(10)와 유사하다. 특히, 다중 프로세서 컴퓨터(10a)는 다중 프로세서 컴퓨터(10)의 동일한 사본일 수 있다. 다중 프로세서 컴퓨터(10a)는 (도 11에 도시된 바와 같은) 독립 버스를 통하거나 또는 프로세서(10)와 CPU 버스(224)를 공유하여 버스 브리지(202)와 연결될 수 있다. 또한, 프로세서(10a)는 L2 캐시(228)와 유사한 선택적 L2 캐시(228a)와 연결될 수 있다.
이제, 도 12를 참조하면, 컴퓨터 시스템(300)의 다른 실시예가 예시되어 있다. 또 다른 실시예들이 가능하며 고려된다. 도 12의 실시예에서, 컴퓨터 시스템(300)은 몇 개의 처리 노드들(312A, 312B, 312C 및 312D)을 포함한다. 각 처리 노드는 각 처리 노드(312A-312D) 내에 포함된 메모리 제어기들(316A-316D)을 통하여 각 메모리들(314A-314D)에 연결된다. 또한, 처리 노드들(312A, 312B, 312C 및 312D)은 처리 노드들(312A, 312B, 312C 및 312D) 간의 통신에 이용되는 인터페이스 논리부를 포함한다. 예를 들어, 처리 노드(312A)는 처리 노드(312B)와 통신하기 위한 인터페이스 논리부(318A)와, 처리 노드(312A)와 통신하기 위한 인터페이스 논리부(318B)와, 그리고 또 다른 처리 노드(미도시)와 통신하기 위한 제 3 인터페이스 논리부(318C)를 포함한다. 유사하게, 처리 노드(312B)는 인터페이스 논리부들(318D, 318E 및 318F)을 포함하고, 처리 노드(312C)는 인터페이스 논리부들(318G, 318H 및 318I)을 포함하며, 그리고 처리 노드(312D)는 인터페이스 논리부들(318J, 318K 및 318L)을 포함한다. 처리 노드(312D)는 인터페이스 논리부(318L)를 통하여 다수의 입/출력 디바이스들(예를 들어, 데이지 체인 구성 내의 디바이스들(320A-320B))과 통신하도록 연결된다.
처리 노드들(312A, 312B, 312C 및 312D)은 처리 노드간 통신을 위한 패킷-기반 링크를 구현한다. 본 실시예에서, 이러한 링크는 단방향 라인들의 세트들로서 구현된다(예를 들어, 라인들(324A)은 패킷들을 처리 노드(312A)로부터 처리 노드(312B)로 전송하는 데에 이용되고, 라인들(324B)은 패킷들을 처리 노드(312B)로부터 처리 노드(312A)로 전송하는 데에 이용된다). 다른 라인들(324C-324H)의 세트들은 도 12에 도시된 바와 같이 다른 처리 노드들 간에 패킷들을 전송하는 데에 이용된다. 일반적으로, 라인들(324)의 각 세트는 하나 또는 그 이상의 데이터 라인들과, 이 데이터 라인에 대응하는 하나 또는 그 이상의 클럭 라인들과, 그리고 전송되고 있는 패킷의 타입을 나타내는 하나 또는 그 이상의 제어 라인들을 포함한다. 이러한 링크는 처리 노드들 간의 통신에 대해서는 캐시 코히런트 방식으로 동작하거나, 또는 처리 노드와 I/O 디바이스 (또는 PCI 버스 또는 ISA 버스와 같은 일반적인 구성의 I/O 버스에 대한 버스 브리지) 간의 통신에 대해서는 캐시 넌코히런트(noncoherent) 방식으로 동작한다. 또한, 링크는 도시된 I/O 디바이스들 간의 데이지 체인 구성을 이용하여 넌코히런트 방식으로 동작될 수 있다. 한 처리 노드로부터 다른 처리 노드로 전송되는 패킷은 하나 또는 그 이상의 중간 노드들을 통과한다는 것을 유념하자. 예를 들어, 도 12에 도시된 바와 같이, 처리 노드(312A)에서 처리 노드(312D)로 전송되는 패킷은 처리 노드(312B) 또는 처리 노드(312C)를 통과한다. 모든 적절한 루팅 알고리즘이 이용될 수 있다. 컴퓨터 시스템(300)의 다른 실시예들은 도 12에 도시된 실시예에서 보다 더 많거나 또는 더 적은 처리 노드들을 포함할 수 있다.
일반적으로, 패킷들은 노드들 간의 라인들(324) 상에서 하나 또는 그 이상의 비트 타임들로서 전송된다. 비트 타임은 대응하는 클럭 라인들 상의 클럭 신호의 상승 에지 또는 하강 에지가 될 수 있다. 패킷들은 트랜잭션들을 개시하는 커맨드 패킷들과, 캐시 코히런시를 유지하는 프로브 패킷들과, 그리고 프로브들 및 커맨드들에 응답하는 응답 패킷들을 포함한다.
처리 노드들(312A-312D)은 메모리 제어기 및 인터페이스 논리부 뿐 아니라, 하나 또는 그 이상의 프로세서들을 포함한다. 넓게, 하나의 처리 노드는 적어도 하나의 프로세서를 포함하고, 메모리 및 다른 논리부와 통신하는 데에 필요한 하나의 메모리 제어기를 선택적으로 포함한다. 구체적으로, 처리 노드들(312A-312D)은 프로세서(10)를 포함한다. 외부 인터페이스 유닛(46)은 메모리 제어기(316) 뿐 아니라, 노드 내의 인터페이스 논리부(318)를 포함한다.
메모리들(314A-314D)은 모든 적절한 메모리 디바이스들이 될 수 있다. 예를 들어, 메모리들(314A-314D)은 하나 또는 그 이상의 RAMBUS DRAMs(RDRAMs), 동기 DRAMs(SDRAMs), 스태틱 RAM 등을 포함한다. 컴퓨터 시스템(300)의 어드레스 공간은 메모리들(314A-314D) 간에 분할된다. 각 처리 노드(312A-312D)는 메모리들(314A-314D)에 어떤 어드레스들이 맵핑되어 있으며, 이에 따라 특정한 어드레스에 대한 메모리 요청이 어떤 처리 노드(312A-312D)로 라우팅되어야 하는 지를 결정하는 데에 이용되는 메모리 맵핑을 포함한다. 일 실시예에서, 컴퓨터 시스템(300) 내의 어드레스에 대한 코히런트 지점은 어드레스에 대응하는 바이트들을 저장하는 메모리에 연결된 메모리 제어기들(316A-316D)이다. 다시 말해, 메모리 제어기들(316A-316D)은 대응하는 메모리들(314A-314D)에 대한 각 메모리 엑세스가 캐시 코히런트 방식으로 일어남을 보장하는 책임을 갖는다. 메모리 제어기들(316A-316D)은 메모리들(314A-314D)로의 인터페이싱을 위한 제어 회로를 포함한다. 또한, 메모리 제어기들(316A-316D)은 메모리 요청들을 큐잉하는 요청 큐들을 포함한다.
일반적으로, 인터페이스 논리부들(318A-318L)은 링크로부터 패킷들을 수신하고 링크를 통하여 전송될 패킷들을 버퍼링하는 다양한 버퍼들을 포함한다. 컴퓨터 시스템(300)은 패킷들을 전송하기 위하여 모든 적절한 흐름 제어 메커니즘을 이용한다. 예를 들어, 일 실시예에서, 각 인터페이스 논리부(318)는 인터페이스 논리부가 연결된 링크의 다른 단부에 있는 수신기 내의 각 타입의 버퍼 수의 합계(count)를 저장한다. 인터페이스 논리부는 수신 인터페이스 논리부가 패킷을 저장하기 위한 빈 버퍼를 가지고 있지 않는 한, 패킷을 전송하지 않는다. 패킷을 전방으로 라우팅시킴으로써 수신 버퍼가 비게 되면, 수신 인터페이스 논리부는 전송 인터페이스 논리부에 버퍼가 비었음을 나타내는 메세지를 전송한다. 이러한 메커니즘은 "쿠폰-기반(coupon-based)" 시스템으로 일컬어진다.
I/O 디바이스들(320A-320B)은 모든 적절한 I/O 디바이스들이 될 수 있다. 예를 들어, I/O 디바이스들(320A-320B)은 네트워크 인터페이스 카드들, 비디오 가속기들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브들 또는 제어기들, SCSI(소형 컴퓨터 시스템 인터페이스) 어탭터들과, 그리고 전화 카드들, 모뎀들, 사운드 카드들, 및 GPIB 또는 필드 버스 인터페이스 카드들과 같은 다양한 데이터 수집 카드들을 포함한다.
상기 설명을 완전히 이해했다면, 다수의 변화들 및 변형들이 당업자들에게 자명할 것이다. 하기의 청구항들은 이러한 모든 변화들 및 변형들을 포괄한다.

Claims (24)

  1. 복수의 엔트리를 포함하는 버퍼와, 여기서 상기 복수의 엔트리 각각은: (ⅰ)저장 메모리 동작의 저장 어드레스의 적어도 인덱스 부분과, (ⅱ)상기 저장 메모리 동작이 데이터 캐시에서 적중하는지 여부를 나타내는 적중 표시와, (ⅲ)상기 저장 메모리 동작에 대응하는 저장 데이터를 저장하도록 구성되며; 그리고
    상기 버퍼에 연결되며, (ⅰ)상기 데이터 캐시를 프로빙하는 로드 메모리 동작의 로드 어드레스의 인덱스 부분과, (ⅱ)상기 로드 메모리 동작이 상기 데이터 캐시에서 적중하는지 여부를 나타내는 로드 적중 신호를 수신하는 회로부를 포함하여 구성되며,
    여기서 상기 회로부는, 상기 로드 어드레스의 인덱스 부분에 정합하는 상기 복수의 엔트리들 중 제 1 엔트리에 저장된 인덱스 부분에 응답함과 아울러 적중을 나타내는 상기 제 1 엔트리의 상기 적중 표시 및 적중을 나타내는 상기 로드 적중 신호에 더 응답하여 상기 저장 데이터가 상기 제 1 엔트리로부터 포워딩되도록 구성되는 것을 특징으로 하는 장치.
  2. 제 1항에 있어서, 상기 회로부(402, 404, 406)는 상기 로드 어드레스의 인덱스 부분과 상기 저장 어드레스의 인덱스 부분간의 정합에 응답하여 포워드 신호를 어서팅(asserting)하도록 구성되는 것을 특징으로 하는 장치.
  3. 제 2항에 있어서, 상기 회로부(402, 404, 406)는 적중을 나타내는 상기 적중 표시에 더 응답하여 상기 포워드 신호를 어서팅하도록 구성되는 것을 특징으로 하는 장치.
  4. 제 3항에 있어서, 상기 회로부(402, 404, 406)는 후속적으로 상기 로드 적중 신호를 수신하고, 그리고 상기 로드가 상기 데이터 캐시에서 적중실패함을 나타내는 상기 로드 적중 신호에 응답하여 취소 포워드 신호를 어서팅하도록 구성되는 것을 특징으로 하는 장치.
  5. 제 4항에 있어서, 상기 복수의 엔트리(408) 각각은 상기 저장 메모리 동작이 적중하는 상기 데이터 캐시의 경로를 나타내는 저장 경로 표시를 저장하도록 구성되는 것을 특징으로 하는 장치.
  6. 제 5항에 있어서, 상기 회로부(402, 404, 406)는 상기 로드 메모리 동작이 적중하는 상기 데이터 캐시의 상기 경로를 나타내는 로드 경로 표시를 수신하며, 여기서 상기 회로부(402, 404, 406)는 상기 로드 경로 표시와 부정합하는 상기 제 1 엔트리에 저장된 상기 저장 경로 표시에 응답하여 상기 취소 포워드 신호를 어서팅하도록 구성되는 것을 특징으로 하는 장치.
  7. 제 1항에 있어서, 상기 복수의 엔트리 각각은 상기 저장 메모리 동작이 적중하는 상기 데이터 캐시의 경로를 나타내는 저장 경로 표시를 저장하도록 구성되는 것을 특징으로 하는 장치.
  8. 제 7항에 있어서, 상기 회로부는 상기 로드 메모리 동작이 적중하는 상기 데이터 캐시의 경로를 나타내는 로드 경로 표시를 수신하며, 그리고 상기 회로부는 상기 로드 경로 표시와 상기 제 1 엔트리에 저장된 상기 저장 경로 표시간의 정합에 더 응답하여 상기 저장 데이터가 포워딩되도록 구성되는 것을 특징으로 하는 장치.
  9. 프로세서에 있어서,
    데이터 캐시와; 그리고
    상기 데이터 캐시에 연결된 로드/저장 유닛을 포함하여 구성되며,
    여기서, 상기 로드/저장 유닛은 복수의 엔트리를 포함하는 버퍼를 포함하며, 상기 복수의 엔트리 각각은: (ⅰ)저장 메모리 동작의 저장 어드레스의 적어도 인덱스 부분과, (ⅱ)상기 저장 메모리 동작이 데이터 캐시에서 적중하는지 여부를 나타내는 적중 표시와, (ⅲ)상기 저장 메모리 동작에 대응하는 저장 데이터를 저장하며,
    상기 로드/저장 유닛은 로드 어드레스로 상기 데이터 캐시를 프로빙하고, 이에 응답하여 상기 데이터 캐시로부터 적중 신호를 수신하며,
    상기 로드/저장 유닛은, 상기 복수의 엔트리들 중 제 1 엔트리에 저장된 인덱스 부분에 정합하는 상기 로드 어드레스의 인덱스 부분에 응답함과 아울러 적중을 나타내는 상기 제 1 엔트리의 상기 적중 표시 및 적중을 나타내는 상기 적중 신호에 더 응답하여 저장 데이터가 상기 제 1 엔트리로부터 포워딩 되어야 하는지를 결정하도록 구성되는 것을 특징으로 하는 프로세서.
  10. 제 9항에 있어서, 상기 로드/저장 유닛은 포워드 데이터 신호를 상기 데이터 캐시로 어서팅하며, 상기 데이터 캐시는 상기 데이터 캐시로부터 판독된 데이터를 캐시하는 대신에 상기 저장 데이터를 포워딩하도록 구성되는 것을 특징으로 하는 프로세서.
  11. 제 10항에 있어서, 상기 로드/저장 유닛은 상기 제 1 엔트리에 저장된 인덱스 부분에 정합하는 상기 로드 어드레스의 인덱스 부분에 응답하여 상기 포워드 데이터 신호를 어서팅하도록 구성되는 것을 특징으로 하는 프로세서.
  12. 제 11항에 있어서, 상기 로드/저장 유닛은 적중을 나타내는 상기 제 1 엔트리의 상기 적중 표시에 더 응답하여 상기 포워드 데이터 신호를 어서팅하도록 구성되는 것을 특징으로 하는 프로세서.
  13. 제 12항에 있어서, 상기 로드 저장 유닛은 적중실패를 나타내는 상기 적중 신호에 응답하여 취소 포워드 신호를 어서팅하도록 구성되는 것을 특징으로 하는 프로세서.
  14. 제 13항에 있어서, 상기 취소 포워드 신호를 수신하도록 연결된 하나 이상의 예약 스테이션을 더 포함하며, 여기서 상기 하나 이상의 예약 스테이션은 상기 취소 포워드 신호에 응답하여 상기 로드를 위해 포워딩된 상기 저장 데이터를 무효화화도록 구성되는 것을 특징으로 하는 프로세서.
  15. 제 13항에 있어서, 상기 복수의 엔트리 각각은 상기 저장 메모리 동작이 적중하는 상기 데이터 캐시의 경로를 나타내는 저장 경로 표시를 저장하도록 구성되는 것을 특징으로 하는 프로세서.
  16. 제 15항에 있어서, 상기 데이터 캐시는 상기 로드 메모리 동작이 적중하는 상기 데이터 캐시의 경로를 나타내는 상기 로드/저장 유닛에 로드 경로 표시를 제공하며, 상기 로드/저장 유닛은 상기 로드 경로 표시와 부정합하는 상기 제 1 엔트리의 상기 저장 경로 표시에 응답하여 상기 취소 포워드 신호를 어서팅하도록 구성되는 것을 특징으로 하는 프로세서.
  17. 제 9항에 있어서, 상기 복수의 엔트리 각각은 상기 저장 메모리 동작이 적중하는 상기 데이터 캐시의 경로를 나타내는 저장 경로 표시를 저장하도록 구성되는 것을 특징으로 하는 프로세서.
  18. 제 17항에 있어서, 상기 데이터 캐시는 상기 로드 메모리 동작이 적중하는 상기 데이터 캐시의 경로를 나타내는 상기 로드/저장 유닛에 로드 경로 표시를 제공하며, 상기 로드/저장 유닛은, 상기 로드 경로 표시에 정합하는 상기 제 1 엔트리에 저장된 상기 저장 경로 표시에 더 응답하여 저장 데이터가 상기 제 1 엔트리로부터 포워딩 되어야 하는지를 결정하도록 구성되는 것을 특징으로 하는 프로세서.
  19. 로드 어드레스로 데이터 캐시를 프로빙하는 단계와;
    상기 로드 어드레스의 인덱스 부분을 버퍼에 저장된 저장 어드레스의 인덱스 부분에 비교하는 단계와; 그리고
    상기 로드 어드레스에 대응하는 로드 메모리 동작을 위해 상기 저장 어드레스에 대응하는 저장 데이터를 포워딩하는 단계를 포함하여 구성되며, 여기서 상기 포워딩은 상기 로드 어드레스의 상기 인덱스 부분이 상기 저장 어드레스의 상기 인덱스 부분에 정합하는 지의 상기 비교 결정단계에 응답하고, 데이터 캐시에서 적중되는 상기 로드 어드레스 및 상기 저장 어드레스 모두에 더 응답하는 것을 특징으로 하는 것을 특징으로 하는 방법.
  20. 제 19항에 있어서, 상기 포워딩 단계는 상기 로드 어드레스의 상기 인덱스 부분이 상기 저장 어드레스의 상기 인덱스 부분에 정합하는 지의 상기 비교 결정단계에 응답하여 포워드 데이터 신호를 어서팅하는 단계를 포함하는 것을 특징으로 하는 방법.
  21. 제 20항에 있어서, 상기 어서팅 단계는 상기 데이터 캐시에서 적중하는 상기 저장 어드레스에 더 응답하는 것을 특징으로 하는 방법.
  22. 제 21항에 있어서, 상기 포워딩 단계는 상기 데이터 캐시에서 정합실패되는 상기 로드 어드레스에 응답하여 취소 포워드 신호를 어서팅하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  23. 제 22항에 있어서,
    상기 버퍼에 저장된 저장 경로 표시를 상기 로드 어드레스에 대응하는 로드 경로 표시에 비교하는 단계와, 여기서 상기 저장 경로 표시는 상기 저장 어드레스가 적중하는 상기 데이터 캐시의 경로를 나타내고, 상기 로드 경로 표시는 상기 로드 어드레스가 적중하는 상기 데이터 캐시의 경로를 나타내며; 그리고
    상기 저장 경로 표시의 비교 및 부정합 결정에 응답하여 상기 취소 신호를 어서팅하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  24. 제 19항에 있어서,
    상기 버퍼에 저장된 저장 경로 표시를 상기 로드 어드레스에 대응하는 로드 경로 표시에 비교하는 단계와, 여기서 상기 저장 경로 표시는 상기 저장 어드레스가 적중하는 상기 데이터 캐시의 경로를 나타내고, 상기 로드 경로 표시는 상기 로드 어드레스가 적중하는 상기 데이터 캐시의 경로를 나타내며; 그리고
    상기 저장 경로 표시의 비교 및 정합 결정에 더 응답하여 저장 데이터를 포워딩하는 단계를 더 포함하는 것을 특징으로 하는 방법.
KR1020027006075A 1999-11-10 2000-04-20 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼 KR100708010B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US16452699P 1999-11-10 1999-11-10
US60/164,526 1999-11-10
US09/482,399 US6662280B1 (en) 1999-11-10 2000-01-12 Store buffer which forwards data based on index and optional way match
US09/482,399 2000-01-12

Publications (2)

Publication Number Publication Date
KR20020087929A KR20020087929A (ko) 2002-11-23
KR100708010B1 true KR100708010B1 (ko) 2007-04-16

Family

ID=26860645

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020027006075A KR100708010B1 (ko) 1999-11-10 2000-04-20 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼

Country Status (7)

Country Link
US (1) US6662280B1 (ko)
EP (1) EP1228426B1 (ko)
JP (1) JP4699666B2 (ko)
KR (1) KR100708010B1 (ko)
DE (1) DE60025028T2 (ko)
TW (1) TW548548B (ko)
WO (1) WO2001035212A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101123378B1 (ko) * 2003-07-08 2012-03-27 글로벌파운드리즈 인크. 인덱스 검사를 사용하는 저장-로드 포워딩 버퍼

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7065632B1 (en) * 2000-04-07 2006-06-20 Ip First Llc Method and apparatus for speculatively forwarding storehit data in a hierarchical manner
JP3727244B2 (ja) * 2001-01-30 2005-12-14 Necエレクトロニクス株式会社 キャッシュシステムの制御回路
US6735604B2 (en) * 2001-10-09 2004-05-11 Arthur O. Miller Method for storing and retrieving data objects
US6845233B2 (en) * 2001-10-09 2005-01-18 Freescale Semiconductor, Inc. RF receivers with reduced spurious response for mobile stations and methods therefor
US6842822B2 (en) * 2002-04-05 2005-01-11 Freescale Semiconductor, Inc. System and method for cache external writing
US7222226B1 (en) 2002-04-30 2007-05-22 Advanced Micro Devices, Inc. System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation
US7028166B2 (en) * 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US6845442B1 (en) 2002-04-30 2005-01-18 Advanced Micro Devices, Inc. System and method of using speculative operand sources in order to speculatively bypass load-store operations
US7114043B2 (en) * 2002-05-15 2006-09-26 Broadcom Corporation Ambiguous virtual channels
US7471675B2 (en) * 2002-07-12 2008-12-30 Intel Corporation Arrangements facilitating ordered transactions
US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US7181590B2 (en) * 2003-08-28 2007-02-20 Intel Corporation Method for page sharing in a processor with multiple threads and pre-validated caches
EP1719290A1 (en) * 2004-02-27 2006-11-08 Actix Limited Data storage and processing systems
US7263600B2 (en) * 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
US7937569B1 (en) 2004-05-05 2011-05-03 Advanced Micro Devices, Inc. System and method for scheduling operations using speculative data operands
US8775740B2 (en) * 2004-08-30 2014-07-08 Texas Instruments Incorporated System and method for high performance, power efficient store buffer forwarding
US7464242B2 (en) * 2005-02-03 2008-12-09 International Business Machines Corporation Method of load/store dependencies detection with dynamically changing address length
US7533236B1 (en) * 2006-05-11 2009-05-12 Nvidia Corporation Off-chip out of order memory allocation for a unified shader
US7533237B1 (en) * 2006-05-11 2009-05-12 Nvidia Corporation Off-chip memory allocation for a unified shader
US7600097B1 (en) * 2006-09-05 2009-10-06 Sun Microsystems, Inc. Detecting raw hazards in an object-addressed memory hierarchy by comparing an object identifier and offset for a load instruction to object identifiers and offsets in a store queue
US7603527B2 (en) * 2006-09-29 2009-10-13 Intel Corporation Resolving false dependencies of speculative load instructions
US7594100B2 (en) 2006-09-29 2009-09-22 Sun Microsystems, Inc. Efficient store queue architecture
US7721066B2 (en) * 2007-06-05 2010-05-18 Apple Inc. Efficient encoding for detecting load dependency on store with misalignment
US8468306B2 (en) * 2008-02-15 2013-06-18 International Business Machines Corporation Microprocessor and method for deferred store data forwarding for store background data in a system with no memory model restrictions
US8214602B2 (en) * 2008-06-23 2012-07-03 Advanced Micro Devices, Inc. Efficient load queue snooping
US8468325B2 (en) 2009-12-22 2013-06-18 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US8521992B2 (en) * 2009-12-22 2013-08-27 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US8601240B2 (en) * 2010-05-04 2013-12-03 Oracle International Corporation Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution
US8626963B2 (en) 2010-05-04 2014-01-07 Mediatek Inc. Packet based data transfer system and method for host-slave interface
US8904153B2 (en) * 2010-09-07 2014-12-02 International Business Machines Corporation Vector loads with multiple vector elements from a same cache line in a scattered load operation
US20120144118A1 (en) * 2010-12-07 2012-06-07 Advanced Micro Devices, Inc. Method and apparatus for selectively performing explicit and implicit data line reads on an individual sub-cache basis
US9152570B2 (en) * 2012-02-27 2015-10-06 Vmware, Inc. System and method for supporting finer-grained copy-on-write page sizes
US9996348B2 (en) 2012-06-14 2018-06-12 Apple Inc. Zero cycle load
US8984254B2 (en) * 2012-09-28 2015-03-17 Freescale Semiconductor, Inc. Techniques for utilizing translation lookaside buffer entry numbers to improve processor performance
US9116817B2 (en) * 2013-05-09 2015-08-25 Apple Inc. Pointer chasing prediction
US9632947B2 (en) * 2013-08-19 2017-04-25 Intel Corporation Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early
GB2521227B (en) * 2013-12-16 2020-11-25 Advanced Risc Mach Ltd Invalidation of index items for a temporary data store
US9418018B2 (en) 2013-12-31 2016-08-16 Samsung Electronics Co., Ltd. Efficient fill-buffer data forwarding supporting high frequencies
JP6340894B2 (ja) * 2014-04-24 2018-06-13 富士通株式会社 演算処理装置および演算処理装置の制御方法
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
US9483409B2 (en) 2015-02-05 2016-11-01 International Business Machines Corporation Store forwarding cache
US9996356B2 (en) * 2015-12-26 2018-06-12 Intel Corporation Method and apparatus for recovering from bad store-to-load forwarding in an out-of-order processor
EP3825847B1 (en) * 2019-04-04 2022-05-11 Cambricon Technologies Corporation Limited Data processing method and apparatus, and related product
CN111831337B (zh) 2019-04-19 2022-11-29 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
CN111782577B (zh) 2019-04-04 2023-03-24 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
TWI714116B (zh) * 2019-06-05 2020-12-21 大陸商合肥沛睿微電子股份有限公司 記憶體控制器、記憶體控制方法、以及電腦系統
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
US12079126B2 (en) 2021-05-07 2024-09-03 Ventana Micro Systems Inc. Unforwardable load instruction re-execution eligibility based on cache update by identified store instruction
US12093179B2 (en) 2021-05-07 2024-09-17 Ventana Micro Systems Inc. Store-to-load forwarding correctness checks using physical address proxies stored in load queue entries
US12086063B2 (en) 2021-05-07 2024-09-10 Ventana Micro Systems Inc. Physical address proxy reuse management
US12073220B2 (en) 2021-05-07 2024-08-27 Ventana Micro Systems Inc. Store-to-load forwarding correctness checks at store instruction commit
US12099448B2 (en) 2021-05-07 2024-09-24 Ventana Micro Systems Inc. Virtually-indexed cache coherency using physical address proxies
US11989285B2 (en) 2021-05-07 2024-05-21 Ventana Micro Systems Inc. Thwarting store-to-load forwarding side channel attacks by pre-forwarding matching of physical address proxies and/or permission checking
US11836080B2 (en) 2021-05-07 2023-12-05 Ventana Micro Systems Inc. Physical address proxy (PAP) residency determination for reduction of PAP reuse
US11868263B2 (en) 2021-05-07 2024-01-09 Ventana Micro Systems Inc. Using physical address proxies to handle synonyms when writing store data to a virtually-indexed cache
US11416400B1 (en) 2021-05-07 2022-08-16 Ventana Micro Systems Inc. Hardware cache coherency using physical address proxies
US11481332B1 (en) 2021-05-07 2022-10-25 Ventana Micro Systems Inc. Write combining using physical address proxies stored in a write combine buffer
US11416406B1 (en) 2021-05-07 2022-08-16 Ventana Micro Systems Inc. Store-to-load forwarding using physical address proxies stored in store queue entries
US12079129B2 (en) 2021-05-07 2024-09-03 Ventana Micro Systems Inc. Using physical address proxies to accomplish penalty-less processing of load/store instructions whose data straddles cache line address boundaries
US11841802B2 (en) 2021-05-07 2023-12-12 Ventana Micro Systems Inc. Microprocessor that prevents same address load-load ordering violations
US11860794B2 (en) 2021-05-07 2024-01-02 Ventana Micro Systems Inc. Generational physical address proxies
US11397686B1 (en) * 2021-05-07 2022-07-26 Ventana Micro Systems Inc. Store-to-load forwarding using physical address proxies to identify candidate set of store queue entries
US11989286B2 (en) 2021-05-07 2024-05-21 Ventana Micro Systems Inc. Conditioning store-to-load forwarding (STLF) on past observations of STLF propriety
TW202331504A (zh) * 2021-12-21 2023-08-01 美商賽發馥股份有限公司 處理器管線之儲存-載入轉送

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0446519A2 (en) * 1990-03-13 1991-09-18 Mitsubishi Denki Kabushiki Kaisha Noncontact integrated circuit card
US5666537A (en) * 1994-08-12 1997-09-09 Intel Corporation Power down scheme for idle processor components
EP1134693A2 (en) * 2000-03-15 2001-09-19 Kabushiki Kaisha Toshiba Non-contact communication apparatus and control method for non-contact communication apparatus
US20020166075A1 (en) * 2001-05-04 2002-11-07 Sanjay Agarwal Low power interface between a control processor and a digital signal processing coprocessor
US20040015594A1 (en) * 2000-02-03 2004-01-22 Pascal Guterman Time management at communication level for a smart card-type entity

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5276828A (en) 1989-03-01 1994-01-04 Digital Equipment Corporation Methods of maintaining cache coherence and processor synchronization in a multiprocessor system using send and receive instructions
US5487156A (en) 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5440752A (en) 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
JP3199465B2 (ja) 1992-07-22 2001-08-20 株式会社日立製作所 情報処理装置
WO1994008287A1 (en) 1992-09-29 1994-04-14 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
IE80854B1 (en) 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5878245A (en) 1993-10-29 1999-03-02 Advanced Micro Devices, Inc. High performance load/store functional unit and data cache
US6216200B1 (en) 1994-10-14 2001-04-10 Mips Technologies, Inc. Address queue
US5887152A (en) 1995-04-12 1999-03-23 Advanced Micro Devices, Inc. Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss instructions
US5802588A (en) 1995-04-12 1998-09-01 Advanced Micro Devices, Inc. Load/store unit implementing non-blocking loads for a superscalar microprocessor and method of selecting loads in a non-blocking fashion from a load/store buffer
US5832297A (en) 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5848433A (en) * 1995-04-12 1998-12-08 Advanced Micro Devices Way prediction unit and a method for operating the same
US5625835A (en) 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5761712A (en) 1995-06-07 1998-06-02 Advanced Micro Devices Data memory unit and method for storing data into a lockable cache in one clock cycle by previewing the tag array
US5652859A (en) 1995-08-17 1997-07-29 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for handling snoops in multiprocessor caches having internal buffer queues
US5987561A (en) * 1995-08-31 1999-11-16 Advanced Micro Devices, Inc. Superscalar microprocessor employing a data cache capable of performing store accesses in a single clock cycle
US5751983A (en) 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5781790A (en) 1995-12-29 1998-07-14 Intel Corporation Method and apparatus for performing floating point to integer transfers and vice versa
US5742791A (en) 1996-02-14 1998-04-21 Advanced Micro Devices, Inc. Apparatus for detecting updates to instructions which are within an instruction processing pipeline of a microprocessor
EP1005672B1 (en) * 1996-07-16 2010-10-06 GlobalFoundries, Inc. Load/store unit and method for non-blocking completion of loads in a superscalar microprocessor
US5768555A (en) 1997-02-20 1998-06-16 Advanced Micro Devices, Inc. Reorder buffer employing last in buffer and last in line bits
US6021485A (en) 1997-04-10 2000-02-01 International Business Machines Corporation Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
US6065103A (en) 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6266744B1 (en) * 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0446519A2 (en) * 1990-03-13 1991-09-18 Mitsubishi Denki Kabushiki Kaisha Noncontact integrated circuit card
US5666537A (en) * 1994-08-12 1997-09-09 Intel Corporation Power down scheme for idle processor components
US20040015594A1 (en) * 2000-02-03 2004-01-22 Pascal Guterman Time management at communication level for a smart card-type entity
EP1134693A2 (en) * 2000-03-15 2001-09-19 Kabushiki Kaisha Toshiba Non-contact communication apparatus and control method for non-contact communication apparatus
US20020166075A1 (en) * 2001-05-04 2002-11-07 Sanjay Agarwal Low power interface between a control processor and a digital signal processing coprocessor

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101123378B1 (ko) * 2003-07-08 2012-03-27 글로벌파운드리즈 인크. 인덱스 검사를 사용하는 저장-로드 포워딩 버퍼

Also Published As

Publication number Publication date
JP4699666B2 (ja) 2011-06-15
WO2001035212A1 (en) 2001-05-17
EP1228426B1 (en) 2005-12-21
TW548548B (en) 2003-08-21
KR20020087929A (ko) 2002-11-23
DE60025028T2 (de) 2006-08-24
EP1228426A1 (en) 2002-08-07
JP2003514299A (ja) 2003-04-15
DE60025028D1 (de) 2006-01-26
US6662280B1 (en) 2003-12-09

Similar Documents

Publication Publication Date Title
KR100708010B1 (ko) 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼
US6393536B1 (en) Load/store unit employing last-in-buffer indication for rapid load-hit-store
US6523109B1 (en) Store queue multimatch detection
US6622237B1 (en) Store to load forward predictor training using delta tag
EP1224557B1 (en) Store to load forwarding using a dependency link file
US6542984B1 (en) Scheduler capable of issuing and reissuing dependency chains
US6651161B1 (en) Store load forward predictor untraining
US6481251B1 (en) Store queue number assignment and tracking
US6065103A (en) Speculative store buffer
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US8364907B2 (en) Converting victim writeback to a fill
KR100303673B1 (ko) 저장인스트럭션의결과전달방법및이를구현한프로세서
US5918245A (en) Microprocessor having a cache memory system using multi-level cache set prediction
US6694424B1 (en) Store load forward predictor training
US6473837B1 (en) Snoop resynchronization mechanism to preserve read ordering
US6687789B1 (en) Cache which provides partial tags from non-predicted ways to direct search if way prediction misses
JP2003514299A5 (ko)
KR100747128B1 (ko) 발행 후에 명령의 비투기적 성질을 발견하고 상기 명령을 재발행하는 스케줄러
US6564315B1 (en) Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
US6473832B1 (en) Load/store unit having pre-cache and post-cache queues for low latency load memory operations
KR100698493B1 (ko) 좁은 피연산자들에서 계산을 수행하는 방법 및 장치
US6622235B1 (en) Scheduler which retries load/store hit situations
US20030074530A1 (en) Load/store unit with fast memory data access mechanism
US10970077B2 (en) Processor with multiple load queues including a queue to manage ordering and a queue to manage replay
US6704854B1 (en) Determination of execution resource allocation based on concurrently executable misaligned memory operations

Legal Events

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

Payment date: 20130329

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20140320

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160318

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20170317

Year of fee payment: 11