KR100309309B1 - 단일클록사이클동안슈퍼스칼라프로세서에서복수의저장인스트럭션완료를용이하게하는방법및시스템 - Google Patents

단일클록사이클동안슈퍼스칼라프로세서에서복수의저장인스트럭션완료를용이하게하는방법및시스템 Download PDF

Info

Publication number
KR100309309B1
KR100309309B1 KR1019980045323A KR19980045323A KR100309309B1 KR 100309309 B1 KR100309309 B1 KR 100309309B1 KR 1019980045323 A KR1019980045323 A KR 1019980045323A KR 19980045323 A KR19980045323 A KR 19980045323A KR 100309309 B1 KR100309309 B1 KR 100309309B1
Authority
KR
South Korea
Prior art keywords
data
queue
instruction
storage
storage instruction
Prior art date
Application number
KR1019980045323A
Other languages
English (en)
Other versions
KR19990066800A (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 KR19990066800A publication Critical patent/KR19990066800A/ko
Application granted granted Critical
Publication of KR100309309B1 publication Critical patent/KR100309309B1/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
    • 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

본 발명의 한 특징은 순서대로 인스트럭션을 완료하고, 인스트럭션 디스패치 유닛, 구조화된(architected) 레지스터 파일, 재명명 레지스터 파일, 로드 저장 유닛, 완료 유닛, 및 캐쉬 메모리를 갖는 프로세서를 포함하는 슈퍼스칼라 프로세서 상에서 저장 인스트럭션을 처리하는 장치에 관한 것이다. 본 발명의 일 실시예에서, 본 발명의 장치는 저장 인스트럭션에 대응하는 엔트리를 갖는 포인터 큐, 저장 인스트럭션에 의해 요구되는 데이터를 포함하는 구조화된 레지스터 파일 및 재명명 레지스터 파일 내의 엔트리에 대한 포인터를 포함하는 엔트리, 및 구조화된 레지스터 파일 및 재명명 레지스터 파일 상의 판독 포트에 결합되는 멀티플렉서를 포함하여 데이터가 레지스터 파일중의 하나로부터 캐쉬 메모리에 결합되는 데이터 큐 내의 엔트리로 전송될 수 있도록 한다.

Description

단일 클록 사이클 동안 슈퍼스칼라 프로세서에서 복수의 저장 인스트럭션 완료를 용이하게 하는 방법 및 시스템{METHOD AND APPARATUS FOR FACILITATING MUTIPLE STORAGE INSTRUCTION COMPLETIONS IN A SUPERSCALAR PROCESSOR DURING A SINGLE CLOCK CYCLE}
본 발명은 프로세싱 시스템에 관한 것으로 보다 상세하게는 프로세싱 시스템에서 저장 인스트럭션 완료율(the rate of store instruction completions)를 증가 시키기 위한 것이다.
보다 빠르고 성능이 우수한 컴퓨터 시스템의 지속적인 발전에 있어서, 축소 인스트럭션 세트 컴퓨터(reduced instruction set computer: RISC) 프로세서로서 알려진 중요한 마이크로프로세서가 사용되어 왔다. RISC 프로세서 분야의 진보가 이루어짐에 따라 슈퍼스칼라(superscalar) 프로세서가 개발되었다. 이름이 내포하는 바와 같이 슈퍼스칼라 프로세서는 전통적인 스칼라 마이크로프로세서에서는 통상적으로 알려지지 않은 기능들을 수행한다. 이러한 기능들 중에는 프로그램순서(order)에 대해 순서에 무관(out-of-order)하게 인스트럭션을 실행할 수 있는 능력이 포함된다. 인스트럭션들이 순서에 무관하게 발생하지만, 실행의 결과는 프로그램 순서에 따라 발생한 것 같이 보여 적절한 데이터 코히어런스(coherence)가 유지되도록 한다.
슈퍼스칼라 프로세서 성능에 공통되는 병목 현상은 주어진 시점에서 프로세서 내에서 미해결(outstanding) 상태로 남아 있을 수 있는 인스트럭션의 개수이다. 통상적으로 인스트럭션 유닛은 미해결 인스트럭션(outstanding instructions)의 개수를 표시하는 큐(queue)를 포함한다. 통상적으로 큐는 최대 개수에 도달한 경우 인스트럭션에 대한 더 이상의 디스패치(dispatching)를 중단한다.
완료를 느리게 할 수 있는 인스트럭션의 한 형태는 저장 인스트럭션이다. 저장 인스트럭션은 여러 가지 이유로 인해 완료를 느리게 한다. 예를 들어, 저장 인스트럭션은 사이클마다 완료될 수 있는 저장의 최대 개수, 및 각 사이클에서 캐쉬를 업데이트할 수 있는 저장의 개수로 인하여 완료가 느려진다. 종래의 슈퍼스칼라 프로세서는 통상적으로 사이클 당 하나의 저장 인스트럭션만을 완료한다. 이것은 종종 디스패치 스톨(stalls)의 원인이 된다. 따라서, 이러한 문제를 효율적이고 효과적으로 대처하고 저장 인스트럭션 완료의 부족으로 인한 디스패치 유닛의 스톨의 개수를 감소시켜 전체 프로세서 성능을 개선하는 시스템이 필요하다.
따라서, 본 발명은 한 사이클 동안 완료될 수 있는 저장 인스트럭션의 개수를 증가시키는 것에 관한 것이다. 스톨 조건 후에 프로세싱 시스템 내에서 복수저장 인스트럭션 완료를 처리하는 방법 및 시스템이 개시된다. 이러한 프로세싱 시스템은 디스패치 유닛, 및 완료 유닛을 포함하는 인스트럭션 유닛, 번역 유닛 및 적어도 하나의 실행 유닛을 포함한다. 로드 저장 유닛(load store unit)은 디스패치 유닛으로부터 복수의 인스트럭션을 수신하는 인스트럭션 큐, 상기 인스트럭션 큐로부터 복수의 인스트럭션을 수신하는 적어도 하나의 유효 어드레스(effective address: EA) 유닛, 및 저장 큐(store queue)를 포함한다. 저장 큐는 번역 유닛, 적어도 하나의 실행 유닛, 및 적어도 하나의 EA 유닛에 결합된다. 저장 큐는 복수의 인스트럭션 각각의 완료 이전에 적어도 하나의 실행 유닛으로부터 복수의 인스트럭션 각각에 관련되는 데이터 및 실어드레스(real address)를 수신한다.
이렇게 함으로써, 종래 시스템과 관련된 병목 현상, 즉 인스트럭션 유닛에 의해 디스패치될 수 있는 인스트럭션의 최대 개수는 감소된다.
본 발명의 실시예에 따르면, 완료 테이블(completion table)에 대기(queue up)되는 저장 인스트럭션이 신속하게 완료되도록 하는 슈퍼스칼라 프로세서에 사용하는 회로를 제공한다. 본 발명의 이러한 실시예에 따르면, 저장 인스트럭션용 데이터를 저장하는 데이터 큐가 제공된다. 저장 인스트럭션이 실행된 후, 저장 인스트럭션의 유효 주소는 사용 가능(available)하며, 상기 회로는 범용 레지스터(GPR) 또는 재명명 레지스터(rename register)로부터의 저장 인스트럭션에 의해 요구되는 데이터의 위치를 결정한다. 저장 인스트럭션에 의해 요구되는 데이터를 최초에 발생시켰던 인스트럭션이 성공적으로 완료된 경우, 상기 데이터는 구조화되어 저장될 수 있는데, 즉, 상기 인스트럭션이 고정 소수점 동작 또는 부동 소수점 동작이냐에따라 범용 레지스터 또는 부동 소수점 레지스터(FPR) 내에서 구조화되어 저장 될 수 있다. 본 발명의 설명 목적 상, 고정 소수점 인스트럭션을 가정하기로 한다. 본 기술 분야의 당업자라면 본 발명이 부동 소수점 인스트럭션으로 용이하게 확장될 수 있다는 점을 이해할 것이다.
저장 인스트럭션에 의해 요구된 데이터를 발생한 인스트럭션이 아직 완료되지 않았지만, 관련 실행 유닛에 의해 최종 결과까지 처리된 경우, 상기 데이터는 유효(valid)로 재명명 레지스터에 저장될 수 있다. 인스트럭션이 아직 저장 인스트럭션에 의해 요구된 데이터를 발생시키지 않은 경우, 재명명 레지스터는 프로세서에 의해 무효(invalid)로 표시될 수 있는 데이터 수신을 회피한다.
저장 인스트럭션에 의해 요구되는 데이터가 범용 구조 레지스터 또는 유효 재명명 레지스터(valid rename register)에서 사용 가능한 경우, 데이터는 데이터 큐 내의 엔트리로 전송된다. 판독 포트(Read ports)가 재명명 레지스터에 제공되어 이러한 동작을 용이하게 한다. 본 발명의 실시예에서, 완료는 프로그램 순서대로 발생하여야 하므로, 데이터를 데이터 큐 내로 전송하는 단계는 완료 큐 포인터(completion queue pointer)가 후속 인스트럭션이 완료되어 저장 인스트럭션을 지정하기 훨씬 이전에 발생할 수 있다. 이것은 특히 완료가 저장 인스트럭션 이전에 발행된 인스트럭션에 의해 스톨된 경우에 발생한다. 저장 인스트럭션이 완료될 시점에서, 저장 인스트럭션에 의해 요구된 데이터는 이미 데이터 큐 내에 있어 캐쉬로 전송될 수 있으므로, 종래 프로세서에서와 같은 범용 구조 레지스터로의 액세스 요구는 필요하지 않다. 이것은 저장 인스트럭션들이 완료윈도우(completion window) 내에서 자신들의 차례를 기다리는 동안 데이터가 "사전로드(preload)"되어 범용 구조 레지스터 포트에서 병목 현상이 없으므로 복수의 저장 인스트럭션이 단일 클록 사이클에서 완료될 수 있게 한다. 물론, 이것은 범용 구조 레지스터 상에 단일 판독 포트만을 갖는 종래의 프로세서에서는 불가능하다. 보다 많은 포트가 추가될 수 있지만, 이것은 추가적인 설계, 추가적인 칩의 크기 및 추가적인 복잡성이 요구될 수 있다. 본 발명의 다른 목적 및 장점은 첨부된 본 발명의 상세한 설명을 통하여 본 기술 분야의 당업자에게 명백해질 것이다.
본 발명의 특징의 상기 및 기타 장점은 이하의 상세한 설명 및 첨부된 도면을 참조하여 보다 완전하게 이해될 수 있다.
도 1은 본 발명에 따른 컴퓨터 시스템의 블록도.
도 2는 프로세싱 시스템 내에서 저장 인스트럭션을 완료하는 종래의 시스템을 예시한 도면.
도 3은 도 2의 데이터 플로우의 동작을 예시하는 타이밍도.
도 4는 단일 로드/저장 유닛 로직(LSU)이 범용 구조 레지스터(GPR) 및 부동 소수점 구조 레지서터(FPR)를 액세스하는 본 발명에 따라 복수의 저장 인스트럭션을 완료하는 데이터 플로우의 제1 실시예를 예시하는 도면.
도 5는 본 발명에 따라 저장 인스트럭션을 완료하는 데이터 플로우를 예시하는 플로우 챠트.
도 6은 도 4의 데이터 플로우의 동작을 예시하는 타이밍도.
도 7은 2중(dual) 로드/저장 유닛 로직이 범용 구조 레지스터 및 부동 소수점 구조 레지스터를 액세스하는 본 발명에 따라 복수의 저장 인스트럭션을 완료하는 데이터 플로우의 제2 실시예를 예시하는 도면.
도 8은 도 7의 데이터 플로우의 동작을 예시하는 타이밍도.
도 9는 범용 구조 레지스터, 부동 소수점 구조 레지스터 및 재명명 레지스터를 액세스하는 본 발명의 실시예에 따른 프로세서를 예시하는 블록도.
도 10a 내지 도 10f는 도 9의 프로세서에 도시된 실시예에서 사용되는 다양한 큐의 논리 콘텐트(logical content)를 도시한 도면.
도 11a 내지 도 11b는 본 발명의 실시예에 따른 프로세서의 동작을 예시하는 플로우 챠트.
도 12는 본 발명의 실시예에 따른 프로세서의 동작을 예시하는 타이밍도.
본 발명은 슈퍼스칼라 프로세서 내에서 완료될 수 있는 저장 인스트럭션의 개수를 증가시키는 것에 관한 것으로 디스패치 스톨(dispatch stall)을 감소시킨다. 이하의 상세한 설명은 본 기술 분야의 당업자가 본 발명을 만들고 사용할 수 있도록 제공되며 특허 출원 및 특허 등록 요건을 충족시키도록 제공된다. 본 기술 분야의 당업자는 본 명세서에서 기술되는 바람직한 실시예 및 일반적인 원리 및 특징에 대해 다양한 변경이 이루어질 수 있다는 것을 명백히 이해할 것이다.
도 1은 본 발명에 따라 정보를 처리하는 프로세서 시스템(10)의 블록도이다. 바람직한 실시예에서, 프로세서(10)는 IBM Corporation, Austin, TX의 PowerPC와 같은 단일 집적 회로 슈퍼스칼라 마이크로프로세서이다. 따라서, 이하에서 논의되는 바와 같이, 프로세서(10)는 다양한 유닛, 레지스터, 버퍼, 메모리, 및 기타 섹션을 포함하는데, 이러한 것들은 집적회로로 형성된다. 또한, 바람직한 실시예에서, 프로세서(10)는 RISC 기술에 따라 동작한다. 도 1에 도시된 바와 같이, 시스템 버스(11)는 프로세서(10)의 버스 인터페이스 유닛(BIU, 12)에 접속된다. BIU(12)는 프로세서(10) 및 시스템 버스(11) 간의 정보 전송을 제어한다. BIU(12)는 프로세서(10)의 인스트럭션 캐쉬(14: instruction cache) 및 데이터 캐쉬(16: data cache)에 접속된다. 인스트럭션 캐쉬(14)는 시퀀서 유닛(18)으로 인스트럭션을 출력한다. 인스트럭션 캐쉬(14)로부터의 인스트럭션에 응답하여, 시퀀서 유닛(18)은 프로세서(10)의 기타 실행 회로에 선택적으로 인스트럭션을 출력한다.
디스패치 유닛(46) 및 완료 유닛(48)으로 이루어진 실행 유닛을 포함하는 시퀀서 유닛(18) 이외에, 바람직한 실시예에서 프로세서(10)의 실행 회로는 복수의 실행 유닛, 즉 브랜치 유닛(branch unit, 20), 고정 소수점 유닛 A(FXUA, 22), 고정 소수점 유닛 B(FXUB, 24), 복소 고정 소수점 유닛(CFXU, 26), 로드/저장 유닛(LSU, 28) 및 부동 소수점 유닛(FPU, 30)을 포함한다. FXUA(22), FXUB(24), CFXU(26) 및 LSU(28)은 범용 구조 레지스터(general purpose architectural register: GPR, 32) 및 고정 소수점 재명명 버퍼(34)로부터 나오는 자신들의 소스 오퍼랜드 정보(source operand information)를 입력한다. 또한, FXUA(22) 및 FXUB(24)는 캐리 비트(CA) 레지스터(42)로부터 "캐리 비트"를 입력한다. FXUA(22), FXUB(24), CFXU(26) 및 LSU(28)은 고정 소수점 재명명 버퍼(34) 내의 선택된 엔트리용으로 자신들의 저장용 동작 결과(목적지(destination) 오퍼랜드 정보)를 출력한다. 또한, CFXU(26)는 특수 목적 레지스터(SPR, 40)과 양방향으로 소스 오퍼랜드 정보 및 목적지 오퍼랜드 정보를 입출력한다.
FPU(30)는 부동 소수점 구조 레지스터(FPR, 36) 및 부동 소수점 재명명 버퍼(38)로부터 자신의 소스 오퍼랜드 정보를 입력한다. FPU(30)는 부동 소수점 재명명 버퍼(38) 내의 선택된 엔트리에서 자신의 저장 동작의 결과(목적지 오퍼랜드 정보)를 출력한다.
시퀀서 유닛(18)은 GPR(32) 및 FPR(36)과 양방향으로 정보를 입출력한다. 시퀀서 유닛(18)으로부터, 브랜치 유닛(20)은 인스트럭션 및 프로세서(10)의 현재 상태를 표시하는 신호를 입력한다. 이러한 인스트럭션 및 신호에 응답하여, 브랜치 유닛(20)은 프로세서(10)에 의해 실행되는 인스트럭션의 시퀀스를 저장하는 적절한 메모리 어드레스를 표시하는 신호를 (시퀀서 유닛(18)으로) 출력한다. 브랜치 유닛(20)으로부터의 신호에 응답하여, 시퀀서 유닛(18)은 인스트럭션 캐쉬(14)로부터 표시된 인스트럭션 시퀀스를 입력한다. 하나 이상의 인스트럭션 시퀀스가 인스트럭션 캐쉬(14) 내에 저장되지 않은 경우, 인스트럭션 캐쉬(14)는 시스템 버스(11)에 접속된 시스템 메모리(39)로부터의 이러한 인스트럭션을 (BIU(12) 및 시스템 버스(11)를 통하여) 입력한다.
인스트럭션 캐쉬(14)로부터의 인스트럭션 입력에 응답하여, 시퀀서 유닛(18)은 디스패치 유닛(46)을 통하여 실행 유닛(20, 22, 24, 26, 28 및 30) 중에서 선택된 유닛들로 선택적으로 인스트럭션을 디스패치한다. 각 실행 유닛은 인스트럭션의 특정 클래스 중 하나 이상의 인스트럭션을 실행한다. 예를 들어, FXUA(22) 및 FXUB(24)는 가산, 감산, AND 연산, OR 연산, XOR 연산과 같은 소스 오퍼랜드에 대한 고정 소수점 수학 연산의 제1 클래스를 실행한다. CFXU(26)는 고정 소수점 곱셈 및 나눗셈과 같은 소스 오퍼랜드에 대한 고정 소수점 연산의 제2 클래스를 실행한다. FPU(30)는 부동 소수점 곱셈 및 나눗셈과 같은 소스 오퍼랜드에 대한 부동 소수점 연산을 실행한다.
프로세서(10)는 실행 유닛(20, 22, 24, 26, 28 및 30) 중 여러 유닛에서 동시에 복수 인스트럭션을 처리함으로써 고성능을 달성한다. 따라서, 각 인스트럭션은 스테이지의 시퀀스로서 처리되고, 다른 인스트럭션의 스테이지와 병렬로 실행 가능하다. 이러한 기술은 "파이프라인화(pipelining)"라고 불린다. 바람직한 실시예의 중요한 특징에서, 인스트럭션은 통상 6개의 스테이지, 이름하여 페치(fetch), 디코드, 디스패치, 실행, 완료 및 기록(writeback) 스테이지에서 처리된다.
바람직한 실시예에서, 각 인스트럭션은 인스트럭션 처리 스테이지의 각각을 완료하기 위해 하나의 머신 사이클을 필요로 한다. 그럼에도 불구하고, 일부 인스트럭션(예를 들어, CFXU(26)에 의해 실행되는 복소 고정 소수점 인스트럭션)은 하나 이상의 사이클을 필요로 할 수 있다. 따라서, 선행 인스트럭션(preceding instructions)의 완료에 필요한 시간의 변화에 응답하여 특정 인스트럭션의 실행 및 완료 스테이지 간에 가변적인 지연(variable delay)이 발생할 수 있다.
로드 인스트럭션에 응답하여, LSU(28)는 데이터 캐쉬(16)로부터의 정보를 입력하고 이러한 정보를 재명명 버퍼(34 및 38) 중에서 선택된 버퍼에 카피한다. 이러한 정보가 데이터 캐쉬(16)에 저장되지 않은 경우, 데이터 캐쉬(16)는 이러한 정보를 (BIU(12) 및 시스템 버스(11)를 통하여) 시스템 버스(11)에 접속된 시스템 메모리(39)로부터 입력한다. 또한, 데이터 캐쉬(16)는 정보를 (BIU(12) 및 시스템 버스(11)를 통하여) 데이터 캐쉬(16)로부터 시스템 버스(11)에 접속되는 시스템 메모리(39)로 출력할 수 있다. 저장 인스트럭션에 응답하여, LSU(28)는 GPR(32), FPR(36), 재명명 레지스터(34 및 38) 중에서 선택된 레지스터로부터 정보를 입력하고 이러한 정보를 데이터 캐쉬(16) 또는 메모리로 복사한다.
실행 유닛들, 예를 들어, FXUA(22), FXUB(24), 재명명 버퍼(34), 및 디스패치 유닛(46)들 간의 상호작용(interaction)의 일례로서, "가산 c,a,b"라는 인스트럭션이 디스패치 유닛(46)으로부터 FXUA(22)로 디스패치된다. 본 기술 분야의 당업자라면 디스패치 유닛(46)이 FXUA(22)에 오퍼랜드 "a" 및 "b"용 태그를 제공하여 FXUA(22)가 오퍼랜드용 태그를 검색하여야 할 위치를 통지(tell)한다는 점을 잘 이해할 수 있을 것이다. 예를 들어, 6개의 재명명 버퍼를 갖는 시스템에 있어서, 디스패치 유닛(46)은 재명명 버퍼 1 내에 위치되는 "a"용 오퍼랜드를 6 비트 태그 100000으로 적절하게 표지(tag)할 수 있다. 다음에 태그 010000은 오퍼랜드 "b"가 재명명 버퍼 2 내에 위치하는 것을 표시하는데 적절하게 사용될 수 있다. FXUA(22)는 GPR(32) 내로 기록하지 않으므로, 디스패치 유닛(46)은 "가산" 인스트럭션의 결과가 재명명 버퍼 3에 위치되도록 하는 001000과 같은 동작의 타겟(target)용 재명명 버퍼 태그를 사용하여야 한다.
상술한 바와 같이, 종래 시스템에 관련된 하나의 문제는 단 하나의 저장 인스트럭션만이 하나의 사이클에서 완료될 수 있다는 점이다. 종래 시스템의 이러한문제를 예시하기 위해 첨부된 상세한 설명과 관련하여 도 2를 참조한다.
도 2는 프로세싱 시스템 내에서 저장 인스트럭션을 완료하는 종래 시스템이다. 이러한 실시예에서, 인스트럭션 유닛(102)은 디스패치 유닛(103) 및 완료 유닛(105)을 포함한다. 인스트럭션 유닛(102)은 인스트럭션 캐쉬(104)로부터의 인스트럭션을 디스패치 유닛(103) 내로 수신한다. 다음에 디스패치 유닛(103)은 인스트럭션 캐쉬(104)로부터 수신된 저장 인스트럭션을 로드/저장 유닛(LDST, 106)으로 제공한다. 또한 디스패치 유닛(103)은 완료 유닛(105)으로 저장 인스트럭션을 전송한다. 로드/저장 유닛(106) 내에 이전 인스트럭션들이 존재하는 경우, 저장 인스트럭션은 인스트럭션 큐(108)로 제공된다. 로드/저장 유닛(106) 내에 이전 인스트럭션들이 존재하지 않는 경우, 인스트럭션 큐(108)는 바이패스되고 저장 인스트럭션은 직접 유효 어드레스(EA) 유닛(110)으로 제공될 수 있다. 각각의 경우에, EA 유닛(110)은 특정 인스트럭션용 어드레스 정보를 수신한다.
유효 어드레스의 제어 인스트럭션이 저장 큐(130)의 최종 큐(finish queue: FQ, 112)로 제공되며, 동시에 어드레스에 관한 정보는 번역 유닛(114)으로 제공된다. 번역 유닛(114)은 EA 정보를 실어드레스로 번역한 후 이 실어드레스를 FQ(112)로 제공한다. 다음에 FQ(112)는 최종 유효 신호(finish valid signal)를 완료 유닛(105)으로 제공한다. 다음에 완료 유닛(105)은 완료 유효 신호(complete valid signal)를 FQ(112)로 제공한다. 다음에 FQ(112)는 어드레스들을 고정 소수점 유닛(FXU, 116) 및 부동 소수점 유닛(FPU, 118)으로 전송한다. 다음에 FXU 및 FPU는 상기 주소들과 관련된 데이터를 완료 큐(completion queue: CQ)(120)에 제공한다. 또한 FQ(112)는 RA 정보를 CQ(120)에 제공한다. 다음에 CQ(120)는 저장 인스트럭션을 데이터 캐쉬(22)에 제공할 수 있다.
도 3을 참조하면, 고정 실행(FXD) 유닛(116)의 복수의 저장 인스트럭션 1-4에 대한 데이터 플로우의 타이밍도가 도시되어 있다. 이러한 실시예에서, 인스트럭션 1은 사이클 1에서 디스패치되고, 인스트럭션 2는 사이클 2에서 디스패치되며, 인스트럭션 3은 사이클 3에서 디스패치되고, 인스트럭션 4는 사이클 4에서 디스패치되며 이는 도면 부호(202)로 도시된다. 그 후에, 도면 부호(204)로 도시된 바와 같이, 로드/저장 유닛(106)은 사이클 2의 전반부(first half)에서 인스트럭션 1의 유효 주소(EA 1)를 실행하고, 사이클 3의 전반부에서 인스트럭션 2의 유효 주소(EA 2)를 실행하며, 사이클 4의 전반부에서 인스트럭션 3의 유효 주소(EA 3)를 실행하고, 사이클 5의 전반부에서 인스트럭션 4의 유효 주소(EA 4)를 실행한다. 인스트럭션 1-4의 번역된 주소의 액세스가 도면 부호(206)로 도시된다. 사이클 2의 후반부(second half) 및 사이클 3의 전반부 사이에서 인스트럭션 1의 어드레스를 액세스하고, 사이클 3의 후반부 및 사이클 4의 전반부 사이에서 인스트럭션 2의 어드레스를 액세스하며, 사이클 4의 후반부 및 사이클 5의 전반부 사이에서 인스트럭션 3의 어드레스를 액세스하고, 사이클 5의 후반부 및 사이클 6의 전반부 사이에서 인스트럭션 4의 어드레스를 액세스한다.
다음에 실어드레스가 번역 유닛(114)으로부터 제공되는데, 이는 도면 부호(208)로 도시되어 있다. 인스트럭션 1의 실어드레스(RA1)는 사이클 3의 후반부 동안에 제공되고, 인스트럭션 2의 실어드레스(RA2)는 사이클 4의 후반부 동안에제공되며, 인스트럭션 3의 실어드레스(RA3)는 사이클 5의 후반부 동안에 제공되고, 인스트럭션 4의 실어드레스(RA4)는 사이클 6의 후반부 동안에 제공된다.
이러한 실시예에서, 상기한 바와 같은 종료 큐(112)는 인스트럭션 1-4에 대한 실어드레스 값과 함께 사이클 4-7 동안 각각 로드되는데, 이것이 도면 부호(210)로 도시된다. 인스트럭션 1-4는 사이클 4-7에서 종료(finish)될 수 있는데, 이는 도면 부호(212)로 도시된다. 인스트럭션 1-4가 완료될 수 있는 경우에도, 구조화된 레지스터 파일 상의 단일 판독 포트로 인하여 인스트럭션들 간에 구조적 의존성이 존재하는데, 이러한 구조적 의존성은 프로세서의 성능을 제한하며, 이는 도면 부호(213)로 도시된다. 즉, 인스트럭션 1은 사이클 5에서 완료될 수 있으며, 인스트럭션 2는 인스트럭션 1이 완료된 경우 사이클 6에서만 완료될 수 있고, 인스트럭션 3은 인스트럭션 1 및 2가 완료된 경우 사이클 7에서만 완료될 수 있다. 최종적으로, 인스트럭션 4는 사이클 8에서 인스트럭션 1-3이 완료된 경우에만 완료될 수 있다.
통상 도면 부호(214)에 도시된 스톨 조건 이후 및 인스트럭션 완료 유닛(105)이 충만(full)된 경우에, 도면 부호(216)로 도시된 사이클 n+1에서 시작하는 인스트럭션 1-4는 상술한 구조적 의존성으로 인하여 동시에 종료될 수 있다. 이것은 사이클 n+1 내지 사이클 n+4 동안 인스트럭션 1-4에 대한 완료 신호를 초기화하는 완료 유닛(105)을 통하여 각각 달성된다. 따라서, 고정 유닛 범용 레지스터(GPR)가 액세스되어 도면 부호(218)로 도시된 사이클 n+1 내지 사이클 n+4에서 인스트럭션 1-4에 대한 데이터를 각각 획득할 수 있다. 또한 각 인스트럭션에 대한 데이터 유효 신호가 사이클 n+1 내지 사이클 n+4에서 각각 제공될 수 있는데, 이는 도면 부호(220)로 도시되어 있다.
그 다음에, 완료된 저장 큐에는 도면 부호(222)로 도시된 인스트럭션 1-4가 로드된다. 인스트럭션 1은 사이클 n+2에서 완료된 저장 큐(130)에 로드된다. 인스트럭션 2는 사이클 n+3에서 완료된 저장 큐(130)에 로드된다. 인스트럭션 3은 사이클 n+4에서 완료된 저장 큐(130)에 로드된다. 인스트럭션 4는 사이클 n+5에서 완료된 저장 큐(130)에 로드된다. 다음에 도면 부호(224)로 도시된 인스트럭션 1-4에 대한 데이터는 인스트럭션 유닛(102)의 사이클 n+2 내지 사이클 n+5 동안 한번에 하나의 인스트럭션을 각각 데이터 캐쉬로 전송된다.
프로세서가 자신의 한계 즉, 미해결 인스트럭션(outstanding instructions)의 최대 개수에 도달한 경우, 사이클 N+2에서 단지 1개의 인스트럭션만이 디스패치될 수 있다. 또한 이것은 사이클 N+3 내지 N+6에 적용된다. 따라서, 도면 부호(226)로 도시된 인스트럭션 5-8은 완료 유닛(105)이 충만되었으므로 순차적으로 디스패치되어야 한다. 따라서, 상기 디스패치 시간의 이러한 손실(penalty)은 프로세서의 전체 성능에 영향을 준다.
이러한 데이터 플로우와 관련된 문제는 상기 최종 큐/완료 큐(112, 120)의 상호작용에 의해 발생하며, 완료 유닛(105)이 충만한 상태에서 디스패치 스톨이 발생하는 경우 인스트럭션의 디스패치는 심각하게 지연된다. 이러한 문제를 극복하기 위한 종래의 접근 방법은 실행 유닛에 추가적인 포트를 부가하는 것이다. 이러한 접근 방법은 추가 비용을 발생시키고 시스템을 복잡하게 한다. 따라서, 디스패치 스톨이 발생한 다음에 복수의 저장 인스트럭션을 완료함으로써 프로세서의 전체 성능을 개선하는 공지된 접근 방법보다 간단한 방법 및 시스템이 필요하다.
본 발명에 따라 예시된 시스템 및 방법은 스톨 조건이 발생하고 완료 버퍼가 충만된 후에 복수의 저장 인스트럭션을 완료함으로써 프로세서의 성능을 상당히 개선한다. 또한, 완료 버퍼는 종래 프로세서만큼 빠르게 충만되지 않는다. 본 발명에서, 저장 큐는 최종 큐 및 완료 큐의 조합이 아니라 단일 큐이다. 또한, 저장 인스트럭션에 관련된 데이터가 인스트럭션의 완료 이후가 아니라 인스트럭션의 완료 이전에 액세스된다. 다음에 저장 인스트럭션은 다음의 2가지 조건 중 하나가 만족되면 종료될 수 있는데, 이러한 조건은 실어드레스 및 데이터가 저장 큐에 로드되거나, 또는 실어드레스는 저장 큐에 로드되고 데이터는 저장 큐로 전송 중인 경우이다. 미리 데이터를 액세스함으로써, 복수의 저장 인스트럭션이 실질적으로 동시에 종료될 수 있다. 따라서, 완료 버퍼가 충만되고 디스패치가 스톨된 후 복수 인스트럭션이 디스패치될 수 있다. 이렇게 함으로써, 복수의 저장 인스트럭션이 동시에 완료될 수 있도록 하며 따라서 완료 버퍼 내의 엔트리들을 자유롭게 함으로써 인스트럭션 디스패치 지연을 상당히 감소시키는 시스템이 제공된다.
이하의 설명에서 본 발명을 보다 상세하게 기술한다. 도 4는 본 발명에 따라 사이클마다 단일 저장 인스트럭션을 실행하는 저장 인스트럭션 데이터 플로우의 제1 실시예이다. 도 4에는 도 2에 도시된 요소와 동일한 몇 개의 요소들이 있다. 이러한 요소들은 도 2의 요소와 동일한 도면 부호가 부여되었지만, 일부 중요한 차이점이 있다. 첫 번째는 로드/저장 유닛(306)의 저장 큐(312)가 최종 큐 및 완료큐의 조합이 아니라 단일 큐라는 점이다. 이러한 배치에서, 완료 유닛(105)은 저장 인스트럭션을 완료하고, 완료 시점에서 저장 큐(312)는 적절한 엔트리들을 표시한다. 바람직한 실시예에서, 저장 큐(312)는 16 엔트리 깊이(deep)0를 갖는다. 즉, 16개의 저장 인스트럭션이 저장 큐(312)에 저장될 수 있다. 또한, 바람직한 실시예에서, 각 엔트리의 한 비트가 인스트럭션 유닛(102)으로부터의 완료 신호에 따라 액티브 상태로 된다. 또한, 이러한 데이터 플로우의 동작은 도 2의 저장 인스트럭션 데이터플로우에 대해 기술한 것과는 다르다. 상기한 바와 같이, 데이터는 저장 인스트럭션이 완료되기 전에 액세스된다. 저장 인스트럭션은 다음의 2가지 조건: (1) 실어드레스 및 데이터가 저장 큐에 로드되거나, 또는 (2) 실 어드레스는 저장 큐에 로드되고 데이터는 저장 큐로 전송되는 경우 중 어느 하나가 만족되는 조건에 종료된다.
이러한 차이점을 보다 상세하게 기술하기 위해, 도 4의 데이터 플로우의 동작을 예시하는 도 5의 플로우챠트를 참조한다.
먼저, 단계(402)에서 복수의 저장 인스트럭션이 디스패치 유닛(103)으로부터 로드/저장 유닛(306) 내의 유효 어드레스 유효 어드레스 유닛(310)으로 제공된다. 단계(404)에서, 유효 어드레스 유닛(310)은 제어 정보를 저장 큐(312)로 제공한다. 단계(406)에서, 유효 어드레스 유닛(310)은 어드레스 정보를 번역 유닛(114)으로 제공한다. 단계(408)에서, 복수의 저장 인스트럭션에 관련되는 실어드레스(RA)는 번역 유닛(114)으로부터 판독되고, 복수의 저장 인스트럭션에 관련되는 데이터는 고정 소수점 유닛(FXU,116)으로부터 판독된다. 단계(409)에서, 디스패치 스톨이발생한 후 완료 유닛이 충만된다.
단계(410)에서, 완료 유닛(105')은 저장 큐(312)로부터 수신된 종료 유효 신호(finish valid signal)에 따라 자신의 완료 윈도우(completion window) 내에서 복수의 저장 인스트럭션을 완료한다. 단계(412)에서, 저장 큐(312)는 완료된 자신의 엔트리들을 표시한다. 그 다음에, 단계(416)에서 동일한 개수의 새로운 인스트럭션이 디스패치 유닛(103')으로부터 디스패치될 수 있으며, 단계(418)에서 새로운 인스트럭션이 완료 유닛(105')으로 제공될 수 있다. 이렇게 함으로써, 본 발명에 의해 디스패치 스톨이 상당히 감소된다.
본 발명의 동작을 보다 상세하게 설명하고 도 2의 데이터 플로우의 타이밍도와 대비하기 위하여, 도 3과 관련된 도 6을 참조한다. 도 6은 도 4의 데이터 플로우의 타이밍도이다. 도 6의 실시예에서, 도면 부호(502)로 도시되는 바와 같이 도 3의 도면 부호(202)와 동일한 방식으로 인스트럭션 1은 사이클 1에서 디스패치되고, 인스트럭션 2는 사이클 2에서 디스패치되며, 인스트럭션 3은 사이클 3에서 디스패치되고, 인스트럭션 4는 사이클 4에서 디스패치된다. 그 다음에, 도 3의 도면 부호(204)로 도시된 바와 마찬가지로, 로드 저장 유닛은 사이클 2의 전반부(first half)에서 인스트럭션 1의 유효 어드레스 (EA1)를, 사이클 3의 전반부에서 인스트럭션 2의 유효 어드레스 (EA2)를, 사이클 4의 전반부에서 인스트럭션 3의 유효 어드레스 (EA3)를, 사이클 5의 전반부에서 인스트럭션 4의 유효 어드레스 (EA4)를 실행하는데, 이는 도 6의 도면 부호(504)로 도시된다.
그 다음에, 인스트럭션 1-4의 번역용 캐쉬 번역 액세스(cache translationaccess)는 도 3의 도면 부호(206)로 도시된 바와 마찬가지 방식으로 발생한다. 도 6은 도면 부호(506)로 도시된 바와 같이 인스트럭션 1의 번역된 어드레스용 캐쉬에 대한 액세스는 사이클 2의 후반부 및 사이클 3의 전반부 사이에서 발생하고, 인스트럭션 2의 번역된 어드레스용 캐쉬에 대한 액세스는 사이클 3의 후반부 및 사이클 4의 전반부 사이에서 발생하며, 인스트럭션 3의 번역된 어드레스용 캐쉬에 대한 액세스는 사이클 4의 후반부 및 사이클 5의 전반부 사이에서 발생하고, 인스트럭션 4의 번역된 어드레스용 캐쉬에 대한 액세스는 사이클 5의 후반부 및 사이클 6의 전반부 사이에서 발생된다.
그러나 그 다음에는 도 3과는 달리 데이터가 사용 가능한 경우 도면 부호(508)로 도시된 바와 같이 구조화된 레지스터 파일(GPR)이 액세스된다. 인스트럭션 1에 대한 데이터가 사이클 3에서 액세스되고, 인스트럭션 2에 대한 데이터가 사이클 4에서 액세스되며, 인스트럭션 3에 대한 데이터가 사이클 5에서 액세스되고, 인스트럭션 4에 대한 데이터가 사이클 6에서 액세스된다.
다음에, 실어드레스(RA1-RA4)용 데이터는 번역 유닛(114)으로부터 제공되고 데이터 유효 신호는 고정 소숫점 유닛(116')으로부터 저장 큐(312)로 제공되며, 이는 도면 부호(510 및 512)에 각각 도시되어 있다. 이러한 실시예에서, 인스트럭션 1에 대한 데이터 유효 신호는 사이클 4 동안 제공되고, 인스트럭션 2에 대한 데이터 유효 신호는 사이클 5 동안 제공되며, 인스트럭션 3에 대한 데이터 유효 신호는 사이클 6 동안 제공되고, 인스트럭션 4에 대한 데이터 유효 신호는 사이클 7 동안 제공된다. RA1은 사이클 3의 후반부 동안 제공되고, RA2는 사이클 4의 후반부 동안 제공되며, RA3은 사이클 5의 후반부 동안 제공되고, RA4는 사이클 6의 후반부 동안 제공된다.
이러한 실시예에서, 저장 큐(312)에는 사이클 4-7 동안 각각 인스트럭션 1-4에 대한 실어드레스 값이 로드되는데, 이는 도면 부호(514)로 도시되어 있다. 인스트럭션 1-4 중 각 인스트럭션에 대한 저장 큐 종료(store queue finish)는 저장 실어드레스(store real address)가 저장 큐(312)에 로드되는 동일한 사이클 동안 발생하는데, 이는 도면 부호(518)로 도시되고, 고정 소수점 유닛(116') 데이터 유효 신호가 제공되는데, 이는 도면 부호(510)에 도시되어 있다. 따라서, 저장 큐(312) 종료는 다음의 2가지 조건, 즉, (1) RA 및 에디터가 인스트럭션 1-4에 대한 저장 큐(312)에 로드되거나, 또는 (2) RA가 로드되고 데이터는 인스트럭션 1-4에 대한 저장 큐(312)내로 전송 중인 경우 중 어느 하나가 만족되면 발생할 수 있다. 다음에, 사이클 5-8 동안 인스트럭션 1-4에 대한 데이터는 저장 큐(312) 내로 각각 저장되는 것이 가능한 경우에는 저장 큐(312) 내로 각각 저장되는데, 이는 도면 부호(516)로 도시되어 있다.
도면 부호(521)로 도시된 스톨 조건 후에, 4개의 인스트럭션이 동시에 완료될 수 있으며, 이는 도면 부호(522)로 도시되어 잇다. 이것은 4개의 인스트럭션들이 순차적으로 완료되어야 하는 도 3의 시스템과는 현저히 다르다. 다음에 완료 유닛(105')은 사이클 n+1 동안 인스트럭션 1-4에 대한 완료 신호를 초기화시킨다. 또한, 모든 인스트럭션들이 완료된 것으로 표시되었으므로, 디스패치 유닛(103')은 인스트럭션 5-8을 도면 부호(524)로 도시된 동일한 시간(사이클 n+2)에서 디스패치할 수 있다.
프로세서가 자신의 한계, 즉, 사이클 N+2에 대한 미해결된 인스트럭션의 최대 개수에 도달한 경우 본 실시예는 사이클 N+2에서 사이클 당 4개의 인스트럭션이 디스패치될 수 있도록 하지만, 종래 기술은 하나의 인스트럭션만이 디스패치될 뿐이다.
도 7은 본 발명의 바람직한 실시예의 저장 인스트럭션의 데이터 플로우를 도시한다. 이러한 데이터 플로우는 사이클 당 2개까지의 인스트럭션을 지원한다. 요소들은 도 5의 요소와 동일하다. 공통 요소들은 동일한 도면 부호가 부여되지만 일부 다른 점이 있다. 그러나, 도시된 바와 같이 2개의 EA 유닛(310a 및 310b)이 있다. 또한 고정 소수점 유닛(116')용으로 2개의 포트가 있다. 고정 소수점 유닛(116")에 2개의 포트가 있으므로, 번역 유닛(114)은 각 포트에 번역 신호를 제공하고 저장 큐(312)는 각 포트에 종료 유효 신호를 제공한다.
도 8을 참조하면, 본 실시예에서 사이클 당 2개의 인스트럭션이 처리될 수 있으므로, 인스트럭션 1 및 인스트럭션 2는 사이클 1 동안 디스패치되고 인스트럭션 3 및 인스트럭션 4는 사이클 2 동안 디스패치되는데, 이는 도면 부호(602)로 도시되어 있다. 다음에, EA1 및 EA2의 로드/저장 실행은 사이클 2의 전반부에서 발생하고 EA3 및 EA4의 로드/저장 실행은 사이클 3의 전반부에서 발생하는데, 이는 도면 부호(604)로 도시되어 있다. 다음에, 캐쉬는 인스트럭션 1 및 인스트럭션 2의 번역된 어드레스를 위해 사이클 2의 후반부 및 사이클 3의 전반부 사이에서 액세스되고, 캐쉬는 인스트럭션 3 및 인스트럭션 4의 번역된 어드레스를 위해 사이클3의 후반부 및 사이클 4의 전반부 사이에서 액세스되는데, 이는 도면 부호(606)로 도시되어 있다.
다음에, 도면 부호(608)로 도시된 바와 같이 구조화된 레지스터 파일(GPR)이 액세스된다. 인스트럭션 1 및 인스트럭션 2에 대한 데이터가 사이클 3에서 액세스되고, 인스트럭션 3 및 인스트럭션 4에 대한 데이터가 사이클 4에서 액세스된다.
다음에, 실어드레스(RA1-RA4)용 데이터가 번역 유닛(114)으로부터 제공되고 인스트럭션 1-4에 대한 데이터 유효 신호가 저장 큐(312)로 제공되는데. 이는 도면 부호(610 및 612)로 각각 도시되어 있다. 이러한 실시예에서, 인스트럭션 1 및 인스트럭션 2에 대한 데이터 유효 신호가 사이클 4 동안 제공되고, 인스트럭션 3 및 인스트럭션 4에 대한 데이터 유효 신호가 사이클 5 동안 제공된다. RA1 및 RA2가 사이클 3의 후반부 동안 제공되고, RA3 및 RA4가 사이클 4의 후반부 동안 제공된다.
이러한 실시예에서, 저장 큐(312)에는 인스트럭션 1-4에 대한 실 어드레스 값이 사이클 4 및 사이클 5 동안 각각 로드되는데, 이는 도면 부호(614)로 도시되어 있다. 인스트럭션 1-4의 각각에 대한 저장 큐(312)의 종료는 저장 큐 실 어드레스가 로드되는 사이클과 동일한 사이클 동안 발생하는데, 이는 도면 부호(618)로 도시되어 있다. 다음에, 가능한 경우 인스트럭션 1-4에 대한 데이터가 사이클 5 및 사이클 6 동안 저장 큐(312) 내로 로드되는데, 이는 도면 부호(616)로 도시되어 있다.
도면 부호(622)로 도시된 스톨 조건 후에, 4개의 인스트럭션이 동시에 완료될 수 있으며, 이는 도면 부호(622)로 도시되어 있다. 다음에 인스트럭션 유닛(102)은 사이클 n+1 동안 인스트럭션 1-4용 완료 신호를 초기화시킨다. 또한, 모든 인스트럭션들이 완료된 것으로 표시되었으므로, 디스패치 유닛(103)은 도면 부호(624)로 도시된 동일한 시간(사이클 N+2)에서 인스트럭션 5-8을 디스패치할 수 있다.
프로세서가 자신의 한계, 즉, 사이클 N+2의 미해결된 인스트럭션의 최대 개수에 도달한 경우 4개까지의 인스트럭션이 디스패치될 수 있지만, 종래 기술은 단지 하나의 인스트럭션만이 디스패치될 수 있었다. 이것은 인스트럭션 8이 디스패치되는 경우에 3개의 사이클을 절약한다.
본 발명에 따른 시스템 및 방법에서, 복수의 저장 인스트럭션들이 함께 처리되므로 인스트럭션들이 함께 완료될 수 있고, 따라서 저장 인스트럭션을 완료하는 사이클의 개수가 상당히 감소한다. 인스트럭션 유닛(102')에 의해 디스패치될 수 있는 인스트럭션의 최대 개수의 병목 현상이 종래 시스템에서 요구되는 완료 큐 엔트리를 제거함으로써 완화되고, 따라서 인스트럭션 유닛(102')이 새로운 인스트럭션을 디스패치할 수 있게 된다.
도 9를 참조하면, 본 발명의 다른 실시예에 따라 디스패치 병목 현상을 감소시키는 회로(100)가 도시되어 있다. 이러한 실시예에서, 범용 구조 레지스터(GPR, 114) 및 재명명 레지스터(116)에는 범용 구조 레지스터(114) 및 재명명 레지스터(116)가 멀티플렉서(118)를 통하여 데이터 큐(DATAQ, 122)에 데이터를 전송할 수 있도록 하는 판독 포트가 제공된다. 또한, 회로(100)는 다양한 큐 내의특정 저장 인스트럭션에 관련된 어드레스 및 데이터를 정렬하는 회로(100)에 의해 사용되는 인스트럭션 태그를 저장하는 태그 큐(TAGQ, 104)를 포함한다. 태그 큐(104) 내의 각 필드는 n-비트 폭인 것이 바람직하며, 여기서 n은 충분한 개수의 태그가 할당되어 프로세서 내에서 모든 저장 인스트럭션 보류(pending)를 고유하게 식별할 수 있도록 선택된다. 또한 태그 큐 내의 각 필드는 태그 필드에 포함된 데이터가 유효 보류 인스트럭션(valid pending instruction)인지의 여부를 표시하는 유효 비트(valid bit)에 결합된다. 유효 비트는 인스트럭션이 로드/저장 유닛 로직(102)에 의해 실행되고 태그가 태그 큐(104) 내의 엔트리 내로 전송될 때를 처음으로 요구된다. 저장 인스트럭션에 대응하는 데이터가 데이터 큐(122)로부터 캐쉬 내로 전송된 후에는, 이하에서 보다 상세하게 기술되는 바와 같이, 유효 비트는 요구되지 않는다. 유효 비트가 요구되지 않은 경우, 엔트리는 순차적인 저장 인스트럭션에 의해 재사용 가능하다. 도 10a는 태그 큐(104) 내의 개별 엔트리를 도시한다.
또한 회로(100)는 특정 저장 인스트럭션에 의해 요구되는 데이터를 포함하는 특정 범용 구조 레지스터 또는 재명명 레지스터 파일 엔트리를 선택하는 정보를 포함하는 포인터 큐(PTRQ, 106)를 포함한다. 도 10b는 예시적인 포인터 큐 엔트리 내에 포함되는 필드를 도시한다. 보다 상세하게는, 저장 포인터 큐(106)는 데이터가 저장 데이터 큐(122)의 적절한 엔트리 내로 로드되는 것을 보장하는 메커니즘이다. 데이터가 FXU 실행 유닛 또는 FPU 실행 유닛으로부터 순서에 무관하게 복귀될 수 있으므로, 저장 포인터 큐(106)가 필수적이다. 일 실시예에서, 저장 포인터큐(106)는 n-깊이(deep) 푸시 다운 큐(push down queue)이다. 하부의 2개 엔트리는 로드/저장유닛 논리(102)에 의해 체크되어 FXU 실행 유닛 또는 FPU 실행 유닛으로부터 데이터를 요구한다. 구조화된 레지스터 파일 포인터는 FXU(GPR) 레지스터 파일 또는 FPU(FPR) 레지스터 파일을 어드레스하는데 사용되지만, 재명명 레지스터 파일 포인터는 FXU(재명명) 레지스터 파일 또는 FPU(재명명) 레지스터 파일을 어드레스하는데 사용된다. 구조화된 레지스터 파일 및 재명명 레지스터 파일은 모두 병렬 방식으로 액세스된다. 데이터 큐(122)로 전송되는 데이터는 관련 포인터 큐 엔트리 내의 재명명/구조화(R/A) 비트에 의해 결정된다. 재명명/구조화 비트가 설정된 경우 구조화된 카피(architected copy)가 사용되지만, 재명명/구조화 비트가 설정되지 않은 경우 재명명된 데이터가 멀티플렉서(118)에 의해 선택된다. 재명명/구조화 비트의 초기값은 디스패치 시간에 재명명 유닛으로부터 할당되고 인스트럭션에 따라 로드/저장 실행 유닛으로 전송된다. 이것은 저장 인스트럭션용 소스 데이터의 위치를 저장 포인터가 데이터를 액세스할 수 있기 전에 재명명 레지스터(116)로부터 구조화된 레지스터 파일로 이동시킬 수 있으므로, 로드/저장 유닛로직(102)에 의해 유지되어야 하는 다이내믹 비트(dynamic bit)이다. 다시 말해, 초기에 저장 인스트럭션은 재명명 레지스터 내에 존재하도록(R/A=0) 결정되지만, 저장 포인터 큐(106)가 재명명 레지스터(116)로부터 데이터를 액세스할 수 있기 전에, 인스트럭션 유닛은 저장 인스트럭션용 소스인 GPR을 변경하는 인스트럭션을 완료한다. 이것은 재명명 데이터가 구조화된 레지스터 파일 내로 로드되도록 한다. 그 후 로드/저장 유닛 조직(102)은 관련 포인터 큐 엔트리에 대해 재명명/구조화 비트를 0에서 1로 변경한다.
데이터가 재명명 레지스터 파일 또는 구조화된 레지스터 파일로부터 액세스되는 경우, 저장 포인터 태그 필드는 저장 데이터 큐(122) 내의 데이터를 저장 태그 큐(104)0 내의 대응 엔트리와 정렬시키도록 사용되는데, 여기서 대응 엔트리는 매칭 태그 값(matching tag value)을 갖는다. V-비트는 단지 저장 포인터 큐 엔트리가 유효한지 여부를 표시한다.
각 사이클에서, 포인터 큐(106) 내의 2개의 하부(bottom) 엔트리가 스캔되고, GPR 및 재명명 파일 내의 엔트리에 포함된 데이터는 멀티플렉서(118)로 전송된다. 제어 로직은 GPR 및 재명명 파일 엔트리에 관련된 유효 비트(valid bit)를 체크한다. 엔트리 내의 데이터가 유효하지 않은 경우, 데이터는 데이터 큐(122)로 전송되지 않는다. 데이터는 "폐기(thrown away)"되어야 하고 포인터 큐 엔트리는 다음 사이클에서 재 스캔된다. 결국, 저장 인스트럭션에 의해 요구된 데이터는 재명명 레지스터(106) 내로 기록될 것이며, 특정 재명명 레지스터에 대응하는 재명명 유효 비트가 요구(asserted)될 것이다. 데이터가 데이터 큐(122) 내로 전송되는 경우, 제어 로직은 포인터 큐 엔트리 내의 유효 비트를 요구하지 않는다. 이것은 포인터 큐(106) (및 최종 큐)가 태그 큐(104)에 의해 정렬되지 않았으므로 후속(subsequent) 저장 인스트럭션이 포인터 큐 엔트리에서 재-사용되도록 한다.
또한 회로(100)는 저장 종료 큐(store finish queue: FINQ,110)를 포함한다. 저장 종료 큐(110)는 저장 인스트럭션을 종료시킨다. 또한 이것은 푸시다운 큐이기도 하다. 종료 큐(110)는 어드레스 발생 사이클 동안 발생된 고유 저장 태그를보유하지만, "최종(final)" 요구로 표시된 고유 저장 태그들만이 IID마다 요구될 뿐이며, 여기서 IID는 디스패치에 대한 각 인스트럭션에 대해 할당되고 프로세서를 통하여 상기 인스트럭션을 추적하는데 사용되는 인스트럭션 식별자(instruction identifier)를 의미한다. 보다 상세하게는, 본 발명의 특정 실시예에서, 임의의 오정렬된(mis-aligned) 인스트럭션(즉, 저장 인스트럭션에 의해 요구된 데이터가 캐쉬 경계(cache boundary) 상에 오정렬됨)은 IID마다 2개의 캐쉬 액세스를 가지며 제2 요구 태그(second request tag)만이 종료 큐(110) 내에 위치된다. 정렬된 인스트럭션들에서, 각 요구는 "최종"으로 표시되고 종료 큐(110) 내에 위치되는 자신의 태그를 갖는다. 물론, 오정렬된 인스트럭션의 처리는 본 발명과 함께 사용되는 특정 구조와 상당한 의존 관계를 갖는다.
이러한 본 발명의 실시예에서, 가장 오래된(oldest) 2개의 엔트리가 로드저장 유닛 로직(102)에 의해 스캐닝되어 상기 가장 오래된 2개의 엔트리가 종료될 수 있는지를 확인한다. 시간을 고려하여, 본 발명은 각 사이클 동안 보다 많거나 보다 적은 엔트리들을 스캐닝하는데 용이하게 적용할 수 있다. 저장 인스트럭션이 순서에 무관하게 종료될 수 있다는 점을 이해할 것이다. 즉, 가장 오래된 엔트리가 소정의 이유로 인해 종료될 수 없는 경우에도, 두 번째로 오래된 엔트리는 종료될 수 있다. 저장 종료 큐(110) 내의 2개의 가장 오래된 인스트럭션에 대한 태그는 저장 태그 큐(104) 내의 태그와 비교되어 저장 어드레스/제어 큐(EA/CNTLQ, 108)(본 명세서에서 보다 상세히 기술됨) 내의 어느 엔트리가 체크되어야 하는지를 결정한다. 저장 인스트럭션의 실어드레스 및 데이터가 실 어드레스 큐(RAQ, 112)및 저장 데이터 큐(122) 내로 각각 로드되었거나, 또는 실어드레스가 실어드레스 큐(112) 내에 로드되고 데이터는 데이터 큐(122)에 로드되고 있는 중인 경우, 저장 인스트럭션은 종료될 수 있다. 인스트럭션이 종료 큐(110)에 의해 종료될 수 있는 경우, 저장 어드레스/제어 큐(108)로부터 얻어지는 자신의 IID 및 종료 신호는 인스트럭션 완료 유닛(도시되지 않음)으로 전송된다.
또한, V-비트는 단지 저장 종료 큐(110)가 유효하다고 표시할 뿐이다. 종료 큐(110)가 초기에 실행된 인스트럭션에 의해 로드된 경우, 유효 비트가 요구된다. 실어드레스(112)큐 및 저장 인스트럭션에 대응하는 데이터 큐(122) 내의 엔트리가 유효한 경우, 종료 보고(finish report)는 완료 유닛으로 전송되고 종료 큐 유효 비트는 요구되지 않는다. 다시 말해, 종료 큐(110)는 저장 인스트럭션이 완료될 수 있기 전에 저장 인스트럭션에 의해 요구되는 데이터 뿐만 아니라 실어드레스 양자가 사용 가능하다는 것을 보장하도록 동작한다. 종료 보고는 임의의 예외 정보(exception information) 뿐만 아니라 인스트럭션에 대응하는 어드레스/제어 큐 엔트리로부터 얻어지는 IID를 포함한다.
회로(100)는 유효 어드레스/제어 큐(108)를 추가로 포함한다. 도 10d는 예시적인 어드레스/제어 큐 엔트리를 도시한다. 저장 어드레스/제어 큐(108)는 n-깊이 푸시다운 큐이며, 실어드레스 및 저장 데이터와 함께 데이터 캐쉬에 전송되어 메모리를 갱신할 데이터를 저장하는 유효 어드레스를 보유한다. 또한 이러한 큐(108)는 저장 큐에 의해 저장 완료 유닛에 대한 저장 인스트럭션을 종료하는데 사용될 수 있는 IID를 포함한다. E-비트는 실행 중에 예외가 발생하는 경우 이러한 엔트리가 데이터 캐쉬로 제공되는 것을 방지할 수 있는 예외 비트이다. E-비트는 설계 선택의 문제로서 프로세서 상의 다양한 자원에 의해 조작될 수 있다. 예를 들어, 본 발명의 일 실시예에서, E-비트는 저장 인터럽트와 같은 소정 이벤트가 발생한 경우 DCMMU(124)의 어드레스 번역 논리에 의해 설정된다.
C-비트는 저장 인스트럭션이 인스트럭션 완료 유닛에 의해 구조적으로 완료되었으며 메모리에 저장되어야 한다는 것을 의미하는 완료 비트이다. 오직 완료된 저장 인스트럭션들만이 데이터 캐쉬로 제공될 수 있다. C-비트는 태그 큐(104), 데이터 큐(122), 및 실어드레스 큐(112) 내의 대응 엔트리들이 관련(concerned) 저장 인스트럭션에 대해 유효한 경우에만 특정 유효 어드레스/제어 큐 엔트리에 대해 요구되고, 완료 유닛은 이러한 인스트럭션이 완료되었음을 표시한다. 데이터가 데이터 큐(122)로부터 캐쉬로 전송된 후, 대응하는 유효 어드레스/제어 큐 엔트리 내의 유효 비트는 요구되지 않는다. 동시에, 태그 큐(104), 데이터 큐(122), 및 실어드레스 큐(112)도 그들의 각 엔트리에 대해 요구되지 않는다.
이러한 점에서, 본 발명의 중요한 장점이 본 기술 분야의 당업자에게 명백해질 것이다. 저장 인스트럭션에 의해 요구되는 어드레스 및 데이터가 이미 어드레스 큐(112) 및 데이터 큐(122) 내에 보유되어 있으므로, 인스트럭션이 완료되어야 하는 시간, 즉, 인스트럭션의 IID가 완료 테이블 내의 다음번 완료 엔트리(next-to complete entry)로 되는 시간에, 인스트럭션은 구조적 레지스터 파일 또는 재명명 레지스터 파일로부터의 판독을 수행하지 않고 완료될 수 있다. 그 대신에, 데이터는 단순히 데이터 큐(122)로부터 캐쉬로 전송된다. 본 발명의 상기 실시예에서,데이터 큐(122)에는 단일 판독 포트만 제공되고, 따라서 오직 하나의 저장 인스트럭션만이 사이클마다 캐쉬로 전송되는 자신의 데이터를 가질 수 있다고 가정된다. 그러나, 레지스터 파일에 대한 판독이 요구되지 않으므로, 본 발명은 단일 사이클 동안 몇 개의 IID가 완료 유닛으로부터 어드레스/제어큐로 전송될 수 있게 하며, 관련 엔트리의 각각에 대해 C-비트를 설정한다. IID가 전송된 경우, 완료 테이블 내의 엔트리들은 후속 인스트럭션들에 의해 재사용될 수 있다. 이것은 단일 사이클 동안 완료 테이블 내의 복수 엔트리를 자유롭게 하여 완료 테이블이 충만되는 경우 발생될 수 있는 디스패치 스톨을 방지한다.
기타 여러 제어 비트가 본 발명의 구조적 구현에 따라 다양한 목적, 예를 들어 메모리 정렬에 대한 데이터를 포맷하는 저장 포매터(fornatter)의 제어와 같은 목적을 위해 제공된다. V-비트는 저장 어드레스/제어 큐 엔트리가 유효함을 표시하며 엔트리가 로드되면 요구되고, 상기 기술한 바와 같이 엔트리가 로드되지 않으면 요구되지 않는다.
회로(100)에 의해 사용되는 다른 큐는 실어드레스 큐(112)이다. 이러한 큐는 완료 버퍼(도시되지 않음) 내에 보류 중인 저장 인스트럭션에 의해 캐쉬 액세스에 대한 실어드레스를 저장한다. 이러한 큐(112) 내의 어드레스는 메모리에 실제로 기록하기 위해 대응하는 저장 데이터와 함께 캐쉬로 전송된다.
마지막으로, 회로(100)는 완료 버퍼(도시되지 않음) 내에 보류중인 다양한 저장 인스트럭션에 의해 요구되는 데이터를 저장하는 데이터 큐(122)를 갖는다. 데이터 큐(122)는 관련된 저장 인스트럭션이 실행되고 있는 시점에서의 데이터 위치에 따라, GPR 또는 재명명 레지스터 파일 중의 하나로부터 데이터를 수신한다.
본 발명의 일 실시예의 동작은 다음과 같다. 디스패치의 경우, 저장 인스트럭션은 디스패치 유닛(도시되지 않음)으로부터 로드/저장 유닛 논리(102)로 전송된다. 디스패치 유닛은 인스트럭션에 프로세서 전반에 걸쳐 인스트럭션을 추적하는데 사용되는 식별 태그(identification tag)("IID")를 할당한다. 다음 클록 사이클에서, 로드/저장 뉴닛 조직(102)은 인스트럭션에 대한 유효 어드레스를 계산하고, 또한 인스트럭션에 식별용 고유 태그를 할당한다. IID는 로드/저장 유닛 로직 (102)에 의해 생성되는 태그와 구별되고, 태그 큐(104) 내에 저장되는 점에 유의하여야 한다. 본 실시예에서, 식별 태그는 로드/저장 유닛 로직(102) 내부에서만 사용된다. 이것은 디스패치 유닛에 의해 저장 인스트럭션에 할당되는 IID가 원래의 저장 인스트럭션이 데이터 캐쉬로 전송되기 전에 재 발행될 수 있는 가능성으로 인한 논리 설계를 단순화시킨다. 회로는 IID가 로드/저장 유닛 로짓 큐 내의 데이터를 정렬하는데 사용될 수 있도록 확실히 제공될 수 있지만, 본 실시예는 설계 선택의 문제로 인하여 분리 태그(separate tag)를 채용한다. 다음에 로드/저장 유닛 로짓(102) 논리(102)는 태그를 태그 큐(104) 내로 전송하는데, 태그 큐(104)는 이하에서 보다 상세히 기술되는 방식으로 회로(100) 내의 다양한 큐 간의 정렬을 유지하는데 사용된다.
동일한 사이클 동안, 로드/저장 유닛 로직(102) 논리는 또한 인스트럭션 및 인스트럭션 태그를 포인터 큐(106)로 전송한다. 본 실시예의 포인터 큐(106)는 단순한 푸시다운 큐이다. 포인터 큐(106) 내의 각 엔트리는 도 10b에 도시된 바와같이 태그 필드("T"), 범용 구조 레지스터 포인터, 재명명 포인터, 재명명/구조화(R/A) 비트, 및 유효 비트("V")를 포함한다. T 필드는 이전 사이클에서 로드/저장 유닛로직(102)에 의해 할당된 인스트럭션용 식별 태그를 포함한다. 범용 구조 레지스터 필드는 디스패치에 대한 인스트럭션에 관련된 범용 구조 레지스터 포인터를 포함한다. 같은 방식으로, 재명명 포인터는 디스패치에 대한 인스트럭션에 관련된 재명명 포인터를 포함하는데, 이러한 정보는 인스트럭션 디코드의 일부가 아니므로 재명명 제어 로직으로부터 제공된다. 제명명/구조화 비트는 인스트럭션에 관련되는 데이터를 포함하는 위치를 식별하는데, 즉, 데이터가 재명명 레지스터 내에(116) 존재하는지 또는 범용 구조 레지스터(114) 내에 구조화되어 있는지를 식별한다. 일 실시예에서, 재명명/구조화 비트가 설정된 경우, 인스트럭션용 데이터는 범용 구조 레지스터 엔트리 내에 저장된다. 저장 인스트럭션용으로 요구되는 데이터가 범용 구조 레지스터(114) 내에 존재하는 경우, 구조화된 레지스터가 상기 데이터를 필요로 하는 저장 인스트럭션이 완료된 이후까지 변경되지 않을 것이 확실하므로 재명명/구조화 비트를 갱신할 필요가 없다.
그러나, 재명명/구조화 비트가 설정되지 않은 경우, 데이터는 재명명 레지스터 엔트리 내에 위치되거나 위치될 수 있다. 이 경우, 재명명/구조화 비트는 이하에서 기술되는 바와 같이 포인터 큐(106) 내에서 갱신되어야 한다. 로드/저장 유닛 로직(102)는 재명명/구조화 비트를 재명명 레지스터 제어 논리(도시되지 않음)로부터 얻어 다른 정보와 동시에 포인터 큐(106)로 전송한다. 저장 인스트럭션에 대한 데이터가 재명명 레지스터(116)로부터 얻어지는 경우, 재명명 엔트리의 유효비트는 재명명 데이터가 유효한지의 여부, 즉, 데이터를 발생하여야 하는 인스트럭션이 그 데이터를 재명명 레지스터(116) 내에 기록하였는지, 또는 발생 인스트럭션(generating instruction)이 아직 보류 중인지의 여부를 표시한다. 재명명/구조화 비트는 재명명 엔트리의 유효 비트와 관련하여 사용되어, 저장 명령에 대한 데이터의 전송이 가능한 경우 저장 인스트럭션에 대한 데이터가 각 사이클에서 데이터 큐(122)로 전송될 수 있도록 한다.
특히, 포인터 큐(106)는 각 사이클에서 이러한 목적으로 제공된 로드/저장 유닛 로직(102)에 의해 스캐닝된다. 포인터 큐 엔트리가 스캐닝된 경우, 포인터 큐 엔트리 내의 재명명 포인터는 완료 유닛의 기록 벡터(writeback vector)(및 재명명 포인터)와 비교되어 대응하는 재명명/구조화 비트가 설정되어야하는지를 결정한다. 보다 상세하게는, 완료 유닛의 각 엔트리는 완료 인스트럭션용 데이터가 위치되는 재명명 레지스터(116)에 대응하는 "기록 벡터" 필드를 포함한다. 기록 벡터는 프로세서 상의 논리에 의해 사용되어 재명명 레지스터(116)로부터 데이터를 발생한 인스트럭션에 의해 지정되는(targeted) 구조화된 레지스터로 데이터를 기록한다. 포인터 큐 엔트리 내의 재명명 포인터 및 완료 테이블 내의 기록 벡터 간에 비교가 존재하는 경우, 이것은 저장 인스트럭션에 의해 요구된 데이터를 발생시킨 인스트럭션이 완료되었고 또한 현재 엔트리 내에 구조화되어 있다는 것을 표시한다. 따라서, 상기 특정 저장 인스트럭션용으로 요구된 데이터는 재명명 레지스터(116) 내에서 더 이상 발견되지 않을 수 있지만, 범용 구조 레지스터(114) 내에서 구조화될 수 있다. 따라서, 로드/저장 유닛 로직(102)은 포인터 큐 엔트리내의 재명명/구조화 비트를 토글(toggle)한다.
또한 포인터 큐(106)는 스캐닝되어 데이터 큐(122)로 전송될 수 있는 데이터를 갖는 임의의 엔트리가 존재하는지를 결정한다. 설계 선택의 문제이긴 하지만, 타이밍을 맞추기 위해 포인터 큐(106)의 일부분, 즉, 최종 2개의 엔트리만 스캐닝하는 것이 바람직할 수 있다. 포인터 큐(106)를 스캐닝함으로써 인스트럭션들이 자신의 데이터를 순서에 무관하게 데이터 큐(122) 내에 기록할 수 있게 한다. 예를 들어, 포인터 큐(106) 내의 최종, 즉 가장 오래된, 엔트리가 스캐닝되고, 엔트리의 데이터가 재명명 레지스터(116) 내에 저장되어 있지만, 재명명 유효 비트가 상기 데이터가 이전(prior) 데이터 발생 인스트럭션으로부터 아직 수신되지 않았음을 표시하는 경우, 포인터 큐(106) 내의 가장 오래된 인스트럭션에 대한 데이터는 데이터 큐(122) 내로 전송될 수 없다. 재명명/구조화 비트가 이러한 엔트리용으로 설정되는 경우, 이러한 엔트리용 데이터는 범용 구조 레지스터(114) 내에 포함되어 있다. 이 경우, 로드/저장 유닛 로직(102)은 재명명/구조화 비트와 함께 범용 구조 레지스터 포인터를 사용하여 적절한 범용 구조 레지서터 엔트리를 선택하고, 데이터를 데이터 큐(122)에 저장한다. 범용 구조 레지스터(114)로부터 데이터를 수신하는 특정 데이터 큐는 상기한 바와 같이 테그 큐(104) 내의 동일한 엔트리에 대응한다. 다시 말해, 프로세서는 포인터 큐(106) 내의 T 필드를 관련 저장 인스트럭션에 대한 태그 큐(104) 내의 T 필드와 비교한다. 관련 저장 인스트럭션용 태그가 태그 큐(104) 내의 제4 엔트리에 저장되는 경우 범용 구조 레지스터(114)로부터 수신되는 데이터는 데이터 큐(122) 내의 제4 엔트리에 기록된다. 이러한 방식으로, 태그 큐(104)는 데이터 큐(122), 실어드레스 큐(112) 및 유효 어드레스/제어 큐(108) 간의 정렬을 유지한다. 각각의 특정 저장 인스트럭션에 대하여, 각 태그 큐(104), 유효 어드레스/제어 큐(108), 실 어드레스 큐(112) 및 데이터 큐(122) 내의 엔트리는 상기 인스트럭션에 관련된 정보를 가질 수 있다.
선택된 엔트리로부터의 데이터가 멀티플렉서(MUX, 118)를 통하여 래치(120, latch)로 전송된다. 멀티플렉서(118)는 범용 구조 레지스터 또는 재명명 레지스터 엔트리 중의 하나를 선택하여 래치(120)로 전송하는데 사용된다는 점에 유의하여야 한다. 특히, 포인터 큐(106) 엔트리용 재명명/구조화 비트가 멀티플렉서(118) 선택 라인에 대한 입력으로서 제공된다. 상기 비트가 설정된 경우 범용 구조 레지스터 데이터가 선택된다. 상기 비트가 리셋(reset)된 경우 재명명 레지스터 데이터가 선택된다.
후속 클록 사이클에서, 데이터는 래치(120)로부터 데이터 큐(122)로 전송된다. 적절한 데이터의 정렬을 유지하기 위하여, 태그는 데이터를 수신할 데이터 큐(122) 내의 적절한 엔트리를 선택하는데 사용된다. 또한 데이터 큐(122) 내의 이러한 엔트리는 실어드레스 큐(112)에 저장된 적절한 실어드레스에 대응된다. 이것은 이하의 실시예와 관련하여 보다 상세하게 기술된다. 로드/저장 유닛 로직(102)에 의해 인스트럭션에 태그 식별자 06이 할당되었다고 가정한다. 또한 태그가 로드 저장 유닛 로직(102)로부터 전송되는 경우 제4 엔트리가 테그 큐(104) 내에서 다음번 사용 가능한 엔트리라고 가정한다. 따라서, 태그 06은 로드/저장 유닛 로직(102)에 의해 태그 큐(104)의 제4 엔트리에 기록될 수 있다. 어드레스번역 후, DCMMU(도시되지 않음)는 태그와 함께 저장 인스트럭션에 의해 지정되는 캐쉬 위치의 실어드레스를 실어드레스 큐(112)로 전송한다. 로드/저장 유닛 로직(102)은 복귀(returning) 실어드레스용 태그를 테그 큐(104) 내에 저장된 태그들과 비교한다. 이 경우의 비교는 이전에 설명된 바와 같이 태그 06이 테그 큐(104)의 제4 엔트리 내에 저장되어 있음을 나타낸다. 따라서, 로드/저장 유닛 로직(102)은 저장 인스트럭션의 할당된 태그 06에 대한 복귀 실어드레스가 실어드레스 큐(112)의 제4 엔트리에 기록될 수 있도록 한다. 마찬가지로, 태그 06을 갖는 저장 인스트럭션에 대한 데이터가 데이터 큐(122)에 기록되는 경우, 로드/저장 유닛 로직(102)은 먼저 태그 큐(104)를 스캐닝하여 태그 06이 태그 큐(104)의 제4 엔트리 내에 저장되어 있는지를 결정하고 다음에 래치(120)로부터의 데이터를 데이터 큐(122)의 제4 엔트리 내에 기록한다. 물론, 본 기술 분야의 당업자라면 데이터 정렬을 유지하는 다른 기술이 설계 선택의 문제로서 용이하게 적용될 수 있다는 점을 인식할 수 있을 것이다.
이러한 점에서, 상기 실시예의 회로는 파이프라인화되어 복수 저장 인스트럭션이 실어드레스 및 데이터를 실어드레스 큐(112) 및 데이터 큐(122) 내의 엔트리 내로 각각 "큐 업(queue up)"할 수 있게 한다는 점을 이해할 수 있을 것이다. 따라서, 완료 시에, 범용 구조 레지스터(114)을 액세스하는 저장 인스트럭션은 필요하지 않다. 대신에, 완료시에 적절한 저장 큐 엔트리는 완료로 표시되고 순서대로 캐쉬에 제공될 수 있으며, 요구된 데이터는 실어드레스 큐(112) 내에 저장된 대응 캐쉬 어드레스와 함께 적절한 데이터 큐(122) 엔트리로부터 캐쉬로 전송된다.
도 11a 및 도 11b에는 본 발명 실시예의 동작을 예시하는 플로우챠트가 도시되어 있다. 단계(1102)에서, 저장 인스트럭션은 로드/저장 유닛 로직(102)으로 디스패치된다. 디코딩된 인스트럭션은 저장 인스트럭션에 요구되는 데이터를 갖는 구조화된 레지스터를 포함한다. 대응하는 범용 구조 레지스터 엔트리가 아직 상기 데이터로 갱신되지 않은 경우, 대응하는 재명명 레지스터 포인터가 상기한 바와 같이 재명명 로직으로부터 얻어진다. 단계(1104)로 진행하여 인스트럭션이 실행되고 유효 주소가 디코딩된 인스트럭션 데이터로부터 발생된다. 동시에, 태그도 로드/저장 유닛 조직(102)에 의해 발생된다. 단계(1106)에서, 유효 어드레스 및 태그는 데이터 캐쉬 메모리 관리 유닛(DCMMU, 124)으로 전송되어 DCMMU(124)에 의해 실어드레스가 계산된다. 실어드레스가 DCMMU(124)에 의해 계산된 후, 단계(1108)에서 태그와 함께 로드/저장 유닛 로직(102) 제어 논리로 복귀되며, 단계(1110)에서 로드/저장 유닛 로직(102)는 제어 논리는 DCMMU(124)로부터의 태그와 태그 큐(104)의 태그를 비교하고, 대응 실어드레스 큐 엔트리에 DCMMU(124)로부터 복귀된 실어드레스를 로드한다. 다시 말해, 특정 저장 인스트럭션용 태그 큐(104)가 제4 태그 큐 엔트리에 저장되는 경우, DCMMU(124)로부터 복귀된 실어드레스는 단계(1110)에서 실어드레스 큐(112)의 제4 엔트리 내에 저장될 수 있다.
또한 단계(1104)를 완료한 후, 프로세서는 단계(1112)로 진행하여 태그 큐(104)및 포인터 큐에는 단계(1104)에서 발생된 태그 및 구조화/재명명 파일 포인터가 로드된다. 통상적으로, 유효 어드레스/제어 큐(108) 및 최종 큐(110)는 단계(1116) 및 단계(1118)에서 각각 로드된다.
단계(1114)에서, 로드/저장 유닛 로직(102)은 관련 저장 인스트럭션용 저장 포인터 큐 엔트리 내의 재명명/구조화 비트 비트를 체크하여 인스트럭션에 의해 요구되는 데이터가 GPR 엔트리 내에 저장되어 있는지를 결정한다. 저장되어 있지 않은 경우, 시스템은 단계(1120)로 진행하여 요구된 데이터에 대응하는 재명명 엔트리가 유효한지를 체크하고 확인한다. 저장 인스트럭션에 의해 요구되는 데이터가 범용 구조 레지스터(114) 내에 저장되어 있지 않고 또한 유효하지 않은 경우, 단계(1122)에서 프로세서는 단계(1120)로 복귀한다. 단계(1120)에서 재명명 엔트리 내의 데이터가 유효한 경우, 단계(1124)로 진행하여 재명명 레지스터 파일은 포인터 큐(106)로부터의 재명명 포인터를 사용하여 판독된다. 결과적으로, 단계(1114)에서 저장 인스트럭션에 의해 요구되는 데이터가 범용 구조 레지스터 내에 저장되어 있는 경우, 단계(1126)로 진행하여 대응 범용 구조 레지스터 파일은 포인터 큐(106)로부터의 범용 구조 레지스터 포인터를 사용하여 판독된다.
재명명 레지스터 파일 또는 범용 구조 레지스터 레지스터 파일을 판독한 후, 단계(1128)로 진행하여 대응 재명명/범용 구조 레지스터 파일이 대응하는 저장 인스트럭션용 포인터 큐(106)로부터의 재명명/구조화 비트 비트에 따라 선택된다. 포인터 큐(106)내의 태그는 태그 큐(104)와 비교되어 멀티플렉서(118)로부터 데이터를 수신하는 대응 데이터 큐 엔트리를 결정한다. 또한, 관련 저장 인스트럭션용 태그가 태그 큐(104)의 제4 엔트리 내에 있는 경우, 재명명 레지스터(116) 또는 범용 구조 레지스터(114)로부터 판독된 데이터는 데이터 큐(122) 내의 제4 엔트리에 기록될 수 있다. 동시에, 포인터 큐 엔트리는 포인터 큐(106)로부터 제거된다.
단계(1130)에서 데이터가 데이터 큐 엔트리에 기록된 후, 프로세서는 단계(1132)로 진행하여 저장 인스트럭션이 이미 종료되었는지를 결정한다. 이러한 동작에서, 로드/저장 유닛 로직(102)은 종료 큐 태그를 스캐닝하고 상기 태그들을 태그 큐(104) 내의 태그들과 비교한다. 본 발명의 일 실시예에서는, 2개의 하부 종료 큐 엔트리들만이 1 사이클 동안 스캐닝된다. 그러나, 이것은 설계 선택의 문제이며 더 많거나 더 적은 종료 큐 엔트리가 단일 사이클 동안 스캐닝될 수 있다. 특정 최종 큐로부터의 태그는 태그 큐(104)의 태그들과 비교되어 종료 큐(110)로부터 검색되는 태그용 대응 태그 큐 엔트리를 결정한다. 또한, 종료 큐(110)로부터의 특정 태그가 제4 큐 엔트리 내에서 발견되는 경우 프로세서는 재명어드레스/제어 큐(108), 실어드레스 큐(112), 및 데이터 큐(122) 엔트리 내의 대응하는 제4 엔트리를 체크한다. 이러한 대응 엔트리들의 각각에 대해, 단계(1134)에서 프로세서는 유효 비트가 설정되었는지를 결정한다. 설정되지 않은 경우, 프로세서는 단계(1132)로 복귀하여 유효 비트가 상기한 3개의 각 큐 내의 대응하는 엔트리에 대해 설정될 때까지 단계(1132) 및 단계(1134)를 반복한다.
다음에, 단계(1136)로 진행하여 저장 인스트럭션은 유효 어드레스/제어 큐(108)로부터의 IID를 완료 유닛 큐 내의 대응하는 IID와 비교함으로써 완료된다. 동시에, 대응하는 종료 큐 엔트리가 제거된다. 단계(1138)에서, 완료 유닛으로부터의 완료를 대기한다. 완료된 경우, 대응하는 엔트리는 프로세서가 데이터를 데이터 큐(122)로부터 캐쉬 메모리 내로 전송할 준비가 되어 있음을 표시하는 소정의 제어 비트 세트를 갖는다. 본 발명의 상기 실시예에서, 데이터 큐(122)로부터 캐쉬로 데이터를 실제로 전송하는 것은 프로세서에서 발생중인 여러 인자로 인해 대응하는 저장 인스트럭션이 완료로 표시된 후 몇 개의 사이클이 걸릴 수 있다. 또한 단계(1140)에서, 적절한 어드레스/제어 큐 엔트리가 자신의 C-비트를 설정함으로써 완료로 표시된다.
다음에, 단계(1142)에서 프로세서는 실어드레스, 유효 주소, 인스트럭션 ID, 및 데이터 큐(122)로부터 캐쉬로 데이터를 전송하는데 요구되는 기타 필요한 제어 신호를 DCMMU(124)로 전송한다. 마지막으로, 단계(1144)에서 완료된 저장 인스트럭션에 대응하는 태그 큐, 유효 어드래스/제어 큐, 실어드레스 큐, 데이터 큐 엔트리가 그들의 각 큐로부터 제거되어 후속적으로 디스패치되는 저장 인스트럭션용 공간으로 자유롭게 제공된다.
도 12는 상기 실시예에서 기술된 회로의 동작을 예시하는 타이밍도이다. 또한 도 12의 타이밍도는 도 1 및 도 2에 도시된 바와 같은 프로세서의 블록도를 참조하여 기술된다.
사이클 1에서, 저장 인스트럭션은 인스트럭션 캐쉬(14)로부터 디스패치되고 디스패치 유닛(46)에 의해 디코드된다. 다음에 로드/저장 유닛(28)으로 전송된다. 사이클 2의 전반부에서, 로드/저장 유닛(28)는 인스트럭션에 대한 유효 어드레스를 계산한다. 이것은 본 명세서에서 종종 어드레스 발생 또는 "agen" 또는 실행으로 불리운다. 본 기술 분야의 당업자라면 메모리 어드레싱의 상이한 모드, 및 유효 어드레스와 실어드레스 간의 차이에 친숙할 것이다. 본 발명이 수많은 메모리 어드레싱 구조(scheme)에 용이하게 적용 가능하며, 이러한 메모리 어드레싱 구조 중어느 것이라도 설계 선택의 문제로서 채용될 수 있다는 점을 인식할 수 있을 것이다. 본 실시예는 IBM사로부터 구입 가능한 프로세서의 "PowerPC" 패밀리에서 채용되는 예시적인 메모리 어드레싱 구조에 대해 기술된다. 이러한 메모리 어드레싱 모드는 IBM으로부터 입수 가능하며 간행 번호가 MPRPPCFPE-01인 "PowerPC Microprocessor Family: The Programming Environments"와 같은 상업적으로 사용 가능한 간행물에서 보다 상세하게 기술되어 있으며, 본 명세서에 참조되어 본 발명의 일부를 이루고 있다.
또한 사이클 2에서, 인스트럭션용 태그가 로드/저장 유닛(28)에 의해 발생된다. 유효 어드레스 및 인스트럭션 태그가 사이클의 마지막에서 메모리 관리 유닛으로 전송되어 실어드레스가 계산된다.
사이클 3에서, 포인터 큐(106) 및 태그 큐(104)는 로드/저장 유닛(28)에 의해 갱신된다. 이들 큐(106,104)로 전송된 정보는 앞서 설명된 바 있다. 또한, 실어드레스는 데이터 캐쉬(16) 내의 메모리 관리 유닛으로부터 복귀된다. 또한 사이클 3에서 범용 구조 레지스터(32)이 액세스된다(여기서 저장 인스트럭션에 대한 데이터는 범용 구조 레지스터(32) 내에 있다고 가정한다). 타이밍을 맞추기 위해, 상기 데이터가 제이터 큐(122)로 전송되기 전에 1 사이클 동안 래치되는 것이 바람직할 수 있다. 따라서, 상기 실시예에서, 로드/저장 유닛(32) 사이클 4에서 FXU 저장 유효 파이프라인 래치 신호(FXU Store Valid Pipeline Latch signal)를 발생하여 데이터를 래치(120) 내로 래치시킨다.
사이클 5에서, 종료 인스트럭션 신호가 발생된다. 상기한 종료 큐(112)는저장 인스트럭션을 종료하는데 사용되며, 고유 저장 태그를 포함한다. 종료 큐(112) 내의 각 엔트리가 스캐닝되고, 종료 큐 엔트리의 태그와 비교되어 태그 큐(104) 내에서 매치(match)를 찾는다. 대응하는 태그 큐(104) 엔트리가 데이터 큐 및 실어드레스 큐 유효 비트 세트를 갖는 경우, 어드레스/제어 큐(108)로부터의 대응 IID는 종료된다. 일 실시예에서, 종료 큐(112)는 포인터 큐(106)와 동일하게 처리되고 2개의 하부 엔트리가 스캐닝된다. 그러나, 상기한 바와 같이 저장은 순서에 무관하게 종료될 수 있다. 종료 신호는 완료 유닛(48)으로 전송되는데 완료 유닛(48)은 저장 인스트럭션이 완료 큐(120) 내의 다음번 완료 인스트럭션인 경우에 저장 인스트럭션이 완료될 수 있음을 표시한다.
여전히 사이클 5에서, 저장 인스트럭션 데이터는 래치(120)로부터 데이터 큐 (122)로 전송된다. 데이터를 데이터 큐(122) 내의 적절한 엔트리 내로 정렬하는 적절한 하나의 방법은 앞에서 이미 기술되었다. 이 시점에서, 데이터는 명령이 종료된 사이클인 사이클 4에서 멀티플렉서(118)로부터 로드되고 있는 중이므로, 저장 인스트럭션은 사이클 5에서 완료할 준비가 되어 있다.
완료 유닛(48)은 한 신호 사이클에서 복수의 인스트럭션을 완료할 수 있다. 상기한 바와 같이, 완료는 단순히 저장 큐 내의 4개 엔트리가 완료되었음을 표시하는데, 이는 4개의 엔트리가 데이터 큐(122)로 전송될 수 있다는 것을 의미한다. 각 엔트리에 대한 완료 비트가 유효 어드레스/제어 큐(108) 내에서 보유되어 있다. 로드/저장 유닛(28)은 캐쉬가 사용 가능한 경우, (즉, 캐쉬가 상위 우선 요구(higher priority request)로 비지(busy) 상태가 아닌 경우), 가장 오래된 완료 저장 큐 엔트리를 캐쉬로 전송한다.
따라서, 본 기술 분야의 당업자에게는 긴밀하게(tightly) 결합된 루프 내의 제명명 레지스터 파일을 액세스함으로써, 인스트럭션들이 보다 효율적으로 완료될 수 있으며, 따라서 완료 버퍼의 충만에 의해 발생되는 디스패치 스톨의 개수를 감소시킨다는 점이 명백히 이해된다. 본 발명이 도시된 실시예에 따라 기술되었지만, 본 기술 분야의 당업자라면 실시예에 대한 변경이 있을 수 있으며 이러한 변경은 본 발명의 정신 및 범위 내에 속한다는 점을 인식할 수 있을 것이다. 따라서, 본 발명이 동시에 4개의 저장 인스트럭션을 종료하는 것으로 기술되었지만, 본 기술 분야의 당업자라면 임의 개수의 저장 인스트럭션이 완료될 수 있으며 이는 본 발명의 정신 및 범위 내에 속한다는 점을 용이하게 인식할 것이다. 따라서, 첨부된 청구범위에 의해 범위가 정해지는 본 발명의 정신 및 범위를 벗어남이 없이 본 기술 분야의 당업자에 의해 여러 가지 변경이 가해질 수 있다.
본 발명은 한 사이클 동안 완료될 수 있는 저장 인스트럭션의 개수를 증가시키고 스톨 조건 후에 프로세싱 시스템 내에서 복수 저장 인스트럭션 완료를 처리함으로써, 저장 인스트럭션 완료의 부족으로 인한 디스패치 유닛의 스톨의 개수를 감소시켜 전체 프로세서 성능이 개선된다.

Claims (8)

  1. 프로세서에서 저장 인스트럭션을 처리하는 방법에 있어서,
    a) 디스패치 유닛으로부터 제1 저장 인스트럭션과 적어도 하나의 부가적인
    저장 인스트럭션을 디스패치하는 단계;
    b) 저장 제1 저장 인스트럭션에 의해 지정(targeted)되는 데이터를 저장하기
    위한 실어드레스 메모리 위치를 결정하고, 상기 제1 저장 인스트럭션에
    의해 지정되는 상기 데이터를 포함하고 구조화된 레지스터 파일과 재명명
    레지스터 파일을 선택적으로 포함하는 레지스터 파일 내의 엔트리를 결정
    하는 상기 제1 저장 인스트럭션을 실행하는 단계,
    c) 상기 제1 저장 인스트럭션에 의해 지정되는 상기 데이터를 저장 인스트럭
    션이 완료되기 전에 상기 레지스터 파일 내의 상기 엔트리에서부터 데이
    터 큐 내의 엔트리로 전송하는 단계;
    d) 상기 부가적인 저장 인스트럭션 각각에 의해 지정되는 데이터를 저장하기
    위한 실어드레스 메모리 위치를 결정하고, 상기 부가적인 저장 인스트럭
    션 각각에 의해 지정되는 데이터를 포함하는 레지스터 파일 내의 엔트리
    를 결정하기 위해 적어도 하나의 부가적인 저장 인스트럭션을 실행하는
    단계;
    e) 상기 부가적인 저장 인스트럭션 각각이 완료되기 전에, 상기 부가적인 저
    장 인스트럭션 각각에 의해 지정되는 상기 데이터를 상기 레지스터 파일
    에서부터 상기 데이터 큐 내의 부가적인 엔트리 각각으로 전송하는 단계;
    f) 단일 클록 사이클 시에 상기 제1 저장 인스트럭션과 적어도 하나의 부가
    적인 저장 인스트럭션이 완료되면, 상기 데이터 큐로부터 캐시 메모리로
    상기 제1 저장 인스트럭션에 의해 지정된 데이터와 상기 적어도 하나의
    부가적인 저장 인스트럭션에 의해 지정된 데이터를 전송하는 단계를 포함
    하고,
    상기 제1 저장 인스트럭션에 의해 지정되는 상기 데이터는 데이터 큐 및
    상기 구조화된 레지스터 파일과 재명명 레지스터 파일 사이에 정렬된 멀
    티플렉서를 통해 전송되고,
    상기 부가적인 저장 인스트럭션 각각에 의해 지정되는 상기 데이터는 상
    기 데이터 큐 및 상기 구조화된 레지스터 파일과 재명명 레지스터 파일
    사이에 정렬된 멀티플렉서를 통해 전송되는 저장 인스트럭션 처리방법.
  2. 순서대로 인스트럭션을 완료하고, 구조화된 레지스터 파일, 재명명 레지스터 파일, 로드 저장 유닛, 완료 유닛, 및 캐쉬 메모리에 연결된 인스트럭션 디스패치 유닛을 갖는 슈퍼스칼라 프로세서에서 저장 인스트럭션을 처리하는 장치에 있어서,
    a) 저장 인스트럭션에 대응하며, 상기 저장 인스트럭션에 의해 요구되는 데
    이터를 포함하는 상기 구조화된 레지스터 파일 및 재명명 레지스터 파일
    내의 각 엔트리에 대응한 포인터를 포함하는 엔트리를 포함하는 엔트리를
    갖는 포인터 큐;
    b) 상기 저장 인스트럭션에 의해 요구된 데이터가 상기 구조화된 레지스터
    파일 및 재명명 레지스터 파일로부터 캐쉬 메모리에 결합되는 데이터 큐
    내의 엔트리로 전송되는 것을 용이하게 할 수 있도록, 상기 구조화된 레
    지스터 파일 및 재명명 파일 상의 판독 포트에 결합되는 멀티플렉서를 포
    함하는 저장 인스트럭션 처리 장치.
  3. 제2항에 있어서,
    포인터 큐 내의 엔트리는 저장 인스트럭션에 의해 요구되는 데이터가 구조화된 레지스터 파일 또는 재명명 레지스터 파일 중의 어느 파일 내의 엔트리에 저장되어 있는지를 표시하는 비트를 추가로 포함하는 저장 인스트럭션 처리 장치.
  4. 제3항에 있어서,
    상기 멀티플렉서의 선택 라인이 포인터 큐 엔트리 내의 비트에 응답하여, 상기 구조화된 레지스터 파일로부터의 데이터와 상기 재명명 레지스터 파일로부터의 데이터 중에서 하나의 데이터를 선택하는 저장 인스트럭션 처리 장치.
  5. 제2항에 있어서,
    상기 저장 인스트럭션에 의해 요구되는 데이터가 저장 인스트럭션이 완료되기 전에 상기 저장 인스트럭션의 실행이 최종 결과를 처리할 때 상기 멀티 플렉서로부터 상기 데이터 큐 내의 엔트리로 전송되는 저장 인스트럭션 처리 장치.
  6. 제5항에 있어서,
    상기 저장 인스트럭션이 완료된 경우, 상기 저장 인스트럭션 에 의해 요구되는 상기 데이터가 상기 데이터 큐 내의 엔트리로부터 상기 캐쉬 메모리로 전송되는 저장 인스트럭션 처리 장치.
  7. 제6항에 있어서,
    적어도 하나의 부가적인 저장 인스트럭션과 연관된 데이터가 단일 클록 사이클 동안 상기 저장 인스트럭션과 연관된 상기 데이터와 함께 상기 데이터 큐로부터 상기 캐쉬 메모리로 전송되는 저장 인스트럭션 처리 장치.
  8. 제2항에 있어서,
    상기 저장 인스트럭션을 고유하게 식별하는 태그를 포함하는 태그 큐를 추가로 포함하는 저장 인스트럭션 처리 장치.
KR1019980045323A 1998-01-30 1998-10-28 단일클록사이클동안슈퍼스칼라프로세서에서복수의저장인스트럭션완료를용이하게하는방법및시스템 KR100309309B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/016,654 US6192461B1 (en) 1998-01-30 1998-01-30 Method and apparatus for facilitating multiple storage instruction completions in a superscalar processor during a single clock cycle
US09/016,654 1998-01-30
US9/016,654 1998-01-30

Publications (2)

Publication Number Publication Date
KR19990066800A KR19990066800A (ko) 1999-08-16
KR100309309B1 true KR100309309B1 (ko) 2001-11-15

Family

ID=21778257

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980045323A KR100309309B1 (ko) 1998-01-30 1998-10-28 단일클록사이클동안슈퍼스칼라프로세서에서복수의저장인스트럭션완료를용이하게하는방법및시스템

Country Status (6)

Country Link
US (1) US6192461B1 (ko)
EP (1) EP0933697A2 (ko)
JP (1) JP3155519B2 (ko)
KR (1) KR100309309B1 (ko)
CN (1) CN100557562C (ko)
TW (1) TW408269B (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6721874B1 (en) * 2000-10-12 2004-04-13 International Business Machines Corporation Method and system for dynamically shared completion table supporting multiple threads in a processing system
US6957323B2 (en) * 2001-11-14 2005-10-18 Elan Research, Inc. Operand file using pointers and reference counters and a method of use
US6862639B2 (en) * 2002-03-11 2005-03-01 Harris Corporation Computer system including a receiver interface circuit with a scatter pointer queue and related methods
US6941428B2 (en) * 2002-09-25 2005-09-06 International Business Machines Corporation Memory controller optimization
US20040193846A1 (en) * 2003-03-28 2004-09-30 Sprangle Eric A. Method and apparatus for utilizing multiple opportunity ports in a processor pipeline
US7366851B2 (en) * 2004-08-19 2008-04-29 International Business Machines Corporation Processor, method, and data processing system employing a variable store gather window
CN100367213C (zh) * 2004-09-30 2008-02-06 黄英哲 具有自动备份和还原寄存器内数据的系统和方法
US8713286B2 (en) * 2005-04-26 2014-04-29 Qualcomm Incorporated Register files for a digital signal processor operating in an interleaved multi-threaded environment
KR100723212B1 (ko) 2005-12-09 2007-05-29 엘지전자 주식회사 화면 분할 표시 기능을 구비한 전자 단말기 및 그 화면표시 방법
US7774563B2 (en) * 2007-01-09 2010-08-10 International Business Machines Corporation Reducing memory access latency for hypervisor- or supervisor-initiated memory access requests
US7765384B2 (en) * 2007-04-18 2010-07-27 International Business Machines Corporation Universal register rename mechanism for targets of different instruction types in a microprocessor
CN100583030C (zh) * 2007-12-29 2010-01-20 中国科学院计算技术研究所 一种risc处理器及其数据访存方法
US9104532B2 (en) * 2012-12-14 2015-08-11 International Business Machines Corporation Sequential location accesses in an active memory device
CN103984530B (zh) * 2014-05-15 2016-08-17 中国航天科技集团公司第九研究院第七七一研究所 一种提高store指令执行效率的流水线结构及方法
US10372458B2 (en) * 2015-04-01 2019-08-06 Huawei Technologies Co., Ltd Method and apparatus for a self-clocked, event triggered superscalar processor
US20170364356A1 (en) * 2016-06-16 2017-12-21 International Business Machines Corporation Techniques for implementing store instructions in a multi-slice processor architecture
CN107480209A (zh) * 2017-07-28 2017-12-15 上海德衡数据科技有限公司 一种基于空时自适应处理的多路数据存储和处理系统原型
CN116880908B (zh) * 2023-09-07 2023-11-10 北京开源芯片研究院 一种指令处理方法、装置、电子设备及可读存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02183333A (ja) * 1989-01-10 1990-07-17 Mitsubishi Electric Corp データ処理装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4594660A (en) * 1982-10-13 1986-06-10 Honeywell Information Systems Inc. Collector
US5621896A (en) * 1994-06-01 1997-04-15 Motorola, Inc. Data processor with unified store queue permitting hit under miss memory accesses
US5696955A (en) * 1994-06-01 1997-12-09 Advanced Micro Devices, Inc. Floating point stack and exchange instruction
DE69506623T2 (de) * 1994-06-03 1999-07-22 Motorola, Inc., Schaumburg, Ill. Datenprozessor mit einer Ausführungseinheit zur Durchführung von Ladebefehlen und Verfahren zu seinem Betrieb
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
US5926645A (en) * 1997-07-22 1999-07-20 International Business Machines Corporation Method and system for enabling multiple store instruction completions in a processing system

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02183333A (ja) * 1989-01-10 1990-07-17 Mitsubishi Electric Corp データ処理装置

Also Published As

Publication number Publication date
US6192461B1 (en) 2001-02-20
EP0933697A2 (en) 1999-08-04
KR19990066800A (ko) 1999-08-16
JP3155519B2 (ja) 2001-04-09
TW408269B (en) 2000-10-11
CN100557562C (zh) 2009-11-04
JPH11282678A (ja) 1999-10-15
CN1224871A (zh) 1999-08-04

Similar Documents

Publication Publication Date Title
KR100309309B1 (ko) 단일클록사이클동안슈퍼스칼라프로세서에서복수의저장인스트럭션완료를용이하게하는방법및시스템
US6247106B1 (en) Processor configured to map logical register numbers to physical register numbers using virtual register numbers
KR100335745B1 (ko) 고성능의 추론적인 오정렬 로드 연산
US5913049A (en) Multi-stream complex instruction set microprocessor
US5860107A (en) Processor and method for store gathering through merged store operations
US5611063A (en) Method for executing speculative load instructions in high-performance processors
US5546597A (en) Ready selection of data dependent instructions using multi-cycle cams in a processor performing out-of-order instruction execution
JP3714961B2 (ja) ロード/ストアオペレーションのout−of−order実行の制御
US6119223A (en) Map unit having rapid misprediction recovery
JP3919802B2 (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
US5881307A (en) Deferred store data read with simple anti-dependency pipeline inter-lock control in superscalar processor
US5748934A (en) Operand dependency tracking system and method for a processor that executes instructions out of order and that permits multiple precision data words
US5664137A (en) Method and apparatus for executing and dispatching store operations in a computer system
US5913054A (en) Method and system for processing a multiple-register instruction that permit multiple data words to be written in a single processor cycle
US6260134B1 (en) Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
JPH07334364A (ja) スーパースカラマイクロプロセッサおよびropを処理する方法
US5805849A (en) Data processing system and method for using an unique identifier to maintain an age relationship between executing instructions
JP2682812B2 (ja) オペレーションの処理システム及び方法
US5778248A (en) Fast microprocessor stage bypass logic enable
US6425072B1 (en) System for implementing a register free-list by using swap bit to select first or second register tag in retire queue
KR100322149B1 (ko) 고성능 추론적 스트링/다중 연산 방법
US6230262B1 (en) Processor configured to selectively free physical registers upon retirement of instructions
US6581155B1 (en) Pipelined, superscalar floating point unit having out-of-order execution capability and processor employing the same
JP2020536308A (ja) 単一のcamポートを使用する分割された順序変更キューを備える読み込み/格納ユニット
US6115730A (en) Reloadable floating point unit

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

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee