KR100254008B1 - 2개의 명령을 동시에 실행할 수 있는 데이타 프로세서 - Google Patents

2개의 명령을 동시에 실행할 수 있는 데이타 프로세서 Download PDF

Info

Publication number
KR100254008B1
KR100254008B1 KR1019910013022A KR910013022A KR100254008B1 KR 100254008 B1 KR100254008 B1 KR 100254008B1 KR 1019910013022 A KR1019910013022 A KR 1019910013022A KR 910013022 A KR910013022 A KR 910013022A KR 100254008 B1 KR100254008 B1 KR 100254008B1
Authority
KR
South Korea
Prior art keywords
instruction
register
instructions
command
decoder
Prior art date
Application number
KR1019910013022A
Other languages
English (en)
Other versions
KR920004964A (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 KR920004964A publication Critical patent/KR920004964A/ko
Priority to KR1019960030542A priority Critical patent/KR100254007B1/ko
Application granted granted Critical
Publication of KR100254008B1 publication Critical patent/KR100254008B1/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
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

2개의 명령을 동시에 실행할 수 있는 32비트 RISC 마이크로 프로세서로서, 소프트웨어 작성상의 제약이 많고, 종래의 하드웨어를 위해 작성된 프로그램을 병렬로 실행하는 하드웨어를 위해 변환이 필요하며, 종래의 하드웨어와의 호환성을 유지할 수 없는 문제를 해소하기 위해, 2개의 명령을 동시에 실행할 수 있는 데이타 프로세서(610)의 명령페치유닛(640)은 1사이클로 메모리(620)에서 제1과 제2의 명령을 페치하고, 이 페치된 제1과 제2 명령은 제1과 제2의 레지스터(641, 642)에 세트된 후, 제1과 제2의 명령디코더(644, 645)에서 디코드되고, 비교기(131, 132)는 제1의 명령의 종착필들의 정보와 제2의 명령의 소스 필드의 정보를 비교하고, 양정보가 일치하지 않는 경우, 비교기(121, 132)의 출력에 응답하여 병렬동작 제어유닛(646)은 제1과 제2의 명령의 제1과 제2의 명령실행유닛(651, 652)에 의해 병렬실행을 허가하고, 양 정보가 일치하는 경우, 병렬동작 제어유닛(646)은 이 병렬실행을 금지한다.
이러한 2개의 명령을 동시에 실행할 수 있는 데이타 프로세서를 사용하는 것에 의해, 파이프라인 스테이지간의 부하를 균일하게 할 수 있어 하드웨어 회로를 유효하게 이용할 수 있고, 종래의 프로그램을 그대로 실행해도 나쁜 영향을 주는 일없이 호환성을 유지할 수 있게 된다.

Description

2개의 명령을 동시에 실행할 수 있는 데이타프로세서
본 발명은 데이타프로세서에 관한 것으로써, 특히 2개의 명령을 동시에 실행할 수 있는 32비트 RISC마이크로프로세서에 관한 것이다.
명령을 고속으로 실행가능한 축소명령 세트컴퓨터(Reduced Instruction Set Computer, 이하 RISC라 한다)는 미국 IBM사에 의한 1986년 8월 18일의 미국특허출원 제896, 156호를 우선권주장으로 한 일본국 특허공개공보 소화 63-49843호에 상세하게 설명되어 있다.
복잡명령세트컴퓨터(Complex Instruction Set Computer, 이하 CISC라 한다)는 소프트웨어에서 하드웨어로 이행되는 기능의 증가에 따라서 마이크로프로세서의 하드웨어가 복잡하게 되는 것에 대해 RISC컴퓨터는 처리속도를 고속으로 하기 위해 간단한 기능을 실행하도록 그 아키택쳐가 구성된다.
이 RISC컴퓨터로써 모든 기본명령을 1머신사이클에서 실행하도록 기본명령세트를 하드웨어로 직접실행하는 기본축소명령세트머신(Primitive Instruction Sect Computing Machine System, 이하 PRISM이라 한다)도 공지이다.
한편, 성능향상의 속도가 둔해지기 시작한 CISC에서 여전히 성능향상의 속도가 향상하는 RISC로 고성능의 마이크로프로세서의 아키택쳐의 주류가 크게 변화되고 있다.
최근의 고성능의 RISC마이크로프로세서에서는 명령의 길이가 32비트로 고정된 고정길이명령을 채용하고 있으며, 이 고정길이명령은 1머신사이클에서 실행될 수 있다.
한편, 1989년의 기술문헌 「IEEE International Solid-State Circuits Conference DIGEST OF TECHNICAL PAPERS」 pp54-55에는 미국 Intel사에 의해서 개발된 마이크로프로세서가 개시되어 있고, 메모리와 접속되는 외부버스의 데이타폭은 64비트이고, 버스의 밴드폭확장에 의한 처리성능이 향상되고 있다. 즉, 64비트의 외부데이타버스를 거쳐서 메모리에서 1사이클에서 2개의 32비트명령이 마이크로프로세서에 페치되고, 이 2개의 명령이 정수연산명령과 부동소수점연산명령인 경우는 이 정수연산명령과 이 부동소수점연산명령은 정수연산유닛과 부동소수점연산유닛에 의해서 동시에 병행해서 실행될 수 있다.
한편, 상기의 일본국 특허공개공보 소화 63-49843호에는 동시에 2개의 명령을 실행하는 기능을 갖는 RISC프로세서가 개시되어 있다. 이 프로세서는 제1과 제2실행유닛, 제1과 제2명령디코드유닛, 메모리에서 명령을 페치해서 제1과 제2명령디코드유닛으로 명령을 공급하는 명령버퍼 및 레지스터파일등을 구비하고, 제1과 제2실행유닛은 레지스터파일의 출력을 동시에 받아서 병행해서 처리를 실행할 수 있다.
또, 상기의 일본국 특허공개공보 소화63-49843호에는 2개의 병렬명령을 동시에 실행하는 것이 불가능한 특별한 상황((1) 2개의 병렬명령중 제2명령이 제1명령의 결과를 필요로 하는 경우, (2) 2개의 병렬명령이 동일명령 부류에 속하는 경우, (3) 병렬명령의 한쪽이 다른쪽보다 많은 사이클을 필요로 하는 경우, (4) 병렬명령의 한쪽이 양쪽의 실행유닛을 필요로 하는 경우, (5) 2개의 병렬명령의 디스티네이션레지스터가 동일한 경우에 한쪽의 명령을 취소하는 것에 의해 2개의 명령이 순서를 벗어나 실행되지 않도록 할 필요가 있는 경우)가 개시됨과 동시에 이 특별한 상황의 대응책(상기 (1), (2)의 상황은 컴파일러에 의한 코드스케쥴링으로 대응할 것, RISC프로세서는 기본명령을 갖고, 또 여러사이클을 필요로 하는 명령은 매우 적으므로 상기 (3), (4)의 상태는 빈번하게 발생하지 않는 것, 상기 (5)의 상태에 대처하기 위해서는 예외처리 하드웨어를 사용하는 것)이 개시되어 있다.
그러나, 본 발명자들의 검토에 의하면 상기 종래기술에서는 하기와 같은 문제가 발생하는 것이 명확하게 되었다.
즉, 상기의 기술문헌에 개시된 아키택쳐에 있어서 정수연산명령은 정수연산유닛을 제어 하고, 부동소수점연산명령은 부동소수점연산유닛을 제어하므로 2개의 연산유닛사이에서 불일치가 발생하지 않는 것을 이용하고 있지만 정수를 취급하는 수치연산명령을 2개 동시에 실행하는 방식에는 이 아키택쳐는 적용할 수 없다는 문제가 있다.
한편, 상기의 일본국 특허공개공보 소화63-49843호에 개시된 방식에 있어서는 컴파일러에 의한 과도한 명령코드스케쥴링처리를 강요하고 있으므로 소프트웨어작성상의 제약이 많다는 문제가 있다.
또, 상기의 공개특허공보에 개시된 방식에 있어서는 명령코드스케쥴링을 컴파일러에 의해 실행하므로 여러 명령을 직렬로 실행하는 종래의 하드웨어를 위해 작성된 프로그램을 이 병렬실행 하드웨어를 위해 변환할 필요가 있어 종래의 하드웨어와의 호환성을 유지할 수 없다는 문제가 있다.
본 발명의 목적은 수치를 취급하는 수치연산명령을 2개 동시에 실행하는 것이 가능한 데이타프로세서를 제공하는 것이다.
본 발명의 다른 목적은 컴파일러에 대한 명령스케쥴링의 부담을 경감할 수 있는 하드웨어를 구비한 데이타프로세서를 제공하는 것이다.
본 발명의 또 다른 목적은 종래의 직렬로 실행하는 하드웨어와 프로그램의 호환성을 갖는 병렬 실행 가능한 데이타프로세서를 제공하는 것이다.
제1도는 본 발명의 1실시예인 데이타프로세서의 시스템구성을 도시한 블럭도.
제2도는 제1도의 데이타프로세서를 위한 명령포맷을 도시한 도.
제3도는 제1도의 데이타프로세서에 있어서 2개의 명령을 동시에 실행했을때의 명령제어방식을 도시한 도.
제4도는 제1도의 데이타프로세서의 파이프라인처리의 형태를 도시한 도.
제5도는 제1도의 데이타프로세서의 명령코드의 할당을 도시한 도.
제6도는 제1도의 데이타프로세서에 있어서 명령을 직렬로 실행할때의 명령제어방식을 도시한 도.
제7도는 제1도의 데이타프로세서에 있어서 2개의 명령을 동시에 실행하고 있을때 예외가 발생했을때의 처리방식을 도시한 도.
본원에서 개시되는 발명중 대표적인 실시예에 의한 마이크로프로세서의 개요는 다음과 같다.
소정 비트폭의 명령길이의 제1 및 제2명령을 메모리에서 페치하고, 상기 제1 및 제2명령을 병행으로 출력하는 명령페치유닛, 그 입력에 상기 명령페치유닛에서 출력되는 상기 제1명령이 공급되는 제1명령디코더, 그 입력에 상기 명령페치유닛에서 출력되는 상기 제2명령이 공급되는 제2명령디코더, 상기 제1명령디코더의 디코드결과에 의해서 제어되는 제1명령실행유닛, 상기 제2명령디코더의 디코드결과에 의해서 제어되는 제2명령실행유닛, 상기 제1명령의 디스티네이션필드의 정보와 상기 제2명령의 소스필드의 정보를 비교하는 비교기를 구비하고, 상기 제1명령의 디스티네이션필드의 정보와 상기 제2명령의 소스필드의 정보가 일치할때 상기 제1명령실행유닛과 상기 제2명령실행유닛에 있어서의 상기 제1 및 제2명령의 병행실행을 금지하고, 상기 제1명령을 상기 제1명령실행유닛으로 실행한다.
고정길이명령을 메모리에서 페치하는 명령페치유닛,
상기 명령페치유닛에서 출력되는 제1명령이 공급되는 제1명령디코더,
상기 명령페치유닛에서 출력되는 제2명령이 공급되는 제2명령디코더,
상기 제1명령디코더의 디코드결과에 의해서 제어되는 제1명령실행유닛,
상기 제2명령디코더의 디코드결과에 의해서 제어되는 제2명령실행유닛,
여러개의 레지스터로 이루어지는 레지스터파일 및 상기 제1명령의 디스티네이션필드의 정보와 상기 제2명령의 소스필드의 정보를 비교하는 비교기를 구비하고, 상기 제1명령의 디스티네이션필드의 정보에 의해서 지정되는 레지스터파일중의 레지스터와 상기 제2명령의 소스필드의 정보에 의해서 지정되는 레지스터파일중의 레지스터가 일치하는 경우, 상기 제1명령실행유닛과 상기 제2명령실행유닛에 있어서의 상기 제1 및 제2명령의 병행실행을 금지한다.
제1명령과 그것에 이어지는 제2명령을 동시에 실행하는 마이크로프로세서로써, 여러개의 레지스터로 이루어지는 레지스터파일, 상기 제1명령의 디스티네이션필드의 정보와 상기 제2명령의 소스필드의 정보를 비교하는 비교기를 구비하고, 상기 제1 및 제2명령은 정수연산명령이고, 상기 제1명령의 디스티네이션필드의 정보에 의해서 지정되는 레지스터파일중의 레지스터와 상기 제2명령의 소스필드의 정보에 의해서 지정되는 레지스터파일중의 레지스터가 일치하는 경우, 상기 제1명령실행유닛과 상기 제2명령실행유닛에 있어서의 상기 제1 및 제2명령의 병행실행을 금지한다.
본 발명의 그밖의 목적과 특징은 다음의 실시예의 설명에서 명확하게 될 것이다.
이하, 본 발명의 1실시예를 도면에 따라서 상세하게 설명한다.
[데이타프로세서의 개요]
도 1은 본 발명의 1실시예인 데이타프로세서의 블럭도이다. 이 데이타프로세서는 크게 분류하면 프로세서유닛(610), 프로그램메모리(620) 및 데이타메모리(630)으로 구성되어 있다.
프로그램메모리(620)은 명령어드레스버스(621) 및 명령데이타버스(622)에 의해서 프로세서유닛(610)과 접속되어 있다.
명령어드레스버스(621)은 32비트폭으로 4G(기가)바이트까지 어드레싱이 가능하다.
명령데이타버스(622)는 64비트폭으로 1회의 전송에 의해 2개의 명령이 동시에 프로그램메모리(620)에서 페치될 수 있다.
데이타메모리(630)은 오퍼랜드어드레스버스(631) 및 오퍼랜드데이타버스(632)에 의해서 프로세서유닛(610)과 접속되어 있다.
오퍼랜드어드레스버스(631)은 32비트폭으로 4G(기가)바이트까지 어드레싱이 가능하다.
오퍼랜드데이타버스(632)는 32비트폭으로 1회의 전송에 의해 1워드의 데이타가 데이타메모리(630)에서 페치 또는 저장될 수 있다.
또, 프로그램메모리(620) 및 데이타메모리(630)은 각각 예를들면 명령캐시 메모리 와 데이타캐시 메모리이고, 메인메모리(도시하지 않음)의 명령 및 데이타의 일부의 카피를 유지하는 것이다.
[프로세서의 내부구성]
프로세서유닛(610)은 명령의 어드레스를 계산하는 프로그램카운터(643) 및 프리페치한 명령을 유지하는 프리페치버퍼(640), 제1명령레지스터(641), 제2명령레지스터(642), 제1명령디코더(644), 제2명령디코더(645), 레지스터파일(650), 제1연산기(651), 제2연산기(652), 메모리어드레스레지스터(MAR)(653), 메모리데이타레지스터(MDR)(654), 병렬동작제어유닛(646)으로 이루어진다.
[프리페치유닛]
프리페치유닛인 프리페치버퍼(640)은 64비트폭으로 프로그램메모리(620)에서 한번에 페치한 2명령을 유지할 수 있다.
프리페치버퍼(640)의 내용은 제1명령레지스터(641) 및 제2명령레지스터(642)에 빈 것이 생긴 시점부터 좌측의 명령은 제1명령레지스터(641)로, 우측의 명령은 제2명령레지스터(642)로 전송된다.
본 실시예에서는 빅엔디언(big end-ean)의 어드레스할당을 채용하고 있고, 프리페치버퍼(640)에 유지된 2개의 명령중 좌측의 명령이 작은 어드레스의 명령으로써 먼저 실행되고, 그후에 우측의 명령이 실행된다.
[레지스터파일]
레지스터파일(650)은 32비트폭의 레지스터 32개 R0, R1, R2..., R31로 이루어지고, 5포트의 리드 및 3포트의 라이트가 동시에 가능하다.
[명령디코더]
1사이클에서 프로그램메모리(620)에서 명령페치버퍼(640)에 페치된 제1과 제2명령이 각각 제1과 제2디코더(644), (645)에 의해서 디코드된다.
제1과 제2디코더(644), (645)의 디코드결과에 따라서 명령실행유닛(651), (652)가 제어된다.
[명령실행유닛]
명령실행유닛의 연산기(651) 및(652)는 각각 32비트의 A측 입력(655) 및(657)과 B측 입력(656) 및(658)을 갖고, 2입력의 수치연산(산술논리연산)을 실행하는 ALU, B측 입력(656) 및(658)을 A측 입력(655) 및(657)의 자리수만큼 시프트하는 배럴시프터SF로 구성되어 있다.
[비교기]
명령프리페치버퍼(640)에서 출력되는 제1명령의 디스티네이션필드의 정보와 명령프리페치버퍼(640)에서 출력되는 제2명령의 소스필드의 정보가 일치하지 않을때에는 제1 및 제2명령을 병행하여 실행할 수 있다.
따라서, 이때 제1명령의 디스티네이션필드의 정보와 제2명령의 소스필드의 정보에 응답하여 비교기(131), (132)의 출력은 제1명령실행유닛(651)과 제2명령실행유닛(652)에 있어서의 제1 및 제2명령의 병행실행을 허가한다.
한편, 명령페치유닛(640)에서 출력되는 제1명령의 디스티네이션필드의 정보와 명령페치유닛(640)에서 출력되는 제2명령의 소스필드의 정보가 일치할때에는 제1 및 제2명령을 병행해서 실행할 수 없다. 따라서, 이때 제1명령의 디스티네이션필드의 정보와 제2명령의 소스필드의 정보에 응답하여 비교기(131), (132)의 출력은 제1명령실행유닛(651)과 제2명령실행유닛(652)에 있어서의 제1 및 제2명령의 병행실행을 금지한다.
[병렬동적제어유닛]
병렬동작제어유닛(646)은 제1명령 디코더(644) 및 제2명령디코더(645)의 디코드결과, 비교기(131), (132)의 출력등의 정보를 받고, 제1명령레지스터(641), 제2명령레지스터(642)에 세트되어 있는 2개의 명령을 병렬로 실행할 수 있는지 없는지를 판정한다.
2개의 명령을 병렬로 실행할 수 있는 경우는 제1명령디코더(644) 및 제2명령디코더(645)의 디코드결과를 유효로 해서 2개의 명령을 제1명령실행유닛(651)과 제2명령실행유닛(652)로 실행한다.
2개의 명령을 병렬로 실행할 수 없는 경우는 제2명령디코더(645)의 디코드결과를 무효화하고, 제1명령디코더(644)의 디코드결과만을 유효로해서 이 2개의 명령을 직렬로 실행한다.
명령프리페치버퍼(640)에 의해서 동시에 페치된 2개의 명령중(1) 제1명령이 수치연산명령이고, 제2명령도 수치연산명령인 경우, (2) 제1명령이 분기명령이고, 제2명령이 수치연산명령인 경우, (3) 제1명령이 수치연산명령이고, 제2명령이 메모리조작명령인 경우, (4) 제1명령이 분기명령이고, 제2명령이 메모리조작명령인 경우에 이 2개의 명령은 원칙적으로 동시에 실행할 수 있다.
그러나, (5) 제1명령이 분기명령이고, 제2명령도 분기명령인 경우 및 (6) 제1명령이 메모리조작명령이고, 제2명령도 메모리조작명령인 경우에는 상술한 하드웨어에 의해 2개의 명령의 동시실행을 억제할 수 있다.
또, (7) 제1명령의 디스티네이션레지스터가 제2명령의 소스레지스터로된 경우도 상술한 하드웨어에 의해 2개의 명령의 동시실행을 억제할 수 있으므로 명령간의 데이타의존관계를 유지할 수 있다.
일반적으로, 데이타프로세서의 명령실행빈도는 분기명령이 20∼30%, 메모리조작명령도 20∼30%, 나머지가 수치연산명령이다. 또, 분기명령이나 메모리조작명령은 각각을 2개 연속해서 실행하는 일은 드물다.
따라서, 도 1의 실시예외 2개의 명령의 동시실행을 가능하게 한 데이타프로세서에 있어서 제1명령실행유닛(651)을 수치연산명령과 분기명령용으로 한정하고, 제2명령실행유닛(652)를 수치연산명령과 메모리조작명령용으로 한정해도 성능상 거의 문제가 없다. 또, 상기와 같이 명령실행유닛의 기능을 한정하고 있으므로, 실현하는 회로규모가 적어도 된다.
[지연분기와 지연슬롯]
분기명령에서 지연분기의 방법이 사용되는 일이 자주 있다. 이 방법에서는 분기명령의 다음의 1사이클을 지연슬롯이라 하고, RISC프로세서를 위해 컴파일된 프로그램의 분기명령직후의 명령을 이 사이클에 실행한다. 이 분기명령직후의 명령의 실행후 실제의 분기를 실행한다.
이 RISC프로세서를 위해 컴파일된 프로그램의 분기명령 직후의 명령은 CISC프로세서와 같은 통상의 데이타프로세서를 위해 컴파일된 프로그램의 분기명령 직전의 명령에 대응하고 있다.
한편, 상술한 바와 같이 RISC프로세서에 있어서는 분기명령 직후의 명령(통상의 경우의 분기명령 직전의 명령)을 먼저 실행한후 분기명령을 실행한다.
지연분기 및 지연슬롯에 관해서는 Gerry Kane저에 의한 "mips RISC architechture"에 pp.1-9∼1-11(1988년)에 상세하게 기재되어 있다.
즉, 통상의 프로세서는 명령페치, 명령디코드, 명령실행의 다단의 파이프라인에 의한 명령의 병렬처리를 실행하고 있다.
이 파이프라인의 병렬처리를 위해 분기명령에 의한 분기지어드레스계산을 실행하고 있는 동안에 명령페치유닛은 분기명령에 이어지는 명령을 계속해서 페치하는 처리를 속행한다.
종래의 CISC프로세서에서 분기를 실행할때에는 선행적으로 페치한 분기명령에 계속되는 명령을 무효화하여 분기지명령을 새로 페치하여 명령디코드, 명령실행을 하는 것이다.
따라서, ClSC프로세서에서는 그 실행에 2사이클을 필요로 하는 분기명령후에 자동적으로 어느것도 작업을 실행하지 않는 1사이클(No Operation의 사이클)이 삽입된다.
한편, RISC프로세서에서는 분기를 실행할때 선행적으로 페치한 분기명령에 계속되는 명령(통상의 경우의 분기명령 직전의 명령)을 무효화하지 않고, 먼저 이 명령을 실행한후에 분기명령을 실행하여 새로 분기지명령을 페치하는 것이다.
이와 같이, RISC프로세서에서는 분기명령후에 무효화되는 일이 없는 유효한 명령을 프로그램중에 배치하는 것에 의해서 이 사이클을 유효하게 활용할 수 있다. 이와 같은 분기명령의 방법을 지연분기라 하고, 분기명령후의 1사이클은 지연슬롯이라 하고 있다.
[지연슬롯에 있어서의 2명령 동시실행]
따라서, RISC프로세서에 있어서의 2개의 명령의 동시실행을 실행하는 경우의 지연분기의 지연슬롯의 기본적인 취급에 대해서 다음에 설명한다.
먼저, 직전의 명령이 조건분기명령이고, 그후에 2개의 명령을 페치한 경우, (1) 조건분기명령의 조건이 성립하는 경우 지연슬롯에서는 제1명령만 실행한다. (2) 만약 조건분기명령의 조건이 성립하지 않는 경우, 제2명령도 제1명령과 동시에 실행할 수 있는 것이라면 2개의 명령을 지연슬롯으로 실행한다. 이 지연분기의 동작에 대해서는 도 6(F)의 실시예에서 상세하게 설명한다.
[명령의 포맷]
도 2는 본 발명의 1실시예인 도 1의 프로세서를 위한 명령의 포맷을 설명하는 도이다.
도 2에 도시한 바와 같이, 1개의 명령은 32비트의 고정길이로 좌측끝에서 6비트, 5비트, 5비트, 16비트의 필드로 분할되어 있다. 좌측끝의 6비트의 필드(210)은 명령의 종류를 나타내는 오퍼레이션 코드(OP코드)이다.
다음의 5비트의 필드(220)은 명령의 실행결과를 저장하는 레지스터를 지정하는 디스티네이션필드이다. 다음의 5비트의 필드(230)은 명령의 입력레지스터의 한쪽을 지정하는 제1소스필드이다. 우측끝의 16비트의 필드(240)은 다른 한쪽의 입력을 지정하는 제2소스필드이다.
제2소스필드(240)은 도 2(a)에 도시한 바와 같이 16비트의 이미디어트데이타로써 사용되는 경우와 도 2(b)에 도시한 바와 같이, 우측끝의 5비트(250)에 의해서 레지스터를 지정하는 경우가 있다. 제2소스필드를 상기한 것중의 어느 사용방법으로 할지는 OP코드(210)의 좌측끝의 비트에 의해 지정되고, "0"일때(A), "1"일때(B)와 같이 사용된다.
(A)의 형식의 명령을 이미디어트명령이라 하고, (B)의 형식의 명령을 레지스터명령이라 한다.
또한, 본 실시예에서 레지스터파일의 레지스터의 수는 32개이고, 레지스터 R0, R1, R2, ..., R31을 지정하는 경우에는 상기와 같이 5비트를 필요로 한다.
도 5는 OP코드(210)의 비트할당을 도시한 도이다. LUI(Load Upper Immediate)명령(510)은 제2소스필드(240)의 16비트의 이미디어트데이타의 우측에 16비트분의 "0"을 연결하고, 32비트의 이미디어트로 하여 디스티네이션필드(220)으로 나타내는 레지스터에 저장하는 명령이다.
ADDI(Add lmmediate)명령(512)는 제2소스 필드(240)의 16비트의 이미디어트데이타의 좌측에 제2소스필드(240)의 최상위비트와 동일한 값을 16비트분 연결하여 32비트의 이미디어트로 부호확장한후, 제1소스필드(230)으로 나타내는 레지스터의 내용과 가산하여 디스티네이션필드(220)으로 나타내는 레지스터에 저장하는 명령이다.
SUBI(Subtract Immediate)명령(514)는 제2소스필드(240)을 ADDI명령(512)와 마찬가지로 32비트의 이미디어트로 부호확장한후, 제1소스필드(230)으로 나타내는 레지스터의 내용에서 감산하여 디스티네이션필드(220)으로 나타내는 레지스터에 저장하는 명령이다.
ANDI(And Immediate)명령(516)은 제2소스필드(240)의 16비트의 이미디어트데이타의 좌측에 16비트분의 "0"을 연결하여 32비트의 이미디어트로 확장한후, 제1소스필드(230)으로 나타내는 레지스터의 내용사이에서 각 비트마다 논리곱을 구하고, 그 결과를 디스티네이션필드(220)으로 나타내는 레지스터에 저장하는 명령이다.
ORI(OR Inunediate)명령(518) 및 EORI(Exclusive OR Immediate)명령(520)은 ANDI명령(516)과 마찬가지로 각각 논리합, 배타적 논리합을 구하는 명령이다.
SLLI(Shift Left Logical Immeciate)명령(522)는 제1소스필드(230)으로 나타내는 레지스터의 내용을 제2소스필드(240)의 16비트의 이미디어트데이타의 수만큼 좌측으로 시프트하고, 그 결과를 디스티네이션필드(220)으로 나타내는 레지스터에 저장하는 명령이다. 이때, 우측끝에서 시프트인되는 값은 "0"이다.
SRLI(Shift Right Logical Immediate)명령(524)는 SLLI명령(522)와는 반대로 우측으로 시프트하는 명령이다. 이때, 좌측끝에서 시프트인되는 값은 "0"이다.
SRAI(Shift Right Arithmetic Imrnediate)명령(526)은 SRLI명령(524)와 마찬가지로 우측으로 시프트하는 명령이지만, 좌측끝에서 시프트인되는 값은 "0"이 아니라 제1소스필드(230)으로 나타내는 레지스터의 좌측끝의 비트와 동일한 값이다.
LD(Load)명령(530)은 제2소스필드(240)을 ADDI명령(512)와 마찬가지로 32비트의 이미디어트로 부호확장한후, 제1소스필드(230)으로 나타내는 레지스터의 내용과 가산한 결과를 어드레스로 하고, 그 어드레스로 표현된 데이타메모리의 내용을 디스티네이션필드(220)으로 나타내는 레지스터에 저장하는 명령이다.
ST(Store)명령(532)는 LD 명령(530)과 마찬가지로 어드레스를 구하고, 디스티네이션필드(220)으로 나타내는 레지스터의 내용을 그 어드레스로 표현된 데이타메모리에 저장하는 명령이다.
Bcc(Branch)명령(536)은 조건을 갖는 명령으로 조건이 성립했을때, 제2소스필드(240)의 16비트의 이미디어트데이타의 좌측에 제2소스필드(240)의 최상위비트와 동일한 값을 16비트분 연결하여 32비트의 이미디어트로 부호확장한 값과 현재의 명령의 어드레스를 나타내는 PC(Program Counter)의 값을 가산한 어드레스로 프로그램의 흐름을 바꾸는 명령이다. 또한, 이때의 분기조건은 디스티네이션필드(220)의 5비트에 의해서 지정된다.
ADD명령(552)에서 SRA명령(566)까지 는 각각 ADDI명령(512)에서 SRAI명령(526)에 있어서 제2소스 오퍼랜드로써 레지스터의 내용을 사용하는 명령이다.
JUMP(Jump)명령(576)은 무조건 분기명령으로 제2소스필드(240)이 나타내는 레지스터의 내용을 분기지어드레스로 하고, 그 어드레스로 프로그램의 흐름을 바꾸는 명령이다.
본 실시예에서는 LUI명령(510)에서 SRAI명령(526) 및 ADD명령(552)에서 SRA명령(566)은 수치연산명령으로 분류되고, LD명령(530) 및 ST명령(532)는 메모리조작명령으로 분류되고, 또 Bcc명령(536) 및 JUMP명령(576)은 분기명령으로 분류된다.
[2명령 병렬실행동작]
도 3은 본 발명의 특징인 2개의 명령을 동시에 실행할때의 동작을 도시한 도이다.
먼저, 도 3(a)는 분기명령과 수치연산명령을 동시에 실행할때의 동작을 도시한 도이다. 분기명령이 64비트명령데이타버스(622)의 좌측에서 페치되고, ORI명령이 64비트명령데이타버스(622)의 우측에서 페치된 경우이다. 본 실시예에 의하면, 이상의 2개의 명령을 동시에 실행할 수 있다.
64비트명령데이타버스(622)의 좌측에서 페치된 분기명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 ORI명령은 제2명령 레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령 레지스터(641)의 OP코드필드(111)을 해독하여 분기명령인 것을 검출하고, 제2명령디코더(645)는 제2명령레지스터(642)의 OP코드필드(121)을 해독하여 수치연산명령(ORI명령)인 것을 검출한다.
병렬동작제어유닛(646)은 제1 및 제2명령 디코더(644), (645)의 디코드 결과로 부터 페치된 분기명령과 수치연산명령은 병렬로 실행이 가능한 종류의 명령인 것을 알 수 있다.
또, 분기명령에서는 실행결과를 디스티네이션레지스터에 세트하지 않으므로, 수치연산명령(ORI명령)의 소스레지스터 와의 불일치를 발생하지 않는 것을 알 수 있다. 이상의 판정에 의해서 병렬동작제어유닛(646)은 이들 2개의 명령을 동일한 사이클에서 병렬로 실행을 개시한다.
즉, 분기명령의 동작으로써 제1명령레지스터(641)의 제2소스필드(114)의 16비트 이미디어트데이타의 좌측으로 이 이미디어트데이타의 부호를 16비트분 연결하여 32비트길이로 확장한 것을 프로그램카운터(643)에 입력하여 현재의 명령어드레스와 가산하는 것에 의해서 분기지어드레스를 구한다. 한편, 디스티네이션필드(112)로 나타내는 분기조건을 판정하여 조건을 충족하고 있는 경우는 상기의 분기지어드레스를 사용하여 다음회의 이후의 명령페치를 실행한다.
또, 동시에 ORI명령의 동작으로써 제2명령레지스터(642)의 제1소스필드(123)에 따라서 레지스터파일(650)중의 R3레지스터의 내용을 리드하고, 또 제2소스필드(124)의 16비트 이미디어트를 32비트길이로 확장한다.
이들 2개의 데이타의 논리합을 연산기(652)에 의해 구하고, 그 결과를 디스티네이션필드(122)로 나타내는 레지스터파일(650)중의 R3레지스터에 저장한다. 또한, 연산기(652)는 제2명령 레지스터(642)의 OP코드(121)을 해독하는 제2디코더(645)에 의해서 제어된다. 또, 제2소스필드(124)의 이미디어트의 확장도 제2디코더(645)에 의해서 제어된다.
또한, 본 실시예에서는 분기명령의 다음의 명령이 분기명령과 동일한 사이클에서 실행할 수 있는 경우에는 이 명령을 동시에 실행하고, 지연슬롯에서는 새로운 명령의 실행을 개시하지 않는 것으로 하고 있다.
또, 분기명령의 다음의 명령이 분기명령과 동일한 사이클에서 실행할 수 없는 경우에는 이 명령을 지연슬롯으로 실행하는 것으로 하고 있다. 따라서, 본 실시예에 의하면 종래의 프로세서와 동등한 동작으로 되어 호환성을 보증할 수 있다.
다른 실시예로써 분기명령의 다음의 명령이 분기명령과 동일한 사이클에서 실행할 수 있는 경우에는 이 명령을 동시에 실행하고, 지연슬롯에서는 새로운 명령의 실행을 개시하는 방식이 고려된다. 이 경우에는 지연슬롯으로 3개의 명령을 실행한 경우와 동등하게 되어 처리능력을 더욱 향상시킬 수 있다.
또, 상기의 설명에서 분기명령의 직전의 명령은 분기명령이 아닌 경우에 대해서 설명하였다. 본 실시예에서 분기명령은 다른 분기명령의 지연슬롯에 배치하지 않도록 컴파일러등의 소프트웨어에 의해서 제한되어 있으므로, 명령실행회로에서는 이와 같은 경우가 없는 것으로써 구성되어 있다.
도 3(b)는 수치연산명령과 메모리조작명령을 동시에 실행할때의 동작을 도시한 도이다. ADD명령이 64비트명령데이타버스(622)의 좌측에서 페치되고, LD명령이 우측에서 페치된 경우이다. ADD명령으로 레지스터파일(650)의 R1레지스터의 내용과 R2레지스터의 내용을 가산하여 R3레지스터에 저장하고, LD명령으로 R5레지스터와 이미디어트데이타를 가산한 값을 어드레스로 하는 데이타메모리(630)의 내용을 R4레지스터에 세트한다. 본 실시예에 의하면 이상의 2개의 명령을 동시에 실행할 수 있다.
64비트명령데이타버스(622)의 좌측에서 페치된 ADD명령은 프리페치버퍼(640)에서 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 LD명령은 프리페치버퍼(640)에서 제2명령레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)의 OP코드필드(141)을 해독하여 수치연산명령(ADD명령)인 것을 검출하고, 제2명령디코더(645)는 제2명령 레지스터(642)의 OP코드 필드(151)을 해독하여 메모리조작명령(LD명령)인 것을 검출한다.
병렬동작제어유닛(646)은 제1 및 제2명령디코더(644), (645)의 디코드결과로 부터 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령인 것을 알 수 있다.
또, 비교기(131)은 제1명령레지스터(641)의 디스티네이션필드(142)와 제2명령레지스터(642)의 제1소스필드(153)을 비교하여 일치하지 않는 것을 검출한다. 이상의 판정에 의해 병렬동작제어유닛(646)은 이들 2개의 명령을 동일한 사이클에서 병렬로 실행을 개시한다.
즉, ADD명령의 동작으로써 제1명령레지스터(641)의 제1소스필드(143)에 따라서 R1레지스터의 내용을 리드하고, 또 제2소스필드(144)에 따라서 R2레지스터의 내용을 리드한다. 이들 2개의 데이타의 합을 연산기(651)에서 구하고, 그 결과를 디스티네이션필드(142)로 나타내는 R3레지스터에 저장한다. 또한, 연산기(651)은 제1명령레지스터(641)의 OP코드(141)을 해독하는 제1디코더(644)에 의해서 제어된다.
또, 동시에 LD명령의 동작으로써 제2명령레지스터(642)의 제2소스필드(154)의 16비트 이미디어트데이타를 32비트길이로 부호확장한 것과 제2명령레지스터(642)의 제1소스필드(153)에 의해서 지정된 R5레지스터를 가산한 값을 연산기(652)에서 구하고, 이 값을 MAR(653)에 세트하여 이것을 어드레스로 하는 데이타메모리(630)의 내용을 MDR(654)에 리드하고, 이 리드데이타를 제2명령 레지스터(642)의 디스티네이션필드(152)로 나타내는 레지스터파일(650)의 R4레지스터에 세트한다. 또한, 연산기(652)는 제2명령 레지스터(642)의 OP코드(151)을 해독하는 제2디코더(645)에 의해서 제어된다.
다음에 실행하는 명령은 프리페치버퍼(640)에 유지되어 있는 명령이므로, 이 프리페치버퍼(640)의 명령을 제1명령레지스터(641) 및 제2명령레지스터(642)로 전송하고 이하 마찬가지로 실행한다.
또한, 상기의 설명에서는 LD명령 직전의 명령은 ADD명령이고, 분기명령이 아닌 경우에 대해서 설명하였다. 다른 동작예로써 직전의 명령(좌측의 명령)이 ADD명령이 아닌 분기명령인 경우, 본 실시예에서 LD명령은 분기명령과는 동시에 실행되고, 분기명령의 지연슬롯에서는 새롭게 페치된 명령의 실행을 억제한다.
도 3(c)는 수치연산명령을 2개 동시에 실행할때의 동작을 도시한 도이다. ADD명령 이 64비트명령 데이타버스(622)의 좌측에서 페치되고, OR명령이 우측에서 페치된 경우이다. ADD명령으로 R1레지스터의 내용과 R2레지스터의 내용을 가산하여 R3레지스터에 저장하고, OR명령으로 R5레지스터와 R6레지스터의 논리합을 구하고, R4레지스터에 저장한다. 본 실시예에 의하면 이상의 2개의 명령을 동시에 실행할 수 있다.
64비트명령데이타버스(622)의 좌측에서 페치된 ADD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 OR명령은 제2명령레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)의 OP코드필드(141)을 해독하여 수치연산명령(ADD명령)인 것을 검출하고, 제2명령디코더(645)는 제2명령레지스터(642)의 OP코드필드(161)을 해독하여 수치연산명령(OR명령)인 것을 검출한다.
병렬동작제어유닛(646)은 상기 제1 및 제2명령디코더(644), (645)의 디코드결과로부터 상기 2개의 명령이 병렬로 실행할 수 있느 종류의 명령인 것을 알 수 있다.
또, 비교기(131)은 제1명령레지스터(641)의 디스티네이션필드(142)와 제2명령레지스터(642)의 제1소스필드(163)을 비교하여 일치하지 않는 것을 검출한다. 또, 비교기(132)는 제1명령레지스터(641)의 디스티네이션필드(142)와 제2명령레지스터(642)의 제2소스필드(164)를 비교하여 일치하지 않는 것을 검출한다. 이상의 판정에 의해 병렬동작제어유닛(646)은 이들 2개의 명령을 동일한 사이클에서 병렬로 실행을 개시한다. 즉, ADD명령의 동작으로써 제1명령레지스터(641)의 제1소스필드(143)에 따라서 R1레지스터의 내용을 리드하고, 또 제2소스필드(144)에 따라서 R2레지스터의 내용을 리드한다. 이들 2개의 데이타의 합을 연산기(651)에서 구하고, 그 결과를 디스티네이션필드(142)로 나타내는 R3레지스터에 저장한다. 또한, 연산기(651)은 제1명령레지스터(641)의 OP코드(141)을 해독하는 제1디코더(644)에 의해서 제어된다.
또, 동시에 OR명령의 동작으로써 제2명령레지스터(642)의 제1소스필드(163)에 따라서 R5레지스터의 내용을 리드하고, 또 제2명령레지스터(642)의 제2소스필드(163)에 따라서 R5레지스터의 내용을 리드하고, 또 제2명령 레지스터(642)의 제2소스필드(164)에 따라서 R6레지스터의 내용을 리드한다. 이들 2개의 데이타의 논리합을 연산기(652)에서 구하고, 그결과를 디스티네이션필드(162)로 나타내는 R4레지스터에 저장한다.
또한, 연산기(652)는 제2명령레지스터(642)의 OP코드(161)을 해독하는 제2디코더(645)에 의해서 제어된다.
[파이프라인처리]
도 4는 본 실시예의 프로세서에 있어서의 파이프라인처리에 대해서 도시한 도이다. 명령A내지 F가 도 4(c)에 도시한 바와 같이 프로그램메모리(620)에 저장되어 있는 것으로 한다.
도 4(c)에서는 동시에 페치되는 2개의 명령이 가로로 나란이 도시되어있고, 위쪽에 있는 명령이 작은 어드레스의 명령이고, 아래쪽의 명령이 큰 어드레스의 명령이다. 따라서, 프로그램은 위의 명령에서 아래의 명령 순으로 실행된다.
도 4(a)는 본 실시예외 프로세서에 있어서 본 발명의 특징인 2개의 명령을 동시에 실행할때의 파이프라인처리에 대해서 도시한 도이다. 명령A내지 F가 도 4(c)에 도시한 바와 같이, 프로그램메모리(620)에 저장되어 있는 것으로 한다. 여기에서, 명령A가 명령X로 분기하는 분기명령Bcc이고, 명령B가 수치연산명령이라고 한다. 도 4(a)의 하나의 블럭은 각 파이프라인스테이지의 1클럭사이클의 동작에 대응한다. 파이프라인의 스테이지는 IF(명령 페치), ID(명령디코드), EX(연산실행), M(데이타페치/저장), W(결과의 저장)의 5개의 스테이지로 이루어진다.
IF스테이지는 프로그램 메모리(620)에서 명령을 프리페치 버퍼(640)으로 리드하는 스테이지이다.
ID스테이지는 프리페치버퍼(640)에서 명령을 명령레지스터(641), (642)에 세트하고, 명령디코더(644), (645)로 해독함과 동시에 레지스터파일(650)에서 필요한 오퍼랜드데이타를 리드하는 스테이지이다.
EX스테이지는 연산기(651), (652)에 의해서 오퍼랜드데이타를 처리하는 스테이지이다.
M스테이지는 명령이 만약LD명령 또는 ST명령이면 데이타메모리(630)을 액세스하는 스테이지이다. 또, 그 이의의 명령이면 실행결과를 레지스터파일(650)에 저장하는 스테이지이다.
W스테이지는 명령이 LD명령일때, 데이타메모리(630)에서 리드한 데이타를 레지스터파일(650)에 저장하는 스테이지이다.
이하, 도 4(a)의 파이프라인처리의 각 클럭사이클마다 설명한다.
(1클럭사이클)
프로그램메모리(620)에서 64비트분의 명령(A와 B)을 페치하여 프리페치버퍼(640)에 세트한다.
(2클럭사이클)
프리페치버퍼(640)에 유지하고 있는 2개의 명령(A와 B)를 각각 제1명령레지스터(641) 및 제2명령레지스터(642)에 세트하고, 제1명령디코더(644) 및 제2명령디코더(645)에서 해독을 실행한다. 그 결과, 명령A가 분기명령이고, 명령B가 수치연산명령인 것을 알 수 있으므로, 다음의 사이클에서 이 2개의 명령을 동시에 실행하는 준비를 실행한다. 또한, 이때 레지스터의 리드 및 이미디어트데이타의 데이타확장이 필요한 경우에는 이 사이클에서 실행한다. 또, 분기지어드레스의 계산도 이 사이클에서 실행한다. 한편, 프로그램메모리(620)에서는 다음의 64비트분의 명령(C와 D)을 페치하여 프리페치버퍼(640)에 세트해둔다.
(3클럭 사이클)
제1명령디코더(644)로 해독한 명령A(분기명령) 및 제2명령디코더(645)로 해독한 명령B(수치연산명령)를 실행한다. 분기조건이 성립하고 있으면 프리페치버퍼(640)을 클리어하고, 전의 사이클에서 구한 분기지어드레스를 사용하여 명령페치를 재차 실행한다. 즉, 프로그램메모리(620)에서 다음의 64비트분의 명령(X와 Y)를 페치하여 프리페치버퍼(640)에 세트한다.
(4클럭사이클)
명령B의 실행결과를 레지스터에 저장함과 동시에 프리페치버퍼(640)에 유지하고 있는 2개의 명령(X와 Y)을 각각 제1명령레지스터(641) 및 제2명령레지스터(642)에 세트하고, 제1명령디코더(644) 및 제2명령디코더(645)에서 해독을 실행한다. 또한, 이때 레지스터의 리드 및 이미디어트데이타의 데이타확장이 필요한 경우는 이 사이클에서 실행한다.
(5클럭사이클)
제1명령디코더(644) 및 제2명령디코더(645)에서 해독한 2개의 명령(X와 Y)를 실행한다.
이하, 마찬가지로 동작한다.
도 4(B)는 본 실시예의 프로세서에 있어서 본 발명의 특징인 2개의 명령을 동시에 실행할때의 파이프라인처리에 대해서 도시한 도이다. 명령A내지 F가 도 4(c)에 도시한 바와 같이 프로그램메모리(620)에 저장되어 있는 것으로 한다. 여기에서, 명령A가 수치연산명령이고, 명령B가 LD명령이라고 한다. 이하, 각 클럭사이클마다 설명한다.
(1클럭사이클)
프로그램메모리(620)에서 64비트분의 명령(A와 B)를 페치하여 프리페치버퍼(640)에 세트한다.
(2클럭사이클)
프리페치버퍼(640)에 유지하고 있는 2개의 명령(A와 B)를 각각 제1명령 레지스터(641) 및 제2명령레지스터(642)에 세트하고, 제1명령디코더(644) 및 제2명령디코더(645)에서 해독을 실행한다. 그 결과, 명령A가 수치연산명령이고, 명령B가 LD명령인 것을 알 수 있으므로, 다음의 사이클에서 이 2개의 명령을 동시에 실행할 준비를 실행한다. 또한, 이때 레지스터의 리드 및 이미디어트데이타의 데이타확장이 필요한 경우에는 이 사이클에서 실행한다. 한편, 프로그램메모리(620)에서는 다음의 64비트분의 명령(C와 D)를 페치하여 프리페치버퍼(640)에 세트해둔다.
(3클럭사이클)
제1명령디코더(644)에서 해독한 명령A(수치연산명령) 및 제2명령디코더(645)에서 해독한 명령B(LD명령)를 실행한다. LD명령으로는 오퍼랜드데이타의 실효어드레스의 계산을 실행한다. 한편, 프리페치버퍼(640)에 유지하고 있는 2개의 명령(C와 D)를 각각 제1명령레지스터(641) 및 제2명령레지스터(642)에 세트하고, 제1명령디코더(644) 및 제2명령디코더(645)에서 해독을 실행한다. 또한, 이때 레지스터의 리드 및 이미디어트데이타의 데이타확장이 필요한 경우에는 이 사이클에서 실행한다.
(4클럭사이클)
명령A의 실행결과를 레지스터에 저장함과 동시에 상기의 LD명령의 오퍼랜드의 실효어드레스를 기본으로 데이타메모리(630)을 액세스한다.
한편, 제1명령디코더(644) 및 제2명령디코더(645)에서 해독한 2개의 명령(C와 D 또는 X와 Y)을 실행한다.
(5클럭사이클)
LD명령의 페치데이타를 레지스터에 저장한다.
이하, 마찬가지로 동작한다.
또한, 상기의 설명에서 데이타메모리(630)은 1사이클에서 액세스할 수 있는 것으로 하고 있다. 그러나, 데이타메모리(630)이 캐시메모리인 경우는 액세스할 데이타가 캐시메모리내에 존재하지 않을때(캐시미스)도 있다. 이 때에는 메인메모리를 액세스하기 위해서 통상 캐시메모리를 액세스하는 경우에 비해서 여분의 사이클수를 필요로 한다. 그래서, 상기의 예에서 데이타메모리(630)은 1사이클에서 액세스가 가능하다고 하고 있지만, 캐시미스의 경우는 필요한 사이클을 상기 4클럭사이클과 5클럭사이클사이에 더미실행사이클(대기사이클)을 삽입하는 것으로 한다.
이하의 설명에서도 데이타메모리(630)은 1사이클에서 기본적으로 액세스가 가능하다고 설명하였지만, 필요에 따라서 또 다른 더미사이클의 삽입이 있는 것으로 한다.
[2개의 수치연산명령의 레지스터불일치]
도 6(a)는 2개의 수치연산명령사이에서 레지스터의 불일치가 있는 경우의 동작을 도시한 도이다. ADD명령이 64비트명령데이타버스(622)의 좌측에서 페치되고, OR명령이 우측에서 페치된 경우이다. ADD명령으로 R1레지스터의 내용과 R2레지스터의 내용을 가산하여 R3레지스터에 저장하고, OR명령으로 R5레지스터와 R3레지스터의 논리합을 구하여 R4레지스터에 저장한다. 본 발명에 의하면 이상의 2개의 명령의 레지스터의 불일치를 검출할 수 있고, 1사이클에서의 병렬실행을 억제할 수 있다.
64비트명령데이타버스(622)의 좌측에서 페치된 ADD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 OR명령은 제2명령레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령 레지스터(641)의 OP코드 필드(311)을 해독하여 수치연산명령(ADD명령)인 것을 검출하고, 제2명령디코더(645)는 제2명령레지스터(642)의 OP코드필드(316)을 해독하여 수치연산명령(OR명령)인 것을 검출한다.
병렬동작제어유닛(646)은 제1 및 제2명령디코드결과로 부터 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령인 것을 알 수 있다.
한편, 비교기(131)은 제1명령레지스터(641)의 디스티네이션필드(312)와 제2명령레지스터(642)의 제1소스필드(319)를 비교하여 일치하지 않는 것을 검출한다. 그러나, 비교기(132)는 제1명령레지스터(641)의 디스티네이션필드(312)와 제2명령레지스터(642)의 제2소스필드(318)을 비교하여 일치하고 있는 것을 검출한다. 따라서, 병렬동작제어유닛(646)은 비교기(132)의 검출출력에서 이들 2개의 명령을 동일한 사이클에서 병렬로 실행할 수 없다고 판단하고, 이들 명령을 직렬로 실행하게 된다.
즉, 처음에 ADD명령의 동작으로써 제1명령레지스터(641)의 제1소스필드(313)에 따라서 R1레지스터의 내용을 리드하고, 또 제2소스필드(314)에 따라서 R2레지스터의 내용을 리드한다. 이들 2개의 데이타의 합을 연산기(651)에서 구하고, 그 결과를 디스티네이션필드(312)로 나타내는 R3레지스터에 저장한다. 또한, 연산기(651)은 제1명령레지스터(641)의 OP코드(311)을 해독하는 제1디코더(644)에 의해서 제어된다.
본 실시예에서 모든 수치연산명령은 1사이클에서 실행을 완료하는 기본적인 명령이다.
따라서, 다음의 명령은 1사이클후에 무조건으로 기동할 수 있다.
다음에 OR명령의 동작으로써 제2명령레지스터(642)의 제1소스필드(319)에 따라서 R5레지스터의 내용을 리드하고, 또 제2명령레지스터(642)의 제2소스필드(318)에 따라서 R3레지스터의 내용을 리드한다. 이들 2개의 데이타의 논리합을 연산기(652)에서 구하고, 그 결과를 디스티네이션필드(317)로 나타내는 R4레지스터에 저장한다. 또한, 연산기(652)는 제2명령레지스터(642)의 OP코드(316)을 해독하는 제2디코더(645)에 의해서 제어된다.
또한, 본 실시예에 의하면 도 4에서 설명한 바와 같이, OR명령을 위한 레지스터리드는 직전의 ADD명령의 실행과 동시에 실행된다. 그 때문에 이때 레지스터R3의 내용은 ADD명령의 실행결과를 아직 저장하고 있지 않다.
그래서, 비교기(132)에 의해 레지스터번호가 일치한 경우에는 레지스터파일(650)으로 부터의 리드대신에 연산기(651)의 출력을 출력레지스터(659)에 세트함과 동시에 연산기(652)의 입력레지스터(658)에 세트하는 바이패스수단을 마련하는 것이 바람직하다.
이상과 같이 동시에 페치된 2개의 명령사이에서 레지스터의 불일치가 있는 경우라도 본 실시예에 의하면 불일치를 검출하여 정상적으로 동작할 수 있다.
[2개의 메모리조작명령의 버스불일치]
메모리조작명령은 데이타메모리(630)을 액세스하는 명령이므로, 만약 2개의 메모리조작명령을 병렬로 실행했다면, 오퍼랜드어드레스버스(631)상에서 2개의 메모리조작명령의 액세스어드레스가 불일치할 가능성이 있다. 이것을 해소하기 위해서는 2개의 메모리조작명령을 직렬로 실행할 필요가 있다.
도 6(b)는 2개의 연속한 메모리조작명령을 직렬로 실행할때의 동작을 도시한 도이다. LD명령이 64비트명령데이타버스(622)의 좌측과 우측에서 동시에 페치된 경우이다. 좌측의 LD명령으로 R1레지스터의 내용과 이미디어트데이타룰 가산한 값을 어드레스로 하는 데이타메모리(630)의 내용을 R3레지스터에 저장하고, 우측의 LD명령으로 R5레지스터와 이미디어트데이타를 가산한 값을 어드레스로 하는 데이타메모리(630)의 내용을 R4레지스터에 세트한다. 본 실시예에 의하면 이상의 2개의 명령을 직렬화하여 실행할 수 있다.
64비트명령데이타버스(622)의 좌측에서 페치된 LD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 LD명령은 제2명령레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)의 OP코드필드(321)을 해독하여 메모리조작명령(LD명령)인 것을 검출하고, 제2명령 디코더(645)는 제2명령레지스터(642)의 OP코드필드(326)을 해독하여 메모리조작명령(LD명령)인 것을 검출한다.
병렬동작제어유닛(646)은 상기 제1 및 제2명령디코더(644), (645)의 디코드결과로 부터 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령이 아닌 것을 알 수 있다.
본 실시예에 의하면 이상의 판정에 의해 병렬동작제어유닛(646)은 동일한 사이클에서의 2명령의 실행을 억제한다.
본 실시예에서는 도 4의 설명에서 기술한 바와 같이, LD명령은 1사이클째에 어드레스를 계산하고, 2사이클째에 실제의 메모리액세스를 실행하고, 3사이클째에 결과를 디스티네이션레지스터에 세트한다.
그래서, 상기 2개의 명령의 실행순서를 사이클마다 다음에 설명한다.
먼저, 제1사이클에서는 좌측의 LD명령의 동작으로써 제1명령레지스터(641)의 제1소스필드(323)에 따라서 R1레지스터의 내용을 리드하고, 또 제2소스필드(324)의 16비트 이미디어트데이타를 32비트길이로 부호확장 한 것을 가산한 값을 연산기(651)에서 구하고, 이 값을 MAR(653)에 세트한다. 또한, 연산기(651)은 제1명령 레지스터(641)의 OP코드(321)을 해독하는 제1디코더(644)에 의해서 제어된다.
제2사이클에서는 좌측의 LD명령의 동작으로써 MAR(653)을 어드레스로 하는 메모리의 내용을 MDR(654)에 리드한다. 먼저, 우측의 LD명령의 동작으로써 제2명령레지스터(642)의 제2소스필드(329)의 16비트 이미디어트데이타를 32비트길이로 부호확장한 것과 제2명령레지스터(642)의 제1소스필드(328)에 의해서 지정된 R5레지스터를 가산한 값을 연산기(652)에서 구하고, 이 값을 MAR(653)에 세트한다. 또한, 연산기(652)는 제2명령레지스터(642)의 OP코드(3260)을 해독하는 제2디코더(645)에 의해서 제어된다.
제3사이클에서는 좌측의 LD명령의 동작으로써 MDR(654)의 리드데이타를 제1명령레지스터(641)의 디스티네이션필드(322)로 나타내는 R3레지스터에 세트한다. 또, 우측의 LD명령의 동작으로써 MAR(653)을 어드레스로 하는 데이타메모리(630)의 내용을 MDR(654)에 리드한다.
제4사이클에서는 우측의 LD명령의 동작으로써 MDR(654)의 리드데이타를 제2명령레지스터(642)의 디스티네이션필드(327)로 나타내는 레지스터R4에 세트한다.
이상과 같이, 메모리조작명령이 2개 동시에 페치된 경우에도 본 실시예에 의하면 이것을 검출하고, 직렬화하여 정상적으로 동작할 수 있다.
또한, 상기의 예에서는 좌측의 LD명령의 디스티네이션레지스터가 우측의 LD명령의 소스레지스터와 일치하지 않는 경우에 대해서 설명했지만, 만약 일치하고 있는 경우에는 비교기(131)에 의해서 이것(레지스터의 일치, 레지스터의 불일치)을 검출할 수 있으므로, 좌측의 LD명령의 지연슬롯을 고려하여 병렬동작제어유닛(646)은 1사이클의 대기를 우측의 LD명령의 레지스터의 리드를 개시하기 전에 삽입한다.
그러나, 상기와 같이 1사이클의 대기를 삽입해도 우측의 LD명령을 위한 소스레지스터의 리드는 좌측의 LD명령의 데이타메모리(630)의 액세스와 동시에 실행되므로, 아직 좌측의 LD명령의 소스레지스터에는 우측의 LD명령의 실행결과가 저장되어 있지 않다. 그래서, 도 6(a)와 마찬가지로 직전의 명령이 LD명령으로 비교기(131)에 의해 레지스터번호가 일치한 경우에는 레지스터파일(650)으로 부터의 리드 대신에 데이타메모리(630)으로 부터의 리드데이타를 MDR(654)에 세트하는 것과 동시에 연산기(652)의 입력레지스터(657)에 세트하는 바이패스수단(도시하지 않음)을 갖는 것이 바람직하다.
[메모리조작명령의 결과를 사용하는 수치연산명령]
도 1의 실시예에서 설명한 바와 같이, 도 1에 있어서 제1명령실행유닛(651)은 수치연산명령과 분기명령용으로 한정하고, 제2명령실행유닛(652)는 수치연산명령과 메모리조작명령용으로 한정되어 있는 것으로 한다. 이 기능한정에 관한 전제에 관해서 메모리조작명령과 수치연산명령이 제1명령레지스터(641)과 제2명령레지스터(642)에 세트된 것으로 한다.
이 2개의 명령은 병렬로 실행할 수 없어 직렬로 실행할 필요가 있다. 도 6(c)는 메모리조작명령의 결과를 사용하여 수치연산명령을 실행할때의 동작을 도시한 도이다. LD명령이 64비트명령데이타버스(622)의 좌측에서 페치되고, OR명령이 64비트명령데이타버스(622)의 우측에서 페치된 경우이다. LD명령으로 R1레지스터의 내용과 이미디어트데이타를 가산한 값을 어드레스로 하는 데이타메모리(630)의 내용을 레지스터R3에 저장하고, OR명령으로 레지스터R5와 레지스터R3의 논리합을 구하고, 이것을 레지스터R4에 세트한다. 본 실시예에 의하면 이상의 2개의 명령을 직렬화하여 실행할 수 있다.
64비트명령데이타버스(662)의 좌측에서 페치된 LD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(662)의 우측에서 페치된 OR명령은 제2명령레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)에 OP코드필드(331)을 해독하여 메모리조작명령(LD명령)인 것을 검출하고, 제2명령디코더(645)는 제2명령레지스터(642)의 OP코드필드(336)을 해독하여 수치연산명령(OR명령)인 것을 검출한다.
병렬동작제어유닛(646)은 상기 제1 및 제2명령디코더(644), (645)의 디코드결과로부터 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령이 아닌 것을 알 수 있다.
또, 비교기(131)은 제1명령레지스터(641)의 디스티네이션필드(332)와 제2명령레지스터(642)의 제1소스필드(338)을 비교하여 일치하고 있지 않는 것을 검출한다. 비교기(132)는 제1명령레지스터(641)의 디스티네이션필드(332)와 제2명령레지스터(642)의 제2소스필드(339)를 비교하여 일치하고 있는 것을 검출한다. 본 실시예에서는 도 4의 설명에서 기술한 바와 같이 LD명령의 결과는 차례자례 사이클에서 유효하게 된다.
따라서, LD명령의 결과를 다음의 명령으로 사용하고자 하면 병렬동작 제어유닛(646)은 다음의 명령의 레지스터리드전에 1사이클의 대기를 삽입하여 다음의 명령을 기동한다.
본 실시예에 의하면 이상의 판정에 의해 병렬동작제어유닛(646)은 동일한 사이클에서의 2명령의 실행을 억제한다.
상기 2개의 명령의 실행순서를 사이클마다 다음에 설명한다.
먼저, 제1사이클에서는 LD명령의 동작으로써 제1명령레지스터(641)의 제1소스필드(333)에 따라서 R1레지스터의 내용을 입력레지스터(655)로 리드하고, 또 제2소스필드(334)의 16비트 이미디어트데이타를 32비트길이로 부호확장한 것을 입력레지스터(656)에 세트한다.
제2사이클에서는 연산기(651)에서 메모리어드레스를 구하고, 이 값을 MAR (653)에 세트한다. 또 한, 연산기(651)은 제1명령 레지스터(641)의 OP코드(331)을 해독하는 제1디코더(644)에 의해서 제어된다. 또한, 이 사이클에서는 새로운 명령(여기에서는 OR명령)의 실행은 개시되지 않고, 1사이클의 대기로 된다.
제3사이클에서는 LD명령의 동작으로써, MAR(653)을 어드레스로 하는 데이타메모리(630)의 내용을 MDR(654)에 리드한다.
또, OR명령의 동작으로써 제2명령레지스터(642)의 제1소스필드(338)에 따라서 R5레지스터의 내용을 입력레지스터(657)에 리드하고, 또 제2명령레지스터(642)의 제2소스필드(339)에 따라서 R3레지스터의 내용을 입력레지스터(658)에 리드한다. 또한, R3레지스터의 정확한 내용은 다음의 사이클에서 LD명령이 갱신되는 것으로 되어 있다. 그래서, 도 6(a)의 실시예와 마찬가지로 직전의 명령이 LD명령으로 비교기(132)에 의해 레지스터번호가 일치한 경우에는 레지스터파일(650)으로 부터의 리드대신에 데이타메모리(630)으로 부터의 리드데이타를 MDR(654)에 라이트함과 동시에 연산기(652)의 B측 입력레지스터(658)로 바이패스하는 기능을 갖는다.
제4사이클에서는 LD명령의 동작으로써 MDR(654)의 리드데이타를 제1명령레지스터(641)의 디스티네이션필드(332)로 나타내는 레지스터 R3에 세트한다.
또, OR명령의 동작으로써 2개의 데이타의 논리합을 연산기(652)에서 구한다. 또한, 연산기(652)는 제2명령 레지스터(642)의 OP코드(336)을 해독하는 제2디코더(645)에 의해서 제어된다.
제5사이클에서는 OR명령의 결과를 디스티네이션필드(337)로 나타내는 레지스터R4에 저장한다.
이상과 같이, 메모리조작명령의 결과를 사용하는 명령이 메모리조작명령과 동시에 페치된 경우라도 본 실시예에 의하면 이것을 검출하고, 직렬화하여 정상적으로 동작할 수 있다.
[수치연산명령의 결과를 사용하는 분기명령]
도 1의 실시예에서 설명한 바와 같이, 도 1에 있어서 제1명령실행유닛(651)은 수치연산명령과 분기명령용으로 한정하고, 제2명령실행유닛(652)는 수치연산명령과 메모리조작명령용으로 한정되어 있는 것으로 한다.
이 기능한정에 관한 전제에 관해서 수치연산명령과 분기명령이 제1명령레지스터(641)과 제2명령레지스터(642)에 세트된 것으로 한다.
이 2개의 명령은 병렬로 실행할 수 없어 직렬로 실행할 필요가 있다. 도 6(D)는 수치연산명령의 결과가 분기명령의 분기지어드레스인 경우의 동작을 도시한 도이다.
ADD명령 이 64비트명령데이타버스(622)의 좌측에서 페치되고, JUMP명령이 우측에서 페치된 경우이다.
ADD명령으로 레지스터R1의 내용과 레지스터R2의 내용을 가산하여 레지스터R3에 저장하고, JUMP명령으로 레지스터R3에서 나타나는 어드레스로 분기한다.
본 실시예에 의하면 이상의 2개의 명령의 레지스터의 불일치를 검출할 수 있고, 1사이클에서의 병렬실행을 억제할 수 있다.
64비트명령데이타버스(622)의 좌측에서 페치된 ADD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 JUMP명령 은 제2명령레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)의 OP코드필드(341)을 해독하여 수치연산명령(ADD명령)인 것을 검출하고, 제2명령디코더(645)는 제2명령레지스터(642)의 OP코드필드(346)을 해독하여 분기명령(JUMP명령)인 것을 검출한다.
병렬동작제어유닛(646)은 상기 제1 및 제2명령디코더(644), (645)의 디코드결과로 부터 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령이 아닌 것을 알 수 있다.
또, 비교기(131)은 제1명령레지스터(641)의 디스티네이션필드(342)와 제2명령레지스터(642)의 제1소스필드(348)을 비교하여 일치하고 있는 것을 검출한다. 따라서, 병렬동작제어유닛(646)은 이들 2개의 명령을 동일한 사이클에서 병렬로 실행할 수 없다고 판단하고, 이들 명령을 직렬로 실행한다.
즉, 우선 처음에 ADD명령의 동작으로써 제1명령레지스터(641)의 제1소스필드(343)에 따라서 레지스터R1의 내용을 리드하고, 또 제2소스필드(344)에 따라서 레지스터R2의 내용을 리드한다. 이들 2개의 데이터의 합을 연산기(651)에서 구하고, 그 결과를 디스티네이션필드(342)로 나타내는 레지스터 R3에 저장한다. 또한, 연산기(651)은 제1명령레지스터(641)의 OP코드(341)을 해독하는 제1디코더(644)에 의해서 제어된다.
다음에 JUMP명령의 동작에 대해서 설명한다. 본 실시예에서 통상분기명령은 제1명령레지스터(641)에 세트되어 실행되는 것으로 되어 있다. 그래서, 상기의 ADD명령을 실행한 다음의 사이클에서 병렬동작제어유닛(646)은 제2명령레지스터(642)의 내용(JUMP명령)을 제1명령레지스터(641)로 전송하여 JUMP명령의 실행을 개시한다. 즉, 제1명령레지스터(641)의 제1소스필드(343')(도시하지 않음)에 따라서 R3레지스터의 내용을 리드하고, 그 결과를 분기지 어드레스로써 이후의 명령페치를 실행한다.
한편, 비교기(131)은 ADD명령의 실행에 앞서 제1명령레지스터(641)의 디스티네이션필드(342)와 제2명령레지스터(642)의 제1소스필드(348)을 비교하여 일치하고 있는 것을 검출한다. 따라서, 도 4에 도시한 바와 같이, 레지스터R3의 내용은 JUMP명령을 위한 레지스터리드를 실행하는 시점에서 ADD명령의 결과는 저장되어 있지 않다.
그래서, 도 6(a)와 마찬가지로 비교기(131)에 의해 레지스터번호가 일치하고 또한 우측의 명령을 좌측의 명령레지스터(641)로 전송하는 경우, 레지스터파일(650)으로 부터의 리드대신에 연산기(651)의 출력을 출력레지스터(659)에 세트하는 것과 동시에 연산기(651)의 입력레지스터(655)에 세트하는 바이패스수단(도시하지 않음)을 갖는다.
이상과 같이, 동시에 페치된 2개의 명령사이에서 레지스터의 불일치가 있고, 또 분기명령이 통상의 위치가 아닌 경우라도 본 실시예에 의하면 불일치 및 명령의 위치를 검출하여 정상적으로 동작할 수 있다.
[분기지명령이 제2명령레지스터(642)에 세트]
도 6(e)는 분기명령에 의해서 64비트명령버스 우측의 명령으로 분기했을 때의 동작을 도시한 도이다. OR명령이 64비트명령데이타버스(622)의 우측에서 페치된 경우이다. OR명령으로 R5레지스터와 R6레지스터의 논리합을 구하여 R4레지스터에 저장한다. 본 발명에 의하면 이상과 같이 좌측의 명령을 실행해서는 안되는 경우, 동일한 사이클에서의 2명령실행을 억제할 수 있다.
64비트명령데이타버스(622)의 우측에서 페치된 OR명령은 제2명령레지스터(642)에 세트된다.
병렬동작제어유닛(646)은 직전의 분기명령으로 64비트명령버스의 우측으로 분기한 것을 검출하면 제1명령디코더(644)를 억제하여 제1명령레지스터(641)에 세트된 명령을 무시한다. 제2명령디코더(645)는 제2명령레지스터(642)의 OP코드필드(356)을 해독하여 수치연산명령(OR명령)인 것을 검출한다.
병렬동작제어유닛(646)은 이 명령이 우측의 연산기(652)에서 실행할 수 있는 명령의 종류인 것을 알 수 있으므로 이 명령의 실행을 기동한다.
OR명령의 동작으로서 제2명령레지스터(642)의 제1소스필드(358)에 따라서 R5레지스터의 내용을 리드하고, 또 제2명령레지스터(642)의 제2소스필드(359)에 따라서 R6레지스터의 내용을 리드한다. 이들 2개의 데이타의 논리합을 연산기(652)에서 구하고, 그 결과를 디스티네이션필드(357)로 나타내는 R4레지스터에 저장한다. 또한, 연산기(652)는 제2명령레지스터(642)의 OP코드(356)을 해독하는 제2디코더(645)에 의해서 제어된다.
이상과 같이, 분기명령에 의해서 64비트명령버스의 우측으로 분기한 경우, 좌측의 명령의 실행을 억제할 수 있다.
[지연슬롯에서의 명령실행]
도 6(f)는 직전에 조건을 갖는 분기명령이 페치되고, 그 분기명령 직후의 명령이 페치된 결과 좌측의 명령이 지연슬롯으로 되어 있을때의 동작을 도시한 도이다.
즉, 본 실시예에서는 분기명령의 분기조건의 성립, 불성립에 관계없이 좌측의 명령을 무조건 실행한다. 한편, 우측의 명령은 이미 설명한 바와 같이 분기조건의 불성립의 경우에 한해서 실행한다.
또한, 본 실시예에서는 ADD명령이 64비트명령데이타버스(622)의 좌측에서 페치되고, OR명령이 우측에서 페치된 경우이다. 지연슬롯의 ADD명령으로 레지스터R1의 내용과 레지스터R2의 내용을 가산하여 레지스터R3에 저장하고, 조건을 갖는 분기명령의 조건이 성립하지 않는 경우는 OR명령으로 레지스터R5와 레지스터R6의 논리합을 구하여 레지스터R4에 저장한다.
따라서, 본 실시예에 의하면 만약 분기조건이 성립하고 있으면 우측의 명령을 억제하고, 분기조건이 성립하지 않으면 이상의 2개의 명령을 동시에 실행할 수 있다.
64비트명령데이타버스(622)의 좌측에서 페치된 ADD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 OR명령은 제2명령레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)의 OP코드필드(361)을 해독하여 수치연산명령(ADD명령)인 것을 검출하고, 제2명령 디코더(645)는 제2명령레지스터(642)의 OP코드필드(366)을 해독하여 수치연산명령(OR명령)인 것을 검출한다.
병렬동작제어유닛(646)은 상기 제1 및 제2 명령디코더(644), (645)의 디코드결과로 부터 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령인 것을 알 수 있다.
또, 비교기(131)은 제1명령레지스터(641)의 디스티네이션필드(362)와 제2명령레지스터(642)의 제1소스필드(368)을 비교하여 일치하고 있지 않는 것을 검출한다. 비교기(132)는 제1명령레지스터(641)의 디스티네이션필드(362)와 제2명령레지스터(642)의 제2소스필드(369)를 비교하여 일치하고 있지 않는 것을 검출한다.
따라서, 병렬동작제어유닛(646)은 직전의 분기명령의 조건이 성립하고 있지 않으면 이들 2개의 명령을 동일한 사이클에서 병렬로 실행한다.
또, 분기조건이 성립하고 있으면 제2명령디코더(645)를 무효화하여 우측의 명령의 실행을 억제하고, 좌측의 명령만 실행한다.
이상과 같이 동시에 페치된 2개의 명령중 한쪽이 분기명령의 지연슬롯으로 되어 있는 경우라도 본 발명에 의하면 분기의 성립/불성립에 의해서 다른쪽의 명령을 무효화할 수 있어 정상적으로 동작할 수 있다.
[직전의 LD명령의 페치결과를 사용하는 명령]
도 6(g)는 직전에 LD명령이 있고, 그 페치결과를 이용하는 경우의 동작을 도시한 도이다. ADD명령이 64비트명령데이타버스(622)의 좌측에서 페치되고, OR명령이 우측에서 페치된 경우이다. 직전의 LD명령으로 레지스터R1에 데이타메모리(630)에서 데이타를 세트하고, 다음의 ADD명령으로 레지스터R1의 내용과 레지스터R2의 내용을 가산하여 레지스터R3에 저장하고, OR명령으로 레지스터R5와 레지스터R1의 논리합을 구하여 레지스터R4에 저장한다.
본 실시예에서는 도 4 및 도 6(b), (c)에서 설명한 바와 같이, 레지스터R1의 내용은 LD명령의 실행직후의 사이클에서는 유효하지 않다. 그래서, 직후의 명령이 레지스터 불일치인 경우에는 1사이클의 대기를 삽입할 수 있다.
64비트명령데이타버스(622)의 좌측에서 페치된 ADD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 OR명령은 제2명령 레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)의 OP코드필드(371)을 해독하여 수치연산명령(ADD명령)인 것을 검출하고, 제2명령디 코더(645)는 제2명령레지스터(642)의 OP코드(376)을 해독하여 수치연산명령(OR명령)인 것을 검출한다. 이것을 받아서 병렬동작제어유닛(646)은 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령인 것을 알 수 있다.
한편, 비교기(133)은 제1명령 레지스터(641)의 제1소스필드(373)과 지연슬롯레지스터(647)을 비교하여 일치하고 있는 것을 검출한다. 비교기(134)는 제1명령레지스터(64l)의 제2소스필드(374)와 지연슬롯레지스터(647)을 비교하여 일치하고 있지 않는 것을 검출한다.
비교기(136)은 제2명령레지스터(642)의 제1소스필드(378)과 지연슬롯레지스터(647)을 비교하여 일치하고 있지 않는 것을 검출하고, 비교기(135)는 제2명령레지스터(642)의 제2소스필드(379)와 지연슬롯레지스터(647)을 비교하여 일치하고 있는 것을 검출한다.
따라서, 병렬동작제어유닛(646)은 제1명령레지스터(641)의 ADD명령 및 제2명령레지스터(642)의 OR명령의 기동전에 1사이클의 대기를 삽입하고, 그후 2개의 명령을 병렬로 실행한다. 또한, 지연슬롯레지스터(647)은 LD명령의 디스티네이션레지스터의 번호가 세트되는 것으로 되어있다.
이상과 같이 동시에 페치된 2개의 명령이 직전의 LD명령의 메모리리드데이타를 사용하는 경우라도 본 실시예에 의하면 레지스터의 불일치를 고려하여 정상적으로 동작할 수 있다.
또한, 상기의 예에서는 좌우 어느 명령도 직전의 LD명령의 결과를 사용하는 예를 설명했지만, 모두 사용하지 않는 경우 병렬동작제어유닛(646)은 통상과 같이 2개의 연산기(651), (652)를 병렬로 실행시킨다.
또, 우측의 명령만이 LD명령의 결과를 사용하는 경우 먼저 좌측의 명령을 실행하고, 그 동안에 LD명령이 완료하므로 계속해서 우측의 명령을 실행할 수 있다.
또, 좌측의 명령만이 LD명링의 결과를 사용하는 경우는 병렬동작제어유닛(646)을 간단히 하기 위해 도 6(g)와 마찬가지로 좌우 양측의 명령을 대기시키도록 제어한다.
[예외처리]
도 7(a)는 2개의 수치연산명령을 동시 실행중에 좌측의 명령에서 예외가 발생한 경우의 동작을 도시한 도이다.
ADD명령 이 64비트명령데이타버스(622)의 좌측에서 페치되고, OR명령이 우측에서 페치된 경우이다. ADD명령으로 레지스터R1의 내용과 레지스터R2의 내용을 가산하여 레지스터R3에 저장하고, OR명령으로 레지스터R5와 레지스터R6의 논리합을 구하여 레지스터R4에 저장한다.
상기 2개의 명령의 동시실행에 있어서 좌측의 ADD명령에서 예외가 발생했을때 병렬동작제어유닛(646)은 우측의 OR명령의 실행결과를 레지스터에 저장하는 것을 억제하여 우측의 OR명령의 실행을 무효화하고, 예외발생시의 명령의 처리상태를 보존한다.
64비트명령데이타버스(622)의 좌측에서 페치된 ADD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 OR명령은 제2명령레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)의 OP코드 필드(711)을 해독하여 수치연산명령(ADD명령)인 것을 검출하고, 제2명령디코더(645)는 제2명령레지스터(642)의 OP코드필드(716)을 해독하여 수치연산명령(OR명령)인 것을 검출한다.
이것을 받아서 병렬동작제어유닛(646)은 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령인 것을 알 수 있다.
또, 비교기(131)은 제1명령 레지스터(641)의 디스티네이션필드(712)와 제2명령레지스터(642)의 제1소스필드(718)을 비교하여 일치하고 있지 않는 것을 검출한다. 비교기(132)는 제1명령 레지스터(641)의 디스티네이션필드(712)와 제2명령레지스터(642)의 제2소스필드(719)를 비교하여 일치하고 있지 않는 을 검출한다. 따라서, 병렬동작제어유닛(646)은 이들 2개의 명령을 동일한 사이클에서 병렬로 실행할 수 있는 것으로 판단하고, 이들 명령은 동시에 실행하는 것으로 된다.
즉, ADD명령의 동작으로써 제1명령레지스터(641)의 제1소스필드(713)에 따라서 레지스터R1의 내용을 리드하고, 또 제2소스필드(714)에 따라서 레지스터R2의 내용을 리드한다. 이들 2개의 데이타의 합을 연산기(651)에서 구하고, 그 결과를 디스티네이션필드(712)로 나타내는 레지스터R3에 저장한다. 연산기(651)은 제1명령레지스터(641)의 OP코드(711)을 해독하는 제1디코더(644)에 의해서 제어된다. 또한, 이 연산시에 오버플로가 발생한 것으로 한다.
또, OR명령의 동작으로써 제2명령레지스터(642)의 제1소스필드(718)에 따라서 레지스터R5의 내용을 리드하고, 또 제2명령레지스터(642)의 제2소스필드(719)에 따라서 레지스터R6의 내용을 리드한다. 이들 2개의 데이타의 논리합을 연산기(652)에서 구한다. 또한, 연산기(652)는 제2명령 레지스터(642)의 OP코드(716)을 해독하는 제2디코더(645)에 의해서 제어된다. 병렬동작제어유닛(646)은 좌측의 명령(ADD명령)에 있어서 오버플로의 예외가 발생한 것을 검출하고 연산기(651)의 결과를 레지스터에 저장하는 것을 억제한다.
예외가 발생한 명령의 어드레스는 다음과 같이 세이브된다.
먼저, 프로그램 메모리(620)을 액세스한 명령어드레스(621)은 프리페치명령어드레스레지스터(701)에 세트된다. 이 어드레스는 프리페치명령버퍼(640)에 세트되어 있는 명령의 어드레스에 대응한다. 다음에 명령이 프리페치명령버퍼(640)에서 제1명령레지스터(641) 및 제2명령레지스터(642)로 전송되면, 명령의 어드레스도 프리페치명령어드레스레지스터(701)에서 실행명령어드레스레지스터(702)에 세트된다. 여기에서, 실행명령어드레스레지스터(702)에 세트되어 있는 어드레스는 제1명령레지스터(641)에 세트되어 있는 명령의 어드레스이고, 제2명령레지스터(642)에 세트되어 있는 명령의 어드레스는 실행명령어드레스레지스터(702)의 값에 4를 가산한 값이다.
따라서, 상기와 같이 제1명령레지스터(641)의 명령(ADD명령)을 실행하는 도중에 예외가 발생하면 병렬동작제어유닛(646)은 실행명령어드레스레지스터(702)의 값을 예외명령어드레스레지스터(703)에 세트한다. 만약, 제2명령레지스터(642)의 명령(OR명령)을 실행하는 도중에 예외가 발생하면 병렬동작제어유닛(646)은 실행명령어드레스레지스터(702)의 값에 4를 가산하여 그 값을 예외명령어드레스레지스터(703)에 세트한다.
예외가 발생하면 본 실시예에서는 예외를 발생한 명령의 어드레스를 세이브하고, 프로세서는 미리 결정된 예외처리루틴을 실행한다. 이 예외처리루틴의 선두어드레스는 미리 결정된 것이며, 프로세서내의 ROM(705)에서 리드한 값이다. 이 어드레스를 기본으로 명령프리페치를 실행한다.
예외처리루틴은 사용자가 작성한 것이므로, 각 사용자에 의해서 여러가지 처리를 실행하고 있다. 예를들면 예외발생어드레스 및 예외발생의 요인을 사용자에게 표시하는 한편, 그 프로그램의 실행을 중지하고, 다른 프로그램을 실행시키는 것이 있다. 도 7(a)의 경우는 예외발생어드레스로써 EXPC(703)의 값을 표시하고, 예외요인으로써 산술오버플로였던 것을 표시한다.
이상과 같이 동시에 실행하고 있던 2개의 명령중 한쪽에서 예외가 발생해도 본 발명에 의하면 예외발생시의 명령어드레스 및 그 처리상태를 보존해둘 수 있다.
도 7(b)는 2개의 명령을 동시에 실행중에 우측의 명령에서 예외가 발생한 경우의 동작을 도시한 도이다. ADD명령이 64비트명령데이타버스(622)의 좌측에서 페치되고, LD명령이 우측에서 페치된 경우이다.
ADD명령으로 R1레지스터의 내용과 R2레지스터의 내용을 가산하여 R3레지스터에 저장하고, LD명령으로 R5레지스터와 16비트 이미디어트데이타의 합을 어드레스로 하는 메모리의 내용을 페치하여 R4레지스터에 저장한다. 본 실시예에 의하면 상기 2개의 명령의 동시 실행에 있어서 우측의 LD명령에서 예외가 발생했을때, 병렬동작제어유닛(646)은 좌측의 ADD명령의 실행결과를 레지스터에 저장하고, 좌측의 ADD명령의 처리를 완료한후 예외발생시의 명령의 처리상태를 보존한다.
64비트명령데이타버스(622)의 좌측에서 페치된 ADD명령은 제1명령레지스터(641)에 세트되고, 동시에 64비트명령데이타버스(622)의 우측에서 페치된 LD명령은 제2명령 레지스터(642)에 세트된다. 제1명령디코더(644)는 제1명령레지스터(641)의 OP코드필드(721)을 해독하여 수치 연산명령(ADD명령)인 것을 검출하고, 제2명령 디코더(645)는 제2명령 레지스터(642)의 OP코드필드(726)을 해독하여 메모리조작명령(LD명령)인 것을 검출한다.
이것을 받아서 병렬동작제어유닛(646)은 상기 2개의 명령이 병렬로 실행할 수 있는 종류의 명령인 것을 알 수 있다.
또, 비교기(131)은 제1명령 레지스터(641)의 디스티네이션필드(722)와 제2명령레지스터(642)의 제1소스필드(728)을 비교하여 일치하지 않는 것을 검출 한다. 비교 기(132)는 제1명령 레지스터(641)의 디스티네이션필드(722)와 제2명령레지스터(642)의 제2소스필드(729)를 비교하여 일치 하고 있지 않는 것을 검출한다. 따라서, 병렬동작제어유닛(646)은 이들 2개의 명령을 동일한 사이클에서 실행할 수 있다고 판단하고, 이들 명령을 동시에 실행하게 된다.
즉, ADD명령의 동작으로써 제1명령 레지스터(641)의 제1소스필드(723)에 따라서 레지스터R1의 내용을 리드하고, 또 제2소스필드(742)에 따라서 레지스터R2의 내용을 리드한다. 이들 2개의 데이타의 합을 연산기(651)에서 구하고, 그 결과를 디스티네이션필드(722)로 나타내는 레지스터 R3에 저장한다. 연산기(651)은 제1명령 레지스터(641)의 OP코드(721)을 해독하는 제1디코더(644)에 의해서 제어된다.
또, LD명령의 동작으로써 제2명령레지스터(642)의 제1소스필드(728)에 따라서 레지스터R5의 내용을 리드하고, 또 제2명령레지스터(642)의 제2소스필드(729)의 이미디어트데이타를 32비트로 부호확장한다. 이들 2개의 데이타의 논리합을 제2명령레지스터(642)의 OP코드(726)을 해독하는 제2디코더(645)에 의해서 제어되는 연산기(652)에서 구하고, 이것을 어드레스로 해서 데이타메모리(630)을 액세스한다. 이 예에서는 이때 데이타메모리(630)에 있어서 어떤 에러, 예를들면 버스에러가 발생한 것으로 한다.
예외가 발생한 명령의 어드레스는 다음과 같이 세이브된다.
제2명령레지스터(642)의 명령(LD명령)을 실행하는 도중에 예외가 발생했으므로, 병렬동작제어유닛(646)은 실행명령어드레스레지스터(702)의 값에 4를 가산하고, 그 값을 예외명령어드레스레지스터(703)에 세트한다. 또, 여기에서 실행명령어드레스레지스터(702)의 값에 4를 가산한다고 기술했지만 실제로는 실행명령어드레스레지스터(702)의 값은 8의 배수로 되어 있으므로, 우측에서 3비트째를 0에서 1로 하는 것만으로 좋다. 즉, 캐리가 발생하는 연산을 할 필요는 없다.
또, 프로세서는 ROM(705)에서 리드한 값을 어드레스로 해서 명령프리페치를 실행하고, 미리 결정된 예외처리루틴을 실행한다.
예외처리루틴의 내용은 도 7(a)의 경우와 마찬가지로 예를들면 예외발생어드레스로써 EXPC(703)의 값을 표시하고, 예외요인으로써 데이타버스액세스에러(예를들면 버스에러등)였던 것을 표시한다.
이상과 같이 동시에 실행하고 있던 2개의 명령중 한쪽에서 예외가 발생해도 본 실시예에 의하면 예외발생시의 명령어드레스 및 그 처리상태를 보존해둘 수 있다.
또, 이상과 같이 본 실시예에서는 제1명령레지스터(641) 및 제2명령레지스터(642)의 2개의 명령의 어드레스를 1개의 레지스터(702)에 유지할 수 있으므로, 제1명령레지스터(641) 및 제2명령레지스터(642)의 2개의 명령의 어드레스를 각각의 레지스터에 유지하는 경우에 비해서 레지스터의 절약으로 된다.
이상 설명한 본 실시예에 의하면 각 명령의 포맷이 한정되어 있기 때문에 명령의 해독을 용이하게 할 수 있고, 명령디코더를 2중으로 탑재해도 회로규모는 그다지 증대하는 일은 없다.
또, 본 실시예에 의하면 이미디어트데이타를 조작하는 명령의 OP코드는 레지스터를 조작하는 명령의 OP코드와 좌측끝의 1비트만이 다를 뿐이므로 연산기의 제어신호등을 생성하기 위한 명령해독이 어떤 명령이라도 공통화할 수 있어 명령디코더의 간략화가 가능하다.
또, 이미디어트데이타를 조작할지 하지않을지는 OP코드의 좌측끝의 1비트만큼 판단할 수 있으므로 이미디어트데이타 생성회로의 제어신호등을 생성하기 위한 명령디코더의 간략화가 가능하다.
이상 기술한 바와 같이 본 발명에 의하면 명령전후의 의존관계를 고려하면서 2개의 명령을 동시에 실행하는 명령제어방식을 용이하게 실현할 수 있다.
따라서, 피크시에는 종래방식의 2배의 처리성능을 갖는 데이타처리장치를 용이하게 실현할 수 있다.
또, 본 발명에 의하면 데이타폭이 넓은 버스를 사용하여 1사이클에서 페치한 2개의 명령을 동시에 실행할 수 있으므로 파이프라인스테이지 사이의 부하를 균일하게 할 수 있어 하드웨어회로를 유효하게 이용할 수 있게 된다.
특히, 본 발명에 의하면 병렬로 명령을 실행하는 명령실행회로에 있어서 각 명령실행회로마다 실행하는 명령의 종류를 한정하고 있으므로 각각의 명령실행회로의 회로규모를 작게 할 수 있다.
또, 본 실시예에서는 분기명령의 다음에 있는 명령이 분기명령과 동시에 실행할 수 있는 경우에는 분기명령과 동시에 실행하게 되고, 지연슬롯에서는 다른 명령의 동시실행을 억제하고 있으므로, 종래의 프로그램을 그대로 실행해도 나쁜 영향을 미치는 일없이 호환성을 유지할 수 있다.
이상 본 발명자에 의해서 이루어진 발명을 상기 실시예에 따라 구체적으로 설명했지만, 본 발명은 상기 실시예에 한정되는 것은 아니고, 그 요지를 이탈하지 않는 범위에서 여러가지로 변경가능한 것은 물론이다.

Claims (12)

  1. 소정 비트폭의 명령길이의 제1 및 제2 명령을 메모리에서 페치하고, 상기 제1 및 제2 명령을 병행해서 출력하는 명령페치유닛;
    그의 입력에 상기 명령페치유닛에서 출력되는 상기 제1 명령이 공급되는 제1 명령디코더;
    그의 입력에 상기 명령페치유닛에서 출력되는 상기 제2 명령이 공급되는 제2 명령디코더;
    상기 제1 명령디코더의 디코드결과예 의해서 제어되는 제1 명령실행유닛;
    상기 제2 명령디코더의 디코드결과에 의해서 제어되는 제2 명령실행유닛 및;
    상기 제1 명령의 디스티네이션필드의 정보와 상기 제2 명령의 소스필드의 정보를 비교하는 비교기를 구비해서 이루어지고,
    상기 제1 명령의 디스티네이션필드의 정보와 상기 제2 명령의 소스필드의 정보가 일치할 때 상기 제1 명령실행유닛과 상기 제2 명령실행유닛에 있어서의 상기 제1 및 제2 명령의 병행실행을 금지하고, 상기 제1 명령을 상기 제1 명령실행유닛에 의해 실행하는 데이타 프로세서.
  2. 제1항에 있어서,
    여러개의 레지스터로 이루어지는 레지스터파일을 더 구비해서 이루어지고,
    상기 제1명령의 상기 디스티네이션필드의 정보에 의해서 지정되는 레지스터파일 중의 레지스터와 상기 제2 명령의 소스필드의 정보에 의해서 지정되는 레지스터파일 중의 레지스터가 일치할 때, 상기 비교기의 출력은 상기 제1 명령실행유닛과 상기 제2 명령실행유닛에 있어서의 상기 제1 및 제2 명령의 병행실행을 금지하는 데이타 프로세서.
  3. 제1항에 있어서,
    상기 제1 명령디코더와 상기 제2 명령디코더의 상기 디코드결과와 상기 비교기의 상기 출력에 응답해서 상기 제1 명령실행유닛과 상기 제2 명령실행유닛에 있어서의 상기 제l 및 제2 명령의 병행실행을 금지하는 병렬동작 제어유닛을 더 구비하는 데이타 프로세서.
  4. 제2항에 있어서,
    상기 제1 명령디코더와 상기 제2 명령디코더의 상기 디코드결과와 상기 비교기의 상기 출력에 응답해서 상기 제1 명령실행유닛과 상기 제2 명령실행유닛에 있어서의 상기 제1 및 제2 명령의 병행실행을 금지하는 병렬동작 제어유닛을 더 구비하는 데이타 프로세서.
  5. 제1항에 있어서,
    상기 제1 및 제2 명령의 상기 소정 비트폭의 명령은 고정길이이고, 축소명령세트 컴퓨터로서 구성되는 데이타 프로세서.
  6. 제2항에 있어서,
    상기 제1 및 제2 명령의 상기 소정 비트폭의 명령은 고정길이이고, 축소명령세트 컴퓨터로서 구성되는 데이타 프로세서.
  7. 제3항에 있어서,
    상기 제1 및 제2 명령의 상기 소정 비트폭의 명령은 고정길이이고, 축소명령세트 컴퓨터로서 구성되는 데이타 프로세서.
  8. 제4항에 있어서,
    상기 제1 및 제2 명령의 상기 소정 비트폭의 명령은 고정길이이고, 축소명령세트 컴퓨터로서 구성되는 데이타 프로세서.
  9. 제1항 내지 제8항 중의 어느 한항에 있어서,
    상기 메모리는 메인메모리 또는 캐시메모리 중의 적어도 어느 1개로 구성되어 이루어지는 데이타 프로세서.
  10. 고정길이명령을 메모리에서 페치하는 명령페치유닛;
    상기 명령페치유닛에서 출력되는 제1 명령이 공급되는 제1 명령디코더;
    상기 명령페치유닛에서 출력되는 제2 명령이 공급되는 제2 명령디코더;
    상기 제1 명령디코더의 디코드결과에 의해서 제어되는 제1 명령실행유닛;
    상기 제2 명령디코더의 디코드결과에 의해서 제어되는 제2 명령실행유닛;
    여러개의 레지스터로 이루어지는 레지스터파일 및;
    상기 제1 명령의 디스티네이션필드의 정보와 상기 제2 명령의 소스필드의 정보를 비교하는 비교기를 구비해서 이루어지고,
    상기 제1명령의 디스티네이션필드의 정보에 의해서 지정되는 레지스터파일 중의 레지스터와 상기 제2 명령의 소스필드의 정보에 의해서 지정되는 레지스터파일 중의 레지스터가 일치하는 경우, 상기 제1 명령실행유닛과 상기 제2 명령실행유닛에 있어서의 상기 제1 및 제2 명령의 병행실행을 금지하는 데이타 프로세서.
  11. 제10항에 있어서,
    상기 제1 및 제2 명령의 병행실행을 금지하는 것에 의해 상기 제1 명령을 상기 제1 명령실행유닛에 의해 실행하고, 상기 제1 명령실행유닛의 연산결과를 상기 제2 명령실행유닛으로 보내고, 상기 제2 명령을 상기 제2 명령실행유닛에 의해 실행하는 데이타 프로세서.
  12. 제1 명령 과 그것에 계속되는 제2 명령을 동시에 실행하는 마이크로 프로세서로서,
    여러개의 레지스터로 이루어지는 레지스터파일 및;
    상기 제1 명령의 디스티네이션필드의 정보와 상기 제2 명령의 소스필드의 정보를 비교하는 비교기를 구비해서 이루어지고,
    상기 제1 및 제2 명령은 정수연산명령이고, 상기 제1 명령의 디스티네이션필드의 정보에 의해서 지정되는 레지스터파일 중의 레지스터와 상기 제2 명령의 소스필드의 정보에 의해서 지정되는 레지스터파일중의 레지스터가 일치하는 경우, 상기 제1 명령실행유닛과 상기 제2 명령실행유닛에 있어서의 상기 제1 및 제2 명령의 병행실행을 금지하는 마이크로 프로세서.
KR1019910013022A 1990-08-15 1991-07-29 2개의 명령을 동시에 실행할 수 있는 데이타 프로세서 KR100254008B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019960030542A KR100254007B1 (ko) 1990-08-15 1996-07-26 2개의 명령을 동시에 실행할 수 있는 데이타프로세서

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2214260A JP2834292B2 (ja) 1990-08-15 1990-08-15 データ・プロセッサ
JP2-214260 1990-08-15

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1019960030542A Division KR100254007B1 (ko) 1990-08-15 1996-07-26 2개의 명령을 동시에 실행할 수 있는 데이타프로세서

Publications (2)

Publication Number Publication Date
KR920004964A KR920004964A (ko) 1992-03-28
KR100254008B1 true KR100254008B1 (ko) 2000-04-15

Family

ID=16652806

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1019910013022A KR100254008B1 (ko) 1990-08-15 1991-07-29 2개의 명령을 동시에 실행할 수 있는 데이타 프로세서
KR1019960030542A KR100254007B1 (ko) 1990-08-15 1996-07-26 2개의 명령을 동시에 실행할 수 있는 데이타프로세서

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1019960030542A KR100254007B1 (ko) 1990-08-15 1996-07-26 2개의 명령을 동시에 실행할 수 있는 데이타프로세서

Country Status (5)

Country Link
US (1) US5381531A (ko)
EP (1) EP0471191B1 (ko)
JP (1) JP2834292B2 (ko)
KR (2) KR100254008B1 (ko)
DE (1) DE69133571T2 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787303A (en) * 1991-10-31 1998-07-28 Kabushiki Kaisha Toshiba Digital computer system capable of processing a plurality of instructions in parallel based on a VLIW architecture
JP3182591B2 (ja) * 1993-01-20 2001-07-03 株式会社日立製作所 マイクロプロセッサ
JP3207591B2 (ja) * 1993-03-19 2001-09-10 株式会社日立製作所 キャッシュメモリを有する計算機の改良
CA2123442A1 (en) * 1993-09-20 1995-03-21 David S. Ray Multiple execution unit dispatch with instruction dependency
JPH07200289A (ja) * 1993-12-28 1995-08-04 Fujitsu Ltd 情報処理装置
JPH07281893A (ja) * 1994-04-15 1995-10-27 Internatl Business Mach Corp <Ibm> 処理システム及び演算方法
US5928357A (en) * 1994-09-15 1999-07-27 Intel Corporation Circuitry and method for performing branching without pipeline delay
US5931941A (en) * 1995-04-28 1999-08-03 Lsi Logic Corporation Interface for a modularized computational unit to a CPU
JPH0991136A (ja) * 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
US5826054A (en) * 1996-05-15 1998-10-20 Philips Electronics North America Corporation Compressed Instruction format for use in a VLIW processor
US5796997A (en) * 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US8583895B2 (en) * 1996-05-15 2013-11-12 Nytell Software LLC Compressed instruction format for use in a VLIW processor
JP3431397B2 (ja) * 1996-05-23 2003-07-28 東芝マイクロエレクトロニクス株式会社 命令キュー
US5878242A (en) * 1997-04-21 1999-03-02 International Business Machines Corporation Method and system for forwarding instructions in a processor with increased forwarding probability
JP2002532775A (ja) * 1998-12-08 2002-10-02 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ インタープリタプログラム実行方法
WO2001025900A1 (en) * 1999-10-06 2001-04-12 Cradle Technologies Risc processor using register codes for expanded instruction set
US6834337B1 (en) 2000-09-29 2004-12-21 International Business Machines Corporation System and method for enabling multiple signed independent data elements per register
US7039906B1 (en) 2000-09-29 2006-05-02 International Business Machines Corporation Compiler for enabling multiple signed independent data elements per register
JP3683248B2 (ja) * 2002-10-22 2005-08-17 富士通株式会社 情報処理装置及び情報処理方法
WO2004097625A2 (en) * 2003-04-29 2004-11-11 Koninklijke Philips Electronics N.V. Zero overhead branching and looping in time-stationary processors
US9672037B2 (en) * 2013-01-23 2017-06-06 Apple Inc. Arithmetic branch fusion
KR20200111412A (ko) 2019-03-19 2020-09-29 배성주 밥알의 건조 및 갈변현상을 방지하는 수분 조절장치가 구비된 전기밥솥
KR102262151B1 (ko) 2019-03-19 2021-06-07 배성주 밥알의 건조 및 갈변현상을 방지하는 수분 조절장치가 구비된 전기밥솥

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0437044A2 (en) * 1989-12-20 1991-07-17 International Business Machines Corporation Data processing system with instruction tag apparatus

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3718912A (en) * 1970-12-22 1973-02-27 Ibm Instruction execution unit
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization
JPH06100968B2 (ja) * 1986-03-25 1994-12-12 日本電気株式会社 情報処理装置
EP0239081B1 (en) * 1986-03-26 1995-09-06 Hitachi, Ltd. Pipelined data processor capable of decoding and executing plural instructions in parallel
JPS63131230A (ja) * 1986-11-21 1988-06-03 Hitachi Ltd 情報処理装置
JPH0810430B2 (ja) * 1986-11-28 1996-01-31 株式会社日立製作所 情報処理装置
EP0354740B1 (en) * 1988-08-09 1996-06-19 Matsushita Electric Industrial Co., Ltd. Data processing apparatus for performing parallel decoding and parallel execution of a variable word length instruction
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
US5072364A (en) * 1989-05-24 1991-12-10 Tandem Computers Incorporated Method and apparatus for recovering from an incorrect branch prediction in a processor that executes a family of instructions in parallel
JP2816248B2 (ja) * 1989-11-08 1998-10-27 株式会社日立製作所 データプロセッサ
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0437044A2 (en) * 1989-12-20 1991-07-17 International Business Machines Corporation Data processing system with instruction tag apparatus

Also Published As

Publication number Publication date
EP0471191A2 (en) 1992-02-19
JPH0496825A (ja) 1992-03-30
EP0471191A3 (en) 1992-11-19
US5381531A (en) 1995-01-10
JP2834292B2 (ja) 1998-12-09
KR970005021A (ko) 1997-01-29
DE69133571T2 (de) 2007-09-06
KR920004964A (ko) 1992-03-28
KR100254007B1 (ko) 2000-04-15
EP0471191B1 (en) 2007-05-23
DE69133571D1 (de) 2007-07-05

Similar Documents

Publication Publication Date Title
KR100254008B1 (ko) 2개의 명령을 동시에 실행할 수 있는 데이타 프로세서
US5233694A (en) Pipelined data processor capable of performing instruction fetch stages of a plurality of instructions simultaneously
KR0178078B1 (ko) 2개의 명령이 동시 실행 가능한 데이타 프로세서
US6345357B1 (en) Versatile branch-less sequence control of instruction stream containing step repeat loop block using executed instructions number counter
US5826089A (en) Instruction translation unit configured to translate from a first instruction set to a second instruction set
EP0380849B1 (en) Method and data processing unit for preprocessing implied specifiers in a pipelined processor
JP2616182B2 (ja) データ処理装置
CA1324671C (en) Decoding multiple specifiers in a variable length instruction architecture
US5522051A (en) Method and apparatus for stack manipulation in a pipelined processor
US5522053A (en) Branch target and next instruction address calculation in a pipeline processor
EP0381469A2 (en) Method and data processing unit for pipeline processing of register and register modifying specifiers within the same instruction
US6219779B1 (en) Constant reconstructing processor which supports reductions in code size
JPH10222368A (ja) データ処理装置
US20020116599A1 (en) Data processing apparatus
JP2556182B2 (ja) デ−タ処理装置
US8583897B2 (en) Register file with circuitry for setting register entries to a predetermined value
JP2504312B2 (ja) プライオリティエンコ―ダ及びそれを備えたデ―タ処理装置
US7415599B1 (en) Instruction operation and operand memory location determined based on preceding instruction operation and operand memory location
JP3147884B2 (ja) 記憶装置及び情報処理装置
JP3102399B2 (ja) データ処理装置及び方法
JP2000293374A (ja) 情報処理装置
JPH0667882A (ja) データ処理装置

Legal Events

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

Payment date: 20050117

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee