KR100267097B1 - 슈퍼스칼라 프로세서에서 간단한 비의존성 파이프라인 인터록 제어로서 판독되는 지연된 저장 데이터 - Google Patents
슈퍼스칼라 프로세서에서 간단한 비의존성 파이프라인 인터록 제어로서 판독되는 지연된 저장 데이터 Download PDFInfo
- Publication number
- KR100267097B1 KR100267097B1 KR1019970034997A KR19970034997A KR100267097B1 KR 100267097 B1 KR100267097 B1 KR 100267097B1 KR 1019970034997 A KR1019970034997 A KR 1019970034997A KR 19970034997 A KR19970034997 A KR 19970034997A KR 100267097 B1 KR100267097 B1 KR 100267097B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- register
- execution unit
- instructions
- store
- Prior art date
Links
- 238000000034 method Methods 0.000 claims description 9
- 230000004044 response Effects 0.000 claims description 4
- 239000013598 vector Substances 0.000 abstract description 31
- 230000001934 delay Effects 0.000 abstract description 5
- 230000009977 dual effect Effects 0.000 abstract description 5
- 230000003111 delayed effect Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
- G06F5/015—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising having at least two separately controlled shifting levels, e.g. using shifting matrices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
슈퍼스칼라 프로세서는 로드/저장 명령을 실행하는 실행 유닛과, 산술 명령을 실행하는 실행 유닛을 구비한다. 이들 두개 실행 유닛을 위한 실행 파이프라인은 명령에 대한 소스 오퍼런드를 식별하고 판독하는 판독 스테이지와, 실행 유닛에서 수행된 실행 스테이지 또는 스테이지들을 구비한다. 저장 명령의 경우, 메모리 시스템으로 저장 데이터를 전송하기 위해 저장 데이터가 필요할 때까지 레지스터 화일로부터 저장 데이터를 판독하는 것이 지연된다. 이는 저장 명령이 저장 데이터를 발생하는 초기의 명령과 함께 동시에 디코드되는 것을 가능하게 한다. 간단한 비의존성 인터록은 저장 명령을 계류시키는 저장 데이터를 보유하는 레지스터를 식별하는 레지스터 번호의 리스트를 이용한다. 이들 레지스터 번호는 명령의 목적지 오퍼런드의 레지스터 번호와 비교되고, 저장 데이터의 소스에 일치하는 목적지 오퍼런드를 갖는 명령이 판독 스테이지에서 정체되어, 초기의 저장 명령이 완료될 때까지 명령이 저장 데이터를 파괴하는 것을 방지한다.
Description
본 발명은 프로세서, 및 슈퍼스칼라 프로세서에서 저장 명령을 실행하고 명령 비의존성을 처리하기 위한 방법에 관한 것이다.
슈퍼스칼라 프로세서는 선형 프로그램 스래드에서 명령을 실행하지만, 명령을 병렬로 실행할 수 있는 다수의 실행 유닛을 구비한다. 명령의 병렬 실행은 명령이 완료되는 속도를 증가시킴으로써 프로세서 성능을 향상시키지만, 프로그램 순서를 벗어나(예를 들어, 프로그램 순서에서 초기의 명령 이전 또는 동시에) 일부 명령을 완료한다. 슈퍼스칼라 프로세서는 초기의 명령이 프로그램 로직을 구현하는데 실패하기 전에 나중 명령을 실행하면 순서를 벗어난 실행을 피하여야만 한다. 예를 들어, 초기 명령으로부터의 결과에 따른 나중 명령은 결과가 이용가능한 후에 완료되어야 한다. 두개 명령의 실행 또는 완료의 순서에 대한 제한을 흔히 명령 의존성 또는 비의존성(instruction dependency or antidependency)이라고 한다.
명령 의존성과 비의존성을 적절히 다루는 슈퍼스칼라 아기텍쳐가 개발되었다. 한 가지 이와 같은 아키텍쳐는 순서를 벗어난 실행을 허용하지만 초기의 의존하거나 또는 의존하지 않는 명령이 완료될 때까지 레지스터 화일에 결과를 커밋(committing)하는 것을 지연시키는 레지스터 리네이밍(renaming)을 이용한다. 레지스터 리네이밍을 갖는 아키텍쳐는 복잡하고 구현하기가 비용이 많이 드는 경향이 있다.
다른 슈퍼스칼라 아키텍쳐는 계류하는 명령으로서 의존성 또는 비의존성을 갖는 나중 명령의 디코딩 또는 송출을 정체(stalls)시키는 인터록을 이용한다. 그러나, 명령 디코딩 또는 송출의 지연은 프로세서 성능을 떨어뜨릴 수 있다. 예를 들어, 레지스터 화일의 레지스터로부터 데이터를 필요로 하는 저장 명령은 하나 이상의 초기 명령이 레지스터에 데이터를 기록할 때까지 상기 데이터를 판독할 수 없다. 전형적인 슈퍼스칼라 아키텍쳐에서, 레지스터 화일로부터 판독하는 판독 스테이지는 초기에 실행 파이프라인에 있고, 레지스터 화일에 기록하는 기록 스테이지는 실행 파이프라인에서 마지막 스테이지에 있다. 따라서, 파이프라인 인터록은 레지스터에 기록하는 명령의 디코딩과 레지스터로부터 판독하는 다음 저장 명령 간의 프로세서 비활동성의 버블(a bubble of processor inactivity)을 생성할 수 있다. 간단한 파이프라인 인터록을 허용하지만 프로세서 성능을 떨어뜨리는 프로세서 비활동성의 버블을 감소시키는 슈퍼스칼라 아키텍쳐가 요구된다.
본 발명에 따르면, 슈퍼스칼라 프로세서는 메모리 시스템으로 전송하기 위해 실행 유닛이 저장 데이터를 필요로 할 때까지 저장 데이터의 판독의 지연한다. 따라서, 어드레스 계산을 위한 오퍼런드가 판독될 수 있고, 어드레스 계산이 수행될 수 있으며, 로드/저장 유닛은 저장 데이터를 발생하는 명령의 완료 및 실행과 병렬로 메모리 시스템으로부터의 응답을 대기할 수 있다.
본 발명의 한 실시예에서, 프로그램 순서로 대부분의 명령을 디코드하고 실행하는 프로세서는 레지스터에 기록하는 초기 명령과 동시에 레지스터로부터 저장 데이터를 판독하는 저장 명령을 디코드할 수 있다. 두개의 명령을 위한 소스 오퍼런드가 첫번째 사이클에서 동시에 레지스터 화일로부터 판독되고, 저장 명령을 위한 어드레스가 두번째 사이클에서 초기 명령의 실행과 동시에 계산되며, 초기 명령으로부터의 결과는 메모리 시스템이 저장 데이터에 대해 준비가 될 때 저장 데이터로서 사용할 수 있게 된다. 저장 오퍼런드의 특별한 취급과 로드/저장 명령의 순서를 벗어난 가능한 실행은 프로세싱 능력을 향상시키지만, 완전히 순서를 벗어난 실행에 필요한 복잡성을 피한다.
본 발명의 다른 실시예에서, 프로세서는 이중 실행 파이프라인을 구비한다. 제1파이프라인은 결과를 레지스터 화일에 기록하는 명령을 디코드하고 실행한다. 제2파이프라인은 메모리 시스템을 액세스하는 로드/저장 명령을 디코드하고 실행한다. 상기 프로세서는 상기 제1 및 제2파이프라인에 대한 명령의 동시 디코딩을 프로그램 순서에서 제1파이프라인에서 디코드된 명령이 제2파이프라인에서 디코드된 명령보다 빠른 경우에 한한다. 따라서, 대부분의 명령은 의존성과 비의존성 취급을 간단하게 하는 프로그램 순서로 실행된다.
본 실시예를 위한 저장 스코어보드는 송출된 저장 명령을 위한 저장 데이터의 소스를 식별하는 레지스터 번호의 리스트를 구비한다. 레지스터 번호는 저장 명령이 송출될 때 리스트에 부가되며, 저장 명령이 해당 레지스터를 판독함으로써 완료될 때 클리어된다. 인터록 시스템은 명령의 목적지 오퍼런드가 스코어보드에 있는 레지스터 번호중 하나에 대응할 때 명령의 송출을 정체시킨다. 이는 초기의 저장 명령이 저장 데이터를 판독하기 이전에 나중 명령이 레지스터에 기록되는 것을 방지한다.
제1도는 본 발명의 실시예에 따른 프로세서의 블럭도.
제2(a)도 및 제2(b)도는 제1도의 프로세서에 의해 실행되는 산술 및 저장 명령을 위한 각각의 실행 파이프라인을 도시하는 도면.
제3도는 저장/로드를 위한 실행 유닛과 데이터 엘리먼트 쉬프트 명령의 블럭도.
제4도는 제1도의 프로세서에서 실행 유닛으로의 명령의 송출을 제어하는 회로 블럭도.
제5도는 송출된 저장 명령을 갖는 가능한 비의존성을 모니터하기 위한 저장 스코어보드의 블럭도.
제6도는 판독-후-기록 및 기록-후-판독 명령 의존성을 모니터하기 위한 레지스터 화일 스코어보드의 블럭도.
* 도면의 주요부분에 대한 부호의 설명
100 : SIMD 프로세서 110 : 명령어 훼치 유닛
120 : 명령어 디코더 A 122 : 명렁어 디코더 B
130 : 벡터 레지스터 화일 132 : 스칼라 레지스터 화일
150 : 파이프라인 제어 유닛 160 : 판독 제어 회로
170 : 송출 제어 회로 180 : 기록 백 제어 회로
210 : 디코드 스테이지 220 : 판독 스테이지
230 : 실행 스테이지 240 : 기록 스테이지
310 : 명령어 큐 320 : 어드레스 발생기
330 : 제어 회로 340 : 정렬기
350 : 메모리 시스템 430 : 비의존성 점검 블럭
440 : WQW간 점검 블럭 450 : RAW 점검 블럭
460 : 구조 의존성 점검 블럭 520, 530, 540 : 비교기
본 발명의 특징에 따르면, 인터록 아키텍쳐는 갖는 슈퍼스칼라 프로세서는 저장 명령을 위한 저장 데이터의 판독을 지연하고, 초기 명령이 저장 데이터를 발생하기 이전에 저장 명령의 디코딩 및 송출을 허용한다. 실행 유닛은 유효 어드레스를 판독할 수 있고, 초기 명령이 저장 데이터를 완료하고 제공하는 동안 메모리 시스템의 액세스를 시작할 수 있다. 메모리 시스템이 저장 데이터를 위해 판독될 때까지 저장 데이터의 액세스를 지연함을서 저장 명령이 저장 데이터에 대해 초기 명령에 의존할 때 실행 유닛 비활동성의 버블을 감소시킨다. 본 발명의 다른 장점으로서, 메모리 시스템이 준비될 때까지 레지스터 화일에 저장 데이터가 보유되기 때문에, 메모리 시스템에의 전송을 대기하는 일시 저장 데이터의 저장이 감소되거나 또는 제거될 수 있다. 프로세서는 또한 저장 명령이 저장 데이터를 판독하기 전에 저장 데이터를 오버라이트할 나중 명령의 실행을 지연시키기 위해 간단한 비의존성 인터록을 구현한다.
제1도는 본 발명의 실시예에 따른 SIMD 프로세서(100)를 도시한다. SIMD 프로세서(100)는 슈퍼스칼라 프로세서이고, 명령어 훼치 유닛(IFU)(110), 이중 명령 디코더(120 및 122), 벡터 지스터 화일(130), 스칼라 레지스터 화일(132), 및 이중 실행 유닛(140 및 142)를 구비한다. IFU(110)는 주 메모리에 결합된 명령어 캐쉬와 같은 메모리 시스템으로부터 명령을 훼치하고, 분기 및 프로그램 제어 명령을 실행하며, 디코더(120 및 122) 각각을 위한 래치(114 및 116)에 명령을 로드한다. IFU(110)는 명령을 훼치하고, 디코더(120 및 122)는 디코더(120 및 122)가 레치(114 및 116)로부터 명령을 동시에 디코드할 때를 제외하고 프로그램 순서로 명령을 디코드한다.
명령어 디코더(120)는 목적지 레지스터에 저장될 수 있는 결과를 발생하기 위해 소스 오퍼런드를 조작하는 명령을 디코드한다. 예를 들어, 명령어 디코더(120)는 목적지 레지스터에 저장되는 결과를 결정하기 위해, 소스 오퍼런드를 더하고, 빼며, 곱하거나 나누는 산술 명령을 디코드한다. 명령어 디코더(122)는 메모리를 액세스하는 로드/저장 명령을 디코드한다. 예시적인 실시예에서, 명령어 디코더(122)는 또한 IFU(110)로 반환된 데이터 또는 조건 코드를 필요로 하는 분기 명령과, 소스 오퍼런드 내에서 데이터 엘리먼트를 쉬프트하거나 이동시키는 엘리먼트간 이동 명령을 디코드한다. 본 발명에서 참조로 인용되는 미합중국 특허출원 제08/699,597호, 발명의 명칭 “SINGLE-INSTRUCTION-MULTIPLE-DATA PROCESSING IN A MULTIMEDIA SIGNAL PROCESSOR”는 프로세서(100)에 적합한 명령을 설명하고 있다. 본 발명의 선택적인 실시예에서, 디코더(122)는 로드/저장 명령 또는 단지 저장 명령을 순전히 디코드한다.
디코더(120 및 122)는 레지스터 번호를 추출(extracts)하고, 명령을 디코드할 때 래치(124 및 126)에 레지스터 번호를 저장한다. 각각의 레지스터 번호는 벡터 레지스터 화일(130)과 스칼라 레지스터 화일(132)를 구비한 레지스터 화일의 레지스터를 식별한다. 예시적인 실시예에서, 벡터 레지스터 화일(130)은 64개의 32-바이트(또는 256-비트) 벡터 레지스터를 구비하는데, 각각의 벡터 레지스터는 다수의 데이터 엘리먼트를 포함하는 데이터 벡터를 저장한다. 예를 들어, 32-바이트 데이터 벡터는 32 8-비트 데이터 엘리먼트, 16 16-비트 데이터 엘리먼트, 또는 8 32-비트 데타 엘리먼트를 구비할 수 있다. 현재의 뱅크에 있는 벡터 레지스터는 본 발명에서를 VR0 내지 VR63이라고 칭한다. 스칼라 레지스터 화일(132)는 32 32-비트 스칼라 레지스터를 구비하는데, 각각의 스칼라 레지스터는 단일의 32-비트 값을 보유한다. 스칼라 레지스터는 본 발명에서 SR0 내지 SR31이라고 칭한다. 0과 31 사이의 i에 대한 Ri라는 용어는 벡터 또는 스칼라 레지스터중 어느 하나일 수 있는 레지스터를 가리킨다.
파이프라인 제어 유닛(150)에서 판독 제어 회로(160)는 레지스터 화일(130 및 132)로부터 판독되는 레지스터를 선택하기 위해 멀티플렉서(135)를 제어한다. 래치(124 및 126)에 있는 레지스터 번호는 디코더(120 및 122)가 마지막으로 디코드한 명령 또는 명령들에 필요한 소스 오퍼런드를 식별한다. 따라서, 판독 제어 회로(160)는 실행 유닛(142)에서 계류하고 있는 저장 명령을 위한 저장 오퍼런드를 식별하는 레지스터 번호를 선택할 수 있다.
각각의 벡터 레지스터 화일(130)과 스칼라 레지스터 화일(132)은 최대 6개의 소스 오퍼런드가 사이클당 판독될 수 있도록 3개의 판독 포트를 갖는다. 클럭 사이클 동안 판독될 레지스터를 선택하는 프로세서에서, 판독 제어 유닛(160)은 레지스터 화일 스코어보드(152)를 점검하여 임의의 계류중인 명령이 어떠한 소스 오퍼런드에 기록될 지를 결정한다. 만일 명령이 계류중인 명령이 완료되지 않기 때문에 다음 사이클에서 유효가 아닐 레지스터 화일(130 및 132)의 소스 오퍼런드를 필요로 한다면, 판독 제어 유닛(160)은 해당 소스 오퍼런드가 레지스터 화일(130 및 132)로부터 판독되는 것을 방지한다. 레지스터 화일(130 및 132)에서 유효가 아닌 소스 오퍼런드가 실행 유닛(140 또는 142)으로부터 포워드될 수 있기 때문에, 명령을 위한 다른 소스 오퍼런드가 명령의 가능한 송출을 위해 판독될 수 있다.
예시적인 실시예의 명령어 구문에서, 각각의 명령은 3개 미만의 소스 오퍼런드를 갖지만, 판독 스테이지로 진행하는 두개의 명령은 벡터 레지스터(130) 또는 스칼라 레지스터(132)로부터 세 번 이상의 동시 판독을 필요로 할 수 있다. 따라서, 두개의 명령이 판독 스테이지로 진행하려고 시도하는 것과 동시에, 송출된 저장 명령을 위해 저장 데이터를 판독하는 것이 필요할 수 있다. 만일, 의존성을 갖는 소스 오퍼런드에 대한 판독을 제거한 후, 명령이 여전히 레지스터 화일(130)로부터 3개 이상의 벡터 오퍼런드 또는 레지스터 화일(132)로부터 3개 이상의 스칼라 오퍼런드를 필요로 하면, 판독 제어 회로(160)는 디코더(120)가 마지막으로 디코드한 명령, 즉 프로그램 순서에서 다음 명령에 대한 레지스터 번호만 또는 그것과 함께 계류중인 저장 명령에 대한 레지스터 번호를 선택한다. 래치(126)가 이전에 디코드된 레지스터 번호를 보유하고 다음 클럭 사이클 동안 어떠한 새로운 명령도 디코드되지 않도록 디코더(122)가 디코드한 명령이 정체된다. 디코드된 마지막 명령이 계류중인 저장 명령을 위한 저장 데이터를 판독과 동시에 판독 스테이지로 진행할 수 없다면 이와 유사하게 디코더(120)도 정체된다.
만일 디코더(120 및 122)가 정체되지 않으면, IFU(110)는 프로그램 순서에서 다음 명령을 래치(114 및 116)으로 로드한다. IFU(110)는 디코더(120)가 프로그램 순서에서 다음 명령을 디코드할 수 있고 디코더(122)가 프로그램 순서에서 다음 명령의 바로 다음에 오는 명령을 디코드할 수 있으면 가능한 병렬 디코딩 및 실행을 위해 명령을 래치(114 및 116)에 병렬로 로드한다. 그렇지 않으면 IFU(110)는 기껏해야 하나의 명령, 프로그램 순서에서 다음 명령을 래치(114 또는 116)로 로드한다. 병렬 명령 디코딩 순서를 위한 구비조건은 로드/저장 명령이 병렬로 디코드된 명령 이외의 프로그램에서 항상 나중이기 때문에 의존성 점검을 간단하게 한다.
제2(a)도는 AMU 명령을 위한 디코드 스테이지(210), 판독 스테이지(220), 실행 스테이지(230), 및 기록 스테이지(240)를 구비한 명령어 파이프라인을 도시한다. 디코드 스테이지(210) 동안, 디코더(120)는 래치(114)로부터의 명령을 디코드하고, 소스 오퍼런드 레지스터 번호가 래치(114)에 기록된다. 판독 스테이지(220) 동안, 래치(1224)로부터의 레지스터 번호에 의해 식별된 레지스터는 레지스터 화일(130 및/또는 132)로부터 판독되고, 오퍼런드 정렬 멀티플렉서(134)는, 실행 유닛(140)을 위해 래치(136)에 소스 오퍼런드를 저장할 때 레지스터 화일(130 및 132)로부터 판독된 데이터 및/또는 실행 유닛(140 및 142)으로부터 포워드된 결과를 선택한다.
파이프라인 제어 유닛(150)의 송출 제어 회로(170)는 명령이 실행 스테이지(230)로 진행할 수 있는 지를 판단한다. 명령은, 명령에 대한 모든 소스 오퍼런드가 유효일 때 판독 스테이지(220)에서 실행 스테이지(230)로만 진행할 수 있고, 명령은 실행 유닛(140 또는 142)에 의해 실행되고 있는 명령에 대한 기록-후-기록(WAW) 의존성을 가지지 않으며, 명령은 실행 유닛(142)에 계류중인 저장 명령에 저장 데이터를 공급하는 레지스터에 기록하지 않으며, 명령을 송출하는 것은 실행 유닛(140)에서 자원 충돌을 야기하지 않는다.
레지스터 화일(130 및 132)로부터 판독된 래치(136)의 소스 오퍼런드는 항상 유효하지만, 포워드된 소스 오퍼런드는 실행 유닛(140 및 142)이 오퍼런드를 공급하는 초기 명령을 완료할 때까지 유효하지 않다. 만일 소스 오퍼런드를 공급하는 초기 명령이 최종 사이클을 완료하지 않았으면, 명령은 명령에 대한 몇가지 유효 소스 오퍼런드를 보유하는 래치(136)로서 정체된다. 후속하는 클럭 사이클 동안, 필요한 소스 오퍼런드가 포워드될 때, 포워드된 오퍼런드는 래치(136)에 저장되고 유효하게 된다. 실행 유닛(140)을 위한 명령의 송출을 정체시킴으로써 실행유닛(142)으로 임의의 명령을 송출하는 것을 방지하고, 일단 래치(124 및/또는 126)가 디코드된 명령에 대한 레지스터 번호를 포함하고 있으면 디코더(120 및 122)를 정체시킨다.
WAW 의존성의 경우, 송출 제어 회로(170)는 레지스터 화일 스코어보드(152)를 점검하여, 실행 파이프라인(140 또는 142)에 있는 임의의 계류중인 명령이 래치(136)에 오퍼런드를 갖는 명령의 목적지 레지스터에 기록할 지를 판단한다. 만일 WAW 의존성이 존재하면, 송출 제어 회로(170)는 실행 스테이지(230)로 명령을 송출하지 않고, 래치(136)는 명령이 판독 스테이지(230)에 정체되어 남아 있는 동안 명령에 대한 오퍼런드를 보유한다.
만일 래치(136)에 소스 오퍼런드를 갖는 명령이 실행 유닛(142)에 계류중인 저장 명령에 대한 저장 데이터의 소스와 동일한 목적지 레지스터를 갖는다면, ALU 명령과 저장 명령 간에는 비의존성이 존재하고, 송출 제어 회로(170)는 저장 명령이 완료될 때까지 판독 스테이지(220)에 명령을 정체시킨다.
비의존성을 검출하기 위해, 송출 제어 회로(170)는 명령의 목적지 오퍼런드의 레지스터 번호를 저장 스코어보드(156)에 리스트된 레지스터 번호에 비교한다. 이와 같이 명령을 정체시킴으로로써, 저장 명령에 의해 사용되지 않을 때까지 저장 데이터가 확실히 오버라이트되지 않게 된다.
송출 제어 회로(170)는 또한 다음 클럭 사이클 또는 나중의 클럭 사이클 동안 실행 스테이지(230)로의 명령의 송출이 실행 유닛(140)에서 자원 충돌을 야기하는 지를 판단하기 위해 자원 스코어보드(154)를 점검한다. 실행 스테이지(230)로의 명령의 송출은 오퍼런드 래치(136)로부터의 소스 오퍼런드를 처리하는 실행 유닛(140)을 개시시킨다. 예시적인 실시예에서, 실행 유닛(140)은 32-바이트 데이터 경로를 가지며, 벡터 오퍼런드의 경우, 데이터 엘리먼트에 대한 데이터 유형에 따라 32, 15, 또는 8 병렬 산술 연산을 수행한다. 실행 스테이지(230)는 대부분의 명령을 한 클럭 사이클로 수행한다. 정수 데이터 엘리먼트에 대해 곱셈 연산을 수행하는 명령과 같은 일부 명령은 실행 스테이지(230)에 대해 두개의 클럭 사이클을 필요로 한다. 부동 소수점 데이터 유형을 갖는 데이터 엘리먼트에 대한 산술 연산을 수행하는 명령은 3개의 클럭 사이클을 필요로 한다. 자원 스코어보드(154)는 다수 사이클 명령을 계류시키는 실행 유닛(140)의 어떤 자원이 다음 클럭 사이클 동안 이용가능할 것인 지를 가리킨다.
실행 스테이지(230)의 완료시, 명령은 결과가 레지스터 화일(130 및 132)에 기록되는 기록 스테이지(240)로 진입한다. 기록 백 제어 회로(180)는 실행 유닛(140 및 142)으로부터의 결과와 누산기(144)로부터의 출력의 라우팅을 제어한다. 실행 유닛(140)으로부터의 결과는 누산기(144)에 저장될 수 있거나 또는 기록 스테이지 동안 레지스터 화일(130 또는 132)에 기록하기 위해 멀티플렉서(146)를 통해 래치(148)에 그리고 오퍼런드 포워딩을 위해 오퍼런드 정렬 멀티플렉서(134)에 기록될 수 있다.
예시적인 실시예에서, 각각의 레지스터 화일(130 및 132)은 두개의 기록 포트를 갖는다. 그러나, 실행 유닛(140)은 하나의 벡터 결과 또는 하나의 스칼라 결과를 발생할 수 있고, 실행 유닛(142)은 하나 또는 최대 두개의 스칼라 결과를 포함하는 두개의 결과를 발생할 수 있다. 만일 3개의 스칼라 결과를 한 클럭 사이클동안 실행 유닛(140 및 142)으로부터 이용할 수 있으면, 기록 백 제어 회로(180)는 그 결과를 실행 유닛(142)에서 레지스터 화일(132)에 기록하고, 실행 유닛(140)을 정체시킨다. 실행 유닛(140)으로부터의 결과는 나중 클럭 사이클 동안 레지스터 화일(132)에 기록된다.
제2(b)도는 저장 명령을 위한 명령어 파이프라인을 도시한다. 저장 명령은 디코드 스테이지(212), 판독 스테이지(220), 어드레스 스테이지(232) 및 저장 스테이지(242)를 필요로 한다. 디코드 스테이지(212)동안, 어드레스의 계산을 위한 필요한 소스 오퍼런드를 가리키는 레지스터 번호가 저장 명령으로부터 추출되고, 판독 스테이지(220) 동안 스칼라 레지스터 화일(132)로부터 판독하기 위해 래치(126)에 저장된다. 송츨 제어(170)는 래치(138)가 어드레스 계산을 위한 유효 소스 오퍼런드를 보유하고 있고 실행 유닛(142)이 명령에 이용가능하다면 저장 명령을 어드레스 스테이지(232)로 송출한다. 다음에 실행 유닛(142)은 메모리 시스템이 유효 어드레스를 수신할 준비가 되고 실행 유닛(142)으로부터의 데이터를 저장할 때까지 대기한다. 일단 메모리 시스템이 준비되면, 실행 유닛(142)은 제어 회로(160)에게 판독을 요구하거나 또는 저장 데이터를 래치(138)로 포워드한다. 저장 스테이지(242)는, 메모리 시스템과 저장 데이터가 레지스터(138)에서 이용가능하게 될 때에 따라 어드레스 스테이지(232)의 종료후에 하나 이상의 클럭 사이클을 개시한다.
제3도는 메모리 시스템(350)에 접속된 실행 유닛(142)의 실시예를 도시한다. 메모리 시스템(350)은 레벨-1 데이터 캐쉬와 같은 온-칩 메모리 또는 오프-칩 레벨-2 캐쉬 시스템을 통해 주 메모리에 접속된 스크래치 패드 메모리를 포함할 수 있다. 실행 유닛(142)은 온-칩 메모리, 외부 캐쉬 메모리 또는 주 메모리의 데이터 위치를 액세스할 수 있는 로드/저장 명령을 실행한다. 프로세서(100)는 메모리 시스템(350)이 즉시 이용가능하지 않도록 다른 시스템과 메모리 시스템(350)을 공유할 수 있다. 따라서, 로드 또는 저장을 완료하는데 필요한 시간은 메모리 시스템이 비지 또는 캐쉬 미스가 존재하는 것과 같은 요인에 따른다.
파이프라인 정체를 줄이기 위해, 실행 유닛(142)은 송출 제어 회로(170)로부터의 최대 4개의 로드/저장 명령을 보유하는 명령어 큐(310)를 포함한다. 큐(310)의 각 명령은, 명령이 로드 또는 저장을 가리키는 지 그리고 레지스터 번호가 로드 명령을 위한 목적지 데이터 또는 저장 명령을 위한 저장 데이터를 가리키는 지를 가리킨다. 로드/저장 명령이 송출되면, 명령의 표현이 명령어 큐(310)에 로드되고, 어드레스 발생기(320)는 래치(138)로부터의 오퍼런드를 이용하여 명령에 대한 유효 어드레스를 계산한다. 사용된 어드레싱 모드에 따라, 유효 어드레스 계산은 스칼라 레지스터 화일(132)로부터 하나 또는 두개의 값/또는 명령으로부터의 중간값을 필요로 할 수 있다. 어드레스 큐(325)는 어드레스 발생기(320)로부터 계산된 유효 어드레스를 보유하고, 각각의 어드레스는 명령어 큐(310)의 명령에 대응한다.
제어 회로(330)는 실행 유닛(142)의 내부 연산, 메모리 시스템(350)과의 인터페이스를 제어하고, 실행 유닛(142)에 계류중인 로드 및 저장 명령 간의 의존성을 점검한다. 로드/저장 명령이 실행 유닛(142)에 송출되면, 제어 회로(330)는 새로이 발생된 어드레스를 어드레스 큐(325)의 어드레스에 비교하여, 새로이 송출된 로드 명령이 동일한 어드레스를 액세스하는 초기의 저장 명령의 뒤에 오는 지 또는 새로이 송출된 저장 명령이 동일한 어드레스를 액세스하는 저장 명령의 뒤에 오는지를 판단한다. 만일 이들 의존성중 임의의 것이 발견되면, 제어 회로(330)는 송출 제어 회로(170)로 하여금 임의의 로드/저장 명령을 실행 유닛(142)에 송출하는 신호를 발생한다. 새로이 송출된 명령에 대한 메모리 시스템(350)의 액세스는 초기 명령의 완료가 명령 의존성을 제거하 때까지 지연된다.
메모리 시스템(350)에의 액세스를 위해, 제어 회로(330)는 메모리 시스템(350)이 데이터 전송에 대한 요구를 받아들일 준비가 되어 있는 지를 가리키는 신호 BUSY를 모니터한다. 메모리 시스템이 준비가 되면 큐(310 및 325)의 다음 명령과 어드레스에 대해 요구가 이루어진다. 프로세서(100)의 예시적인 실시예는 32-비트 유효 어드레스 EA[31:0]를 이용하지만, 메모리 시스템(350)은 27개의 최상위 어드레스 비트 EA[31:5]로서 32-바이트 데이터 벡터를 식별한다. 유효 어드레스 EA[31:0]의 최하위 비트 EA[4:0]가 제로와 같지 않을 때, 데이터 벡터의 정렬되지 않은 로드 또는 저장이 발생한다. 정렬되지 않은 로드의 경우, 실행 유닛(142)은 메모리 시스템(350)으로부터 두개의 데이터 벡터, 어드레스 EA[31:5]로부터 32=바이트 데이터 벡터 및 어드레스 EA[31:5]+1로부터 32-바이트 데이터 벡터를 요구하고, 정렬기(340)는 레지스터 화일(130)에 저장하기 위해 요구된 로드 데이터 벡터를 구성한다. 정렬되지 않은 저장의 경우, 메모리 시스템(350)은 하나의 캐쉬 라인(EA[31:5])의 끝과 다음 캐쉬 라인(EA[31:5]+1)의 시작에 저장 데이터를 저장하고, 정렬기(340)는 데이터 엘리먼트가 두 번의 기록을 위해 적당한 위치에 놓이도록 저장 데이터를 정렬시킨다. 본 발명의 예시적인 실시예에서, 정렬기(340)는 또한 데이터 벡터내에서 데이터 엘리먼트의 위치를 쉬프트, 셔플, 또는 그렇지 않으면 변경하는 엘리먼트간 이동 명령을 실행한다. 본 발명과 동일자로 출원되어 그 전문이 본 발명에서 참조로 인용되며 출원번호가 아직 알려지지 않은 “MULTIFUNCTION DATA ALIGNER IN WIDE DATA WIDTH PROCESSOR”라는 발명의 명칭을 갖는 미합중국 특허출원 명세서에는 예시적인 실시예를 위한 적합한 정렬기가 기재되어 있다.
만일 로드 명령이 다음에 큐(310)에 있고 메모리 시스템이 요구를 수락할 준비가 되어 있을 때, 제어 회로(330)는 메모리 시스템(350)에 요구 신호 REQ와 어드레스 신호를 어써트한 다음, 메모리 시스템(350)이 데이터를 반환하기를 대기한다. 각각의 요구는 다수의 계류중인 요구를 구별하는 트랜잭션 ID를 갖는다. 메모리 시스템(350)은 데이터 버스(345)에 데이터 버스를 인가하고, 이전에 요구된 로드 데이터가 이용가능할 때 데이터 버스에 대해 트랜잭션 ID를 가리킨다. 정렬되지 않은 로드 명령의 경우, 두개의 정렬되지 않은 벡터가 요구되고, 정렬기(340)는 레지스터 화일(132)에 두 조각으로 기록하기 위해 로드 데이터를 정렬한다.
저장 명령이 다음에 큐(310 과 325)에 있고 신호 BUSY가 메모리 시스템(350)이 요구를 수락할 것이라는 것을 가리킬 때, 제어 회로(330)는 해당 판독 제어(160)가 저장 데이터를 공급할 것을 요구하고 메모리 시스템(350)에의 액세스 요구한다. 한 사이클 후에, 저장 데이터는 래치(138)에 있고 저장 스테이지(242)는 메모리 시스템이 데이터 버스(345)에 액세스를 인가하는 지를 시작한다. 저장 스테이지(242) 동안, 정렬기(340)는 필요하다면 정렬되지 않은 저장 동작에 대해 저장 데이터를 정렬시키고, 제어 회로(330)는 어드레스 큐(325)로부터의 어드레스와 정렬된 데이터를 메모리 시스템(350)에 어써트한다. 이때 메모리 시스템(350)에 내재하는 동작을 제외하고 저장은 완료하며, 저장 스코어보드(156)에서, 완료된 저장 명령에 대한 저장 데이터 레지스터 번호가 제거될 수 있다.
표 1은 프로세서(100)의 동작을 도시하는 샘플 코드를 포함한다.
표 1에서, 명령 vadd.x Ri, Rj, Rk는 데이터 엘리먼트의 합을 두개의 레지스터 Rj 및 Rk에서 레지스터 Ri에 기록하는 ALU 명령이다(여기서, “x”는 데이터 엘리먼트에 대한 데이터 종류를 가르킨다). 명령 vstore.32 VRi, SRj, SRk는 데이터 벡터를 레지스터 VRi에서 스칼라 레지스터 SRi 및 SRk의 값으로부터 결정된 유효 어드레스에 저장하는 저장 명령이다. 명령 vcbr.cc는 조건 분기이다(여기서, “.cc”는 취해질 분기가 만족되어야 하는 조건을 가리킨다. 표 1에서 명령은 의존성을 갖는다. 특히, 첫번째 명령은 두번째 명령에 소스 오퍼런드를 제공하는 레지스터 VR3에 결과를 기록하고, 두번째 명령은 네번째 명령에 저장 데이터를 공급하는 레지스터 VR5에 결과를 기록한다. 프로세서(100)에서, 이들 의존성은 명령의 디코딩을 제한하지 않는다.
표 1에서 코드의 경우, IFU(110)는 초기에 첫번째 명령, vadd.w VR3, VR2, VR1을 갖는 래치(114)를 로드하는데, 여기서 디코더(120)는 첫번째 클럭 사이클 동안 디코드한다. 디코더(122)가 두번째 명령 vadd.w VR5, VR4, VR3를 디코드할 수 없기 때문에 어떠한 명령도 초기에 래치(116)에 로드되지 않는다. 첫번째 클럭 사이클의 끝에서, 어떠한 파이프라인 정체도 없다고 가정하면, IFU(110는 두번째 명령을 래치(114)에 로드하고, 세번째 명령 vstore.32 VR5, SR2, SR1을 래치(116)에 로드하며, 디코더(120)는 소스 오퍼런드 VR1과 VR2에 대한 레지스터 번호를 래치(124)에 래치한다.
두번째 클럭 사이클 동안, 첫번째 명령은 판독 스테이지(220)로 진행하고, 판독 제어 회로(160)는 벡터 레지스터 화일(130)로부터 판독하기 위해 래치 A로부터 레지스터 번호를 선택한다. 또한, 두번째 클럭 사이클 동안, 디코더(120 및 122)는 두번째 및 세번째 명령을 병렬로 디코드한다. 두번째 사이클의 끝에서, IFU(110)는 네번째 명령 vcbr.gt loop를 래치(116)에 로드하고, 디코더(120 및 122)는 소스 오퍼런드 VR3, VR4, SR1 및 SR2에 대한 레지스터 번호를 래치(124 및 126)에 로드하고, 벡터 레지스터 화일(130)로부터의 오퍼런드 VR1 및 VR2는 오퍼런드 정렬 멀티플렉서(134)를 통해 래치(136)로 로드된다.
세번째 클럭 사이클 동안, 첫번째 명령은 실행 유닛(140)의 실행 스테이지(230)으로 진행하고, 두번째 및 세번째 명령은 판독 스테이지(220)로 진행하고, 네번째 명령이 디코드된다. 두번째 및 세번째 명령의 판독 스테이지(220)의 경우, 판독 제어 회로(160)는 첫번째 명령에 대한 소스 레지스터 VR3의 의존성을 검출한다. 따라서, 판독 제어 회로(160)는 레지스터 화일(130 및 132)로부터 판돌될 소스 오퍼런드 VR4, SR1 및 SR2를 선택하고, 오퍼런드 포워딩을 위해 소스 오퍼런드 VR3를 선택한다. 예시적인 실시예에서, 실행 유닛(140)은 정수 데이터 엘리먼트를 갖는 첫 번째 명령 “vadd” 명령에 대해 실행 스테이지(230)를 완료하여, 한 클럭 사이클로 첫번째 명령으로부터의 결과가 두번째 명령으로 포워드될 수 있다. 두번째 클럭 사이클의 끝에서, 실행 유닛(140)은 래치(148)에 저장되고 있고 오퍼런드 정렬 멀티플렉서(134)를 통해 래치(136)에 저장되어 있는 첫번째 명령의 결과를 공급한다. 레지스터 화일(130 및 132)로부터 판독된 소스 오퍼런드는 또한 래치(136 및 138)에 저장된다. 디코드된 분기 명령은 조건 코드를 바꿀 수 있는 초기 명령이 완료된 후 조건 코드 “gt”를 IFU(110)에 반환할 것을 필요로 한다. 따라서, 네번째 명령의 실행은 파이프라인 제어 유닛(150)에 의해 전적으로 처리될 수 있다. 그러나, 다른 어드레싱 모드를 갖는 분기 명령은 분기 어드레스 계산을 위해 데이터의 스칼라 레지스터 화일(132)로부터의 판독이 IFU(110)로 반환될 것을 필요로 한다.
네번째 클럭 사이클 동안, 두번째 및 세번째 명령은 실행 스테이지(230)와 어드레스 스테이지(232)로 각각 진행하고, 첫번째 명령 결과는 래치(148)에서 벡터 레지스터 화일(130)에 기록된다. 분기 명령에 대한 조건 코드는 세번째 명령, 즉 조건 코드를 바꿀 수 있는 마지막 명령이 완료될 때까지 반환될 수 없다. 따라서, IFU(110)는 프로그램 순서가 분기가 취해졌는 지에 대한 결정에 의해 세트될 때까지 래치(114 및 116)에 어떠한 새로운 명령도 로드하지 않는다. 세번째 클럭의 끝에서, 세번째 명령으로부터의 결과가 완료되어 래치(148)에 저장되고, 저장 명령의 어드레스 스테이지가 완료된다. 만일, 세번째 클럭 동안, 메모리 시스템(350)이 비지가 아니며 세번째 명령 이전에 다른 로드/저장 명령이 큐(310 및 325)에 있지 않으면, 실행 유닛(142)은 저장 데이터를 요구하고, 판독 제어 회로(160)는 실행 유닛(140)에서 래치(138)로 저장 데이터를 포워드하기를 선택한다.
다섯번째 클럭 사이클 동안, 조건 코드는 IFU로 반환될 수 있고, 두번째 명령으로부터의 결과가 레지스터 화일(130)의 레지스터 VR5에 기록되며, 실행 유닛(142)은 메모리 시스템(350)이 데이터 버스(345)에 액세스를 인가하자마자 래치(138)로부터의 저장 데이터를 액세스한다.
제4도는 제1도의 송출 제어 회로(170)의 실시예에 대한 블럭도이다. 도시된 실시예에서, 송출 제어 회로(170)는 저장 스코어보드(156)에 결합된 비의존성 점검 블럭(430), 레지스터 화일 스코어보드(152)에 결합된 WAW 의존성 점검 블럭(440), 래치(136 및 138)에 결합된 RAW 의존성 점검 블럭(450), 및 자원 스코어보드(152)와 실행 블럭(142)에 결합된 구조 의존성 점검 블럭(460)을 구비한다. A경로 송출 유효 블럭(410)은, 만일 점검 블럭(430과 440)이 실행 유닛(140)으로 송출될 명령의 목적지 오퍼런드 및 계류중인 명령의 목적지가 송출된 저장 명령에 대한 저장 데이터의 소스가 아니라는 것을 가리키고; 점검 블럭(460)이 실행을 위해 요구되는 자원이 이용가능할 것이라는 것을 가리키고; 점검 블럭(450)이 래치(136)에 있는 모든 필요한 오퍼런드가 유효하다는 것을 가리키면 실행 유닛(140)에 명령의 송출을 인에이블시킨다. B경로 송출 유효 블럭(410)은, 만일 점검 블럭(430 및 440)이 실행 유닛(142)으로 송출될 명령의 목적지 오퍼런드가 송출된 저장 명령에 대한 저장 데이터의 소스와 계류중인 임의의 명령의 목적지가 아니하는 것을 가리키고; 점검 블럭(460)이 실행 유닛(142)이 명령을 수락할 준비가 되어 있다는 것, 즉 명령어 큐(310)에 이용가능한 공간을 가지고 있으며 정체되어 있지 않다는 것을 가리키고; 점검 블럭(450)은 래치(138)에 있는 모든 필요한 오퍼런드가 유효하며, A경로 송출 유효화 블럭(410)이 실행 유닛(140)으로 명령의 송출을 정체시키지 않는 다는 것을 가리킬 때 실행 유닛(142)으로의 명령의 송출을 인에이블시킨다.
제5도는 제1도의 저장 스코어보드(156)의 실시예에 대한 블럭도이다. 도시된 실시예는 네 개의 8-비트 엔트리와 3개의 세트의 7-비트 비교기(520, 530 및 540)을 갖는 메모리(510)를 구비한다. 네 개의 엔트리는 기껏해야 네 개의 저장 명령이 실행 유닛(142)에서 동시에 계류할 수 있기 때문에 예시적인 실시예에 사용된다. 송출 제어 회로(170)가 저장 명령을 송출할 때, 저장 데이터의 레지스터 소스를 가리키는 7-비트 레지스터 번호는 메모리(510)의 엔트리에 기록되고 엔트리의 유효 비트가 세트된다. 실행 유닛(142)이 저장 명령을 완료하기 위해 저장 데이터를 요구하면, 신호 Store_Reg_Num이 비교기(520)에 어써트되고; 만일 임의의 유효 엔트리가 신호 Store_Reg_Num과 같은 레지스터 번호를 포함하면, 해당 엔트리의 유효 비트는 엔트리를 무효로 하기 위해 클리어 된다.
비의존성 점검 블럭(430)은 실행 유닛(140)으로 송출하는 것으로 고려되고 있는 명령에 대한 목적지 레지스터를 가리키는 신호 A_DST를 비교기(540)에 어써트 하고, 비교기(540)는 메모리(510)의 유효 엔트리로부터 레지스터 번호에 신호 A_DST를 비교한다. 만일 유효 엔트리로부터의 어떠한 레지스터 번호도 신호 A_DST와 같지 않으면, 명령은 계류중인 저장 명령을 갖는 비의존성을 가지지 않고 신호 Ainst_anti_ok가 어써트된다. 비의존성 점검 블럭(430)은 또한 실행 유닛(142)으로 송출하는 것으로 고려되고 있는 명령에 대한 목적지 레지스터를 가리키는 신호 B_DST1와 B_DST2를 비교기(530)에 어써트하고, 비교기(530)는 메모리(510)의 유효 엔트리로부터의 레지스터 번호에 신호 B_DST1과 B_DST2를 비교한다. 만일 유효 엔트리로부터의 어떠한 레지스터 번호도 신호 B_DST1과 B_DST2중 어느 하나와도 같지 않으면, 명령은 계류중인 저장 명령을 갖는 비의존성을 가지지 않고 신호 Binst_anti_ok가 어써트된다.
제6도는 레지스터 화일 스코어보드(152)의 예시적인 실시예를 도시한다. 예시적인 실시예에서, 레지스터 화일 스코어보드(152)는 벡터 레지스터 VR0 내지 VR63의 각각에 대해 1비트를 갖는 64-비트 플립-플롭(650)과, 스칼라 레지스터 SR0 내지 SR31 각각에 대해 1 비트를 갖는 32-비트 플립-플롭(660)를 구비한다. 만일 비트가 실행 유닛(140 및 142)으로 송출된 명령의 목적지 오퍼런드인 레지스터와 연관되어 있다면, 플립-플롭(650 또는 660)의 비트가 세트된다. 명령이 완료되고 결과가 목적지 레지스터에 기록되면, 목적지 레지스터와 연관된 플립-플롭(650 또는 660)의 비트가 클리어된다.
멀티플렉서(671 또는 679)는 플립-플롭(650 또는 660)으로부터 개별적인 비트를 판독한다. 판독 제어 회로(160)는 임의의 계류중인 명령이 래치(124 및 126)의 최대 6개 레지스터 번호에 의해 가리켜진 소스 오퍼런드에 기록하는 지를 결정하기 위해 멀티플렉서(671 또는 676)를 이용한다. 만일 신호 SCR_OUT1 내지 SCR_OUT6중 임의의 신호가 어써트(하이)되면, 멀티플렉서 선택 신호 ADEC_RD1 내지 ACDE_RD3와 BDEC_RD1 내지 BDEC_RD3중의 연관된 것에 의해 식별된 레지스터가 RAW 의존성을 가지며, 판독보다는 오퍼런드 포워딩에 의해 결정된다. 송출 제어 회로(170)에 있는 WAW 점검 블럭(440)은 멀티플렉서(677 또는 679)를 이용하여 실행 유닛(140 및 142)으로 송출하는 것으로 고려되고 있는 명령의 목적지 오퍼런드가 임의의 계류중인 명령에 대한 목적지 오퍼런드인 지를 결정한다. 신호 A_DST, B_DST1, 및 B_DST2은 송출하는 것으로 고려되는 명령의 목적지 레지스터를 식별하고, 멀티플렉서(677 또는 678)에 대한 선택 신호이다.
각 클럭 사이클에서 최대 두개 명령이 송출될 수 있다. 예시적인 실시예의 경우, 실행 유닛(140)은 기껏해야 하나의 목적지 레지스터, 목적지 신호 DST_ADDRO[5:0]에 의해 식별된 벡터 레지스터 또는 목적지 신호 DST_ADDR2[4:0]에 의해 식별된 스칼라 레지스터를 갖는 명령을 실행한다. 실행 유닛(142)은 목적지 신호 DST_ADDR1[5:0]에 의해 식별된 벡터 레지스터와, 목적지 신호 DST_ADDR3[4:0] 및 DST_ADDR4[4:0]에 의해 식별된 두개의 스칼라 레지스터로부터 선택된 기껏해야 두개의 목적지 레지스터를 갖는 명령을 실행한다. 1진법 변환기(614, 616, 624, 626 및 628)와 OR 게이트(632 및 624)는 이들 목적지 신호들을 명령이 송출될 때 플립-플롭(650 또는 660)의 개별적인 비트를 세트시키는 신호로 변환한다.
결과가 레지스터 화일(130 및 132)에 기록될 때, 기록 제어 회로(180)는 1진법 변환기(610, 612, 620 및 622)에 기록된 레지스터를 식별하는 기록-어드레스 신호 WT_ADDR0 내지 WT_ADD3을 어써트한다. 1진법 변환기(610, 612, 620 및 622)와 OR 게이트(630 및 620)는 이들 기록-어드레스 신호들을 기록-어드레스 신호들에 대응하는 플립-플롭(650 또는 660)의 개별적인 비트를 클리어하는 신호로 변환한다.
본 발명의 슈퍼스칼라 프로세서는 저장 명령이 저장 데이터를 발생하는 초기의 명령과 함께 동시에 디코드되는 것을 가능하게 하고, 간단한 비의존성 인터록이 저장 명령을 계류시키는 저장 데이터를 보유하는 레지스터를 식별하는 레지스터 번호의 리스트를 이용하여 상기 레지스터 명령의 목적지 오퍼런드의 레지스터 번호와 비교하고, 저장 데이터의 소스에 일치하는 목적지 오퍼런드를 갖는 명령이 판독 스테이지에서 정체되어, 초기의 저장 명령이 완료될 때까지 명령이 저장 데이터를 파괴하는 것을 방지한다.
본 발명을 특정의 바람직한 실시예에 관련하여 도시하고 설명하였지만, 본 발명이 그에 한정되는 것은 아니고 이하의 특허청구범위에 의해 마련되는 본 발명의 정신이나 분야를 이탈하지 않는 한도내에서 본 발명이 다양하게 개조 및 변화될 수 있다는 것을 당 업계에서 통상의 지식을 가진 자는 용이하게 알 수 있다.
Claims (11)
- 슈퍼스칼라 프로세서에 있어서, 제1분류의 명령(a first class of instructions)을 디코드하도록 적응된 제1명령 디코더. 제2부류의 명령(a second class of instructions)을 디코드하도록 적응되어 있고, 로드/저장 명령을 포함하는 제2명령 디코더, 상기 제1부류에 있는 명령을 실행하도록 적응된 제1실행 유닛, 상기 제2부류에 있는 명령을 실행하도록 적응된 제2실행 유닛, 상기 제1 및 제2실행 유닛에 소스 오퍼런드를 공급하도록 결합된 레지스터 화일, 및 상기 레지스터 화일, 상기 제1 및 제2명령 디코더, 및 제2실행 유닛에 결합된 판독 제어 회로를 구비하고; 각각의 클럭 사이클 동안, 상기 판독 제어 회로는 상기 제1디코더에 의해 식별된 오퍼런드 중에서 상기 제2디코더에 의해 식별된 오퍼런드와, 상기 클럭 사이클 동안 상기 레지스터 화일로부터 오퍼런드가 판독되는 지를 결정하기 위해 상기 제2실행 유닛에 계류중인 저장 명령에 대한 저장 오퍼런드를 선택하는 것을 특징으로 하는 슈퍼스칼라 프로세서.
- 제1항에 있어서, 저장 데이터를 공급하는 레지스터를 식별하는 정보를 저장하는 스코어보드 회로, 및 상기 스코어보드 회로에 결합되어 있으며, 상기 제1 및 제2실행 유닛에 명령을 송출하는 송출 제어 회로를 추가로 구비하고; 상기 프로세서는, 상기 송출 제어 회로가 저장 명령을 송출할 때, 상기 스코어보드 회로가 상기 송출된 저장 명령에 대해 저장 데이터를 공급하는 레지스터를 식별하도록, 상기 스코어보드 회로를 세트시키기 위한 수단, 및 상기 스코어보드 회로에 의해 식별된 목적지를 갖는 명령의 송출을 디스에이블시키도록 결합된 인터록 회로,를 구비하는 것을 특징으로 하는 슈퍼스칼라 프로세서.
- 제2항에 있어서, 상기 스코어보드 회로는 레지스터 번호의 리스트를 저장하기 위한 메모리를 구비하고, 상기 스코어보드 회로를 세트시키기 위한 상기 수단은 저장 명령이 송출될 때 리스트의 엔트리에 레지스터 번호를 기록하는 것을 특징으로 하는 슈퍼스칼라 프로세서.
- 제3항에 있어서, 상기 레지스터 번호에 대응하는 레지스터로부터 상기 저장 데이터를 판독하는 것에 응답하여 상기 리스트로부터 레지스터 번호를 제거하기 위한 수단을 더 구비하는 것을 특징으로 하는 슈퍼스칼라 프로세서.
- 제3항에 있어서, 상기 제2실행 유닛은 상기 제2실행 유닛에 의해 실행되고 있는 다수의 명령에 관계되는 정보를 저장하기 위한 큐를 포함하고, 상기 제2실행 유닛의 상기 스코어보드 회로와 상기 큐에 있는 상기 리스트는 동일한 수의 엔트리를 갖는 것을 특징으로 하는 슈퍼스칼라 프로세서.
- 슈퍼스칼라 프로세서의 동작 방법에 있어서, 저장 명령에 대해 저장 데이터를 발생하는 저장 명령과 제2명령을 동시에 디코드하는 단계; 상기 저장 명령과 상기 제2명령의 실행에 필요하며, 상기 저장 명령에 의해 사용된 유효 어드레스의 계산에 필요한 오퍼런드를 동시에 판독하는 단계; 제1실행 유닛에 상기 저장 명령을 그리고 제2실행 유닛에 상기 제2명령을 동시에 송출하는 단계; 및 상기 저장 명령을 실행하기 위해 상기 제1실행 유닛에 의해 요구될 때 상기 저장 명령에 대한 저장 데이터를 요구하는 단계;를 포함하는 것을 특징으로 하는 슈퍼스칼라 프로세서의 동작 방법.
- 제6항에 있어서, 저장 데이터의 상기 요구에 응답하여 상기 제2실행의 결과를 상기 제1실행 유닛으로 포워드하는 단계를 더 포함하는 것을 특징으로 하는 슈퍼스칼라 프로세서의 동작 방법.
- 제6항에 있어서, 상기 실행으로부터의 상기 제2명령의 결과를 레지스터 화일에 기록하는 단계; 및 저장 데이터의 상기 요구에 응답하여 상기 레지스터 화일로부터 결과를 판독하는 단계를 더 포함하는 것을 특징으로 하는 슈퍼스칼라 프로세서의 동작 방법.
- 슈퍼스칼라 프로세서의 동작 방법에 있어서, 저장 명령에 대해 어드레스를 계산하는데 필요한 오퍼런드를 판독하는 단계; 상기 저장 명령을 실행 유닛에 송출하는 단계; 상기 저장 명령을 송출할 때, 스코어보드 회로가 상기 저장 명령에 대한 저장 데이터의 소스를 식별하도록, 스코어보드 회로를 세트시키는 단계; 상기 스코어보드 회로가 저장 데이터의 소스로서 식별하는 목적지 오퍼런드를 갖는 임의의 명령의 송출을 방지하는 단계; 상기 저장 명령을 실행하기 위해 상기 제1실행 유닛에 의해 요구될 때 상기 저장 명령에 대한 저장 데이터를 요구하는 단계; 및 상기 저장 명령이 완료될 때, 상기 스코어보드 회로가 더 이상 상기 저장 명령에 대한 저장 데이터의 소스를 식별하지 않도록 상기 스코어보드 회로를 리셋하는 단계;를 포함하는 것을 특징으로 하는 슈퍼스칼라 프로세서의 동작 방법.
- 제9항에 있어서, 상기 스코어보드 회로의 세팅은 상기 저장 데이터의 소스와 연관된 레지스터 번호를 레지스터 번호의 리스트에 있는 엔트리에 기록하는 것을 포함하는 것을 특징으로 하는 슈퍼스칼라 프로세서의 동작 방법.
- 제10항에 있어서, 상기 스코어보드의 리셋팅은 레지스터 번호의 상기 리스트에 있는 엔트를 무효화하는 것을 포함하는 것을 특징으로 하는 슈퍼스칼라 프로세서의 동작 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/805,392 US5922066A (en) | 1997-02-24 | 1997-02-24 | Multifunction data aligner in wide data width processor |
US8/805,392 | 1997-02-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR19980069854A KR19980069854A (ko) | 1998-10-26 |
KR100267097B1 true KR100267097B1 (ko) | 2000-10-02 |
Family
ID=25191444
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019970034997A KR100267097B1 (ko) | 1997-02-24 | 1997-07-25 | 슈퍼스칼라 프로세서에서 간단한 비의존성 파이프라인 인터록 제어로서 판독되는 지연된 저장 데이터 |
KR1019970034999A KR100236525B1 (ko) | 1997-02-24 | 1997-07-25 | 넓은 데이타 폭의 프로세서에서 다기능 데이타 정렬기 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019970034999A KR100236525B1 (ko) | 1997-02-24 | 1997-07-25 | 넓은 데이타 폭의 프로세서에서 다기능 데이타 정렬기 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5922066A (ko) |
KR (2) | KR100267097B1 (ko) |
Families Citing this family (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6295599B1 (en) | 1995-08-16 | 2001-09-25 | Microunity Systems Engineering | System and method for providing a wide operand architecture |
US5953241A (en) * | 1995-08-16 | 1999-09-14 | Microunity Engeering Systems, Inc. | Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction |
US5742840A (en) * | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US6643765B1 (en) * | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US7301541B2 (en) | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
US7197625B1 (en) * | 1997-10-09 | 2007-03-27 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US5933650A (en) * | 1997-10-09 | 1999-08-03 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6085312A (en) * | 1998-03-31 | 2000-07-04 | Intel Corporation | Method and apparatus for handling imprecise exceptions |
US6334176B1 (en) * | 1998-04-17 | 2001-12-25 | Motorola, Inc. | Method and apparatus for generating an alignment control vector |
US6636767B1 (en) * | 1999-09-29 | 2003-10-21 | Restore Medical, Inc. | Implanatable stimulation device for snoring treatment |
US6820195B1 (en) * | 1999-10-01 | 2004-11-16 | Hitachi, Ltd. | Aligning load/store data with big/little endian determined rotation distance control |
JP2001229021A (ja) * | 2000-02-18 | 2001-08-24 | Mitsubishi Electric Corp | データ処理装置 |
US6745319B1 (en) * | 2000-02-18 | 2004-06-01 | Texas Instruments Incorporated | Microprocessor with instructions for shuffling and dealing data |
US7120781B1 (en) * | 2000-06-30 | 2006-10-10 | Intel Corporation | General purpose register file architecture for aligned simd |
US6643736B1 (en) * | 2000-08-29 | 2003-11-04 | Arm Limited | Scratch pad memories |
GB0024312D0 (en) * | 2000-10-04 | 2000-11-15 | Advanced Risc Mach Ltd | Single instruction multiple data processing |
US6813734B1 (en) | 2001-01-26 | 2004-11-02 | Catamaran Communications Incorporated | Method and apparatus for data alignment |
US6965606B2 (en) * | 2001-01-26 | 2005-11-15 | Exar Corporation | Method and apparatus for byte rotation |
JP3776732B2 (ja) * | 2001-02-02 | 2006-05-17 | 株式会社東芝 | プロセッサ装置 |
US7711763B2 (en) | 2001-02-21 | 2010-05-04 | Mips Technologies, Inc. | Microprocessor instructions for performing polynomial arithmetic operations |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
US7181484B2 (en) | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US7937559B1 (en) | 2002-05-13 | 2011-05-03 | Tensilica, Inc. | System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes |
US7376812B1 (en) * | 2002-05-13 | 2008-05-20 | Tensilica, Inc. | Vector co-processor for configurable and extensible processor architecture |
US7275147B2 (en) * | 2003-03-31 | 2007-09-25 | Hitachi, Ltd. | Method and apparatus for data alignment and parsing in SIMD computer architecture |
US7793072B2 (en) * | 2003-10-31 | 2010-09-07 | International Business Machines Corporation | Vector execution unit to process a vector instruction by executing a first operation on a first set of operands and a second operation on a second set of operands |
US7933405B2 (en) * | 2005-04-08 | 2011-04-26 | Icera Inc. | Data access and permute unit |
US8099448B2 (en) * | 2005-11-02 | 2012-01-17 | Qualcomm Incorporated | Arithmetic logic and shifting device for use in a processor |
US20070226453A1 (en) * | 2006-03-23 | 2007-09-27 | Eichenberger Alexandre E | Method for improving processing of relatively aligned memory references for increased reuse opportunities |
US7809926B2 (en) * | 2006-11-03 | 2010-10-05 | Cornell Research Foundation, Inc. | Systems and methods for reconfiguring on-chip multiprocessors |
US20080229062A1 (en) * | 2007-03-12 | 2008-09-18 | Lorenzo Di Gregorio | Method of sharing registers in a processor and processor |
US8161271B2 (en) * | 2007-07-11 | 2012-04-17 | International Business Machines Corporation | Store misaligned vector with permute |
US7783860B2 (en) * | 2007-07-31 | 2010-08-24 | International Business Machines Corporation | Load misaligned vector with permute and mask insert |
KR20100101449A (ko) * | 2009-03-09 | 2010-09-17 | 삼성전자주식회사 | 메모리 장치, 그것의 마스크 데이터 전송 방법 및 입력 데이터 정렬 방법 |
JP5699554B2 (ja) * | 2010-11-11 | 2015-04-15 | 富士通株式会社 | ベクトル処理回路、命令発行制御方法、及びプロセッサシステム |
US9569211B2 (en) | 2012-08-03 | 2017-02-14 | International Business Machines Corporation | Predication in a vector processor |
US9632777B2 (en) * | 2012-08-03 | 2017-04-25 | International Business Machines Corporation | Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry |
US9575755B2 (en) | 2012-08-03 | 2017-02-21 | International Business Machines Corporation | Vector processing in an active memory device |
US9594724B2 (en) | 2012-08-09 | 2017-03-14 | International Business Machines Corporation | Vector register file |
US9268571B2 (en) * | 2012-10-18 | 2016-02-23 | Qualcomm Incorporated | Selective coupling of an address line to an element bank of a vector register file |
US9632781B2 (en) | 2013-02-26 | 2017-04-25 | Qualcomm Incorporated | Vector register addressing and functions based on a scalar register data value |
US9304749B2 (en) * | 2013-09-12 | 2016-04-05 | Marvell World Trade Ltd. | Method and system for instruction scheduling |
CN104915183B (zh) * | 2015-06-23 | 2018-10-16 | 北京玉华骢科技股份有限公司 | 一种多发射流水线的前馈探测电路 |
CN111651199B (zh) * | 2016-04-26 | 2023-11-17 | 中科寒武纪科技股份有限公司 | 一种用于执行向量循环移位运算的装置和方法 |
US10275217B2 (en) * | 2017-03-14 | 2019-04-30 | Samsung Electronics Co., Ltd. | Memory load and arithmetic load unit (ALU) fusing |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4785393A (en) * | 1984-07-09 | 1988-11-15 | Advanced Micro Devices, Inc. | 32-Bit extended function arithmetic-logic unit on a single chip |
US5471593A (en) * | 1989-12-11 | 1995-11-28 | Branigin; Michael H. | Computer processor with an efficient means of executing many instructions simultaneously |
US5598546A (en) * | 1994-08-31 | 1997-01-28 | Exponential Technology, Inc. | Dual-architecture super-scalar pipeline |
US5787302A (en) * | 1996-05-15 | 1998-07-28 | Philips Electronic North America Corporation | Software for producing instructions in a compressed format for a VLIW processor |
-
1997
- 1997-02-24 US US08/805,392 patent/US5922066A/en not_active Expired - Lifetime
- 1997-07-25 KR KR1019970034997A patent/KR100267097B1/ko not_active IP Right Cessation
- 1997-07-25 KR KR1019970034999A patent/KR100236525B1/ko not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
US5922066A (en) | 1999-07-13 |
KR19980069854A (ko) | 1998-10-26 |
KR100236525B1 (ko) | 2000-01-15 |
KR19980069855A (ko) | 1998-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100267097B1 (ko) | 슈퍼스칼라 프로세서에서 간단한 비의존성 파이프라인 인터록 제어로서 판독되는 지연된 저장 데이터 | |
US5881307A (en) | Deferred store data read with simple anti-dependency pipeline inter-lock control in superscalar processor | |
US6718457B2 (en) | Multiple-thread processor for threaded software applications | |
US6279100B1 (en) | Local stall control method and structure in a microprocessor | |
US5961628A (en) | Load and store unit for a vector processor | |
US5546597A (en) | Ready selection of data dependent instructions using multi-cycle cams in a processor performing out-of-order instruction execution | |
USH1291H (en) | Microprocessor in which multiple instructions are executed in one clock cycle by providing separate machine bus access to a register file for different types of instructions | |
US7730285B1 (en) | Data processing system with partial bypass reorder buffer and combined load/store arithmetic logic unit and processing method thereof | |
EP1230591B1 (en) | Decompression bit processing with a general purpose alignment tool | |
US6148395A (en) | Shared floating-point unit in a single chip multiprocessor | |
WO2000033183A9 (en) | Method and structure for local stall control in a microprocessor | |
EP1422617A2 (en) | Coprocessor architecture based on a split-instruction transaction model | |
US20110040939A1 (en) | Microprocessor with integrated high speed memory | |
US7779240B2 (en) | System and method for reducing power consumption in a data processor having a clustered architecture | |
US20010042187A1 (en) | Variable issue-width vliw processor | |
US6615338B1 (en) | Clustered architecture in a VLIW processor | |
US6405303B1 (en) | Massively parallel decoding and execution of variable-length instructions | |
CN111984316A (zh) | 用于在处理器中比较源数据的方法和设备 | |
US6442675B1 (en) | Compressed string and multiple generation engine | |
US20040255102A1 (en) | Data processing apparatus and method for transferring data values between a register file and a memory | |
US7757066B2 (en) | System and method for executing variable latency load operations in a date processor | |
US7028164B2 (en) | Instruction fetch apparatus for wide issue processors and method of operation | |
CN111984314A (zh) | 使用位反转顺序的矢量存储 | |
US7519794B2 (en) | High performance architecture for a writeback stage | |
US11775310B2 (en) | Data processing system having distrubuted registers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20130701 Year of fee payment: 14 |
|
FPAY | Annual fee payment |
Payment date: 20140630 Year of fee payment: 15 |
|
FPAY | Annual fee payment |
Payment date: 20150630 Year of fee payment: 16 |
|
FPAY | Annual fee payment |
Payment date: 20160630 Year of fee payment: 17 |
|
LAPS | Lapse due to unpaid annual fee |