KR100618247B1 - 코드크기의축소화를지원하는정수복원형프로세서 - Google Patents

코드크기의축소화를지원하는정수복원형프로세서 Download PDF

Info

Publication number
KR100618247B1
KR100618247B1 KR1019980022513A KR19980022513A KR100618247B1 KR 100618247 B1 KR100618247 B1 KR 100618247B1 KR 1019980022513 A KR1019980022513 A KR 1019980022513A KR 19980022513 A KR19980022513 A KR 19980022513A KR 100618247 B1 KR100618247 B1 KR 100618247B1
Authority
KR
South Korea
Prior art keywords
integer
register
instruction
constant
field
Prior art date
Application number
KR1019980022513A
Other languages
English (en)
Other versions
KR19990007024A (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
Priority claimed from JP15904997A external-priority patent/JP3670801B2/ja
Priority claimed from JP23435697A external-priority patent/JPH1173331A/ja
Application filed by 마츠시타 덴끼 산교 가부시키가이샤 filed Critical 마츠시타 덴끼 산교 가부시키가이샤
Publication of KR19990007024A publication Critical patent/KR19990007024A/ko
Application granted granted Critical
Publication of KR100618247B1 publication Critical patent/KR100618247B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context

Abstract

정수를 저장하기 위한 정수 레지스터(36)와, 명령 레지스터(10)에 보유된 명령의 P0.0필드에 위치한 포맷 코드를 해독하는 포맷 디코더(21)와, 포맷 디코더(21)에 의해 그 명령에 정수 레지스터(36)에 저장해야 할 정수가 위치되어 있다고 해독되면 정수 레지스터에 이미 저장되어 있는 정수를 시프트시키면서 상기 새로운 정수를 정수 레지스터에 저장하는 정수 레지스터 제어부(32)를 구비한다.

Description

코드 크기의 축소화를 지원하는 정수복원형 프로세서{CONSTANT RECONSTRUCTING PROCESSOR WHICH SUPPORTS REDUCTIONS IN CODE SIZE}
본 발명은 마이크로 프로세서에 관한 것으로, 특히 명령 중에 생기는 불필요한 영역이나 미사용 영역을 유효화시키는 기술에 관한 것이다.
최근 마이크로 프로세서 응용제품의 고기능화 및 고속화에 따라 코드효율이 높은 프로그램을 실행할 수 있는 마이크로 프로세서(이하 단순히 「프로세서」라 함)가 요구되고 있다. 즉 프로그램을 구성하는 각 명령 중에는 쓸데없는 코드나 미사용 영역이 포함되지 않은 것이 바람직하다.
그러나 특히, VLIW(Very Long Instruction Word)와 같이 고정길이 명령의 경우에는 명령 중에 무연산 코드(nop 코드) 등의 불필요한 코드를 둘 필요가 생긴다. VLIW는 복수의 연산필드로 이루어지고, 각 연산필드에서 프로세서가 구비하는 복수의 연산 유니트에 대응한 연산이 지정되지만, 연산의 의존관계 등에 의해 항상 병렬실행 가능한 복수의 연산이 존재한다고는 한정되지 않기 때문이다.
이러한 nop 코드의 삽입에 따르는 코드 효율의 저하를 회피하는 종래의 기술로서, 예를 들면 일본국 특개평 8-161169호에 개시된 VLIW 방식의 계산기 시스템이 있다.
도 1은 상기 종래 기술에서의 명령 포맷을 도시한 도면이다.
이 종래 기술에서는, 예를 들면 연산필드(#2)에 nop 코드를 배치해야 하는 경우에 그 연산필드(#2)에는 nop 코드 대신 다른 명령으로 이용되는 정수(定數)를 배치해두고 연산필드(#1)의 일부 개소에 그 취지를 나타내는 명령유효화 정보를 배치한다. 그리고 프로세서는 그 명령 실행시에 명령유효화 정보를 참조함으로써 연산필드(#2)에는 정수만이 배치되어 있다고 해독하여 그것을 오퍼랜드로서 연산에 이용한다. 이와 같이 하여 명령 중에 nop 코드를 삽입함에 따르는 불필요 영역의 발생을 피하고 있다.
그러나 상기 종래 기술에서는 불필요 영역을 매립할 수 있는 정수의 크기가 제한된다는 문제가 있다.
예를 들면 32비트길이의 1개의 연산필드에만 nop 코드를 둘 필요가 있는 경우에 64비트로 이루어지는 수치정수를 둘 수는 없다. 또한 예를 들면 32비트의 고정길이 명령 중 8비트만이 미사용 영역인 경우에는 그 8비트를 채울 수 있는 정수는 8비트 이하로 표현되는 정수에 한정되어, 예를 들면 32비트로 표현되는 절대 어드레스로 채울 수는 없다.
즉 상기 종래 기술은 비교적 큰 자리수의 불필요 영역이 생기는 경우에는 효과를 나타내지만, 명령의 자리수가 예를 들면 32비트와 같이 작은 경우에는 거기에 생기는 불필요 영역도 작기 때문에 많은 불필요 영역이 정수로 채워지지 않고 그대로 남는다는 문제점이 있다.
이러한 문제점을 피하기 위해 프로세서에 정수를 저장하기 위한 전용 레지스터(정수 레지스터)를 설치하는 것이 고려된다. 그런데 그와 같은 정수 레지스터를 갖는 프로세서에서는 멀티태스크에서의 콘텍스트 스위칭을 위한 처리시간이 증대한다는 문제점이 생긴다. 즉 복수의 태스크를 시분할 다중으로 바꾸면서 실행하기 위해서는 어떤 태스크의 실행 중에 오퍼레이팅 시스템으로 제어를 옮기고, 그 태스크의 재실행에 필요한 정보(콘텍스트)를 메모리 등의 세이브영역에 세이브하고, 다음에 실행해야 할 태스크의 콘텍스트를 복귀시키는 콘텍스트 스위칭을 빈번히 실행해야 하지만, 콘텍스트에는 정수 레지스터의 값도 포함되기 때문에 그 만큼 콘텍스트 스위칭의 처리시간이 증대한다.
본 발명은 이러한 문제점을 감안하여 이루어진 것으로, 명령중의 불필요 영역을 채우기 위한 정수의 크기가 그 명령의 자리수에 의해 제한되지 않는 프로세서를 제공하는 것을 제 1의 목적으로 한다. 이에 따라 가령 명령중의 작은 자리수의 영역에서도 불필요 영역으로서 남는 것이 해결되어 코드효율이 높은 프로그램 작성이 지원되는 것을 목표로 한다.
또 본 발명의 제 2의 목적은 상기 제 1의 목적을 달성하는 바와 같은 프로세서로서 콘텍스트 스위칭에 요하는 처리시간을 단축한 프로세서를 제공하기 위한 것이다.
상기 제 1의 목적을 달성하기 위한 본 발명은 명령을 해독하여 실행하는 프로세서로서 상기 명령을 보유하는 명령 레지스터와, 보유된 명령을 해독하는 해독수단과, 정수를 보유하기 위한 기억 영역을 갖는 정수 레지스터와, 상기 명령 중에 상기 정수 레지스터에 저장해야 할 정수가 배치되어 있다고 상기 해독수단에 의해 해독된 경우에는, 상기 정수 레지스터에 정수가 저장되어 있지 않을 때에는 상기 명령 중에 배치된 정수를 상기 정수 레지스터에 저장하고, 상기 정수 레지스터에 다른 정수가 이미 저장되어 있을 때에는 그 정수를 남긴 채로 상기 명령 중에 배치된 정수를 상기 정수 레지스터에 저장하는 정수 저장수단과, 상기 명령이 상기 정수 레지스터를 이용하는 연산명령이라고 상기 해독수단에 의해 해독된 경우에는 상기 정수 레지스터에 저장되어 있는 모든 정수를 판독하여 상기 연산을 실행하는 실행수단을 구비한다.
이에 따라 복수의 명령에 걸쳐 분할 배치되어 있던 정수의 조각(piece)이 정수 레지스터에 저장되어 축적되고, 원래 1개의 정수로 복원된다. 따라서 명령 중에 작은 자리수의 불필요 영역이 생기는 경우라도 그 불필요 영역을 자리수가 큰 정수의 일부로 채워두는 것이 가능해져 코드효율이 높은 프로그램 작성이 지원된다.
여기에서 상기 정수 저장수단은 상기 정수 레지스터에 이미 저장되어 있는 정수를 시프트시키면서 상기 새로운 정수를 저장할 수도 있다.
이에 따라 정수 레지스터의 같은 위치에 정수를 저장하는 것만으로 정수가 축적되기 때문에 다음에 저장해야 할 정수 레지스터의 위치를 관리할 필요가 없어진다.
또 상기 정수 저장수단은 상기 정수 레지스터의 하위자리수로부터 상위자리수를 향하여 차례로 정수를 축적하여 저장할 수도 있다.
이에 따라 정수 레지스터는 하위자리수로부터 채워져가기 때문에 유효자리수가 가변길이의 정수를 정수 레지스터에 세트하는 데 적합한 프로세서가 실현된다.
또한 상기 프로세서는 또한 상기 정수에 대하여 제로(zero)확장 및 부호확장의 적어도 어느 하나의 확장처리를 행하는 확장수단을 구비할 수도 있다.
이에 따라 정수 레지스터에 저장된 정수가 오퍼랜드로서 이용되는 경우에는 그 오퍼랜드는 제로확장 또는 부호확장이 실시된 적절한 정수로 되어있는 것이 보증된다.
또한 상기 확장수단은 상기 정수 레지스터에 저장되기 전의 정수에 대하여 상기 확장처리를 행할 수도 있다.
이에 따라 정수 레지스터에 저장되어 있는 정수는 항상 확장처리가 행해진 적절한 정수인 것이 보증되며, 정수 레지스터로부터 정수를 판독한 후에 확장처리를 할 필요가 없어지기 때문에 정수 레지스터에 저장된 정수를 이용한 연산에 요구되는 시간이 단축된다.
또한 상기 확장수단은 상기 정수 레지스터로부터 판독된 정수에 대하여 상기 확장처리를 행할 수도 있다.
이에 따라 정수를 정수 레지스터에 저장할 때의 확장처리가 불필요해지기 때문에 정수 레지스터에의 저장에 드는 시간이 단축된다.
또 상기 정수 저장수단은 상기 정수 레지스터의 상위자리수로부터 하위자리수를 향하여 차례로 정수를 축적하여 저장할 수도 있다.
이에 따라 정수 레지스터는 상위자리수로부터 채워져가므로 하위의 자리수 모두를 제로로 하는 정수를 정수 레지스터에 세트하는 데 적합한 프로세서가 실현된다.
또 상기 정수 저장수단은 상기 정수 레지스터에 이미 저장되어 있는 정수를 이동시키지 않고 그 정수에 인접하는 위치에 상기 새로운 정수를 저장할 수도 있다.
이에 따라 일단 정수 레지스터에 저장된 정수는 그 자리수 위치가 변동되는 일이 없기 때문에 1개의 정수를 복수 명령의 불필요 영역에 분할하여 배치하기 위한 컴파일러에서의 스케쥴링이 용이하게 된다.
또 상기 정수 저장수단은 상기 실행수단에 의해 상기 정수 레지스터에 저장된 정수가 판독된 직후에 상기 정수 레지스터에 제로를 저장할 수도 있다.
이에 따라 정수를 정수 레지스터에 저장하는 것만으로 정수 레지스터에 저장되어있는 정수는 항상 제로확장된 적절한 정수인 것이 보증되어 정수 레지스터의 저장값을 사용할 때마다 정수 레지스터를 클리어해두기 위한 독립된 소거명령은 불필요하게 된다.
또 상기 실행수단은 상기 명령에 따라 분기연산을 실행하는 분기실행부를 갖고, 상기 정수 저장수단은 상기 분기실행부에 의해 분기연산이 실행된 경우에 상기정수 레지스터에 제로를 저장할 수도 있다.
이에 따라 분기연산의 실행에 따라 정수 레지스터의 저장값은 클리어되기 때문에 정수 레지스터에 불필요한 저장값이 남겨지는 것에 의한 불량을 피할 수 있다.
또 상기 프로세서는 프로세서의 내부 상태를 기억시키기 위한 외부 메모리에 접속하여 이용되고, 상기 명령이 상기 정수 레지스터의 내용을 상기 외부 메모리에 세이브시키는 세이브 명령이라고 상기 해독수단에 의해 해독된 경우에는 그 세이브를 실행하는 세이브수단과, 상기 정수 레지스터에 정수가 저장되어 있지 않을 때에는 상기 세이브수단에 의한 상기 내용의 세이브를 금지하는 세이브 금지수단을 구비할 수도 있다.
이에 따라 정수 레지스터가 비어있거나 무효인 정수가 저장되어 있는 경우 의 불필요한 세이브를 피할 수 있으므로 멀티태스크의 실행에 따르는 콘텍스트 스위칭의 처리속도가 향상된다.
또 상기 명령이 상기 외부 메모리의 내용을 상기 정수 레지스터에 복귀시키는 복귀명령이라고 상기 해독수단에 의해 해독된 경우에는 그 복귀를 실행하는 복귀수단과, 상기 복귀명령이 상기 세이브 금지수단에 의해 금지된 세이브에 대응하는 복귀를 지시하고 있을 때에는 상기 복귀수단에 의한 상기 내용의 복귀를 금지하는 복귀 금지수단을 구비할 수도 있다.
이에 따라 원래 세이브되지 않은 정수에 대한 외부 메모리로부터 정수 레지스터로의 복귀를 피할 수 있으므로 멀티태스크의 실행에 따르는 콘텍스트 스위칭의 처리속도가 향상된다.
또 상기 정수 레지스터에 정수가 저장되어 있는지의 여부를 나타내는 유효정보를 기억하는 유효정보 기억수단을 구비하고, 상기 세이브수단은 상기 유효정보 기억수단에 기억된 유효정보를 상기 외부 메모리에 세이브시키는 유효정보 세이브부를 갖고, 상기 세이브 금지수단은 상기 유효정보를 참조함으로써 상기 정수 레지스터에 정수가 저장되어 있지 않다고 판단했을 때 상기 내용의 세이브를 금지하고, 상기 복귀수단은 상기 외부 메모리에 기억된 유효정보를 상기 유효정보 기억수단에 복귀시키는 유효정보 복귀부를 갖고, 상기 복귀 금지수단은 상기 외부 메모리에 세이브된 유효정보를 참조함으로써 상기 복귀명령이 상기 세이브 금지수단에 의해 금지된 세이브에 대응하는 복귀를 지시하고 있다고 판단했을 때 상기 내용의 복귀를 금지할 수도 있다.
이에 따라 프로세서는 유효정보를 참조하는 것만으로 상기 불필요한 세이브나 복귀를 피할 수 있기 때문에 실현을 위한 회로가 간단하게 된다.
또 상기 유효정보 세이브부는 상기 명령 레지스터에 보유된 명령이 상기 세이브명령이라고 상기 해독수단에 의해 해독된 경우에 상기 유효정보를 상기 외부 메모리에 세이브시키고, 상기 유효정보 복귀부는 상기 명령 레지스터에 보유된 명령이 상기 복귀명령이라고 상기 해독수단에 의해 해독된 경우에 상기 외부 메모리에 기억된 유효정보를 상기 유효정보 기억수단에 복귀시킬 수도 있다.
이에 따라 단 하나의 명령만으로 정수 레지스터의 내용과 유효정보를 조로 하여 세이브하거나 복귀할 수 있으므로 콘텍스트 스위칭을 위한 프로그램 크기는 축소화된다.
또한 상기 유효정보는 상기 정수 레지스터에 저장되어 있는 정수의 유효자리수를 나타내며, 상기 세이브 금지수단은 상기 유효정보가 제로를 나타내는 경우에 상기 세이브를 금지하고, 상기 복귀 금지수단은 상기 유효정보가 제로를 나타내는 경우에 상기 복귀를 금지해도 된다.
이에 따라 유효정보는 정수 레지스터의 내용의 유효성과 함께 정수의 유효자리수를 나타내므로 정수의 세이브 및 복귀의 실행제어 뿐아니라 정수를 이용한 연산처리에서의 자리수 제어를 위해서도 이 유효정보를 활용할 수 있다.
또 병렬 실행하는 복수의 연산으로 이루어지는 명령을 실행하는 VLIW 프로세서에 있어서, 병렬 실행할 수 있는 연산이 없는 경우, 연산 대신에 후속 명령으로 사용하는 정수가 배치된 명령을 실행할 수도 있다.
이에 따라 단일연산을 지정하는 명령 중에 생기는 불필요 영역뿐만 아니라, 1개의 명령 중에 2개 이상의 연산을 지정할 수 있는 VLIW 중에 생기는 불필요 영역에 대해서도 정수를 채워두는 것이 가능해진다.
또 병렬 실행하는 복수의 연산으로 이루어지는 명령을 실행하는 VLIW 프로세서에 있어서, 병렬 실행할 수 있는 연산이 없는 경우, 연산 대신에 정수가 배치된 명령 중 상기 정수 이외의 연산을 병렬 실행하는 것과 함께 상기 정수는 차례로 저장해두고 후속의 명령으로 사용할 수도 있다.
이에 따라 VLIW의 일부 연산에만 정수가 배치되어 있는 경우이어도 그 정수의 저장과 그 밖의 연산은 병렬로 실행된다. 그리고 그 정수는 축적되어 저장되고, 후속 명령으로 이용되기 때문에 자리수가 큰 정수이어도 그것을 분할하여 복수의 명령으로 채울 수 있다.
또 명령의 포맷을 지정하는 포맷 코드가 놓여진 포맷 필드와 병렬 실행시키는 연산을 지정하는 복수의 연산필드를 포함하는 명령을 해독하여 실행하는 VLIW 프로세서로서, 정수를 저장하기 위한 정수 레지스터와, 상기 포맷 코드를 참조함으로써 적어도 1개의 상기 연산필드에 정수가 배치된 것을 해독하는 해독수단과, 상기 해독수단에 의해 상기 정수가 배치되어 있다고 해독된 경우에는, 상기 정수 레지스터에 정수가 저장되어 있지 않다고 판단하면 상기 정수를 소정위치에 저장되고, 상기 정수 레지스터에 정수가 이미 저장되어 있다고 판단하면 상기 정수 레지스터에 이미 저장되어 있는 정수를 남긴 채로 새로운 정수를 상기 정수 레지스터에 저장하는 정수 저장수단과, 상기 정수 레지스터에 저장되어 있는 모든 정수를 판독하고, 그 정수를 오퍼랜드로 하는 연산을 실행하는 실행수단을 구비할 수도 있다.
이에 따라 프로세서로 실행시키는 VLIW 열을 생성할 때에 자리수가 큰 정수를 복수의 VLIW에 걸쳐 분할배치해 두는 것이 가능해진다. 그리고 정수가 배치된 명령중의 위치(연산 필드)는 포맷 코드에 의해서 명시적으로 지정되지만, 정수의 저장장소(정수 레지스터)나 저장위치(정수 레지스터상의 자리수위치)는 암묵적으로 지정된 것이기 때문에 명령 중에 배치된 정수를 정수 레지스터의 특정위치에 저장하기 위한 명시적인 연산코드는 불필요하게 된다.
이상과 같이 본 발명에 의해 컴파일러 등으로 기계어 명령열을 생성할 때 그들 명령열중에 작은 불필요 영역을 설치할 필요가 생긴 경우에도 후속 명령으로 사용되는 정수를 미리 분할하여 채워둔다는 최적화 스케쥴링이 가능해지기 때문에 프로그램의 코드 크기는 축소화되고, 특히 내장 용도의 프로세서로서 실용적 가치는 크다.
상술한 목적 및 기타의 목적과 본 발명의 특징 및 이점은 첨부 도면과 관련한 다음의 상세한 설명을 통해 보다 분명해 질 것이다.
이하 본 발명에 관한 프로세서의 실시예에 대하여 도면을 이용하여 상세히 설명하기로 한다. 또 본 명세서에서「명령」이란 본 프로세서가 동시 병렬로 해독하여 실행하는 코드 전체를 의미하며, 「연산」이란 본 프로세서가 병렬로 실행할 수 있는 수치연산, 논리연산, 전송, 분기 등의 처리단위 또는 그 처리단위를 지정하기 위한 코드를 의미한다.
( 제 1 실시예 )
제 1 실시예에 관한 프로세서는 상기 제 1의 목적을 달성하는 프로세서이고, 복수의 명령에 걸쳐 분할 배치되어 있던 정수의 조각 각각을 전용의 레지스터에 축적하면서 저장함으로써 원래의 1개의 정수로 복원하는 기능을 갖는 것을 특징으로 한다.
(명령 포맷)
우선 본 프로세서가 해독 실행하는 명령의 구조에 대하여 설명하기로 한다.
본 프로세서는 VLIW 아키텍처를 채용하는 프로세서(이하 「VLIW 프로세서」라 함)이고 32비트 고정길이의 명령을 해독 실행한다.
도 2의 (a)는 본 프로세서가 실행하는 명령(50)의 필드구성을 도시한 도면이다. 도 2의 (b)∼도 2의 (d)는 16종류의 명령 포맷을 도시한 도면이고, 그 중 도 2의 (b)는 3연산, 도 2의 (c)는 2연산, 도 2의 (d)는 1연산을 동시에 지정할 수 있는 명령 포맷이다.
이 명령(50)은 32비트 고정길이이고, 4비트씩으로 구분된 8개의 필드(상위로부터 P0.0 필드(51), P1.0 필드(52),···, P3.2 필드(58))로 이루어진다. 또 P2. 0필드(53)∼P2.2 필드(55)의 그룹을 정리하여 제 1 연산필드(59)라 하고, P3.0 필드(56)∼P3.2 필드(58)의 그룹을 정리하여 제 2 연산필드(60)라 한다.
도 2의 (b) ∼ 도 2의 (d)에 있어서, "const"는 정수이고, 이것이 이용되는 연산의 종류에 따라서는 즉치(卽値), 절대 어드레스, 변위(displacement) 등의 수치정수나 문자정수를 의미한다. "op"는 연산의 종류를 지정하는 연산코드를 의미하고,"Rs"는 소스 오퍼랜드(source operand)로 되는 레지스터를 의미하고, "Rd"는 데스티네이션 오퍼랜드(destination operand)로 되는 레지스터를 의미하며, "cc"는 본 프로세서가 구비하는 전용의 32비트 레지스터(도 4에 도시된 정수 레지스터(36))의 저장값을 분기장소의 절대 어드레스 또는 상대 어드레스(변위)로 하는 분기연산을 지정하는 연산코드를 의미한다.
또 이들 코드의 직후에 첨부된 수치는 제 1 연산필드(59) 및 제 2 연산필드(60) 중 어느 연산을 위해 이용되는 것인지를 나타낸다. 예를 들면 포맷 코드가 "6"인 명령 포맷의 경우라면 P1.0 필드(52)에 배치된 4비트의 정수"const1"과 P2.1 필드(54)에 배치된 4비트의 정수"const1"은 결합되어 8비트의 정수로서 제 1 연산필드(59)의 연산코드"op1"에 대응하는 소스 오퍼랜드가 되는 것을 의미한다.
또 수치를 수반하지 않는 정수"const"는 본 프로세서가 구비하는 전용의 32비트 레지스터(도 4에 도시된 정수 레지스터(36))에 저장되는 정수를 도시한다. 예를 들면 포맷 코드가 "O"인 명령 포맷에서의 P1.0 필드(52)에 배치된 4비트의 정수"const"는 암묵적으로 지정된 정수 레지스터(36)에 저장되는 정수이다.
도 3은 도 2에서 사용되는 3종류의 연산코드"cc","op1" 및 "op2" 각각 에 의해 지정되는 구체적인 연산을 설명한 도면이다.
4비트의 연산코드"cc"는 16종류의 분기연산 중의 하나를 지정한다. 하나의 분기연산은 분기조건과 분기형식에 의해 특정된다. 분기조건에는 같다("eq"), 같지 않다("neq"), 보다 크다("gt") 등이 있다. 분기형식에는 상기 정수 레지스터(36)의 저장값을 분기장소의 절대 어드레스로서 분기하는 형식(니모닉(mnemonic) 표시에 있어서 "i"가 첨부되어 있지 않은 것)과 상대 어드레스로서 분기하는 형식(니모닉 표시에 있어서 "i"가 첨부되어 있는 것)이 있다. 예를 들면 연산코드"eq"는 직전의 비교결과가 같은 경우에 절대 어드레스 지정에 의한 분기를 하는 연산을 의미하고, 연산코드"eqi"는 직전의 비교결과가 같은 경우에 상대 어드레스 지정에 의한 분기를 하는 연산을 의미한다.
4비트의 연산코드"op1"은"add"(가산), "sub"(감산),"mu1"(승산), "and"(논리곱), "or"(논리합) 등의 산술논리 연산에 속하는 연산의 하나를 지정하는 경우와,"mov"(워드(32비트)데이터의 전송),"movh"(하프워드 데이터의 전송),"movb"(바이트 데이터의 전송) 등의 레지스터와 레지스터간 전송에 속하는 연산의 하나를 지정하는 경우가 있다.
4비트의 연산코드"op2"는 상기 연산코드"op1"과 같은 산술논리 연산 및 레지스터와 레지스터간 전송에 덧붙여"1d"(메모리로부터 레지스터로의 1워드데이터의 로드),"st"(레지스터로부터 메모리로의 워드데이터의 저장) 등의 레지스터와 메모리간 전송에 속하는 연산의 하나를 지정하는 경우가 있다.
다음으로 도 2의 (a)에 도시된 각 필드(51, 52, 59, 60)의 특징을 설명하기로 한다.
P0.0필드(51)는 이 명령(50)의 포맷을 특정하는 4비트의 포맷 코드를 배치하기 위한 필드이고, 구체적으로는 도 2의 (b) ∼ 도 2의 (d)에 도시된 16종류의 명령 포맷의 하나를 특정한다.
P1.0 필드(52)는 정수 또는 분기용 연산코드를 배치하기 위한 필드이다.
이 P1.0 필드(52)에 정수가 배치된 경우(포맷 코드 = 0, 1, 4∼9의 경우) 에는 그 정수는 정수 레지스터(36)에 저장하는 대상으로 되는 장소(포맷 코드 = 0, 1, 4, 5의 경우)와, 제 1 연산필드(59) 또는 제 2 연산필드(60)의 오퍼랜드의 일부를 구성하는 경우(포맷 코드 = 5, 7, 8, 9, B의 경우)가 있다. 또 정수 레지스터(36)에 저장하는 대상으로 되는 경우에는 그 4비트의 정수만이 저장되는 경우(포맷 코드 = 0, 1의 경우)와, 제 1 연산필드(59) 또는 제 2 연산필드(60)에 배치된 12비트의 정수와 같이 저장되는 경우(포맷 코드 = 4, 5의 경우)가 있다.
한편 이 P1.0 필드(52)에 분기용 연산코드"cc"가 배치된 경우(포맷 코드 = 2, 3, A의 경우)에는 정수 레지스터(36)에 저장된 정수를 분기장소의 절대 어드레스로서, 또는 상대 어드레스(변위)로서 분기하는 것을 의미한다.
제 1 연산필드(59)는 본 프로세서와 외부(메모리)와의 데이터의 전송을 수반하지 않는 연산(산술 논리연산, 레지스터간 전송)을 지정하기 위한 연산코드와 오퍼랜드(소스 및 데스티네이션)의 조 또는 정수가 배치된다.
제 2 연산필드(60)는 상기 제 1 연산필드(59)의 경우에 덧붙여 본 프로세서와 외부(메모리)와의 데이터 전송을 수반하는 연산(레지스터와 메모리간 전송)을 지정하기 위한 연산코드와 오퍼랜드의 조가 배치될 수도 있다.
또 이상과 같은 연산의 종류의 각 필드로의 할당은 노이만형의 본 프로세서에서는 2개 이상의 분기연산을 동시에 실행할 필요가 없는 것, 본 프로세서와 외부 (메모리)와의 오퍼랜드의 입출력 포트(도 4에서의 오퍼랜드 액세스부(40))를 1개로 한정하고 있는 것 등에 기초한다.
여기에서 도 2의 (b)∼도 2의 (d)에 표시된 명령 포맷에는 이하의 특징이 있다.
첫째로 정수"const"에 착안하여 판단할 수 있는 바와 같이 정수 레지스터(36)에 정수를 저장시키는 명령 포맷은 다음 3가지이다.
(1) 포맷 코드가 "0"또는 "1"인 경우 :
이 명령에서는 P1.0 필드(52)에 배치된 4비트의 정수가 정수 레지스터(36)에 저장된다.
(2) 포맷 코드가 "4"인 경우 :
이 명령에서는 P1.0 필드(52)∼P2.2 필드(55)에 배치된 16비트의 정수가 정수 레지스터(36)에 저장된다.
(3) 포맷 코드가 "5"인 경우 :
이 명령에서는 P1.0 필드(52)와 P3.0 필드(56)∼P3.2 필드(58)에 배치된 16비트의 정수가 정수 레지스터(36)에 저장된다.
둘째로, 본 프로세서에서는 1개의 명령에 최대 3가지의 연산을 지정할 수 있지만, 그 경우에는 도 2의 (b)에 도시된 3연산용 명령 포맷에서 알 수 있는 바와 같이 그들 3가지의 연산 종류는 다음 어느 것의 조합이 된다.
(1) 4비트의 정수를 정수 레지스터(36)에 세트하는 연산과 2개의 범용연산 (포맷 코드가 "0","1"인 경우)
(2) 정수 레지스터(36)에 세트된 값을 절대 어드레스 또는 상대 어드레스로서 분기하는 연산과 2개의 범용연산(포맷 코드가 "2","3"인 경우)
이와 같이 본 프로세서의 명령은 32비트 길이에 불과하지만 최대 3개의 연산을 동시에 지정할 수 있는 코드효율이 높은 필드 구성을 갖고 있다.
( 프로세서의 하드웨어 구성 )
다음으로 본 프로세서의 하드웨어 구성을 설명하기로 한다.
도 4는 제 1 실시예에 관한 프로세서의 하드웨어 구성을 도시한 블록도이다.
본 프로세서는 상술한 바와 같이 최대 3개의 연산을 병렬 실행하는 VLIW 프로세서이고, 크게 나누어 명령 레지스터(10), 해독부(20) 및 실행부(30)로 구성된다.
명령 레지스터(10)는 명령 페치부(39)로부터 보내져 온 1개의 명령을 보유하는 32비트의 레지스터이다.
해독부(20)는 명령 레지스터(10)에 보유된 명령을 해독하여 그 해독결과에 따른 제어선을 실행부(30)에 출력하는 것이며, 크게 나누어 포맷 디코더(21)와 명령 디코더(22)로 이루어진다.
명령 디코더(22)는 또한 P1.0 필드(12)에 보유된 연산코드"cc"를 해독하여 그 결과에 따라 PC부(33)를 제어하는 분기 디코더(23)와, P2.0 필드(13)에 보유된 연산코드를 해독하여 그 결과에 따라 제 1 연산부(37)를 제어하는 제 1 연산 디코더(24)와, P3.0 필드(16)에 보유된 연산코드를 해독하여 그 결과에 따라 제 2 연산부(38) 및 오퍼랜드 액세스부(40)를 제어하는 제 2 연산 디코더(25)로 이루어진다.
포맷 디코더(21)는 P0.0 필드(11)에 보유된 4비트의 포맷 코드를 디코드함으로써 명령 레지스터(10)에 보유된 명령의 포맷이 도 2의 (b) ∼도 2의 (d)에 표시된 16종류 중 어느 것인지를 특정하고, 그 결과에 따라 분기 디코더(23), 제 1 연산 디코더(24) 및 제 2 연산 디코더(25)에 의한 해독동작을 허가 또는 금지하거나 실행부(30)의 정수 레지스터 제어부(32)를 동작시킨다.
또 상기 디코더(21, 23∼25)는 기본적으로는 1사이클에 1개의 연산을 해독하고, 실행부(30)에 제어신호를 준다. 또 명령 레지스터(10)와 실행부(30)를 접속하는 28비트의 정수 신호선(26)은 명령 레지스터(10)에 배치된 정수나 오퍼랜드를 실행부(30)에 전송하기 위한 버스이다.
실행부(30)는 해독부(20)에서의 해독결과에 따라 최대 3개의 연산을 병렬 실행하는 회로 유니트이고, 실행 제어부(31), PC부(33), 레지스터군(34), 제 1 연산부(37), 제 2 연산부(38), 명령 페치부(39) 및 오퍼랜드 액세스부(40)로 이루어진다. 또 이 실행부(30) 중 정수 레지스터 제어부(32), PC부(33) 및 정수 레지스터(36)에서는 별도의 도면에서 더욱 상세한 구성을 도시하고 있다.
실행 제어부(31)는 해독부(20)에서의 실행결과에 따라 실행부(30)의 각 구성요소(33∼40)를 제어하는 제어회로나 배선의 총칭이고, 통상의 프로세서가 구비하는 구성요소(타이밍 제어, 동작허가 금지제어, 스테이터스 관리, 인터럽트 제어 등의 회로) 외에 본 프로세서에 특유의 정수 레지스터 제어부(32)를 갖는다. 정수 레지스터 제어부(32)는 포맷 디코더(21)로부터의 지시에 따라 명령 레지스터(10)에 보유된 4비트 또는 16비트의 정수(const)를 정수 레지스터(36)에 저장하는 제어를 행한다.
PC(프로그램 카운터)부(33)는 분기 디코더(23)에 의한 제어하에서 다음에 해독 실행해야 할 명령이 배치되어 있는 도시되지 않은 외부 메모리 상의 어드레스를 명령 페치부(39)에 출력한다.
명령 페치부(39)는 32비트의 IA(명령 어드레스) 버스 및 32비트의 ID(명령 데이터) 버스를 통하여 도시되지 않은 외부 메모리로부터 명령 블록을 페치하여 내부의 명령 캐쉬에 보유하는 것과 함께 PC부(33)로부터 출력된 어드레스에 상당하는 명령을 명령 레지스터(10)에 공급한다.
레지스터군(34)은 15개의 32비트 범용 레지스터(35)와 1개의 32비트 정수 레지스터(36)로 구성된다. 이들 16개의 레지스터(35, 36)에 저장된 값은 제 1 연산 디코더(24) 및 제 2 연산 디코더(25)에서의 해독결과에 기초하여, 제 1 연산부(37) 및 제 2 연산부(38)에 전송되어 연산이 실시되거나, 단순히 통과한 후 레지스터군(34) 또는 오퍼랜드 액세스부(40)에 보내진다. 또 정수 레지스터(36)에 저장된 값은 제 1 연산부(37) 및 제 2 연산부(38)에서의 연산에 이용될뿐 아니라 PC부(33)에도 전송되어 분기장소로 되는 유효 어드레스의 생성에 이용된다.
제 1 연산부(37)는 2개의 32비트 데이터에 대하여 산술논리 연산을 행하는 ALU와 승산을 하는 승산기를 내부에 갖고, 제 1 연산 디코더(24)에 의한 제어하에서 2종류의 연산(산술논리 연산과 레지스터간 전송)을 실행한다.
제 2 연산부(38)도 제 1 연산부(37)와 마찬가지로 2개의 32비트 데이터에 대하여 산술논리 연산을 하는 ALU와 승산을 하는 승산기를 내부에 갖고, 제 2 연산 디코더(25)에 의한 제어하에서 2종류의 연산(산술논리 연산과 레지스터간 전송) 을 실행한다.
오퍼랜드 액세스부(40)는 제 2 연산 디코더(25)에 의한 제어하에서 레지스터군(34)과 도시되지 않은 외부 메모리 사이에서 오퍼랜드를 전송하는 회로이고, 그 오퍼랜드나 오퍼랜드 어드레스를 보유하는 버퍼를 내부에 갖는다. 구체적으로는 예를 들면 명령 레지스터(10)의 P3.1 필드(16)에 연산코드"1d"가 배치되어 있는 경우에는 외부 메모리에 배치된 1워드의 데이터가 오퍼랜드 액세스부(40)를 거쳐 레지스터군(34) 중 어느 레지스터에 로드되고, 또 연산코드"st"가 배치된 경우에는 레지스터군(34) 중 어느 레지스터의 저장값이 외부 메모리에 저장된다.
상기 PC부(33), 레지스터군(34), 제 1 연산부(37), 제 2 연산부(38) 및 오퍼랜드 액세스부(40)는 도시된 바와 같이 내부버스(L1 버스, R1 버스, L2 버스, R2 버스, D1 버스, D2 버스)로 접속되어 있다. 또 L1 버스 및 R1 버스는 각각 제 1 연산부(37)의 2개의 입력포트에 접속되고, L2 버스 및 R2 버스는 각각 제 2 연산부(38)의 2개의 입력포트에 접속되며, D1 버스 및 D2 버스는 각각 제 1 연산부(37) 및 제 2 연산부(38)의 출력포트에 접속되어 있다.
(정수 레지스터(36) 및 그 주변회로의 상세한 구성)
다음으로 정수 레지스터(36) 및 그 주변회로에 대하여 상세히 설명하기로 한다.
도 5는 정수 레지스터(36) 및 그 주변회로의 상세한 구성과 접속관계를 도시한 블록도이다. 또 도면중의 고정값("0")(27)은 정수"0"을 나타내는 4개의 신호선의 고정적인 배선을 의미한다.
정수 레지스터 제어부(32)는 5개의 3입력 셀렉터(32a∼32e)와 3개의 4입력 셀렉터(32f∼32h)로 이루어지고 정수 레지스터(36)는 8개의 4비트폭 레지스터(36a∼36h)로 이루어진다. 또 각 입출력 데이터는 병렬 4비트이다.
정수 레지스터 제어부(32)는 포맷 디코더(21) 및 명령 디코더(22)로부터의 제어신호에 따라 상기 8개의 입력 셀렉터(32a∼32h)를 제어함으로써 이하에 나타낸 4가지의 저장방법 중 어느 방법에 의해 명령 레지스터(10)에 보유된 정수 또는 제로를 정수 레지스터(36)에 저장시킨다.
도 6의 (a) ∼도 6의 (d)는 그 4가지의 저장방법을 설명하는 도면이다.
도 6의 (a)는 포맷 디코더(21)에 의해 P0.0 필드(11)에 보유된 값이 "O"또는"1"로 해독된 경우의 저장방법을 도시한다. 이것은 P1.0 필드(12)에 배치된 4비트의 정수만을 정수 레지스터(36)에 저장하는 경우에 상당한다.
구체적으로는 정수 레지스터(36)에 보유된 데이터를 4비트단위로 상위에 시프트시킴과 동시에 명령 레지스터(10)의 P1.0 필드(12)에 보유된 4비트의 정수를 정수 레지스터(36)의 최하위의 4비트 레지스터(36h)에 저장한다.
도 6의 (b)는 포맷 디코더(21)에 의해 P0.0 필드(11)에 보유된 값이 "4"로 해독된 경우의 저장방법을 도시한다. 이것은 P1.0 필드(12)∼P2.2 필드(15)에 배치된 16비트의 정수를 정수 레지스터(36)에 저장하는 경우에 상당한다.
구체적으로는 정수 레지스터(36)의 하위 16비트(36e∼36h)에 보유된 데이터를 상위 16비트(36a∼36d)로 시프트시킴과 동시에 명령 레지스터(10)의 P1.0 필드(12)∼P2.2 필드(15)에 보유된 16비트의 정수를 정수 레지스터(36)의 하위 16비트(36e∼36h)에 저장한다.
도 6의 (c)는 포맷 디코더(21)에 의해 P0.0 필드(11)에 보유된 값이 "5"로 해독된 경우의 저장방법을 도시한다. 이것은 P1.0 필드(12)와 P3.0 필드(16)∼P3.2 필드(18)에 배치된 16비트의 정수를 정수 레지스터(36)에 저장하는 경우에 상당한다.
구체적으로는 정수 레지스터(36)의 하위 16비트(36e∼36h)에 보유된 데이터를 상위 16비트(36a∼36d)에 시프트시킴과 동시에 명령 레지스터(10)의 P1.0 필드(12)와 P3.0 필드(16)∼P3.2 필드(18)에 보유된 16비트의 정수를 정수 레지스터(36)의 하위 16비트(36e∼36h)에 저장한다.
도 6의 (d)는 포맷 디코더(21)에 의해 P0.0 필드(11)에 보유된 값이 "2","3"및"A"중 어느 것이라고 해독된 경우 또는 명령 디코더(22)에 의해서 P2.1 필드(14), P2.2 필드(15), P3.1 필드(17) 및 P3.2 필드(18)의 적어도 하나에 정수 레지스터(R15)가 지정되어 있다고 해독된 경우의 저장방법을 도시한다. 이것은 P1.0 필드(12)에 배치된 분기연산, 제 1 연산필드(59) 및 제 2 연산필드(60)의 적어도 하나의 연산에 의해 정수 레지스터(36)의 저장값이 사용된(판독된) 후에 정수 레지스터(36)에 모두 제로(zero)를 저장하는(정수 레지스터(36)를 클리어함) 경우에 상당한다.
구체적으로는 정수 레지스터(36)의 저장값이 PC부(33), 제 1 연산부(37) 및 제 2 연산부(38) 중 어느 하나로 판독된 직후에 32비트의 정수"0"을 정수 레지스터(36)에 저장한다.
또 정수 레지스터(36)를 사용한 후에 클리어해 두는 것은 정수 레지스터(36)에는 항상 제로확장된 값이 저장되어 있는 것을 보증하기 위해서이다. 여기에서 제로확장이란 어떤 수치의 유효자리수가 일정한 자리수로 차지 않은 경우에 그 유효자리수보다 상위의 자리수 모두를 제로로 채우는 처리를 말한다.
이상과 같이 명령 레지스터(10)의 P0.0 필드(11)의 값이 "O","1","4""5"인 경우에는 정수 레지스터(36)에 이미 저장된 정수를 시프트시키면서 새로운 정수가 정수 레지스터(36)에 저장된다. 또한 정수 레지스터(36)는 그 저장값이 일단 판독되어 사용되면 그 내용은 소거된다. 이렇게 하여 정수 레지스터(36)는 그 내용이 판독될 때까지 차례로 저장되는 정수를 축적할 수 있다.
( PC부(33)의 상세한 구성 )
다음으로 PC부(33)의 상세한 구성을 설명하기로 한다.
도 7은 PC부(33)의 상세한 구성을 도시한 블록도이다.
PC부(33)는 정수"4"를 나타낸 고정적인 배선인 고정값("4")(33a), 2입력셀렉터(33b), 가산기(33c), 다음에 해독 실행해야 할 명령의 어드레스를 보유하는 PC(33d) 및 4입력 셀렉터(33e)로 구성된다.
이 PC부(33)에서는 해독부(20)로부터의 제어신호에 따라 셀렉터(33b, 33e)가 동작함으로써 이하의 3가지 값 중 어느 것이 유효 어드레스로서 셀렉터(33e)로부터 명령 페치부(39)에 출력된다.
(1) PC(33d)의 내용에"4"를 가산한 값
이것은 분기하지 않고 차례로 실행하는 경우, 즉 해독 실행된 명령에 분기 연산이 지정되지 않은 경우에 상당한다. 또"4"를 가산하는 것은 1개의 명령의 길이가 4바이트(32비트)인 것에 의한다.
(2) PC(33d)의 내용에 정수 레지스터(36)의 내용을 가산한 값
이것은 정수 레지스터(36)의 내용을 상대 어드레스로서 분기하는 경우, 예를 들면 P1.0 필드(12)에 의해 상대 어드레스에 의한 분기가 지정되어 있으면 분기 디코더(23)가 해독된 경우가 해당된다.
(3) 정수 레지스터(36)의 내용
이것은 정수 레지스터(36)의 내용을 절대 어드레스로서 분기하는 경우, 예를 들면 P1.0 필드(12)에 의해 절대 어드레스에 의한 분기가 지정되어 있으면 분기 디코더(23)가 해독된 경우가 해당된다.
이상과 같이 이 PC부(33)는 전용의 가산기(33c)를 구비하여 정수 레지스터(36)에 보유된 값을 직접 이용하는 구성으로 되어있기 때문에 제 1 연산부(37)나 제 2 연산부(38)에서의 연산과는 독립 병행하여 정수 레지스터(36)의 저장값을 절대 어드레스 또는 상대 어드레스로서 분기하는 실행제어를 할 수 있다.
( 프로세서의 동작 )
다음으로 구체적인 명령을 해독 실행한 경우의 본 프로세서의 동작에 대하여 설명하기로 한다.
도 8은 32비트의 정수를 취급하는 처리의 예를 도시한 흐름도이다.
도 8에는 레지스터 R0과 R1의 저장값의 차를 구하고(단계 S80), 그 결과에 레지스터(R2)의 저장값을 곱하고(단계 S81), 또 그 결과에 32비트의 정수"0x87654321"(16진수의 "87654321")을 더하고(단계 S82, S83), 마지막으로 레지스터(R3)를 클리어하는 (단계 S84) 처리가 도시되어 있다.
도 9는 도 8에 도시된 처리 내용을 본 프로세서에 행하게 하는 프로그램 예를 도시한 도면이다.
본 프로그램은 3개의 명령(71∼73)으로 구성되어 있다. 1행이 1개의 명령에 상당하고, 각 명령의 내용은 각 필드에 배치된 니모닉으로 표현되어 있다. 또 정수는 모두 16진수로 표현되어 있다. 또한"fmtn (n = O∼F)"는 포맷 코드"n"을 나타내며,"Rn (n = 0∼15)"는 레지스터군(34) 중의 1개의 레지스터를 나타낸다. 또"R15"는 정수 레지스터(36)를 의미한다.
도 10은 도 9에 표시된 프로그램을 실행한 경우의 본 프로세서의 동작을 도시하는 타이밍도이다.
본 도면에는 클록 사이클, 범용 레지스터(R0∼R3) 및 정수 레지스터(R15)의 내용, 4개의 버스(L1, R1, L2, R2)를 흐르는 데이터가 도시되어 있다. 상기 도 9 및 도 10을 참조하여 각 명령(71∼73) 마다의 본 프로세서의 동작을 설명하기로 한다.
( 명령 71 )
명령 71이 명령 레지스터(10)에 로드되면 본 프로세서는 도 10의 클록 사이클(tO∼t1)에 도시된 동작을 한다.
포맷 디코더(21)는 명령 레지스터(10)의 P0.0 필드(11)의 값("fmt4")으로부터 이 명령은 포맷 코드가 "4"인 2연산 명령이라고 판단하고, 이하의 2개의 연산이 병렬 실행되도록 실행부(30)를 제어한다.
(1) 제 1 연산
정수 레지스터 제어부(32)는 내부의 8개의 셀렉터(32a∼32h)를 제어함으로써, 도 6의 (b)에 도시된 저장방법에 의해 P1.0 필드(12)∼P2.2 필드(15)에 보유된 16비트의 정수(0x8765)를 정수 레지스터(36)의 하위 16비트에 저장한다. 그 결과 도 10의 클록 사이클(t0∼t1)에 표시된 바와 같이 정수 레지스터(R15)의 내용은 그때까지의"0x00000000"로부터"0x00008765"로 변화한다.
(2) 제 2 연산
제 2 연산부(38)는 범용 레지스터(R0)의 내용("0x33333333")과 범용 레지스터(R1)의 내용("0x22222222")을 입력으로 하고, 여기에서 감산한 후 그 결과를 다시 범용 레지스터(R0)에 저장한다. 그 결과 도 10의 클록 사이클(t0∼t1)에 도시된 바와 같이 범용 레지스터(R0)의 내용은 그때까지의"0x33333333"으로부터"0x11111111"로 변화한다.
( 명령 72 )
다음으로 명령 72가 명령 레지스터(10)에 로드되면 본 프로세서는 도 10의 클록 사이클(t1∼t2)에 표시된 동작을 한다.
포맷 디코더(21)는 상기 명령 71의 경우와 마찬가지로 명령 레지스터(10)의 P0.0 필드(11)의 값("fmt")으로부터 이 명령은 포맷코드가 "4"의 2연산 명령이라고 판단하고, 이하의 2개의 연산이 병렬 실행되도록 실행부(30)를 제어한다.
(1) 제 1 연산
정수 레지스터 제어부(32)는 내부의 8개의 셀렉터(32a∼32h)를 제어함으로써 도 6의 (b)에 도시된 저장방법에 의해 P1.0 필드(12)∼P2.2 필드(15)에 보유된 16비트의 정수(0x4321)를 정수 레지스터(36)의 하위 16비트에 저장한다. 그 결과 도 10의 클록 사이클(t1∼t2)에 도시된 바와 같이 정수 레지스터(R15)의 내용은 그때까지의 "0x00008765"로부터 "0x87654321"로 변화한다.
(2) 제 2 연산
제 2 연산부(38)는 범용 레지스터(R2)의 내용("0x00000004")과 범용 레지스터(R0)의 내용("0x11111111")을 입력으로 하고, 여기에서 승산한 후, 그 결과를 다시 범용 레지스터(R0)에 저장한다. 그 결과 도 10의 클록 사이클(t1∼t2)에 도시된 바와 같이 범용 레지스터(R0)의 내용은 그때까지의 "0x11111111"로부터 "0x44444444"로 변화한다.
( 명령 73 )
마지막으로 명령 73이 명령 레지스터(10)에 로드되면 본 프로세서는 도 10의 클록 사이클(t2∼t3)에 도시된 동작을 한다.
포맷 디코더(21)는 명령 레지스터(10)의 P0.0 필드(11)의 값("fmt7")으로부터, 이 명령은 포맷 코드가 "7"인 2연산 명령이라고 판단하여 이하의 2개의 연산이 병렬 실행되도록 실행부(30)를 제어한다.
(1) 제 1 연산
제 1 연산부(37)는 정수 레지스터(R15)의 내용("0x87654321")값과 범용 레지스터(R0)의 내용("0x44444444")을 입력으로 하여 그들을 가산한 후, 그 결과를 다시 범용 레지스터(R0)에 저장한다. 그 결과 도 10의 클록 사이클(t2∼t3)에 도시된 바와 같이 범용 레지스터(R0)의 내용은 그때까지의 "0x44444444"로부터 "0 xCBA98765"로 변화하고, 정수 레지스터(R15)의 내용은 클리어된다.
(2) 제 2 연산
제 2 연산부(38)는 P1.0 필드(12)와 P3.1 필드(17)에 분할 배치된 8비트의 정수("0x00")를 입력으로 하여 그대로 통과시켜 범용 레지스터(R3)에 저장한다. 그 결과 도 10의 클록 사이클(t2∼t3)에 도시된 바와 같이 범용 레지스터(R3)의 내용은 그때까지의"0xFEDCBA98"로부터 "OxFEDC0000"으로 변화한다.
이상과 같이 하여 본 프로세서에서 32비트의 정수"0x87654321"은 2개의 명령 71, 72에 걸쳐 분할 배치되어 차례로 정수 레지스터(36)에 시프트되면서 저장된 후 제 3번째의 명령 73에 의해 이용되었다. 이렇게 하여 도 8의 흐름도에 표시된 처리가 3개의 명령 71∼73에 의해 실행된다.
다음으로 16비트의 정수를 취급하는 별도의 프로그램을 이용하여 본 프로세서의 동작을 설명한다.
도 11은 16비트의 정수를 취급하는 프로그램의 예를 도시한 도면이다.
이 프로그램은 5개의 명령 74∼78로 구성되어 있다.
각 명령 74∼78 마다의 본 프로세서의 동작은 이하와 같다.
( 명령 74 )
명령 74가 명령 레지스터(10)에 로드되면 포맷 디코더(21)는 명령 레지스터(1O)의 PO.O 필드(11)의 값("fmtO")으로부터 이 명령은 포맷 코드가 "0"인 3연산 명령이라고 판단하여 이하의 3가지의 연산이 병렬 실행되도록 실행부(30)를 제어한다.
(1) 제 1 연산
정수 레지스터 제어부(32)는 내부의 8개의 셀렉터(32a∼32h)를 제어함으로써, 도 6의 (a)에 도시된 저장방법에 의해 P1.0 필드(12)에 보유된 4비트의 정수("0x8")를 정수 레지스터(36)의 최하위의 4비트 레지스터(36h)에 저장한다.
(2) 제 2 연산
제 1 연산부(37)는 범용 레지스터(R6)의 값을 입력으로 하여 그대로 통과시켜 범용 레지스터(R1)에 저장한다.
(3) 제 3 연산
마찬가지로 제 2 연산부(38)는 범용 레지스터(R7)의 값을 입력으로 하여 그대로 통과시켜 범용 레지스터(R2)에 저장한다.
( 명령 75 )
마찬가지로 하여 명령 75가 명령 레지스터(10)에 로드되면 포맷 디코더(21)는 이 명령은 포맷 코드가 "0"의 3연산 명령이라고 판단하여 이하의 3개의 연산이 병렬 실행되도록 실행부(30)를 제어한다.
(1) 제 1 연산
정수 레지스터 제어부(32)는 내부의 8개의 셀렉터(32a∼32h)를 제어함으로써 도 6의 (a)에 도시된 저장방법에 의해 P1.0 필드(12)에 보유된 4비트의 정수("0x7")를 정수 레지스터(36)의 최하위 4비트 레지스터(36h)에 저장한다. 이 결과 정수 레지스터(36)의 하위 8비트에는 정수"0x87"이 세트된다.
(2) 제 2 연산
제 1 연산부(37)는 범용 레지스터(R0, R1)의 값을 입력으로 하여 여기에서 가산한 후, 그 결과를 다시 범용 레지스터(R1)에 저장한다.
(3) 제 3 연산
마찬가지로 제 2 연산부(38)는 범용 레지스터(R0, R2)의 값을 입력으로 하여 여기에서 가산한 후 그 결과를 다시 범용 레지스터(R2)에 저장한다.
( 명령 76, 명령 77 )
마찬가지로 하여 명령 76, 77이 실행됨으로써 정수 레지스터(36)의 하위 16비트에는 정수"0x8765"가 세트된다.
( 명령 78 )
명령 78이 명령 레지스터(10)에 로드되면 본 프로세서는 도 9에 도시된 명령 73의 경우와 같은 동작을 한다.
이상과 같이 하여 본 프로세서에서는 16비트의 정수"0x8765"는 4개의 명령 74∼77에 걸쳐 분할 배치되어 차례로 정수 레지스터(36)에 시프트되면서 저장된 후 제 5번째의 명령 78에 의해 이용되었다.
( 통상의 프로세서와의 비교 )
다음으로 상기 도 9 및 도 11에 도시된 프로그램과 동일 내용의 처리를 통상의 프로세서에 행하게 한 경우에 대하여 설명하고, 제 1 실시예에 관한 프로세서와 비교한다. 또 여기에서 말하는 통상의 프로세서란 제 1 실시예에 관한 프로세서의 정수 레지스터(36)나 정수 레지스터 제어부(32)와 같이 분할된 정수를 축적하여 저장하는 수단만을 갖지 않은 프로세서를 말하며, 32비트 고정길이의 명령을 실행하는 것으로 한다.
도 12의 (a)는 이 통상의 프로세서가 실행하는 명령의 필드 정의를 도시하며, 도 12의 (b)는 그 명령의 포맷을 도시한다. 즉 통상의 프로세서는 3종류의 2연산 명령(101∼103)과 1종류의 1연산 명령(104)을 실행하는 것으로 한다.
도 13은 도 9에 도시된 프로그램과 동일 내용의 처리, 즉 도 8의 흐름도에 도시된 처리를 통상의 프로세서에 행하게 하는 프로그램의 예이다.
도 13과 도 9를 비교하여 알 수 있는 바와 같이 통상의 프로세서용 프로그램은 제 1 실시예에 관한 프로세서용의 것보다도 2개의 명령만큼 많아져 있다.
또 명령 105, 106에 nop코드가 포함되는 것은 명령 106은 명령 105에서의 연산 결과를 이용하기 때문에 이들의 명령을 병렬로 실행시킬 수 없기 때문이다. 또한 1개의 정수"0x87654321"을 상위 16비트와 하위 16비트의 2개로 분할하여 정수 레지스터(Ri)에 세트하고 있는 것은(명령 107, 108) 32비트의 1개의 명령 중에 세트명령의 연산코드와 32비트의 정수의 양쪽을 동시에 배치하는 것은 불가능하기 때문이다.
마찬가지로 도 14는 도 11에 도시된 프로그램과 동일 내용의 처리를 통상의 프로세서에 행하게 하는 프로그램의 예이다.
도 14와 도 11을 비교하여 알 수 있는 바와 같이 통상의 프로세서용 프로그램은 제 1 실시예에 관한 프로세서용의 것보다도 1개의 명령만큼 많아져 있다.
이상과 같이 제 1 실시예에 관한 프로세서에 의하면 16비트나 32비트의 정수가 복수의 명령에 걸쳐 분할 배치되어 있어도 그들은 정수 레지스터(36)에 축적하여 저장됨으로써 원래의 정수로 복원되어 분기나 산술연산 등의 연산에 사용된다. 즉 명령 중에 생긴 작은 영역이어도 정수를 분할하여 채워둘 수 있으므로 통상의 프로세서에 실행시키는 경우보다 프로그램의 코드 크기는 축소된다.
( 정수 레지스터(36)의 주변회로의 변형예 )
다음으로 도 5에 표시된 정수 레지스터(36)의 주변회로에 대한 변형예를 몇가지 나타낸다.
( 제 1 변형예 )
도 15는 제 1 변형예에 관한 정수 레지스터(36)의 주변회로의 구성 및 접속관계를 도시한 블록도이다.
도 5의 정수 레지스터 제어부(32)는 정수 레지스터(36)를 시프트 레지스터로서 기능시켰지만 도 15의 정수 레지스터 제어부(32)는 정수 레지스터(36)를 병렬입력의 레지스터로서 기능시키고 있는 점에서 다르다. 구체적으로는 정수 레지스터 제어부(90)와 포맷 디코더(21)의 접속 및 정수 레지스터 제어부(90)의 구성요소가 도 5에 도시된 것과 다르다.
정수 레지스터 제어부(90)는 저장자리수 카운터(91)와 8개의 8입력 셀렉터(90a∼90h)로 이루어진다. 저장자리수 카운터(91)는 3비트의 카운터이고 그 시점에서 정수 레지스터(36)에 축적되어 있는 정수의 유효자리수를 니블(4비트)단위로 나타낸 것이다.
정수 레지스터 제어부(90)는 명령 레지스터(10)에 보유된 정수를 저장하는 취지의 지시를 포맷 디코더(21)로부터 받으면, 그 시점에서의 저장자리수 카운터(91)의 값을 참조함으로써 정수 레지스터(36)가 적절한 위치에 그 정수를 저장하고 그 후 저장자리수 카운터(91)를 갱신한다. 또 정수 레지스터(36)의 저장값이 어떠한 연산을 위해 판독되었다는 취지의 통지를 포맷 디코더(21) 또는 명령 디코더(22)로부터 받으면 고정값("0")(92)으로부터의 모두 제로를 정수 레지스터(36)에 저장하고 그 후 저장자리수 카운터(91)를 리세트한다.
구체적으로는 정수 레지스터 제어부(90)는 P0.0 필드(11)의 값이"0"또는 "1"인 취지의 지시를 포맷 디코더(21)로부터 받으면 그 때의 저장자리수 카운터(91)의 값(0∼7)에 대응하여, 각각 도 16의 (a)∼도 16의 (h)에 도시된 저장방법에 의해 P1.0 필드(12)에 배치된 1니블의 정수를 정수 레지스터(36)에 저장하도록 셀렉터(90a∼90h)를 제어하고 그 후 저장자리수 카운터(91)를 1만큼 증분한다.
마찬가지로 정수 레지스터 제어부(90)는 P0.0 필드(11)의 값이 "4"인 취지의 지시를 포맷 디코더(21)로부터 받으면, 그 시점에서의 저장자리수 카운터(91)의 값(0∼7)에 대응하여 각각 도 17의 (a)∼도 17의 (h)에 표시된 저장방법에 의해 P1.0 필드(12)∼P2.2 필드(15)에 배치된 4니블의 정수를 정수 레지스터(36)에 저장하도록 셀렉터(90a∼90h)를 제어하고 그 후 저장자리수 카운터(91)를 4만큼 증분한다.
마찬가지로 정수 레지스터 제어부(90)는 P0.0 필드(11)의 값이 "5"인 취지의 지시를 포맷 디코더(21)로부터 받으면 그 시점에서의 저장자리수 카운터(91)의 값(0∼7)에 대응하여, 각각 도 18의 (a)∼도 18의 (h)에 도시된 저장방법에 의해 P1.0 필드(12)와 P3.0 필드(16)∼P3.2 필드(18)에 배치된 4니블의 정수를 정수 레지스터(36)에 저장하도록 셀렉터(90a∼90h)를 제어하고 그 후 저장자리수 카운터(91)를 4만큼 증분한다.
또 정수 레지스터 제어부(90)는 P0.0 필드(11)의 값이 "2","3"및"A"중 어느 것인 취지의 지시를 포맷 디코더(21)로부터 받은 경우 또는 정수 레지스터(36)의 저장값을 오퍼랜드로 하는 연산인 취지의 지시를 명령 디코더(22)로부터 받은 경우에는 도 19에 도시된 정수 레지스터(36)와 같이 32비트의 정수"0"을 정수 레지스터(36)에 저장시키고 그 후 저장자리수 카운터(91)를 제로로 클리어한다.
이상과 같이 이 제 1 변형예에 관한 정수 레지스터 제어부(90)에 의해 상기정수 레지스터 제어부(32)의 경우와 같이 복수의 명령에 걸쳐 분할 배치되어 있던 정수는 정수 레지스터(36)에 축적되어 저장됨으로써 원래의 정수로 복원된다.
단 상기 정수 레지스터 제어부(32)의 경우와 달리 후에 실행되는 명령에 배치된 정수가 정수 레지스터(36)의 상위자리수에 저장된다. 따라서 이 변형예의 프로세서에 도 8의 흐름도에 표시된 처리를 실행시키기 위해서는 도 9에 표시된 프로그램에 있어서 명령 71의 정수"0x8765"와 명령 72의 정수"0x4321"을 교체해두어야 한다.
( 제 2 변형예 )
다음으로 제 2 변형예를 나타낸다.
도 20은 제 2 변형예에 관한 정수 레지스터(36)의 주변회로의 구성 및 접속관계를 도시한 블록도이다.
이 제 2 변형예는 정수 레지스터(36)의 저장값을 시프트시키면서 새로운 정수를 축적하여 가는 점에서 도 5에 도시된 것과 동일하지만 정수 레지스터(36)로의 저장에 앞서 정수를 부호확장하고 있는 점 및 정수 레지스터(36)의 저장값이 판독된 경우에도 정수 레지스터(36)를 클리어하지 않는 점에서 다르다.
또 부호확장이란 어떤 수치의 유효자리수가 일정한 자리수에 차지 않은 경우에 그 수치의 최상위비트를 부호비트로 간주하고 그 부호비트와 같은 논리값으로 상위자리수를 채우는 처리를 말한다.
부호확장 제어부(191)는 명령 레지스터(10)에 배치된 정수가 정수 레지스터(36)의 저장값이 판독된 후 처음의 저장에 관한 것인 경우에는 그 정수를 부호확장한 후 정수 레지스터(36)에 저장하도록 정수 레지스터 제어부(190)를 제어하고, 그렇지 않은 경우에는 그 정수를 부호확장하지 않고 정수 레지스터(36)에 저장하도록 정수 레지스터 제어부(190)를 제어한다. 그 때문에 부호확장 제어부(191)는 내부에 1비트의 판독플래그를 기억해 두기 위한 판독플래그 기억부(192)를 구비하고, 포맷 디코더(21) 및 명령 디코더(22)로부터의 지시에 따라 판독플래그 기억부(192)를 갱신한다.
도 21은 판독플래그 기억부(192)의 값의 변화를 도시하는 상태천이도이다.
부호확장 제어부(191)는 정수 레지스터(36)의 저장값이 판독된 취지의 통지를 포맷 디코더(21) 또는 명령 디코더(22)로부터 받으면 그 판독 후에 판독플래그 기억부(192)의 값을 "1"로 세트하고, 명령 레지스터(10)에 배치된 정수를 정수 레지스터(36)에 저장하는 취지의 통지를 포맷 디코더(21)로부터 받으면 그 저장후에 판독플래그 기억부(192)의 값을 "0"으로 세트한다. 그리고 부호확장 제어부(191)는 새로운 정수를 정수 레지스터(36)에 저장시킬 때 판독플래그 기억부(192)를 참조하여 그 값이 "1"인 경우에는 그 정수를 부호확장한 후에 정수 레지스터(36)에 저장시킨다.
또 도 20에서 셀렉터(190h) 및 셀렉터(190e)의 출력으로부터 분기되어 다른 셀렉터에 배선되어 있는 신호선은 각각의 출력 4비트중 최상위비트에 상당하는 신호선뿐이다.
도 22의 (a)∼도 22의 (f)는 이 제 2 변형예에서의 정수 레지스터(36) 및 판독플래그 기억부(192)의 값의 변화를 도시한 도면이다.
도 22의 (a)는 정수 레지스터(36)에 저장되어 있던 정수"0x87654321"이 판독된 직후의 그들의 내용을 도시하며, 도 22의 (b)∼도 22의 (e)는 그 후에 4비트의 정수"0x8","0x7","0x6","0x5"가 차례로 저장된 직후의 그들의 내용을 나타내며, 도 22의 (f)는 도 22의 (e)에서의 정수"0xFFFF8765"이 판독된 직후의 그들의 내용을 나타낸다.
이렇게 하여 본 제 2 변형예에서 부호확장 제어부(191)가 판독플래그 기억부(192)에 의해 부호확장의 필요성의 유무를 관리함으로써 복수의 명령에 걸쳐 분할 배치되어 있던 정수는 정수 레지스터(36)에 축적하여 저장되고 부호확장된 원래의 정수로서 복원된다.
( 제 3 변형예 )
다음으로 제 3 변형예를 나타낸다.
도 23은 제 3 변형예에 관한 정수 레지스터(36)의 주변회로의 구성 및 접속관계를 도시한 블록도이다.
이 제 3 변형예는 상기 제 2 변형예와 비교하여 정수 레지스터(36)의 저장값을 시프트시키면서 새로운 정수를 축적하는 점 및 부호확장을 하는 점에서 공통되지만, 정수 레지스터(36)에 정수를 저장할 때 확장처리를 하는 것은 아니고 정수 레지스터(36)로부터 정수를 판독할 때 확장처리를 하는 점에서 다르다.
또 도 5에 도시된 주변회로 및 접속관계와 비교하면 이 제 3 변형예에서는 정수 레지스터(36)에 모두 제로를 저장하기 위한 구성은 설치되어 있지 않고 새롭게 확장제어부(291) 및 제로/부호확장부(293)가 부가되어 있다.
정수 레지스터 제어부(290)는 정수 레지스터(36)를 클리어하지 않는 점을 제외하고, 도 5에 도시된 정수 레지스터 제어부(32)와 같은 동작을 한다.
확장제어부(291)는 정수 레지스터(36)에 저장되어 있던 정수가 판독될 때 그 정수가 적절히 제로확장 또는 부호확장이 행해지도록 제로/부호확장부(293)를 제어한다. 그 때문에 확장제어부(291)는 내부에 3비트의 카운터로 이루어지는 저장자리수 카운터(292)를 갖는다. 저장자리수 카운터(292)는 정수 레지스터(36)에 축적되어 있는 정수의 유효자리수를 니블단위로 기억해 두기 위한 것이다. 확장제어부(291)는 새로운 정수가 정수 레지스터(36)에 저장된 취지의 통지를 포맷 디코더(21)로부터 받은 경우에는 그 정수의 자리수(니블단위의 자리수)만큼 저장자리수 카운터(292)를 증분하고, 정수 레지스터(36)의 저장값이 판독된 취지의 통지를 포맷 디코더(21) 또는 명령 디코더(22)로부터 받은 경우에는 저장자리수 카운터(292)를 리세트한다.
이 확장 제어부(291)는 명령 디코더(22)부터의 지시에 기초하여 확장형식(제로확장인지 부호확장인지)을 지정하는 1비트의 제어신호와, 저장자리수 카운터(292)의 값을 나타내는 3비트의 제어신호를 제로/부호확장부(293)에 출력한다.
제로/부호확장부(293)는 정수 레지스터(36)로부터 출력된 32비트의 저장값을 입력으로 하여, 확장제어부(291)로부터 통지되는 확장형식과 유효자리수(니블단위의 자리수)에 기초하여 제로확장 또는 부호확장을 행한다. 구체적으로는 확장 제어부(291)로부터 지정된 확장형식이 부호확장의 경우이면 입력된 저장값에 대하여 확장제어부(291)로부터 통지된 유효자리수의 최상위에 상당하는 비트의 논리값을 그 유효자리수보다 상위의 모든 자리수에 복사하여 얻어지는 값을 출력하고, 한편 제로확장의 경우이면 그들 상위 모든 자리수를 제로로 하는 값을 출력한다.
예를 들면 입력된 저장값이 "0x87654321"이고 확장제어부(291)로부터 통지된 확장형식이 부호확장으로서 유효자리수가 4니블인 경우에는 제로/부호확장부(293)는 "0x00004321"을 출력한다.
이와 같이 본 제 3 변형예에 의해 복수의 명령에 걸쳐 분할 배치되어 있던 정수는 정수 레지스터(36)에 축적하여 저장됨으로써 원래의 정수로 복원되어 제로확장 또는 부호확장된 후에 분기나 연산 등의 연산에 이용된다.
( 제 4 변형예 )
다음으로 제 4 변형예를 나타낸다.
도 24는 제 4 변형예에 관한 정수 레지스터(36)의 주변회로의 구성 및 접속관계를 도시한 블록도이다.
이 제 4 변형예는 도 5에 표시된 것과 비교하여 정수 레지스터(36)의 저장값을 시프트시키면서 새로운 정수를 축적하는 점에서 공통되지만, 시프트시키는 방향과 정수 레지스터(36)로의 저장위치가 다르다. 구체적으로는 정수 레지스터(36)의 저장값을 상위자리수로부터 하위자리수로 시프트시킴과 동시에 명령 레지스터(10)에 배치된 새로운 정수를 정수 레지스터(36)의 상위자리수에 저장한다. 또 정수 레지스터(36)의 저장값이 판독된 직후에 정수 레지스터(36)를 클리어하는 점은 도 5와 동일하다.
도 24와 도 5를 비교하여 판단할 수 있는 바와 같이 이들은 접속관계가 자리수방향으로 대칭적으로 되어 있고, 사용하고 있는 구성요소는 동일하다.
이 제 4 변형예에 의해 보다 적은 저장횟수에 의해 하위자리수 모두를 제로로 하는 수치를 정수 레지스터(36)에 세트하는 것이 가능해진다. 예를 들면 정수 레지스터(36)가 클리어된 후 새로운 32비트의 정수"0x87650000"을 세트하는 경우에 도 5에 도시된 접속이라면 2개의 16비트 정수"0x8765"와 "0x0000"을 저장해야 하지만, 도 24에 도시된 접속이라면 1개의 16비트 정수"0x8765"를 저장하는 것만으로 된다. 소수점이하를 모두 제로로 하는 고정소수점 수치를 세트하는 경우에 편리하다.
( 제 5 변형예 )
다음으로 제 5 변형예를 나타낸다.
제 5 변형예에 관한 프로세서는 상기 제 1 실시예와 비교하여 정수 레지스터(36)의 저장값을 시프트시키면서 새로운 정수를 축적하는 점에서 공통되지만, 정수 레지스터(36)의 내부상태에 따라서는 제 1 연산필드(59)의 소스 오퍼랜드(54)로서 직접 지정된 정수와 정수 레지스터(36)에 이미 저장되어 있던 정수가 연결되어 생기는 새로운 32비트의 정수를 제 1 연산필드(59)가 실질적인 소스 오퍼랜드로서 제 1 연산부(37)에 공급하는 기능을 갖는 점에서 다르다.
이하 상기 제 1 실시예와 다른 점만을 구체적으로 설명하기로 한다.
도 25는 제 5 변형예에 관한 정수 레지스터(36)의 주변회로의 구성 및 접속관계를 도시한 블록도이다.
판독플래그 기억부(28)는 정수 레지스터(36)의 내부상태를 기억하는 1비트의 메모리이고, 정수 레지스터(36)를 제로 클리어할 것인지의 여부를 조사하기 위해 이용된다.
도 26은 판독플래그 기억부(28)의 값의 변화를 도시하는 상태천이도이다. 판독플래그 기억부(28)의 값은 정수 레지스터(36)의 저장값이 판독되고, 또한 정수 레지스터(36)로의 정수의 저장이 행해지지 않은 경우에 "1"로 세트된다. 판독플래그 기억부(28)의 값이 "1"의 상태이고 정수를 저장하는 연산이 지정된 경우 정수를 설정하기 전에 정수 레지스터 제어부(490)의 제어에 의해 정수 레지스터(36)의 내용은 제로 클리어된다. 그 후 판독플래그 기억부(28)의 값은 "O"으로 세트된다.
이러한 판독플래그 기억부(28)를 준비함으로써 새로운 정수를 저장할 때 제로 클리어의 필요성 유무를 판정할 수 있게 되고, 정수 레지스터(36)의 값을 사용한 시점에서 정수 레지스터(36)를 제로 클리어할 필요가 없어지게 된다. 이에 따라 이하에 나타내는 것 같은 정수 레지스터(36)의 저장값 전체를 재이용할 수 있게 된다.
본 변형예에 관한 프로세서는 도 2에 도시된 각 포맷의 명령에 대하여 판독플래그 기억부(28)의 값에 따라 이하와 같은 다른 동작을 한다. 또 본 변형예에 관한 프로세서에서는 초기 상태로서 판독플래그 기억부(28)의 값은 "1"로 세트되어 있다.
포맷 코드(PO.0 필드(11)의 저장값)"0"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 소스 오퍼랜드는 "Rs1", 데스티네이션 오퍼랜드는 "Rd1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 P1.0 필드(52)에 지정된 "const"를 정수 레지스터(36)의 36h에 저장하고 36a∼36g를 제로 클리어한다. 그리고 판독플래그 기억부(28)의 값을 "0"으로 한다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 소스 오퍼랜드는 "Rs1", 데스티네이션 오퍼랜드는 "Rd1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2" 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 정수 레지스터(36)의 36b∼36h를 36a∼36g에 4비트 좌측으로 시프트하고 나서 P1.0 필드(52)에 지정된 "const"를 정수 레지스터(36)의 36h에 저장한다. 판독플래그 기억부(28)의 값은 "0" 그대로이다.
포맷코드 "1"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는 "Rd1"이다. 소스 오퍼랜드는 P2.1 필드(54)에 지정된 4비트의 정수"const1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2" 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 P1.0 필드(52)에 지정된 "const"를 정수 레지스터(36)의 36h에 저장하고 36a∼36g를 제로 클리어한다. 그리고 판독플래그 기억부(28)의 값을 "0"으로 한다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는 "Rd1"이다. 소스 오퍼랜드는 정수 레지스터(36)의 36b∼36h와 P2.1 필드(54)에 지정된 4비트의 정수"const1"을 연결한 32비트의 정수이다. 그리고 정수 레지스터(36)의 내용을 판독하였기 때문에 판독플래그 기억부(28)의 값을 "1"로 세트한다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 이 시점에서 판독플래그 기억부(28)의 값은 "1"로 되어 있기 때문에 P1.0 필드(52)에 지정된 "const"를 정수 레지스터(36)의 36h에 저장하고 36a∼36g를 제로 클리어한다. 그리고 판독플래그 기억부(28)의 값을 "0"으로 한다.
포맷 코드"2"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 소스 오퍼랜드는 "Rs1", 데스티네이션 오퍼랜드는 "Rd1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 P1.0 필드(52)에 지정된 "cc"연산의 분기조건을 만족하는지의 여부를 판정하여, 만족하는 경우는 PC부(33)에서 정수 레지스터(36)의 내용으로부터 분기장소 어드레스를 구하고 PC(프로그램 카운터)에 저장한다.
판독플래그 기억부(28)의 값은 "1" 그대로이다.
(2)판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 소스 오퍼랜드는 "Rs1"데스티네이션 오퍼랜드는 "Rd1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 P1.0 필드(52)에 지정된 "cc"연산의 분기조건을 만족하는지의 여부를 판정하여, 만족하는 경우는 PC부(33)에서 정수 레지스터(36)의 내용으로부터 분기장소 어드레스를 구하고 PC(프로그램 카운터)에 저장한다.
마지막으로 판독플래그 기억부(28)의 값을 "1"로 세트한다.
포맷 코드"3"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는"Rd1"이다. 소스 오퍼랜드는 P2.1 필드(54)에 지정된 4비트의 정수"const1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 P1.0 필드(52)에 지정된 "cc" 연산의 분기조건을 만족하는지의 여부를 판정하여, 만족하는 경우는 PC부(33)에서 정수 레지스터(36)의 내용으로부터 분기장소 어드레스를 구하고 PC(프로그램 카운터)에 저장한다.
판독플래그 기억부(28)의 값은 "1"그대로이다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는 "Rd1"이다. 소스 오퍼랜드는 P2.1 필드(54)에 지정된 4비트의 정수"const1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 P1.0 필드(52)에 지정된 "cc"연산의 분기조건을 만족하는지의 여부를 판정하여, 만족하는 경우는 PC부(33)에서 정수 레지스터(36)의 내용으로부터 분기장소 어드레스를 구하고, PC(프로그램 카운터)에 저장한다.
마지막으로 판독플래그 기억부(28)의 값을 "1"로 세트한다.
포맷 코드"4"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 P1.0 필드(52)∼P2.2 필드(55)에 지정된 16비트의 정수"const"를 정수 레지스터(36)의 하위 16비트 36e∼36h에 저장하고, 36a∼36d를 제로 클리어한다. 그리고 판독플래그 기억부(28)의 값을 "O"으로 한다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
다음으로 정수 레지스터(36)의 하위 16비트 36e∼36h를 36a∼36d에 시프트하고 나서 P1.0 필드(52)∼P2.2 필드(55)에 지정된 16비트의 정수"const"를 정수 레지스터(36)의 하위 16비트 36e∼36h에 저장한다. 판독플래그 기억부(28)의 값은 "0"그대로이다.
포맷 코드"5"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 소스 오퍼랜드는 "Rs1", 데스티네이션 오퍼랜드는 "Rd1"이다.
다음으로 P1.0 필드(52)와 P3.0 필드(56)∼P3.2 필드(58)에 지정된 16비트의 정수"const"를 정수 레지스터(36)의 하위 16비트 36e∼36h에 저장하고, 36a∼36d를 제로 클리어한다. 그리고 판독플래그 기억부(28)의 값을 "0"으로 한다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 소스 오퍼랜드는 "Rs1", 데스티네이션 오퍼랜드는 "Rd1"이다.
다음으로 정수 레지스터(36)의 하위 16비트 36e∼36h를 36a∼36d로 시프트하고 나서, P1.0 필드(52)와 P3.0 필드(56)∼P3.2 필드(58)에 지정된 16비트의 정수"const"를 정수 레지스터(36)의 하위 16비트 36e∼36h에 저장한다. 판독플래그 기억부(28)의 값은 "0" 그대로이다.
포맷 코드"6"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는"Rd1"이다. 소스 오퍼랜드는 P1.0 필드(52)에 지정된 4비트의 정수"const1"과 P2.1 필드(54)에 지정된 4비트의 정수"const1"을 연결시킨 8비트의 정수이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는 "Rd1"이다. 소스 오퍼랜드는 정수 레지스터(36)의 하위 24비트 36c∼36h와 P1.0 필드(52)에 지정된 4비트의 정수"const1"과 P2.1 필드(54)에 지정된 4비트의 정수"const1"을 연결한 32비트의 정수이다. 그리고 정수 레지스터(36)의 내용을 판독하였기 때문에 판독플래그 기억부(28)의 값을 "1"로 세트한다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 소스 오퍼랜드는 "Rs2", 데스티네이션 오퍼랜드는 "Rd2"이다.
포맷 코드"7"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 소스 오퍼랜드는 "Rs1", 데스티네이션 오퍼랜드는 "Rd1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 데스티네이션 오퍼랜드는 "Rd2"이다. 소스 오퍼랜드는 P1.0 필드(52)에 지정된 4비트의 정수"const1"과 P3.1 필드(57)에 지정된 4비트의 정수"const1"을 연결시킨 8비트의 정수이다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 소스 오퍼랜드는 "Rs1", 데스티네이션 오퍼랜드는 "Rd1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 데스티네이션 오퍼랜드는 "Rd2"이다. 소스 오퍼랜드는 정수 레지스터(36)의 하위 24비트 36c∼36h와 P1.0 필드(52)에 지정된 4비트의 정수"const1"과 P3.1 필드(57)에 지정된 4비트의 정수"const1"을 연결한 32비트의 정수이다. 그리고 정수 레지스터(36)의 내용을 판독하였기 때문에 판독플래그 기억부(28)의 값을 "1"로 세트한다.
포맷 코드"8"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는 "Rd1"이다. 소스 오퍼랜드는 P1.0 필드(52)에 지정된 4비트의 정수"const1"과 P2.1 필드(54)에 지정된 4비트의 정수"const1"을 연결시킨 8비트의 정수이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 데스티네이션 오퍼랜드는 "Rd2"이다. 소스 오퍼랜드는 P3.1 필드(57)에 지정된 4비트의 정수"const2"이다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는 "Rd1"이다. 소스 오퍼랜드는 정수 레지스터(36)의 하위 24비트와 P1.0 필드(52)에 지정된 4비트의 정수"const1"과 P2.1 필드(54)에 지정된 4비트의 정수"const1"을 연결한 32비트의 정수이다. 그리고 정수 레지스터(36)의 내용을 판독하였기 때문에 판독플래그 기억부(28)의 값을 "1"로 세트한다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 데스티네이션 오퍼랜드는 "Rd2"이다. 소스 오퍼랜드는 P3.1 필드(57)에 지정된 4비트의 정수"const2"이다.
포맷 코드"9"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는"Rd1"이다. 소스 오퍼랜드는 P2.1 필드(54)에 지정된 4비트의 정수"const1"이다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 데스티네이션 오퍼랜드는 "Rd2"이다. 소스 오퍼랜드는 P1.0 필드(52)에 지정된 4비트의 정수"const2"와 P3.1 필드(57)에 지정된 4비트의 정수"const2"를 연결시킨 8비트의 정수이다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 1 연산필드(59)에 지정된 "op1"을 실행한다. 데스티네이션 오퍼랜드는 "Rd1"이다. 소스 오퍼랜드는 정수 레지스터(36)의 하위 28비트 36b∼36h와 P1.0 필드(52)에 지정된 4비트의 정수"const1"을 연결한 32비트의 정수이다. 그리고 정수 레지스터(36)의 내용을 판독하였기 때문에 판독플래그 기억부(28)의 값을 "1"로 세트한다.
그와 동시에 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 데스티네이션 오퍼랜드는 "Rd2"이다. 소스 오퍼랜드는 P1.0 필드(52)에 지정된 4비트의 정수"const2"와 P3.1 필드(57)에 지정된 4비트의 정수"const2"를 연결시킨 8비트의 정수이다.
포맷 코드"A"에 대하여 :
(1) 판독플래그 기억부(28)의 값이 "1"일 때
우선 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 데스티네이션 오퍼랜드는 "Rd2"이다. 소스 오퍼랜드는 P2.0 필드(53)∼P2.2 필드(55)에 지정된 12비트의 정수"const2"와 P3.1 필드(57)에 지정된 4비트의 정수"const2"를 연결시킨 16비트의 정수이다.
다음으로 P1.0 필드(52)에 지정된 "cc"연산의 분기조건을 만족하는지의 여부를 판정하여, 만족하는 경우는 PC부(33)에서 정수 레지스터(36)의 내용으로부터 분기장소 어드레스를 구하고 PC(프로그램 카운터)에 저장한다.
판독플래그 기억부(28)의 값은 "1"그대로이다.
(2) 판독플래그 기억부(28)의 값이 "0"일 때
우선 제 2 연산필드(60)에 지정된 "op2"를 실행한다. 데스티네이션 오퍼랜드는 "Rd2"이다. 소스 오퍼랜드는 P2.0 필드(53)∼P2.2 필드(55)에 지정된 12비트의 정수"const2"와 P3.1 필드(57)에 지정된 4비트의 정수"const2"를 연결시킨 16비트의 정수이다.
다음으로 P1.0 필드(52)에 지정된 "cc"연산의 분기조건을 만족하는지의 여부를 판정하여, 만족하는 경우는 PC부(33)에서 정수 레지스터(36)의 내용으로부터 분기장소 어드레스를 구하고, PC(프로그램 카운터)에 저장한다.
마지막으로 판독플래그 기억부(28)의 값을 "1"로 세트한다.
포맷 코드"B"에 대하여 :
1연산만을 실행하는 명령이고, 판독플래그 기억부(28)의 값에 관계없이 정수 레지스터(36)의 내용은 참조되지 않는다. 오퍼랜드는 P1.0 필드(52)∼P2.2 필드(55)에 지정된 16비트의 정수"const2"와 P3.1 필드(57)∼P3.2 필드(58)에 지정된 8비트의 정수"const2"를 연결시킨 24비트의 정수이다.
다음으로 구체적인 명령을 해독 실행한 경우의 본 변형예에 관한 프로세서의 동작에 대하여 설명하기로 한다.
도 27은 24비트의 정수를 취급하는 처리의 예를 도시한 흐름도이다. 본 도면에는 레지스터 R0과 R1의 저장값의 차를 구하고(단계 S100), 그 결과에 24비트의 정수"0x876543"을 더하고(단계 S101, S102), 마지막으로 레지스터(R2)의 저장값을 레지스터(R1)에 전송해 두는(단계 S103) 처리가 도시되어 있다.
도 28은 도 27에 도시된 처리내용을 본 변형예에 관한 프로세서로 행하게 하는 프로그램예를 도시한 도면이다. 이 프로그램은 2개의 명령(171, 172)으로 구성되어 있다. 각 명령(171, 172)마다의 본 변형예에 관한 프로세서의 동작을 설명하기로 한다.
우선 초기 상태로서 판독플래그 기억부(28)의 값을 "1"로 한다.
( 명령 171 )
명령 171이 명령 레지스터(10)에 로드되면 포맷 디코더(21)는 명령 레지스터(10)의 P0.0 필드(11)의 값("fmt4")으로부터, 이 명령은 포맷 코드가 "4"인 2연산 명령이라고 판단하여 이하의 2개의 연산이 병렬 실행되도록 실행부(30)를 제어한다.
(1) 제 1 연산
정수 레지스터 제어부(490)는 내부의 8개의 셀렉터(490a∼490h)를 제어함으로써 도 5의 (c)에 도시된 저장방법에 의해 P1.0 필드(12)∼P2.2 필드(15)에 보유된 16비트의 정수(0x8765)를 정수 레지스터(36)의 하위 16비트에 저장한다. 정수 레지스터(36)의 상위 16비트는 제로 클리어된다. 그리고 판독플래그 기억부(28)의 값을 "0"으로 한다.
(2) 제 2 연산
제 2 연산부(38)는 범용 레지스터(R0)의 내용과 범용 레지스터(R1)의 내용을 입력으로 하여 R0의 내용으로부터 R1의 내용을 감산한 후에 그 결과를 다시 범용 레지스터(R0)에 저장한다.
( 명령 172 )
명령 172가 명령 레지스터(10)에 로드되면 포맷 디코더(21)는 명령 레지스터(10)의 P0.0 필드(11)의 값("fmt6")으로부터 이 명령은 포맷 코드가 "6"의 2연산 명령이라고 판단하여 이하의 2개의 연산이 병렬 실행되도록 실행부(30)를 제어한다.
(1) 제 1 연산
P2.0 필드(13)의 연산은 정수를 오퍼랜드로 취하는 연산이고, 판독플래그 기억부(28)의 값이 "0"이므로 정수 레지스터(36)의 하위 24비트(0x008765)와 P1.0필드(12)에 지정된 4비트의 정수(0x4)와 P2.1 필드(14)에 지정된 4비트의 정수(0x3)를 연결한 값(0x00876543)과 범용 레지스터(R0)의 내용으로 가산한 후 그 결과를 다시 범용 레지스터(R0)에 저장한다.
그리고 판독플래그 기억부(28)의 값을 "1"로 세트한다.
(2) 제 2 연산
제 2 연산부(38)는 범용 레지스터(R2)의 값을 입력으로 하고, 그대로 통과시켜 범용 레지스터(R1)에 저장한다.
이상과 같이 하여 암묵적으로 정수 레지스터(36)의 저장값을 이용하여 정수 레지스터(36)와 연산으로 지정된 정수를 연결한 정수를 오퍼랜드로서 실행함으로써 2개의 명령에 의해 24비트의 정수를 취급하는 연산을 실행할 수 있다.
도 29는 제 1 실시예의 프로세서에 도 27에 표시된 흐름도와 동일 내용의 처리를 행하게 하는 프로그램의 예를 도시한다. 도 29와 도 28을 비교하여 판단할 수 있는 바와 같이 상기 제 1 실시예의 프로세서용 프로그램은 본 변형예에 관한 프로세서용의 것보다도 1개의 명령만큼 많아져 있다. 도 29에 도시된 바와 같이 제 1 실시예의 프로세서는 하나의 연산으로서는 정수 레지스터로의 값의 설정 및 정수 레지스터의 저장값의 이용 중 어느 한쪽밖에 행할 수 없으므로, 도 27에 도시된 처리를 완수하기 위해서는 24비트의 정수를 설정하는 데 필요한 2개의 명령 173, 174와 그 정수를 이용하기 위한 명령 175를 합친 3개의 명령 173∼175를 실행해야 한다. 그 결과 무동작 연산"nop"(명령 175의 제 2 연산필드(60))를 삽입하지 않을 수 없게 되어 있다.
이상과 같이 본 변형예에 관한 프로세서에 의하면 정수 레지스터에 축적된 정수와 명령 중의 연산으로 지정된 정수로부터 실질적인 오퍼랜드로 되는 정수가 생성되는 동시에 그 정수를 이용한 연산이 실행된다. 이에 따라 제 1 실시예의 경우보다 실행 사이클수는 감소된다.
이상 제 1의 목적을 달성하는 프로세서에 대하여 제 1 실시예 및 5개의 변형예에 기초하여 설명하였지만, 본 발명은 이들 실시예 및 변형예에 한정되지 않는 것은 물론 이다. 즉,
(1) 정수 레지스터(36)에 정수를 저장하는 위치로서, 하위자리수로부터 채워가는 방식(예를 들면 도 5에 도시된 방식)과, 상위자리수로부터 채워가는 방식(예를 들면 도 24에 도시된 방식)이 있다.
또한 새로운 정수를 정수 레지스터(36)에 저장할 때 이미 저장되어 있는 정수를 시프트시켜가는 방식(예를 들면 도 5에 도시된 방식)과 시프트시키지 않고 다른 자리수위치에 저장해가는 방식(예를 들면 도 15에 도시된 방식)이 있다.
또한 정수의 상위자리수의 확장방식으로서 제로확장을 하는 방식(예를 들면 도 5에 도시된 방식)과, 부호확장을 하는 방식(예를 들면 도 20에 도시된 방식) 이 있다.
또한 제로확장이나 부호확장을 하는 타이밍으로서, 정수 레지스터(36)로 저장하기 전에 행하는 방식(예를 들면 도 20에 도시된 방식)과, 정수 레지스터(36)로부터의 판독 후에 행하는 방식(예를 들면 도 23에 도시된 방식)이 있다.
또한 제로확장을 하는 구체적인 실현방식으로서, 정수 레지스터(36)의 저장값이 판독된 직후에 모두 제로를 정수 레지스터(36)에 저장해 두는 방식(예를 들면 도 5에 도시된 방식)과 정수의 저장시나 판독시에 고정값"0"을 삽입하는 방식(예를 들면 도 23에 도시된 방식)이 있다.
따라서 이들 저장위치, 시프트의 유무, 확장방식, 확장의 타이밍, 판독후의 자동클리어에 대한 각 방식을 조합함으로써 더욱 많은 편차를 구축하는 것은 용이하다.
또한 상기 실시예에서는 상기 각 방식의 한쪽만을 구비하는 예가 표시되었지만 이것에 한정되는 것은 아니다. 예를 들면 정수의 제로확장을 하기 위한 구성과 부호확장을 하기 위한 구성의 양쪽을 구비하여 명령에 배치된 연산코드에 의해 어느것인가를 선택적으로 동작시키는 방식이어도 된다.
(2) 또한 상기 실시예에서는 수치정수를 취급하는 예가 표시되었지만 문자정수이어도 되는 것은 물론이다. 복수의 명령에 걸쳐 분할 배치된 문자정수이어도 정수 레지스터(36)로의 복수회의 저장에 의해 자리수가 긴 원래의 문자정수가 복원되기 때문이다.
(3) 또한 상기 실시예에서는 도 2의 (b) ∼ 도 2의 (d)의 명령 포맷으로부터 알 수 있는 바와 같이 1개의 명령에 의해 정수 레지스터(36)에 저장시킬 수 있는 정수의 자리수는 4비트 및 16비트 중 어느것이지만 본 발명은 이 자리수에 한정되는 것이 아니다. 예를 들면 12비트나 28비트의 정수를 정수 레지스터(36)에 저장하기 위한 명령 포맷을 정의해도 된다. 그러기 위해서는 정수 레지스터(36)의 주변회로의 접속관계를 변경하면 된다.
(4) 또한 상기 실시예의 프로세서는 2개의 연산부(37, 38)를 구비하는 VLIW 프로세서이지만, 본 발명은 1개의 연산부만을 구비하여 1개의 명령 중에 1개의 연산만을 지정하는 단일연산 명령을 실행하는 VLIW 아키텍처를 채용하지 않은 프로세서에 대하여도 적용할 수 있는 것은 물론이다.
특히 고정길이 명령의 경우에는 미사용 영역을 갖는 명령이 많이 정의되는 일이 있다. 예를 들면 MIPS사 제품인 RISC 프로세서"R2000"은 32비트 고정길이 명령을 실행하지만 이 프로세서의 명령 세트에는 미사용 영역을 갖는 명령(예를 들면 ADD 명령은 5비트의 미사용 영역을 가짐)이 정의되어 있다. 본 발명에 의하면 이러한 단일연산 명령 중에 생기는 불필요 영역의 발생을 피할 수 있다.
(5) 또한 상기 실시예에서는 4비트의 연산코드"cc"는 암묵적으로 정수 레지스터(36)의 저장값을 참조하는 간접 분기연산을 의미하였지만, 본 발명은 이것에 한정되는 것이 아니라 연산코드"cc"로서 고정적인 변위의 번지분만큼 상대적으로 분기하는 연산이나, 범용 레지스터(35)의 저장값을 이용한 간접분기연산 등을 포함시킬 수도 있다. 이 경우에는 정수 레지스터 제어부(32)는 정수 레지스터(36)의 저장값이 판독된 직후에 정수 레지스터(36)를 클리어할 뿐만 아니라 연산코드"cc"에 수반되는 분기연산이 실행된 직후에도 정수 레지스터(36)를 클리어하면 된다. 이것은 어떠한 연산을 4비트의 연산코드"cc"에 할당할 것인지의 설계사항이고 분기 디코더(23)와 정수 레지스터 제어부(32)의 변경에 의해 용이하게 실현되는 것은 말할 필요도 없다.
( 제 2 실시예 )
다음으로 제 2 실시예에 관한 프로세서에 대하여 설명하기로 한다. 제 2 실시예에 관한 프로세서는 상기 제 2의 목적을 달성하기 위한 프로세서이고, 필요한 경우에만 정수 레지스터의 값을 세이브 또는 복귀시킴으로써 콘텍스트 스위치에서의 쓸데없는 동작을 피하는 기능을 갖는 것을 특징으로 한다. 또 선두에 0b가 붙은 수치는 2진수를 나타내는 것으로 한다.
( 프로세서의 하드웨어 구성 )
도 30은 제 2 실시예에 관한 프로세서(500)의 하드웨어 구성을 도시한 블록도이다. 본 프로세서는 명령 레지스터(510), 명령 해독회로(520), 실행부(530) 및 명령 페치부(550)로 구성된다. 또 본 도면에는 본 프로세서(500)에 접속되는 주변회로, 즉 콘텍스트의 세이브용 등을 위한 외부 메모리(540)도 함께 표시되어 있다.
명령 페치부(550)는 복수의 명령을 저장해 둔 명령 기억장치와, 실행해야 할 명령을 명령 기억장치로부터 판독하고 명령 레지스터(510)로 전송하는 명령 페치회로로 이루어진다.
명령 레지스터(510)는 명령 페치부(550)로부터 수신되는 명령을 보유한 16비트의 레지스터이다.
명령 해독회로(520)는 명령 레지스터(510)에 보유된 명령을 해독하고, 그 해독결과에 따른 제어신호를 실행부(530)에 출력하는 것이다. 또 상기 명령 해독회로(520)는 기본적으로는 1사이클에 1개의 명령을 해독하고 실행부(530)에 제어신호를 공급한다.
실행부(530)는 명령 해독회로(520)에서의 해독결과에 기초하여 명령을 실행하는 회로유니트이고, 실행 제어회로(300), 세이브복귀 무효화회로(301), 범용 레지스터(310), 연산기(311), 오퍼랜드 액세스회로(312), 정수 레지스터(320), 유효비트수 레지스터(321), 정수 복원회로(322), 멀티플렉서(330, 331, 332)로 이루어진다. 또 이 실행부(530) 중 세이브복귀 무효화회로(301), 정수 복원회로(322)에 대해서는 별도의 도면에서 더욱 상세히 설명하기로 한다.
범용 레지스터(310)는 16개의 32비트 레지스터(R0∼R15)이고, 이들 16개의 레지스터에 저장된 값은 명령 해독회로(520)에서의 해독결과 및 실행 제어회로(300)가 생성한 제어신호에 기초하여 연산기(311)나 오퍼랜드 액세스회로(312)에 전송되어 연산이 실시되거나 또는 외부 메모리(540)와의 전송이 행해지고, 그렇지 않으면 단순히 통과한 후 범용 레지스터(310)로 보내진다.
정수 레지스터(320)는 32비트 레지스터이고, 이 레지스터에 저장된 값은 명령 해독회로(520)에서의 해독결과 및 실행 제어회로(300)가 생성한 제어신호에 기초하여 정수 복원회로(322) 또는 오퍼랜드 액세스회로(312)에 전송된다.
정수 복원회로(322)는 명령 해독회로(520)에서의 해독결과 및 실행 제어회로(300)가 생성한 제어신호 및 유효비트수 레지스터(321)의 값에 기초하여, 명령 레지스터(510)에 저장된 명령에 포함된 정수와 정수 레지스터(320)의 저장값을 이용하여 새로운 값을 생성하고, 연산기(311)나 오퍼랜드 액세스회로(312)에 전송되어 연산이 실시되거나 외부 메모리(540)와의 전송이 행해지고, 그렇지 않으면 단순히 통과한 후 범용 레지스터(310)에 보내진다. 단, 후술하는 sfst 명령과 같이 단지 값을 축적하는 경우는 새로운 값을 생성하고, 연산기(311)를 단순히 통과한 후 정수 레지스터(320)에 보내진다. 새로운 값의 생성방법에 대한 상세한 방법은 후술하기로 한다. 또 명령 레지스터(510)와 실행부(530)를 접속하는 13비트의 정수신호선(11)은 명령 레지스터(510)에 배치된 정수를 실행부(530)로 전송하기 위한 버스이다.
유효비트수 레지스터(321)는 분할된 정수가 어떤 비트까지 정수 레지스터(320)에 저장되어 있는지를 나타내고 있고, 정수 레지스터(320)가 새로운 값으로 갱신되면, 동시에 유효비트수 레지스터(321)도 갱신된다. 또한 명령 레지스터(51O)에 저장된 명령이 정수 레지스터(320) 내의 정수를 사용하는 명령(예를 들면 후술하는 addi 명령)을 보유한 경우는 실행 제어회로(300)에 의해 유효비트수 레지스터(321)에 0b00(전체비트 무효)이 저장된다. 유효비트수 레지스터(321)의 저장값과 정수 레지스터(320)의 유효비트수의 구체적인 대응을 도 31에 도시한다.
실행 제어회로(300)는 명령 해독회로(520)에서의 실행결과에 기초하여 실행부(530)의 각 구성요소(310∼332)를 제어하는 제어회로나 배선의 총칭이고, 통상의 프로세서가 구비하는 구성요소(타이밍 제어회로, 동작허가금지 제어회로, 상태 레지스터 및 스테이터스 관리회로, 인터럽트 제어회로 등)에 더하여 정수 레지스터(320)의 제어회로를 갖는다.
세이브복귀 무효화회로(3O1)는 본 프로세서에 특유의 회로이고, 명령 해독회로(520), 실행 제어회로(300)로부터의 지시에 기초하여 명령 레지스터(510)에 저장된 명령이 정수 레지스터(320)의 세이브 또는 복귀 명령이고, 정수 레지스터(320)의 값이 무효인 것(값이 0b00)이 유효비트수 레지스터(321)에 표시되어 있는 경우 오퍼랜드 액세스회로(312)의 제어신호(303)를 후술하는 「무동작」으로 변화시킨다.
연산기(311)는 2개의 32비트 데이터에 대하여 산술논리 연산을 행하는 ALU이고, 실행 제어회로(300)의 제어화로 동작한다.
오퍼랜드 액세스회로(312)는 연산기(311)의 출력을 오퍼랜드 어드레스로 행하고, 멀티플렉서(332)의 출력을 오퍼랜드로 하여 외부 메모리(540)와의 사이에서 오퍼랜드를 전송하는 회로이고, 그 오퍼랜드나 오퍼랜드 어드레스를 보유하는 버퍼를 내부에 갖는다.
세이브복귀 무효화회로(301)가 출력하는 제어신호(303)가「로드」를 나타내는 경우에는 외부 메모리(540)에 배치된 1워드가 오퍼랜드 액세스회로(312)와 멀티플렉서(331)를 거쳐 버스(333)에 판독되고, 범용 레지스터(310)의 R0∼R15 중 어느 하나에, 또는 후술하는 정수 레지스터(320)의 복귀의 경우에는 정수 레지스터(320)에 저장된다.
또 제어신호(303)가 「스토어」(store)를 나타내는 경우에는 범용 레지스터(310)의 R0∼R15 중 어느 하나에, 또는 후술하는 정수 레지스터(320)의 세이브의 경우에는 정수 레지스터(320)에 저장된 값이 멀티플렉서(332)로 선택되어 오퍼랜드 액세스회로(312)를 거쳐 외부 메모리(540)에 기입된다.
또한 제어신호(303)가 「무동작」을 나타내는 경우에는 오퍼랜드 액세스회로(312)는 오퍼랜드 어드레스나 오퍼랜드를 무시하고 외부 메모리(540)와의 전송은 행해지지 않는다.
( 명령 포맷 )
다음으로 본 프로세서의 명령에 대하여 설명하기로 한다. 도 32에 본 실시예에서 설명에 사용하는 명령과 그 포맷을 도시한다. 도 32에 도시된 바와 같이 각 명령은 16비트의 고정길이 명령이고, 상위 3비트가 연산1(op1)의 필드이고, sfst 명령인 것은 이 필드를 해독함으로써 명령의 종류를 판단할 수 있다. sfst 명령이외의 명령에는 다음 3비트에 연산2(op2)의 필드가 있고, 이들의 명령은 op1과 op2를 해독함으로써 명령의 종류를 판단할 수 있다. addi 명령에는 다음 4비트에 레지스터 필드(Rn)가 있어, 데스티네이션 레지스터의 번호가 배치된다. 다음 필드에는 정수(imm6)가 있고, Rn에 가산되는 6비트의 정수가 배치된다.
다음으로 각 명령의 기능을 설명하기로 한다.
(1) sfst imm13
상기 명령은 정수 레지스터(320)의 값을 13비트만큼 좌측으로 시프트하고, 13비트 즉치(卽値)(imm13)를 하위측에 삽입하여 정수 레지스터(320)에 저장하는 명령이다. 정수 레지스터(320)가 무효였던 경우에는 13비트 즉치를 단지 부호확장하여 정수 레지스터(320)에 저장한다.(sfst는 shift-set의 약자)
(2) addi imm6, Rn
상기 명령은 정수 레지스터(320)의 값을 6비트만큼 좌시프트하고, 6비트 즉치(imm6)를 하위측에 삽입한 값과, 범용 레지스터(310)의 Rn(n은 0∼15)의 값을 가산하여 Rn에 저장하는 명령이다. 정수 레지스터(320)가 무효인 경우는 6비트 즉치를 단지 부호확장하여 가산에 이용한다. 또한 본 명령이 실행되면 정수 레지스터(320)는 무효화된다.
(3) save IMR, (Rn)
상기 명령은 정수 레지스터(320)를 외부 메모리(540)에 세이브하는 명령이고, 그 세이브장소 어드레스는 범용 레지스터(310)의 Rn의 값을 이용한다.
(4) restore (Rn), IMR
상기 명령은 정수 레지스터(320)를 외부 메모리(540)로부터 복귀하는 명령이고, 세이브장소 어드레스는 범용 레지스터(310)의 Rn의 값을 이용한다.
( 정수 복원회로(322)의 상세 )
도 33은 정수 복원회로(322)의 상세한 구성을 도시한 블록도이다.
3220은 명령 레지스터(510)로부터 버스(11)를 거쳐 전송되는 13비트의 정수와 정수 레지스터(320)의 저장값의 하위 19비트를 연결하는 회로이고, 정수 레지스터(320)쪽이 상위측이 되어 전체 32비트의 값이 된다.
마찬가지로 3221은 명령 레지스터(510)로부터 버스(11)를 거쳐 전송되는 6비트(13비트의 하위 6비트)의 정수와 정수 레지스터(320)의 저장값의 하위 26비트를 연결하는 회로이고, 정수 레지스터(320)쪽이 상위측이 되어 전체 32비트의 값이 된다.
3222는 명령 레지스터(510)로부터 버스(11)를 거쳐 전송되는 13비트의 정수를 32비트에 부호확장하는 회로이고, 3223은 명령 레지스터(510)로부터 버스(11)를 거쳐 전송되는 6비트(13비트의 하위 6비트)의 정수를 32비트로 부호확장하는 회로이다.
3224∼3226은 멀티플렉서, 3227은 다음 유효비트수 생성회로이다. 도 34는 멀티플렉서(3224, 3225, 3226)와 다음 유효비트수 생성회로(3227)의 동작을 정의하는 도면이고, 실행 제어회로(300)의 제어신호(305)와 유효비트수 레지스터(321)의 값에 의해 동작이 결정된다. 도 34 중 sfst 및 use는 명령 레지스터(510)에 보유된 명령의 종류를 나타내고 있고, 실행 제어회로(300)의 제어신호(305)에 의해 표시된다. sfst는 명령 레지스터(510)에 sfst 명령이 보유된 경우의 동작이고, use는 addi 명령 등의 정수를 사용하는 명령이 보유된 경우의 동작이다. 다음 유효비트수는 다음 유효비트수 생성회로(3227)가 출력하는 값이고, 다음 사이클에 유효비트수 레지스터(321)에 저장된다.
( 세이브복귀 무효화회로(301)의 상세 )
도 35는 세이브복귀 무효화회로(301)의 상세한 구성을 도시한다.
논리회로(3010)는 유효비트수 레지스터(321)의 저장값이 0x00이라면 1을 출력하고, 그 이외라면 0을 출력하는 회로이다. 게이트소자(3011)는 AND 회로, 게이트소자(3012)는 OR회로, 게이트소자(3013, 3014)는 AND 회로(3011)의 출력측이 논리반전 입력되는 AND 회로이다.
신호선(302(a), 302(b), 302(c))은 도 30의 3비트폭의 제어신호(302)를 1비트씩 나타낸 것이며, 신호선(303(a), 303(b), 303(c))은 도 30의 3비트폭의 제어신호(303)를 1비트씩 나타낸 것이며, 도 30의 오퍼랜드 액세스회로(312)에 대하여 각각 무동작, 로드, 스토어를 행하도록 제어한다.
제어신호(304)는 도 30에 도시된 바와 같이 실행 제어회로(300)가 출력한 제어신호이고, 명령 레지스터(510)에 보유된 명령이 save 명령 또는 restore 명령인 경우 1이 출력되고, 그 이외의 경우 O이 출력된다.
이 구성에 의해 유효비트수 레지스터(321)의 저장값이 0b00이고, 제어신호(304)가 1, 즉 명령 레지스터(510)에 보유되어 있는 명령이 save 명령이나 restore 명령인 경우 제어신호(302)에 관계없이 제어신호(303(a))가 1이 되고, 303(b), 303 (c)가 0이 되며, 오퍼랜드 액세스회로(312)의 동작이 「무동작」이 된다.
한편, 유효비트수 레지스터(321)의 저장값이 0b00이 아니거나 제어신호(304)가 0인 경우는 제어신호(302)가 그대로 제어신호(303)에 출력된다.
( 프로세서의 동작 )
다음으로 구체적인 명령을 실행한 경우의 본 프로세서의 동작에 대하여 설명하기로 한다. 또 본 실시예에서는 콘텍스트 스위치의 기동은 비동기의 인터럽트로 행해진다고 가정하고 있다. 또 인터럽트의 핸들러의 구체적 처리에 대해서는 생략하고, 정수 레지스터의 세이브와 복귀 동작만 설명하기로 한다.
도 36의 (a)는 본 프로세서의 동작을 설명하기 위한 흐름도이고, 도 36의 (b)는 그것에 대응하는 프로그램(명령 571∼573)의 리스트를 도시한다. 여기에서는 32비트의 정수 0x12345678을 범용 레지스터(R0)에 가산하는 프로그램이 표시되어 있다. 도 36의 (c)∼(f)는 상기 명령 571∼573의 실행에 따르는 유효비트수 레지스터(321) 및 정수 레지스터(320)의 내용의 변화를 도시하며, 도 36의 (g)는 명령 573이 실행된 경우의 실질적인 오퍼랜드를 도시한다.
이하 각 명령 571∼573 별로 동작을 설명한다. 또 본 프로그램 실행전에는 도 36의 (c)에 도시된 바와 같이 유효비트수 레지스터(321)에는 정수 레지스터(320)의 무효를 도시하는 값 0b00이 저장되어 있는 것으로 한다.
(1) sfst 0x0246 (명령 571)
명령 레지스터(510)에 상기 명령 571이 보유되면 실행 제어회로(300)는 이하의 제어를 행하여 명령 571을 실행한다.
우선 정수 복원회로(322)에서는 도 34에 따라 명령 레지스터(510)에 보유된 명령이 sfst 명령이고, 유효비트수 레지스터(321)가 0b00이기 때문에, 멀티플렉서(3225)가 A를 선택하고 멀티플렉서(3226)가 B를 선택하기 때문에, 멀티플렉서(330)로는 명령 레지스터(510)에 보유된 명령 571의 13비트의 즉치인 0x0246을 13비트로 부호확장한 값 0x00000246이 출력되고 유효비트수 레지스터(321)로는 0b01이 출력된다.
멀티플렉서(330)로 출력된 값 0x00000246은 연산기(311)를 단순히 통과한 후 멀티플렉서(331)를 거쳐 정수 레지스터(320)에 보내진다. 또한 유효비트수 레지스터(321)는 0b01로 갱신된다.
이상의 동작에 의해 정수 레지스터(320) 및 유효비트수 레지스터(321)의 내용은 도 36의 (d)에 도시된 바와 같이 변화된다. 또 오퍼랜드 액세스회로(312)는 제어신호(302, 303)가 「무동작」을 나타내고 있으므로 동작하지 않는다. 또한 범용 레지스터(310)도 변화하지 않는다.
(2) sfst 0x1159 (명령 572)
명령 레지스터(510)에 상기 명령 572가 보유되면 실행 제어회로(300)는 이하의 제어를 행하고 명령 572를 실행한다.
우선 정수 복원회로(322)에서는 도 34에 따라 명령 레지스터(510)에 보유된 명령이 sfst 명령이고, 유효비트수 레지스터(321)가 0b01이므로 멀티플렉서(3224)가 A를 선택하고 멀티플렉서(3226)가 A를 선택하므로 정수 레지스터(320)의 저장값0x00000246을 13비트 좌측으로 시프트하고, 명령 레지스터(510)에 보유된 명령의 13비트 즉치 0x1159를 하위 13비트에 삽입한 값 0x0048d159를 멀티플렉서(330)에 출력한다. 유효비트수 레지스터(321)로는 0b10이 출력된다.
멀티플렉서(330)로 출력되는 값 0x0048d159는 연산기(311)를 단순히 통과한 후 멀티플렉서(331)를 거쳐 정수 레지스터(320)로 보내진다. 또한 유효비트수 레지스터(321)는 0b10으로 갱신된다.
이상의 동작에 의해 정수 레지스터(320) 및 유효비트수 레지스터(321)의 내용은 도 36의 (e)에 도시된 바와 같이 변화한다. 또 오퍼랜드 액세스회로(312)는 제어신호(302, 303)가 「무동작」을 나타내므로 동작하지 않는다. 또한 범용 레지스터(310)도 변화하지 않는다.
(3) addi 0x38, R0 (명령 573)
명령 레지스터(510)에 상기 명령 573이 보유되면 실행 제어회로(300)는 이하의 제어를 행하여 명령 573을 실행한다.
우선 정수 복원회로(322)에서는 도 34에 따라 명령 레지스터(510)에 보유된 명령이 addi 명령(use의 란이 적용됨)이고 유효비트수 레지스터(321)가 0b10이므로 멀티플렉서(3224)가 B를 선택하고 멀티플렉서(3226)가 A를 선택하므로 정수 레지스터(320)의 저장값 0x0048d159를 6비트 좌시프트하고, 명령 레지스터(510)에 보유된 명령의 6비트 즉치 0x38을 하위 6비트에 삽입한 값 0x12345678 (도 36의 (g)에 도시된 값)을 멀티플렉서(330)에 출력한다. 유효비트수 레지스터(321)로는 0bO0이 출력된다.
멀티플렉서(330)로 출력된 값 0x12345678은 연산기(311)의 A포트에 입력된다. 한편 범용 레지스터(310)로부터 R0의 값이 판독되고, 연산기(311)의 다른쪽 B포트에 입력된다. 연산기(311)는 실행 제어회로(300)의 제어에 의해 각각의 입력값을 가산하고 멀티플렉서(331)를 거쳐 범용 레지스터(310)의 RO에 보내진다. 또한 유효비트수 레지스터(321)는 0bO0으로 갱신된다.
이상의 동작에 의해 정수 레지스터(320) 및 유효비트수 레지스터(321)의 내용은 도 36의 (f)에 도시된 바와 같이 변화한다. 또 오퍼랜드 액세스회로(312)는 제어신호(302, 303)가 「무동작」을 나타내고 있으므로 동작하지 않는다.
여기에서 상기 프로그램예의 도중에서 인터럽트가 발생하여 콘텍스트 스위칭이 행해지는 경우의 동작에 대하여 각각 인터럽트 위치가 다른 2개의 케이스에 대하여 설명하기로 한다.
( 케이스 1 )
여기에서는 상기 프로그램예의 도중의 addi 명령 573의 직전에서 인터럽트가 발생하여 콘텍스트 스위칭이 행해지는 경우의 동작을 설명하기로 한다.
도 37의 (a)는 케이스 1에서의 명령의 흐름을 도시한 흐름도이다. 이 경우 도 36의 (e)에 도시된 바와 같이 정수 레지스터(320)에 0x0048d159가, 유효비트수 레지스터(321)에 0b10(하위 26비트가 유효)이 저장되어 있는 시점에서 인터럽트 처리에 들어가게 된다.
인터럽트 처리 중에서 정수 레지스터(320)를 세이브하는 경우 save IMR, (R15) 명령이 명령 레지스터(510)에 보유되어 실행된다. 실행 제어회로(300)는 이하의 제어를 행하여 명령을 실행한다.
정수 레지스터(320)의 저장값은 멀티플렉서(332)를 거쳐 오퍼랜드로서 오퍼랜드 액세스회로(312)에 입력된다. 한편 범용 레지스터(310)의 R15의 값이 연산기(311)의 B포트에 입력되고 단순히 통과하여 오퍼랜드 어드레스로서 오퍼랜드 액세스회로(312)에 입력된다.
실행 제어회로(300)는 제어신호(304)에 세이브 또는 복귀명령인 것을 나타내는 1을 출력하고, 제어신호(302)에 「스토어」를 출력함으로써 세이브를 행하고자 한다.
세이브복귀 무효화회로(301)에서는 유효비트수 레지스터(321)의 저장값이 0b10이기 때문에 제어신호(302)는 그대로 제어신호(303)로 출력되고, 오퍼랜드 액세스회로(312)는「스토어」동작, 즉 정수 레지스터(320)를 세이브한다. 또 유효비트수 레지스터(321)의 내용은 본 프로세서의 상태 레지스터(state resister)의 일부로서, 상태 레지스터의 세이브와 동시에 세이브가 행하여진다.
또한 정수 레지스터(320)를 복귀하는 경우, 우선 상태 레지스터에 있는 유효비트수 레지스터(321)의 내용 0b10이 복귀되고, 그 후 restore(R15), IMR 명령이 명령 레지스터(510)에 보유되어 실행된다. 실행 제어회로(300)는 이하의 제어를 행하여 명령을 실행한다.
범용 레지스터(310)의 R15는 연산기(311)의 B포트에 입력되고 단순히 통과하여 오퍼랜드 어드레스로서 오퍼랜드 액세스회로(312)에 입력된다.
실행 제어회로(300)는 제어신호(304)에 세이브 또는 복귀명령인 것을 나타내는 1을 출력하고 제어신호(302)에 「로드」를 출력함으로써 복귀를 행하고자 한다.
세이브복귀 무효화회로(301)에서는 유효비트수 레지스터(321)의 저장값이 0b10이기 때문에 제어신호(302)는 그대로 제어신호(303)에 출력되고 오퍼랜드 액세스회로(312)는「로드」동작이 행해져 판독된 값 0x0048d159는 멀티플렉서(331)를 거쳐 정수 레지스터(320)에 보내진다. 즉 정수 레지스터(320)가 복귀된다.
( 케이스 2 )
여기에서는 상기 프로그램예의 addi 명령의 직후에서 인터럽트가 발생하고, 콘텍스트 스위칭이 행해지는 경우의 동작을 설명한다.
도 37의 (b)는 케이스 2에서의 명령의 흐름을 도시한 흐름도이다. 이 경우 도 36의 (f)에 도시된 바와 같이 정수 레지스터(320)에 0x0048d159가 저장되고, 유효비트수 레지스터(321)에 0b00(전체비트 무효)이 저장되어 있는 시점에서 인터럽트 처리에 들어가게 된다.
인터럽트 처리 중에서 정수 레지스터(320)를 세이브하는 경우 save IMR, (R15) 명령이 명령 레지스터(510)에 보유되어 실행된다. 실행 제어회로(300)는 이하의 제어를 행하고 명령을 실행한다.
정수 레지스터(320)의 저장값은 멀티플렉서(332)를 거쳐 오퍼랜드로서 오퍼랜드 액세스회로(312)에 입력된다. 한편 범용 레지스터(310)의 R15의 값이 연산기(311)의 B포트에 입력되고 단순히 통과하여 오퍼랜드 어드레스로서 오퍼랜드 액세스회로(312)에 입력된다.
실행 제어회로(300)는 제어신호(304)에 세이브 또는 복귀명령인 것을 나타내는 1을 출력하고 제어신호(302)에 「스토어」를 출력함으로써 세이브하고자 한다.
세이브복귀 무효화회로(301)에서는 유효비트수 레지스터(321)의 저장값이 0b00이고, 제어신호(304)가 1이므로 제어신호(302)는 세이브복귀 무효화회로(301) 중에서 무효화되어 제어신호(303)에는「무동작」이 출력된다. 따라서 오퍼랜드 액세스회로(312)는 아무것도 행하지 않는다. 또 유효비트수 레지스터(321)의 내용은 본 프로세서의 상태 레지스터의 일부로서 상태 레지스터의 세이브와 동시에 세이브가 행하여진다.
또 정수 레지스터(320)를 복귀하는 경우 우선 상태 레지스터에 있는 유효비트수 레지스터(321)의 내용 0b00이 복귀되고 그 후 restore(R15), IMR 명령이 명령 레지스터(510)에 보유되어 실행된다. 실행 제어회로(300)는 이하의 제어를 행하고 명령을 실행한다.
범용 레지스터(310)의 R15는 연산기(311)의 B포트에 입력되고 단순히 통과하여 오퍼랜드 어드레스로서 오퍼랜드 액세스회로(312)에 입력된다.
실행 제어회로(300)는 제어신호(304)에 세이브 또는 복귀명령인 것을 나타내는 1을 출력하고, 제어신호(302)에 「로드」를 출력함으로써 복귀하고자 한다.
세이브복귀 무효화회로(301)에서는 유효비트수 레지스터(321)의 저장값이 0b00이고, 제어신호(304)가 1이므로 제어신호(302)는 세이브복귀 무효화회로(301) 중에서 무효화되어 제어신호(303)에는「무동작」이 출력된다. 따라서 오퍼랜드 액세스회로(312)는 아무것도 행하지 않는다.
이와 같이 케이스 2의 경우에서는 오퍼랜드 액세스는 무효화되고, 외부 메모리(540)와의 실제 전송은 행해지지 않는다. 그 때문에 정수 레지스터분만큼 세이브/복귀에 의한 메모리 액세스 회수는 적어지고, 콘텍스트 스위칭의 처리시간은 단축된다. 본 실시예에서 나타낸 바와 같이 즉치(卽値)를 분할하여 배치하고, 정수 레지스터(320)에 축적하는 경우에 비트수가 큰 정수가 적을수록 정수 레지스터(320)가 유효한 것이 적다. 따라서 비트수가 큰 정수가 적은 프로그램만큼 본 발명의 효과는 보다 커진다.
도 38은 상기 케이스 1 및 2에서의 프로세서의 동작, 즉 정수 레지스터(320)의 값의 세이브 및 복귀에 대한 동작을 간략히 도시한 흐름도이다. 이 프로세서는 정수 레지스터(320)의 세이브 또는 복귀를 실행할 때에는(단계 S200), 유효비트수 레지스터(321)의 저장값을 참조하고, 그 저장값이 0b00이다. 즉 유효한 정수가 정수 레지스터(320)에 저장되어 있지 않거나 또는 저장되어 있지 않았던 취지를 나타내는 경우에는(단계 S201), 그와 같은 불필요한 세이브 및 복귀(단계 S202)를 행하지 않는다.
이상 제 2의 목적을 달성하기 위한 프로세서에 대하여 제 2 실시예에 기초하여 설명하였지만 본 발명은 이 제 2 실시예에 한정되지 않는 것은 물론이다. 즉,
(1) 제 2 실시예에서는 16비트 고정길이의 명령 포맷을 이용하여 즉치로서 13비트, 6비트를 이용하였지만 본 발명이 이들 비트수로 한정되는 것은 아니다. 또한 범용 레지스터(310), 정수 레지스터(320)는 32비트의 레지스터로 하였지만, 마찬가지로 본 발명은 이들 비트수로 한정되는 것은 아니다.
(2) 또한 제 2 실시예의 프로세서의 정수 레지스터(320)를 1개의 구성으로 설명하였지만, 본 발명은 정수 레지스터(320)가 복수개이어도 된다.
(3) 또한 제 2 실시예의 프로세서로서는 콘텍스트 스위칭의 세이브, 복귀의 예를 나타내고 있으나, 본 발명은 콘텍스트 스위칭과는 관계없는 정수 레지스터와 기억장치 사이의 전송을 행하는 경우에도 적용할 수 있다.
(4) 또한 제 2 실시예의 프로세서에서는 정수 레지스터(320)에 저장되어 있는 정수의 유효비트수를 나타내는 유효비트수 레지스터(321)를 설치하고 있지만, 유효/무효상태를 보유하는 레지스터라면 다른 형태의 레지스터라도 동일한 효과를 얻을 수 있다.
(5) 또한 제 2 실시예의 프로세서에서는 즉치를 사용하는 명령으로서 addi 명령을 예로 들었으나, 본 발명은 그 밖의 같은 즉치를 사용하는 명령이라면 어떤 명령이라도 된다.
(6) 또한 제 2 실시예의 프로세서에서는 정수 레지스터(320)의 세이브·복귀명령으로서 각각 save IMR, (Rn) 명령과 restore (Rn), IMR 명령을 정의하고 있지만, 다른 형태의 명령이어도 된다.
예를 들면 레지스터 리스트 형식의 오퍼랜드 중에서 정수 레지스터(320)의 세이브·복귀를 정의하는 것이나, 통상 콘텍스트에 포함되는 범용 레지스터(310) (Rn) 중 어느 하나 또는 상태 레지스터의 세이브·복귀와 맞물리게 하여 정수 레지스터(320)의 세이브·복귀를 정의하는 것이어도 된다. 후자는 예를 들면 R15나 상태 레지스터를 세이브·복귀하면 암묵적으로 정수 레지스터(320)도 세이브·복귀의 대상으로 된다고 하는 명령이다.
save IMR, (Rn) 명령이나 restore (Rn), IMR 명령이라는 명령에서는 정수 레지스터(320)의 세이브·복귀가 무효화되더라도 그들 전용의 명령이 존재하기 때문에 코드 크기가 증가한다는 문제가 있었지만, 상기한 바와 같이 함으로써 정수 레지스터(320)의 세이브·복귀만을 지정하는 명령이 불필요하게 되어 코드 크기가 삭감된다는 특유의 효과를 갖는다.
(7) 또한 제 2 실시예에서는 유효비트수 레지스터(321)의 값은 상태 레지스터의 일부로서 콘텍스트 스위칭시에 암묵적으로 세이브 및 복귀되었지만, 본 발명은 이 방법에 한정되지 않는다. 도 39에 도시된 바와 같이 유효비트수 레지스터(321)의 값만을 세이브 및 복귀하는 전용의 명령을 정의해도 된다. 또 도 39에서 IMB는 유효비트수 레지스터(321)를 도시하며, Rn은 세이브 또는 복귀해야 할 외부 메모리(540)의 어드레스를 저장하는 범용 레지스터(310)를 도시한다.
(8) 또한 제 2 실시예의 프로세서에서는 sfst 명령이나 addi 명령과 같이 1개의 명령으로 1개의 연산을 정의하는 명령을 실행하고 있지만, 제 1 실시예와 같이 1개의 명령으로 복수의 연산을 정의하는 소위 VLIW 형식의 명령을 실행하도록 해도 된다.
도 40은 제 1 실시예의 VLIW 프로세서에 제 2 실시예에서의 콘텍스트 스위칭의 기능을 부가한 것에 상당하는 VLIW 프로세서(600)의 기능블록도이다. 이 프로세서(600)의 실행부(630)는 제 2 실시예와 동일기능의 유효비트수 레지스터(631) 및 세이브복귀 무효화회로(632)를 구비한다.
도 41은 본 프로세서(600)가 실행하는 VLIW(670)의 예이다. 포맷 코드(51)가 0x0인 명령 670의 제 2 연산필드(60)에는, 정수 레지스터(R15)의 내용을b 범용 레지스터(R3)가 나타내는 외부 메모리의 기억영역에 세이브시키는 연산(save)이 배치되어 있다. 이 연산코드가 제 2 연산 디코더(25)에 의해 해독되면 정수 레지스터(36)의 내용은 제 2 연산부(38)를 통과하여 오퍼랜드 액세스부(40)에 보내진다. 그리고 세이브복귀 무효화회로(632)는 그 시점에서의 유효비트수 레지스터(631)의 값을 참조함으로써 도 38에 도시된 흐름도에 따라 오퍼랜드 액세스부(40)가 외부 메모리에 상기 내용을 세이브하는 것을 허가 또는 금지한다는 것이다.
상술한 바와 같이 제 1 실시예의 정수복원형 VLIW 프로세서에 제 2 실시예의 콘텍스트 스위칭기능을 부가함으로써 NOP 명령의 삽입에 따르는 코드 크기의 불필요한 비대화를 피하고, 또 태스크 스위치에서의 불필요한 콘텍스트의 세이브 및 복귀를 피한 프로세서, 즉 코드 크기의 축소화를 지원하며 태스크 스위칭을 고속실행하는 VLIW 프로세서가 실현된다.
상술한 본 발명의 바람직한 실시예들은 예시의 목적을 위해 개시된 것이며, 당업자라면 첨부된 특허청구의 범위에 개시된 본 발명의 사상과 범위를 통해 각종 수정, 변경, 대체 및 부가가 가능할 것이다.
도 1은 종래 기술에 관한 명령 포맷을 도시한 도면
도 2의 (a)는 본 발명에 관한 프로세서가 실행하는 명령의 필드 구성을 도시한 도면이고, 도 2의 (b)∼(d)는 16종류의 명령 포맷을 도시한 도면으로서, (b)는 3 연산, (c)는 2 연산, (d)는 1 연산을 동시에 지정할 수 있는 명령 포맷을 도시한 도면
도 3은 도 2에서 이용되는 3종류의 연산코드"cc", "op1"및"op2"각각 에 의해 지정되는 구체적인 연산을 나타낸 연산코드의 예시도
도 4는 본 발명에 관한 프로세서의 하드웨어 구성을 도시한 블록도
도 5는 본 발명에 관한 프로세서의 정수 레지스터(36) 및 그 주변회로의 상세한 구성을 도시한 블록도
도 6의 (a) ∼ (d)는 도 5에 도시된 정수 레지스터 제어부(32)에 의한 정수의 저장방법을 도시한 도면
도 6의 (a)는 포맷 코드가 "0"또는"1"인 경우, 도 6의 (b)는 포맷 디코드가 "4"인 경우, 도 6의 (c)는 포맷 디코드가 "5"인 경우, 도 6의 (d)는 포맷 코드가 "2","3"및 "A"중 어느 하나인 경우 또는 정수 레지스터(36)의 저장값이 오퍼랜드로서 지정되어 있는 경우의 저장방법을 도시한 도면
도 7은 본 발명에 관한 프로세서의 PC부(33)의 상세한 구성을 도시한 블록도
도 8은 32비트의 정수를 취급하는 처리의 예를 도시한 흐름도
도 9는 도 8에 도시된 처리를 본 발명에 관한 프로세서에 행하게 하는 프로그램 예시도
도 10은 도 9에 도시된 프로그램을 실행한 경우의 본 프로세서의 동작을 도시한 타이밍도
도 11은 16비트의 정수를 취급하는 처리를 본 발명에 관한 프로세서에 행하게 하는 프로그램 예시도
도 12의 (a)는 통상의 프로세서가 실행하는 명령의 필드정의를 도시한 도면이고, (b)는 통상의 프로세서의 명령 포맷을 도시한 도면
도 13은 도 9에 도시된 프로그램과 동일 내용의 처리를 상기 통상의 프로세서에 행하게 하는 프로그램 예시도
도 14는 도 11에 도시된 프로그램과 동일 내용의 처리를 상기 통상의 프로세서에 행하게 하는 프로그램 예시도
도 15는 제 1 변형예에 관한 정수 레지스터(36)의 주변회로의 구성을 도시한 블록도
도 16의 (a) ∼ (h)는 포맷 코드가 "0"또는"1"인 경우로서 각각 저장자리수 카운터(91)의 값이 0∼7일때의 정수 레지스터 제어부(90)에 의한 정수의 저장방법을 도시한 도면
도 17은 포맷 코드가 "4"인 경우로서 각각 저장자리수 카운터(91)의 값이 0∼7일때의 정수 레지스터 제어부(90)에 의한 정수의 저장방법을 도시한 도면
도 18은 포맷 코드가 "5"인 경우로서 각각 저장자리수 카운터(91)의 값이 0∼7일때의 정수 레지스터 제어부(90)에 의한 정수의 저장방법을 도시한 도면
도 19는 포맷 코드가 "2","3"및"A"중 어느 하나인 경우 또는 정수 레지스터(36)의 저장값이 오퍼랜드로서 지정되어 있는 경우의 정수 레지스터 제어부(90)에 의한 정수의 저장방법을 도시한 도면
도 20은 제 2 변형예에 관한 정수 레지스터(36)의 주변회로의 구성을 도시한 블록도
도 21은 도 20에 도시된 판독플래그 기억부(192)의 값의 변화를 도시한 천이도
도 22는 제 2 변형예에서의 정수 레지스터(36) 및 판독플래그 기억부(192)의 값의 변화를 도시한 것으로, (a)는 정수 레지스터(36)에 저장되어 있던 정수"0x87654321"이 판독된 직후의 내용을 도시하고, (b)∼(e)는 그 후에 4비트의 정수"0x8","0x7","0x6","0x5"가 차례로 저장된 직후의 내용을 도시하며, (f)는 도 22의 (e)에서의 정수"OxFFFF8765"가 판독된 직후의 내용을 도시한 도면
도 23은 제 3 변형예에 관한 정수 레지스터(36)의 주변회로의 구성을 도시한 블록도
도 24는 제 4 변형예에 관한 정수 레지스터(36)의 주변회로의 구성을 도시한 블록도
도 25는 제 5 변형예에 관한 정수 레지스터(36)의 주변회로의 구성 및 접속관계를 도시한 블록도
도 26은 판독플래그 기억부(28)의 값의 변화를 도시한 상태천이도
도 27은 24비트의 정수를 취급하는 처리의 예를 도시한 흐름도
도 28은 도 27에 도시된 처리내용을 본 변형예에 관한 프로세서에 행하게 하는 프로그램 예시도
도 29는 제 1 실시예의 프로세서에 도 27에 도시된 흐름도와 동일 내용의 처리를 행하게 하는 프로그램 예시도
도 30은 제 2 실시예에 관한 프로세서(500) 하드웨어 구성을 도시한 블록도
도 31은 유효비트수 레지스터(321)의 저장값과 정수 레지스터(320)의 유효비트수의 대응을 도시한 도면
도 32는 본 실시예에서의 설명에 사용하는 명령과 그 포맷을 도시한 도면
도 33은 정수 복원회로(322)의 상세한 구성을 도시한 블록도
도 34는 멀티플렉서(3224, 3225, 3226)와 다음 유효비트수 생성회로(3227)의 동작을 정의한 도면
도 35는 세이브복귀 무효화회로(301)의 상세한 구성을 도시한 도면
도 36의 (a)는 본 프로세서의 동작을 설명하기 위한 흐름도이고, (b)는 그것에 대응하는 프로그램 (명령 571∼573)의 리스트를 도시한 도면
도 37의 (a)는 유효비트수 레지스터(321)에 0b10(하위 26비트가 유효)이 저장되어 있는 시점에서 인터럽트 처리에 들어간 경우(케이스 1)의 명령의 흐름을 도시한 흐름도이고, (b)는 유효비트수 레지스터(321)에 0b00(전체비트 무효)이 저장되어 있는 시점에서 인터럽트 처리에 들어 간 경우(케이스 2)의 명령의 흐름을 도시한 흐름도
도 38은 케이스 1 및 2에서의 프로세서의 동작, 즉 정수 레지스터(320)의 값의 세이브 및 복귀에 대한 동작을 간략히 도시한 흐름도
도 39는 유효비트수 레지스터(321)의 값만을 세이브 및 복귀하는 전용의 명령 포맷을 도시한 도면
도 40은 제 1 실시예의 VLIW 프로세서에 제 2 실시예에서의 콘텍스트 스위칭의 기능을 부가한 것에 상당하는 VLIW 프로세서(600)의 기능블록도
도 41은 본 프로세서(600)가 실행하는 VLIW(670)의 예시도

Claims (11)

  1. 병렬 실행시키는 연산을 지정하기 위한 복수의 연산필드를 1명령 중에 포함하는 명령을 해독하여 실행하는 VLIW 프로세서로서,
    정수(定數)를 보유하기 위한 기억영역을 갖는 명령 보유수단:
    상기 복수의 연산필드를 병렬로 해독하고, 연산을 지정하는 대신에 원래의 정수가 분할된 분할정수가 배치되어 있는 것을 검출하는 해독수단:
    상기 해독수단에 의해 분할정수가 배치되어 있다고 검출되는 때에, 복수의 연산필드에 걸쳐 떨어져 배치되어 있는 복수의 분할정수를 상기 정수보유수단에 순차적으로 저장함으로써 원래의 정수를 복원하는 정수저장 제어수단: 및
    상기 정수저장 제어수단에 의해 상기 정수보유수단 내에 복원된 원래의 정수를 이용하여, 연산필드에 지정되어 있는 연산을 실행하는 실행수단을 포함하고,
    상기 정수저장 제어수단은,
    상기 정수보유수단에 제 1 분할정수를 저장한 후, 제 2 분할정수를 더 저장할 때,
    (1) 상기 정수저장수단에 저장되어 있는 제 1 분할정수를 제 2 분할정수의 자리수 만큼 시프트하거나, 또는
    (2) 상기 정수보유수단에 저장되어 있는 정수의 유효자리수를 나타내는 값을 참조함으로써, 적절한 위치에 제 2 분할정수를 저장하고, 상기 값을 제 2 분할정수의 자리수 만큼 갱신하며,
    상기 정보보유수단의 자리수 및 상기 원래의 정수의 자리수는 상기 제 1 분할정수가 배치되어 있는 연산필드의 자리수 및 상기 제 2 분할정수가 배치되어 있는 연산필드의 자리수보다 크고, 상기 제 1 분할정수가 배치되어 있는 연산필드의 자리수 및 상기 제 2 분할정수가 배치되어 있는 연산필드의 자리수는 어느 것이나 상기 실행수단에서 병렬실행할 수 있는 명령의 자리수보다 작은 것을 특징으로 하는 VLIW 프로세서.
  2. 제 1항에 있어서,
    상기 VLIW 프로세서는, 상기 원래의 정수 또는 상기 분할정수에 대하여 제로확장 및 부호확장 중 적어도 한쪽의 확장처리를 행하는 확장수단을 추가로 구비하는 것을 특징으로 하는 VLIW 프로세서.
  3. 제 2항에 있어서,
    상기 확장수단은 상기 정수보유사단에 저장되기 전의 상기 분할정수에 대하여 상기 확장처리를 행하는 것을 특징으로 하는 VLIW 프로세서.
  4. 제 2항에 있어서,
    상기 확장수단은 상기 정수보유수단으로부터 판독된 상기 원래의 정수에 대하여 상기 확장처리를 행하는 것을 특징으로 하는 VLIW 프로세서.
  5. 제 1항에 있어서,
    상기 정수저장 제어수단은 상기 정수보유수단의 상위 자리로부터 하위 자리를 향하여 차례로 상기 분할정수를 축적하여 저장하는 것을 특징으로 하는 VLIW 프로세서.
  6. 제 1항에 있어서,
    상기 정수저장 제어수단은 상기 정수보유수단의 상위 자리로부터 하위 자리를 향하여 차례로 상기 분할정수를 축적하여 저장하는 것을 특징으로 하는 VLIW 프로세서.
  7. 제 1항에 있어서,
    상기 정수저장 제어수단은 상기 실행수단에 의해 상기 정수보유수단에 저장된 상기 원래의 정수가 판독된 직후에 상기 정수보유수단에 제로를 저장하는 것을 특징으로 하는 VLIW 프로세서.
  8. 제 1항에 있어서,
    상기 실행수단은 상기 명령에 따라 분기 연산을 실행하는 분기 실행부를 갖고,
    상기 정수저장 제어수단은 상기 분기 실행부에 의해 분기연산이 실행된 경우에 상기 정수보유수단에 제로를 저장하는 것을 특징으로 하는 VLIW 프로세서.
  9. 제 1항에 있어서,
    상기 제 1 분할정수가 배치되어 있는 연산필드와, 상기 제 2 분할정수가 배치되어 있는 연산필드 사이의 연산필드에, 해당 제 1 분할정수 및 해당 제 2 분할정수를 이용하지 않는 연산이 적어도 하나 지정되어 있는 것을 특징으로 하는 VLIW 프로세서.
  10. 제 1항에 있어서,
    상기 제 1 분할정수와 상기 제 2 분할정수는 1 명령 중에 떨어져 배치되어 있는 것을 특징으로 하는 VLIW 프로세서.
  11. 제 1항에 있어서,
    상기 제 1 분할정수와 상기 제 2 분할정수는 복수의 명령에 걸쳐 배치되어 있는 것을 특징으로 하는 VLIW 프로세서.
KR1019980022513A 1997-06-16 1998-06-16 코드크기의축소화를지원하는정수복원형프로세서 KR100618247B1 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
JP9-159049 1997-06-16
JP15904997A JP3670801B2 (ja) 1997-06-16 1997-06-16 プロセッサ
JP???9-159049 1997-06-16
JP???9-234356 1997-08-29
JP23435697A JPH1173331A (ja) 1997-08-29 1997-08-29 プロセッサおよびコンテキストの退避または復帰の方法
JP9-234356 1997-08-29

Publications (2)

Publication Number Publication Date
KR19990007024A KR19990007024A (ko) 1999-01-25
KR100618247B1 true KR100618247B1 (ko) 2006-10-24

Family

ID=26485967

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980022513A KR100618247B1 (ko) 1997-06-16 1998-06-16 코드크기의축소화를지원하는정수복원형프로세서

Country Status (8)

Country Link
US (1) US6219779B1 (ko)
EP (1) EP0897147A3 (ko)
KR (1) KR100618247B1 (ko)
CN (1) CN1269052C (ko)
IL (1) IL124905A (ko)
MY (1) MY126508A (ko)
SG (1) SG66480A1 (ko)
TW (1) TW393623B (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3790607B2 (ja) * 1997-06-16 2006-06-28 松下電器産業株式会社 Vliwプロセッサ
JP3327818B2 (ja) * 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体
US6412063B1 (en) * 1999-04-02 2002-06-25 Via-Cyrix, Inc. Multiple-operand instruction in a two operand pipeline and processor employing the same
JP2001142695A (ja) * 1999-10-01 2001-05-25 Hitachi Ltd 記憶場所への定数のロード方法、宛先記憶場所への定数のロード方法、レジスタへの定数のロード方法、符号ビット数の決定方法、2進数の正規化方法、及びコンピュータシステム内の命令
US6950669B2 (en) 2000-07-05 2005-09-27 Telefonaktiebolaget Lm Ericsson (Publ) Power control algorithm for packet data based on queue/channel utilization
US7941651B1 (en) * 2002-06-27 2011-05-10 Intel Corporation Method and apparatus for combining micro-operations to process immediate data
EP1378824A1 (en) * 2002-07-02 2004-01-07 STMicroelectronics S.r.l. A method for executing programs on multiple processors and corresponding processor system
US8006071B2 (en) 2004-03-31 2011-08-23 Altera Corporation Processors operable to allow flexible instruction alignment
CN101484875A (zh) * 2006-07-11 2009-07-15 飞思卡尔半导体公司 微处理器以及用于寄存器在其中进行寻址的方法
KR20090027358A (ko) * 2007-09-12 2009-03-17 엘지이노텍 주식회사 디지털 지상파 및 케이블 복합튜너
GB2486905A (en) * 2010-12-30 2012-07-04 Cambridge Silicon Radio Ltd Amalgamating instructions by replacing unencoded space
JP6214142B2 (ja) * 2012-10-09 2017-10-18 キヤノン株式会社 情報処理装置、情報処理方法およびプログラム
US10540148B2 (en) * 2014-06-12 2020-01-21 Oracle International Corporation Complex constants
JP6372250B2 (ja) * 2014-08-25 2018-08-15 サンケン電気株式会社 演算処理装置
US10297003B2 (en) 2015-09-21 2019-05-21 Qualcomm Incorporated Efficient saving and restoring of context information for context switches
TWI707272B (zh) * 2019-04-10 2020-10-11 瑞昱半導體股份有限公司 可執行指令的電子裝置以及指令執行方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0395348A2 (en) * 1989-04-28 1990-10-31 Apple Computer, Inc. Method and apparatus for multi-gauge computation
EP0426393A2 (en) * 1989-11-01 1991-05-08 Fujitsu Limited Instructing method and execution system
US5423012A (en) * 1991-12-10 1995-06-06 Mitsubishi Denki Kabushiki Kaisha Apparatus and method in a computer for executing calculation instructions and data instructions having uniform word lengths
KR950033803A (ko) * 1994-05-26 1995-12-26 빈센트 비. 인그라시아 다중 비트 시프트 장치, 이것을 이용한 데이타 프로세서, 및 다중 비트 시프트 방법
JPH08161169A (ja) * 1994-12-09 1996-06-21 Toshiba Corp Vliw方式の計算機システム及びvliwの解釈・実行方法
KR960042329A (ko) * 1995-05-31 1996-12-21 모리시다 요이치 프로그램의 코드크기의 축소화를 지원하는 마이크로 프로세서

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3979725A (en) * 1973-08-06 1976-09-07 Xerox Corporation Multi-way program branching circuits
US4107781A (en) * 1976-10-27 1978-08-15 Texas Instruments Incorporated Electronic calculator or microprocessor with indirect addressing
US4740893A (en) * 1985-08-07 1988-04-26 International Business Machines Corp. Method for reducing the time for switching between programs
JPH0353328A (ja) * 1989-07-20 1991-03-07 Hitachi Ltd レジスタ退避回復方法ならびに処理装置
JPH0954693A (ja) 1995-08-11 1997-02-25 Toshiba Corp Vliwプロセッサ
JP3658072B2 (ja) * 1996-02-07 2005-06-08 株式会社ルネサステクノロジ データ処理装置およびデータ処理方法
US5890009A (en) * 1996-12-12 1999-03-30 International Business Machines Corporation VLIW architecture and method for expanding a parcel
JP3578883B2 (ja) * 1997-01-31 2004-10-20 三菱電機株式会社 データ処理装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0395348A2 (en) * 1989-04-28 1990-10-31 Apple Computer, Inc. Method and apparatus for multi-gauge computation
EP0426393A2 (en) * 1989-11-01 1991-05-08 Fujitsu Limited Instructing method and execution system
US5423012A (en) * 1991-12-10 1995-06-06 Mitsubishi Denki Kabushiki Kaisha Apparatus and method in a computer for executing calculation instructions and data instructions having uniform word lengths
KR950033803A (ko) * 1994-05-26 1995-12-26 빈센트 비. 인그라시아 다중 비트 시프트 장치, 이것을 이용한 데이타 프로세서, 및 다중 비트 시프트 방법
JPH08161169A (ja) * 1994-12-09 1996-06-21 Toshiba Corp Vliw方式の計算機システム及びvliwの解釈・実行方法
KR960042329A (ko) * 1995-05-31 1996-12-21 모리시다 요이치 프로그램의 코드크기의 축소화를 지원하는 마이크로 프로세서

Also Published As

Publication number Publication date
EP0897147A3 (en) 2001-10-10
KR19990007024A (ko) 1999-01-25
US6219779B1 (en) 2001-04-17
MY126508A (en) 2006-10-31
TW393623B (en) 2000-06-11
IL124905A (en) 2001-09-13
CN1269052C (zh) 2006-08-09
CN1204089A (zh) 1999-01-06
IL124905A0 (en) 1999-01-26
SG66480A1 (en) 1999-07-20
EP0897147A2 (en) 1999-02-17

Similar Documents

Publication Publication Date Title
KR100534967B1 (ko) 코드효율이높은초장명령어를실행하는프로세서
KR100618247B1 (ko) 코드크기의축소화를지원하는정수복원형프로세서
US6122724A (en) Central processing unit having instruction queue of 32-bit length fetching two instructions of 16-bit fixed length in one instruction fetch operation
JP2816248B2 (ja) データプロセッサ
EP1126368B1 (en) Microprocessor with non-aligned circular addressing
US6195740B1 (en) Constant reconstructing processor that execute an instruction using an operand divided between instructions
KR100254008B1 (ko) 2개의 명령을 동시에 실행할 수 있는 데이타 프로세서
KR19980069855A (ko) 넓은 데이터 폭의 프로세서에서 다기능 데이타 정렬기
JP2000500592A (ja) マイクロコードパッチング装置および方法
CN111406286A (zh) 具有数据元素提升的查找表
JPH07120278B2 (ja) データ処理装置
CN113924550A (zh) 直方图运算
US6209080B1 (en) Constant reconstruction processor that supports reductions in code size and processing time
US5673410A (en) System for aligning varying width instructions in a computer
US20020116599A1 (en) Data processing apparatus
JP3670801B2 (ja) プロセッサ
US6205535B1 (en) Branch instruction having different field lengths for unconditional and conditional displacements
US5269008A (en) Method and apparatus for pre-processing the source of a pop instruction in a pipeline computer
US20100115239A1 (en) Variable instruction width digital signal processor
JP2004005733A (ja) Vliwプロセッサ

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
B601 Maintenance of original decision after re-examination before a trial
J301 Trial decision

Free format text: TRIAL DECISION FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20050307

Effective date: 20060630

S901 Examination by remand of revocation
GRNO Decision to grant (after opposition)
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120802

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20130801

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20150716

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160721

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20170720

Year of fee payment: 12

EXPY Expiration of term