KR100277386B1 - 병렬 연산기능을 가지는 계산기 및 데이터 프로세서 - Google Patents

병렬 연산기능을 가지는 계산기 및 데이터 프로세서 Download PDF

Info

Publication number
KR100277386B1
KR100277386B1 KR1019970078359A KR19970078359A KR100277386B1 KR 100277386 B1 KR100277386 B1 KR 100277386B1 KR 1019970078359 A KR1019970078359 A KR 1019970078359A KR 19970078359 A KR19970078359 A KR 19970078359A KR 100277386 B1 KR100277386 B1 KR 100277386B1
Authority
KR
South Korea
Prior art keywords
instruction
register
instructions
memory
command
Prior art date
Application number
KR1019970078359A
Other languages
English (en)
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 가나이 쓰도무
Application granted granted Critical
Publication of KR100277386B1 publication Critical patent/KR100277386B1/ko

Links

Images

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/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

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

Abstract

RISC 프로세서에 있어서, 코드사이즈를 작게, 또 하드웨어를 복잡하게 하지 않으면서 1머신사이클로 복수 연산을 실행하여, 성능을 높인다.
단일연산을 지시하는 명령길이가 짧은 명령을 N개 실행하든지, M개 (N<M)의 연산을 지시하는 명령길이가 긴 명령을 실행할 수 있게 하고, 병렬로 실행할 수 있는 연산수가 클 때에는 긴 명령을, 작을때에는 짧은명령을 이용한다. 또 긴 명령간의 경합은 소프트웨어에서 검출하고, 짧은 명령간의 경합만을 하드웨어에서 검출한다.
하드웨어 용이화에 의한 머신사이클의 향상, 코드사이즈 축소에 의한 코드캐시 히트율향상 및 병렬도 실행할 수 있는 연산수의 향상에 의하여 성능을 높일 수 있다.

Description

병렬연산기능을 가지는 계산기 및 데이터 프로세서
본 발명은 병렬연산을 실행하는 계산기 및 데이터 프로세서에 관한 것으로서, 특히, 스파스컬러 방식과, VLIW 방식을 혼재시켜서 실행하는 병렬 연산기능을 가지는 계산기에 관한 것이다.
계산기 아키텍처는 반도체기술의 진보등에 힘입어 해마다 진보하고 있다. 1980년대에는 이제까지의 복잡한 명령을 마이크로 명령을 사용하여 복수 사이클에 걸어 처리하는 CISC(Complex Instruction Set Computer) 대신, 간단한 명령을 1사이클로 실행하는 RISC(Reduced Instruction Set Computer)가 등장했다.
또한 연산방식의 고속화 기술로서 스파스컬러방식과 VLIW(Very Long Instruction Word)방식이 제안되고 있다.
스파스컬러 방식이란 명령실행시에 하드웨어로 명령간의 경합을 조사하여, 경합이 없으면 1머신사이클에 복수명령을 실행하는 방식으로, 일본국 특원소 63-283673호(종래기술 1)나, J-Hennessy and D. A. Patterson "Computer Architecture A Quantitative Approach" Morgan Kantmann Publishers, Inc 1990. p.318(종래기술 2)에 기재된 방식이 알려져 있다.
또 VLIW 방식이란 복수연산기의 동작을 제어하는 필드를 가진 긴 명령을 이용하는 방식이다. 통상의 RISC 프로세서의 명령길이가 32bit인 것에 대하여, 64, 128, 256 이상의 길이의 명령을 가진다. 이 방식에 관한 설명도 상기 J-Hennssy and D. A Patterson(종래기술 2)에 의한 문헌에 기재되어 있다.
VLIW 방식의 개량기술로서, 1워드길이 명령과 3워드길이 명령을 혼재시켜, VLIW 방식으로 처리함으로써 코드 사이즈의 크기를 개선하는 기술이 Robert Conh et al. "Architecture and Compiler Tradeoffs a Long Instruction Word Microprocessor" Third International Conference on Architectual Support for Programming Languages and Operating System, 1989, p.2-14(종래기술 3)에 기재되어 있다.
이하에, 스퍼스칼라방식과 VLIW 방식의 특징에 관하여 기술한다.
스퍼스칼라방식의 이점은 단일연산을 지시하는 명령길이의 짧은 명령으로, 유효연산만을 지시하기 때문에 코드사이즈를 작게할 수 있다.
명령을 추가할 필요가 없기 때문에 전기종과의 호환성이 유지되는 것이다.
이에 대하여 스파스컬러방식의 제1의 문제점은, 병령실행하는 연산내의 경합을 검출하지 않으면 안되는 것이다. 병렬연산하는 연산의 수가 많아지면 많아질수록 경합검출에 요하는 하드웨어량은 커진다.
또, 제2의 문제점은 현사이클 이전에 실행한 명령과 현사이클에서 실행하는 명령과의 사이의 경합검출, 대기가 복잡한 것이다. 병렬연산하는 연산의 수가 많아지면 많아질수록, 현 사이클의 명령과 경합할 가능성이 있는 명령이 많아져, 제2의 문제점인 양자의 경합검출, 대기하는 하드웨어는 복잡하게 된다.
또, 제3의 문제점은 명령길이가 짧기 때문에 명령에 의하여 지정할 수 있는 레지스터의 수가 적은 것이다. 16∼32개가 전형예이다. J-Hennessy and D. A. Patterson의 문헌 p.325에 나타나 있는 바와 같이, 병렬하여 실행가능한 연산을 늘리기 위한 소프트웨어상의 연구로서, 루프언롤링이나 소프트웨어 파이프라인을 이용하려고 하면, 레지스터의 수가 부족하다. 역으로 말하면, 존재하는 레지스터의 범위에서밖에 적합화 할수 없다.
이 개선책으로서, 상기 종래기술(1)의 문헌 E-21∼22에, 연산결과를 다음의 명령에 즉시는 반영시키지 않도록 함으로써, 레지스터의 수의 부족을 개선할 수가 있다고 기재되어 있다.
또, David Callahan et al. "Software Prefetching" Fourth International Conference on Architectual Support for Programming Languages and Operating System, 1991, p.40∼52 문헌에, 스파스컬러 머신에 있어서 명령에 의하여 메인메모리로부터 캐시메모리에 데이터를 프리페치하는 것이 기재되어 있다.
이상으로부터 스파스컬러방식에서는 명령실행의 병렬도를 늘리면 상기 제1, 제2의 문제점인 경합검출의 복잡함 때문에 머신사이클을 높힐 수가 없고, 처리속도가 향상하지 않는다고 하는 문제를 가지고 있다.
다음에 VLIW 방식의 제1의 이점은, 명령길이가 길고, 1명령중에 복수의 연산을 지정할 수 있고, 또한, 명령내에서의 연산간의 경합이 없기 때문에, 실행시에 하드웨어로 병렬실행하는 연산간의 경합을 검출하지 않아도 좋은 것이다.
제2의 이점은 명령길이가 길기 때문에, 많은 레지스터가 지정가능한 것이다.
다음에 VLIW 방식의 제1의 문제점은 상기한 명령내에서의 연산간의 경합을 피하기 위하여 모든 필드에 유효한 연산을 지정할 수 있다고만은 할 수 없어, 코드사이즈가 커져버리는 것이다.
제2의 문제점은 현 사이클 이전에 실행한 명령과 현사이클에서 실행하는 명령간의 경합검출, 대기가 복잡한 것이다. 이것은 스파스컬러방식의 제2의 문제점과 같다.
이에 대하여 하드웨어에서는 경합검출을 행하지 않고, 컴파일러에 의하여 미리 경합회피를 행하는 기술이, Andrew wolf and John P. Shen "A Variable Instruction Stream Extension to the VLIW Architecture", Fourth International Conference on Architecual Support for Programming Languages and Operating System, 1991, p.2∼14에 기재되어 있다.
또 VLIW 방식의 제3의 문제점은 전기종과의 호환성이 없는 것이다.
이것은 스파스컬러방식이, 종래의 1워드길이 명령을 하드웨어에서 병렬 실행하는 데에 대하여, VLIW 방식에서는, 명령의 재정의가 필요하게 되기 때문이다.
이제까지 기술한 바와 같이, 스파스컬러방식과 VLIW 방식의 이점을 살리면서, 스파스컬러방식과 VLIW 방식의 결점을 보완한 계산기는 존재하지 않았다.
본 발명의 목적은, 스파스칼라방식과 VLIW방식을 혼재시켜서 연산 실행가능한 계산기를 제공하는 데 있다. 이는 단일연산을 지시하는 명령길이가 짧은 명령으로 이루어지는 종래 아키텍처를 가지는 계산기의 상위 호환성을 유지하면서 처리속도를 향상시키는 것이다.
상기 목적을 달성하기 위하여, 본 발명에 의하면 첫째로 레지스터와 메모리와 프로그램카운터를 가지고, 상기 프로그램카운터에서 지시되는 상기 메모리에 격납되어 있는 명령을 독출하고, 상기 명령이 지시하는 연산을 상기 레지스터와 상기 메모리와 상기 프로그램 카운터에 대하여 실행하는 병렬연산기능을 가지는 계산기에 있어서, 상기 명령은 단일연산을 지시하는 명령길이가 짧은 명령 또는 복수연산을 지시하는 명령길이가 긴 명령으로서, 상기 프로그램카운터에서 지시된 상기 명령이 상기 명령길이가 짧은 명령인지, 상기 명령길이가 긴 명령인지를 판정하는 명령워드 길이 판정수단과, 상기 명령워드길이 판정수단에 의하여 상기 프로그램 카운터에서 지시된 상기 명령이 명령길이가 긴 명령이면 상기 레지스터에 상기 명령을 설정하고, 상기 프로그램 카운터에서 지시된 상기 명령이 명령길이가 짧은 명령이면 소정의 레지스터에 상기 명령을 설정하는 명령선택 수단을 가지는 것을 특징으로 한다.
본 발명의 제2의 실시형태에 의하면 레지스터와 메모리와 프로그램 카운터를 가지고, 상기 프로그램 카운터에서 지시되는 상기 메모리에 격납되는 명령을 독출하고, 상기 명령이 지시하는 연산을 상기 레지스터와 상기 메모리와 상기 프로그램카운터에 대하여 실행하는 병렬연산기능을 가지는 계산기에 있어서, 상기 명령은 단일연산을 지시하는 명령길이가 짧은 명령 또는 복수연산을 지시하는 명령길이가 긴 명령으로서, 상기 프로그램카운터에서 지시된 상기 명령이 상기 명령길이가 짧은 명령인지 상기 명령길이가 긴 명령인지를 판정하는 명령어 길이 판정수단과, 상기 명령길이가 짧은 명령간의 경합을 검출하는 경합검출수단과, 상기 명령어 길이 판정수단에 의하여 상기 명령길이가 짧은 명령이라고 판정되면 상기 레지스터에 상기 명령을 설정하고, 상기 명령길이가 짧은 명령이라고 판정되거나 또는 상기 경합검출수단에 의하여 경합이 없다고 판정되면 소정의 레지스터에 상기 명령을 설정하는 명령선택수단을 가지는 것을 특징으로 한다.
본 발명의 제3 실시형태에 의하면 레지스터와 메모리와 프로그램 카운터를 가지고, 상기 프로그램카운터에서 지시되는 상기 메모리에 격납되는 명령을 독출하고, 상기 명령이 지시하는 연산을 상기 레지스터와 상기 메모리와 상기 프로그램카운터에 대하여 실행하는 병렬연산기능을 가지는 계산기에 있어서, 상기 명령은 단일연산을 지시하는 명령길이가 짧은 명령 또는 복수연산을 지시하는 명령길이가 긴 명령으로서, 상기 프로그램카운터에서 지시된 명령이 상기 명령길이가 짧은 명령인지 상기 명령길이가 긴 명령인지를 판정하는 명령워드길이 판정수단과, 상기 명령워드 길이 판정수단에 의하여 상기 명령길이가 짧은 명령이라고 판정되면, 상기 명령길이가 짧은 명령간의 경합을 검출하는 경합검출 수단과, 상기 명령워드 길이 판정수단에 의하여 상기 명령길이가 짧은 명령이라고 판정되면, 상기 경합검출수단의 내용에 따라 상기 명령길이가 짧은 명령을 1머신사이클에 소정의 수 실행하고, 상기 명령길이가 긴 명령이라고 판정되면, 명령길이가 긴 명령을 1머신사이클에 소정의 수 실행하는 연산수단을 가지는 것을 특징으로 한다.
본 발명에 의하면 1머신 사이클로 단일연산을 지시하는 명령길이가 짧은 명령을 복수개 또는 복수연산을 지시하는 명령길이가 긴 명령을 1개 실행할 수 있기 때문에 연산이 병렬처리되어 성능이 높아진다.
본 발명에 의하면 병렬하여 실행할 수 있는 연산이 많을때만 명령길이가 긴 명령을 이용함으로써 명령길이가 긴 명령중의 무효필드를 적게할 수가 있고, 코드사이즈를 작게할 수가 있다. 이에 의하여 주메모리 및 캐시메모리의 사용효율이 상승하여 처리속도의 향상을 도모할 수 있다.
본 발명의 일 실시형태에 의하면, 명령길이가 긴 명령중에서 지정하는 복수의 연산내의 경합은 있을 수 없고, 하드웨어에서 이것을 검출할 필요는 없다. 하드웨어는 동일사이클에 실행하는 명령길이가 짧은 명령간의 경합만을 검출하면 된다. 본 발명에 의하면 1머신 사이클에서 실행되는 명령길이가 짧은 명령의 수를, 명령길이가 긴 명령중에 지시되는 연산의 수 보다 작게 함으로써, 평균적으로 1머신 사이클에서 실행되는 연산수가 높은 비율로 병렬로 실행하는 연산간의 경합검출을 용이하게 할 수가 있다.
본 발명의 다른 실시형태에 의하면, 명령길이가 긴 명령과, 그 이전의 명령길이가 긴 명령과의 경합이 없도록 컴파일러에서 명령열을 생성할 수 있어, 하드웨어에서 이것을 검출할 필요는 없다.
본 발명의 다른 실시형태에 의하면, 유효한 명령길이가 짧은 명령실행 후, 유효한 명령길이가 긴 명령을 실행할 때, 및 유효한 명령길이가 긴 명령의 실행 후, 유효한 명령길이가 짧은 명령을 실행할 때에는, 양자간에 필요한 만큼의 무효명령을 삽입함으로써 소프트적으로 양자의 경합을 해소할 수 있기 때문에 하드웨어에서 양자의 경합을 검출할 필요는 없다. 하드웨어가 검출하지 않으면 안되는 것은, 현 사이클 이전에 실행한 명령길이가 짧은 명령과 현사이클에 실행하는 명령길이가 짧은 명령과의 사이의 경합뿐이다. 따라서, 본 발명에 의하면 1머신 사이클에서 실행되는 명령길이가 짧은 명령의 수를 명령길이가 긴 명령중에 지시되는 연산의 수보다 작게 함으로써, 평균적으로 1머신 사이클에 실행되는 연산수가 높은데 비하여 현사이클 이전에 실행한 현사이클에 실행한 명령과의 사이의 하드웨어에 의한 경합검출을 용이하게 할 수 있다.
본 발명의 다른 실시형태에 의하면, 명령에 의하여 지시된 연산결과는 즉시 다음 명령에 반영되지 않고, 일정수 후의 명령으로부터 반영되기 때문에, 명령실행 후, 그 결과가 반영되기까지 실행되는 명령은 기입되기 전의 레지스터의 값을 읽을 수가 있어, 소프트웨어가 사용하는 레지스터의 수를 실질적으로 많게 하여 소프트웨어상의 최적화에 의하여 연산의 병렬도를 높힐 수가 있다.
본 발명의 다른 실시형태에 의하면 경합검출을 위한 소프트웨어가 간단하게 되어, 머신사이클의 향상이 도모되어, 처리속도를 높힐 수가 있다.
본 발명의 다른 실시형태에 의하면, 단일 연산을 지시하는 명령길이가 긴 종래 아키텍처의 명령에, 복수연산을 지시하는 명령길이가 긴 명령을 추가하여 새로운 아키텍처로 할 수 있으므로 아키텍처에 종래 아키텍처를 포함시켜 상위 호환성을 유지할 수가 있다.
상기한 바와 같은 본 발명의 목적 및 다른 목적, 특성 및 이점은 첨부한 도면을 참조한 다음의 상세한 설명으로부터 더욱 명백히 이해될 것이다.
제1도는 명령제어유닛의 전체도,
제2도는 레지스터 구성을 나타낸 도,
제3도는 명령형식을 설명하는 도,
제4도는 1워드 길이 명령의 동작을 설명하는 도,
제5도는 4워드 길이 명령의 동작을 설명하는 도,
제6도는 파이프라인 스테이지를 설명하는 도,
제7도는 경합이 없을 때의 1워드 길이 명령처리의 파이프 라인을 나타낸 도,
제8도는 경합이 있을 때의 1워드 길이 명령처리의 파이프 라인을 나타낸 도,
제9도는 4워드 길이 명령의 파이프라인을 나타낸 도,
제10도는 데이터의 메모리상에서의 배치를 나타낸 도,
제11도는 4워드 길이 명령을 이용했을 때의 연산의 모양을 설명하는 도,
제12도는 4워드 길이 명령을 이용한 프로그램을 설명하는 도,
제13도는 전체블록도,
제14도는 정수연산유닛의 블록도,
제15도는 부동 소수점 연산유닛의 블록도,
제16도는 부동 소수점 레지스터 파일의 블록도,
제17도는 부동 소수점 레지스터의 블록도,
제18도는 부동 소수점 레지스터 1비트분의 회로도,
제19도는 부동 소수점 레지스터의 블록도,
제20도는 섀도우 레지스터의 동작을 설명하는 도,
제21도는 섀도우 레지스터의 동작을 설명하는 도,
제22도는 섀도우 레지스터의 동작을 설명하는 도,
제23도는 모드제어회로의 동작을 설명하는 도,
제24도는 레지스터 독출제어회로의 동작을 설명하는 도,
제25도는 경합검출회로의 블록도,
제26도는 컴파일러의 처리플로우,
제27도는 모드제어회로의 상세를 나타낸 도,
제28도는 데이터캐시의 상세를 나타낸 도,
제29도는 로드스토어 연산에서 캐시미스를 발생했을 때의 파이프라인을 나타낸 도,
제30도∼제40도는 기타 실시예를 나타낸 도,
제41도는 제1도를 상세화한 도.
다음에 본 발명의 바람직한 실시예에 관하여 기술한다. 다음의 설명에서는 본 발명의 본질과 관계 없는 상세한 내용은 생략하고 있다. 제1도에 전체블록도를 나타낸다. 1200은 메모리, 1300은 명령캐시, 1303은 명령제어유닛, 160은 연산유닛, 150은 명령길이 판정수단, 109는 경합검출수단이다. 명령제어유닛(1303)은 인터페이스(170)을 이용하여 명령캐시로부터 명령을 독출하여 디코드하고, 인터페이스(180)를 통하여 연산유닛(160)을 제어한다. 연산유닛(160)은 복수의 연산을 병렬로 처리할 수가 있다. 본 계산기는 단일연산을 지시하는 4바이트 길이명령과 복수연산을 지시하는 16바이트 길이명령을 가지고, 명령캐시(1300)에는 16바이트 길이명령간 및 16바이트 길이명령과 4바이트 길이명령간의 경합은 없도록, 16바이트 길이명령과 4바이트 길이명령이 혼재하여 놓여 있다. 경합검출수단(109)은 4바이트 길이명령간 만의 경합을 검출한다. 명령제어유닛(1303)은 명령길이판정(150)을 구비하고, 16바이트 길이명령 실행시는 경합검출(109)의 출력을 무시하고, 4바이트 길이명령 실행시에는 경합검출수단(109)의 출력에 따라 셀렉터(110)는 병렬하여 실행할 수 있는 연산을 선택하여 디코드하고, 인터페이스(180)를 통하여 연산유닛(160)을 제어한다.
또한, 연산유닛은 2개의 경우를 나타내고 있으나, 2개 이상이어도 무방함은 물론이다.
이하, 레지스터의 구성, 명령포맷을 설명하고, 다시 파이프라인 및 동작 타이밍을 설명하고, 마지막으로 제1도의 전체블록도의 상세를 설명한다.
제2도에 레지스터의 구성을 나타낸다. FR0∼FR31은 64비트길이의 부동(浮動) 소수점 레지스터, R0∼R31은 32비트 길이의 정수 레지스터이다. 간단하게 하기 위하여, 부동 소수점 데이터는 모두 배정밀도로 64비트 길이로 한다. 또, 어드레스는 32비트 마다 나누어져 있는 것으로 한다.
본 실시예에서는 명령길이가 짧은 명령의 명령길이를 1워드 길이, 명령길이가 긴 명령의 명령길이를 4워드 길이로 한다.
제3도에, 명령형식을 나타낸다. 1워드는 32비트이다. 기본명령, 분기명령, 로드 스토어명령은 1워드길이명령, 복합명령은 4워드 길이명령이다. 기본명령은 모든 레지스터 ·레지스터간 연산이다. 본 실시예에서는 명령길이가 긴 명령의 명령길이를 4워드 길이로 했으나, 실시예에 따라서는 더 긴 것도 더 짧은 것도 있을 수 있다.
본 실시예에서는 간단하게 하기 위하여 4워드 길이명령은 반드시 4워드길이 경계로 구분된 4워드로 배치된다고 가정하나, 이 가정을 제외하는 것은 용이하다.
먼저 기본명령에 관하여 설명한다. OP 필드는 오페코드의 종류를, S1과 S2 필드는 2개의 소스레지스터의 번호를, T필드는 타겟 레지스터의 번호를, CC필드는 플렉의 설정방법을 나타내는 필드이다. 즉, S1과 S2으로 나타내는 레지스터가, OP로 나타내는 연산을 행하게 되고, T로 나타내는 레지스터에 결과가 기입된다. 상세를 제4도에 나타낸다.
다음에 분기명령에 대하여 설명한다. d는 디스플레이스멘트를 나타낸다. 분기명령에서는 프로그램카운터(PC)에 d의 값이 가산된다.
다음에 로드·스토어 명령에 대하여 설명한다. F 필드는 로드 또는 스토어하는 데이터가 부동소수점 데이터인지, 정수데이터인지를 나타낸다. SIZE 필드는 제4도에 나타낸 바와 같이, 로드 또는 스토어하는 데이터의 워드길이를 나타낸다. 정수에 대해서는 1워드만이 정의되고, 부동소수점에 대해서는 2∼16워드가 정의되어 있는 것으로 한다. 제4도에 나타낸 바와 같이 FST 명령에서는, FR(S1)이 R(S2)번지에 기입된다. SIZE가 16워드일 때에는 FR(S1)∼FR(S1 + 7)이 R(S2)번지로부터 시작되는 연속하는 16워드에 기입되는 것으로 한다. 또, FLD 명령에서는, R(S1) + R(S2)번지의 데이터를 FR(T)에 기입한다. SIZE가 16워드일 때에는 R(S1) + R(S2)번지부터 시작되는 연속하는 16워드가 FR(T)∼FR(T+7)에 기입된다.
다음에 제3도, 제5도를 사용하여 4워드길이의 복합명령에 대하여 설명한다. 이 명령에서는 I1, I2, IT, SIZE, F필드로 표시된다. 로드· 스토어조작과 J1, J2, JT, J필드로 표시되는 정수연산과, M1, M2, MT필드로 표시되는 제1부동소수점연산과, A1, A2, AT, A필드로 표시되는 제2부동 소수점연산과, N1, N2, NT 필드로 표시되는 제3부동소수점연산과, B1, B2, BT, B필드로 표시되는 제4부동소수점연산과, CC, d, N필드로 표시되는 플로우제어의 합계 7개의 연산이 지시된다. 각 필드의 상세함에 대해서는 제5도에 나타낸다. 제1부동소수점연산과, 제3부동소수점연산은 승산, 제2부동소수점연산과 제4부동소수점연산은 가감산이다. N필드는 본 명령에 계속하여 삽입하고 싶은 무효사이클의 수를 나타낸다. 사용방법에 관해서는 후에 설명한다.
정수연산에 대하여 설명한다. J필드≠1111일 때는 제5도에 나타낸 바와 같이 통상의 연산을 행한다. 그러나, J필드=1111일 때는 데이터가 격납되어 있는 메모리로부터 캐시메모리에의 프리페치를 행한다. 즉, R(J1) + R(J2)을 어드레스로서 캐시메모리를 액세스하여 해당하는 데이터가 없으면 메모리로부터 캐시에 데이터를 전송한다.
또, 1워드 길이 명령에서는 연산결과는 다음명령에 즉시 반영되나, 4워드 길이명령에서는 연산결과는 3개 뒤의 명령에 비로서 반영된다. 이 방법을 바람직하게 이용한 파이프라인 구성과 프로그램예에 관하여 이하에 설명한다.
제6도에 나타낸 바와 같이, 파이프라인 구성은 IF, D, E, F, S의 5단이다. IF 스테이지에서는 명령의 독출, D 스테이지에서는 명령의 디코드, E 스테이지에서는 레지스터의 독출과 연산의 일부, F스테이지에서는 연산, S스테이지에서는 연산의 나머지와 레지스터에의 연산결과의 기입이 행하여진다. 파이프라인 구성은 정수연산과 부동소수연산에서 같게 한다.
제7도에 1워드길이 명령의 본 실시예에 의한 처리플로우를 나타낸다. 1머신 사이클에 2명령으로 처리되는 스파스컬러 방식이다. 명령 1과 2, 명령 3과 4, 명령 5와 6, 명령 7과 8 각각이, 특히 경합이 없는 한 병렬로 처리된다. 이 스파스컬러 방식에 대해서는 일본국 특원 소 63-283673호에 상세하게 기재되어 있다.
다음에 제8도는 명령 2의 결과를 명령 3이 사용하는 경우의 처리 형태를 나타낸 것이다. 명령 3과 4의 E스테이지는 명령 2의 S스테이지가 종료하기 까지 지연시킨다. 앞 명령의 결과가 다음 명령에 반영된다고 하는 명령 형태를 만족하기 위하여, 하드웨어는 상기 경합을 검출하여 제8도에 나타낸 처리를 행하지 않으면 안된다.
4워드길이 명령의 형태를 제9도에 나타낸다. 4워드길이명령은 1머신 사이클에 1명령씩 처리된다. 명령 1의 연산결과는 앞에 기술한 방법에 의하여 명령 2,3에는 반영되지 않고, 명령 4가 되어 비로서 반영된다. 명령 1의 레지스터 기입스테이지인 S스테이지는 명령 4의 레지스터 독출 스테이지인 D스테이지의 1개 전에 정확히 종료하고 있기 때문에, 제8도를 사용하여 설명한 바와 같은 하드웨어에 의한 경합제어는 필요없다. 본 실시예에서는 연산스테이지는 E, F, S의 3단이나, 일반적으로 연산결과를 기입하기 전에 행하는 다음 명령의 수(N)와 파이프라인단수(M)의 사이에 N ≥ M - 1이면 하드웨어에 의한 경합제어는 불필요하다. 본 실시예에서는 N=2, M=3인 케이스이다.
또, 1워드길이명령과 다음의 유효한 4워드길이명령의 사이에는 반드시 무효인 4워드길이명령을 2개 두는 것으로 한다. 마찬가지로 유효한 4워드 길이명령과 다음의 1워드 길이명령의 사이에는 반드시 무효인 4워드길이 명령을 2개 두는 것으로 한다.
다음에 이 4워드길이 명령의 바람직한 프로그램예에 대하여 제10도, 제11도, 제12도를 사용하여 설명한다. 다음식의 계산을 하는 경우를 생각한다.
A(i) = A(i) + C x B(i), i≤i≤24
단, C는 정수, A(i), B(i)는 메모리상에 제10도와 같이 배치되어 있는 64비트의 부동소수점 데이터이다.
제11도는 A(i)의 계산을 하는데, 각 사이클에 어떠한 연산이 되는지를 설명하는 도이다. 횡축은 시각이고, 단위는 머신사이클이다. 도면에 그려진 가로길이의 박스는 처리되는 데이터가 통하는 연산기의 E, F, S의 3스테이지를 나타낸다. (1)∼(10)에 대하여 설명한다. 연산은 인덱스(i)에 관하여 4개씩 행하여진다. (1)∼(10)은 A(9)∼A(12)을 계산하기 위한 처리이다. 이하, 각 처리에 대하여 설명한다. 정수(C)는 FR(31)에 있는 것으로 한다.
(1) A(1)∼A(4)를 FR4∼FR7, B(7)∼B(10)을 FR0∼FR3에 로드한다.
(2) FR0 x FR31을 FR8에 격납
(3) FR1 x FR31을 FR9에 격납
(4) FR4 + FR8을 FR12에 격납
(5) FR5 + FR9를 FR13에 격납
(6) FR2 x FR31을 FR10에 격납
(7) FR3 x FR31을 FR11에 격납
(8) FR6 x FR10을 FR14에 격납
(9) FR7 + FR11을 FR15에 격납
(10) FR12∼FR15을 A(9)∼A(12)에 스토어한다.
(1)∼(10)의 연산스케쥴링에 관해서는 1개의 연산에 제10도를 사용하여 설명한 바와 같이 3사이클이 걸리는 것이 고려되고 있다. A(9)∼A(12)의 처리에 관하여 설명했으나, A(13)∼A(16), A(17)∼A(20), … 의 처리도 이와 똑같이 행하여진다. 각 연산기는 1사이클피치에서 파이프 라인되어 있고, A(13)∼A(16), A(17)∼A(20), … 의 처리를 A(9)∼A(12)의 처리에 중첩시켜 제11도와 같이 처리가능하다.
또, 제11도에 나타낸 처리를 실현하는 4워드길이 명령예를 나타낸 것이 제12도이다. A(1)∼A(24)의 연산은, 제12도에 나타낸 명령 1∼ 명령 22의 22명령으로 실현할 수 있다. 사용하는 레지스터는 FR0∼FR15, FR31의 17개이다. 명령 1,3,5,7,9,11,13,15에서 어느 데이터가 로드될지, 또 명령 12,14,16,18,20,22에서 어느 데이터가 스토어되는지를 제10도에 나타냈다. 명령 3은 FR0∼FR3에 값을 기입하는데, 그 결과가 반영하는 것은 명령 6 이후이기 때문에, 명령 1에서 로드한 FR0∼FR3의 값을 명령 4에서 사용하는 것이 가능하다. 명령 1의 결과가, 명령 2에 즉시 반영되는 종래의 방식에서 제11도와 같은 처리를 행하려고 하면, 명령 3에서 FR0∼FR3에 기입을 행할 수는 없고, FR16∼FR19등, 새로운 레지스터가 필요하게 된다. 그러나, 사용할 수 있는 레지스터의 수에는 한계가 있어, 레지스터의 수가 낵크가 되어, 처리사이클 수가 늘어나 버린다. 제12도의 프로그램은 현명령의 결과가 3명령후에 밖에 반영되지 않는 지연기입을 발생한 결과, 17개의 레지스터를 사용할 뿐으로 연산이 가능하게 된 것이다.
본 예에서 나타낸 바와 같이 지연기입은, 레지스터를 지정하는 오페코드의 필드를 증가시키지 않고, 실질적으로 사용할 수 있는 레지스터의 수를 늘리는 효과가 있다.
제12도 상에서, "x"표는 아무것도 연산하는 것이 없기 때문에 비워버린 필드인데, 특히 처리개시시의 명령 1∼6, 종료시의 명령 17∼22에 빈 필드가 많다. 그러나 이들 빈 필드는, 컴파일러에 의하여 다음의 일련의 처리의 개시처리와 현재의 일련의 처리의 종료처리를 거듭함으로써 줄일 수 있다. 또, 전혀 하는 일이 없는, 명령 2, 4, 21은 명령 1, 3, 20의 N필드를 "1"로 함으로써 생략할 수가 있다.
본 발명에서는 연산결과를 기입하고, 레지스터의 지정은 연산을 지정하는 명령으로 행하기 때문에 명령 4, 21을 비로소 생략할 수 있다. 연산결과를 기입하는 레지스터의 지정을, 기입이 행하여지는 스테이지에 발행되는 명령으로 지정하는 방식에서는 명령 4, 21에서는 명령 7, 18에서 연산한 결과의 기입지정이 필요하여 생략할 수가 있다.
또 제12도의 프로그램 전에 1워드길이 명령이 있었을 때에, 제12도의 명령 1앞에 2개의 4워드길이의 무효명령을 삽입하지 않으면 안되나, 이는 N필드가 "1"인 4워드길이의 무효명령을 1개 넣으면 된다. 또, 제12도의 프로그램 뒤에 1워드길이의 명령이 오는 경우, 제12도의 명령 22의 N필드를 "10"로 하면 된다.
이와 같이 명령을 길게하여 N필드를 설치하여, 유효하게 사용함으로써, 코드사이즈를 삭감하는 것이 가능하다. 또, 1워드길이명령에서는 4워드로 4개의 연산밖에 지시할 수 없는 것에 비하여, 4워드길이명령에서는 4워드로, 제5도에 나타낸 바와 같이 7개의 연산을 지시할 수 있다.
다음에 프로그램 작성방법에 관하여, 설명한다. 프로그램은 FORTRAN, C등의 고급언어로 기술하고, 컴파일러에 의하여 명령열로 변환한다.
제26도에 본 발명에 관한 컴파일러의 처리플로우를 나타낸다. 고급언어에 의한 프로그램은 자구(字句)해석부, 구문해석부, 의미해석부를 거쳐, 중간 코드로 변환된다. 중간코드는 최적화부에 의하여 최적화되고, 코드생성부에 의하여 제3도에 나타낸 명령열로 변환된다. 여기에서 최적화부와 코드생성부를 합쳐 합성부라고 한다. 이 합성부에 본원발명에 관한 특징이 있다. 즉, 이 합성부에서는 중간코드를 보아 병렬하여 할 수 있는 연산을 가능한한 많아지도록 명령열을 생성하는 병렬화부를 가진다. 이 병렬화부에서는 병렬로 할수 있는 연산수가 많을 때에는 4워드길이명령을 사용하고, 병렬할 수 있는 연산수가 적을 때에는 1워드길이명령을 사용한다. 여기서, 4워드길이명령을 사용할지 1워드길이 명령을 사용할지의 판단기준은, 병렬하여 실행할 수 있는 연산수에 따라 결정되나, 이 연산수는 시스템에 따라 다르므로 프로그램을 작성할 때, 파라메터로서 컴파일러에 지정할 수 있도록 되어 있다. 상기한 바와 같이 함으로써, 코드사이즈가 작아져, 주메모리 및 캐시메모리의 사용효율이 높아져, 처리속도를 높힐 수 있다.
다음에 합성부의 특징으로서 레지스터의 할당이 있다. 4워드길이명령은 그 연산결과가 3개후의 명령에 비로소 반영되기 때문에, 특별한 배려가 필요하게 된다. 예를 들면, 제12도에 있어서, 명령 1의 결과는 명령 4에 비로소 반영되기 때문에, 명령 2, 3에서는 명령 1의 결과를 사용하지 않고 할수 있는 연산을 가능한 한 많이 할당하여 둔다. 이때, 연산할 수 있는 명령이 1개도 없을 때는, 무효명령생성부에 의하여 무효명령을 삽입하여 둔다. 또, 합성부에서는 1워드길이명령과 다음의 유효한 4워드길이 명령과의 사이에는 반드시 무효인 4워드 길이명령을 2개 삽입하여 둔다. 반대로, 유효인 4워드길이명령과 다음의 1워드길이명령과의 사이에도 반드시 무효인 4워드길이명령을 2개 삽입하여 둔다. 여기서 앞서 설명한 바와 같이 무효명령은 N필드를 사용함으로써 생략할 수 있다. 즉, 본 실시예의 컴파일러는 긴 명령간의 경합을 검출하고, N필드를 사용하여 명령실행 후에 삽입해야 할 무효사이클의 수를 지정할 수 있기 때문에, 하드웨어에서 긴명령간의 경합을 검출하거나 처리를 할 필요가 없다.
다음에 지금까지 설명한 명령의 처리를 행하는 하드웨어의 일실시예에 대하여 설명한다. 제13도는 제1도를 상세화한 전체 구성이다. 1300은 명령캐시, 1301은 명령캐시컨트롤러, 1302는 명령처리플로우를 제어하는 분기유닛, 1303은 명령을 디코드하는 명령제어유닛, 1304는 정수연산유닛, 1307은 부동소수점 연산유닛, 1306은 데이터캐시, 1305는 데이터캐시 컨트롤러, 1308은 메모리 인터페이스유닛이다.
명령제어유닛(1303)은 명령캐시(1300)로부터 실행해야 할 명령을 버스(1310)를 통하여 받아들여 명령을 디코드하고, 정수연산유닛제어신호(1318)를 정수연산유닛(1304)에, 부동소수점연산유닛 제어신호(1314)를 부동소수점연산유닛(1307)에, 분기유닛제어신호(1312)를 분기유닛(1302)에 송출한다. 또한 프로그램카운터(3500)의 제어를 위하여 모드신호(110)도 분기유닛(1302)에 송출한다. 또, 정수연산유닛(1304)으로부터 플랙(1317)을, 부동소수점연산유닛으로부터 플랙(1315)을 받아들인다.
정수연산유닛(1304)은 오퍼랜드어드레스(1319)를 데이터캐시(1306)와, 데이터캐시컨트롤러(1305)에 송출한다. 데이터캐시로부터 독출된 데이터는 데이터버스(1320)를 통하여 정수연산유닛(1304) 또는 부동소수점 연산유닛(1307)에 송출된다. 데이터캐시중에 소망하는 데이터가 없을 때에는 데이터 캐시컨트롤러(1305)가 메모인터페이스유닛(1308)에 인터페이스신호(1321)를 통하여 기동을 걸어, 주메모리로부터 데이터를 독출한다. 그 사이의 대기제어를 신호(1316)를 통하여 명령제어유닛(1316)으로 행한다.
분기유닛은, 다음에 독출해야 할 명령의 어드레스(1309)를 명령캐시(1300)와, 명령캐시컨트롤러(1301)에 송출한다. 소망하는 명령이 명령캐시1300)중에 없을 때에는, 명령캐시컨트롤러(1301)는 메모리인터페이스유닛(1308)에 인터페이스신호(1313)를 통하여 기동을 걸어, 주메모리로부터 명령을 독출한다. 그 사이의 대기제어를 신호(1311)를 통하여 명령제어 유닛(1316)으로 행한다.
정수연산유닛(1304)의 상세함을 나타낸 것이, 제14도이다. 1400은 디코더, 1401은 제1 ALU, 1402는 제2 ALU, 1403은 정수레지스터이다. 제1 ALU에는 소스버스(1406, 1407)를 통하여 정수레지스터파일(1403)로부터 데이터가 보내지고, 연산결과는 타겟버스(1322)를 통하여 정수레지스터파일(1403)에 되돌려진다. 또, 제2 ALU에는 소스버스(1408,1409)를 통하여, 정수레지스터파일(1403)로부터 데이터가 보내지고, 연산결과는 타겟버스(1319)를 통하여 정수레지스터파일(1403)에 되돌려진다. 1317-1은 제1 ALU로부터 출력되는 플랙, 1317-2는 제2 ALU로부터 출력되는 플랙이다. 버스(1319,1322)는 로드스토어 및 프리패치시의 어드레스로서 데이터캐시(1306)에 송출된다.
제13도의 부동소수점 연산유닛(1307)의 상세를 나타낸 것이 제15도이다. 1501은 디코더, 1502는 부동소수점 레지스터파일, 1503은 제1 승산기, 1504는 제2 승산기, 1505는 제1 가산기, 1506은 제2 가산기이다. 제1 승산기(1503)에는 소스버스(1517,1518)를 통하여, 제2 승산기(1504)에는 소스버스(1515,1516)를 통하여, 제1 가산기(1505)에는 소스버스(1513,1514)를 통하여, 제2 가산기(1506)에는 소스버스(1511,1512)를 통하여 부동소수점 레지스터파일(1502)로부터 데이터가 보내지고, 연산결과는 각각 타겟버스(1507,1508,1509,1510)를 통하여 부동소수점레지스터파일에 기입된다.
1315-1은 제1 승산기(1503)의 플랙, 1315-2는 제2 승산기(1504)의 플랙, 1315-3은 제1 가산기(1505)의 플랙, 1315-4는 제2 가산기(1506)의 플랙이다.
제15도의 부동소수점레지스터파일(1502)의 상세를 나타낸 것이 제16도이다. 1600∼1608은 부동소수점레지스터, 1314-1∼1314-9는 각각 부동소수점레지스터(1600∼1608)의 제어신호이다. 1610은 로드어라이너, 1609는 스토어어라이너이다. 1611∼1618은 부동소수점레지스터(1600∼1608)를 메모리와 연결하는 버스이다. 버스(1611)는 FR0, 16, 24에, 버스(1612)는 FR1, 9, 17, 25에 접속되어 있다. 버스(1613, 1614, 1615, 1616, 1617)도 마찬가지이고, 버스(1618)에는 FR7, 15, 23, 31이 접속되어 있다. 로드명령실행시에는 버스(1320)를 통하여 보내져온 데이터를 로드어라이너(1610)에 의하여, 1611∼1618중 소망하는 버스에 다시 실어, 소망하는 레지스터에 기입한다. 또 스토어명령실행시에는 1611∼1618에 레지스터로 부터 데이터가 독출되고, 스토어어라이너(1609)에 의하여 버스(1320)의 소망하는 위치에 데이터가 출력된다.
제16도의 부동소수점레지스터(1600)의 제1의 실시예를 나타낸 것이 제17도이다. 레지스터(1600)에 대하여 나타냈으나 1601∼1608도 마찬가지이다. 제17도에 나타낸 바와 같이 레지스터(1600)는 64비트의 레지스터의 집합이다. 1700∼1763은 각각 1비트 레지스터이다. 1511-00∼1518-00은 레지스터(1700)의 독출버스, 1507-00∼1518-00은 레지스터(1700)의 기입버스, 1611-0은 레지스터(1700)의 기입버스이다. 레지스터(1763)의 버스 구성도 마찬가지이다.
제28도는 제13도의 데이터 캐시의 상세를 나타낸 것이다. 2801은 데이터를 유지하는 데이터 어레이, 2800은 로드스토어 연산용의 어드레스 어레이, 2802는 프리패치용의 어드레스 어레이이다. 어드레스 어레이(2800과 2802)는 같은 내용의 데이터를 유지하고 있다. 워드길이명령의 로드스토어 명령실행시에는 버스(1319 또는 1322)를 이용하여 어드레스 어레이(2800)와, 데이터 어레이(2801)가 액세스된다. 4워드길이 명령 실행시에는 버스(1322)를 사용하여 어드레스 어레이(2800)와 데이터어레이(2801)가 액세스된다. 또, 버스(1319)를 사용하여 프리패치를 위하여 어드레스 어레이(2802)가 액세스된다.
제29도는 로드스토어 연산에서 캐시미스를 발생했을 때의 파이프라인을 나타낸 도면이다. 파이프라인은 데이터가 메모리로부터 캐시메모리에 전송되는 동안 로크된다. 제29도에서 φ로 표시되는 것이 로크되는 기간이다.
한편 프리패치연산시에는 어드레스 어레이(2802)가 히트되면 아무것도 행하지 않는다. 미스하면, 그 어드레스를 포함하는 블록이 메모리로부터 데이터 어레이(2801)에 버스를 통하여 전송된다. 단, 이때는 파이프라인은 로크되지 않는다. 컴파일러에 의하여 미스할 가능성이 있는 로드스토어 연산 전에 프리패치를 설정하여 두면, 메모리로부터 캐시메모리에의 전송을 다른 연산과 병렬로 행할 수가 있다. 그 때문에 제29도에서 나타낸 파이프라인 로크에 의한 성능저하를 피할 수가 있다.
제17도의 레지스터(1700)의 회로구성예를 나타낸 것이 제18도이다. 1816과 1817은 인버터, 1802∼1815는 클록드인버터이다. 1314-1-1∼8이 하이가 되면, 각각 버스(1511-00∼1518-00)에 레지스터의 값이 출력된다. 또, 1314-1-10∼14가 하이가 되면, 버스(1510-00∼1507-00)의 값이 레지스터에 기입된다. 또, 1314-1-9가 하이가 되면 레지스터의 값이 버스(1611-00)에 출력되고, 1314-1-10이 하이가 되면, 버스(1611-00)가 레지스터에 기입된다. 신호(1800)는 예비 독출포트, 1801은 예비기입 포트이다. 1800과 1801의 용도에 대해서는 후에 설명한다.
제19도는 제16도의 부동소수점레지스터(1600)의 제2 실시예를 나타낸 것이다. 제19도의 실시예는 제17도의 실시예와 비교하여 1900∼1963의 제1 섀도우 레지스터, 2000∼2063의 제2 섀도우 레지스터가 부가되어 있는 점이 다르다. 제1 섀도우 레지스터(1900)는 신호(1800)를 통하여 레지스터(1700)의 값을 독해할 수가 있다. 또, 신호(1964)를 통하여 제2 섀도우 레지스터(2000)에 제1 섀도우 레지스터(1900)의 값을 송출한다. 제2 섀도우 레지스터(2000)는 자신의 값을 신호(1801)을 통하여 레지스터(1700)에 송출한다. 즉, 레지스터(1700∼1763), 제1 섀도우 레지스터(1900∼1963), 제2 섀도우 레지스터(2000∼2063)는 링상의 시프트 레지스터를 구성하고 있다. 또한, 제1 섀도우 레지스터(1900∼1963), 제2 섀도우 레지스터(2000∼2063)는 레지스터(1700∼1763)와 마찬가지로 버스(1611-00∼1611-63)를 통하여 독출기입을 할 수 있다. 1314-1-15는 제1 섀도우 레지스터(1900∼1963)의 제어신호, 1314-1-16은 제2 셰도우 레지스터(2000∼2063)의 제어신호이다.
섀도우 레지스터의 목적은, 4워드길이명령 실행시의 인터럽트로부터의 복귀를 가능하게 하는 것이다. 제20도∼제22도를 사용하여 그 동작을 설명한다. W' 스테이지는 레지스터로부터 제1 섀도우 레지스터(FRS1)에 기입하는 스테이지, W"는 제1 섀도우 레지스터(FRS1)로부터 제2 섀도우 레지스터(FRS2)에 기입하는 스테이지이다.
제20도는 인터럽트가 없는 통상시의 4워드길이명령의 동작이다. FR, FRS1, FRS2의 타임챠트상의 숫자는 어느 명령의 연산결과가 각 레지스터에 들어가 있는지를 나타낸다. 제20도와 같이 통상시는 FR로부터 FRS1에, FRS1로부터 FRS2로 1사이클피치로 연산결과가 시프트된다.
제21도는 명령 3과 명령 4의 사이에 인터럽트가 들어갔을 때의 동작을 나타낸 도면이다. 명령 4, 5, 6, 7은 무효화된다. 각 레지스터는 인터럽트 발생직후의 갱신을 중지하고, FR은 명령 3의 결과를, FRS1은 명령 2의 결과를, FRS2는 명령 1의 결과를 유지한다. 또, 프로그램 카운터에는 인터럽트 벡터가 세트된다. 인터럽트 벡터로부터 시작되는 인터럽트 처리 프로그램에서 FR, FRS1, FRS2의 값을 메모리상으로 퇴피한다.
제22도는 인터럽트 처리로부터의 복귀시의 동작을 설명하는 도면이다. 먼저, 인터럽트 처리 프로그램의 최후에 제22도에 나타낸 바와 같이, 명령 1의 결과를 FR에, 명령 2의 결과를 FRS2에, 명령 3의 결과를 FRS1에 복귀한다. 이와 같이 함으로써, 명령 4의 레지스터 독출 레지스터의 E스테이지에서, 명령 1의 결과를 볼 수가 있다. 명령 4의 E스테이지 종료후, FR의 값을 FRS1에, FRS1의 값을 FRS2에, FRS2의 값을 FR에 복사한다. 이 결과, 명령 5의 E스테이지에서는 명령 2의 결과를 볼 수가 있다. 명령 5의 레지스터 독출 스테이지의 E스테이지 종료후도, 같은 동작을 시킴으로써, 명령 6의 레지스터 독출 스테이지의 E스테이지에서, 명령 3의 결과를 볼 수가 있다. 이후의 처리는 통상과 같이 1명령 실행마다 FR의 값을 FRS1에, FRS1의 값을 FRS2에 복사하고, FRS2의 값은 버린다.
이상 설명한 바와 같이, 섀도우 레지스터를 설치함으로써, 지연기입명령 실행시에도 인터럽트를 받아들여 복귀할 수가 있다. 섀도우 레지스터가 없을 경우는, 제21도에서 명령 3의 결과밖에 퇴피할 수 없고, 제22도의 인터럽트 복귀시의 명령 4에서 명령 1의 결과를 볼 수가 없다. 이것은 명령 2, 3이 명령 1과 동일 레지스터에 값을 기입하는 경우가 있기 때문이다. 예를 들면, 제12도의 프로그램에서도 명령 1과 동일 레지스터에 명령 3으로 기입한다.
다음에 섀도우 레지스터 부가에 의한 하드웨어의 증가량에 관하여 설명한다. 레지스터의 크기는 포트수에 거의 비례한다. 제17도와 제19도를 비교하면 알 수 있는 바와 같이, 섀도우 레지스터의 포트수는 3으로, 레지스터의 포트수 13에 비하여 훨씬 작기 때문에, 섀도우 레지스터 부가에 의한 하드웨어의 증가량은 작다.
제41도는, 제13도의 명령제어유닛(1303)의 실시예이다. 150은 명령어길이 판정수단, 101은 제1 명령 레지스터, 102는 제2 명령 레지스터, 103은 제3 명령 레지스터, 104는 제4 명령 레지스터이다. 4100은 모드 레지스터이다. 100은 모드 제어회로, 105는 레지스터 독출제어회로, 106은 레지스터 기입제어회로, 107은 기능제어회로, 108은 파이프라인 제어회로, 109는 경합검출회로이다.
4워드길이명령은 반드시 4워드경계를 넘지 않도록 배치되어 있는 것으로 한다. 또, 1워드길이명령은 2워드경계에 둘러싸인 2워드가 동시에 실행되는 것으로 한다.
본 실시예에서는 명령워드길이판정은 제3도에서 설명한 바와 같이 오퍼코드 중의 가장 왼쪽비트, 즉 제41도의 신호 1310-1-1(C000)를 봄으로써 행하여진다.
모드제어회로(100)의 상세를 나타낸 것이 제27도이다. 2700은 제어회로, 2701은 N필드(1310-4-1)를 유지하는 레지스터, 2702는 디크리멘터, 2703은 컴파레이터이다. 컴파레이터의 출력신호 VALID(2704)는 제어회로(2700)에 송출된다. 레지스터(2701)에 세트된 N필드의 값은 디크리멘터(2702)에 의하여 1사이클마다 1감산되고, 00이 되었을 때에 신호 VALID(2704)가 어서트 된다. 신호 VALID는 네게이트시에 무효사이클의 삽입을 지시하고, 어서트시에 명령의 실행을 지시하는 신호이다.
제어회로(2700)는 경합검출회로출력(116)(BUB)과, 명령어드레스의 하위가 32비트째 1309-1(CA30)와 오퍼코드중의 4워드길이명령이 어떠한가를 나타낸 비트 1310-1(C000)와 신호(2704)(VALID)를 보아 5개의 모드중, 어느 것인지를 판정하고, 제23도에 나타낸 바와 같이 제1∼4 명령 레지스터에의 오퍼코드의 세트, 프로그램카운터의 인클리멘트를 신호(110)에 의하여 행한다.
또, 현사이클이 어느 모드인지를 나타내는 신호(110)는 모드 레지스터(4100)에 래치되고, 그 출력신호(130)는 레지스터 독출 제어회로(105), 레지스터 기입제어회로(106), 기능제어회로(107), 파이프라인제어회로(108), 경합검출회로(109)에 송출된다. 제23도에서, C0∼3은 4워드경계내에 있는 4워드로, 빠른른 어드레스로부터 C0, C1, C2, C3으로 명령이 정렬되어 있는 것으로 한다. C0의 가장 왼쪽비트(C000)에 의하여, 제3도에 나타낸 바와 같이 1워드길이명령인지 4워드길이명령인지를 판정할 수 있다. 1워드명령모드(1)는 4워드경계내의 왼쪽의 2개의 명령(C0,C1)을 실행하는 모드이고, 제1 명령 레지스터에 C0이, 제2 명령 레지스터에 C1이 세트되어 프로그램카운터(PC)는 +2가 된다. 또, 1워드명령모드(2)는 4워드길이경계내의 오른쪽 2개의 명령(C2,C3)을 실행하는 모드이고, 제1 명령 레지스터에 C2, 제2 명령 레지스터에 C3이 세트되고, 프로그램카운터(PC)는 +2가 된다. 즉, 1워드길이명령실행시에는, 제1 명령 레지스터와, 제2 명령 레지스터만 사용하고, 제3 명령 레지스터와 제4 명령 레지스터는 사용하지 않는다. 4워드길이명령모드는 4워드길이명령(C0,C1,C2,C3)을 실행하는 모드이고, 제1∼4 명령 레지스터에 C0∼C3이 세트되고, 프로그램 카운터(PC)는 +4가 된다. 경합모드란, 경합검출회로(109)가 경합을 검출한 경우이고, 제1∼4 명령 레지스터 및 모드 레지스터(4100)는 전사이클의 값을 유지한다. 또, 프로그램카운터(PC)의 갱신은 행하지 않는다. 무효명령모드는 현사이클이전에 실행한 4워드길이명령의 N필드이고, 현사이클에 하드웨어에서 무효명령(NOP)을 삽입할 것이 지시되어 있는 경우이고, 명령 레지스터에는 무효명령이 세트되고, 프로그램카운터(PC)는 갱신되지 않는다. 이에 의하여 무효사이클이 1사이클 삽입되게 된다.
1워드길이명령실행시에는 C0 또는 C2의 실행을 위하여 제1 ALU(1401) (제14도), 제1 승산기(1503)(제15도), 제1 가산기(1505)(제15도)를 사용한다. 한편, C1 또는 C3의 실행을 위하여 제2 ALU(1402)(제14도), 제2 승산기(1504), (제15도), 제2 가산기(1506)(제15도)를 사용한다. 또, 4워드길이명령실행 시에는 로드스토어 연산의 어드레스계산을 제1 ALU(1401)(제14도)에서, 정수연산을 제2 ALU(1402)(제14도)에서, 제1부동소수점연산을 제1 승산기(1503)(제15도)에서, 제2 부동소수점 연산을 제1 가산기(1505)(제15도)에서, 제3 부동소수점 연산을 제2 승산기(1504)(제15도)에서, 제4 부동소수점 연산을 제2 가산기(1506)(제15도)에서 행한다.
제41도의 레지스터 독출제어회로(105), 레지스터 기입회로(106), 기능제어회로(107)는 모드제어회로출력의 모드지정신호(110)와 제1∼4 명령 레지스터의 값에 의하여 상기한 연산기 할당 규칙에 따라 정수연산유닛(1304)(제13도)의 제어신호(1318)를 생성한다. 레지스터 독출제어회로에 대하여 더욱 상세히 설명한 것이 제24도이다. 6개의 연산기 각각 2개의 입력에 넣는 레지스터의 지정을, 오퍼코드의 어느 필드에서 행 할지를 나타내고 있다. 필드의 기호에 대해서는 제3도의 복합명령란에 나타낸다. 4워드길이명령의 J1과 A1은 1워드길이명령의 S2와, 4워드길이명령의 J2와 A2는 1워드길이명령의 S2와 동일 위치인 것을 이용하고, 제24도상의 필드지정에는 1워드길이명령시도, J1, J2, A1, A2를 사용하여 설명되고 있다. 이는 C0과 C1의 구별을 위해서이다.
다음에 제41도의 경합검출회로(109)에 관하여 설명한다. 제7도∼ 제9도를 이용하여 설명한 바와 같이, 본 실시예에서는 4워드길이명령간의 경합을 검출할 필요는 없다. 또, 본 실시예에서는 1워드길이명령실행용의 모든 연산기를 2중화하고 있기 때문에, 동시에 실행하는 2개의 1워드길이 명령간의 연산기에 의한 경합은 있을 수 없다. 간단히 하기 위하여 레지스터 경합도 없는 것으로 한다. 본 실시예를 레지스터 경합이 있는 경우로 확장하는 것은, 예를 들면 일본국 특원 소63-283673호와 같이 용이하다. 앞에서 설명한 바와 같이, 1워드길이명령과 다음의 유효한 4워드길이명령의 사이에, 반드시 무효인 4워드길이명령이 2개 들어가고, 마찬가지로 유효인 4워드길이명령과 다음의 1워드길이명령과의 사이에는 반드시 무효인 4워드길이명령이 2개 들어가 있기 때문에, 4워드길이명령과 1워드길이명령간의 경합도 있을 수 없다. 따라서, 경합검출회로(109)는 현사이클의 1워드길이명령과, 그것 이전에 실행된 1워드길이명령간의 경합만을 검출하면 된다. 모드제어회로(100)의 제어에 의하여, 1워드길이 명령은 제1 명령 레지스터(101)와 제2 명령 레지스터 (102)에만 세트되기 때문에, 경합 검출회로(109)는 제1 명령 레지스터(101)와 제2 명령 레지스터(102)만을 보면 되고, 제3 명령 레지스터(103), 제4 명령 레지스터(104)는 볼 필요 없다.
제25도는 경합검출회로(109)의 실시예의 블록도이다. 2501∼2504는 레지스터, 2505는 마스크회로, 2506∼2521은 컴파레이터이다. 제7도에 있어서, 명령(7,8)을 현명령으로 하고, 명령(3∼6)과의 경합검출을 생각한다. 명령(1,2)의 S스테이지 다음에 명령(7,8)의 E스테이지가 오기 때문에, 명령(1,2)와 명령(7,8)간의 경합은 없다. 제25도의 레지스터(2501)에는 명령(5)가 기입할 레지스터의 번호가, 레지스터(2503)에는 명령(6)이 기입하는 레지스터의 번호가, 레지스터(2502)에는 명령(3)이 기입하는 레지스터의 번호가, 레지스터(2504)에는 명령(4)가 기입하는 레지스터의 번호가 기억되어 있다. 상기 4개의 레지스터와, 명령(7) 및 명령(8)이 독출하는 4개의 레지스터의 번호를, 2506∼2521의 16개의 컴파레이터에서 비교하고, 결과를 마스크회로(2505)에 송출한다. 마스크회로(2505)는 모드제어회로(100)의 출력(130)이나 파이프라인 제어회로(108)의 출력(115)을 보아 컴파레이터의 히트신호가 유효인지의 여부를 판정하고, 유효하면 경합을 나타내는 신호(116)를 어서트한다. 즉, 컴파레이터의 출력이 레지스터의 일치를 나타내고 있어도 그 명령이 무효화되는 경우는 신호(116)를 취소한다. 이 마스크회로(2505)에 의하여 모드신호(130)가 4워드길이 모드인 것을 나타내고 있을 때에는 신호(116)를 취소한다.
다음에 파이프라인 제어회로(108)에 대하여 설명한다. 파이프라인 제어회로는 모드신호(130), 제13도의 정수 연산유닛(1304)으로부터의 플랙신호(1317), 제13도의 부동소수점 연산유닛(1307)으로부터의 플랙신호(1315), 제13도의 데이터 캐시컨트롤러와의 인터페이스(1316), 제13도의 명령캐시컨트롤러와의 인터페이스(1311)를 이용하여, 제13도의 분기유닛(1302) 제어신호(1312)를 송출하여 분기유닛을 제어한다. 즉, 유효한 분기명령이 왔을 때에는 분기를 행하고, 그것 이외의 것일 때에는 모드신호(110)를 사용하여, 제23도와 같이 분기유닛 내에 있는 프로그램 카운터를 제어한다. 또 파이프라인 제어회로(108)는 신호(115)를 레지스터 독출제어회로(105), 레지스터 기입제어회로(106), 기능 제어회로(107), 경합검출회로(109)에 송출하여, 파이프 라인의 상태를 제어하는, 즉, 명령 캐시 또는 데이터 캐시의 액세스시에 미스를 일으켰을 때에 제29도에 나타낸 바와 같이 파이프 라인을 로크한다.
다음에 상기 실시예의 제1의 변형예에 관하여 설명한다. 상기 실시예에 있어서, 4워드길이명령은 연산결과를 3개 뒤의 명령에 비로소 반영함으로써, 4워드길이명령간의 경합검출부가 불필요하게 되었다. 마찬가지의 효과를 달성하기 위하여, 4워드길이명령에서도 연산결과를 다음 명령에 반영하나, 4워드길이명령 간에서의 경합을 컴파일러에서 피하도록 할 수도 있다. 구체적으로는 어떤 4워드길이 명령이 기입하는 레지스터를 다음의 4워드길이 명령과, 다음 다음의 4워드길이 명령으로 읽지 않도록 하는 것이다. 이와 같이 함으로서, 제1 실시예의 레지스터수를 실질적으로 늘리는 효과는 상실되나, 제19도에서 나타낸 섀도우 레지스터는 불필요하게 된다.
또 상기 실시예의 제2 변형예에 대하여 설명한다.
제3도에 나타낸 실시예에서는 명령 중에 1워드길이명령인지 4워드길이 명령인지를 나타낸는 비트를 가지고 있었으나, 계산기 중에 1워드길이 명령인지 4워드초과 명령인지를 나타내는 플랙을 가지고, 이 플랙을 명령으로 제어하는 것도 가능하다. 이에 의하여, 플랙을 제어하는 명령이 필요하게 되나, 1번 플랙을 변환하면 매회 명령중에서 워드길이를 나타낼 필요가 없어진다고 하는 이점이 있다.
제30도∼제32도를 사용하여 상기 실시예의 제3의 변형예에 대하여 설명한다.
본 변형예에서는 제30도와 같이 부동소수점 레지스터를 32개로부터 128개로 확장하고 있다. 제31도에 명령 포맷, 제32도에 명령의 설명을 나타낸다. FR0∼31은 기본명령, 복합명령의 양자에서 사용 가능하나, FR32∼FR127은 복합명령에서만 사용 가능한 레지스터이다. 레지스터를 지정하는 I1, IT, M1, MT, A1, AT, N1, NT, B1, BT의 각 필드는 제31도에 나타낸 바와 같이, 각 7비트로 증가한다. 본 변형예에서는 소스 레지스터의 한쪽을 타겟 레지스터와 일치시킴으로써 전체를 4워드로 수납하고 있으나, 그렇게 하고 싶지 않으면, 전체의 워드길이를 더욱 길게하는 것도 가능하다. 본 변형예에서는 기본명령에 복합명령을 추가하고, 복합명령으로 기본명령이 사용할 수 있는 레지스터의 수보다도 많은 레지스터를 사용할 수 있게 함으로써 전체로서 사용가능한 레지스터수를 증가시킨다는 효과가 있다. 본 변형예에서는 FR0∼31이 기본명령과 복합명령의 양쪽에서 액세스 가능하나 대안으로서 기본명령용의 32개와, 복합명령용의 128개의 레지스터를 독립된 것으로 하는 것도 가능하다.
다시 본 변형예에서는 제32도에 나타낸 바와 같이, 메모리로부터 캐시에의 프리패치시에 프리패치하는 워드수를 JT 필드에서 지정할 수 있게 되어 있다. 이에 의하여 한 번에 복수의 블록전환을 행하게 하는 명령으로 지시할 수 있어 효율이 상승한다고 하는 이점이 있다.
제33도, 제34도를 사용하여 상기 실시예의 제4의 변형예에 대하여 설명한다. 본 변형예에서는 데이터의 프리패치를 J1, J2, JT라는 복수연산필드에서 행하지 않고, 1비트의 P필드에서 행하고 있는 점이 다르다. P>1인 때에는 로드스토어 연산에 사용된 어드레스를 포함하는 블록의 다음 블록이 프리패치된다. 이렇게 함으로써 프리패치에 요하는 필드를 절약할 수 있어, 로드스토어 연산, 정수 연산, 프리패치의 3동작이 병렬지정 가능하게 되는 이점이 생긴다.
제35도는 또 하나의 실시예에 대하여 설명하는 전체블록도이다. 3500은 프로그램 카운터, 3501은 명령을 격납하는 메모리 수단, 3502는 마스크 스위치 회로, 3503∼3506은 M개의 n바이트 길이의 명령 레지스터, 3507은 디코더, 3508, 3509는 L개(L≥1)의 연산 유닛, 150은 명령길이 판정수단, 109는 경합검출회로, 100은 모드 제어회로, 410은 모드 레지스터 이다. 프로그램 카운터(3500)는 명령 어드레스(3513)를 명령을 격납하는 메모리 수단(3501)에 송출한다. 3501중에는 n바이트길이의 명령과 n x M바이트길이(M>1)의 명령이 혼재하고 있고, 명령 레지스터(3513)에서 지시된 명령을 포함하는 복수의 명령을 마스크 스위치회로(3502)에 송출한다. 마스크 스위치회로(3502)는 n바이트 명령이면 M개의 명령 레지스터 중 N개(1≤N<M)의 명령 레지스터(3503∼3504)중 적어도 1개에 세트하고, n x M바이트 명령이면 명령 레지스터(3503∼3506)에 세트한다. 디코더(3507)는 명령 레지스터(3503∼3506)로부터의 명령(3519∼3522)을 디코드하고, L개의 연산유닛을 제어신호(3523,3524)를 사용하여 제어한다. 명령길이 판정수단(150)은 적어도 명령(3514)의 일부를 보아 명령길이를 나타낸 신호(3526)를 모드제어회로(100)에 송출한다. 경합검출회로(109)는 명령 레지스터(3503∼3504)를 보아, n바이트 명령간의 경합 유무를 알리는 신호를 모드 제어회로에 송출한다. 모드 제어회로는 명령길이, 경합의 유무, 프로그램으로부터의 값에 의하여 모드를 판정하고, 제어신호(110)에 의하여 프로그램 카운터, 마스크 스위치회로, 디코더를 제어한다.
본 실시예와 제1도∼제29도 및 제41도의 실시예와의 대응을 설명한다. 제1도∼제29도의 실시예는 n=4, M=4, N=2, L=2인 경우이다. 또 연산 유닛은 정수 연산유닛과 부동소수점 연산유닛이었다. 또, 제35도의 마스크 스위치회로는 제41도의 제1∼4 명령 레지스터(101∼104)에 세트하는 명령을 생성하고 있는 셀렉터 나 NOP에 있는 마스크등에 대응한다. 또 제35도의 경합 검출회로(109)는 제41도의 경합검출회로(109)에 대응한다. 제35도의 명령길이 판정수단(150)은 제41도의 명령길이 판정수단(150)에 대응한다.
제35도의 모드 제어회로(100)는 제41도의 모드 제어회로(100)에 대응한다.
제3도, 제5도, 제10도, 제11도, 제12도에서 나타낸 실시예에서는 제10도와 같이 메모리 상에서의 데이터 배치가 제약된다고 하는 결점이 있었다. 이것을 해결한 것이 제36도∼제40도에 나타낸 실시예이다. 본 실시예의 복합 명령에서는 제36도, 제37도에 나타낸 바와 같이, 1명령으로 로드·스토어 등의 메모리 연산을 2개 실행할 수 있다. 하드웨어로서는 캐시를 2포트화하거나 또는 1 머신사이클에 2번 액세스 가능한 구성으로 하면 좋다. 제39도, 제40도에 제11도, 제12도에 나타낸 것과 같은 문제를 해결하는 프로그램을 나타낸다.
이상에서 설명한 실시예에서는 명령길이가 짧은 명령과 긴 명령을 혼재한 계산기에 있어서 긴 명령의 연산결과를 이후의 임의의 명령으로부터 반영하는 또는 긴 명령은 다음 명령 이후에 계속하는 무효 명령의 수를 임의로 지정할 수 있는, 또는 긴 명령은 메모리 또는 캐시 메모리로부터 레지스터에 데이터를 전송하는 제1의 필드와, 메모리로부터 캐시 메모리에 데이터를 전송하는 제2의 필드를 설치한다고 하는 연구를 행하였는데, 이들 연구는 긴 명령만을 가지는 VLIW형 계산기에 대해서도 유효하다.
이상 설명한 바와 같이, 본 실시예에서는 4워드길이 명령을 이용하여, 4워드로 7개의 연산을 지정할 수 있으나 경합 검출은 4 X 4 = 16개의 컴파레이터로 행할 수가 있다. 4워드길이 명령간의 경합 검출을 하드웨어에서 행하고자 하면 전 사이클의 분기 연산을 제외하고, 6개의 연산의 기입 레지스터와 전전 사이클과 마찬가지로 6개의 기입 레지스터와, 현 사이클의 12개의 독출 레지스터와의 사이의 경합 검출이 필요하여 (6+6) x 12 = 144 개의 컴파레이터가 필요하게 된다. 본 실시예에서는, 이것에 비하여 16/144의 하드웨어이면 된다고 하는 이점이 있다.
본 실시예에서는 4워드길이 명령으로 지시되는 연산수 7에 대하여 1 머신 사이클로 처리되는 명령길이가 짧은 명령이 2 이다. 이에 의하여 2 연산분의 경합 검출회로로 최대 7연산의 병렬 처리를 얻을 수 있다고 하는 효과가 있다.
본 발명에 의하면 병렬로 실행하는 연산의 수를 늘려 성능을 높일 수 있다.
또한 본 발명에 의하면 코드 사이즈를 작게할 수 있다. 이에 의하여 코드 캐시의 히트율이 높아져 성능을 높힐 수 있다.
본 발명에 의하면 병렬로 실행하는 연산 내의 하드웨어에 의한 경합 검출을 용이하게 할 수가 있다. 이에 의하여 머신 사이클을 높이고, 하드 물량을 줄여, 코스트를 낮출 수 있다. 특히 긴 명령중에서 지정하는 연산수가 클 때, 이 효과는 현저하다.
본 발명에 의하면 현사이클 이전에 실행한 명령과, 현 사이클에서 실행하는 명령과의 사이의 하드웨어에 의한 경합 검출, 대기를 용이하게 할 수 있다. 이에 의하여 머신 사이클을 높이고 하드 물량을 줄여 코스트를 낮출 수 있다.
본 발명에 의하면 소프트웨어가 이용되는 레지스터의 수를 실질적으로 많게 하고, 소프트웨상의 최적화에 의하여 연산의 병렬도를 올려, 성능을 높일 수 있다.
또한 본 발명에 의하면 종래 아키텍처와의 상위 호환성을 유지할 수 있다.

Claims (6)

  1. 레지스터;
    메모리;
    캐쉬 메모리;
    프로그램 카운터;
    상기 프로그램 카운터에 의해 지시되는 상기 메모리로부터의 하나 이상의 인스트럭션을 해독하고, 상기 레지스터, 상기 메모리 및 상기 프로그램 카운터에 관한 상기 인스트럭션에 의해 지시되는 작업을 실행하는 병렬 작업 함수를 가지며,
    상기 인스트럭션은 상기 메모리 또는 상기 캐쉬 메모리로부터의 상기 레지스터로의 데이터이동을 표시하기 위한 제 1 필드; 및 상기 메모리로부터의 상기 캐쉬 메모리로의 테이터 이동을 표시하기 위한 제 2 필드를 포함하여 구성되는 것을 특징으로 하는 컴퓨터.
  2. 메모리;
    캐쉬 메모리;
    병렬인 다수의 인스트럭션에 기초한 프로세싱을 위한 다수의 계산 유닛; 및
    상기 메모리 또는 상기 캐쉬 메모리로부터의 상기 계산 유닛으로의 데이터 이동 및 상기 메모리로부터의 상기 캐쉬 메모리로의 데이터 이동을 제어하기 위한 데이터 캐쉬 컨트롤러를 가지는 컴퓨터.
  3. 메모리;
    캐쉬 메모리;
    병렬인 다수의 인스트럭션에 기초한 프로세싱을 위한 다수의 계산 유닛; 및
    상기 계산 유닛에 의한 프로세스 및 상기 메모리로부터의 상기 캐쉬 메모리로의 병렬 데이터 이동을 실행하기 위한 데이터 캐쉬 컨트롤러를 가지는 컴퓨터.
  4. 인스트럭션 캐쉬 메모리;
    병렬인 다수의 인스트럭션에 기초한 프로세싱을 위한 오퍼레이팅 유닛을 가지며;
    상기 오퍼레이팅 유닛이
    레지스터;
    상기 인스트럭션 캐쉬 메모리에 저장된 인스트럭션에 기초하여 상기 레지스터에 저장된 데이터를 프로세싱하기 위한 하나 이상의 계산 유닛;
    데이터를 저장하기 위한 캐쉬 메모리;
    외부 메모리 또는 상기 캐쉬 메모리로부터의 상기 레지스터로의 데이터 이동 및 상기 메모리로부터의 상기 캐쉬 메모리로의 데이터 이동을 제어하기 위한 캐쉬 메모리 컨트롤러를 가지는 데이터 프로세서.
  5. 제 4 항에 있어서,
    상기 오퍼레이팅 유닛이 상기 외부 메모리로부터의 상기 인스트럭션 캐쉬 메모리로의 인스트럭션 이동을 제어하기 위한 인스트럭션 캐쉬 메모리 컨트롤러를 더욱 포함하여 구성되는 것을 특징으로 하는 데이터 프로세서.
  6. 제 4 항에 있어서,
    상기 계산 유닛이 정수 오퍼레이팅 유닛 및/또는 플로팅 포인트 오퍼레이팅 유닛임을 특징으로 하는 데이터 프로세서.
KR1019970078359A 1992-01-06 1997-12-30 병렬 연산기능을 가지는 계산기 및 데이터 프로세서 KR100277386B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2992 1992-01-06
JP92-000029 1992-01-06

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1019930000074A Division KR100259738B1 (ko) 1992-01-06 1993-01-06 병렬 연산 기능을 가지는 데이터 처리 장치

Publications (1)

Publication Number Publication Date
KR100277386B1 true KR100277386B1 (ko) 2001-01-15

Family

ID=11462943

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1019930000074A KR100259738B1 (ko) 1992-01-06 1993-01-06 병렬 연산 기능을 가지는 데이터 처리 장치
KR1019970078359A KR100277386B1 (ko) 1992-01-06 1997-12-30 병렬 연산기능을 가지는 계산기 및 데이터 프로세서

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1019930000074A KR100259738B1 (ko) 1992-01-06 1993-01-06 병렬 연산 기능을 가지는 데이터 처리 장치

Country Status (4)

Country Link
US (1) US5680637A (ko)
EP (2) EP0551090B1 (ko)
KR (2) KR100259738B1 (ko)
DE (1) DE69325826T2 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0741356A1 (en) * 1995-05-05 1996-11-06 Rockwell International Corporation Cache architecture and method of operation
US5966514A (en) * 1995-05-31 1999-10-12 Matsushita Electric Industrial Co., Ltd. Microprocessor for supporting reduction of program codes in size
US5774737A (en) * 1995-10-13 1998-06-30 Matsushita Electric Industrial Co., Ltd. Variable word length very long instruction word instruction processor with word length register or instruction number register
JP3717212B2 (ja) 1995-10-27 2005-11-16 株式会社日立製作所 情報処理装置及び情報処理ユニット
JP3623840B2 (ja) * 1996-01-31 2005-02-23 株式会社ルネサステクノロジ データ処理装置及びマイクロプロセッサ
JP2806359B2 (ja) * 1996-04-30 1998-09-30 日本電気株式会社 命令処理方法及び命令処理装置
WO1998006042A1 (en) * 1996-08-07 1998-02-12 Sun Microsystems, Inc. Wide instruction unpack method and apparatus
JP3790607B2 (ja) 1997-06-16 2006-06-28 松下電器産業株式会社 Vliwプロセッサ
US6076154A (en) * 1998-01-16 2000-06-13 U.S. Philips Corporation VLIW processor has different functional units operating on commands of different widths
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
JP2000207223A (ja) * 1999-01-12 2000-07-28 Matsushita Electric Ind Co Ltd 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
EP1050808B1 (en) * 1999-05-03 2008-04-30 STMicroelectronics S.A. Computer instruction scheduling
EP1050798A1 (en) * 1999-05-03 2000-11-08 STMicroelectronics SA Decoding instructions
EP1050809A1 (en) 1999-05-03 2000-11-08 STMicroelectronics SA Computer instruction dependency
US7263567B1 (en) * 2000-09-25 2007-08-28 Intel Corporation Method and apparatus for lowering the die temperature of a microprocessor and maintaining the temperature below the die burn out
JP4542722B2 (ja) * 2001-04-25 2010-09-15 富士通株式会社 命令処理方法
US7076636B1 (en) * 2001-10-05 2006-07-11 Emc Corporation Data storage system having an improved memory circuit board configured to run scripts
CN112244015B (zh) 2012-02-29 2022-05-17 株式会社Mmag 包括新型亚氨基吡啶衍生物的有害物防治组合物
US10157164B2 (en) * 2016-09-20 2018-12-18 Qualcomm Incorporated Hierarchical synthesis of computer machine instructions

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization
US5136691A (en) * 1988-01-20 1992-08-04 Advanced Micro Devices, Inc. Methods and apparatus for caching interlock variables in an integrated cache memory
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
JP2835103B2 (ja) * 1989-11-01 1998-12-14 富士通株式会社 命令指定方法及び命令実行方式
JPH0452741A (ja) * 1990-06-14 1992-02-20 Toshiba Corp キャッシュメモリ装置
US5163139A (en) * 1990-08-29 1992-11-10 Hitachi America, Ltd. Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions

Also Published As

Publication number Publication date
KR100259738B1 (ko) 2000-07-01
KR930016896A (ko) 1993-08-30
EP0551090A3 (en) 1994-09-07
EP0551090A2 (en) 1993-07-14
US5680637A (en) 1997-10-21
EP0855647A1 (en) 1998-07-29
DE69325826D1 (de) 1999-09-09
EP0551090B1 (en) 1999-08-04
DE69325826T2 (de) 2000-02-24

Similar Documents

Publication Publication Date Title
KR100277386B1 (ko) 병렬 연산기능을 가지는 계산기 및 데이터 프로세서
US5233694A (en) Pipelined data processor capable of performing instruction fetch stages of a plurality of instructions simultaneously
EP0454985B1 (en) Scalable compound instruction set machine architecture
US5958048A (en) Architectural support for software pipelining of nested loops
JP2550213B2 (ja) 並列処理装置および並列処理方法
US5050068A (en) Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams
JP2834837B2 (ja) プログラマブルコントローラ
US5717946A (en) Data processor
US9329866B2 (en) Methods and apparatus for adapting pipeline stage latency based on instruction type
EP0427245B1 (en) Data processor capable of simultaneously executing two instructions
KR100254007B1 (ko) 2개의 명령을 동시에 실행할 수 있는 데이타프로세서
JP3146707B2 (ja) 並列演算機能を有する計算機
JPH0926878A (ja) データ処理装置
KR19990062575A (ko) N-지로 분기를 갖는 슈퍼스칼라 또는 초장 명령어 워드컴퓨터에서 다음 명령어를 선택하는 방법 및 장치
EP0742517B1 (en) A program translating apparatus and a processor which achieve high-speed execution of subroutine branch instructions
JP5326314B2 (ja) プロセサおよび情報処理装置
US5890009A (en) VLIW architecture and method for expanding a parcel
JP2927281B2 (ja) 並列処理装置
WO1998006040A1 (en) Architectural support for software pipelining of nested loops

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee