KR100417459B1 - 저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛 - Google Patents

저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛 Download PDF

Info

Publication number
KR100417459B1
KR100417459B1 KR10-1999-7000320A KR19997000320A KR100417459B1 KR 100417459 B1 KR100417459 B1 KR 100417459B1 KR 19997000320 A KR19997000320 A KR 19997000320A KR 100417459 B1 KR100417459 B1 KR 100417459B1
Authority
KR
South Korea
Prior art keywords
load
store
buffer
instructions
unit
Prior art date
Application number
KR10-1999-7000320A
Other languages
English (en)
Other versions
KR20000023828A (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 어드밴스드 마이크로 디바이시즈,인코포레이티드
Priority to KR10-1999-7000320A priority Critical patent/KR100417459B1/ko
Publication of KR20000023828A publication Critical patent/KR20000023828A/ko
Application granted granted Critical
Publication of KR100417459B1 publication Critical patent/KR100417459B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency

Landscapes

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

Abstract

본 발명은 퇴거 상태에 있지 않는 가장 오래된 미결 명령들을 식별하는 포인터들의 쌍을 수신하는 적재/저장 유닛을 구비하는 슈퍼스칼라 마이크로프로세서를 개시한다. 상기 적재/저장 유닛은 이러한 포인터들과, 데이터 캐시를 미스하는 적재 명령들 및 저장 명령들의 재배열 버퍼 태그들을 비교한다. 관련된 명령이 데이터 캐시 및 메인 메모리 시스템을 액세스하기 전에, 일치가 발견되어야 한다. 포인터 비교 메커니즘은 데이터 캐시를 미스하는 적재 명령들 및 저장 명령들에 대한 순서 결정 메커니즘을 제공한다.

Description

저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛{A LOAD/STORE UNIT WITH MULTIPLE POINTERS FOR COMPLETING STORE AND LOAD-MISS INSTRUCTIONS}
슈퍼스칼라 마이크로프로세서는 가능한 가장 짧은 클럭 주기를 이용하여 다수의 명령들을 동시에 수행함으로써 고성능을 달성한다. 본원에서 이용되는 "클럭 주기"라는 용어는 슈퍼스칼라 마이크로프로세서가 그 파이프라인 내에서 이용되는 많은 작업들(예를 들어, 명령의 처리)을 완료하는 데에 필요로 하는 시간 간격을 말한다. 고성능의 슈퍼스칼라 마이크로프로세서의 2가지의 중요한 특징은 분기 예측 및 순서를 벗어난 실행(out of order execution)이다.
분기 예측은, 분기 명령이 실행되기 전에, 분기 명령이 선택될 방향을 추론적으로 선택하는 과정이다. 마이크로프로세서들은 명령들을 순차적으로 실행한다. 즉, 제 1 명령이 실행될 때, 실행될 제 2 명령은 상기 1 명령에 인접하는 메모리에 저장된 명령이 된다. 그러나, 분기 명령에 의해, 실행될 다음 명령은 순차적인 다음 명령이 되거나, 또는 대안적으로 상기 분기 명령에 의해 특정되는 다른 메모리에 상주하는 명령이 될 수 있다. 분기 명령에 의해 특정되는 메모리 위치는 전형적으로 이 분기의 "타겟"이라 불린다. 전형적으로, 명령들 중에서 어느 것이 실행을 위해 선택될 것인 지는 그 분기 명령이 테스트하는 조건에 의존한다. 테스트된 조건의 일례는 레지스터에 저장된 값으로서, 여기서 분기 타겟은 상기 레지스터가 0을 포함하는 경우 선택되며, 다음의 순차적인 명령은 레지스터가 0을 포함하지 않는 경우 선택된다. 주목할 사항으로서, 일부 분기 명령들은 조건을 테스트하지 않는다. 무조건 분기들(unconditional branches)은 항상 타겟 경로를 선택하며, 전형적으로 어떠한 명령들도 순차적인 다음 메모리 위치들 내에 특정하게 엔코드되지 않는다.
분기는 컴퓨터 프로그램들에서 비교적 빈번하게 발생한다. 다수의 명령들의 동시 실행을 계속하기 위해, 슈퍼스칼라 마이크로 프로세서는 각 분기 명령이 어느 방향(또는 "경로")을 선택하는 지를 예측한다. 즉, 다음의 순차 명령 또는 타겟의 선택을 예측한다. 이후, 마이크로프로세서는 예측된 경로에 있는 명령들을 추론적으로 실행한다. 슈퍼스칼라 마이크로프로세서가, 분기 명령이 선택하는 경로를 "오예측"한다면, 추론적으로 실행된 결과들은 버려지며, 정확한 경로가 페치되어 실행된다. 많은 분기 예측 메커니즘들이 널리 알려져있다.
분기 명령 오예측이 발생하기 때문에, 오예측 복구 메커니즘이 필요하다. 이 오예측 복구 메커니즘은, 캐시로부터 정정된 페치 어드레스를 페치시키고, 관련된 명령을 명령 처리 파이프라인들로 디스패치시키는 메커니즘이다. 상기 정정된 페치 어드레스는, 다음에 실행될 명령을 찾아내기 위해 분기 명령에 의해 발생되는 어드레스이다. 오예측 복구 메커니즘은, 오예측이 결정되자 마자 정확한 명령들이 실행될 수 있도록, 비교적 짧은 클럭 주기들로 완료할 필요가 있다. 전형적으로, 오예측이 발견된 클럭 주기와 정정된 명령들이 실행을 개시하는 클럭 주기들 간의 클럭 주기들은 아이들 주기들(idle cycles)이다. 슈퍼스칼라 마이크로프로세서의 전체적인 성능은, 가질 필요가 있는 아이들 주기들의 수 만큼 저하된다.
슈퍼스칼라 마이크로프로세서는 동시에 실행할 수 있는 명령들의 수가 더욱 증가하는 방식으로 발전하고 있다. 그러나, 분기 명령 또한 프로그램들 내에서 동일한 빈도로 계속해서 발생한다. 따라서, 슈퍼스칼라 마이크로프로세서들은, 다수의 분기 예측들이 소정의 클럭 주기 내에서 미결될 수 있는(즉, 다수의 분기 경로들이 예측되지만, 관련된 분기의 실행에 의해 유효가 되지 않는) 분기 예측 방식들을 실시하고 있다. 소정의 클럭 주기 내에서 다수의 분기 명령들을 실행할 수 있게 되면, 다수의 오예측들이 검출될 수 있기 때문에, 오예측 복구 메커니즘은 더욱 복잡해진다. 그러나, 비교적 적은 수의 클럭 주기들로 완료하는 오예측 복구 메커니즘의 중요성은 감소하지 않는다. 따라서, 비교적 적은 수의 클럭 주기들로 완료하고, 다수의 분기 오예측들을 정확하게 해결할 수 있는 오예측 복구 메커니즘이 필요하다.
분기 예측과 함께, 슈퍼스칼라 마이크로프로세서들의 성능을 개선하기 위한 다른 특징은 순서를 벗어난 실행이다. 이 순서를 벗어난 실행은, 프로그램 순서에 있어서 특정한 명령 이전에 있는 명령들이 실행되는 클럭 주기 이전의 클럭 주기에서 상기 특정한 명령을 실행하는 과정이다. 프로그램 순서에 있어서 그 이전의 명령들에 의해 발생된 결과들에 의존하지 않는 명령은, 그 이전의 명령들이 실행될 때 까지 그의 실행을 지연시킬 필요가 없다. 명령들은 언젠가는 실행되어야하기 때문에, 만일 그렇지 않은 경우 클럭 주기에서 아이들 상태에 있을 명령들을 파이프라인단에서 실행함으로써, 성능이 향상되는 장점이 있다.
불행하게도, 어떤 명령들은 순서를 벗어나 실행될 수 없다. 프로그램들은 명령들이 순서를 벗어나 실행되는 것으로 가정하기 때문에, 이러한 순서를 벗어난 실행은 프로그램에 대해 투명한 방식으로 이용되어야 한다. 순서를 벗어나 실행될 수 없는 예시적인 명령들로는, 데이터 캐시를 미스하는 적재 명령들 및 저장 명령들(store instructions)이 있다. 저장 명령들은, 레지스터를 변경시키는 다른 명령들과는 반대로, 메모리를 변경시킨다. 저장 명령들이 순서를 벗어나 상기 데이터 캐시를 변경할 수 있고, 이후 이전의 분기 오예측 또는 인터럽트에 의해 취소된다면, 상기 데이터 캐시는 잘못된 데이터를 포함하게 된다. 따라서, 저장 명령은, 이전 명령들이 실행될 때 까지, 데이터 캐시 또는 메인 메모리를 변경할 수 없어야하며, 이에 따라 상기 저장 명령은 취소되지 않게 된다. 데이터 캐시를 미스하는 적재 명령 또한, 하기 설명되는 바와 같이, 순서를 벗어나 실행될 수 없다.
데이터 캐시들은 슈퍼스칼라 마이크로프로세서와 동일한 기판 상에서 실시되거나 그 부근에 결합된다. 상기 데이터 캐시는, (컴퓨터 시스템에서 이용될 때) 메인 시스템 메모리의 복사본들(copies)을 저장하도록 구성된 고속 메모리이다. 적재 또는 저장 명령이 데이터 캐시를 액세스하면, 이 액세스는 "히트(hit)" 또는 "미스"인 것으로 발견된다. 액세스가 히트이면, 관련된 데이터는 현재 데이터 캐시에 저장되어 있다. 액세스가 미스이면, 관련된 데이터는 메인 메모리에 있다. 데이터 캐시를 읽을 때, 적재 명령들은 순서를 벗어난 실행이 가능해진다. 그러나, 적재 명령들이 데이터 캐시를 미스하면, 순서에 따라 실행할 필요가 있다. 그렇지 않으면, 적재 미스는 메인 메모리로부터의 전송을 개시한 다음, 취소될 수 있다. 이렇게 되면, 액세스에 의해 이용되는 외부 버스의 대역폭이 낭비될 것이다. 또한, 전송되는 데이터에 의해, 캐시로부터 라인이 제거될 수 있다. 상기 제거된 라인이 이후 필요하다면, 이는 메인 메모리로부터 전송되어야 할 것이며, 보다 많은 외부 버스 대역폭이 낭비될 것이다. 따라서, 데이터 캐시 미스의 적재 명령들은 순서를 벗어나 실행되어서는 안된다. 데이터 캐시 미스인 적재 명령들 및 저장 명령들을 순서를 정확하게 결정하는 메커니즘이 필요하다.
[발명의 요약]
상기 종래의 문제들은, 본 발명에 따른 적재/저장 유닛 및 재배열 버퍼(reorder buffer)를 이용하는 슈퍼스칼라 마이크로프로세서에 의해 해결된다. 상기 적재/저장 유닛은 퇴거 조건에 있지 않는 가장 오래된 미결 명령들을 확인하는 한 쌍의 포인터들을 수신한다. 상기 적재/저장 유닛은 이러한 포인터들과, 데이터 캐시를 미스하는 적재 명령들 및 저장 명령들의 재배열 버퍼 태그들을 비교한다. 관련된 명령이 데이터 캐시 및 메인 메모리 시스템을 액세스하기 전에, 정합값(match)을 찾아낼 필요가 있다. 포인터들은 가장 오래된 미결 명령들을 지시하기 때문에, 포인터 비교 메커니즘은 데이터 캐시를 미스하는 적재 명령들 및 저장 명령들을 위한 순서 결정 메커니즘을 제공한다.
일 실시예에서, 상기 적재/저장 순서 결정 메커니즘은 유익하게는 적재/저장 유닛과 재배열 버퍼 간에 최소의 핸드쉐이킹(handshaking)을 가지면서, 순서 결정을 제공한다. 한 쌍의 포인터들이, 적재/저장 유닛과 재배열 버퍼 간의 통신 신호들에 부가된다. 보다 적은 수의 인터페이스 신호들은 적재/저장 유닛 및 재배열 버퍼 모두의 설계를 단순화화지만, 필요한 기능들은 성능의 저하없이 제공된다.
요약하면, 본 발명은 적재 및 저장 명령들을 실행하도록 구성된 적재/저장 유닛을 포함하는 슈퍼스칼라 마이크로프로세서에 관한 것이다. 상기 적재/저장 유닛은 가장 오래된 미결 명령을 확인할 수 있는 포인터를 수신하도록 구성된다. 상기 적재/저장 유닛 내에는, 적재 및 저장 타입들의 미결 명령들을 저장하도록 구성된 적재/저장 버퍼가 포함된다. `
본 발명은 슈퍼스칼라 마이크로프로세서 분야에 관한 것으로서, 특히 분기 오예측 복구 및 적재/저장 퇴거(retirement)에 관한 것이다.
본 발명의 다른 목적들 및 장점들은 첨부 도면들을 참조하여 설명되는 하기의 상세한 설명으로부터 명확해질 것이다.
도 1은 본 발명에 따른 기능 유닛들, 적재/저장 유닛 및 재배열 버퍼를 이용하는 슈퍼스칼라 마이크로프로세서의 블록도이다.
도 2는 기능 유닛들, 적재/저장 유닛 및 재배열 버퍼를 보여주는 슈퍼스칼라 마이크로프로세서의 부분적인 상세 블록도이다.
도 3A는 도 2에 도시된 기능 유닛들중 하나를 나타낸 도면으로서, 본 발명의 실시예의 구성 요소들을 도시한다.
도 3B는 도 2의 적재/저장 유닛을 나타낸 도면으로서, 본 발명의 실시예의 구성 요소들을 도시한다.
도 3C는 도 2에 도시된 분기 검출 및 가장 오래된 미결 검출 블록들의 일부로서 이용되는 태그 루팅 디바이스(tag routing device)의 도면이다.
도 3D는 본 발명의 실시예의 전형적인 재배열 버퍼 엔트리를 나타낸 도면이다.
본 발명은 많은 변형들 및 대안적인 형태들을 갖지만, 본원의 도면 및 상세한 설명에서는 특정한 실시예들을 예시적으로 설명할 것이다. 그러나, 주목할 사항으로서, 첨부 도면 및 상세한 설명은 본 발명을 개시된 형태로 한정하지 않으며, 본 발명은 첨부된 청구 범위에 의해 정의되는 본 발명의 정신 및 범위 내에 포함되는 모든 변형들, 등가들 및 대안들을 포함한다.
도 1은 본 발명에 따른 슈퍼스칼라 마이크로프로세서(200)의 블록도로서, 이 슈퍼스칼라 마이크로프로세서는 기능 유닛들(212A-212F), 적재/저장 유닛(222) 및 재배열 버퍼(216)를 포함한다. 도 1에 도시된 바와 같이, 슈퍼스칼라 마이크로프로세서(200)는 명령 캐시(204)에 결합된 프리페치/프리디코드 유닛(202) 및 분기 예측 유닛(220)를 포함한다. 명령 정렬 유닛(206)은 명령 캐시(204)와 다수의 디코드 유닛(208A-208F)(총체적으로 디코드 유닛(208)이라 명명됨) 사이에 연결된다. 각 디코드 유닛(208A-208F)은 각 예약 스테이션 유닛(210A-210F)(총체적으로 예약 스테이션(210)이라 명명됨)에 연결되고, 각 예약 스테이션 유닛(210A-210F)은 각 기능 유닛(212A-212F)(총체적으로 기능 유닛(212)이라 명명됨)에 연결된다. 디코드 유닛들(208), 예약 스테이션들(210) 및 기능 유닛들(212)은 또한 재배열 버퍼(216), 레지스터(218) 및 적재/저장 유닛(222)에 연결된다. 데이터 캐시(224)는 최종적으로 적재/저장 유닛(222)에 연결되며, MROM부(209)는 명령 정렬 유닛(206)에 연결된 것으로 도시된다.
일반적으로, 명령 캐시(204)는, 명령들을 디코드 유닛(208)으로 디스패치하기 전에 이 명령들을 임시 저장하는 고속의 캐시 메모리이다. 일 실시예에서, 명령 캐시(204)는 각각 16 바이트(여기서 1바이트는 8비트로 구성됨)의 라인들로 구성되는 최대 32 킬로바이트의 명령 코드를 캐시하도록 구성된다. 동작이 진행되는 동안, 명령 코드는 프리페치/프리디코드 유닛(202)을 통해 메인 메모리(미도시)로부터 코드를 프리페치함으로써 명령 캐시(204)에 제공된다. 주목할 사항으로서, 명령 캐시(204)는 세트 어소시에이티브(set-associative), 완전한 어소시에이티브(fully-associative), 또는 직접 맵핑된(direct-mapped) 구성으로 실시될 수 있다.
프리페치/프리디코드 유닛(202)은 메인 메모리로부터 명령 코드를 프리페치한 다음 명령 캐시(204) 내에 저장하도록 제공된다. 일 실시예에서, 프리페치/프리디코드 유닛(202)은 메인 메모리로부터의 64 비트 폭의 코드를 명령 캐시(204) 내에 버스트(burst)시키도록 구성된다. 주목할 사항으로서, 많은 특정한 코드 프리페칭 기술들 및 알고리즘들이 프리페치/프리디코드 유닛(202)에 의해 이용될 수 있다.
프리페치/프리디코드 유닛(202)이 메인 메모리로부터 명령을 페치할 때, 이는 명령 코드의 각 바이트와 관련된 3개의 프리디코드 비트들, 즉 시작 비트, 종료 비트 및 "기능" 비트를 발생시킨다. 상기 프리디코드 비트들은 각 명령의 경계들을 나타내는 태그들을 형성한다. 상기 프리디코드 태그들은 또한, 소정의 명령이 디코드 유닛들(208)에 의해 직접 디코드될 수 있는지, 또는 상기 명령이 MROM 유닛(209)에 의해 제어되는 마이크로코드 절차를 호출함으로써 실행되어야 하는 지 등의 부가적인 정보를 전달할 수 있는 바, 이에 대해서는 하기에서 보다 상세히 설명한다.
표 1은 프리디코드 태그들의 엔코딩을 나타낸다. 이 표에 나타낸 바와 같이, 소정의 바이트가 명령의 첫 번째 바이트이면, 그 바이트에 대한 시작 비트가 설정된다. 상기 바이트가 명령의 마지막 바이트이면, 그 바이트에 대한 종료 비트가 설정된다. 특정 명령이 디코드 유닛들(208)에 의해 직접 디코드될 수 없다면, 그 명령의 첫 번째 바이트와 관련된 기능 비트가 설정된다. 한편, 상기 명령이 디코드 유닛들(208)에 의해 직접 디코드될 수 있다면, 그 명령의 첫 번째 바이트와 관련된 기능 비트는 클리어된다. 특정 명령의 제 2 바이트에 대한 기능 비트는, 연산 코드(opcode)가 제 1 바이트인 경우에는 클리어되며, 연산 코드가 제 2 바이트인 경우에는 설정된다. 주목할 사항으로서, 상기 연산 코드가 제 2 바이트인 상황들에서, 제 1 바이트는 접두 바이트(prefix byte)이다. 명령 바이트 번호들(3-8)에 대한 기능 비트값들은, 상기 바이트가 변위 또는 즉시 데이터(immediate data)를 포함하는 지의 여부 뿐 아니라, 상기 바이트가 MODRM 또는 SIB 바이트인지를 나타낸다.
시작, 종료 및 기능 비트들의 엔코딩
명령바이트번호 시작비트값 종료비트값 기능비트값 의미
1 1 X 0 빠른 디코드
1 1 X 1 MROM 명령
2 0 X 0 연산 코드는 제 1 바이트
2 0 X 1 연산 코드는 이 바이트, 제 1 바이트는 접두 바이트
3-8 0 X 0 Mod R/M 또는 SIB 바이트
3-8 0 X 1 변위 또는 즉시 데이터;바이트들 3-8 내에 설정된 제 2 기능 비트는 즉시 데이터를 나타냄
1-8 x 0 X 명령의 마지막 바이트가 아님
1-8 x 1 Xx 명령의 마지막 바이트임
상기 설명한 바와 같이, 일 실시예에서, x86 명령 세트 내의 특정 명령들은 디코드 유닛들(208)에 의해 직접 디코딩될 수 있다. 이러한 명령들은 "빠른 경로(fast path)" 명령들이라 불려진다. x86 명령 세트의 나머지 명령들은 "MROM 명령들"이라 불려진다. MROM 명령들은 MROM 유닛(209)을 호출함으로써 실행된다. MROM 명령을 만나면, MROM 유닛(209)은 이 명령을 분석해, 정의된 빠른 경로 명령들의 서브셋으로 순서대로 나열함으로써, 원하는 동작을 실시한다. 빠른 경로 명령들로서 분류된 예시적인 x86 명령들의 목록화(listing) 뿐 아니라, 빠른 경로 및 MROM 명령들을 처리하는 방법에 대해서는 하기에서 설명한다.
명령 정렬 유닛(206)이 제공되는바, 이는 명령 캐시(204)로부터의 가변 바이트 길이 명령들을 디코드 유닛들(208A-208F)에 의해 형성되는 고정된 발부 위치들(issue positions)로 전달한다. 명령 정렬 유닛(206)은 명령 캐시(204)에 의해 규정되는 라인들 내의 명령들의 시작 바이트들의 위치들에 따라, 명령 코드를 지정된 디코드 유닛들(208A-208F)에 전달하도록 구성된다. 일 실시예에서, 소정의 명령이 디스패치되는 특정한 디코드 유닛(208A-208F)은, 그 명령의 시작 바이트의 위치 뿐 아니라, 이전 명령이 있는 경우, 이 이전 명령의 시작 바이트의 위치에 의존한다. 특정한 바이트 위치들에서 시작하는 명령들은 또한 단지 1개의 소정의 발부 위치에만 발부되도록 더 제한될 수 있다. 이에 대해서는 하기에서 설명한다.
기능 유닛들(212), 적재/저장 유닛(222) 및 재배열 버퍼(216)에 대해 상세히 설명하기에 앞서서, 도 1의 예시적인 슈퍼스칼라 마이크로프로세서(200) 내에서 이용되는 다른 서브 시스템들에 대한 일반적인 양상들을 설명한다. 도 1의 실시예에서, 디코드 유닛들(208) 각각은 상기 설명한 소정의 빠른 경로 명령들을 디코딩하는 디코딩 회로를 포함한다. 또한, 각 디코드 유닛(208A-208F)은 변위 및 즉시 데이터를 대응하는 예약 스테이션 유닛(210A-210F)에 전달한다. 디코드 유닛들(208)로부터의 출력 신호들은, 기능 유닛들(212)에 대한 비트 코드와 실행 명령들 뿐 아니라, 오퍼랜드 어드레스 정보, 즉시 데이터 그리고/또는 변위 데이터를 포함한다.
도 1의 슈퍼스칼라 마이크로프로세서는 순서를 벗어난 실행을 지원하며, 이에 따라 재배열 버퍼(216)를 이용하여, 레지스터 판독 및 기록 동작들에 대한 최초 프로그램 시퀀스의 트랙을 유지하고, 레지스터 재명명(renaming)을 수행하며, 추론적인 명령 실행 및 분기 오예측 복구를 가능하게 하고, 그리고 정확한 예외들을 용이하게 한다. 당업자라면 알 수 있는 바와 같이, 재배열 버퍼(216) 내의 임시 저장 위치는 레지스터의 갱신에 관여하는 명령의 디코드시에 예약되며, 그러므로써 추론적인 레지스터 상태들을 저장하게 된다. 재배열 버퍼(216)는 선입선출 방식으로 실시될 수 있는바, 여기서 추론적인 결과들은 이들이 유효화되고 레지스터에 기록될 때 버퍼의 "바닥"으로 이동함으로써, 버퍼의 "상부"에 새로운 엔트리들을 위한 공간을 만든다. 재배열 버퍼(216)에 대한 다른 특정한 구성들이 또한 가능한바, 이에 대해서는 하기에서 설명한다. 분기 예측이 부정확하면, 오예측된 경로를 따라 추론적으로 실행된 명령들의 결과들은, 이들이 레지스터 파일(218)에 기록되기 전에 버퍼에서 무효화될 수 있다.
디코드 유닛들(208A-208F)의 출력에 제공되는 명령들 및 즉시 데이터의 비트 엔코드 실행은 각각의 예약 스테이션 유닛들(210A-210F)에 직접 전송된다. 일 실시예에서, 각 예약 스테이션 유닛(210A-210F)은 대응하는 기능 유닛으로의 발부를 기다리는 최대 3개의 미결 명령들에 대한 명령 정보(예를 들어, 비트 엔코드된 실행 비트들 뿐 아니라, 오퍼런드 값들, 오퍼랜드 태그들 그리고/또는 즉시 데이터)를 홀딩할 수 있다. 주목할 사항으로서, 도 1의 실시예에서, 각 디코드 유닛(208A-208F)에는 전용 예약 스테이션 유닛(210A-210F)이 결합되며, 각 예약 스테이션 유닛(210A-210F) 또한 유사하게 기능 유닛(212A-212F)에 결합된다. 따라서, 6개의 전용 "발부 위치들"은 디코드 유닛들(208), 예약 스테이션 유닛들(210) 및 기능 유닛들(212)에 의해 형성된다. 디코드 유닛(208A)를 통해 발부 위치(0)로 정렬 및 디스패치되는 명령들은 예약 스테이션 유닛(210A)에 전달된 다음, 실행을 위해 기능 유닛(212A)에 전달된다. 이와 유사하게, 디코드 유닛(208B)에 정렬 및 디스패치되는 명령은 예약 스테이션 유닛(210B) 및 기능 유닛(212B)으로 전달된다. 이하 마찬가지이다.
특정 명령의 디코드시, 필요한 오퍼랜드가 레지스터 위치이면, 레지스터 어드레스 정보는 재배열 버퍼(216) 및 레지스터 파일(218)에 동시에 전달된다. 당업자라면, x86 레지스터 파일이 8개의 32 비트 실 레지스터들(real registers)(즉, 전형적으로 EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP로 불려짐)을 포함한다는 것을 알 수 있을 것이며, 이에 대해서는 하기에서 설명한다. 재배열 버퍼(216)는, 이러한 레지스터들의 내용들을 변경함으로써 순서를 벗어난 실행을 가능하게 하는 결과들을 위한 임시 저장 장소를 포함한다. 재배열 버퍼(216)의 임시 저장 위치는 각 명령에 대해 예약되어, 디코드시 상기 실 레지스터들중 하나의 내용들을 변경한다. 따라서, 특정한 프로그램을 실행하는 동안 많은 포인트들에서, 재배열 버퍼(216)는 소정의 레지스터의 추론적으로 실행된 내용들을 포함하는 1개 이상의 위치들을 가질 수 있다. 소정 명령의 디코드에 이어서, 재배열 버퍼(216)가 상기 소정 명령의 오퍼랜드로서 이용되는 레지스터에 할당된 이전 위치(들)를 갖는 것으로 결정되면, 재배열 버퍼(216)는 대응하는 예약 스테이션에, 1) 가장 최근에 할당된 위치의 값, 또는 2) 그 값이 이전 명령을 최종적으로 실행하게 되는 기능 유닛에 의해 아직 생성되지 않은 경우에는, 가장 최근에 할당된 위치에 대한 태그를 포워딩(forwarding)한다. 재배열 버퍼가 소정의 레지스터에 대해 예약된 위치를 갖는 다면, 오퍼런드 값(또는 태그)은 레지스터 파일(218)이 아닌 재배열 버퍼(216)로부터 제공된다. 재배열 버퍼(216)에 필요한 레지스터에 대해 예약된 어떠한 위치도 없다면, 상기 오퍼런드 값은 레지스터 파일(218)로부터 직접 취해진다. 상기 오퍼랜드가 메모리 위치에 대응한다면, 상기 오퍼런드 값은 적재/저장 유닛(222)을 통해 예약 스테이션에 제공된다.
적절한 재배열 버퍼의 실시에 대한 상세한 설명은 마이크 존슨(Mike Johnson)의 "슈퍼스칼라 마이크로프로세서 설계(Superscalar Microprocessor Design)", Prentice-Hall, Englewood Cliffs, New Jersey, 1991의 간행물, 및 동시 계류중인 공통 양도 특허 출원이며, 1993년 10월 29일 위트(Witt) 등에 의해 출원된 출원 번호 08/146,382의 "고성능 슈퍼스칼라 마이크로프로세서(High Performance Superscalar Microprocessor)"에 개시되어 있는바, 이들은 본원의 참조로서 인용된다.
예약 스테이션 유닛들(210A-210F)은 대응하는 기능 유닛들(212A-212F)에 의해 추론적으로 실행될 명령 정보를 일시적으로 저장하기 위해 제공된다. 상기 설명된 바와 같이, 각 예약 스테이션 유닛(210A-210F)은 최대 3개의 미결 명령들에 대한 명령 정보를 저장할 수 있다. 6개의 예약 스테이션 유닛들(210A-210F) 각각은 대응하는 기능 유닛에 의해 추론적으로 실행될 비트 엔코드 실행 명령들 및 오퍼랜드들의 값을 포함한다. 특정한 오퍼런드가 이용가능하지 않은 경우, 그 오퍼랜드에 대한 태그가 재배열 버퍼(216)로부터 제공되며, (예를 들어, 이전 명령 실행의 완료에 의해) 결과가 발생할 때 까지 대응하는 예약 스테이션 내에 저장된다. 주목할 사항으로서, 기능 유닛들(212A-212F)중 하나에 의해 명령이 수행될 때, 그 명령의 결과는 이 결과를 기다리고 있는 임의의 예약 스테이션 유닛(210A-210F)에 직접 전달됨과 동시에, 재배열 버퍼(216)를 갱신하기 위해 전달된다(이 기술은 일반적으로 "결과 포워딩"이라 불려진다). 명령들은, 어떠한 필요한 오퍼랜드(들)의 값들이 이용가능하게 된 후, 실행을 위해 기능 유닛들에 발부된다. 즉, 예약 스테이션 유닛들(210A-210F)중 하나 내에서의 미결 명령에 관련된 오퍼랜드가, 필요한 오퍼랜드를 변경시키는 명령에 대응하는 재배열 버퍼(216) 내의 이전 결과값의 위치로 태그되는 경우, 상기 명령은 이전 명령에 대한 오퍼랜드 결과가 얻어질 때 까지 대응하는 기능 유닛(212)에 발부되지 않는다. 따라서, 명령들이 실행되는 순서는, 최초 프로그램 명령 시퀀스의 순서와 같지 않을 수 있다. 재배열 버퍼(216)는, 기록 후 판독(read after write) 의존 관계가 발생하는 상황들에서 데이터 코히런시가 유지됨을 보장한다.
일 실시예에서, 기능 유닛들(212) 각각은 덧셈 및 뺄셈의 정수 대수 연산들 뿐 아니라, 시프트, 회전, 논리 연산 및 분기 연산들을 수행하도록 구성된다. 주목할 사항으로서, 부동 소수점 유닛(미도시)이 또한 부동 소수점 연산에 대응하도록 이용될 수 있다.
기능 유닛들(212) 각각은 또한 조건 분기 명령들의 실행에 대한 정보를 분기 예측 유닛(220)에 제공한다. 분기 예측이 부정확하면, 분기 예측 유닛(220)은 명령 처리 파이프라인에 들어간 오예측된 분기 이후의 명령들을 플러시(flush)하며, 프리페치/프리디코드 유닛(202)으로 하여금 명령 캐시(204) 또는 메인 메모리로부터 필요한 명령들을 페치하게 한다. 주목할 사항으로서, 이러한 상황들에서, 적재/저장 유닛(222) 및 재배열 버퍼(216)에 대해 추론적으로 실행되고 일시적으로 저장된 명령들을 포함하여, 오예측된 분기 명령들 이후에 일어나는 최초 프로그램 시퀀스에 있어서의 명령들의 결과는 버려진다. 적절한 분기 예측 메커니즘들의 예시적인 구성들은 널리 알려져있다. 기능 유닛들(212) 및 분기 예측 유닛(220) 간의 통신에 대한 상세한 내용은 하기에 제공된다.
기능 유닛들(212)에 의해 생성되는 결과들은, 레지스터 값이 갱신되는 경우에는 재배열 버퍼(216)에 전달되고, 메모리 위치의 내용들이 변경되는 경우에는 적재/저장 유닛(222)에 전달된다. 결과가 레지스터에 저장될 것이라면, 재배열 버퍼(216)는 상기 명령이 디코드되었을 때에 레지스터의 값에 대해 예약된 위치에 상기 결과를 저장한다. 상기 설명한 바와 같이, 상기 결과값들은 또한, 미결 명령들이, 필요한 오퍼런드 값들을 얻기 위해 이전 명령 실행들의 결과를 기다리고 있을 수 있는 예약 스테이션 유닛들(210A-210F)에 전송된다.
데이터 캐시(224)는, 적재/저장 유닛(222)과 메인 메모리 서브 시스템 간에 전송되는 데이터를 일시적으로 저장하기 위해 제공되는 고속의 캐시 메모리이다. 일 실시예에서, 데이터 캐시(224)는 최대 8 킬로바이트의 데이터를 저장할 수 있는 용량을 갖는다. 주목할 사항으로서, 데이터 캐시(224)는 세트 어소시에이티브 구성을 포함하는 많은 특정한 메모리 구성들로 실시될 수 있다.
일반적으로, 적재/저장 유닛(222)은 기능 유닛들(212A-212F)과 데이터 캐시(224) 간의 인터페이스를 제공한다. 일 실시예에서, 적재/저장 유닛(222)은 미결 적재 또는 저장 메모리 연산들에 대한 데이터 및 어드레스 정보를 위한 16개의 저장 위치들을 갖는 적재/저장 버퍼로 구성된다. 기능 유닛들(212)은 적재/저장 유닛(222)으로의 액세스를 조정한다. 적재/저장 유닛(222)은 또한 데이터 코히런시가 유지됨을 보장하기 위해, 미결 저장 메모리 연산들에 대한 적재 메모리 연산들의 의존성 검사를 수행한다.
도 2는 기능 유닛(212), 재배열 버퍼(216) 및 적재/저장 유닛(222)를 도시한 블록도이다. 도 2는 도시된 유닛들 간의 연결 관계를 보여줄 뿐 아니라, 재배열 버퍼(216)를 보다 상세히 보여준다. 2개의 기능 유닛들(212A 및 212F)이 도시되었지만, 나머지 기능 유닛들(212) 각각에 대해 유사한 연결들이 이루어질 수 있다. 재배열 버퍼(216)는 분기 포인터를 분기 포인터 버퍼(250)를 통해 기능 유닛(212)에 전달한다. 기능 유닛들(212)은 또한, 어드레스를 분기 예측 유닛(220)에 전달하는 정정된 페치 어드레스 버스(251)에 연결된다. 재배열 버퍼(216)는 한 쌍의 가장 오래된 포인터 버스들(255 및 256)을 통해 한 쌍의 가장 오래된 포인터들(즉, 가장 오래된 포인터 및 두 번째로 오래된 포인터)을 적재/저장 유닛(222)에 전달한다. 명령의 콘텍스트(context)에 대해 이용될 때, "가장 오래된"이란 용어는, 아직 유효한 결과들을 갖지 않지만, 재배열 버퍼 내의 이전의 각 명령이 유효한 결과들을 갖는 재배열 버퍼 내의 명령을 말한다.
일반적으로, 분기 포인터 버스(250) 상에서 재배열 버퍼(216)에 의해 전달되는 분기 포인터는 재배열 버퍼(216) 내에 현재 저장된 가장 오래된 분기 명령을 식별한다. 기능 유닛들(212)은 상기 분기 포인터와, 현재 실행하고 있는 명령을 나타내는 포인터를 비교한다. 비교가 일치를 나타내면, 관련된 기능 유닛들은 정정된 페치 버스(251)를 통해 그의 정정된 페치 어드레스를 분기 예측 유닛(220)에 전달한다. 상기 기능 유닛은, 관련된 분기 명령이 분기 예측 유닛(220)에 의해 오예측되었을 경우, 정정된 페치 어드레스를 전달한다. 가장 오래된 포인터 버스들(255 및 256)을 통해 전달되는 가장 오래된 포인터들은 퇴거 조건에 있지 않는 가장 오래된 명령들을 식별한다. 적재/저장 유닛(222)은 가장 오래된 포인터와, 적재/저장 유닛(222) 내의 적재/저장 버퍼에 저장된 미결 적재 미스 및 저장 명령들을 나타내는 포인터들과 비교한다. 비교가 일치를 나타내면, (필요한 경우) 관련된 메모리 위치들을 캐시 내에 전송하고, 저장 명령들에 관련된 데이터를 데이터 캐시에 저장하거나, 적재 명령들에 관련된 데이터를 타겟 레지스터에 포워딩함으로써, 대응하는 적재 또는 저장 명령이 수행된다. 따라서, 분기 예측 복구를 위한 메커니즘 및 데이터 캐시 미스들인 적재 명령들 및 저장 명령들을 프로그램 순서로 수행하는 메커니즘이 생성된다. 명령 실행의 결과들이 재배열 버퍼(216)에 전송되면, 명령은 "퇴거 상태"에 있는 것으로 판정된다. 여기서 "퇴거"라는 용어는 재배열 버퍼(216)로부터 명령을 제거하는 것을 의미한다.
분기 포인터는 분기 검출기 회로(253)를 이용하여 재배열 버퍼(216)에 의해 생성된다. 분기 검출기 회로(253)는 재배열 버퍼 어레이(252)에서 가장 오래된 명령들을 저장하는 몇 개의 엔트리들을 스캔한다. 일 실시예에서, 스캔된 엔트리들의 수는 6개이다. 재배열 버퍼 어레이(252)는 슈퍼스칼라 마이크로프로세서(200)에서 현재 미결중인 명령들(즉, 디스패치되었으나, 아직 퇴거 상태는 아닌 명령들)에 대한 정보를 저장하도록 구성된다. 재배열 버퍼 어레이(252) 내의 가장 오래된 6개의 엔트리들 내의 가장 오래된 분기 명령과 관련된 "재배열 버퍼 태그" (재배열 버퍼(216) 내의 명령을 유일하게(uniquely) 식별함)는 분기 검출기 회로(253)에 의해 선택되며 분기 포인터로서 전달된다. 따라서, 본 실시예에 있어서의 분기 포인터는 리오터 버퍼 태그이다.
본 실시예에서, 분기 검출기 회로(253)는 하나의 태그 루팅 디바이스를 이용한다. 이 태그 루팅 디바이스는 도 3C를 참조하여 상세히 설명될 것이지만, 일반적으로 이는 각 엔트리와 관련된 비트에 의존하여 재배열 버퍼 어레이(252)의 다수의 엔트리들로부터 재배열 버퍼 태그를 선택한다. 분기 검출기 회로(253)의 경우, 상기 비트는 상기 명령을 분기로서 식별한다. 가장 오래된 엔트리가 분기이면, 그의 관련된 재배열 버퍼 태그가 기능 유닛들(212)에 전달된다. 이와 유사하게, 두 번째로 오래된 엔트리가 분기이고, 가장 오래된 엔트리가 분기가 아니면, 두 번째로 오래된 엔트리의 태그가 기능 유닛(212)에 전달되며, 스캔되는 나머지 4개의 재배열 버퍼 엔트리들에 대해서도 마찬가지이다. 분기 검출기 회로(254)에 의해 스캔되는 엔트리들 내에서 어떠한 분기 명령도 발견되지 않는 다면, 무효 태그가 기능 유닛들(212)에 전달된다.
가장 오래된 포인터 버스들(255 및 256)을 통해 전달되는 가장 오래된 포인터들의 쌍은 가장 오래된 미결 검출기 회로(254)(이하, 검출기 회로(254)라 명명함)에 의해 발생된다. 분기 검출기 회로(253)와 유사하게, 검출기 회로(254)는 재배열 버퍼(216) 내의 가장 오래된 명령을 저장하는 몇 개의 엔트리들을 스캔한다. 퇴거 상태에 있지 않는 가장 오래된 명령 및 두 번째로 오래된 명령들에 관련된 재배열 버퍼 태그들은 검출기 회로(254)에 의해 적재/저장 유닛(222)에 전달된다. 일 실시에서, 재배열 버퍼 엔트리들의 수는 12개이다.
일 실시예에서, 검출기 회로(254)는 도 3C를 참조하여 하기 설명되는 바와 같이, 2개의 태그 루팅 디바이스들을 포함한다. 제 1 태그 루팅 디바이스는, 재배열 버퍼 태그를 선택하는 데에 이용되는 버퍼 어레이(252)로부터의 비트가 상기 관련된 명령이 퇴거 상태에 있지 않다는 것을 나타내는 것을 제외하고, 분기 검출기 회로(253)의 태그 루팅 디바이스와 유사한 재배열 버퍼 태그를 전달한다. 제 2 태그 루팅 디바이스는 퇴거 상태에 있지 않는 명령에 관련된 두 번째로 오래된 재배열 버퍼 태그를 전달하도록 구성된다. 따라서, 제 2 태그 루팅 디바이스에 제공되는 선택 비트는, 명령이 퇴거 상태에 있지 않음을 나타내는 비트 및 명령이 제 1 태그 루팅 디바이스에 의해 선택되어 있지 않음을 나타내는 비트의 논리 곱(AND)이다. 이러한 선택 비트들은, 도 3c를 참조하여 설명되는 바와 같이, 태그 루팅 디바이스에 의해 우선적으로 엔코드된다.
본 실시예에서, 적재/저장 유닛(222)은, 적재 명령과 관련된 데이터를 재배열 버퍼로 복귀시키고, 재배열 버퍼에 대해 저장이 수행되었음을 나타내기 위해 필요하다. 데이터 캐시에 대해 히트하는 적재 명령들은 관련 데이터를 재배열 버퍼에 전송함으로써 완료된다. 그러나, 데이터 캐시를 미스하는 (이에 따라, 데이터를 복귀시킬 수 없음) 적재 명령들 및 저장 명령들은, 이들의 관련된 재배열 버퍼 태그가 가장 오랜된 포인터들중 하나 상에 나타날 때 까지 적재/저장 버퍼에 남는다. 이후, 상기 적재/저장 유닛은 메인 메모리로부터 데이터 캐시 내에 데이터를 전송하기 위한 적재 미스 명령 또는 데이터 캐시 내에 데이터를 저장하기 위한 저장 명령을 선택할 수 있다. 상기 적재/저장 유닛이 이러한 동작을 수행할 때, 이는 상기 데이터를 복귀시키거나 또는 저장이 (각각) 완료되었음을 나타낸다. 이후의 클럭 주기들에서, 가장 오래된 포인터들은 재배열 버퍼(216) 내의 다음으로 오래된 명령들로 이동할 것이다. 이에 따라, 데이터 캐시를 미스하는 적재 명령들 및 저장 명령들은 순서대로 실행된다.
다른 실시예에서, 분기 포인터 버스(250) 및 가장 오래된 미결 버스(255)는 이들이 각 클럭 주기에 대해 동일한 포인터를 전달하도록 동작한다. 따라서, 분기 포인터 버스(250) 및 가장 오래된 미결 버스(255)는 본 실시예에 대해서는 공통 버스에 결합될 수 있으며, 분기 검출기 회로(253)는 제거될 수 있다. 이하 설명되는 바와 같이, 기능 유닛들(212)은, 분기 명령들을 실행하고 있는 경우에는 유효한 정정된 페치 어드레스들을 발생시키고, 그 외의 경우에는 무효한 정정된 페치 어드레스들을 발생시킨다. 따라서, 분기 포인터 버스(250)가 비분기 명령을 전달하고, 포인터가 현재 실행되고 있는 명령을 나타내는 포인터와 일치하는 경우, 분기 예측 유닛(220)는 무효한 정정 페치 어드레스를 수신할 것이다.
도 3A는 기능 유닛들(212)중 하나의 내부 논리 회로들을 도시한다. 기능 유닛들(212)은 각각, 현재의 클럭 주기에서 실행되고 있는 명령의 재배열 버퍼 태그를 저장하는 레지스터(300)를 갖도록 구성된다. 레지스터(300)는 비교기 회로(301)에 연결되며, 이 비교기 회로는 분기 포인터 버스(250)에 연결된다. 따라서, 비교기 회로(301)는 분기 포인터 버스(250)를 통해 전달된 분기 포인터를 레지스터(300)에 저장된 재배열 버퍼 태그와 비교한다. 분기 포인터 버스(250)는 관련된 명령이 분기일 경우에만 유효한 재배열 버퍼 태그를 전달하기 때문에, 상기 비교기의 출력은 분기 명령이 기능 유닛에 의해 실행되고 있는 클럭 주기들에 대한 일치를 나타낸다. 비교기(301)의 출력은 3상 드라이버 회로(303)의 인에이블에 연결된다. 상기 3상 드라이버 회로(303)는 정정된 어드레스 논리 블럭(302)에 결합되는바, 이 논리 블럭은 실행되는 분기 명령이 오예측된 분기인 경우에는 정정된 페치 어드레스를 발생시키고, 분기가 정확히 예측되거나 명령이 분기가 아닌 경우에는 무효한 어드레스를 발생시키도록 구성된다. 상기 3상 드라이버 회로는, 비교기 회로(301)가 일치를 나타내는 경우에는 정정된 어드레스 논리 블럭(302)에 의해 생성된 어드레스를 전달하고, 비교기 회로(301)가 일치를 나타내지 않는 경우에는 아무것도 전달하지 않는다. 따라서, 단지 하나의 기능 유닛 만이 소정의 클럭 주기 내에서 포인터 버스(250)를 통해 전달되는 포인터와 일치되는 재배열 버퍼 태그를 포함할 수 있기 때문에, 다수의 기능 유닛들(212)이 동일한 정정된 페치 어드레스 버스(251)에 연결될 수 있다. 분기 예측 유닛(220)은, 정정된 페치 어드레스들에 대해서만 작용하고 무효한 어드레스들은 무시되도록, 무효한 어드레스를 인식하도록 구성된다. 주목할 사항으로서, 기능 유닛(212)은 다른 명령의 경우와 마찬가지로, 분기 명령의 실행 결과들을 재배열 버퍼(216)에 보고한다.
슈퍼스칼라 마이크로프로세서 내에서 기능 유닛(212)을 이용함으로써, 완료를 위해 비교적 적은 수의 클럭 주기들을 필요로 하는 분기 오예측 복구를 위한 메커니즘이 실시될 수 있다. 분기가 실행되고 오예측이 발견되는 클럭 주기는, 정정된 페치 어드레스가 분기 예측 유닛(220)에 전달되는 주기이다. 다음 클럭 주기에서, 정정된 페치 어드레스는 명령 캐시에 액세스할 것이며, 관련된 명령들이 디스패치될 것이다. 또한, 분기 오예측 복구 메커니즘은 가장 오래된 분기 명령과 관련된 정정된 페치 어드레스를 전달함으로써 다수의 분기 예측들을 처리한다.
도 3B는 적재/저장 유닛(222)을 보다 상세히 도시한다. 적재/저장 유닛(222)은 재배열 버퍼(216)로부터 가장 오래된 포인터 버스들(255 및 256)을 수신하며, 데이터 캐시(224)를 액세스하기 위한 적재 또는 저장 명령을 선택한다. 일 실시예에서, 적재/저장 유닛(222)은 각 클럭 주기에 대해 데이터 캐시를 액세스하기 위해 최대 2개의 적재/저장 명령들을 선택한다. 적재/저장 유닛(222)은, 미결 적재 및 저장 명령들에 대한 정보를 저장하도록 구성된 적재/저장 버퍼(310)를 갖추어 구성된다. 도 3B에 도시된 바와 같이, 적재/저장 버퍼(310) 내에 저장된 정보 내에는, 각 명령에 대한 재배열 버퍼 태그가 포함된다. 각 엔트리에 대한 재배열 버퍼 태그는 비교기 회로들(312 및 313)을 이용하여 가장 오래된 포인터와 비교된다. 데이터 캐시 입력 선택 논리 블록(311)(이하, 선택 논리 블록(311)이라 명명함)은 적재/저장 버퍼(310)의 내용 뿐 아니라 비교기 출력을 수신하여, 데이터 캐시(224)에 대해 최대 2개의 요구를 발생시킨다. 선택 논리 블록(311)은, 관련된 비교기 회로들이 가장 오래된 포인터들과의 일치를 나타내지 않는 한, 데이터 캐시를 미스하는 것으로 결정되는 적재 명령을 선택하지 않는다. 유사하게, 선택 논리 블록(311)은, 관련된 비교기 회로가 가장 오래된 포인터들과의 일치를 나타내지 않는 한, 저장 명령을 선택하지 않는다. 일 실시예에서, 선택 논리 블록(311)은 데이터 캐시(224)를 액세스하기 위한 명령을 선택하는 우선순위 방식(priority scheme)을 이용한다. 최우선 순위는 가장 오래된 포인터 버스(255)를 통해 전달되는 가장 오래된 포인터와 일치하는 재배열 버퍼 태그를 갖는 적재 미스 또는 저장 명령에 할당된다. 중간 순위는 가장 오래된 포인터 버스(256)를 통해 전달되는 가장 오래된 포인터와 일치하는 재배열 버퍼 태그를 갖는 적재 미스 또는 저장 명령에 할당된다. 최하위 순위는 아직 데이터 캐시(224)를 액세스하지 않은 적재 명령들에 할당된다.
가장 오래된 포인터를 생성하는 슈퍼스칼라 마이크로프로세서에 적재/저장 유닛(222)을 이용함으로써, 데이터 캐시(224)를 미스하는 적재 명령들 및 저장 명령들이 순서대로 실행된다. 이들의 재배열 버퍼 태그들이 가장 오래된 포인터들에 전달되어, 이들이 퇴거 상태에 있지 않는 가장 오래된 미결 명령임을 나타낼 때 까지, 상기 2가지 타입의 명령들은 데이터 캐시(224) 또는 메인 메모리 하위 시스템으로의 액세스가 허용되지 않는다. 따라서, 적재 또는 저장 명령 이전의 명령들 각각이 완료되며, 적재 또는 저장 명령이 실행될 수 있게 된다.
도 3C는 분기 검출 회로(253)(도 2에 도시됨) 및 가장 오래된 미결 검출기 회로(254)(도 2에 도시됨) 내에서 이용되는 태그 루팅 디바이스(320)의 실시예를 나타낸다. 이 태그 루팅 디바이스(320)는 재배열 버퍼 어레이(252)로부터 재배열 버퍼 태그를 수신하는 멀티플렉서(321)를 포함한다. 각 재배열 버퍼 태그와 관련된 것은, 상기 태그가 태그 루팅 디바이스(320)에 의해 전달되는 것으로 고려되어야 하는 경우 논리 1을 전달하는 신호이다. 도 3C에 도시된 실시예는, 다중화기(321)에 연결된 신호 라인(322)에 의해 나타낸 바와 같이, 관련된 신호가 논리 1인 경우 가장 오래된 태그를 선택하는 우선순위 엔코드 메커니즘이다. 이 엔코딩 메커니즘은, 관련 신호가 논리 1을 전달하고, 가장 오래된 태그와 관련된 신호가 논리 0을전달할 경우, 두 번째로 오래된 태그를 선택한다. 따라서, (두 번째로 오래된 태그를 선택하는) 신호 라인(323)은 AND 게이트(324)에 의해 발생된다. 가장 오래된 태그와 관련된 신호 및 두 번째로 오래된 태그에 관련된 신호가 논리 0을 전달하고, 세 번째로 오래된 태그와 관련된 신호가 논리 1을 전달하는 경우, 상기 세 번째로 오래된 태그가 선택된다. 따라서, (세 번째로 오래된 태그를 선택하는) 신호 라인(325)이 AND 게이트(326)에 의해 발생된다. 멀티플렉서(321)를 위한 부가적인 선택 신호들이 이와 유사하게 발생된다.
다음으로, 도 3D는 재배열 버퍼 어레이(252)를 위한 예시적인 재배열 버퍼 엔트리(330)를 도시한다. 태그 엔트리(330)는 4개의 필드들, 즉 재배열 버퍼 태그 필드(331), 분기 비트(332), 퇴거 비트(333) 및 명령어 필드(334)를 갖는다. 명령어 필드(334)는 재배열 버퍼(216)의 특정 실시예가 요구할 수 있는 다른 데이터와 함께 이러한 재배열 버퍼 엔트리에 대한 명령을 포함한다. 재배열 버퍼 태그 필드(331)는 재배열 버퍼 태그를 저장하고, 분기 검출기 회로(253)에 연결되며, 어레이에 있어서 가장 오래된 명령들을 포함하도록 구성된 재배열 버퍼 어레이 엔트리를 위한 가장 오래된 검출기 회로(254)에 결합된다. 분기 비트(332)는, 재배열 버퍼 엔트리에 저장된 명령이 분기 명령인 경우에는 논리 1을 저장하고, 그렇지 않은 경우에는 논리 0을 저장한다. 분기 비트(332)는 분기 검출기 회로(253)의 태그 루팅 디바이스를 위한 선택 신호들중 하나를 형성한다. 퇴거 비트(333)는, 재배열 버퍼 어레이 엔트리(330)에 저장된 명령이 퇴거 상태에 있을 때에는 논리 1을 저장하고, 그렇지 않은 경우에는 논리 0을 저장한다. 퇴거 비트(333)의 반전은 가장 오래된 미결 검출 회로(254) 내의 태그 루팅 디바이스(320)를 위한 선택 신호들중 하나를 형성하는 데에 이용된다.
또 다른 실시예에서, 기능 유닛들(212) 각각은, 이들이 클럭 주기 동안 다른 기능 유닛들(212) 각각에 대해 오예측된 분기 명령을 실행하고 있는 지의 여부 뿐 아니라, 분기 포인터에 대한 비교 결과들을 통신한다. 기능 유닛들(212) 중에서 어떠한 분기 포인터의 일치도 검출되지 않으면, 우선 순위 방식이 호출된다. 이러한 우선 순위 방식은 다음과 같이, 정정된 어드레스 버스(251)를 구동하는 기능 유닛을 선택한다. 즉, 기능 유닛(212A)은, 오예측된 분기 명령을 포함하는 경우, 정정된 페치 어드레스 버스(251)를 구동시킬 것이고; 기능 유닛(212B)은, 자신이 오예측된 분기 명령을 포함하고 기능 유닛(212A)이 오예측된 분기 명령을 포함하지 않는 경우, 정정된 페치 어드레스 버스(251)를 구동시킬 것이며; 기능 유닛(212C)은, 자신이 오예측된 분기 명령을 포함하고 기능 유닛(212A) 또는 기능 유닛(212B)중 어느 것도 오예측된 분기 명령을 포함하지 않는 경우, 정정된 페치 어드레스 버스(251)를 구동시킬 것이며; 그리고 나머지 기능 유닛들에 대해서도 마찬가지로 동작한다. 이러한 방식으로, 정정된 페치 어드레스 버스(251)는 각 클럭 주기 동안 값을 전달한다.
주목할 사항으로서, 본 발명의 다른 실시예들은 다양한 수의 기능 유닛들 및 적재/저장 유닛들을 이용할 수 있다. 또한, 주목할 사항으로서, 분기 포인터들 및 가장 오래된 포인터들의 수 또한 실시예 마다 달라질 수 있다. 본 실시예에서, 적재/저장 유닛(222)은 통합된 적재/저장 버퍼로 구성된다. 그러나, 다른 실시예들에서, 적재/저장 유닛(222)은 다수의 적재/저장 버퍼로 구성될 수 있으며, 적재 및 저장 명령들은 개별적인 버퍼들 내에 저장될 수 있다.
상기 설명한 바와 같이, 본 발명은 분기 오예측 복구 및 적재/저장 순서 결정을 위한 메커니즘을 개시한다. 상기 분기 오예측 복구 메커니즘은, 일단 오예측이 발견되면 완료에 1 클럭 주기를 필요로 하여, 분기 오예측으로 인한 아이들 클럭 주기들의 수를 최소화함으로써 고성능을 달성한다. 상기 적재/저장 메커니즘은 유닛들 간의 핸드쉐이킹을 최소량으로 하면서, 적재/저장 순서 결정을 할 수 있다. 핸드쉐이킹이 최소량이 되면, 인터페이스 신호들의 수를 감소시키고, 슈퍼스칼라 마이크로프로세서의 설계를 단순화한다.
상기 개시 내용을 충분히 숙지하게 되면, 당업자에게는 본 발명에 대한 많은 변경 및 수정이 명백해질 것이다. 하기의 청구 범위들은 이러한 모든 변경 및 수정을 포함한다.

Claims (14)

  1. 적재 및 저장 명령들을 실행하도록 구성된 적재/저장 유닛(222)을 포함하는 슈퍼스칼라 마이크로프로세서(200)-여기서 상기 적재/저장 유닛(222)은 적재 및 저장 타입들의 미결 명령들을 저장하도록 구성된 적재/저장 버퍼(310)를 포함하며-에 있어서,
    상기 적재/저장 유닛(222)은 가장 오래된 미결 명령을 식별할 수 있는 포인터를 수신하도록 구성되며, 상기 적재 및 저장 명령들은 상기 적재/저장 유닛(222)에 의해 수신된 상기 포인터에 응답하여 실행하기 위해 선택되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  2. 제 1 항에 있어서,
    상기 적재/저장 유닛(222)은, 상기 저장 명령이 상기 적재/저장 버퍼(310)에 저장될 때, 상기 포인터에 의해 식별된 저장 명령을 실행하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  3. 제 1 항 또는 제 2 항에 있어서,
    데이터 캐시(224)를 더 포함하며,
    상기 적재/저장 유닛(222)은, 상기 적재 명령이 상기 적재/저장 버퍼(310) 내에 저장되어 있고 캐시 미스인 것으로서 이전에 결정되었을 때, 상기 포인터에 의해 식별된 적재 명령을 실행하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  4. 제 1 항 또는 제 2 항에 있어서,
    재배열 버퍼(216)를 더 포함하며, 상기 재배열 버퍼는 상기 포인터를 발생시키도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  5. 제 4 항에 있어서,
    상기 포인터는 재배열 버퍼 태그를 전달하며, 상기 재배열 버퍼 태그는 상기 재배열 버퍼(216) 내의 명령을 유일하게 확인하는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  6. 제 5 항에 있어서,
    상기 적재/저장 버퍼(310)는 상기 적재/저장 버퍼 내에 저장된 각 명령에 대한 재배열 버퍼 태그를 저장하도록 구성되며, 상기 적재/저장 유닛(322)은 상기 적재/저장 버퍼(310) 내에 저장된 상기 재배열 버퍼 태그들과, 상기 포인터 상에 전달된 상기 재배열 버퍼 태그를 비교하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  7. 제 6 항에 있어서,
    상기 적재/저장 유닛은, 상기 적재/저장 버퍼 내에 저장된 상기 재배열 버퍼 태그가 상기 포인터 상에 전달된 상기 재배열 버퍼 태그와 동일한 클럭 주기 동안, 상기 적재/저장 버퍼(310) 내에 저장된 상기 재배열 버퍼 태그와 관련된 상기 명령을 완료하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  8. 제 6 항에 있어서,
    상기 적재/저장 유닛(222)은 명령이 완료되는 클럭 주기 동안 상기 재배열 버퍼(216)에 신호를 보내도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  9. 제 6 항에 있어서,
    데이터 캐시(224)를 더 포함하며,
    상기 적재/저장 유닛(222)은, 상기 저장 명령과 관련된 상기 재배열 버퍼 태그가 상기 포인터 상에 전달된 상기 재배열 버퍼 태그와 동일한 클럭 주기 동안, 상기 저장 명령과 관련된 데이터를 상기 데이터 캐시(224)에 저장하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  10. 제 6 항에 있어서,
    데이터 캐시(224)를 더 포함하며,
    상기 적재/저장 유닛(222)은 메모리 위치가 상기 데이터 캐시(224)에 전달되도록 구성되고, 상기 메모리 위치는 상기 데이터 캐시에서 미스인 적재 명령과 관련되며, 그리고 상기 메모리 위치는, 상기 적재 명령와 관련된 상기 재배열 버퍼 태그가 상기 포인터 상에 전달된 상기 재배열 버퍼 태그와 동일한 클럭 주기 동안 전달되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  11. 제 10 항에 있어서,
    상기 적재/저장 유닛(222)은, 상기 적재/저장 유닛(222)이 상기 데이터 캐시(224)에 히트하는 적재 명령을 실행하는 클럭 주기들 동안, 상기 재배열 버퍼(216)에 신호를 보내도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  12. 제 1 항에 있어서,
    상기 적재/저장 유닛(222)은 다수의 상기 포인터들을 수신하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  13. 제 12 항에 있어서,
    상기 적재/저장 유닛(222)은 클럭 주기 동안 상기 적재/저장 버퍼 내에 저장된 다수의 명령들을 완료하도록 구성되는 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
  14. 제 13 항에 있어서,
    상기 다수의 명령들 및 상기 다수의 포인터들은 같은 수인 것을 특징으로 하는 슈퍼스칼라 마이크로프로세서.
KR10-1999-7000320A 1999-01-16 1996-07-16 저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛 KR100417459B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR10-1999-7000320A KR100417459B1 (ko) 1999-01-16 1996-07-16 저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-1999-7000320A KR100417459B1 (ko) 1999-01-16 1996-07-16 저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛

Publications (2)

Publication Number Publication Date
KR20000023828A KR20000023828A (ko) 2000-04-25
KR100417459B1 true KR100417459B1 (ko) 2004-02-05

Family

ID=19635912

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-1999-7000320A KR100417459B1 (ko) 1999-01-16 1996-07-16 저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛

Country Status (1)

Country Link
KR (1) KR100417459B1 (ko)

Also Published As

Publication number Publication date
KR20000023828A (ko) 2000-04-25

Similar Documents

Publication Publication Date Title
US6339822B1 (en) Using padded instructions in a block-oriented cache
US6185675B1 (en) Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks
US5761712A (en) Data memory unit and method for storing data into a lockable cache in one clock cycle by previewing the tag array
US5471598A (en) Data dependency detection and handling in a microprocessor with write buffer
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
US5845323A (en) Way prediction structure for predicting the way of a cache in which an access hits, thereby speeding cache access time
JP2001521241A (ja) 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ
KR20040014673A (ko) 2개 레벨의 분기 예측 캐시를 갖는 분기 예측
US20070033385A1 (en) Call return stack way prediction repair
US5740398A (en) Program order sequencing of data in a microprocessor with write buffer
EP0651331B1 (en) A write buffer for a superpipelined, superscalar microprocessor
US5615402A (en) Unified write buffer having information identifying whether the address belongs to a first write operand or a second write operand having an extra wide latch
JP2003515214A (ja) 計算を狭いオペランドで実施するための方法と装置
US5893146A (en) Cache structure having a reduced tag comparison to enable data transfer from said cache
US6460116B1 (en) Using separate caches for variable and generated fixed-length instructions
KR100603067B1 (ko) 분기 예측의 타입을 분류하기 위해 복귀 선택 비트들을 이용하는 분기 예측
US6347369B1 (en) Method and circuit for single cycle multiple branch history table access
EP0912927B1 (en) A load/store unit with multiple pointers for completing store and load-miss instructions
US6175909B1 (en) Forwarding instruction byte blocks to parallel scanning units using instruction cache associated table storing scan block boundary information for faster alignment
KR100417459B1 (ko) 저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛
JP2002513486A (ja) スーパースカラマイクロプロセッサ用ライン指向型リオーダバッファ
US6219784B1 (en) Processor with N adders for parallel target addresses calculation
EP0912930B1 (en) A functional unit with a pointer for mispredicted branch resolution, and a superscalar microprocessor employing the same
EP0919027B1 (en) A delayed update register for an array
EP1015980B1 (en) A data cache capable of performing store accesses in a single clock cycle

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: 20101229

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee