KR100248903B1 - 수퍼스칼라마이크로프로세서에서의 적재 및 저장연산처리방법 및 시스템 - Google Patents

수퍼스칼라마이크로프로세서에서의 적재 및 저장연산처리방법 및 시스템 Download PDF

Info

Publication number
KR100248903B1
KR100248903B1 KR1019950701204A KR19950701204A KR100248903B1 KR 100248903 B1 KR100248903 B1 KR 100248903B1 KR 1019950701204 A KR1019950701204 A KR 1019950701204A KR 19950701204 A KR19950701204 A KR 19950701204A KR 100248903 B1 KR100248903 B1 KR 100248903B1
Authority
KR
South Korea
Prior art keywords
load
data
address
instruction
instructions
Prior art date
Application number
KR1019950701204A
Other languages
English (en)
Other versions
KR950703325A (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 KR950703325A publication Critical patent/KR950703325A/ko
Application granted granted Critical
Publication of KR100248903B1 publication Critical patent/KR100248903B1/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, 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61KPREPARATIONS FOR MEDICAL, DENTAL OR TOILETRY PURPOSES
    • A61K47/00Medicinal preparations characterised by the non-active ingredients used, e.g. carriers or inert additives; Targeting or modifying agents chemically bound to the active ingredient
    • A61K47/30Macromolecular organic or inorganic compounds, e.g. inorganic polyphosphates
    • A61K47/32Macromolecular compounds obtained by reactions only involving carbon-to-carbon unsaturated bonds, e.g. carbomers, poly(meth)acrylates, or polyvinyl pyrrolidone
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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, look ahead
    • G06F9/3824Operand accessing
    • 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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Abstract

본 발명은 수퍼스칼라 RISC 아키텍쳐 환경에서 메모리 또는 I/O에 대한 판독 및 기록에 필요한 적재 및 저장 연산을 관리하기 위한 시스템 및 방법을 제공한다. 이 작업을 수행하기 위해, 적재 저장 유니트가 제공되는데, 그 주 목적은 명령어 실행 유니트에 의해 사용하기 위해 가능한 한 빠르게 적재 데이터를 가져오는 것이 가능할 때마다 적재 요청을 비순서적으로 수행하는 것이다. 적재 연산은 어드레스 충돌 및 기록 보류가 없는 경우에만 비순서적으로 수행될 수 있다. 어드레스 충돌은 이전의 명령어가 기록이 되는 메모리 위치에 적재가 요청될 때 발생한다. 기록보류는 이전의 명령어가 저장 연산을 요청하고, 그 저장 어드레스는 아직 계산되지 않은 경우를 말한다. 데이터 캐쉬 유니트는 정렬되지 않은 데이터 8 바이트를 복귀시킨다. 적재 저장 유니트는 이 데이터를 명령어 실행 유니트로 복귀되기 전에 적절하게 정렬시킨다. 그러므로, 적재 저장 유니트의 3가지 주요 작업은 (1) 캐쉬 요청을 비순서적으로 처리하고, (2) 어드레스 충돌을 검출하고, (3) 데이터를 정렬시키는 것이다.

Description

[발명의 명칭]
수퍼스칼라 마이크로프로세서에서의 적재 및 저장 연산 처리 방법 및 시스템
[관련 출원에 대한 참조]
본 발명은 본 발명의 양수인에게 양도된 다음 출언과 관련되어 있다 : 1991년 7월 8일 Nguyen 등에 의해 출원된 발명의 명칭이 "EXTENSIBLE RISC MICROPROCESSOR ARCHITECTURE인 미합중국 특허 출원 제 07/727,058호 및 그 연속 출원인 1992년 1월 8일 출원된 미합중국 특허 출원 제 07/817,809호, 이들 출원은 본 명세서에 참조로써 병합되어 있다.
[발명의 배경]
[발명의 분야]
본 발명은 일반적으로 수퍼스칼라 마이크로프로세서의 설계에 관한 것으로서, 특히 비순서적(out-of-order)으로 명령어를 실행하는 마이크로프로세서에서의 적재(load) 및 저장(store) 연산을 처리하기 위한 방법 및 시스템에 관한 것이다.
[관련 기술의 설명]
수퍼스칼라 RISC(Reduced Instruction Set Computer) 프로세서에서의 주요 고려 사항은 병렬 및 비순서적 실행 시 고유의 의존도(dependency)로 인한 데이터 에러를 초래하지 않고 병렬 및 비순서적으로 복수의 명령어를 어떻게 실행하는가에 관한 것이다. RISC 프로세서를 위한 가장 간단한 명령어 발생 방식은 프로그램 순서대로 발생(순서적 발생 : in-order issue)하고 그와 동일한 순서로 기록(순서적 완료 : in-order completion) 하는 것이다.
비순서적 완료 방식은 순서적 완료 방식 보다 복잡하지만, 동일한 형태의 연산에 있어서 수퍼스칼라 프로세서의 성능을 향상시킨다. 예를 들어, 비순서적 완료 방식은 적재 또는 부동 소수점 연산과 같은 긴 대기 시간을 요하는 연산의 성능을 향상시키기 위해 이용된다. 최대로 모든 기능 유니트 내의 파이프라인 스테이지의 총 수까지의 명령어 수가 기능 유니트에서 실행 상태에 있게 되도록 허용된다. 기능 유니트가 하나의 결과를 계산하는데 한 사이클 이상 걸릴 때 명령어 발생이 저지되지 않기 때문에 명령어가 비순서적으로 완료될 수도 있다. 결과적으로, 기능 유니트는 이미 그 후속 명령어가 완료된 후에 명령어를 완료할 수도 있다. 다음의 코드 시퀀스를 고려해 보자. 여기서 "op"는 연산을 나타내고 "Rn"은 번호가 붙은 레지스터를 나타내며, ":="는 대입(assignment)을 나타낸다.
R3:=R3 op R5(1)
R4:=R3+1(2)
R3:=R5+1(3)
R7:=R3 op R4(4)
여기서, 비록 명령어가 일반적으로 비순서적으로 완료될 수도 있다고 하더라도, 제1 명령어의 대입은 제3 명령어의 대입 이후에는 완료될 수 없다. 제1 및 제3 명령어를 비순서적으로 완료하는 것은 레지스터 R3에 홀수의 틀린 값을 남겨두게 되고, 예를 들어 제4 명령어가 틀린 오퍼랜드 값을 받게 되도록 야기할 가능성이 있다. 제3 명령어의 결과는 제1 명령어에 대한 "출력 의존도(output dependency)"를 가지며, 제3 명령어는 이 코드 시퀀스의 올바른 출력 값을 발생하도록 제2 명령어 이후에 완료되어야 한다. 그러므로, 그 결과라 계산이 더 오래 걸리는 이전의 명령어에 의해 후에 중복 기록될 수도 있다면 제3 명령어의 발생은 저지되어야 한다.
비순서적 완료는 보다 높은 성능을 초래하지만 보다 많은 하드웨어, 즉 데이터 의존도 로직을 필요로 한다. 데이터 의존도 로직은 비순서적 완료 시 더욱 복잡해지게 되는데, 이것은 이 로직이 모든 파이프라인 스테이지 내의 모든 명령어와 디코드된 명령어 사이의 데이터 의존도를 검사하기 때문이다. 하드웨어는 또한 결과가 올바른 순서로 기록되도록 보장해야 한다. 이와 대조적으로, 순서적 완료에 있어서는 의존도 로직이 실행 중인 소수의 명령어와 디코드된 명령어 사이의 데이터 의존도를 검사하게 되고, 결과는 자연적으로 올바른 순서로 기록된다. 비순서적 완료는 또한 기능 유니트가 결과 버스와 레지스터-파일 기록 포트를 중재할 필요성을 발생하게 되는데, 그것은 동시에 완료할 수 있는 모든 명령어를 충족시킬 정도로 충분하지 못할 수도 있기 때문이다.
더욱이, 비순서적 완료는 명령어 예외(exception)를 처리하는 것을 더욱 어렵게 만든다. 명령어는 주어진 조건하에서 예외를 발생하며, 그 명령어는 하드웨어 단독으로 적절하게 실행될 수 없다.
순서적 발생 프로세서는 디코드된 명령어가 자원 충돌(resource conflict)을 발생하거나 미완료 명령어에 대한 참(true) 의존도 또는 출력 의존도를 갖게될 때마다 명령어의 디코딩을 중지한다. 그러므로이 프로세서는 비록 하나 또는 그 이상의 명령어가 실행가능할 수도 있다 하더라도, 자원 충돌 또는 의존도가 있는 명령어를 지나 선독(look-ahead)할 수가 없다. 종래의 해결책은 명령어가 즉시 실행될 수 있는지에 관계없이 그 명령어를 계속해서 디코드하도록 실행 스테이지로부터 디코더를 분리하는 것이다. 이 해결책은 디코드 스테이지와 명령어 스테이지 사이에 버퍼(소위, "명령어 윈도우")를 제공함으로써 실현된다.
선독 기능(look-ahead)을 위해, 프로세서는 윈도우 내에 룸이 존재하는 한 명령어를 디코드하여 명령어 윈도우에 배치하고 또한 이와 동시에 실행될 수도 있는 명령어(즉, 자원 충돌이나 의존도가 없는 명령어)를 찾기 위해 윈도우 내의 명령어를 검사한다. 명령어 윈도우는 명령어 저장소(pool)를 제공하고 그러므로 프로세서에 선독 기능을 부여하게 되는데, 이 선독 기능은 명령어 윈도우의 크기와 프로세서의 명령어 페치(fetch) 유니트(IFU)의 용량에 의해 제한을 받는다. 이것은 명령어가 그 원래의 프로그램 순서에 거의 관련 없이 윈도우로부터 발생될 수 있기 때문에 명령어의 발생이 비순서적으로 이루어질 수 있도록 허용한다. 명령어 발생 프로그램에 대한 제한 조건은 단지 프로그램이 올바르게 작용하는 것을 보장하는데 요구되는 것뿐이다.
어떤 특정 명령어에 대한 발생 제한 조건은 순서적 발생 시와 거의 동일하다. 즉, 자원 충돌 및 의존도가 없을 때 명령어가 발생된다. 비순서적 발생은 동시실행을 위해 명령어를 찾는 기회를 향상시키면서 발생에 이용 가능한 보다 큰 명령어 셋트를 프로세서에 제공한다. 그러나, 비순서적 명령어 발생 기능은 비순서적 명령어 완료 기능이 출력 의존도 제한 조건을 초래한 만큼의 추가적인 발생 제한조건을 초래한다.
이것을 이해하기 위해 다시, 전술한 코드 시퀀스의 예를 고려해 보자. 제3 명령어의 대입은 제2 명령어가 실행을 시작할 때까지는 완료될 수 없다. 그렇지 않으면, 제3 명령어는 올바르지 않게 제2 명령어의 제1 오퍼랜드를 중복 기록할 수도 있다. 제3 명령어의 결과는 제2 명령어의 제1 입력 오퍼랜드에 대한 "반(反)-의존도(anti-dependency)"를 갖는다고 한다. 용어 반-의존도는 제한 조건이 참 의존도의 제한 조건과 유사하다는 사실을 말한다(역으로는 제외). 제1 명령어가 제2 명령어가 이용하는 값을 발생하는 대신에, 제2 명령어가 제1 명령어가 이용하는 값을 파기하는 값을 발생하게 된다. 이런 현상을 방지하기 위해, 프로세서는 제2 명령어가 시작될 때까지는 제3 명령어를 발생하지 않아야 된다. 제2 명령어는 제1 명령어에 의존하기 때문에, 제3 명령어도 또한 제3 명령어가 독립적으로 할지라도 제1 명령어가 완료되는 것을 대기해야 한다.
반-의존도는 주로 명령어가 비순서적으로 발생할 수 있을 때에 관련되어 있다. 저지된 명령어의 입력 오퍼랜드는 정상적인 연산 중에 후속 명령어에 의해 파기될 수 있다. 그러나 스칼라 프로세서에 있어서는, 종종 예외 조건을 정정하고 문제가 되는 명령어를 제시도함으로써 명령어 예외가 처리된다. 만일 이 명령어가 비순서적으로 완료되었다면, 그것이 회수(retire)될 때 그 입력 오퍼랜드가 후속 명령어에 의해 중복 기록되었을 가능성이 있다. 이런 문제점은 정확한 인터럽트를 지원하는 프로세서에서는 발생될 수 없다. 이런 해결책은 프로세서가 명령어 오퍼랜드의 카피(copy)의 재개시를 허용하도록 유지되는 것을 필요로 할 수도 있다.
프로그램 명령어에 의해 수행되는 2개의 통상적인 연산은 적재 및 저장 연산이다. 일반적으로, 적재 및 저장 연산은 각각 메모리 위치(location)를 판독 및 수정(modify)한다. 다른 프로그램 명령어에 있어서는 적재 및 저장이 비순서적으로 수행될 수 있다. 비록 적재 및 저장이 동시에 디코드될 수 있다고할지라도, 통상적으로는 한 사이클 당 오직 한번의 저장이 발생한다. 데이터-캐쉬(data-cache)를 사용하는데 있어서 통상적으로 저장 연산 보다 적재 연산에 우선권이 주어지는데, 그것은 프로세서가 계산을 계속할 필요가 있는 값을 적재 연산이 발생할 가능성이 많기 때문이다. 만일 저장이 데이터-캐쉬에 대해 적재와 충돌하게 되면, 저장 명령어는 통상적으로 저장이 수행될 수 있을 때까지 저장 버퍼에서 유지된다. 더욱이, 저장은 통상적으로 다른 저장에 대해 프로그램 시퀀스의 순서대로 수행되며, 적재를 포함하여 모든 이전의 명령어가 완료된 후에만 수행되며, 적재를 포함하여 모든 이전의 명령어가 완료된 후에만 수행된다. 이것은 데이터-캐쉬에서 프로세서의 정순서적 상태를 유지시키게 되는데, 그 이유는 캐쉬 갱신(update)은 그렇게 하는 것이 절대적으로 정확하게 될 때까지는 수행되지 않기 때문이다. 저장 버퍼는 저장 명령어를 올바른 순서대로 유지하고, 이전의 명령어가 완료될 때까지 저장 명령어의 완료를 연기하는데 도움을 준다.
저장 명령어는 모든 이전의 명령어가 완료될 때까지 유지되고 적재 명령어는 프로세서에서 계산에 필요한 값을 발생하기 때문에, 저장 명령어에 대해 적재 명령어를 프로그램 순서대로 유지하는 것을 성능에 뚜렷한 부정적인 영향을 미친다. 만일 모든 성행하는 저장 명령어가 완료될 때까지, 즉 가장 최근의 저장에 선행하는 모든 명령어가 완료될 때까지 적재 명령어가 대기한다면, 그 적재 데이터에 의존하는 적재 명령어 다음의 모든 명령어도 또한 대기한다. 이러한 성능상의문제를 피하기 위해 적재 명령어는 저장 버퍼에서 대기하고 있는 선행 저장 명령어를 바이패스 하도록 허용되며, 적재 데이터는 후속 계산에 이용될 수 있도록 허용된다.
적재 명령어가 이전의 저장 명령어를 바이패스할 수 있을 때, 적재 명령어가 아직 수행되지 않은 이전의 저장 연산으로부터 데이터를 얻어야할 필요성이 있을 수도 있다. 그러면 프로세서는 모든 이전의 완료되지 않은 저장 명령어의 가상(virtual) 메모리 어드레스(가상 어드레스는메모리 관리 유니트에 의한 어드레스 변환이 적용되기 전에 명령어에 의해 직접 계산된 어드레스이다.)에 대하여 적재 명령어의 가상 메모리 어드레스를 비교함으로써, 그 적재 명령어가 이전의 저장 명령어에 대해 갖고 있을 수도 있는 참 의존도를 검사한다. 논의를 위해, 2개의 다른 가상 어드레스가 동일한 물리적 위치를 액세스하는 것을 불가능하게 하도록 각각의 가상 어드레스에 대해 유일한 사상(mapping)이 이루어진다고 가정하자. 이와 같은 가정으로 가상 어드레스 비교는 물리적 메모리 위치 사이의 모든 의존도를 검출한다. 적재 어드레스가 이전의 저장 명령어의 어드레스에 부합하거나 또는 어떤 이전의 저장 명령어의 어드레스가 아직 계산되지 않은 경우에 그 적재 명령어는 저장 명령어에 대한 참 의존도를 갖는다(이 경우에 의존도는 검출될 수 없으며, 그러므로 통상적으로 의존도가 존재하는 것을 가정된다). 만일 적재가 저장에 의존적이라면, 그 적재는 데이터-캐쉬에 의해 충족될 수 없는데, 그것은 데이터-캐쉬가 올바른 값을 갖고 있지 않기 때문이다. 만일 저장 명령어의 유효 어드레스가 후속 적재 명령어의 어드레스와 일치한다면, 그 적재 명령어는 저장 데이터가 유효한 경우 저장 명령어의 완료를 기다리지 않고 저장 버퍼로부터 직접 충족된다.
전술한 논의가 의미하는 바와 같이, 적재 및 저장은 메모리 위치에 대한 반-의존도 및 출력 의존도를 피하는 방식으로 수행된다. 적재 명령어는 이전의 저장 명령어를 바이패스할 수 있으나 저장 명령어는 적재 명령어를 바이패스할 수 없으며, 그러므로 적재와 저장 사이에는 반-의존도가 존재할 수 없다. 저장 명령어는 통상적으로 다른 저장 명령어에 대해 프로그램 순서대로 발생되며, 그러므로 저장 명령어 사이에는 출력 의존도가 존재할 수 없다.
통상적으로, 적재 명령어는 데이터 캐쉬에서 다른 적재 명령어에 대해 프로그램 순서대로 수행된다. 이 기술에 숙련된 살마들은 이전의 적재 명령어에 의해 프로세서에 공급되는 데이터가 새로운 적재 명령어에 의해 공급되는 데이터 보다 계산에 필요로 될 가능성이 많기 때문에 적재 명령어가 비순서적으로수행될 수 있도록 허용하는 것이 성능상 장점이 없거나 아주 작은 것으로 생각해 왔다.
전술한 개념 중 일부에 대한 보다 상세한 설명은 본원에 참조로서 병합된 다음의 문헌을 포함하여 많은 참조 문헌에 나타나 있다. John L. Hennessy 등의 "Computer Architecture-A Quantitative Approach"(캘리포니아 산 마테오의 Morgan Kaufman 출판사, 1990) 및 Mike Johnson의 "Superscalar Microprocessor Desig"(뉴져지 잉글우드 클리프의 Prentice-Hall사(특히 8장, 이중 일부는 위에서 재현됨)).
[발명의 요약]
본 발명은 수퍼스칼라 RISC 환경에서 메모리 또는 입출력단(I/O)에 대한 판독 및 기록에 필요한 적재 및 저장 연산을 관리하기 위한 시스템을 제공한다. 또한 본 발명은, 명령어 기억 장치로부터 명령어를 가져오고 예정된 다수의 명령어를 명령어 버퍼에 제공하기 위한 명령어 페치 유니트를 포함하는 프로그램 스트림 실행을 위한 마이크로프로세서 시스템을 제공한다. 이 시스템은 또한 명령어 페치 유니트에 결합되어 명령어 버퍼로부터의 다수의 명령어를 비순서 방식으로 실행하기 위한 실행 유니트를 포함한다.
실행 유니트는 메모리에 비순서적으로 적재 요청을 하고 정순서적으로 저장 요청을 하기에 적합하게 되어 있는 적재/저장 유니트(load store unit)를 포함하고 있다. 그러므로, 본 발명의 적재/저장 유니트의 주 목적은 가능한 한 빠르게 명령어 실행 유니트로 적재 데이터를 가져오는 것이 타당할 때마다 비순서적으로 적재요청을 하기 위한 것이다. 적재 연산은 오직 어드레스 충돌(collision)이나 기록보류(write pending)가 없는 경우에만 비순서적으로 수행될 수있다. 어드레스 충돌은 이전의 명령어가 기록이 되는 메모리 위치에 판독이 요청될 때 발생한다. 기록 보류는 이전의 명령어가 저장 연산을 요청하고 저장 어드레스는 아직 계산되지 않은 경우를 말한다. 데이터 캐쉬 유니트는 8 바이트의 정렬되지 않은 데이터를 복귀(return)시킨다. 적재/저장 유니트는 명령어 실행 유니트(IEU)로 복귀되기 전에 데이터를 적절하게 정렬시킨다. 그러므로, 적재/저장 버퍼의 3가지 주요 임무는 (1) 비순서적 캐쉬 요청의 처리, (2) 어드레스 충돌의 검출, (3) 데이터의 정렬이다.
적재/저장 유니트는 실행되고 있는 다수의 명령어와 관련된 다수의 어드레스를 관리하기에 적합한 어드레스경로와, 실행되고 있는 다수의 어드레스 각각의 사이에 어드레스 충돌 및 기록 보류가 존재하고 있는지 검출하여 신호하기 위한 어드레스 충돌 수단을 포함하고 있으며, 여기서 적재/저장 유니트는 어드레스 충돌 및 기록 보류가 검출되지 않는 경우에 적재 요청을 수행한다. 적재/저장 유니트는 또한 메모리 시스템 및 명령어 실행 유니트에 대해 적재 및/또는 저장 데이터를 전달하기 위한 데이터 경로를 포함하고 있으며, 이 데이터 경로는 메모리 시스템으로부터 복귀되는 데이터를 정렬시켜, 쿼드-워드 경계(quad-word boundary)에 속하지 않은 데이터가 올바른 정렬 상태로 메모리 시스템으로부터 명령어 실행 유니트로 복귀되도록 허용한다.
[도면의 간단한 설명]
본 발명은 첨부된 특허 청구의 범위에 특정하여 기재되어 있다. 본 발명의 전술한 장점 및 다른 장점은 첨부 도면과 함께 하는 다음의 상세한 설명을 참조함으로써 보다 잘 이해될 수 있게 된다.
제1도는 본 발명이 동작하는 마이크로프로세서 아키텍처의 블록도를 도시하는 도면.
제2도는 적재/저장 유니트(LSU)(205)를 포함하고 있는 명령어 실행 유니트(IEU)(107)의 일반적인 블록도를 도시하는 도면.
제3도는 LSU 어드레스경로(220)의 블록도를 도시하는 도면.
제4도는 LSU(205)에 위치된 어드레스 충돌 블록의 개략적 블록도를 도시하는 도면.
제5도는 LSU 데이터 경로(210)의 개략적 블록도를 도시하는 도면.
제6도는 캐쉬 라인 크로스가 있는 정렬되지 않은 정수 적재의 한 예를 도시하는 도면.
제7a도 내지 제7h도는 LAU(205)의 연산의 한 예를 도시하는 도면.
[발명의 상세한 설명]
제1도를 참조하면, 본 발명의 한 양호한 실시예에 다른 도면 부호 100으로 명명된 마이크로프로세서 아키텍처가 제공되어 있다. 이 시스템 아키텍처(100)는 호스트 프로세서(105), 캐쉬 제어 유니트 및 메모리(CCU)(11), 가상 메모리 유니트(VMU)(115), I/O 서브 시스템(190), 메모리 제어 및 인터페이스 유니트(MCU)(120) 및, 인터리브 메모리 뱅크(160a, 160b, 160c)(여기서 주 메모리(160)은 인터리브 연산을 위해 구성됨)를 포함하고 있다.
주 메모리(160)는 외부 데이터 버스(163)를 통해 MCU(120)에 접속된다. 본 발명은 멀티프로세서 환경에서 동작하도록 고려되었으며, 다른 프로세서는 메모리 버스(163)에 접속되게 된다.
호스트 프로세서(105)는 주 메모리(160)내의 어드레스 또는 위치에 저장된 소프트웨어 명령어를 실행한다. 이들 소프트웨어 명령어는 프로그램 카운터의 제어 하에 순차적으로 호스트 프로세서(105)로 전달된다. 종종, 명령어의 일부는 호스트 프로세서(105)가 하나 또는 그 이사의 주변 I/O 장치(135)를 억세스 하도록 요구한다.
MCU(120)는 CCU(110)(D-캐쉬(119)와 I-캐쉬(판독 전용)(118), IOU(150)과 주 메모리(160)사이에 데이터 및 명령어가 전달(판독 또는 기록)되도록 하는 회로이다. MCU(120)는 스위치 중재 유니트(132)를 갖고 있는 스위치 네트워크(145), 데이터; 캐쉬 인터페이스 회로(117), 명령어 캐쉬 인터페이스 회로(112), I/O 인터페이스 회로(155) 및, 포트 중재 유니트(134)를 각각 포함하고 있는 포트로서 알려진 하나 또는 그 이상의 메모리 포트 인터페이스 회로(148)를 포함하고 있다.
스위치 네트워크(145)는 마스터 장치와 슬레이브 장치 사이의 통신 수단이다. 예를들어, 스위치 네트워크(120)에 대해 가능한 마스터 장치는 D-캐쉬(119), I-캐쉬(118), 또는 I/O 제어기 유니트(IOU)(150)가 있으며, 가능한 슬레이브 장치로는 메모리 포트(148) 또는 IOU(150)가 있다. 스위치 네트워크(145)의 기능은 CCU(110)(즉, I-캐쉬(118) 및 D-캐쉬 119)와 IOU(150)로부터 다양한 명령어 및 데이터 요청을 수신하는 것이다.
이들 유니트는 버스 요청 장치(requester)로서 언급될 수도 있다. 이들 요청을 수신한 후에, 스위치 중재 유니트(132)와 포트 중재 유니트(134)는 요청의 우선 순위를 정하고 적절한 메모리 포트로 전달한다(명령어 어드레스에 따라). 다음에, 포트(148)는 필요한 타이밍 신호를 발생하고, 외부 메모리 버스(162)에 필요한 데이터를 송신 및 수신한다.
명령에 페치 유니트(IFU)(106)와 명령어 실행 유니트(IEU)(107)는 호스트 프로세서(105)의 주요 동작 구성 요소이다. VMU(115), CCU(110) 및 MCU(120)는 IFU(106)와 IEU(107)의 기능을 직접 지원하기 위해 제공된다. IFU(106)는 일차적으로 명령어의 페치 및 IEU(107)에 의한 실행 보류 명령어의 버퍼링 책임이 있으며, 일반적으로는 다음 명령어의 페치에 사용될 차기 가상 어드레스의 계산 책임이 있다. 동시에, 명령어는 명령어 버스(101)를 통해 I-캐쉬(118)로부터 IFU(106)에 의해 페치된다. 명령어는 "버킷(buckets)" 또는 4-명령어 셋트에 위치된다. 명령어 셋트의 전달은 제어 버스(102)를 통해 제공되는 제어 신호에 의해 IFU(106)와 CCU(110)사이에서조정(Coordinated)된다. 페치될 명령어 셋트의 가상 어드레스는 IFU(106)에 의해 IFU 제어 및 어드레스 버스(103)를 통해 VMU(115)에 제공된다. VMU(115)에의 억세스를 위한 중재는 IFU(106)와 IEU(107) 모두가 VMU(115)를 공통적인 공유 자원으로서 이용한다는 사실에 의해 유발된다. 아키텍처(100)의 양호한 실시예에 있어서, 가상 어드레스의 물리적인 페이지 내의 어드레스를 정의하는 하위 비트(low order bit)는 IFU(106)에 의해 제어 라인(102)을 통해 IFU(106)로 직접 전달된다. IFU(106)에 의해 공급되는 가상 어드레스의 가상 상위 비트(high order bit) 버스(103, 104)의 어드레스 부에 의해 대응되는 물리적 페이지 어드레스로의 변환을 위해 VMU(115)로 제공된다. IFU(106)에 대해, 이 물리적 페이지 어드레스 VMU(115)로 변환 요청이 이루어진 후 내부 프로세서 사이클의 반 사이클 동안에 VMU(115)로부터 어드레스 제어 버스(111)를 통해 CCU(110)로 직접 전달된다.
IFU(106)에 의해 페치된 명령어 스트림은 다음에 명령어 스트림 버스(108)를 통해 IEU(107)로 제공된다. 제어 라인(109)을 통해 IFU(106)와 IEU(107) 사이에서는 제어신호가 교환된다.
IEU(107)는 양방향 데이터 버스(112)를 통해 D-캐쉬(215)로부터 데이터를 저장 및 검색한다. IEU(107) 데이터 억세스를 위한 전체 물리적 어드레스는 제어 버스(113)의 어드레스부를 통해 CCU(110)로 제공된다. IEU(107)는 가상 데이터 어드레스를 CCU(110)에의 제공에 적합한 물리적 어드레스로 변환하기 위한 자원으로서 VMU(115)는 대응하는 물리적 어드레스를 버스(104)를 통해 IEU(107)로 복귀(return)시킨다.
CCU(110)는 호스트 프로세서(105)와 주 메모리(160) 사이의 버퍼로서 작용하도록 이용된다. 일반적으로, CCU(110)는 호스트 프로세서(105)에 가까이 위치되어 가장 최근에 액세스된 코드 또는 데이터를 홀드하는 소형의 고속 메모리이다. CCU(110)는 일반적으로 데이터에 대한 물리적 어드레스가 정의된 요청이 명령어 및 데이터캐쉬(118, 119)로부터 적절하게 충족될 수 있는지 결정하는 통상적인 고-레벨 기능을 수행한다. 억세스 요청이 명령어 또는 데이터 캐쉬(118, 119)에의 억세스에 의해 적절하게 충족될 수 있는 경우에, CCU(110)는 데이터 버스(101, 113)를 통한 데이터 전달을 조정 및 수행한다. 데이터 억세스 요청이 명령어 또는 데이터 캐쉬(118, 119)로부터 충족될 수 없는 경우에, CCU(110)는 주 메모리(160)의 판독 또는 기록 억세스가 요구되는지 식별하고, 각각의 요청에 대한 발신지 및 수신지 캐쉬(118, 119)를 식별하기 위한 충분한 제어 정보와 요청 동작이 IFU(106) 또는 IEU(107)에 의해 발생된 바와 같은 최종적인 데이터 요청과 상호 관련되도록 허용하기 위한 추가적인 식별 정보와 함께 대응하는 물리적 어드레스를 MCU(120)에 제공한다.
제2도는 IEU(107)데이터 경로의 고레벨 블록도를 도시하고 있다. IEU(107)의 목적은 가장 짧은 시간 동안에 가능한 한 많은 명령어를 실행하기 위한 것이다. IEU(107)는 레지스터 파일(250), 적재/저장 유니트(LSU)(205), 명령어 버스(IBUS)(225), 일련의 기능 유니트(260, 262, 230), 즉시 변위(immediate displacement) 버퍼(255), 세그먼트 베이스(segment base) 발생기(257) 및, 기록버스(270)를 포함하고 있다. LSU(205)는 두 부분 즉, LSU 어드레스 경로(220)와 LSU 데이터 경로(210)로 나누어진다.
수퍼스칼라 제어 블록(도시 안됨)을 데이터 의존도 검사를 수행하고 원하는 기능 유니트(260, 262, 230)가 이용 가능한 지를 결정하기 위한 검사를 함으로써 명령어가 발생될 수 있는 때를 결정한다. 일단 수퍼스칼라 제어 블록이 명령어 발생을 결정하면, IBUS(225)는 발생된 명령어에 의해 요구되는 데이터를 검색(레지스터 파일(250), 바이패스 데이터(280, 281) 또는 즉시 데이터(258)로부터) 한다. IBUS(225)는 기능 유니트(260, 262, 230)로 전달될 데이터를 선택하는 다수의 멀티플렉서로 구성된다. IBUS(225)는 데이터를 한 쌍의 버스, 즉 A버스와 B 버스로 전달한다. 선택된 데이터는 명령어에 의해 사용될, 또는 실행되고 있는 명령어의 연산에 의해 요구될 기능 유니트(260, 262, 230)를 결정함으로써 A 버스 또는 B버스 상에 위치된다.
대부분의 명령어 입력 및 출력은 수 개의 레지스터 파일 중 하나로부터 오거나 또는 그 파일에 저장된다. 양호한 실시예에서, 각각의 레지스터 파일(250)(예를 들어, 독립적인 정수, 부동 소수점, 부울 레지스터 파일)은 32개의 실제(real) 엔트리(254)와 8개 임시 버퍼의 그룹(252)를 갖고 있다. 명령어가 완료되면 (용어 "완료"는 연산이 완료되고 오퍼랜드가 그 수신지 레지스터에 기록될 준비가 되어 있다는 것을 의미한다). 그 결과는 임시 버퍼(252)내의 사전 할당된 위치에 저장된다. 이 결과는 후에 실제 레지스터(254)내의 적절한 장소로 이동된다. 임시 버퍼(252)로부터 실제 레지스터(254)로의 결과의 이동은 "회수(retirement)"로 불린다. 한번에 하나 이상의 명령어가 회수될 수도 있다. 호수는 컴퓨터 프로그램 카운터를 포함하는 머신의 "공식적인 상태(Official State)"를 갱신하는 것을 포함한다.
명령어는 IFU(106)으로부터 "버킷"으로 불리는 4개 그룹 내의 명령어 디코드 FIFO(first-in first-out)레지스터 스택 기억장치(도시 안됨)(본원에ㅐ서 명령어 윈도우로서 언급되게 됨)를 통해 IEU(107)로 보내진다. 버킷은 4개의 유니트, 즉 적재 유니트, 저장 유니트 및 2개의 실행 유니트로 나누어진다. 시스템(100)이 적재, 저장, 실행 또는 이들 세 가지의 조합을 수행할 수 있는 명령어로 동작하기 때문에 버킷이 이들 4개의 유니트로나누어졌다. 그러므로 본 발명은 모든 3가지 상황을 처리할 수 있는 버킷을 제공한다.
IEU(107)는 한번에 최대 4개의 명령어 버킷을 디코드하고 스케줄링한다. 명령어 윈도는 4개 버킷에 총 16개의 명령어를 저장한다. IEU(107)는 명령어 윈도우를 검사하고 매 사이클마다 IEU(107)는 명령어 윈도우로부터 최대 수의 명령어 발생을 시도한다. 버킷 내의 모든 명령어가 실행되면 그 결과를 프로세서의 레지스터 파일(250)에 저장되고, 그 버킷은 명령어 윈도우로부터 분출되고 새로운 버킷이 명령어 윈도우에 저장된다.
일단 명령어가 발생되면, 레지스터 파일(250)내의 레지스터는 엑세스될 수 있다. 임시 레지스터(252)는 이전의 명령어로부터 발생된 데이터에 대한 데이터 의존도를 가진 명령어가 실행될 때 억세스 된다. 레지스터 파일(250)로부터의 데이터는 데이터 라인(254)을 통해 IBUS(225)로 전달된다.
DAFU(230)는 LSU(205)에 의해 사용하기 위한 32 비트 선형 어드레스를 계산한다. DAFU(230)는 다른 많은 어드레싱 모드를 지원한다. 또는 DAFU(230)는 데이터가 쿼드-워드 경계를 교차하는 경우에 두 사이클이 걸리는 데이터의 제1 및 최종 어드레스를 계산한다. 어드레스를 형성하기 위해 최대 4개의 성분이 부가된다. 이들 성분은 세그먼트 베이스, 베이스 레지스터, 기준화된(Scaled)인텍스 레지스터 및 변위값이다. 세그먼트 베이스는 원하는 메모리 세그먼트의 개시 어드레스를 포함한다. 베이스 및 인덱스 레지스터는 레지스터 파일(250)로부터의 32 비트 레지스터이다. 인덱스 레지스터는 1배, 2배, 3배 또는 8배로 승산함으로써 기준화된다. 변위값은 명령어에서 주어지는(즉시) 상수 값이다. 어드레스 계산에 최대 호환성을 제공하면 이들 필드 중 어느 것이 생략될 수 있다.
세그먼트 베이스는 세그먼트 레지스터 블록(257)으로 부터 온다. 세그먼트 베이스 발생기(257)는 메모리에서 데이터가 어떻게 구분(partitioned)될 수 있는가를 나타내는 값을 발생하고, 그 값을 데이터 라인(266)을 통해 DAFU(230)로 전달한다. 변위값은 즉시 변위 버퍼(255)로부터 온다. 즉시 변위 버퍼(255)는 라인(259)을 통해 DAFU(230)로, 또한 데이터 라인(258, 259)을 통해 IBUS(225)로 각각 즉시 데이터를 전달한다. DAFU(230)와 VMU(115)는 LSU(205)에 적재 및/또는 저장 요청의 어드레스를 제공한다. LSU(205)는 이들 요청을 처리하여 결국 요청된 데이터를 기록 버스(270)로 복귀시킨다. 기록 버스(270)는 우선 순위 계획에 근거하여 레지스터 파일(250)로 래치하기 위한 데이터(LSU)(205)에 의해 제공된 데이터, 또는 기능 유니트(260, 262)에 의해 제공된 데이터)를 선택하는 일련의 멀티플렉서로 구성된다. 데이터는 기록 버스(270)로부터 라인(275, 276)을 통해 레지스터 파일(250)로 전달된다. 적재 및/또는 저장 명령어로부터의 데이터는 항상 최고 우선 순위가 주어진다. 때때로, 2개의 명령어가 연이어 발생되고 이들 명령어가 서로 의존하는 경우에는, IEU(107)는 데이터를 레지스터 파일(250)에 저장하는 것을 바이패스하고 즉시 IBUS(225)로 래치할 수도 있다. 이것은 데이터 라인(280, 291)을 통해 수행된다.
결과적으로, 데이터를 대기하고 있는 자원은 데이터가 레지스터 파일(250)을 통해 흐르도록 대기하기 위해 한 사이클을 낭비할 필요가 없다.
명령어가 실행 연산과 저장 연산을 포함하는 경우에 데이터 라인(275, 276)으로부터의 데이터도 또한 LSU 데이터 경로(210)로 직접 제공된다. 적재 및 실행연산을수행하기 위해 LSU 데이터 경로(210)로 직접 전달될 수 있다. 이것은 저장 데이터를 위해 임시 레지스터 파일(252)에 액세스한 것으로 평가되며 명령어 실행시간을 증가시키게 된다.
LSU(205)의 주 목적은 가능한 한 빠르게 적재 데이터를 IEU(107)로 가져오는 것이 타당할 때마다 비순서적으로 CCU(110)에 적재 요청을 하기 위한 것이다. 적재 연산은 어드레스 충돌 및 기록 보류가 없는 경우에만 비순서적으로 수행될 수 있다. 어드레스 충돌은 이전의 명령어가 기록이 되는 메모리 위치에서 판독이 요청될 때 발생한다. 기록 보류는 이전의 명령어가 저장 연산을 요청하고 저장 어드레스는 아직 계산되지 않은 경우를 말한다. LSU(205)는 두 부분, 즉 데이터 경로(210)와 어드레스 경로(220)로 나누어진다. 어드레스 경로(220)는 DAFU(230), VMU(232) 및 CCU(110)와 인터페이스되고, 데이터 경로는 기록 버스(270), CCU(110), DAFU(230) 및 IBUS(225)와 인터페이스된다. LSU의 세 가지 두 임무는 (1) 비순서적 캐쉬 요청 (2) 어드레스 충돌 검출 및 (3) 데이터 정렬이다.
각각의 명령어 버킷은 동일한 어드레스에 대해 적재 및 저장(그 사이에 약간의 다른 연산과 함께)연산을 포함할 수 있고, 적재만을 포함하거나, 저장만을 포함하거나, 또는 적재와 저장 모두를 포함하지 않을 수도 있다. 그러므로, LSU(205)는 최대로 4개의 적재 연산과 4개의 저장 연산을 선택한다. 본 발명은 양호한 실시예에서 사용되는 명령어 셋트는 다음과 같은 복잡한 연산을 허용하는 CISC 명령어 셋트이다.
a) R1<-R1+[R2+(R3*2)+3]
b) [R2]<-[R2]OR R4
여기서, [X]는 어드레스 X에 위치된 메모리 오퍼랜드를 나타낸다. 양호한 실시예에서 명령어 디코드 유니트(도시 안됨)는 이들 CISC 명령어를 다음과 같이 RISC 시퀀스로 분류한다.
a) LOAD[R2+(R3*(2)+3]->Temp Register
Execute R1+Temp->R1
b) LOAD[R2]->Temp Register
Execute Temp OF R4-> Temp Register
STORE Temp Register to address[R2]
두 경우 모두, DAFU(230)는 메모리 오퍼랜드의 어드레스를 계산하지만, 적재 및 저장이 동일한 어드레스를 공유하기 때문에 한 명령어 버킷 당 오직 한번의 어드레스 계산만이 필요로 된다. CISC 명령어를 RISC 명령어로 디코딩하는 것이 대한 설명은 본원에 참조로써 포함된, 1992년 3월 31일자 출원된, 발명의 명칭이 "CISC to RISC Instruction Translation Alignment and Decoding"인 미합중국 특허 출원 제 07/857,599호(대리인 참조 번호 sp032)를 참조하자. 제3도는 LSU(205)의 어드레스 경로(220)의 상세한 블록도를 도시하고 있다. 적재 명령어는 IEU(107)에 의해 비순서적 실행을 위해 명령어 윈도우로부터 발생되지만, 반면에 저장 명령어는 항상 정순서로 발생된다. 모든 오퍼랜드가 유효하고 어드레스 계산을 위해 DAFU(230)가 이용 가능하면 즉시 적재 및/또는 저장을 위한 어드레스가 계산된다. LSU(205)는 DAFU(230)로부터 물리적 어드레스를 얻기 전에 캐쉬 요청을 할 수 있다. 그러나, 만일 차기 클럭 사이클에 의해 DAFU(230)와 VMU(115)로부터 물리적 어드레스가 제공되지 않으면, 캐쉬 요청은 취소된다. 만일 캐쉬 요청이 취소되면 이것은 후에 재 발생되어야 한다.
단지 하나의 어드레스만이 각각의 명령어 버킷에 필요로 되며 적재 어드레스 및 저장 어드레스 모두로서 작용한다. 각각의 명령어 버킷에 대해, 2개의 32-비트 어드레스가 어드레스 버퍼(310-313)중 하나에 저장되는데, 하나는 억세스의 제1 바이트를 위한 것이고, 하나는 억세스의 최종 바이트를 위한 것이다. 하위 12비트는 DAFU(230)로부터 준비되면 임시 버퍼(305)로 래치된다. 다음 사이클에서 상위 20비트가 VMU(115)로부터 준비되면 모든 32비트가 적절한 어드레스 버퍼(즉, 어드레스 1 또는 어드레스 2)로 래치된다. 어드레스 계산은 명령어 순서대로 수행되지 않으며, 대신에 레지스터 의존도가 해소되었을 때 수행된다. 어드레스 변환 후에, 어드레스가 유효하다는 것을 나타내는 유효 비트(도시 안됨)가 명령어의 어드레스 버퍼(310-313)에서 설정된다. 두 어드레스 모두를 유지시키는 것에는 2가지 이유가 있는데, 즉 어드레스 충돌 검출과 페이지 크로싱을 위한 캐쉬 요청이다.
LSU(205)에 의해 이용되는 어드레스 IFU(106)에 이용되는 가상 어드레스와 반대로 물리적 어드레스이다. IFU(106)는 물리적 어드레스를 발생하기 위해 CCU(110)와 VMU(115)사이의 조정을 의존하여 가상 어드레스로 동작하지만, IEU(107)는 LSU(205)로 하여금 물리적 어드레스 모드에서 직접 동작하도록 요구한다. 이와 같은 요구는 물리적 어드레스를 중복하여 데이터 적재 및 저장 연산을 포함할 수도 있는 비순서적으로 실행된 명령어가 존재하는 경우에 데이터 보전성(integrity)을 보장하기 위해 필요하다. 데이터 보전성을 보장하기 위해, LSU(205)는 저장 명령어가 IEU(107)에 의해 회수될 때까지 명령어에 의해 제공되는 데이터를 버퍼링한다. 결과적으로, LSU(205)에 의해 버퍼링되는 저장 데이터는 오직 LSU(205)에서만 유일하게 존재할 수도 있다. 실행되었지만 회수되지 않은 저장 명령어와 동일한 물리적 어드레스를 조회하는 적재 명령어는 저장 명령어가 실제로 회수될 때까지 지연된다. 이때, 저장 데이터는 LSU(205)에 의해 CCU(110)로 전달되어 CCU 데이터 적재 연산의 실행에 의해 즉시 적재될 수도 있다.
전술한 바와 같이, DAFU(230)에 의한 어드레스 계산은 한 클럭 사이클에서 이루어지고, VMU(132)에 의한 어드레스 변환은 차기 사이클에서 이루어진다. 만일 어드레스가 적재를 위한 것이라면, 캐쉬 요청이 이루어진다. 만일 어드레스가 저장을 위한 것이면, LSU(205)는 저장을 수행하기 전에 회수 신호가 전송될 때까지 대기한다. 어드레스 계산의 제1 사이클에서는 이미 CCU(110)로 적재 요청이 이루어질 수 있다. 이때 어드레스의 하위 12-비트는 CCU(110)로 보내지고, 상위 20-비트(페이지 번호를 나타냄)는 어드레스 변환 후 다음 사이클에서 CCU(110)로 보내진다.
적재 저장 어드레스 경로(220)가 자유로운 상태에 있으면, 라인(330)을 통해 캐쉬(110)로 즉시 요청이 이루어질 수 있다. 적재 저장 어드레스 경로(220)에 현재 보류 중인 적재 및/또는 저장 어드레스가 없기 때문에, 어드레스 충돌 또는 기록 보류의 위험은 절대로 없다. 그러므로 캐쉬(110)로 즉시 요청이 이루어질 수 있다.
다수의 멀티플렉서를 포함하고 있는 블록(340)은 어드레스 버퍼(310-313)로 부터 캐쉬 요청에 대한 어드레스를 선택하기 위해 이용된다.
LSU(205)는 캐쉬(110)에 요청을 하기 위해 어드레스 버퍼(즉, 예약 스테이션)(310-313)를 이용한다. 4개의 어드레스 버퍼(310-313)(예약 스테이션으로도 언급됨)는 중앙 명령어 윈도우(도시 안됨)에 포함된 4개의 버킷에 대응한다. IEU(107)가 디코드 유니트(도시 안됨)로부터 새로운 버킷을 요청하면, 어드레스 버퍼(310-313)중 하나가 예약(reserved)된다. 어드레스 버퍼(310-313)는 명령어 번호에 따라 할당된다. 이력 포인터(historical pointer)는 가장 새로운 명령어를 표시하도록 갱신된다. 이때, 적재 및/또는 저장 연산에 포함된 데이터의 크기에 따라 명령어가 적재, 저장, 또는 둘 다 포함하는지, 또는 전혀 포함하고 있지 않는지 알게 된다. 어드레스 버퍼(310-313)는 대응하는 명령어가 IEU(107)에 의해 회수될 때 할당 해제된다. 할당 해제(deal location)이후에, 디코드 유니트(도시 안됨)로부터 새로운 명령어 버킷이 수신된다. 적재 바이패스 및 비순서적 적재 실행을 위해서 저장에 대한 적재 의존도(어드레스 충돌)가 있는지 알아야 한다. 적재 의존도는 어드레스 충돌이나 보류 저장 어드레스에 의해 표시된다. 이전의 명령어가 저장 연산을 요청한 메모리 위치에서 적재 연산이 요청될 때 적재 의존도가 발생한다. 어드레스 충돌 검출을 위해서는 적재 명령어의 제1 어드레스가 각각의 이전의 저장 명령어에 대한 2개의 어드레스(제1 및 최종 어드레스)에 대해 비교가 이루어질 필요가 있다. 어드레스의 최종 바이트와의 추가적인 비교는 저장 명령어가 쿼드-워드 페이지 경계를 교차하거나 정렬되지 않을 수도 있기 때문에 요구된다. 의존도 검 출 오류를 최소화하기 위해 데이터의 크기에 따라 어드레스 비트의 마스킹(masking)이 수행된다. 만일 적재 데이터가 쿼드-워드 페이지 경계를 교차하거나 정렬되지 않을 수도 있기 때문에 요구된다. 의존도 검출 오류를 최소화하기 위해 데이터의 크기에 따라 어드레스 비트의 마스킹(masking)이 수행된다. 만일 적재 데이터가 쿼드-워드(64비트) 경계를 교차하면, 양호한 실시예에서는 적재 의존도를 가진 것을 추정하는데, 그 이유는 각각의 저장 명령어의 2개의 어드레스에 대해 적재 명령어의 제2 어드레스를 검사하기 위해 비교기가 이용될 수 없기 때문이다. 충돌이 검출되면, 적재 연산은 충돌이 있는 저장 연산이 CCU(110)로 보내질 때까지 대기해야 한다. 보류 저장 어드레스는 저장 어드레스가 아직 유효하지 않고 그래서 어드레스를 알게 될 때까지 적재 의존도로 추정되어야 한다는 것을 의미한다.
제4도는 LSU(205)에 의해 사용되는 어드레스 충돌 검출 블록(400)의 개략도를 도시하고 있다. 어드레스 비교 로직은 최하위 비트 0-4가 마스킹 된 후 2개의 어드레스를 비교한다. 마스킹 후에 만일 어드레스가 정확하게 부합한다면, 그 사이에는 충돌이 존재한다. 각각의 비교에 있어서, 두 연산 중 가장 큰 오퍼랜드 크기가 마스킹을 제어하는데 이용된다. 0과 4사이에서 최하위 비트가 각 어드레스로 부터 마스킹 된다. 상기 회로(400)는 각각의 어드레스 버퍼(410-413)에 대해 한번씩 4번 복제된다는 것을 주목하지(제4도는 어드레스 버퍼(310)에 대한 어드레스 충돌 검출 블록을 도시한 것이다).
각각의 적재 명령어에 대한 제1 어드레스(405, 406)는 각각 다른 쌍의 어드레스(407, 408)에 대하여 비교된다. 두 비교 결과는 그 유효 비트(419-424)와 AND 연산되고, 다음에 OR연산되어 함께 어드레스 매치단(match)(430a, 430b, 430c)을 발생하게 된다. 어드레스 매치단(430)은 다음에 명령어 번호 비교단(425-427) 및 저장 비트(431-433)와 AND 연산되어 충돌 검사단(450a, 450b, 450c)을 발생하게 된다. 명령어 번호 비교단(425-427)은 두 명령어 사이의 상대적 에이지(age)를 나타낸다. 예를 들어 명령어 비교단(425)은 어드레스 버퍼(310)내의 제1 명령어와 어드레스 버퍼(311)내의 제2 명령어 사이의 상대적 에이지를 나타낸다. 만일 제2 명령어가 제1 명령어 보다 더 오래되었다면 충돌이 존재하지 않는다. 이들 3개의 충돌 검사단(450)은 검사되고 있는 특정 적재 명령어에 대한 어드레스 충돌 신호(460)를 발생하도록 함께 OR 연산된다.
어드레스 충돌을 검출할 때, 각 적재 명령어의 개시(제1) 어드레스는 각 저장 명령어의 제1 및 제2 어드레스와 비교된다. 적재 또는 저장 연산은 1부터 10바이트까지 어느 곳이든 액세스될 수도 있으므로, 충돌이 검출되도록 보장하기 위해서 약간의 어드레스 마스킹이 수행된다. 이것은 신호(470-475)를 통해 수행되며, 최하위 비트 0, 2, 3 또는 4는 서로에 대해 비교가 이루어지기 전에 두 어드레스 모두로부터 마스킹된다. 만일 마스킹된 어드레스가 정확하게 부합(매치)되면, 어드레스 충돌이 가능하다. 마스킹을 위한 비트 번호(0, 2, 3, 4)는 제1 어드레스의 2개의 최하위 비트와 함께, 그 어드레스가 비교되고 있는 두 명령어의 오퍼랜드 크기에 의존한다. 제1 어드레스의 2개의 최하위 비트는 잘못 검출되는 충돌의 수를 제한하기 위해 사용되어야 한다. 가장 큰 오퍼랜드 크기는 다음과 같이 마스킹으로 이용한다.
오퍼랜드 크기 마스킹을 위한 비트 수
1 바이트 0 비트 마스크
2 바이트 1 비트 마스크(어드레스가 0에서 종료하는 경우)
2 비트 마스크(어드레스가 01에서 종료하는 경우)
3 비트 마스크(어드레스가 11에서 종료하는 경우)
4 바이트 2 비트 마스크(어드레스가 00에서 종료하는 경우)
3 비트 마스크(어드레스가 1또는 10에서 종료하는 경우)
8 바이트 3 비트 마스크
10 바이트 4 비트 마스크
부가적으로, 적재 연산이 쿼드-워드 경계를 교차하는 어느 경우라도 어드레스 충돌이 있는 것을 추정한다. 이것은 적재 명령어의 제1 어드레스만이 저장 어드레스에 비교되고, 어드레스 충돌이 검출되지 않을 수도 있기 때문이다.
하드웨어에 사용되는 비교기의 수를 배가함으로써, 이런 제한은 없어질 수 있다. 만일 저장 어드레스가 쿼드-워드 경계를 교차하면, 충돌이 검출되게 된다.
다음의 예는 왜 마스킹이 요구되는 지를 보여주고 있다.(아래의 모든 수는 2진수이다). 적재(LOAD)의 어드레스 2는 충돌 검사에 사용되지 않기 때문에 주어지지 않았다.
예 1 :
연산 어드레스1 어드레스 2 크기 마스킹
적재 ....1001 -- 2바이트 2 비트
저장 ....1000 ....1101 4바이트 2 비트
만일 적재 어드레스 1001이 마스킹 없이 1000 및 1011과 비교되었다면, 비록 저장 연상이 바이트1000, 1001 및 1011에 실제적으로 기록하더라도 충돌은 검출되지 않게 된다. 만일 2개의 LSB가 마스킹되면, 다음 어드레스 결과가 된다.
연산 어드레스 1 어드레스 2
적재 ....1000 --
저장 ....1000 ....1000
예 2 :
연산 어드레스1 어드레스 2 크기 마스킹
적재 ....0100 -- 4바이트 2 비트
저장 ....0001 ....1000 8바이트 3 비트
만일 3개의 LSB가 마스킹되면, 다음의 어드레스 결과가 초래되고 어드레스 충돌이 검출되게 된다.
연산 어드레스 1 어드레스 2
적재 ....0000 --
저장 ....0000 ....1000
전술한 바와 같이, LSU(205)는 캐쉬 요청을 필요로 하는 최대 4개의 적재 명령어와 4개의 저장 명령어까지 윈도우로부터 선택할 수 있다. 이들 적재 및 저장 명령어는 CCU(110)에 대해 서로 경쟁하게 되며, 후술하는 바와 같이 그 사이의 선택이 이루어진다.
저장 명령어는 모든 다른 명령어에 대해 프로그램 순서대로 수행되어야 한다. 저장 명령어 회수를 위해 IEU(107)로부터 신호가 도달하면 CCU(110)로 저장요청이 발생된다. 이 신호는 모든 이전의 명령어가 종료되었으며 예외나 잘못 예측된 브랜치를 포함하지 않았다는 것을 의미한다. 저장은 머신의 상태를 취소 불가능하게 변경시키기 때문에 저장 명령어는 보다 초기에 수행될 수 없으며, 예외나 브랜치가 발생하지 않았다는 것을 검증하는 것이 필수적이다. 저장을 지연시키는 것은 버킷의 회수와 명령어 디코드 유니트(도시 안됨)로부터 차기의 디코드된 버킷을 받아들이는 것을 지연시키게 되기 때문에 데이터 캐쉬(119)를 이용하는데 있어 적재보다는 저장에 우선 순위가 부여된다.
적재는 이전의 저장에 의존하지 않으므로 대부분의 적재 명령어는 비순서적으로 발생될 수 있다. 이것에 대한 예외로서는 메모리-사상 I/O로부터의 판독과 같은 측면 효과가 있는 적재가 있다. 본 발명은 양호한 실시예는 메모리-사상 입력/출력(I/O) 서브 시스템을 사용한다. 일부 I/O 장치는 판독에 의해 액세스할 때 상태를 변경하는데, 예를 들어, 일부 FIFO버퍼는 스스로 장치-상태 레지스터 클리어링을 초래하는 차기 데이터 항목으로 배열한다. 이런 형태의 시스템에서는 적재 바이패스가 위험스런 동작이 된다. 잘못 예측된 브랜치나 예외로 인해 바이패스된 적재 명령어가 잘못 발생될 수도 있다. 바이패스된 적재는 시스템 상태를 잘못 수정하도록 허용될 수 없다.
이러한 문제는 적재 저장 유니트가 이런 형태의 요청을 정순서로 만들도록 구성함으로써 해결된다. 적재/저장 유니트는 또한 캐쉬 요청에 수반되는 데이터가 캐쉬 가능 한지의 여부를 통지하기 위한 메커니즘을 제공한다. 이것은 또한 프로세서로 하여금 이 데이터가 캐쉬 메모리로 즉시 라이트-드루우(write-through)해야 된다는 것을 의미하는 라이트-드루우가 된다는 것을 캐쉬(110)에 통지하도록 허용한다. 시스템 상태를 변경시키는 외부 판독 억세스는 이와 같은 캐쉬 불가능 억세스의 일종이지만, 전술한 문제점은 이 데이터가 캐쉬 불가능하다는 것을 캐쉬(110)에 통지하는 것과 함께 정순서로 요청을 하므로써 해결된다. 그러므로, 적재 바이패스는 아주 피하는 것이 아니라 프로세서가 캐쉬 불가능한 적재의 바이패스를 방지할 수 있다.
이것은 때대로의 캐쉬 불가능한 적재에 대해 잘못된 동작을 야기하지 않고 대부분의 적재 연산이 바이패스의 장점을 취할 수 있도록 한다. 이것은 또한, 메모리가 변경되기 전에 발생하는 예외가 없도록 보장하는데 필요하다. 만일 적재가 저장에 대한 의존도를 갖고 있지 않으면 "저장의 적재 바이패스"(load bypassing of stores)가 발생하게 된다.
그러므로 각각의 적재는 2비트: 페이지-캐쉬-디스에이블 및 페이지-라이트-드루우와 관련을 갖고 있다. 이것은 VMU(115)나 IEU(107)로부터 올 수 있다.
저장 데이터는 두 곳 중 한 곳에서 온다. 첫 번째로, 이 데이터는 64-비트 정수 저장 동안에 정수 데이터 버스 상의 LSU(205)로 직접 발생될 수 있다.
두 번째 방식은 정수 및 부동 소수점 기능 유니트의 결과를 스누핑(Snooping)함으로써 이루어진다. 이것은 실행의 결과가 명령어에 대한 저장 데이터가 되는 공통적인 "실행 후 저장(execute-then-store)" 시퀀스를 지원하기 위해 행해진다. 이로 인해 "[R2]<[R2] OR R4"와 같은 CISC 명령어의 결과가 명백하게 LSU(205)로 발생되지 않고 저장될 수 있도록 허용된다.
LSU(205)는 단지 CCU(110)로 한 사이클 당 하나의 요청을 할 수 있으며, 저장 연산에 우선 순위가 부여된다. 저장 연산은 이 명령어가 회수 준비가 되어 있다는 것을 기록 제어장치가 LSU(205)에 통지하자마자 CCU(110)로 보내진다. 다음 우선 순위는 어드레스 충돌이나 기록 보류가 없는 어드레스버퍼(310-313)내의 유효 어드레스를 가진 가장 오래된 적재 연산에 부여된다. 명령어 사이의 상대적인 에어지는 버퍼 위치 및 버퍼 포인터의 값에 의해 결정된다. 마지막으로, 우선 순위는 DAFU(230)로부터 방금 도달한 새로운 적재 연산에 부여된다. 이와 같은 마지막 경우에 있어서는, 요청이 이루어진 후 필요한 경우 적재 요청이 취소될 때까지 어드레스 충돌 및 기록 보류가 검사되지 않게 된다.
때때로 캐쉬 실패(miss)가 발생하게 된다. 저장 명령어에 대해, CCU(110)는 이 상황을 조정하며, 이 실패는 LSU(205)에 대해서는 완전하게 투명적(transparent)이다. 적재 명령어에 대해, LSU(205)는 캐쉬 실패를 통지 받으며, 데이터가 복귀되기 전에 지연이 관찰된다. 다음에 LSU(205)는 캐쉬 실패가 발생했고 그래서 그 데이터를 대기하고 있는 명령어가 취소될 수 있다는 것을 IEU(107)에 신호한다.
만일 원하는 데이터가 캐쉬 라인 경계를 교차하면, 적재 연산에 대해 2번 혹은 3번의 캐쉬 억세스가 이루어져야 한다. 이들 요청은 각각이 한 사이클에서 연속적으로 이루어진다. 양호한 실시예에서, 캐쉬 라인은 8바이트 넓이이며 000으로 끝나는 어드레스에서 정렬된다. 111에서 끝나는 어드레스에서 시작되는 80-비트데이터 억세스에는 3개의 캐쉬 요청만이 요구된다. 데이터가 데이터 캐쉬(119)로 부터 복귀될 때 이 데이터를 쉬프트 및 래치하기 위해 적재 정렬기(550)(제5도를 참조하여 후술됨)가 제공된다.
대부분의 적재/저장 유니트는 수신지 레지스터에 적합하도록 데이터를 제로-확장(zero-extend) 또는 부호-확장(sign-extend)한다. 그러나 본 발명의 양호한 실시예는 수신지 레지스터의 초기값을 유지하고, 단지 그 일부만을 변경시킨다. 이것은 물론 8비트 또는 16비트의 크기를 가진 정수 적재 데이터에 대해서만 관련이 있다. 레지스터의 초기 내용(content)은 어드레스 계산시 LSU(205)로 보내진다. 다음에, 데이터 캐쉬(119)로부터의 적재 데이터가 초기 데이터와 합병된다.
제5도는 LSU 정수 데이터 경로(210)의 개략도를 도시하고 있다. LSU 데이터 경로(210)는 CCU(110) 및 IEU(107)에 대한 적재 및/또는 저장 데이터를 전달하는 책임을 갖고 있다. 데이터는 라인(290)을 통해 데이터 캐쉬(119)로부터의 적재 연산 중에, 또한 라인(275, 276, 277)을 통한 IEU(107)로부터의 저장 연산 중에 LSU 데이터 경로(210)에 들어간다. 데이터 라인(275, 276)은 기록 버스(270)를 통해 기능 유니트(260, 262)로부터의 LSU 데이터 경로(210)에 32비트 데이터를 제공하고, 라인(282)은 유효 어드레스 또는 합병 데이터를 제공한다. 유효 어드레스는 그 어드레스 위치에 위치된 데이터와 달리 명령어의 결과 자체가 어드레스일 때 LSU 데이터 경로(210)에 제공된다. 저장 데이터 라인(277)은 64비트 데이터를 LSU 데이터 경로(210)에 제공한다. 데이터는 각각 데이터 라인(290, 292)을 통해 데이터 캐쉬(119)나 IEU(107)로 복귀된다.
데이터 버퍼(520-526)는 데이터 캐쉬(119)에 대한 데이터 전달 중에 적재 및/또는 저장 데이터를 홀드하기 위해 제공된다. 각각의 데이터 버퍼(520-526)와 어드레스 버퍼(310-313)사이에는 1대1 대응 관계가 있다(또한 4개의 명령어 버킷에 대해서도). 각각의 어드레스버퍼(310-313)에 대해서는 LSU 데이터 경로(210)에 2개의 대응하는 데이터 버퍼들이 있는데, 하나는 정수 적재 및 정수 저장 데이터(8 바이트)를 위한 것(520-526)이고, 하나는 부동 소수점 적재 및 저장 데이터(10바이트)를 위한 것(540-546)이다. 본 발명은 부동 소수점 연산을 위한 독립된 LSU 데이터 경로를 갖고 있다. 부동 소수점 데이터 버퍼(540-546)의 동작은 정수 데이터 경로와 관련하여 설명된 바와 동일하다. 명령어는 정수 또는 부동 소수점이기 때문에, 2개의 유니트가 물리적으로 접속될 필요는 없다. 따라서 단지 정수 데이터 버퍼(520-526)의 동작에 대해서만 상세하게 후술되게 된다.
제어 라인(581, 587)은 각각 멀티플렉서(560, 565)를 통한 데이터 흐름을 제어하기 위해 제공된 것이다. 제어 라인(582-586)은 데이터 버퍼(520, 522, 524, 526)에 대한 데이터 흐름을 제어하기 위해 제공된 것이다.
적재 연산 동안에, 데이터는 라인(290)을 통해 데이터 캐쉬(119)로부터 LSU 데이터 경로(210)로 들어간다. 적재 데이터는 데이터를 정렬시키고(후술됨) 정렬된 적재 데이터를 멀티플렉서(530-536)로 전달하는 정렬 블록(550)으로 들어간다. 정렬된 적재 데이터는 다음에 데이터를 요청한 명령어에 따라 데이터 버퍼(520-526)중 하나로 래치된다. 저장 연산 동안에, 저장 데이터는 데이터 라인(275, 276, 277)을 통해 IEU(107)로부터 LSU 데이터 경로(210)로 들어가게 되며, 다음에 적절한 데이터 버퍼(520-526)로 래치된다.
일단 적재 및/또는 저장 데이터가 데이터 버퍼(520-526)내로 래치되면, 이 데이터는 라인(290)을 통해 데이터 캐쉬(119)나 라인(292)을 통해 IEU로 전송될 수 있다. 모든 4개의 데이터 버퍼(520-526)는 데이터를 멀티플렉서(560, 565)에 제공하며,이 멀티플렉서 LSU 데이터 경로(210)로부터 전달될 적절한 데이터를 선택한다.
종종, 저장 연산을 포함하는 명령어의 결과는 주 메모리(260)내로 저장되어야 한다. 그러므로, 명령어가 실행된 후에 그 결과는 데이터 라인(275, 276)을 통해 LSU 데이터 경로(210)에 직접 기록된다(먼저 레지스터 파일(250)에 결과를 저장하는 경우와는 다르다). LSU 데이터 경로(210)는 이 데이터를 그 명령어에 대한 회수 신호를 수신할 때까지 적절한 데이터 버퍼(520-526)에서 홀드한다.
간헐적으로 특정 명령어는 전체 수신지 레지스터에 걸쳐 저장하도록 의도되지 않는다. 이 경우에는, 데이터 라인(282)을 통해 LSU 데이터 경로(210)에 "합병데이터"가 제공된다. 예를 들어, 만일 명령어가 단지 8비트를 수신지 레지스터에 저장하기를 원하고 잔여 24비트는 레지스터에 보존(preserve)하고자 한다면, 합병 연산이 수행된다. 그러므로, 데이터 라인(282)은 수신지 레지스터의 초기값(즉, 합병 데이터)을 LSU 데이터 경로(210)에 공급하게 된다. 이 합병 데이터(즉, 수신지 레지스터의 내용)는 적절한 데이터 버퍼(520-526)내로 래치된다. 다음에, 새로운(적재) 데이터가 라인(290a)을 통해 복귀되어 정렬 블록(550)으로 들어간다. 이 정렬 블록(550)은 데이터를 정렬시켜 멀티플렉서(530-536)에 제공한다. 다음에, 적재 데이터는 합병 데이터를 홀드하고 있는 동안에 데이터 버퍼(520-526)로 래치된다. 일단 모든 데이터가 조립되면, 그 데이터는 적절한 메모리 위치(즉, 데이터 캐쉬(119)나 레지스터 파일(250))로 전달될 수 있다.
종래의 적재 저장 유니트에서는 통상적으로 어드레스가 일정한 경계로 정렬될 필요가 있다. 예를 들어, 32비트 데이터 억세스는 000에서 끝나는 어드레스를 가져야 한다. 그러나, 양호한 실시예의 컴퓨터 아키텍처에서는 8, 16, 32, 64 또는 80 비트 데이터의 정렬되지 않은 어드레스도 허용된다. 정렬되지 않은 어드레스를 갖는 것은 다음의 효과가 있다. (1) 저장에 대한 적재 의존도를 위한 추가적인 하드웨어가 요구되고, (2) 데이터가 2번의 어드레스 변환을 요하는 페이지 경계를 교차할 수도 있으며, (3) 한번의 적재에 복수의 캐쉬 억세스가 요구될 수도 있다.
CCU(110)로부터 복귀되는 적재 데이터는 8 바이트 길이이며, 정렬되어 데이터 버퍼(520-526)내의 적절한 위치에 배치되어야 한다. 때로는, 완전한 적재가 준비되기 전에 2개 도는 3개 셋트의 데이터가 복귀되어야 한다(예를 들어, 한번 이상의 캐쉬 억세스가 요구될 때). 또한 이들 데이터 셋트는 비순서적으로 복귀될 수도 있으며, 그래서 특수 처리가 요구될 수도 있다. 정수 데이터 정렬은 데이터 요청의 한 바이트에 각각 대응하는 8개의 8-입력 멀티플렉서(8비트 넓이)를 이용하여 처리된다. CCU(110)으로부터 적재된 데이터의 8바이트 중 어느 것이 적절한 데이터 버퍼(520-526)로 래치되어야 하는지 결정하기 위해 8비트 선택 라인이 사용된다. 또한, 데이터 버퍼(520-526)는 중복 기록될 수 있는 바이트를 제어하기 위해 바이트 인에이블 된다.
제6도는 캐쉬 라인 크로싱(교차)이 있는 정렬되지 않은 정수 적재 연산의 한 예를 도시하고 있다. 이 예에서는, 어드레스 XXXXXXX5로부터 4바이트 적재가 요청되었다. 그러나, 이 적재 요청은 캐쉬 라인을 교차하며, 결과적으로 2개의 적재 요청이 요구된다. 제1 캐쉬 요청이 데이터를 복귀시킨 후에, 데이터는 적재 정렬기(550)로 전달된다. 이 적재 정렬기(550)는 마지막 3바이트를 바이트 제로에 대하여 시프트하고, 이 마지막 3바이트는 적절한 데이터 버퍼(520-526)내로 래치된다. 데이터 버퍼의 마지막 바이트는 저장되지 않는다는 것을 주목하자. 일단 제2 캐쉬 요청으로부터 데이터가 복귀되면, 캐쉬 라인의 제1 바이트가 데이터 버퍼의 마지막 바이트로 래치된다. 또한 본 예에서는 캐쉬 라인이 정순서로 복귀되지만, 이것은 다른 순서로 복귀될 수도 있다.
부동 소수점 데이터 정렬도 10개의 8-입력 멀티플렉서가 사용된다는 것을 재외하고도 정수 데이터 정렬과 동일한 방식으로 작용한다.
LSU(205)는 적재 촉진(load forwarding)을 지원하지 않는다. 만일 적재가 저장에 의존적이면 이 적재 연산은 적재 요청을 하기 전에 저장 데이터가 캐쉬에 기록되는 것을 대기해야 한다. 그러나, 본 발명의 설계에 대해서는 적재 촉진 메커니즘을 구현하는데 방해가 되는 어떠한 것도 내재하지 않는다. 이 기술에 숙련된 사람은 적재 촉진을 구현하기 위한 필요한 하드웨어적 변경을 쉽게 할 수 있는 위치에 있다.
LSU(205)의 양호한 실시예는 다중처리 환경을 지원한다. 각각의 명령어는 적재 및/또는 저장 뿐만 아니라 로크(lock) 또는 로크 해제(unlock) 명령을 포함할 수 있다. 이들 신호는 캐쉬로 보내지며, 이 캐쉬는 데이터를 로크 하게 되고 메모리 및 I/O 서브시스템에 동일한 동작을 수행하도록 통지한다. 명령어 윈도우 내에 로크 또는 로크 해제 명령어가 존재하면, 이들 명령어에 대해서는 적재가 정순서로 수행되어야 하며, 즉 로크/로크 해제 명령이 있는 적재 연산을 먼저 수행하지 않고는 후속 적재 연산이 수행될 수 없다.
LSU(205)의 동작예
표 A에는 LSU(205)의 동작을 예시하는 간단한 프로그램이 도시되어 있다. 이 프로그램은 Intel 486 표기법으로 기록되어 있다. 3개의 레지스터가 사용되고 eax, ebx, ecx로 표기되어 있다. 적재 및/또는 저장될 데이터는 32비트의 넓이인 것으로 가정하자. 중괄호는 어드레스 위치를 나타낸다.
[표 A]
(1) mov ebx, [ecx]
(2) dec ebx
(3) of[eax], ebx
(4) (size_16) mov ebx, [eax+3]
코드의 제1 라인은 ecx에 저장된 데이터를 ebx로 이동시키며, 그러므로 이 명령어는 적재 연산을 포함한다. 제2 명령어는 레지스터 ebx내의 값을 감소시키며, 이 명령어와 관련된 적재 또는 저장은 없다. 제3 명령어는 eax에 저장된 데이터와 데이터 ebx의 논리적 OR 연산을 행하고 그것을 [eax]에 저장하며, 이 연산은 적재 및 저장을 포함한다. 마지막으로, 제4 명령어는 eax+3의 어드레스에 저장된 데이터의 16비트를 ebx로 이동시키며, 이 명령어는 적재 연산을 포함한다.
이 코드가 실행되기 전에, 레지스터 및 메모리는 다음 값을 포함하는 것으로 가정하자(모든 값은 hex로 되어 있다)
[표 B]
eax=0000_0100 [0100]=0000_4321
[0104]=FFFF_FFFF
ecx=0000_1201 [1200]=6500_01FF
[1204]=FFFF_FF87
다음의 표 C는 표 A에 도시된 명령어를 실행한 결과를 도시한다.
[표 C]
mov ebx, [ecx] EBX <-- [1201]=8765_0001
dec ebx EBX<-- 8765_0001.1=8765_0000
or[eax], ebx [EAX]<-- 0000_4321 or 8765_0000=8765_4321
(SIZE_16) mov ebx, [eax+3] EBX <-- [0100+3]=[0103]=FF87--> 8765_FF87
다음에는 표 A의 명령어의 실행에 대해 상세하게 설명되게 된다.
제7a도 내지 제7b도를 참조하면, LSU(205)의 대표적인 예가 도시되어 있다. 각각의 도면은 단일 사이클을 나타낸다(예를 들어, 제7a도는 사이클 1을 나타내고 제7b도는 사이클 2를 나타낸다). 모두 4개의 어드레스 버퍼(310-313)가 그 각각의 적재(701), 저장(702) 및 유효 비트(717)와 함께 도시되어 있다. 또한, 충돌 비트(710), 보류 비트(715) 및 크기 표시(705)가 있다. 어드레스 0100-0107 및 1200-1207의 현재 메모리 내용은 참조 번호 780으로 도시되어 있다. 블록(730)은 현재 캐쉬 요청을 나타낸다. 블록(740)은 CCU(110)으로부터 방금 복귀된 데이터를 도시한다. 블록(760)은 VMU(115)로부터 복귀되는 어드레스를 나타내고, 블록(770)은 DAFU(230)로부터 복귀되는 어드레스를 나타낸다. 적재 및 저장 비트는 정순서로 셋트되지만, 어드레스는 비순서적으로 LSU(205)에 제공될 수 있다. 블록(750)은 복귀된 데이터가 어떻게 물리적으로 정렬되는가를 보여주고 있다.
제7a도를 참조하면, 제1 명령어는 "mov ebx, [ecx]"이다. 초기에, ecx에 저장된 어드레스는 LSU 어드레스경로(220)로 전달되어야 한다. ecx에 저장된 어드레스, 즉 1201은 DAFU(230)로부터 임시 어드레스 버퍼(305)로 전달된다. 그러나, 전체 어드레스가 필요로 되지는 않는다. 단지 처음의 12비트와 최하위 3비트만이 임시 버퍼(305)로 전달되게 되는데, 그 이유는 상위 20 비트의 DAFU(230)로부터 VMU(115)로 전달되기 때문이다. 버킷 0내의 적재 비트는 mov 연산이 적재를 포함하고 있기 때문에 1로 셋트된다. 요청된 데이터는 32비트이다(블록(705)에서 011로 표시됨).
이것은 LSU(205)에서 어드레스의 제1 셋트이기 때문에, 어드레스 정보는 블록(730)에 도시된 바와 같이, 식별 정도(id)와 함께 즉시 CCU(110)으로 전송된다. LSU(205)는 복귀된 데이터가 관련되어 있는 명령어를 판단하기 위해 이 식별 정보를 이용한다. 임시 레지스터(305)가 사용되지만 LSU(205)는 VMU(115)에 의해 변환되고 있는 어드레스가 LSU(205)로 전달되는 것을 대기한다.
제2 명령어 "dec ebx"는 어드레스 버퍼 큐(queue)로 위치되었다. dec연산은 적재나 저장을 포함하지 않기 때문에, 어드레스 버퍼(311)와 관련된 적재 비트(701)와 저장 비트(702)는 0으로 셋트된다. 이 명령어에 대해서는 적재나 저장이 요구되지 않기 때문에 어드레스 계산이 필요하지 않다.
이제 제7b 도를 참조하면, eax에 저장된 어드레스의 제1 바이트는 레지스터 어드레스 1에 위치되었고, 어드레스의 최종 바이트는 어드레스 2에 위치되었다. 물론 둘 다 어드레스 버퍼(310)에 위치된다. 두 레지스터 모두(어드레스 1 및 어드레스 2)가 유효 어드레스를 포함하고 있기 때문에 유효 비트는 모두셋트되었다. 어드레스 1 및 어드레스 2는 상이한 시간에 어드레스 버퍼(310-313)로 래치될 수 있다는 것을 주목하자. 이런 현상은 VMU(115)로부터 2번의 변환이 요구되는 페이지 크로싱이 있을 때 발생한다.
제3 명령어는 "or[eax], ebx"이다. 제3 명령어에 관련된 정보(IEU(107)에 의해 보내짐)는 어드레스 버퍼(312)에 대응하는 적절한 블록 내로 들어간다. OR 명령어는 적재 및 저장 연산을 필요로 하기 때문에, 두 비트 모두 1로 셋트되었다. 요청된 데이터는 블록(705)에 표시된 바와 같이 32비트 길이이다. 또한, 제3 명령어와 관련된 적재 및 저장을 위한 어드레스는 블록(770)에 도시된 바와 같이 DAFU(230)에 의해 제공된다. 이 데이터에 대해서는 블록(730)에 도시된 바와 같이 캐쉬 요청이 이루어진다.
또한, 사이클 2동안에 제1 명령어에 대해 요청된 데이터는 캐쉬로부터 검색되어 레지스터(520)에 저장되었다. 그러나, 블록(730)에 도시된 복귀 데이터는 정렬되지 않은 데이터이다. CCU(120)는 어드레스 1200에서 시작되는 데이터 블록을 복귀시켰지만, 명령어는 1201에서 시작되는 32비트 데이터를 요청했다. 결과적으로, 복귀된 데이터는 블록(750)에 도시된 바와 같이 정렬되어야 한다. 복귀된 데이터는 LD-ALIGN을 00000010으로 셋트함으로써 2비트만큼 시프트되고 다음에, BYTE_SEL에 의해 데이터의 처음의 32비트가 선택된다. 이제, 제7c도를 참조하면, LSU(205)에는 블록(770)에 도시된 바와 같이 DAFU(230)에 의해 다음(차기) 어드레스가 제공된다. 제3 명령어와 관련된 어드레스 버퍼(312)로 래치된다. 유효 비트(717)는 모두 셋트된다. 제1 명령어는 그 연산을 완료(즉, 데이터가 CCU(110)으로 복귀되어 IEU(107)로 전송됨)되었기 때문에, 그 유효 비트는 이제 리셋트되었다(단지 예시 목적을 위해 버킷 넘버가 4로 리셋트 되었다. 양호한 실시예에서 포인터는 명령어의 상대적 에이지의 트랙을 유지한다). 제3 명령어는 eax에 저장된 어드레스의 페치를 필요로 한다. 일단 어드레스가 LSU(205)로 들어가면, 캐쉬 요청이 수행될 수 있다.
제4 명령어에 관한 정보, 즉 명령어가 적재 명령어이고 요청되는 데이터는 16비트 넓이(010으로 표시됨)라는 정보는 어드레스 버퍼(313)와 관련된 적절한 블록에 도시된 바와 같이 IEU(107)으로부터 도달된다. 그러나, 제4 명령어보다 오래된 저장 명령어(즉, 제3 명령어)가 존재한다. LSU(205)는 어떤 어드레스 버퍼가 가장 오래된 명령어 정보를 포함하고 있는지 결정하기 위해 포인터를 이용한다. 이 저장 명령어가 존재하기 때문에, 어드레스 버퍼(313)와 관련된 기록 보류 비트(715)가 셋트된다. 결과적으로, 이때에는 제4 명령어에 대해 캐쉬 요청이 발생될 수 없다.
CCU(110)는 블록(740)에 도시된 바와 같이 명령어 3을 위해 데이터를 LSU(205)로 복귀시킨다. 요청된 데이터는 어드레스 100에서 시작되기 때문에, 복귀된 데이터는 정렬될 필요가 없다. 단지 처음 32비트만이 BYTE-SEL에 의해 선택되고 데이터는 데이터 버퍼(256)로 래치된다.
제7d도를 참조하면, 명령어 4와 관련된 어드레스는 어드레스 버퍼(313)로 래치되고 대응하는 유효 비트는 셋트되었다. 다음에, 어드레스 충돌 연산이 수행된다. 명령어 4로부터의 어드레스 1은 명령어 3의 어드레스 1 및 어드레스 2와 비교되고, 그 결과로서 어드레스 충돌이 존재하는데 대한 결정이 이루어진다. 이와 같이, 어드레스 버퍼(313)와 관련된 충돌 비트(710)가 셋트된다. 충돌이 존재하기 때문에 사이클 4동안에 캐쉬 요청이 발생될 수 없다. 그러나, 캐쉬 요청은 수행될 수 없다 하더라도, 블록에 도시한 바와 같이 명령어 4에 대한 합병 데이터가 IEU(107)로부터 도달한다. 이 합병 데이터는 레지스터 ebx로부터 오는 데이터이다. 명령어 4가 단지 16비트 연산이기 때문에 이 합병 데이터가 요구된다. 이 합병 데이터는 데이터 버퍼(526)내로 래치된다.
제7e도를 참조하면, 기록 A 데이터(WRA-DATA)는 IEU(107)로부터 도달한다. WRA_DATA는 명령어 3으로부터의 OR연산의 결과를 나타낸다. 이 데이터는 데이터 버퍼(524)로 래치된다. 또한 사이클 5동안에는 블록(780)에 도시된 바와 같이 그다음 버킷, 즉 버킷 1이 회수된다. 특히, 회수-차기 비트(retire-next)는 차기 명령어가 회수 될 수 있다는 것을 나타내는 1로 셋트되고, retire-num 비트는 버킷 1내의 명령어가 회수되어야 한다는 것을 나타내는 1이 된다. 명령어 3과 명령어 4 사이에는 여전히 어드레스 충돌이 존재한다는 것을 주목하자.
제7f도를 참조하면, 버퍼(524)내의 데이터 값 87654321을 발생하기 위해 ebx내의 데이터와 OR연산되었다. 사이클 6동안에, 블록(785)에 도시된 바와 같이 제3 명령어가 회수된다. 명령어 3의 회수로 인해 LSU(205)는 제4 명령어와 관련된 충돌 비트(710)를 리셋트할 수 있게 된다. 블록(730)에 도시된 바와 같이, 메모리 위치 00000100(레지스터 eax에 저장된 어드레스)에 OR 연산에 의해 발생된 값을 저장하기 위해 캐쉬 요청이 이루어진다. 블록(780)에 도시된 바와 같이, 이 데이터 위치에 데이터가 저장되었다.
제7g도를 참조하면, 명령어 4는 메모리 위치 0103에 데이터(레지스터 eax+3의 처음 16비트)를 적재한다. 결과적으로, 블록(730)에 도시된 바와 같이 명령어 4와 관련된 적재 연산을 위한 캐쉬 요청이 이루어진다.
제7h도를 참조하면, 블록(740)에 도시된 바와 같이, 요청된(정렬되지 않은) 적재 데이터는 캐쉬로부터 복귀된다. 블록(750)에 도시된 바와 같이, 이 데이터는 다음에 3바이트만큼 데이터를 시프트함으로써 정렬되게 되는데, 이것은 요청된 데이터가 0100이 아닌 0103에서 시작되기 때문이다. 단지 처음의 16비트만이 요청되었기 때문에, 처음이 2바이트만이 정렬된 데이터로부터 선택된다. 다음에 이 16비트는 데이터 버퍼(526)로 래치되며, 다음에 다시 레지스터 ebx에의 저장을 위해 IEU(107)로 전달된다.
비록 본 발명이 그 양호한 실시예를 참조하여 특정하게 도시 및 설명되었지만, 이 기술에 숙련된 사람은 본 발명의 정신 및 범위를 벗어나지 않고 그 형식 및 상세에서 여러 가지 변형이 이루어 질 수도 있다는 것을 알 수 있다.

Claims (23)

  1. 프로그램 스트림을 실행하기 위한 마이크로프로세서 시스템에 있어서, (a) 명령어 기억 장치로부터 명령어를 페치하고 예정된 복수의 상기 명령어를 명령어 버퍼에 제공하기 위한 명령어 페치 유니트와; (b) 상기 명령어 페치 유니트에 결합되어, 상기 명령어 버퍼로붙의 상기 복수의 명령어를 비순서적 방식으로 실행하기 위한 실행 유니트를 구비하며, 상기 실행 유니트는 상기 명령어 버퍼 내의 모든 명령어들에 대하여 비순서적으로 적재 요청을 하고 상기 명령어 저장 장치 내의 모든 명령어들에 대하여 순서대로 저장 요청들을 하기에 적합한 적재 저장 유니트를 포함하고 있으며, 상기 적재 저장 유니트는, (ⅰ) 상기 복수의 명령어들에 연관된 복수의 어드레스를 관리하고 상기 메모리 시스템으로 어드레스를 제공하기에 적합한 어드레스 경로와 ; (ⅱ) 상기 어드레스 경로에 결합되어, 상기 실행되고 있는 복수의 명령어들 간에 어드레스 충돌 및 기록 보류가 검출하고 신호하기 위한 어드레스 충돌 수단과-여기서, 상기 적재 저장 유니트는 어드레스 충돌 및 기록 보류가 검출되지 않으면 상기 적재 요청들을 실행함-; (ⅲ) 상기 메모리 시스템 및 상기 실행 유니트에 대한 적재 또는 저장 데이터를 전달하기 위한 데이터 경로-여기서, 상기 데이터 경로는 상기 메모리 시스템으로부터 복귀되는 데이터를 정렬함으로써 워드 경계에 속한 데이터가 올바른 정렬상태로 상기 메모리 시스템으로부터 상기 실행 유니트로 복귀될 수 있도록 구성됨-를 포함하는 것을 특징으로 하는 마이크로프로세서 시스템.
  2. 제1항에 있어서, 상기 어드레스 경로는 상기 적재 또는 상기 저장 요청 신호의 상위 및 하위 바이트를 저장하기 위한 복수의 어드레스 버퍼를 포함하고 있는 것을 특징으로 하는 마이크로프로세서 시스템.
  3. 제1항에 있어서, 상기 적재 저장 유니트는 상기 데이터가 워드 경계에 속한 경우에 메모리에 복수의 메모리 요청을 하기 위한 수단을 더 포함하고 있는 것을 특징으로 하는 마이크로프로세서 시스템.
  4. 제1항에 있어서, 상기 적재 저장 유니트에 접속되어, 상기 복수의 명령어에 대한 어드레스를 계산하기에 적합하게 되어 있는 데이터 어드레스 기능 유니트를 더 구비하는 것을 특징으로 하는 마이크로프로세서 시스템.
  5. 제4항에 있어서, 가상 어드레스로부터 발생되는 물리적 어드레스 변환을 상기 실행 유니트 및 상기 적재 저장 유니트에 제공하기에 적합하게 되어 있는 가상 메모리 유니트를 더 구비하는 것을 특징으로 하는 마이크로프로세서 시스템.
  6. 제5항에 있어서, 상기 적재 저장 유니트는 메모리 요청을 할 수 있기 전에 상기 데이터 어드레스 기능 유니트와 상기 가상 메모리 유니트로부터 물리적 어드레스를 가져야 하는 것을 특징으로 하는 마이크로프로세서 시스템.
  7. 제1항에 있어서, 상기 명령어는 CISC 명령어이고, 상기 명령어 실행 유니트는 상기 CISC 명령어를 RISC 명령어로 디코딩하기 위한 디코드 수단을 더 포함하는 것을 특징으로 하는 마이크로프로세서 시스템.
  8. 제1항에 있어서, 상기 적재 저장 유니트는 수신지 레지스터의 원래의 내용과 메모리로부터 수신되는 데이터를 합병하기 위한 수단을 더 포함하는 것을 특징으로 하는 마이크로프로세서 시스템.
  9. 제1항에 있어서, 후속 저장 연산이 신속하게 수행될 수 있도록 적재 또는 실행 데이터를 상기 데이터 경로에 직접 전달하기 위해, 상기 실행 유니트와 상기 적재/저장 데이터 경로 사이에 데이터 라인을 더 구비하는 것을 특징으로 하는 마이크로프로세서 시스템.
  10. 제1항에 있어서, 상기 명령어 버퍼 내의 명령어의 상대적 에이지(age)를 표시하기 위한 이력 포인터(historical pointer)를 더 구비하는 것을 특징으로 하는 마이크로프로세서 시스템.
  11. 제1항에 있어서, 상기 충돌 수단은 어드레스 충돌 또는 보류 중인 저장 어드레스가 있는지 결정함으로써 적재 의존도를 표시하는 것을 특징으로 하는 마이크로프로세서 시스템.
  12. 제1항에 있어서, 상기 마이크로프로세서 시스템 상태를 부정확하게 변경하게 될 적재 명령어들의 적재 바이패스를 방지하기 위한 수단을 더 구비하는 것을 특징으로 하는 마이크로프로세서 시스템.
  13. 제1항에 있어서, 저장 데이터를 직접 상기 적재/저장 데이터 경로에 제공하기 위해 기능 유니트의 결과를 스누핑하기 위한 수단을 더 구비하는 것을 특징으로 하는 마이크로프로세서 시스템.
  14. 제1항에 있어서, 상기 적재 저장 유니트는 부동 소수점 연산을 위한 독립된 적재/저장 데이터 경로를 갖고 있는 것을 특징으로 하는 마이크로프로세서 시스템.
  15. 제1항에 있어서, 상기 실행 유니트는 복수의 실제 레지스터와 복수의 임시 레지스터를 포함하는 레지스터 파일을 포함하고 있는 것을 특징으로 하는 마이크로프로세서 시스템.
  16. 명령어들의 스트림을 실행하고 적재 명령어를 비순서적으로 발생하기에 적합하게 되어 있는 실행 유니트를 가진 RISC 수퍼스칼라 마이크로프로세서에서, 메모리 장치에 대한 적재 및 저장을 위한 요청을 관리하기 위한 방법에 있어서, (1) 명령어 윈도우로부터 선택된 명령어에 대한 어드레스를 계산하고, 상기 어드레스를 적재 저장 유니트로 전달하는 단계와; (2) 상기 명령어가 적재 연산, 저장 연산, 실행 연산 또는 상기 적재 연산, 상기 저장 연산 또는 상기 실행 연산의 조합에 관련되는지를 결정하는 단계와; (3) 상기 명령어가 적재 연산을 포함하는경우에, 어드레스 충돌 및 기록 보류에 대해 검사하고 상기 검사 결과를 신호하는 단계와; (4) 상기 검사하는 단계(3)의 결과 및 우선 순위 계획에 근거하여 상기 메모리 장치에 요청을 수행하는 단계와-여기서, 상기 우선 순위 계획은 상기 명령어 윈도우 내의 명령어들에 대하여 비순서적으로 상기 메모리 장치로 적재 요청들을 하고 명령어들의 스트림 내의 모든 명령어들에 대하여 순서대로 저장 요청들을 하는 것을 포함함-; (5) 상기 적재 저장 유니트의 데이터 경로 부분에서 상기 적재 연산 또는 상기 저장 연산으로부터 요청된 데이터를 수신하는 단계와; (6) 상기 요청된 데이터가 정렬되지 않는 경우에 상기 요청된 데이터를 정렬시키는 단계를 포함하는 것을 특징으로 하는 적재 및 저장 요청 관리 방법.
  17. 제16항에 있어서, 상기 발생하는 단계(1)는 상기 명령어에 대한 데이터 의존도 검사를 수행하는 단계를 포함하는 것을 특징으로 하는 적재 및 저장 요청 관리 방법.
  18. 제16항에 있어서, 상기 명령어의 결과를 임시 버퍼 내의 미리 할당된 위치에 기록하는 단계를 더 포함하는 것을 특징으로 하는 적재 및 저장 요청 관리 방법.
  19. 제18항에 있어서, 상기 임시 버퍼를 바이패스함으로써 데이터를 상기 적재 저장 유니트에 제공하는 단계를 더 포함하는 것을 특징으로 하는 적재 및 저장 요청 관리 방법.
  20. 제16항에 있어서, 저장 연산에 대한 모든 요청을 프로그램 순서대로 수행하는 단계를 더 포함하는 것을 특징으로 하는 적재 및 저장 요청 관리 방법.
  21. 제16항에 있어서, 상기 마이크로프로세서 시스템의 상태를 부정확하게 변경하게 될 적재 연산의 적재 바이패스를 방지하는 단계를 더 포함하는 것을 특징으로 하는 적재 및 저장 요청 관리 방법.
  22. 제16항에 있어서, 수신지 레지스터 내에 저장되어 있는 데이터를 상기 메모리로부터 수신되는 데이터에 합체하는 단계를 더 포함하는 것을 특징으로 하는 적재 및 저장 요청 관리 방법.
  23. 제1항에 있어서, 상기 명령어 버퍼는 복수의 버킷들을 포함하되, 상기 버킷들의 각각은 동일 어드레스에 대한 적재 및 저장, 적재 온리(load only) 또는 저장 온리(store only)를 포함하는 것을 특징으로 하는 마이크로프로세서 시스템.
KR1019950701204A 1992-09-29 1993-09-03 수퍼스칼라마이크로프로세서에서의 적재 및 저장연산처리방법 및 시스템 KR100248903B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US95408492A 1992-09-29 1992-09-29
US7/954084 1992-09-29
US07/954,084 1992-09-29
PCT/US1993/008331 WO1994008287A1 (en) 1992-09-29 1993-09-03 System and method for handling load and/or store operations in a superscalar microprocessor

Publications (2)

Publication Number Publication Date
KR950703325A KR950703325A (ko) 1995-09-20
KR100248903B1 true KR100248903B1 (ko) 2000-03-15

Family

ID=25494898

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019950701204A KR100248903B1 (ko) 1992-09-29 1993-09-03 수퍼스칼라마이크로프로세서에서의 적재 및 저장연산처리방법 및 시스템

Country Status (7)

Country Link
US (5) US5659782A (ko)
EP (1) EP0663083B1 (ko)
JP (28) JP3644959B2 (ko)
KR (1) KR100248903B1 (ko)
DE (1) DE69329778T2 (ko)
HK (1) HK1014780A1 (ko)
WO (1) WO1994008287A1 (ko)

Families Citing this family (161)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4237417C2 (de) * 1992-03-25 1997-01-30 Hewlett Packard Co Datenverarbeitungssystem
DE69329778T2 (de) * 1992-09-29 2001-04-26 Seiko Epson Corp System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor
US6735685B1 (en) * 1992-09-29 2004-05-11 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
US5721857A (en) * 1993-12-30 1998-02-24 Intel Corporation Method and apparatus for saving the effective address of floating point memory operations in an out-of-order microprocessor
US6378062B1 (en) * 1994-01-04 2002-04-23 Intel Corporation Method and apparatus for performing a store operation
US5717882A (en) * 1994-01-04 1998-02-10 Intel Corporation Method and apparatus for dispatching and executing a load operation to memory
US5694574A (en) * 1994-01-04 1997-12-02 Intel Corporation Method and apparatus for performing load operations in a computer system
US5734874A (en) * 1994-04-29 1998-03-31 Sun Microsystems, Inc. Central processing unit with integrated graphics functions
US6021471A (en) * 1994-11-15 2000-02-01 Advanced Micro Devices, Inc. Multiple level cache control system with address and data pipelines
US6279099B1 (en) * 1994-04-29 2001-08-21 Sun Microsystems, Inc. Central processing unit with integrated graphics functions
JP3164732B2 (ja) 1994-07-04 2001-05-08 富士通株式会社 データ処理装置
US5761475A (en) * 1994-12-15 1998-06-02 Sun Microsystems, Inc. Computer processor having a register file with reduced read and/or write port bandwidth
US5784586A (en) * 1995-02-14 1998-07-21 Fujitsu Limited Addressing method for executing load instructions out of order with respect to store instructions
US5745729A (en) * 1995-02-16 1998-04-28 Sun Microsystems, Inc. Methods and apparatuses for servicing load instructions
TW448403B (en) * 1995-03-03 2001-08-01 Matsushita Electric Ind Co Ltd Pipeline data processing device and method for executing multiple data processing data dependent relationship
US5638312A (en) * 1995-03-03 1997-06-10 Hal Computer Systems, Inc. Method and apparatus for generating a zero bit status flag in a microprocessor
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
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
US5778434A (en) * 1995-06-07 1998-07-07 Seiko Epson Corporation System and method for processing multiple requests and out of order returns
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
US5694565A (en) * 1995-09-11 1997-12-02 International Business Machines Corporation Method and device for early deallocation of resources during load/store multiple operations to allow simultaneous dispatch/execution of subsequent instructions
US5835747A (en) * 1996-01-26 1998-11-10 Advanced Micro Devices, Inc. Hierarchical scan logic for out-of-order load/store execution control
US6038657A (en) * 1995-10-06 2000-03-14 Advanced Micro Devices, Inc. Scan chains for out-of-order load/store execution control
EP0853787B1 (en) * 1995-10-06 2003-07-02 Advanced Micro Devices, Inc. Scan chain for rapidly identifying first or second objects of selected types in a sequential list
US5754812A (en) * 1995-10-06 1998-05-19 Advanced Micro Devices, Inc. Out-of-order load/store execution control
US5745724A (en) * 1996-01-26 1998-04-28 Advanced Micro Devices, Inc. Scan chain for rapidly identifying first or second objects of selected types in a sequential list
US6092184A (en) * 1995-12-28 2000-07-18 Intel Corporation Parallel processing of pipelined instructions having register dependencies
US5764943A (en) * 1995-12-28 1998-06-09 Intel Corporation Data path circuitry for processor having multiple instruction pipelines
US5781790A (en) * 1995-12-29 1998-07-14 Intel Corporation Method and apparatus for performing floating point to integer transfers and vice versa
US5778210A (en) * 1996-01-11 1998-07-07 Intel Corporation Method and apparatus for recovering the state of a speculatively scheduled operation in a processor which cannot be executed at the speculated time
US5751946A (en) * 1996-01-18 1998-05-12 International Business Machines Corporation Method and system for detecting bypass error conditions in a load/store unit of a superscalar processor
US5930489A (en) * 1996-02-09 1999-07-27 Advanced Micro Devices, Inc. Microprocessor configured to detect memory operations having data addresses indicative of a boundary between instructions sets
US5809275A (en) * 1996-03-01 1998-09-15 Hewlett-Packard Company Store-to-load hazard resolution system and method for a processor that executes instructions out of order
US5838942A (en) * 1996-03-01 1998-11-17 Hewlett-Packard Company Panic trap system and method
US5813033A (en) * 1996-03-08 1998-09-22 Advanced Micro Devices, Inc. Superscalar microprocessor including a cache configured to detect dependencies between accesses to the cache and another cache
US5968166A (en) * 1996-03-22 1999-10-19 Matsushita Electric Industrial Co., Ltd. Information processing apparatus and method, and scheduling device for reducing inactivity due to wait state
US5737749A (en) * 1996-05-20 1998-04-07 International Business Machines Corporation Method and system for dynamically sharing cache capacity in a microprocessor
US5860158A (en) * 1996-11-15 1999-01-12 Samsung Electronics Company, Ltd. Cache control unit with a cache request transaction-oriented protocol
US5890219A (en) * 1996-11-27 1999-03-30 Emc Corporation Redundant writing of data to cached storage system
US5890207A (en) * 1996-11-27 1999-03-30 Emc Corporation High performance integrated cached storage device
US5884055A (en) * 1996-11-27 1999-03-16 Emc Corporation Method and apparatus including a shared resource and multiple processors running a common control program accessing the shared resource
US5897666A (en) * 1996-12-09 1999-04-27 International Business Machines Corporation Generation of unique address alias for memory disambiguation buffer to avoid false collisions
US5841998A (en) * 1996-12-31 1998-11-24 Metaflow Technologies, Inc. System and method of processing instructions for a processor
US6230245B1 (en) 1997-02-11 2001-05-08 Micron Technology, Inc. Method and apparatus for generating a variable sequence of memory device command signals
US6175894B1 (en) 1997-03-05 2001-01-16 Micron Technology, Inc. Memory device command buffer apparatus and method and memory devices and computer systems using same
US5931957A (en) * 1997-03-31 1999-08-03 International Business Machines Corporation Support for out-of-order execution of loads and stores in a processor
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
US5987574A (en) * 1997-04-30 1999-11-16 Sony Corporation Bank arbitration for SDRAM memory control
US5996043A (en) 1997-06-13 1999-11-30 Micron Technology, Inc. Two step memory device command buffer apparatus and method and memory devices and computer systems using same
US6484244B1 (en) 1997-06-17 2002-11-19 Micron Technology, Inc. Method and system for storing and processing multiple memory commands
US6058472A (en) * 1997-06-25 2000-05-02 Sun Microsystems, Inc. Apparatus for maintaining program correctness while allowing loads to be boosted past stores in an out-of-order machine
US6085289A (en) * 1997-07-18 2000-07-04 International Business Machines Corporation Method and system for load data formatting and improved method for cache line organization
US6070238A (en) * 1997-09-11 2000-05-30 International Business Machines Corporation Method and apparatus for detecting overlap condition between a storage instruction and previously executed storage reference instruction
US6112293A (en) * 1997-11-17 2000-08-29 Advanced Micro Devices, Inc. Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result
US6202119B1 (en) 1997-12-19 2001-03-13 Micron Technology, Inc. Method and system for processing pipelined memory commands
US6112297A (en) * 1998-02-10 2000-08-29 International Business Machines Corporation Apparatus and method for processing misaligned load instructions in a processor supporting out of order execution
US6360314B1 (en) * 1998-07-14 2002-03-19 Compaq Information Technologies Group, L.P. Data cache having store queue bypass for out-of-order instruction execution and method for same
US6175905B1 (en) * 1998-07-30 2001-01-16 Micron Technology, Inc. Method and system for bypassing pipelines in a pipelined memory command generator
US7779236B1 (en) * 1998-12-31 2010-08-17 Stmicroelectronics, Inc. Symbolic store-load bypass
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US7275246B1 (en) 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US7065633B1 (en) 1999-01-28 2006-06-20 Ati International Srl System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US7941647B2 (en) 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US8065504B2 (en) 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US6978462B1 (en) * 1999-01-28 2005-12-20 Ati International Srl Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6336183B1 (en) * 1999-02-26 2002-01-01 International Business Machines Corporation System and method for executing store instructions
US6237066B1 (en) * 1999-03-22 2001-05-22 Sun Microsystems, Inc. Supporting multiple outstanding requests to multiple targets in a pipelined memory system
US6415360B1 (en) 1999-05-18 2002-07-02 Advanced Micro Devices, Inc. Minimizing self-modifying code checks for uncacheable memory types
US6266744B1 (en) * 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file
US6427193B1 (en) 1999-05-18 2002-07-30 Advanced Micro Devices, Inc. Deadlock avoidance using exponential backoff
US6473837B1 (en) 1999-05-18 2002-10-29 Advanced Micro Devices, Inc. Snoop resynchronization mechanism to preserve read ordering
US6393536B1 (en) 1999-05-18 2002-05-21 Advanced Micro Devices, Inc. Load/store unit employing last-in-buffer indication for rapid load-hit-store
US6473832B1 (en) 1999-05-18 2002-10-29 Advanced Micro Devices, Inc. Load/store unit having pre-cache and post-cache queues for low latency load memory operations
US7089404B1 (en) 1999-06-14 2006-08-08 Transmeta Corporation Method and apparatus for enhancing scheduling in an advanced microprocessor
US6134646A (en) * 1999-07-29 2000-10-17 International Business Machines Corp. System and method for executing and completing store instructions
US6915385B1 (en) * 1999-07-30 2005-07-05 International Business Machines Corporation Apparatus for unaligned cache reads and methods therefor
US6549959B1 (en) 1999-08-30 2003-04-15 Ati International Srl Detecting modification to computer memory by a DMA device
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6539467B1 (en) * 1999-11-15 2003-03-25 Texas Instruments Incorporated Microprocessor with non-aligned memory access
US6970996B1 (en) 2000-01-04 2005-11-29 National Semiconductor Corporation Operand queue for use in a floating point unit to reduce read-after-write latency and method of operation
US6934832B1 (en) 2000-01-18 2005-08-23 Ati International Srl Exception mechanism for a computer
DE10121792C2 (de) * 2000-05-26 2003-09-25 Ibm Universelle Ladeadresse/Wertevorhersageschema
US6748492B1 (en) * 2000-08-07 2004-06-08 Broadcom Corporation Deterministic setting of replacement policy in a cache through way selection
US6732234B1 (en) 2000-08-07 2004-05-04 Broadcom Corporation Direct access mode for a cache
US6848024B1 (en) * 2000-08-07 2005-01-25 Broadcom Corporation Programmably disabling one or more cache entries
JP4025493B2 (ja) * 2000-08-08 2007-12-19 富士通株式会社 適切な発行先に命令を発行する命令発行装置
US7757066B2 (en) 2000-12-29 2010-07-13 Stmicroelectronics, Inc. System and method for executing variable latency load operations in a date processor
JP3776732B2 (ja) * 2001-02-02 2006-05-17 株式会社東芝 プロセッサ装置
FR2821449B1 (fr) * 2001-02-27 2003-07-04 St Microelectronics Sa Procede de gestion d'instructions au sein d'un processeur a architecture decouplee, en particulier un processeur de traitement numerique du signal, et processeur correspondant
US6748495B2 (en) 2001-05-15 2004-06-08 Broadcom Corporation Random generator
US6959348B1 (en) * 2001-07-30 2005-10-25 Vixs Systems, Inc. Method and system for accessing data
US20030065909A1 (en) * 2001-09-28 2003-04-03 Jourdan Stephan J. Deferral of dependent loads until after execution of colliding stores
US7181596B2 (en) * 2002-02-12 2007-02-20 Ip-First, Llc Apparatus and method for extending a microprocessor instruction set
US7529912B2 (en) * 2002-02-12 2009-05-05 Via Technologies, Inc. Apparatus and method for instruction-level specification of floating point format
US7315921B2 (en) * 2002-02-19 2008-01-01 Ip-First, Llc Apparatus and method for selective memory attribute control
US7328328B2 (en) 2002-02-19 2008-02-05 Ip-First, Llc Non-temporal memory reference control mechanism
US7546446B2 (en) * 2002-03-08 2009-06-09 Ip-First, Llc Selective interrupt suppression
US7395412B2 (en) * 2002-03-08 2008-07-01 Ip-First, Llc Apparatus and method for extending data modes in a microprocessor
US6963964B2 (en) 2002-03-14 2005-11-08 International Business Machines Corporation Method and apparatus for detecting pipeline address conflict using parallel compares of multiple real addresses
US6804759B2 (en) * 2002-03-14 2004-10-12 International Business Machines Corporation Method and apparatus for detecting pipeline address conflict using compare of byte addresses
US7185180B2 (en) * 2002-04-02 2007-02-27 Ip-First, Llc Apparatus and method for selective control of condition code write back
US7155598B2 (en) * 2002-04-02 2006-12-26 Ip-First, Llc Apparatus and method for conditional instruction execution
US7380103B2 (en) 2002-04-02 2008-05-27 Ip-First, Llc Apparatus and method for selective control of results write back
US7373483B2 (en) 2002-04-02 2008-05-13 Ip-First, Llc Mechanism for extending the number of registers in a microprocessor
US7302551B2 (en) * 2002-04-02 2007-11-27 Ip-First, Llc Suppression of store checking
US7380109B2 (en) * 2002-04-15 2008-05-27 Ip-First, Llc Apparatus and method for providing extended address modes in an existing instruction set for a microprocessor
US7266587B2 (en) * 2002-05-15 2007-09-04 Broadcom Corporation System having interfaces, switch, and memory bridge for CC-NUMA operation
US7181598B2 (en) * 2002-05-17 2007-02-20 Intel Corporation Prediction of load-store dependencies in a processing agent
US7218647B2 (en) * 2002-06-27 2007-05-15 International Business Machines Corporation Method and apparatus for implementing frame header alterations
JP3808013B2 (ja) * 2002-07-05 2006-08-09 富士通株式会社 命令実行装置
US7062636B2 (en) * 2002-09-19 2006-06-13 Intel Corporation Ordering scheme with architectural operation decomposed into result producing speculative micro-operation and exception producing architectural micro-operation
US7145567B2 (en) * 2003-04-03 2006-12-05 Avid Technology, Inc. Bitstream format and reading and writing methods and apparatus therefor
US7321964B2 (en) * 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US6925928B2 (en) * 2003-09-18 2005-08-09 Anthony Fox Trash compactor for fast food restaurant waste
US7721069B2 (en) * 2004-07-13 2010-05-18 3Plus1 Technology, Inc Low power, high performance, heterogeneous, scalable processor architecture
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US8296550B2 (en) * 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US8275976B2 (en) * 2005-08-29 2012-09-25 The Invention Science Fund I, Llc Hierarchical instruction scheduler facilitating instruction replay
US7644258B2 (en) * 2005-08-29 2010-01-05 Searete, Llc Hybrid branch predictor using component predictors each having confidence and override signals
US20070083735A1 (en) * 2005-08-29 2007-04-12 Glew Andrew F Hierarchical processor
US9176741B2 (en) * 2005-08-29 2015-11-03 Invention Science Fund I, Llc Method and apparatus for segmented sequential storage
US7461239B2 (en) * 2006-02-02 2008-12-02 International Business Machines Corporation Apparatus and method for handling data cache misses out-of-order for asynchronous pipelines
US8316199B2 (en) 2006-11-07 2012-11-20 Hitachi Solutions, Ltd. Data processing control method, information processing apparatus, and data processing control system
JP5145929B2 (ja) * 2007-03-08 2013-02-20 株式会社リコー 半導体集積回路及び画像処理装置
US7600099B2 (en) * 2007-03-08 2009-10-06 International Business Machines Corporation System and method for predictive early allocation of stores in a microprocessor
US20090006712A1 (en) * 2007-06-29 2009-01-01 Fatma Ehsan Data ordering in a multi-node system
JP5315748B2 (ja) * 2008-03-28 2013-10-16 富士通株式会社 マイクロプロセッサおよびシグネチャ生成方法ならびに多重化システムおよび多重化実行検証方法
JP5206385B2 (ja) * 2008-12-12 2013-06-12 日本電気株式会社 バウンダリ実行制御システム、バウンダリ実行制御方法、及びバウンダリ実行制御プログラム
US8266411B2 (en) * 2009-02-05 2012-09-11 International Business Machines Corporation Instruction set architecture with instruction characteristic bit indicating a result is not of architectural importance
US7895381B2 (en) * 2009-02-16 2011-02-22 Himax Media Solutions, Inc. Data accessing system
GB2469299B (en) * 2009-04-07 2011-02-16 Imagination Tech Ltd Ensuring consistency between a data cache and a main memory
US8078796B2 (en) * 2009-04-14 2011-12-13 Micron Technology, Inc. Method for writing to and erasing a non-volatile memory
US8392666B2 (en) * 2009-05-21 2013-03-05 Via Technologies, Inc. Low power high speed load-store collision detector
US9009414B2 (en) * 2010-09-21 2015-04-14 Texas Instruments Incorporated Prefetch address hit prediction to reduce memory access latency
EP3490343B1 (en) * 2010-10-08 2021-03-10 Lantiq Beteiligungs-GmbH & Co.KG Laser diode control device
US9128725B2 (en) 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
JP6344022B2 (ja) * 2014-04-08 2018-06-20 富士通株式会社 演算処理装置および演算処理装置の制御方法
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US11561792B2 (en) * 2015-06-08 2023-01-24 Qualcomm Incorporated System, apparatus, and method for a transient load instruction within a VLIW operation
US10241800B2 (en) * 2015-06-16 2019-03-26 International Business Machines Corporation Split-level history buffer in a computer processing unit
US10503506B2 (en) * 2015-10-19 2019-12-10 Arm Limited Apparatus and method for accessing data in a cache in response to an unaligned load instruction
US10191748B2 (en) * 2015-11-30 2019-01-29 Intel IP Corporation Instruction and logic for in-order handling in an out-of-order processor
DE102015224300A1 (de) * 2015-12-04 2017-06-08 Siemens Aktiengesellschaft Speicherprogrammierbarer Baustein und Verfahren zur geschützten Übertragung von Daten auf einen speicherprogrammierbaren Baustein
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US10331357B2 (en) * 2016-08-19 2019-06-25 Advanced Micro Devices, Inc. Tracking stores and loads by bypassing load store units
US11048506B2 (en) 2016-08-19 2021-06-29 Advanced Micro Devices, Inc. Tracking stores and loads by bypassing load store units
US10353707B2 (en) 2017-07-12 2019-07-16 International Business Machines Corporation Efficient pointer load and format
US10417002B2 (en) 2017-10-06 2019-09-17 International Business Machines Corporation Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US10572256B2 (en) 2017-10-06 2020-02-25 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10394558B2 (en) 2017-10-06 2019-08-27 International Business Machines Corporation Executing load-store operations without address translation hardware per load-store unit port
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10579387B2 (en) 2017-10-06 2020-03-03 International Business Machines Corporation Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10606590B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Effective address based load store unit in out of order processors
JP7073580B2 (ja) * 2019-04-04 2022-05-23 中科寒武紀科技股▲分▼有限公司 データ処理方法、装置、及び関連製品

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0147775A2 (en) * 1983-12-19 1985-07-10 Hitachi, Ltd. Data processing apparatus for processing operand store conflict

Family Cites Families (130)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3346851A (en) 1964-07-08 1967-10-10 Control Data Corp Simultaneous multiprocessing computer system
US3541528A (en) * 1969-01-06 1970-11-17 Ibm Implicit load and store mechanism
US3789365A (en) 1971-06-03 1974-01-29 Bunker Ramo Processor interrupt system
US3771138A (en) 1971-08-31 1973-11-06 Ibm Apparatus and method for serializing instructions from two independent instruction streams
US3916388A (en) 1974-05-30 1975-10-28 Ibm Shifting apparatus for automatic data alignment
US4084235A (en) 1975-04-14 1978-04-11 Honeywell Information Systems Inc. Emulation apparatus
US4034349A (en) 1976-01-29 1977-07-05 Sperry Rand Corporation Apparatus for processing interrupts in microprocessing systems
AU529675B2 (en) 1977-12-07 1983-06-16 Honeywell Information Systems Incorp. Cache memory unit
US4315314A (en) 1977-12-30 1982-02-09 Rca Corporation Priority vectored interrupt having means to supply branch address directly
US4200927A (en) 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4189768A (en) 1978-03-16 1980-02-19 International Business Machines Corporation Operand fetch control improvement
US4189772A (en) 1978-03-16 1980-02-19 International Business Machines Corporation Operand alignment controls for VFL instructions
US4236206A (en) 1978-10-25 1980-11-25 Digital Equipment Corporation Central processor unit for executing instructions of variable length
US4228495A (en) 1978-12-19 1980-10-14 Allen-Bradley Company Multiprocessor numerical control system
JPS6041768B2 (ja) 1979-01-19 1985-09-18 株式会社日立製作所 デ−タ処理装置
US4296470A (en) 1979-06-21 1981-10-20 International Business Machines Corp. Link register storage and restore system for use in an instruction pre-fetch micro-processor interrupt system
JPS5616248A (en) 1979-07-17 1981-02-17 Matsushita Electric Ind Co Ltd Processing system for interruption
JPS5847053B2 (ja) * 1979-11-19 1983-10-20 株式会社日立製作所 デ−タ処理装置
CA1174370A (en) 1980-05-19 1984-09-11 Hidekazu Matsumoto Data processing unit with pipelined operands
JPS5743239A (en) 1980-08-27 1982-03-11 Hitachi Ltd Data processor
JPS6028015B2 (ja) 1980-08-28 1985-07-02 日本電気株式会社 情報処理装置
US4434461A (en) 1980-09-15 1984-02-28 Motorola, Inc. Microprocessor with duplicate registers for processing interrupts
JPS5757345A (en) 1980-09-24 1982-04-06 Toshiba Corp Data controller
US4654781A (en) 1981-10-02 1987-03-31 Raytheon Company Byte addressable memory for variable length instructions and data
JPS58151655A (ja) 1982-03-03 1983-09-08 Fujitsu Ltd 情報処理装置
US4514803A (en) 1982-04-26 1985-04-30 International Business Machines Corporation Methods for partitioning mainframe instruction sets to implement microprocessor based emulation thereof
JPS58217054A (ja) * 1982-06-11 1983-12-16 Hitachi Ltd デ−タ処理装置
JPS5932045A (ja) 1982-08-16 1984-02-21 Hitachi Ltd 情報処理装置
EP0124517A1 (en) 1982-10-22 1984-11-14 International Business Machines Corporation Accelerated instruction mapping external to source and target instruction streams for near realtime injection into the latter
JPS59154548A (ja) * 1983-02-22 1984-09-03 Hitachi Ltd 記憶制御方式
JPS59165143A (ja) * 1983-03-11 1984-09-18 Hitachi Ltd デ−タ処理装置
US4569016A (en) 1983-06-30 1986-02-04 International Business Machines Corporation Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system
WO1985000453A1 (en) * 1983-07-11 1985-01-31 Prime Computer, Inc. Data processing system
US4800486A (en) 1983-09-29 1989-01-24 Tandem Computers Incorporated Multiple data patch CPU architecture
US4807115A (en) 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
GB8329509D0 (en) 1983-11-04 1983-12-07 Inmos Ltd Computer
JPS60225943A (ja) 1984-04-25 1985-11-11 Hitachi Ltd 例外割込み処理方式
US4720779A (en) 1984-06-28 1988-01-19 Burroughs Corporation Stored logic program scanner for a data processor having internal plural data and instruction streams
JPS6133546A (ja) * 1984-07-25 1986-02-17 Nec Corp 情報処理装置
US4766564A (en) 1984-08-13 1988-08-23 International Business Machines Corporation Dual putaway/bypass busses for multiple arithmetic units
US4739472A (en) * 1984-12-07 1988-04-19 Nec Corporation Information processing device capable of rapidly processing instructions of different groups
CA1242803A (en) 1984-12-27 1988-10-04 Nobuhisa Watanabe Microprocessor with option area facilitating interfacing with peripheral devices
US4794517A (en) 1985-04-15 1988-12-27 International Business Machines Corporation Three phased pipelined signal processor
US4679141A (en) * 1985-04-29 1987-07-07 International Business Machines Corporation Pageable branch history table
US4714994A (en) 1985-04-30 1987-12-22 International Business Machines Corp. Instruction prefetch buffer control
JPH0762823B2 (ja) 1985-05-22 1995-07-05 株式会社日立製作所 デ−タ処理装置
EP0205193B1 (en) * 1985-06-17 1996-10-23 Nec Corporation Information processing system comprising a register renewal waiting control circuit with renewal register number registering means
US4739471A (en) 1985-06-28 1988-04-19 Hewlett-Packard Company Method and means for moving bytes in a reduced instruction set computer
US4734852A (en) * 1985-08-30 1988-03-29 Advanced Micro Devices, Inc. Mechanism for performing data references to storage in parallel with instruction execution on a reduced instruction-set processor
US4722049A (en) * 1985-10-11 1988-01-26 Unisys Corporation Apparatus for out-of-order program execution
JPS62152043A (ja) 1985-12-26 1987-07-07 Nec Corp 命令コ−ドアクセス制御方式
JPS62165242A (ja) 1986-01-17 1987-07-21 Toshiba Corp プロセツサ
DE3603240A1 (de) * 1986-02-03 1987-08-06 Siemens Ag Schaltungsanordnung zur bereinigung von operandenkonflikten in nach dem fliessbandprinzip arbeitenden datenverarbeitungsanlagen
EP0239081B1 (en) 1986-03-26 1995-09-06 Hitachi, Ltd. Pipelined data processor capable of decoding and executing plural instructions in parallel
US4903196A (en) 1986-05-02 1990-02-20 International Business Machines Corporation Method and apparatus for guaranteeing the logical integrity of data in the general purpose registers of a complex multi-execution unit uniprocessor
US5051940A (en) * 1990-04-04 1991-09-24 International Business Machines Corporation Data dependency collapsing hardware apparatus
JPS6324428A (ja) 1986-07-17 1988-02-01 Mitsubishi Electric Corp キヤツシユメモリ
US4766566A (en) 1986-08-18 1988-08-23 International Business Machines Corp. Performance enhancement scheme for a RISC type VLSI processor using dual execution units for parallel instruction processing
CA1286784C (en) * 1986-08-27 1991-07-23 Joseph A. Petolino, Jr. Cache storage queue
US5133072A (en) 1986-11-13 1992-07-21 Hewlett-Packard Company Method for improved code generation in reduced instruction set computers
JPS63131230A (ja) 1986-11-21 1988-06-03 Hitachi Ltd 情報処理装置
US4992934A (en) 1986-12-15 1991-02-12 United Technologies Corporation Reduced instruction set computing apparatus and methods
EP0272198A3 (en) * 1986-12-15 1991-10-16 United Technologies Corporation Reduced instruction set computing apparatus and methods
US4814976C1 (en) * 1986-12-23 2002-06-04 Mips Tech Inc Risc computer with unaligned reference handling and method for the same
JPS63163930A (ja) 1986-12-26 1988-07-07 Toshiba Corp アライメント補正方式
US4991090A (en) * 1987-05-18 1991-02-05 International Business Machines Corporation Posting out-of-sequence fetches
US4992938A (en) 1987-07-01 1991-02-12 International Business Machines Corporation Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers
US4901233A (en) 1987-07-20 1990-02-13 International Business Machines Corporation Computer system with logic for writing instruction identifying data into array control lists for precise post-branch recoveries
US5134561A (en) 1987-07-20 1992-07-28 International Business Machines Corporation Computer system with logic for writing instruction identifying data into array control lists for precise post-branch recoveries
US4942520A (en) * 1987-07-31 1990-07-17 Prime Computer, Inc. Method and apparatus for indexing, accessing and updating a memory
US4916652A (en) 1987-09-30 1990-04-10 International Business Machines Corporation Dynamic multiple instruction stream multiple data multiple pipeline apparatus for floating-point single instruction stream single data architectures
EP0312764A3 (en) * 1987-10-19 1991-04-10 International Business Machines Corporation A data processor having multiple execution units for processing plural classes of instructions in parallel
US5247628A (en) * 1987-11-30 1993-09-21 International Business Machines Corporation Parallel processor instruction dispatch apparatus with interrupt handler
JP2667849B2 (ja) * 1988-01-06 1997-10-27 株式会社日立製作所 情報処理装置
US4926323A (en) 1988-03-03 1990-05-15 Advanced Micro Devices, Inc. Streamlined instruction processor
JPH01286030A (ja) * 1988-05-12 1989-11-17 Nec Corp 情報処理装置
US5003462A (en) 1988-05-31 1991-03-26 International Business Machines Corporation Apparatus and method for implementing precise interrupts on a pipelined processor with multiple functional units with separate address translation interrupt means
US4897810A (en) 1988-06-13 1990-01-30 Advanced Micro Devices, Inc. Asynchronous interrupt status bit circuit
EP0348628A3 (en) 1988-06-28 1991-01-02 International Business Machines Corporation Cache storage system
US5148536A (en) * 1988-07-25 1992-09-15 Digital Equipment Corporation Pipeline having an integral cache which processes cache misses and loads data in parallel
JPH0673105B2 (ja) 1988-08-11 1994-09-14 株式会社東芝 命令パイプライン方式のマイクロプロセッサ
US5101341A (en) 1988-08-25 1992-03-31 Edgcore Technology, Inc. Pipelined system for reducing instruction access time by accumulating predecoded instruction bits a FIFO
JP2810068B2 (ja) 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
JPH0760408B2 (ja) * 1988-11-30 1995-06-28 松下電器産業株式会社 データ処理装置
JPH02151930A (ja) * 1988-12-05 1990-06-11 Nec Corp ストアバツフア管理方式
GB8828817D0 (en) 1988-12-09 1989-01-18 Int Computers Ltd Data processing apparatus
US4961162A (en) * 1989-01-13 1990-10-02 International Business Machines Corporation Multiprocessing system for performing floating point arithmetic operations
US5075840A (en) 1989-01-13 1991-12-24 International Business Machines Corporation Tightly coupled multiprocessor instruction synchronization
US5127091A (en) 1989-01-13 1992-06-30 International Business Machines Corporation System for reducing delay in instruction execution by executing branch instructions in separate processor while dispatching subsequent instructions to primary processor
EP0461257B1 (en) 1989-01-17 1997-04-23 Fujitsu Limited Microprocessor sequencer for controlling the decoding of varable length instructions
US5113515A (en) 1989-02-03 1992-05-12 Digital Equipment Corporation Virtual instruction cache system using length responsive decoded instruction shifting and merging with prefetch buffer outputs to fill instruction buffer
US5148528A (en) 1989-02-03 1992-09-15 Digital Equipment Corporation Method and apparatus for simultaneously decoding three operands in a variable length instruction when one of the operands is also of variable length
US4985825A (en) 1989-02-03 1991-01-15 Digital Equipment Corporation System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer
US5226126A (en) 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5768575A (en) 1989-02-24 1998-06-16 Advanced Micro Devices, Inc. Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions
GB2230116B (en) 1989-04-07 1993-02-17 Intel Corp An improvement for pipelined decoding of instructions in a pipelined processor
CA2016068C (en) 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
JPH0314025A (ja) 1989-06-13 1991-01-22 Nec Corp 命令実行制御方式
DE69031257T2 (de) 1989-09-21 1998-02-12 Texas Instruments Inc Integrierte Schaltung mit einem eingebetteten digitalen Signalprozessor
JP2835103B2 (ja) 1989-11-01 1998-12-14 富士通株式会社 命令指定方法及び命令実行方式
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
US5185871A (en) * 1989-12-26 1993-02-09 International Business Machines Corporation Coordination of out-of-sequence fetching between multiple processors using re-execution of instructions
US5193206A (en) 1989-12-27 1993-03-09 Motorola, Inc. Reduce instruction set microprocessor
US5185868A (en) * 1990-01-16 1993-02-09 Advanced Micro Devices, Inc. Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy
US5251306A (en) * 1990-01-16 1993-10-05 Advanced Micro Devices, Inc. Apparatus for controlling execution of a program in a computing device
US5168571A (en) 1990-01-24 1992-12-01 International Business Machines Corporation System for aligning bytes of variable multi-bytes length operand based on alu byte length and a number of unprocessed byte data
US5230068A (en) 1990-02-26 1993-07-20 Nexgen Microsystems Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence
GB2241801B (en) * 1990-03-05 1994-03-16 Intel Corp Data bypass structure in a register file on a microprocessor chip to ensure data integrity
CA2038264C (en) 1990-06-26 1995-06-27 Richard James Eickemeyer In-memory preprocessor for a scalable compound instruction set machine processor
US5155843A (en) * 1990-06-29 1992-10-13 Digital Equipment Corporation Error transition mode for multi-processor system
US5193167A (en) * 1990-06-29 1993-03-09 Digital Equipment Corporation Ensuring data integrity by locked-load and conditional-store operations in a multiprocessor system
JP2834289B2 (ja) * 1990-07-20 1998-12-09 株式会社日立製作所 マイクロプロセッサ
US5163139A (en) 1990-08-29 1992-11-10 Hitachi America, Ltd. Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions
DE69130723T2 (de) 1990-10-05 1999-07-22 Koninkl Philips Electronics Nv Verarbeitungsgerät mit Speicherschaltung und eine Gruppe von Funktionseinheiten
JP2532300B2 (ja) 1990-10-17 1996-09-11 三菱電機株式会社 並列処理装置における命令供給装置
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
US5261071A (en) 1991-03-21 1993-11-09 Control Data System, Inc. Dual pipe cache memory with out-of-order issue capability
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
US5345569A (en) 1991-09-20 1994-09-06 Advanced Micro Devices, Inc. Apparatus and method for resolving dependencies among a plurality of instructions within a storage device
US5323489A (en) * 1991-11-14 1994-06-21 Bird Peter L Method and apparatus employing lookahead to reduce memory bank contention for decoupled operand references
US5371684A (en) * 1992-03-31 1994-12-06 Seiko Epson Corporation Semiconductor floor plan for a register renaming circuit
US5418973A (en) 1992-06-22 1995-05-23 Digital Equipment Corporation Digital computer system with cache controller coordinating both vector and scalar operations
US5442756A (en) 1992-07-31 1995-08-15 Intel Corporation Branch prediction and resolution apparatus for a superscalar computer processor
US5619668A (en) 1992-08-10 1997-04-08 Intel Corporation Apparatus for register bypassing in a microprocessor
US6735685B1 (en) 1992-09-29 2004-05-11 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
DE69329778T2 (de) 1992-09-29 2001-04-26 Seiko Epson Corp System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor
DE69429061T2 (de) 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
US5574927A (en) * 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
US5778210A (en) * 1996-01-11 1998-07-07 Intel Corporation Method and apparatus for recovering the state of a speculatively scheduled operation in a processor which cannot be executed at the speculated time
US5832205A (en) * 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0147775A2 (en) * 1983-12-19 1985-07-10 Hitachi, Ltd. Data processing apparatus for processing operand store conflict

Also Published As

Publication number Publication date
US20030056089A1 (en) 2003-03-20
JP3772901B2 (ja) 2006-05-10
JP2005141780A (ja) 2005-06-02
JP3772900B2 (ja) 2006-05-10
JP2005025788A (ja) 2005-01-27
JP2005149525A (ja) 2005-06-09
JP2005243050A (ja) 2005-09-08
JP2003131871A (ja) 2003-05-09
JP2005166046A (ja) 2005-06-23
JP3741146B2 (ja) 2006-02-01
US5659782A (en) 1997-08-19
JP3815507B2 (ja) 2006-08-30
JP3588755B2 (ja) 2004-11-17
JP2006048713A (ja) 2006-02-16
JP2005235233A (ja) 2005-09-02
JP2003131870A (ja) 2003-05-09
JP2000148483A (ja) 2000-05-30
JP2000148493A (ja) 2000-05-30
JP2000148490A (ja) 2000-05-30
JP2005174364A (ja) 2005-06-30
JP2006073025A (ja) 2006-03-16
JP3772903B2 (ja) 2006-05-10
JP2000148494A (ja) 2000-05-30
JP2005353091A (ja) 2005-12-22
JP3852475B2 (ja) 2006-11-29
US5987593A (en) 1999-11-16
DE69329778D1 (de) 2001-01-25
JP3772902B2 (ja) 2006-05-10
EP0663083A1 (en) 1995-07-19
US5557763A (en) 1996-09-17
JP3772907B2 (ja) 2006-05-10
JP3741149B2 (ja) 2006-02-01
JP3644959B2 (ja) 2005-05-11
HK1014780A1 (en) 1999-09-30
JP2005322269A (ja) 2005-11-17
JPH08504977A (ja) 1996-05-28
JP3627737B2 (ja) 2005-03-09
JP2000148481A (ja) 2000-05-30
US6434693B1 (en) 2002-08-13
JP3741144B2 (ja) 2006-02-01
JP3772899B2 (ja) 2006-05-10
JP2003177913A (ja) 2003-06-27
KR950703325A (ko) 1995-09-20
JP3620530B2 (ja) 2005-02-16
WO1994008287A1 (en) 1994-04-14
JP2000181708A (ja) 2000-06-30
JP2000148480A (ja) 2000-05-30
US7000097B2 (en) 2006-02-14
JP3772905B2 (ja) 2006-05-10
JP2006277776A (ja) 2006-10-12
JP2005216326A (ja) 2005-08-11
JP2000148492A (ja) 2000-05-30
EP0663083B1 (en) 2000-12-20
DE69329778T2 (de) 2001-04-26
JP2005050371A (ja) 2005-02-24
JP3852474B2 (ja) 2006-11-29
JP3874022B2 (ja) 2007-01-31
JP2003131872A (ja) 2003-05-09
JP2000148491A (ja) 2000-05-30

Similar Documents

Publication Publication Date Title
KR100248903B1 (ko) 수퍼스칼라마이크로프로세서에서의 적재 및 저장연산처리방법 및 시스템
US8019975B2 (en) System and method for handling load and/or store operations in a superscalar microprocessor

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20121130

Year of fee payment: 14

EXPY Expiration of term