KR100436015B1 - 프로그램의코드크기의축소화를지원하는마이크로프로세서 - Google Patents

프로그램의코드크기의축소화를지원하는마이크로프로세서 Download PDF

Info

Publication number
KR100436015B1
KR100436015B1 KR1019960015261A KR19960015261A KR100436015B1 KR 100436015 B1 KR100436015 B1 KR 100436015B1 KR 1019960015261 A KR1019960015261 A KR 1019960015261A KR 19960015261 A KR19960015261 A KR 19960015261A KR 100436015 B1 KR100436015 B1 KR 100436015B1
Authority
KR
South Korea
Prior art keywords
instruction
register
code
address
word
Prior art date
Application number
KR1019960015261A
Other languages
English (en)
Other versions
KR960042329A (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 JP13328195A external-priority patent/JP3199603B2/ja
Priority claimed from JP13407895A external-priority patent/JP3199604B2/ja
Application filed by 마츠시타 덴끼 산교 가부시키가이샤 filed Critical 마츠시타 덴끼 산교 가부시키가이샤
Publication of KR960042329A publication Critical patent/KR960042329A/ko
Application granted granted Critical
Publication of KR100436015B1 publication Critical patent/KR100436015B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • 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/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30156Special purpose encoding of instructions, e.g. Gray coding
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted 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/3802Instruction 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/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching

Landscapes

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

Abstract

본 마이크로 프로세서의 해독 대상이 되는 명령은 1워드에 0.5워드 단위로 확장된 단어 길이가 되도록 정의되어 있다. 외부 메모리로부터 1워드 단위로 인출된 명령은 하프워드 단위로 독립적으로 동작하는 명령 버퍼(101, 102), 셀렉터(103)를 통하여 해독 레지스터(104)에 전송되고 해독부(105)에 의하여 해독된다. 명령 버퍼(102)의 명령 저장 상태는 기억부(110)에 기억된다. 제어부(109)는 해독부(105)로부터의 통지와 기억부(110)에 기억된 상태에 기초하여 명령버퍼(101, 102)에 저장된 명령을 하프워드 단위로 해독 레지스터(104)에 전송하도록 셀렉터(103)를 제어한다.

Description

프로그램의 코드 크기의 축소화를 지원하는 마이크로 프로세서
본 발명은 프로그램에 따라 데이터 처리를 실행하는 마이크로 프로세서에 관한 것으로, 특히 프로그램의 코드 크기의 축소화를 지원하는 마이크로 프로세서에 관한 것이다.
최근, 마이크로 프로세서를 이용한 제품은 점점 고기능화가 요구되고, 그에따라 프로그램은 대규모화되고 있다. 그런데, 마이크로 프로세서 내장형 제품에 있어서는 프로그램을 ROM화하여 실장할 필요가 있기 때문에, 그 코드 크기의 증대는 실장할 ROM의 용량이나 개수의 증대를 초래하고, 저가격 제품의 개발을 저해한다. 따라서, 이와 같은 제품의 개발에 있어서는 코드 크기를 가능한 한 압축하는 것이 바람직하다.
(제 1 종래기술)
코드 크기를 압축하기 위한 제 1 종래기술로서, 마이크로 프로세서가 실행하는 개개의 명령어 길이를 축소하는 방법이 있다(예를 들면, NEC사 제품 V800 시리즈, 히타치사 제품 SH7000 시리즈). 이들 마이크로 프로세서는 한 번에 취급하는 데이터 길이, 즉, 데이터 버스나 내부의 연산기, 레지스터의 비트폭(이하 「연산폭」이라함)보다도 작은 단어 길이로 이루어지는 명령의 세트를 구비하고 있다. 구체적으로는, 연산폭이 32비트임에도 불구하고 16비트로 이루어지는 명령을 구비하고 있다.
이와 같은 기술에 의하여 반드시 32비트를 필요로 하지 않는 명령을 16비트로 구성하거나, 사용 빈도가 높은 명령을 16비트로 구성하는 것이 가능하게 되고, 명령을 구성하는 불필요한 비트가 배제되어, 동일 내용의 프로그램이라도 전체의 코드 길이는 효율적으로 압축된다.
그러나, 이러한 제 1 종래기술에는 다음과 같은 문제점이 있다.
즉, 연산폭보다 작은 단어 길이로 이루어지는 명령을 구비하고 있어도 그들의 단어 길이는 마이크로 프로세서가 가지는 명령 해독기의 비트폭과 같거나 그 정수배이다. 예를 들어, 명령 해독기의 비트폭이 8비트이면 명령어길이는 8, 16, 24, 32...중 어느 하나이다. 그 때문에, 명령어 길이를 축소화하여도 8비트보다도 작은 단위로는 축소화할 수 없고, 예를 들어, 8비트를 필요로 하지 않는 수치를 지정하는 경우에도 8비트를 이용하여 지정하지 않을 수 없기 때문에, 여전히 코드 크기면에서는 불필요한 부분이 존재한다.
도 1은 종래의 마이크로 프로세서의 명령의 비트 구성을 설명하기 위한 도면이다. 지금, "레지스터 d0에 저장된 값에 즉치값(immediate value) 4를 가산한다"는 명령 "add #4, d0"을 생각해 본다. 이 명령어 길이는 오퍼레이션 코드 "add#4, d0"을 특정하는 8비트와, 즉치값 #n을 지정하는 8비트, 즉 합계 16비트이다.여기에서는 8비트를 이용하여 즉치값 "4"를 지정하고 있지만, 예를 들어, -8 내지 +7 범위의 정수를 지정하는 것이라면 4비트이면 충분하다. 즉, 종래의 마이크로 프로세서에 의하면, 합계 12비트라면 특정할 수 있는 명령이라도 16비트로 구성하고 있었기 때문에, 여전히 코드 크기면에서 불필요한 부분이 있다.
(제 2 종래기술)
또, 코드 크기를 압축하기 위한 제 2 종래기술로서 데이터 전송 명령 등에 이용되는 어드레싱 모드를 고안하는 방법, 즉 메모리의 판독 기입의 효율화에 의한 방법이 있다.
이 종래기술을 도 2의 (a) 및 도 2의 (b)의 구체예를 참조하면서 설명한다. 도 2는 메모리의 판독 기입을 실행하기 위한 프로그램예이다.
도 2의 (a) 및 도 2의 (b)의 프로그램예는 모두 『메모리의 유지값을 판독하고, 그 유지값을 이용하여 연산을 행하며, 그 결과를 원래의 메모리에 저장한다』 는 단순한 메모리의 판독 기입을 나타내고 있다.
도 2의 (a)에서의 명령 a1은 절대 어드레스(abs16)로 어드레스가 지정된 메모리의 유지값을 레지스터 D0에 로드(load)하는 로드 명령이며, 명령 a2는 레지스터 D0과 레지스터 D1을 가산하여 그 결과를 레지스터 D0에 저장하는 가산 명령이다. 명령 a3은 레지스터 D0의 유지값을 절대 어드레스로 지정된 어드레스에 저장하는 저장 명령이다. 이들 명령의 기본 단어 길이는 8비트 길이로 하고 있다.
또, 절대 어드레스를 16비트 길이로 하고 있다. 그 때문에, 도 2의 (a)의 프로그램예의 총코드 크기는 7바이트로 되어 있다. 즉, 메모리의 판독 기입에 7바이트의 코드 크기가 소비되는 것을 알 수 있다.
이 도 2의 (a)의 프로그램예에서는 16비트 길이의 절대 어드레스에 의하여 메모리 액세스를 실행하고 있었다. 이 2회의 절대 어드레스에서의 메모리 액세스를 어드레스 레지스터를 이용하여 실현한 것이 도 2의 (b)의 프로그램예에 의한 판독 기입이다.
도 2의 (b)의 프로그램예가 도 2의 (a)의 프로그램예와 다른 것은, 첫째로 도 2의 (b)의 프로그램예에서는 사전에 어드레스 레지스터에 절대 어드레스를 전송하고 있는 점이다(명령 b1). 또, 둘째로 도 2의 (b)의 프로그램예가 어드레스 레지스터를 이용하여 어드레스를 지정함으로써 메모리로부터 레지스터 D0으로의 전송을 실행하는 점이다(명령 b2). 셋째로, 어드레스 레지스터를 이용하여 어드레스를 지정함으로써 계산 결과를 메모리에 저장하고 있는 점이다(명령 b4).
이 도 2의 (b)의 프로그램예에 의한 판독 기입에서는 어드레스 레지스터로의 전송이라는 전송 명령이 필요하게 되지만, 절대 어드레스를 포함하는 명령이 하나로 되어 있기 때문에(명령 b1), 총 바이트수가 6바이트가 되고, 도 2의 (a)의 프로그램예보다 1바이트 감소하고 있는 것을 알 수 있다.
이와 같이 메모리의 판독 기입의 코드 크기를 작게 할 수 있다면, 내장(built-in) 용도의 소프트웨어에서는 상당량의 코드 크기를 압축할 수 있다.
그러나, 이 제 2 종래기술에 의하면, 코드 크기를 압축하기 위해 어드레스 레지스터가 점유되어 버린다는 문제점이 있다. 특히 어드레스 레지스터가 적은 프로세서에서는 항상 상기 도 2의 (b)의 방법을 이용할 수 있다고는 할 수 없다. 또, 내장 용도에 있어서는 메모리의 판독 기입이 빈번하므로, 상기 도 2의 (b)에서 메모리의 판독 기입을 실행하면 어드레스 레지스터를 다른 용도로 이용할 수 없게 된다.
따라서, 본 발명은 이러한 문제점을 감안하여 이루어진 것이며, 마이크로 프로세서가 갖는 명령 해독기의 비트폭의 정수배로 제한되지 않고, 효율적으로 단어 길이가 축소화된 명령 세트를 갖는 마이크로 프로세서를 제공하며, 이로써 동일 내용이라도 코드 크기가 압축된 프로그램의 작성을 가능하게 하는 것을 제 1 목적으로 하고 있다.
또, 본 발명의 제 2 목적은 어드레스 레지스터를 점유하지 않고 코드 크기의 축소를 도모할 수 있는 프로세서를 제공하는 것을 목적으로 한다.
도 1은 종래의 마이크로 프로세서의 명령 비트 구성을 나타내는 도면.
도 2의 (a)는 2회의 절대 어드레스 지정으로 기술된 종래의 프로그램예를 나타내는 도면.
도 2의 (b)는 어드레스 레지스터를 이용한 로드(load) 명령, 저장 명령으로 기술된 종래의 프로그램을 나타내는 도면.
도 3은 본 발명의 제 1 실시예에 관한 마이크로 프로세서의 구성을 나타내는 블록도.
도 4는 제 1 실시예에 관한 마이크로 프로세서의 명령 해독(解讀) 블록(100)의 상세한 구성을 나타내는 블록도.
도 5는 제 1 실시예에 관한 마이크로 프로세서의 IB(102)의 코드의 저장 상태를 나타내는 도면.
도 6은 제 1 실시예에 관한 마이크로 프로세서가 실행하는 명령의 2종류의 포맷을 나타내는 도면.
도 7의 (a)는 제 1 실시예의 5니블(nibble) 길이의 명령 포맷을 나타내는 도면.
도 7의 (b)는 도 7의 (a)에 나타낸 명령이 외부 메모리 상의 바이트 경계에위치되어 있는 경우의 각 코드 배치를 나타내는 도면.
도 7의 (c)는 도 7의 (a)에 나타낸 명령이 명령 해독 블록(100)에 의해 판독된 경우의 각 클록 사이클의 명령 파이프라인의 흐름을 나타내는 도면.
도 8의 (a)는 도 7의 (a)에 나타낸 명령이 외부 메모리 상의 하프바이트 경계에 위치되어 있는 경우의 각 코드 배치를 나타내는 도면.
도 8의 (b)는 도 7의 (a)에 나타낸 명령이 명령 해독 블록(100)에 의해 판독된 경우의 각 클록 사이클의 명령 파이프라인의 흐름을 나타내는 도면.
도 9는 제 1실시예의 무조건 분기 명령 jmp의 포맷을 나타내는 도면.
도 10은 제 1 실시예에서 jsr 명령이 실행된 경우, 각 마이크로 프로세서의 동작을 나타내는 흐름도.
도 11의 (a)는 제 1 실시예에서 외부 메모리 상의 바이트 경계에 위치되어 있는 jsr 명령과 복귀 번지의 관계를 나타내는 도면.
도 11의 (b)는 제 1 실시예에서 외부 메모리 상의 하프바이트 경계에 위치되어 있는 jsr 명령과 복귀 번지의 관계를 나타내는 도면.
도 12는 본 발명의 제 2 실시예의 마이크로 프로세서의 구성을 나타내는 블록도.
도 13은 OAB(5), LDB(6), STB(7), IAB(10), IFB(11)의 역할을 설명하기 위한 설명도.
도 14의 (a)는 PA 어드레싱에서의 명령 포맷을 나타내는 도면.
도 14의 (b)는 PA 어드레싱에 의한 로드 명령을 설명하기 위한 설명도.
도 14의 (c)는 PA 어드레싱에 의한 저장 명령을 설명하기 위한 설명도.
도 15의 (a)는 PA 어드레싱을 이용하여 기술된 프로그램예를 나타내는 도면.
도 15의 (b)는 2회의 절대 어드레스 지정으로 기술된 프로그램예를 나타내는 도면.
도 15의 (c)는 어드레스 레지스터를 이용한 로드 명령, 저장 명령으로 기술된 프로그램을 나타내는 도면.
도 16은 도 12에 나타낸 각 구성의 동작예를 설명하기 위한 타이밍차트.
도 17은 도 12에 나타낸 각 구성의 동작예를 설명하기 위한 타이밍차트.
도 18은 도 12의 OAB(5) 주변의 구성을 확대하여 나타낸 도면.
도 19의 (a)는 인터럽트 처리 발생전의 스택 내용을 나타내는 도면.
도 19의 (b)는 인터럽트 처리시의 스택 내용을 나타내는 도면.
도 20는 제 3 실시예에 관한 OAB 어레이의 구성을 나타내는 도면.
도 21의 (a)는 PA 어드레싱에서의 명령 포맷을 나타내는 도면.
도 21의 (b)는 PA 어드레싱에 의한 저장 명령의 니모닉(mnemonic) 도면.
도 22는 OAB 어레이 내의 OAB(52)의 지정으로 기술한 프로그램예와, 그 프로그램에 의하여 OAB 어레이가 어떻게 동작하는지를 나타내는 설명도.
도 23의 (a)는 제 3 실시예의 인터럽트전의 스택 저장 내용을 나타내는 도면.
도 23의 (b)는 제 3 실시예의 인터럽트시의 스택 저장 내용을 나타내는 도면.
도 24는 제 3 실시예의 응용예를 설명하기 위한 설명도.
* 도면의 주요 부분에 대한 부호의 설명 *
101, 102 : 명령 버퍼 103 : 셀렉터
104 : 해독 레지스터 105 : 해독부
109 : 제어부 110 : 기억부
상기 제 1 목적을 달성하기 위하여, 본 발명은 청구항 1에 기재하는 바와 같이, 프로그램의 코드 크기의 축소화를 지원하는 마이크로 프로세서로서, 단어길이(w)가 w = a + nb(단, a는 이 해독기가 한 번에 해독하는 코드의 단어 길이, b는 a보다 작은 양의 정수, n은 0 이상의 정수)로 나타나는 명령을 해독하고, 적어도 단어 길이(w)가 a인 명령과 단어 길이(w)가 a + b인 명령을 해독하는 해독기와, 상기 해독기에 의한 해독 결과에 기초하여 데이터 처리를 실행하는 실행 수단을 포함하는 구성으로 하고 있다.
이 마이크로 프로세서에 의하면, 해독기가 해독하는 대상이 되는 명령의 단어 길이는 해독기가 한 번에 해독하는 코드의 단어 길이 a의 정수배로 한정되지 않는다.
따라서, 단어 길이 a보다도 작은 단어 길이 b를 단위로 하여 명령의 단어 길이를 확장하여 정의할 수 있다. 즉, 명령을 구성하는 코드 중에 사용되지 않는 불필요한 비트가 포함되는 비율을 저감할 수 있다.
이로써, 동일 내용의 프로그램이라도 코드 크기가 축소된 프로그램의 작성이 가능하게 된다는 효과가 있다.
또, 청구항 2에 기재하는 바와 같이, 상기 b는 상기 a를 1워드로 한 경우에 하프워드인 구성으로 할 수도 있다.
이 마이크로 프로세서에 의하면, 명령의 단어 길이는 하프워드를 단위로 하여 확장된 값이 된다. 즉, 명령의 단어 길이(w)는 a, 1.5a, 2a, 2.5a, 3a,....중 어느 하나가 된다. 이로써, 단어 길이 a를 단위로 하여 확장된 명령의 경우와 비교하여 코드를 지정할 때의 정보량은 단어 길이 a의 상반부인지 하반부인지를 특정하기 위한 비트수, 즉, 1비트분의 증가로 족하고, 하프워드를 단위로 하여 세밀한 명령을 정의하거나 데이터를 지적할 수 있다는 효과가 있다.
또, 청구항 3에 기재하는 바와 같이, 선행 인출(prefetch)한 명령을 유지하는 명령 버퍼와, 상기 명령 버퍼의 명령의 하프워드 단위로의 저장 상태를 기억하는 기억 수단과, 상기 해독기에 의한 해독 결과에 기초하여 다음에 해독할 코드의 단어 길이가 하프워드인지 1워드인지를 판단하는 제 1 판단 수단과, 상기 제 1 판단 수단에 의하여 판단된 단어 길이와 상기 기억 수단에서의 저장 상태에 기초하여 상기 명령 버퍼에 저장된 코드를 상기 해독기에 도입하도록 상기 명령 버퍼를 제어함과 동시에 그 저장 상태를 갱신하는 제어 수단을 포함하는 구성으로 할 수도 있다.
이 마이크로 프로세서에 의하면, 선행 인출된 명령은 명령 버퍼에 유지되고, 명령 버퍼의 명령의 하프워드 단위로의 저장 상태가 기억되고 갱신된다. 또, 다음에 판독할 코드의 단어 길이가 하프워드인지 1워드인지가 판단된다.
이로써, 다음에 판독할 코드가 명령 버퍼에 어떻게 배치되어 있는가를 하프워드 단위로 판단하는 것이 가능하게 된다.
또, 청구항 4에 기재하는 바와 같이, 상기 해독기는 해독하는 1워드의 코드를 하프워드씩 분할하여 유지하는 상위측 해독 레지스터와 하위측 해독 레지스터로 이루어지고, 상기 명령 버퍼는 가장 최근에 인출한 1워드의 코드를 유지하는 제 1 레지스터와, 그 직전에 인출한 1 워드의 코드를 유지하는 제 2 레지스터와, 상기 제어 수단으로부터의 지시에 기초하여 복수의 코드로부터 선택한 하나의 코드를 상기 해독기에 전송하는 선택 수단으로 이루어지며, 상기 제 1 레지스터는 1워드의 코드를 하프워드씩 분할하여 유지하는 상위측 제 1 레지스터와 하위측 제 1 레지스터로 이루어지고, 상기 제 2 레지스터는 1워드의 코드를 하프워드씩 분할하여 유지하는 상위측 제 2 레지스터와 하위측 제 2 레지스터로 이루어지며, 상기 선택 수단은 적어도 상기 상위측 제 2 레지스터와 상기 하위측 제 2 레지스터와 상기 하위측 해독 레지스터로부터 선택한 하나의 레지스터에 유지되어 있는 코드를 상기 상위측해독 레지스터에 전송하는 상위측 선택 수단과, 적어도 상기 하위측 제 1 레지스터와 상기 상위측 제 2 레지스터와 상기 하위측 제 2 레지스터로부터 선택한 하나의 레지스터에 유지되어 있는 코드를 상기 하위측 해독 레지스터에 전송하는 하위측 선택 수단으로 이루어지고, 상기 기억 수단은 상기 상위측 제 2 레지스터 및 상기 하위측 제 2 레지스터의 어느 것에도 코드가 유지되어 있지 않은 제 1 상태와, 상기 상위측 제 2 레지스터에는 코드가 유지되어 있지만, 상기 하위측 제 2 레지스터에는 코드가 유지되어 있지 않은 제 2 상태와, 상기 상위측 제 2 레지스터 및 상기 하위측 제 2 레지스터에 코드가 유지되어 있는 제 3 상태중 어느 하나의 저장 상태를 기억하는 구성으로 할 수도 있다.
이 마이크로 프로세서에 의하면, 인출된 1워드의 코드는 하프워드 단위로 분할하여 명령 버퍼에 유지됨과 동시에, 그들 중에서 선택된 코드는 하프워드 단위로 독립하여 해독 레지스터에 전송된다. 또, 기억 수단에는 해독 레지스터에 전송되기 직전의 명령 버퍼에서의 코드 저장 상태가 기억되어 있다.
이로써, 명령 버퍼에 유지된 필요한 코드는 하프워드 단위로 독립하여 해독 레지스터에 전송되어 해독되는 것이 가능하게 된다.
또, 청구항 5에 기재하는 바와 같이, 상기 제어 수단은 상기 기억 수단에 기억되어 있는 상태가 제 2 상태이며, 상기 제 1 판단 수단에 의하여 다음에 해독할 코드의 단어 길이가 1워드라고 판단된 경우에는, 상기 상위측 선택 수단이 상기 상위측 제 2 레지스터에 유지되어 있는 코드를 상기 상위측 해독 레지스터에 전송하고, 상기 하위측 선택 수단이 상기 하위측 제 1 레지스터에 유지되어 있는 코드를상기 하위측 해독 레지스터에 전송하도록 상기 선택 수단을 제어하는 구성으로 할수도 있다.
이 마이크로 프로세서에 의하면, 제 1 레지스터와 제 2 레지스터에 걸쳐서 유지된 1워드 길이의 코드가 해독 레지스터에 전송되어 실행된다.
이로써, 외부 메모리 상의 2개의 번지에 걸쳐서 위치된 1워드 길이의 코드라도 정확하게 해독되어 실행되므로, 코드를 외부 메모리에 배치할 때의 워드 얼라이먼트에 의한 제약으로부터 자유로워진다.
또, 청구항 6에 기재하는 바와 같이, 상기 제어 수단은 상기 기억 수단에 기억되어 있는 상태가 제 3 상태이며, 상기 제 1 판단 수단에 의하여 다음에 해독할 코드의 단어 길이가 하프워드라고 판단된 경우에는, 상기 상위측 선택 수단이 상기 하위측 해독 레지스터에 유지되어 있는 코드를 상기 상위측 해독 레지스터에 전송하고, 상기 하위측 선택 수단이 상기 하위측 제 2 레지스터에 유지되어 있는 코드를 상기 하위측 해독 레지스터에 전송하도록 상기 선택 수단을 제어함과 동시에 상기 기억 수단에 기억하는 상태를 제 2 상태로 갱신하는 구성으로 할 수도 있다.
이 마이크로 프로세서에 의하면, 하위측 제 2 레지스터에 유지된 하프워드의 코드만이 해독 레지스터에 전송되고, 이미 해독된 하프워드의 코드와 함께 해독되어 실행된다.
청구항 6에 기재하는 마이크로 프로세서에 의하면, 외부 메모리 상의 하위 위치에 위치된 하프워드 길이의 코드라도 정확하게 해독되어 실행된다.
또, 청구항 7에 기재하는 바와 같이, 상기 제어 수단은 상기 기억 수단에 기억되어 있는 상태가 제 2 상태이며, 상기 제 1 판단 수단에 의하여 다음에 해독할 코드의 단어 길이가 하프워드라고 판단된 경우에는, 상기 상위측 선택 수단이 상기 하위측 해독 레지스터에 유지되어 있는 코드를 상기 상위측 해독 레지스터에 전송하고, 상기 하위측 선택 수단이 상기 하위측 제 2 레지스터에 유지되어 있는 코드를 상기 하위측 해독 레지스터에 전송하도록 상기 선택 수단을 제어함과 동시에 상기 기억 수단에 기억하는 상태를 제 3 상태로 갱신하는 구성으로 할 수도 있다.
이 마이크로 프로세서에 의하면, 상위측 제 2 레지스터에 유지된 하프워드의 코드만이 해독 레지스터에 전송되고, 이미 해독된 하프워드의 코드와 함께 해독되어 실행된다.
청구항 7에 기재하는 마이크로 프로세서에 의하면, 외부 메모리 상의 상위의 위치에 위치된 하프워드 길이의 코드라도 정확하게 해독되어 실행된다.
또, 청구항 8 항에 기재하는 바와 같이, 상기 기억 수단에 기억된 저장 상태와 상기 해독기에서의 해독 결과에 기초하여 상기 해독기에 의하여 해독된 명령이 하프워드로 종료하는 외부 메모리 상의 위치에 위치되어 있던 서브루틴 분기 명령인지의 여부를 판단하는 제 2 판단 수단을 구비하고, 상기 실행 수단은 상기 명령이 하프워드로 종료하는 외부 메모리 상의 위치에 위치되어 있던 서브루틴 분기 명령이라고 판단된 경우에는, 그 위치에 해당하는 메모리 번지에 하프워드의 코드에 상당하는 번지를 가산한 메모리 번지를 서브루틴으로부터의 복귀 번지로 간주하여 서브루틴으로의 분기 처리를 실행하는 구성으로 할 수도 있다.
이 마이크로 프로세서에 의하면, 해독기에 의하여 해독된 명령이 하프워드로종료하는 메모리 상의 위치에 위치되어 있던 서브루틴 분기 명령인지 아닌지가 판단되고, 이 명령이라고 판단된 경우에는 그 위치에 해당하는 메모리 번지에 하프워드의 코드에 상당하는 번지를 가산한 메모리 번지를 서브루틴으로부터의 복귀 번지라고 간주하여 서브루틴으로의 분기 처리가 실행된다.
이로써, 외부 메모리 상의 하프워드 경계에 위치된 서브루틴 분기 명령을 실행하는 경우라도, 그 명령이 워드 경계에 위치되어 있던 경우와 같은 비트수로 이루어지는 복귀 번지를 세이브하는 것만으로 충분하다. 따라서, 스택으로의 액세스 빈도가 감소함과 동시에 스택의 불필요한 소비를 회피할 수 있다.
이로써, 동일 내용의 프로그램을 실행한 경우라도, 그 처리량을 향상시킬 수 있는 효과가 있다.
상기 제 2 목적을 달성하기 위하여, 본 발명은 청구항 9에 기재하는 바와 같이, 프로그램의 코드 크기의 축소화를 지원하는 마이크로 프로세서로서, 외부 메모리에 접속되고, 메모리 액세스 목표의 어드레스를 유지하는 오퍼랜드 어드레스 버퍼와, 명령을 인출하는 인출(fetch) 수단과, 상기 인출 수단에 의하여 인출된 명령중 메모리 액세스를 수반하는 명령을 검출하는 명령 검출 수단과, 상기 명령 검출 수단에 의하여 검출된 명령이 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스를 액세스 목표로서 지정하고 있는지의 여부를 판정하는 판정 수단과, 상기 판정 수단에 의하여 지정되어 있다고 판정된 경우에는 그 어드레스를 외부 메모리에 출력하도록 상기 오퍼랜드 어드레스 버퍼를 제어하는 제 1 제어 수단과, 지정되어 있지 않다고 판정된 경우에는 그 명령의 오퍼랜드 어드레스를 오퍼랜드 어드레스 버퍼에저장하여 그 어드레스를 외부 메모리에 출력하도록 오퍼랜드 어드레스 버퍼를 제어하는 제 2 제어 수단을 포함하도록 구성하고 있다.
이 마이크로 프로세서에 의하면, 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스가 메모리 액세스 목표로 지정되어 있는 경우, 유지 내용이 메모리에 출력 되도록 오퍼랜드 어드레스 버퍼가 제어되므로, 절대 어드레스 지정을 실행하지 않고, 또 어드레스 레지스터를 이용하지 않아도 메모리 액세스를 실행하는 것이 가능하게 된다.
또, 내장 용도에 있어서, 메모리 매핑된 I/O 포트가 다수 있고, 이들의 판독 기입를 빈번하게 실행하는 경우에도, 이들 판독 기입으로 어드레스 레지스터가 점유되지 않으므로, 어드레스 레지스터의 이용 효율이 향상된다.
또, 동일 I/O 포트를 소정 시간 간격으로 감시하는 경우 등으로서, 동일 I/O포트의 값을 반복하여 로드하는 경우, 혹은 I/O 포트를 통하여 주변 기기를 제어하는 경우 등으로서, 동일 I/O 포트의 값을 소정 시간 간격으로 재기입하는 경우, 상기 판독 기입의 경우와 마찬가지로 오퍼랜드 어드레스 버퍼의 유지 내용을 메모리 액세스 목표로 함으로써 어드레스 레지스터의 이용 효율을 향상시킬 수 있다.
이와 같이, 어드레스 레지스터의 이용 효율을 향상시키면, 어드레스 레지스터에 절대 어드레스를 전송하는 처리나, 어드레스 레지스터의 유지 내용을 세이브 · 복원하는 처리의 빈도가 낮아지고, 또 어드레스 레지스터를 폭넓은 용도로 다양하게 이용할 수 있으므로, 소프트웨어면에서의 코드 크기를 크게 저감할 수 있다.
또한, 코드 크기의 저감뿐만 아니라 오퍼랜드 어드레스 버퍼의 유지값을 메모리 액세스 목표로 하는 경우에는, 그 유지값을 메모리에 출력하는 오퍼랜드 어드레스 버퍼가 제어되므로, 어드레스 계산을 실행하는 회수가 보다 적어지고, 또 어드레스 계산을 실행하기 위한 논리 연산부로의 전송 처리나 계산된 어드레스를 오퍼랜드 어드레스 버퍼로 전송하는 처리의 회수도 보다 적어지므로, 실행 속도를 크게 향상시킬 수 있다.
또, 청구항 11에 기재하는 바와 같이, 프로그램의 코드 크기의 축소화를 지원하는 마이크로 프로세서로서, 외부 메모리에 접속되고, 직전으로부터 n회째까지의 메모리 액세스의 n + 1개의 어드레스를 유지하는 n + 1단의 오퍼랜드 어드레스 버퍼를 갖는 버퍼 어레이와, 명령을 인출하는 인출 수단과, 상기 인출 수단에 의하여 인출된 명령 중 메모리 액세스를 수반하는 명령을 검출하는 명령 검출 수단과, 검출된 명령이 상기 버퍼 어레이 중의 어떤 오퍼랜드 어드레스 버퍼를 지정하는 정보를 포함하고 있는지의 여부를 판정하는 판정 수단과, 정보를 포함하고 있다고 판정된 경우, 그 정보로 지정된 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스를 외부 메모리에 출력하도록 버퍼 어레이를 제어하는 제 1 제어 수단과, 정보를 포함하고 있지 않다고 판정된 경우, 그 명령의 오퍼랜드 어드레스를 오퍼랜드 어드레스 버퍼에 저장하고, 그 오퍼랜드 어드레스를 외부 메모리에 출력하도록 버퍼 어레이를 제어하는 제 2 제어 수단을 포함하는 구성으로 할 수도 있다.
이 마이크로 프로세서에 의하면, 직전부터 n회 전(前)까지의 메모리 액세스의 n + 1개의 메모리 액세스 목표의 어드레스가 n + 1단의 오퍼랜드 어드레스 버퍼에 유지되어 있고, 이들 n + 1개의 메모리 액세스 목표의 어드레스를 선택적으로출력시킬 수 있으므로, 직전부터 n회 전까지의 메모리 액세스의 메모리 액세스 목표를 적절히 선택할 수 있다. 또, 이와 같이 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스를 이용하면 절대 어드레스 지정을 실행하지 않고, 또 어드레스 레지스터를 이용하지 않아도 메모리 액세스를 실행할 수 있다.
[실시예]
이하 본 발명의 실시예에 대하여 도면을 이용하여 상세히 설명한다.
(제 1 실시예)
제 1 실시예는 특수한 단어 길이의 명령을 해독할 수 있는 마이크로 프로세서에 관한 것이다.
< 마이크로 프로세서의 구성 >
도 3는 본 발명의 제 1 실시예에 관한 마이크로 프로세서의 구성을 나타내는 블록도이다. 본 마이크로 프로세서는 크게 나누어 데이터 패스 블록(200) 및 명령해독 블록(100)으로 구성되고, 16비트의 외부 어드레스 버스(212)와 8비트의 외부 데이터 버스(213)를 갖는다. 또, 실행의 대상이 되는 명령이 위치되어 있는 외부 메모리는 도시되어 있지 않지만, 이들 버스를 통하여 본 마이크로 프로세서와 접속되어 있다.
데이터 패스 블록(200)은 데이터의 전송이나 연산을 실행하는 블록이며, 셀렉터(SEL)(201), 레지스터군(202), 내부 A 버스(203) 내부 B 버스(204), 해독용 카운터(DECPC)(205), 선행 인출 카운터(PFC)(206), 증분기(INC; incrementer)(207), 연산기(ALU)(208), 어드레스 버퍼(ADB)(209), 저장 데이터 버퍼(STB)(210) 및 로드데이터 버퍼(LDB)(211)로 구성되고, 그들의 기능은 통상의 마이크로 프로세서와 다른 점은 없다.
또, 스택 포인터(SP)(202a), 해독용 카운터(DECPC)(205), 선행 인출 카운터(PFC)(206), 증분기(INC)(207) 및 어드레스 버퍼(ADB)(209)는 어드레스 정보를 유지하는 구성부이며, 16비트폭이다. 한편, 범용 레지스터(REG)(202b), 저장 데이터 버퍼(STB)(210) 및 로드 데이터 버퍼(LDB)(211)는 데이터 정보를 유지하는 구성부이며, 8비트폭이다. 데이터 패스 블록(200)과 명령 해독 블록(100)은 내부 B 버스(204)에 의하여 접속되어 있다.
도 4는 명령 해독 블록(100)의 상세한 구성을 나타내는 블록도이다.
명령 해독 블록(100)은 외부 메모리로부터 인출한 명령을 해독하는 블록이며, 명령 인출 버퍼(IFB)(101), 명령 버퍼(IB)(102), 명령 셀렉터(SI)(103), 명령 레지스터(IR)(104), 해독부(105), 실행부(108), 제어부(109) 및 기억부(110)로 구성된다.
IFB(101)는 외부 메모리로부터 외부 데이터 버스를 통하여 인출한 1워드의 코드를 저장하는 레지스터이다.
여기에서, 워드란 명령을 해독할 때의 단위를 말하고, 본 마이크로 프로세서 에서는 8비트, 즉, 1바이트이다. 따라서, 본 실시예에서는 16비트의 어드레스 버스에 의하여 특정되는 외부 메모리의 하나의 번지에는 1워드, 즉, 1바이트분의 코드가 위치되어 있다.
또, 명령이란 본 마이크로 프로세서에 대한 논리적인 일괄 정리의 지시를 말하고, 예를 들면, "add #4, d0" 등이 해당한다. 한편, 코드란 명령이 부호화된 비트 배열의 전체 또는 부분을 말하고, 예를 들면, 명령 "add #4, d0"에 대응하는 비트 배열 "0c2 (hex)"나 그 부분인 "0c" 등이 해당한다.
IFB(101)는 인출한 코드의 상위 4비트(이하, 4비트의 단위를 「니블(nibble)」이라 한다)를 저장하는 상위측 명령 인출 버퍼(IFBH)(101a)와 하위의 1니블을 저장하는 하위측 명령 인출 버퍼(IFBL)(101b)로 이루어진다. 또, 데이터 패스 블록(200)의 선행 인출 카운터(PFC)(206)에는 이 IFB(101)에 인출되어 있는 코드가 위치되어 있던 외부 메모리의 번지가 유지된다.
IB(102)는 IFB(101)로부터 출력된 코드를 저장하는 레지스터이며, IFB(101)와 마찬가지로 상위측 명령 버퍼(IBH)(102a)와 하위측 명령 버퍼(IBL)(102b)로 이루어진다. 또, IFB(101)와 IB(102)에 유지된 코드는 후술하는 실행부(108)로부터의 지시에 따라 도시되어 있지 않은 셀렉터를 통하여 내부 B 버스(204)에 출력되어 데이터 패스 블록(200)에 전송된다.
IR(104)은 해독하는 대상이 되는 1바이트의 코드를 저장하는 레지스터이며, 상위 1 니블의 코드를 저장하는 상위측 명령 레지스터(IRH)(104a)와 하위 1 니블의 코드를 저장하는 하위측 명령 레지스터(IRL)(104b)로 이루어진다. 또, 데이터 패스 블록(200)의 해독용 카운터(DECPC)(205)에는 이 IR(104)에 인출되어 있는 코드가 위치되어 있던 외부 메모리의 번지가 유지된다.
상기 IFB(101), IB(102) 및 IR(104)에 의하여 3단의 명령 파이프라인이 형성되고, 선행 판독된 2바이트의 코드와 해독되어 있는 1바이트의 코드를 합한 합계 3바이트의 코드가 이 명령 파이프라인에 저장된다.
SI(103)는 후술하는 제어부(109)로부터의 지시에 따라 IBH(102a), IBL(102b)및 IRL(104b)로부터 선택한 하나의 레지스터에 저장되어 있는 1니블의 코드를 IRH(104a)에 전송하는 상위측 명령 셀렉터(SIH)(103a)와, IFBL(101b), IBH(102a) 및 IBL(102b)로부터 선택한 하나의 레지스터에 저장되어 있는 1니블의 코드를 IRL(104b)에 전송하는 하위 명령 셀렉터(SIL)(103b)로 이루어지고, 이들은 독립하여 동작한다.
기억부(110)는 IB(102)에 저장되어 있는 코드의 저장 상태를 수치로 대응시켜서 기억하고 있다. 구체적으로는, 도 5에 나타내는 3가지 상태중 어느 하나의 상태를 기억하고 있다. 상태 S0은 IBH(102a)와 IBL(102b)에 코드가 저장되어 있지않은 상태를 나타내고, 상태 S1은 IBH(102a)에는 코드가 저장되어 있지만, IBL(102b)에는 코드가 저장되어 있지 않은 상태를 나타내고, 상태 S2는 IBH(102a)와 IBL(102b)에 코드가 저장되어 있는 상태를 나타낸다.
해독부(105)는 기억부(110)에 기억되어 있는 상태를 참조함과 동시에, IR(104)에 저장되어 있는 1바이트의 코드를 해독하고, 그 결과를 실행부(108) 및 제어부(109)에 통지한다. 해독부(105)는 코드를 복호하는 일반적인 기능을 가지는 외에, 특정의 판단을 실행하기 위한 코드 크기 판단부(107) 및 워드 얼라인먼트 판단부(106)를 갖는다.
코드 크기 판단부(107)는 다음에 해독한 코드의 단어 길이가 1니블인지 1바이트인지를 판단하고, 그 결과를 제어부(109)에 통지한다.
제어부(109)는 코드 크기 판단부(107)로부터의 통지와 기억부(110)에 기억되어 있는 상태에 기초하여 SI(103)을 제어함과 동시에 기억부(110)에 기억시키는 상태를 갱신한다.
워드 얼라인먼트 판단부(106)는 해독한 명령이 외부 메모리 상의 하프바이트 경계에 위치되어 있던 서브루틴 분기 명령인지 아닌지를 판단하고, 그 결과를 실행부(108)에 통지한다. 여기에서, 하프바이트 경계란 바이트 경계에 대한 용어이며, 외부 메모리 상의 하나의 번지에 대응하는 기억 영역, 즉 1바이트의 기억 영역의 중앙 위치, 즉 상위 니블과 하위 니블의 경계를 말한다. 한편, 바이트 경계란 외부 메모리 상의 하나의 번지에 대응하는 1바이트의 기억 영역과 그 이웃의 번지에 대응하는 1바이트의 기억 영역과의 경계를 말한다.
실행부(108)는 해독부(105)에서의 해독 결과에 따라 명령 해독 블록(110)이나 데이터 패스 블록(200)의 각 구성부를 제어하고, 데이터전송이나 연산을 실행한다. 또, 실행부(108)로부터 출력되는 제어 신호는 각 구성부에 보내지지만, 그 접속은 도 3 및 도 4에는 나타나 있지 않다. 또, 실행부(108)를 포함하는 모든 구성 부는 도시되어 있지 않은 클록 신호에 동기하여 동작하고, 클록 사이클을 단위로 하여 동작 내용이 변화한다.
<명령 포맷>
이어서, 이상과 같이 구성된 마이크로 프로세서의 명령 포맷에 대하여 설명한다. 도 6는 그 명령 포맷을 설명하기 위한 비트의 구성도이다. 본 마이크로 프로세서가 해독하여 실행할 수 있는 모든 명령은 포맷 1(도 6의 (a)) 또는 포맷 2(도6의 (b)) 중 어느 하나로 분류된다.
포맷 1로 분류되는 명령은, 1바이트 길이의 기본 명령어에 1니블 단위로 확장어가 부가되는 가변 길이의 구성이 된다. 모든 명령은 기본 명령어와 그것에 이어지는 확장어로 구성되지만, 확장어를 가지지 않는 경우도 있다. 여기에서, 기본 명령어란 명령의 종류를 특정하는 오퍼레이션 코드이며, 해독부(105)가 해독하는 대상이 되는 것을 말한다. 확장어란 기본 명령어에 의한 연산 등의 조작의 대상이 되는 데이터(디스플레이스먼트(displacement)나 즉치값 등)를 말하고, 해독부(105)가 해독하는 대상은 되지 않는다.
예를 들면, "즉치값 2를 레지스터 d0에 저장된 값에 가산한다"라는 명령 "add #2, d0"은 기본 명령어 "0c(hex)"와 명령어 "2"로 구성되는 "0c2(hex)"라는 코드로 표현된다. 기본 명령어 "0c"는 "이어지는 1니블의 확장어의 값을 레지스터 d0의 값에 가산한다"라는 연산 조작을 의미한다. 이 예와 같이, 본 마이크로 프로세서에 의하면, 1니블로 표현할 수 있는 수치와 레지스터 값과의 연산을 지시하는 명령이라면 합계 3니블, 즉 12비트라면 족하다. 그런데, 1바이트를 명령의 확장 단위로 하는 종래의 마이크로 프로세서라면 상술과 동일 내용의 명령이라도 확장어를 "02(hex)"로 하지 않을 수 없기 때문에 합계 16비트가 필요하게 된다.
따라서, 포맷 1로 나타내는 명령이면, 불필요한 정보가 배제되므로 동일 내용의 지시를 하는 명령이라도 보다 적은 비트수로 구성할 수 있다.
한편, 포맷 2로 분류되는 명령은 3니블 길이의 기본 명령어에 1니블 단위로 확장어가 부가되는 가변 길이의 구성이 된다. 예를 들면, "즉치값 ff(hex)와 레지스터 d0에 저장된 값과의 배타적 논리합을 취한다"라는 명령 "XOR #ff, d0"은 기본 명령어 "208(hex)"과 확장어 "ff(hex)"로 이루어지고, "208 ff(hex)"라는 코드로 표현된다. 기본 명령어 "208"은 "이어지는 1바이트의 확장어의 값과 레지스터 d0의 값과의 배타적 논리합을 취한다"라는 연산 조작을 의미한다. 이 명령의 경우에는 기본 명령어인 3니블이 해독부(105)에 의하여 해독된다.
또, 포맷 2의 기본 명령어는 제 1 니블의 코드를 "2" 또는 "3"으로 정의하고 있다. 즉, 기본 명령어의 코드가 "2xx(hex)" 또는 "3xx(hex)"가 되도록 정의하고 있다. 이것은 제 1 니블의 값만으로 그 명령이 2종류의 명령 포맷 중 어느 하나인가를 구별하기 위해서이다.
이상의 설명에서 알 수 있는 바와 같이, 본 마이크로 프로세서의 명령 세트는 8, 12, 16, 20, 24,...와 같은 식으로, 최소가 8비트 길이이며, 이것에 4비트 단위로 확장된 단어 길이로 되어 있다. 즉, 각 명령의 단어 길이는 명령 해독기의 비트폭(8비트)보다도 작은 비트수(4비트)를 단위로 하여 확장된 값으로 정의되어 있다. 따라서, 이들 명령 세트를 이용함으로써 명령 해독기의 비트폭(8비트)의 단위로 확장된 명령을 이용하는 경우에 비하여, 동일 내용의 프로그램이라도 불필요한 코드를 배제할 수 있으므로, 전체의 코드 크기를 압축할 수 있다.
<마이크로 프로세서의 동작>
이어서, 이상과 같이 정의된 명령 세트를 구비하는 본 마이크로 프로세서의 동작에 대하여 설명한다.
또, 본 마이크로 프로세서는 명령의 단어 길이가 해독부(105)의 입력의 단어길이(7비트)보다도 작은 단어 길이(4비트)의 단위로 확장되어 있는 점에 특징이 있으므로, 이 점에 기인하는 특징적인 동작에 대하여 설명하고, 8비트 단위로 확장된 명령 세트를 구비하는 종래의 마이크로 프로세서와 같은 동작에 대한 설명은 생략한다. 데이터 패스 블록(200)의 동작은 종래의 마이크로 프로세서의 경우와 마찬가지이므로 그 설명은 생략하고, 명령 해독 블록(100)의 동작을 중심으로 설명한다.
<해독예 1>
우선, 명령이 외부 메모리의 바이트 경계로부터 시작되는 위치에 위치되어 있는 경우의 명령 해독 블록(100)의 동작에 대하여 설명한다.
도 7은 5니블 길이의 명령이 마이크로 프로세서에 의하여 해독되어 실행되는 경우의 동작을 설명하기 위한 도면이다.
도 7의 (a)는 그 명령의 포맷을 나타내는 도면이며, 3니블의 기본 명령어와 2니블의 확장어로 이루어진다. 여기에서는 설명의 편의상, 명령을 구성하는 코드를 니블 단위로, A, B, C, D, E로 나타내고 있다. 도 7의 (b)는 이 명령이 외부 메모리에 위치되어 있는 경우의 각 코드의 배치를 나타내는 도면이다. 또, 기본 명령어와 확장어에서는 외부 메모리에 위치되어 있을 때의 각 코드의 배치 순서가 다르다.
도 7의 (c)는 이 명령이 명령 해독 블록(100)에 로드된 경우의 각 클록 사이클의 명령 파이프라인, 즉 IFB(101), IB(102), IR(104)에 저장되는 각 1바이트분의 코드와 기억부(110)에 기억되는 상태를 나타내는 표이다. 또, 도 7의 (c)의 표에 기입되어 있는 기호 "-"는 이 명령의 실행과는 관계없는 것을 나타내고 있다.
클록 사이클 1에서, 명령의 최초 1바이트의 코드 "BA"가 IFB(101)에 인출된다.
이어서, 클록 사이클 2에서, 이어지는 1바이트의 코드 "EC"가 IFB(101)에 인출됨과 동시에, IFB(101)에 저장되어 있던 코드 "BA"는 IB(102)에 전송된다. 또, 코드의 인출이나 명령 파이프라인의 전송은 클록 사이클마다 보내져오는 실행부(108)로부터의 지시에 따라 실행된다. 클록 사이클 2에서는 이 명령 직전의 명령 해독이 종료되어 있으므로 상태는 S2로 되어 있다.
클록 사이클 3이 개시되면, 우선 제어부(109)는 기억부(110)에 기억되어 있는 상태가 S2인 것을 알 수 있는 동시에, 코드 크기 판단부(107)로부터 "다음에 해독할 코드의 단어 길이는 1바이트이다"라는 취지의 통지를 받는다. 그 결과, 제어부(109)는 IB(102)에 저장되어 있는 1바이트분의 코드를 IR(104)에 전송하도록 SI(103)에 선택 신호를 출력함과 동시에, 상태 S2를 기억부(110)에 기입한다. 그 선택 신호에 기초하여 SIH(103a)는 IBL(102b)에 저장되어 있던 코드 "A"를 IRH(104a)에 전송하고, SIL(103b)은 IBH(102a)에 저장되어 있던 코드 "B"를 IRL(104b)로 전송한다.
그 결과, IR(104)에 전송된 코드 "AB"는 해독부(105)에 의하여 해독된다. 코드 크기 판단부(107)는 이 명령의 제 1 니블의 코드 "A"를 해독함으로써 이 명령은 포맷 2, 즉 기본 명령어는 3니블 길이인 것을 알 수 있고, "다음에 해독할 코드의 단어 길이는 나머지 기본 명령어의 단어 길이, 즉 1니블이다"라고 판단한다.
클록 사이클 4에서는, 제어부(109)는 기억부(110)에 기억되어 있는 상태가S2인 것을 알 수 있는 동시에, 코드 크기 판단부(107)로부터 "다음에 해독할 코드의 단어 길이는 1니블이다"라는 취지의 통지를 받는다. 그 결과, 제어부(109)는 IBL(102b)에 저장되어 있는 코드를 IRL(104b)에 전송하도록 SI(103)에 선택 신호를 출력함과 동시에, 상태 S1을 기억부(110)에 기입한다. 그 선택 신호에 기초하여 SIH(103a)는 IRL(104b)에 저장되어 있던 코드 "B"를 IRH(104a)에 전송하고, SIL(103b)는 IBL(102b)에 저장되어 있던 코드 "C"를 IRL(104b)로 전송한다.
그 결과, IR(104)에 전송된 코드 "BC"는 해독부(105)에 의하여 해독된다. 실행부(108)는 해독부(105)에서의 해독 결과에 기초하여 IFB(101) 및 IB(102)에 저장되어 있는 확장어 "DE"를 내부 B 버스(204)를 통하여 데이터 패스 블록(200)에 전송하고, 필요한 데이터 처리를 실행함으로써 5니블 길이의 명령 실행을 종료한다.
여기에서, 기본 명령어의 제 1 니블 "A"는 이 명령이 3니블 길이라는 정보만을 가지고, 이어지는 명령 "BC"가, 이 명령의 실질적인 내용(예를 들면, "레지스터의 값과 즉치값을 가산한다" 등)을 가지도록 정의되어 있다. 따라서, 실행부(108)는 코드 "BC"의 해독 결과에 기초하여 실행할 때에는 이미 실행한 코드 "AB"의 해독 결과를 필요로 하지 않는다.
이상과 같이 하여, 3니블 길이의 기본 명령어는 그 단어 길이가 해독부(105)의 입력 단어 길이의 1.5배임에도 불구하고, 해독부(105)에 의하여 정확하게 해독되어 실행된다.
<해독예 2>
이어서, 명령이 외부 메모리의 바이트 경계로부터 시작되는 위치에 위치되어있는 경우의 명령 해독 블록(100)의 동작에 대하여 설명한다.
이 명령의 포맷은 도 7의 (a)에 나타낸 해독예 1의 포맷과 동일하게 한다.
도 8의 (a)는, 이 명령이 외부 메모리에 위치되어 있는 경우의 배치를 니블단위로 나타내는 도면이다. 명령은 바이트의 경계는 아니고, 하프바이트 경계에 위치되어 있는 점이 도 7의 (b)에 나타낸 해독예 1의 경우와 다르다. 이 해독예 1과 다른 점을 중심으로 설명한다.
도 8의 (b)는 명령 파이프라인의 흐름을 나타내는 표이며, 해독예 1의 도 7의 (c)에 대응한다.
클록 사이클 1에서 제 1 니블의 코드 "A"가 IFB(101)에 인출되고, 이어지는 클록 사이클 2에서 1바이트의 코드 "BC"가 IFB(101)에 인출된다. 이 클록 사이클 2에서는, 이 명령 직전의 명령의 최종 니블이 하프바이트 경계에 위치되어 있었으므로 상태는 SI로 되어 있다.
클록 사이클 3이 개시되면, 우선 제어부(109)는 기억부(110)에 기억되어 있는 상태가 S1인 것을 알 수 있는 동시에, 코드 크기 판단부(107)로부터 "다음에 해독할 코드의 단어 길이는 1바이트이다"라는 취지의 통지를 받는다. 그 결과, 제어부(109)는 IFB(101)와 IB(102)에 걸쳐서 저장되어 있는 1바이트의 코드를 IR(104)에 전송하도록 SI(103)에 선택 신호를 출력함과 동시에, 상태 S1을 기억부(110)에 기입한다. 그 선택 신호에 기초하여 SIH(103a)는 IBH(102a)에 저장되어 있던 코드 "A"를 IRH(104a)에 전송하고, SIL(103b)은 IFBL(101b)에 저장되어 있던 코드 "B"를 IRL(104b)로 전송한다.
그 결과, IR(104)에 전송된 코드 "AB"는 해독부(105)에 의하여 해독된다. 코드 크기 판단부(107)는 이 명령의 제 1 니블의 코드 "A"를 해독함으로써 이 명령은 포맷 2, 즉 기본 명령어는 3니블 길이인 것을 알 수 있고, "다음에 해독할 코드의 단어 길이는 나머지 기본 명령어의 단어 길이, 즉 1니블이다"라고 판단한다.
클록 사이클 4에서는, 제어부(109)는 기억부(110)에 기억되어 있는 상태가 S1인 것을 알 수 있는 동시에, 코드 크기 판단부(107)로부터 "다음에 해독할 코드의 단어 길이는 1니블이다"라는 취지의 통지를 받는다. 그 결과, 제어부(109)는 IBH(102a)에 저장되어 있는 코드를 IRL(104b)에 전송하도록 SI(103)에 선택 신호를 출력함과 동시에 상태 S2를 기억부(110)에 기입한다. 그 선택 신호에 기초하여 SIH(103a)는 IRL(104b)에 저장되어 있던 코드 "B"를 IRH(104a)에 전송하고, SIL(103b)은 IBH(102a)에 저장되어 있던 코드 "C"를 IRL(104b)로 전송한다.
그 결과, IR(104)에 전송된 코드 "BC"는 해독부(105)에 의하여 해독된다. 실행부(108)는 해독부(105)에서의 해독 결과에 기초하여 IB(102)에 저장되어 있는 확장어 "DE"를 내부 B 버스(204)를 통하여 데이터 패스 블록(200)에 전송하고, 필요한 데이터 처리를 실행함으로써 5니블 길이의 명령 실행을 종료한다.
이상과 같이 하여, 외부 메모리의 하프바이트 경계에 위치되어 있는 명령이라도 본 마이크로 프로세서에 의하여 정확하게 해독되어 실행된다.
<분기예 1>
이어서, 하프바이트 경계로부터 시작되는 프로그램으로 분기하기 위한 분기 명령 포맷 및 본 프로세서의 동작에 대하여 설명한다.
도 9는 무조건 분기 명령 jmp의 포맷을 나타낸다. 이 명령은 8비트의 기본 명령어와 16비트의 확장어를 합한 6니블 길이의 코드로 구성된다.
그런데, 본 마이크로 프로세서에서는, 명령이 외부 메모리의 하프바이트 경계로부터 시작되는 위치에 위치되는 경우가 있으므로, 분기선의 메모리 번지를 특정하기 위해서는 16비트로는 부족하다. 즉, 16비트로 특정되는 메모리 번지라도 그 번지의 상위 니블 또는 하위 니블의 어느 하나에 위치된 명령으로 분기할 것인지를 지정할 필요가 있다. 그 때문에, 무조건 분기 명령인 것을 특정하기 위한 8비트의 기본 명령어에 분기 목표 번지를 특정하기 위한 17비트 이상의 확장어를 합한 단어 길이, 즉 7니블 길이의 명령으로 할 수도 있다.
그러나, 7니블 길이의 코드를 이용하여 jmp 명령을 정의한 것에서는 이 코드중에 실질적으로 사용되지 않는 3비트분의 불필요한 코드가 포함되게 되어, 코드 크기의 축소화가 저해된다.
그래서, 도 9에 나타내는 바와 같이, jmp 명령의 기본 명령어의 최하위 비트를 분기 목표의 명령이 외부 메모리 상의 하프바이트 경계에 위치되어 있는지의 여부를 나타내기 위한 정보로서 정의하고 있다. 즉, 기본 명령어의 최하위 1비트와 확장어의 2바이트를 합한 합계 17비트에 의하여 분기 목표의 메모리 번지가 특정되도록 jmp 명령의 코드를 정의하고 있다. 이로써, 무조건 분기 명령 jmp는 7니블 길이는 아니고 6니블 길이의 코드로 압축하여 정의되므로 불필요한 코드의 발생이 회피된다.
이어서, 이 jmp 명령이 실행되는 경우의 본 마이크로 프로세서의 동작을 설명한다.
지금 이 3바이트 길이의 jmp 명령이 외부 메모리로부터 인출되어 IFB(101), IB(102) 및 IR(104)에 유지되어 있다고 가정한다.
해독부(105)는 IR(104)에 저장되어 있는 기본 명령어의 최하위 비트의 정보만을 제어부(109)에 보낸다. 제어부(109)는 보내온 정보가 "1"인 경우에는 상태 S1을 기억부(110)에 기입하고, "0"인 경우에는 상태 S2를 기입한다.
동시에, 해독부(105)는 IR(104)에 저장되어 있는 기본 명령어의 상위 7비트 분의 코드를 해독함으로써, 이 명령이 무조건 분기 명령인 것을 실행부(108)에 통지한다. 이 통지를 받은 실행부(108)는 IFB(101) 및 IB(102)에 저장되어 있는 16비트분의 분기 목표 번지를 데이터 패스 블록(200)에 전송하고, 다시 외부 어드레스 버스(212)에 출력시킨다. 그 결과, 외부 어드레스 버스(212)에 의하여 지정된 메모리 번지로부터 시작되는 외부 메모리 상의 명령이 1바이트 단위로 명령 해독 블록(100)에 도입되어간다.
분기 목표의 선두 1바이트분의 코드가 IB(102)에 전송되면 제어부(109)는 다음의 클록 사이클에서 해독할 코드를 결정하기 위하여 기억부(110)에 기억되어 있는 상태에 따라서 SI(103)를 제어한다.
구체적으로는, 기억부(110)에 상태 S2가 기억되어 있던 경우에는, 제어부(109)는 IB (102)에 유지되어 있는 1바이트 분의 코드를 IR(104)에 전송하도록 SI(103)를 제어한다. 이 제어는 상술한 해독예 1의 클록 사이클 3에서의 제어와 마찬가지이며, 외부 메모리 상에 위치되어 있던 바이트 경계로부터 시작되는 명령을 해독하는 것에 상당한다. 즉, 이 경우는 바이트 경계에 대한 분기 처리에 해당한다.
한편, 기억부(110)에 상태 S1이 기억되어 있던 경우에는, 제어부(109)는 IFB(101)와 IB(102)에 걸치는 1바이트 분의 코드를 IR(104)에 전송하도록 SI(103)를 제어한다. 이 제어는 상술한 해독예 1의 클록 사이클 3에서의 제어와 마찬가지이며, 외부 메모리 상에 위치되어 있던 하프바이트 경계로부터 시작되는 명령을 해독하는 것에 상당한다. 즉, 이 경우는 하프바이트 경계에 대한 분기 처리에 해당한다.
이상의 동작에 의하여 3바이트 길이의 무조건 분기 명령 jmp에 의한 바이트 경계 또는 하프바이트 경계에 대한 분기 처리가 종료된다.
<분기예 2>
이어서, 분기후에 복귀할 메모리 번지가 하프바이트 경계인 경우, 서브루틴 분기 명령(이하, 「jsr 명령」이라 한다)을 실행한 본 프로세서의 동작에 대하여 설명한다.
여기에서, jsr이란 지정된 메모리 번지에 대한 분기 처리에 앞서서 이 명령이 위치되어 있는 메모리 번지의 다음 번지를 복귀 번지로 하여 스택 포인터(SP)(202a)가 나타내는 기억 영역(이하, 간단히 「스택」 이라 한다)에 세이브해 두는 처리를 수반하는 것과 같은 분기 명령을 말한다. 이 명령은 서브루틴의 종료를 지시하는 리턴(return) 명령과 쌍으로 이용된다. 리턴 명령이 실행되면 스택에 세이브하고 있던 복귀 번지를 읽어내고, 그 번지로 복귀하는 처리가 실행된다.
그런데, 외부 메모리상의 하프바이트 경계로 복귀하는 경우를 고려하면, 분기예 1에서 설명한 바와 같이, 복귀 번지를 지정하려면 17비트가 필요하게 된다. 따라서, 스택에 세이브하는 복귀 번지의 코드는 2바이트로는 부족하고 3바이트가 필요하게 된다. 즉, jsr 명령이나 리턴명령을 실행할때마다 스택에 대하여 3회씩 액세스할 필요가 생긴다.
그러나, 동일 내용의 프로그램에 있어서도 스택으로의 액세스 빈도가 많아지면, 그 처리에 요하는 시간만큼 마이크로 프로세서에 의한 처리량이 저하된다. 특히, C 언어로 작성된 프로그램에서는 일반에 스택을 사용하는 빈도가 많기 때문에 그 처리량은 스택으로의 액세스 회수의 영향을 강하게 받는다.
그래서, 본 마이크로 프로세서에서는 복귀 번지가 하프바이트 경계가 되는 경우라도 스택으로의 세이브가 2바이트로 충분하도록 고안하고 있다. 이하에 그 내용에 대하여 설명한다.
jsr 명령의 포맷은 도 9에 나타낸 무조건 분기 명령과 동일하다. 즉, 이 명령은 1바이트의 기본 명령어에 2바이트의 확장어를 부가한 합계 3바이트로 구성되고, 분기 목표 번지를 기본 명령어의 최하위 비트와 확장어의 16비트를 합한 합계 17비트에 의하여 특정된다. 따라서 분기선이 외부 메모리의 바이트 경계이거나 하프바이트 경계라도 분기예 1의 경우와 마찬가지로 실행된다.
이어서, jsr 명령이 실행된 경우의 본 마이크로 프로세서의 동작에 대하여도 10에 나타낸 흐름도를 이용하여 설명한다.
이 명령의 기본 명령어가 IR(104)에 저장되면, 워드 얼라인먼트 판단부(106)는 이 명령이 jsr 명령인 것을 인식함과 동시에 기억부(110)에 기억되어 있는 상태를 참조함으로써 이 명령이 외부 메모리 상의 바이트 경계에 위치되어 있었는지 하프바이트 경계에 위치되어 있었는지를 판단하고, 그 결과를 실행부(108)에 통지한다(스텝 S81).
이 명령이 외부 메모리 상의 바이트 경계에 위치되어 있었다는 취지의 통지를 받은 실행부(108)는 이 명령 자체의 단어 길이는 상술한 정의대로 6니블이라고 인식하고(스텝 S82), 이 명령의 직후에 위치되어 있는 명령의 메모리 번지, 즉 16비트로 표시되는 바이트 경계를 나타내는 메모리 번지를 스택으로 세이브한다(스텝 S84). 도 11의 (a)는 외부 메모리 상의 바이트 경계에 위치되어 있는 jsr 명령과 복귀 번지의 관계를 나타내는 도면이다.
한편, 이 명령이 외부 메모리 상의 하프바이트 경계에 위치되어 있었다는 취지의 통지를 받은 실행부(108)는 이 명령 자체의 단어 길이는 6니블이 아니고 7니블이라고 간주하고(스텝 S83), 이 7니블 길이의 명령의 직후에 위치되어 있는 명령의 메모리 번지, 즉, 16비트로 표시되는 바이트 경계를 나타내는 메모리 번지를 스택으로 세이브한다(스텝 S84). 구체적으로는, 실행부(108)는 이 명령이 위치되어 있던 메모리 번지를 해독용 카운터(DECPC)(205)로부터 판독하여 연산부(ALU)(208)로 보내고, 이 명령 자체가 7니블 길이라고 한 경우의 복귀 번지를 산출하고, 그것을 스택에 기입하도록 각 구성부를 제어한다. 도 11의 (b)는 외부 메모리 상의 하프바이트 경계에 위치되어 있는 jsr 명령과, 복귀 번지의 관계를 나타내는 도면이다.
복귀 번지를 스택에 세이브한 후의 동작은 분기예 1에서의 동작과 마찬가지이며, 실행부(108)는 이 명령의 하위 17비트로 특정되는 서브루틴의 선두 번지에 분기하기 위한 처리를 실행한다(스텝 S85).
이상과 같이 하여, 이 jsr 명령이 외부 메모리 상의 바이트 경계 또는 하프 바이트 경계 중 어느 하나의 위치에 배치되어 있는 경우라도 스택에 세이브하는 복귀 번지는 2바이트로 족하다.
또, 서브루틴의 처리를 마치고, 리턴 명령을 실행한 경우에는 실행부(108)는 스택에 세이브되어 있던 2바이트의 복귀 번지를 판독하여 어드레스 버퍼(ADB)(209)에 저장하고, 그 번지로부터 시작되는 명령을 실행하도록 각 구성부를 제어한다.
그런데, 이상과 같이 jsr 명령이 실행되는 전제로서 jsr 명령과 그 다음의 명령이 상술한 동작과 정합하여 외부 메모리 상에 배치되어 있을 필요가 있다. 즉, jsr 명령을 외부 메모리 상의 하프바이트 경계에 배치한 경우에는 그 다음의 명령은 그 jsr 명령이 6니블 길이가 아니고 7니블 길이의 명령이라고 간주하여, 외부 메모리 상에 배치해둘 필요가 있는 것은 물론이다. 그 처리는 일반적으로 링커(linker)라고 불리우는 메모리 번지 할당 프로그램에 의하여 실현되는 것이며, 본 마이크로 프로세서의 동작과는 직접적으로는 관계하지 않으므로 그 설명은 생략한다.
이상의 설명에서 알 수 있는 바와 같이, 본 마이크로 프로세서에서는 jsr 명령이 실행된 경우에는 그 명령이 위치되어 있는 메모리 번지의 경계에 상관없이 항상 2바이트의 복귀 번지를 세이브하는 것만으로 족하다. 따라서, 3바이트의 복귀번지를 세이브하는 경우에 비하여 프로그램의 처리 시간이 단축된다.
또, 본 실시예에서는 명령을 해독할 때의 단위, 즉 1워드가 8비트였지만, 이 비트수에 한정되는 것은 아니다. 예를 들면, 1워드가 12비트라도 된다. 이 경우에는, 명령 해독 블록(100) 및 데이터 패스 블록(200)에서 8비트로 구성되어 있는 모든 구성부의 비트폭을 12비트로 하고, 또 외부 메모리에 배치하는 코드를 12비트 단위로 하면 된다.
또, 본 실시예에서는 IB(102)의 코드의 저장 상태가 기억부(110)에 기억되었지만, IB(102)에 한정되는 것은 아니다. 예를 들면, IFB(101)와 IB(102)의 코드 저장 상태가 기억되어도 된다. 이로써, IB(102)뿐만 아니라 IFB(101)에서의 코드 유무에 따른 유연한 제어가 가능하게 된다.
또, 본 실시예의 명령 파이프라인은 IFB(101), IB(102) 및 SI(103)로 이루어지는 3단이지만 이 단수에 한정되는 것은 아니다.
(제 2 실시예)
제 2 실시예는 과거의 메모리 액세스에서 사용한 어드레스를 효과적으로 활용하는 마이크로 프로세서에 관한 것이다.
< 마이크로 프로세서의 구성 >
도 12는 본 발명의 제 2 실시예의 마이크로 프로세서의 구성을 나타내는 블록도이다.
본 마이크로 프로세서는 명령 버퍼(1), 명령 레지스터(2), 드라이버(3), 산술 논리 연산부(4), 오퍼랜드 어드레스 버퍼(5), 로드 버퍼(6), 저장 버퍼(7), 드라이버(8), 드라이버(9), 명령 어드레스 버퍼(10), 명령 인출 버퍼(11), 디코더(12), 마이크로 명령 레지스터(13), 상태 레지스터(14), 선행 인출 카운터(15), 증분기(16), 디코드 프로그램 카운터(17), 실행 프로그램 카운터(18), 레지스터군(19), 프로그램 상태 워드(20), 인터럽트 접수부(21), 셀렉터(23), 셀렉터(24), 셀렉터(25), 내부 버스(30), 내부 버스(31), 내부 버스(32), 어드레스 버스(33), 데이터 버스(34), ROM(35), RAM(36), 주변 회로(37), 패스(path)(41), 패스(42), 패스(43) 및 패스(44)로 구성된다.
도 12에서 ROM(35), RAM(36)은 각각 명령, 데이터를 기억한다. 또, 주변 회로(37)는 예를 들면, 타이머, 직렬 포트 등의 각종 I/O 디바이스이다. 각각의 I/O 디바이스는 메모리 어드레스가 할당되어 있다(이른바 메모리 맵된 I/O).
명령 버퍼(1)[도 12에서는 IB(1)라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 명령의 실행에 앞서서 선행적으로 ROM(35)으로부터 인출된 명령이 저장된다.
명령 레지스터(2)[도 12에서는 IR(2)이라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 디코더(12)에 의한 디코드 대상의 명령을 유지한다.
드라이버(3)는 IB(1)의 내용을 B2BUS(32)로 출력하는 3상태 드라이버이다. 이 출력은 IB(1)에 절대 어드레스나 오퍼랜드 데이터가 축적하고 있는 경우에 마이크로 명령 레지스터(13)에 의한 제어에 의하여 이루어진다.
산술 논리 연산부(4)는 디코더(12)의 제어에 의하여 데이터 연산이나 어드레스 계산을 실행한다. 어드레스 계산에 대해서는, 예를 들면, 명령의 오퍼랜드로 변위 간접 어드레스가 지정되어 있는 경우, 산술 논리 연산부(4)는 레지스터군(19)내의 어드레스 레지스터에 유지되어 있는 값과 IB(1)에 유지되어 있는 변위(disp)로부터 메모리 액세스 목표의 어드레스를 계산하여, 오퍼랜드 어드레스 버퍼(5)에 출력한다. 또, 명령의 오퍼랜드로 절대 어드레스가 지정되어 있는 경우, 산술 논리 연산부(4)는 IB(1)로부터 입력되는 절대 어드레스를 그대로 오퍼랜드 어드레스 버퍼(5)에 출력한다.
오퍼랜드 어드레스 버퍼(5)[도 12에서는 OAB(5)라 약기하고 있음, 이후, 이 약칭을 이용한다.]는 메모리 액세스 목표의 어드레스를 유지하는 16비트폭의 버퍼이다. 여기에서 말하는 메모리 액세스는 주변 회로(37)가 메모리 맵된 I/O이기 때문에, RAM(36), ROM(35)으로의 액세스뿐만 아니라 주변 회로(37)로의 I/O 액세스를 포함한다.
로드 버퍼(6)[도 12에서는 LDB(6)라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 16비트폭의 버퍼이며, OAB(5)에 유지된 어드레스가 나타내는 메모리 액세스 목표로부터 판독된 데이터를 유지한다.
저장 버퍼(7)[도 12에서는 STB(7)라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 16비트폭의 버퍼이며, OAB(5)에 유지된 어드레스가 나타내는 메모리 액세스 목표에 기입해야 할 데이터를 유지한다.
드라이버(8)는 3 상태 드라이버이며, 디코더(12) 및 MIR(13)의 제어에 의하여 인터럽트 처리 발생시의 세이브 처리시에 OAB(5)의 유지 내용을 ABUS(30)에 전달한다.
드라이버(9)는 3 상태 드라이버이며, 디코더(12) 및 마이크로 명령 레지스터(13)의 제어에 의하여 메모리 액세스시에 OAB(5)의 유지값을 어드레스 버스(33)에 출력한다. 즉, 드라이버(9)에 의하여 OAB(5)의 유지값이 메모리 어드레스로서 ROM(35), RAM(36) 및 주변 회로(37)에 제공된다.
명령 어드레스 버퍼(10)[도 12에서는 IAB(10)라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 인출 목표의 16비트 길이의 어드레스를 유지한다.
명령 인출 버퍼(11)[도 12에서는 IFB(11)라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 ROM(35)으로부터 인출된 16비트 길이의 명령을 유지한다.
디코더(12)는 IR(2)의 명령 및 상태 레지스터(14)의 내용을 해독하여 그 명령을 실현하는 마이크로 명령을 출력한다.
마이크로 명령 레지스터(13)[도 12에서는 MIR(13)이라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 디코더(12)로부터의 마이크로 명령에 따라 명령을 실현하는 제어를 실행한다.
상태 레지스터(14)[도 12에서는 SR(14)이라고 약기하고 있음. 이후, 이 약칭을 이용한다.]는 명령의 해독에 필요한 각종 상태 플래그를 유지한다.
선행 인출 카운터(15)[도 12에서는 PFC(15)라 약기하고 있음. 이후, 이 약칭을 이용한다.], 증분기(16)[도 12에서는 INC(16)라 약기하고 있음.]로 이루어지는 회로는 디코더(12)의 제어에 의하여 인출할 명령의 어드레스를 순서대로 생성하는 이른바, 프로그램 카운터를 구성한다.
디코더 프로그램 카운터(17)[도 12에서는 DECPC(17)라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 명령 해독 단계에 있는 명령의 어드레스를 유지한다.
실행 프로그램 카운터(18)[도 12에서는 EXPC(18)라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 명령 실행 단계에 있는 명령의 어드레스를 유지한다.
레지스터군(19)은 복수의 레지스터로 이루어진다. 본 실시예에서는 4개의 데이터 레지스터(D0∼D3)와, 4개의 어드레스 레지스터(A0∼A3)와, 스택 포인터를 가지고, 본 실시에에서는 각각 16비트 길이인 것으로 한다.
프로그램 상태 워드(20)[도 12에서는 PSW(20)라 약기하고 있음. 이후, 이 약칭을 이용한다.]는 마이크로 프로세서 내부 상태를 나타내는 각종 플래그를 유지한다.
인터럽트 접수부(21)는 인터럽트 신호(IPT0∼6)를 접수하여 인터럽트 신호의 레벨에 따른 인터럽트 레벨 신호를 출력한다. 인터럽트 신호(IPT0∼6)란 외부의 각종 I/O 장치로부터의 인터럽트 요구를 통지하는 7종류의 신호이다. 또, 인터럽트 레벨 신호란 IRQ 0으로부터 IRQ 6의 순으로 높은 우선도를 가지고, 디코더(12)에 대하여 레벨에 대응하는 인터럽트 처리를 요구하는 신호이다. 또, 인터럽트 접수부(21)는 마스크 불가능 인터럽트 신호를 접수한 경우, 디코더(12)에 그대로 출력한다. 마스크 불가능 인터럽트(이하, NMI 인터럽트)는 상기 인터럽트 신호(IPT0∼6)보다도 우선순위가 높고 마스크할 수 없는(언제나 접수할 수 있는) 인터럽트 이다.
셀렉터(23)는 내부 버스(30), 내부 버스(32), 산술 논리 연산부(4) 중 어느하나로부터의 데이터를 선택적으로 산술 논리 연산부(4)의 한 쪽의 입력측에 출력한다.
셀렉터(24)는 내부 버스(31)와 내부 버스(32) 중 어느 하나로부터의 데이터를 선택적으로 산술 논리 연산부(4)의 다른 쪽의 입력측에 출력한다.
내부 버스(30)[도 12에서는 ABUS(30)라 약기하고 있음. 이후, 이 약칭을 이용한다.], 내부 버스(31)[도 12에서는 BIBUS(31)라 약기하고 있음. 이후, 이 약칭을 이용한다.], 내부 버스(32)[도 12에서는 B2BUS(32)라 약기하고 있음, 이후, 이 약칭을 이용한다.]는 마이크로 프로세서의 내부 버스이다.
OAB(5), LDB(6), STB(7), IAB(10), IFB(11)에 대한 대비 설명
이어서, OAB(5), LDB(6), STS(7), IAB(10), IFB(11)의 각 버퍼의 각각의 역할에 대하여 설명한다. 도 13은 OAB(5), LDB(6), STB(7), IAB(10), IFB(11)의 역할을 설명하기 위한 설명도이다.
도 13에서 OAB(5)의 유지값은 화살표 j1로 나타내는 바와 같이 RAM(36) 측의 메모리 액세스 목표의 어드레스로 되어 있다. 또, LDB(6)의 유지값은 화살표 j3으로 나타내는 바와 같이 해당 메모리 액세스 목표의 어드레스로부터 판독된 데이터로 되어 있다. 또, STB(7)의 유지값은 화살표 j2로 나타내는 바와 같이 메모리 액세스 목표의 어드레스에 기입할 데이터로 되어 있다.
한편, IAB(10)의 유지값은 화살표 j4로 나타내는 바와 같이 ROM(35) 측의 인출선의 어드레스인 것을 알 수 있다. 또, IFB(11)의 유지값은 화살표 j5로 나타내는 바와 같이 해당 인출선의 어드레스로부터 인출된 명령으로 되어 있다.
프로그램 카운터가 갱신되어가면 IAB(10)의 유지값은 도면의 파선의 사각형 j6, j7로 나타내는 바와 같이 순차 갱신되어가는 것을 알 수 있다. IAB(10)의 유지값의 갱신은 프로그램 카운터의 갱신때마다 실행되지만, 이것에 대하여 OAB(5)의 유지값의 갱신은 도면의 파선의 사각형 j8, j9로 나타내는 바와 같이, 어드레스 연산의 실행시, 혹은 절대 어드레스의 지정때마다 실행된다. 다시 말하면, OAB(5)의 유지값은 어드레스 계산 혹은 절대 어드레스 지정이 없는 한 갱신되는 일은 없다.
<PA 어드레싱에 대하여>
본 마이크로 프로세서의 명령 세트에서는 오퍼랜드 어드레스 버퍼의 유지값을 메모리 액세스 목표에 지정하는 명령을 가지고 있다. 이와 같이 메모리 액세스 목표에 오퍼랜드 어드레스 버퍼의 유지값을 지정하는 어드레싱법을 여기에서는 PA(Previous Address) 어드레싱이라 부른다.
도 14는 PA 어드레싱에 의한 판독 명령, 저장 명령을 설명하기 위한 설명도 이다.
이 PA 어드레싱에서의 메모리 액세스 목표의 지정은, 니모닉 레벨에서는 오퍼랜드에 (PA)라는 지정을 실행하는 것으로 실현된다.
PA 어드레싱을 전제로 한 판독 명령, 저장 명령의 명령 포맷을 도 14의 (a)에 나타낸다. 도 14의 (a)에 나타내는 바와 같이, PA 어드레싱을 전제로 한 판독 명령, 저장 명령의 명령 포맷에는 판독 명령, 저장 명령 등의 명령 종류를 나타내는 필드 d1과, 기계어 코드내의 PA 어드레싱을 지정용 필드 d2(1bit 길이)와, 레지스터군(19) 내의 데이터 레지스터(D0∼D3) 중 어느 하나를 지정하기 위한 필드d3(2비트 길이)이 각각 할당되어 있다.
도 41에서 명령 종류별용 필드 d1은 명령이 판독 명령인지 저장 명령인지, 가산, 감산, 승제산, 시프트 연산 등인지를 나타내고, 또 이들 명령이 8비트 데이터를 이용하는지, 16비트 데이터를 이용하는지 등을 나타낸다.
PA 어드레싱 지정용 필드 d2는 "1"로 PA 어드레싱을 지정한다는 취지를 나타내고, "0"으로 PA 어드레싱을 지정하지 않는다는 취지를 나타낸다.
데이터 레지스터 지정용 필드 d3은 "00"으로 오퍼랜드에 데이터 레지스터 D0을 지정하는 취지를 나타내고, "01"로 오퍼랜드에 데이터 레지스터 D1을 지정하는 취지를 나타낸다. "10"으로 오퍼랜드에 데이터 레지스터 D2를 지정하는 뜻을 나타내고, "11"로 오퍼랜드에 데이터 레지스터 D3을 지정하는 뜻을 나타낸다.
이어서, PA 어드레싱에 의한 판독 명령, 저장 명령에 대하여 설명한다. 도 14의 (b)는 PA 어드레싱에 의한 판독 명령을 설명하기 위한 설명도이다. 또, 도 14의 (c)는 PA 어드레싱에 의한 저장 명령을 설명하기 위한 설명도이다.
도 14의 (b)의 『LD (PA), Dn』은 PA 어드레싱에 의한 판독 명령이다. 여기에서, 판독 명령 (LD (Load) 명령)이란 메모리의 유지값을 판독하여 레지스터에 저장하는 명령을 말하고, 또 PA 어드레싱에 의한 판독 명령에서는 그 판독하는 곳을 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스로 하고 있다.
도 14의 (b)의 일예에서는 오퍼랜드 어드레스 버퍼에 0043번지가 유지되어 있으므로, 판독 명령의 오퍼랜드로 (PA)를 지정하는 것으로 실선의 화살표로 나타내는 바와 같이, 메모리의 0043번지가 판독하는 곳이 되고, 이 0043번지의 저장값이 파선의 화살표로 나타내는 바와 같이 데이터 레지스터 Dn으로 판독되고 있다.
도 14의 (c)의 『ST Dn, (PA)』는 PA 어드레싱에 의한 저장 명령이다. 여기에서, 저장 명령 (ST (Store) 명령)이란 레지스터에 유지되어 있는 값을 메모리에 저장하는 명령을 말하고, PA 어드레싱에 의한 저장 명령에서는 이 메모리의 저장하는 곳을 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스로 하고 있다.
도 14의 (c)의 일예에서는, 오퍼랜드 어드레스 버퍼에 0043번지가 유지되어 있으므로, 저장 명령의 오퍼랜드로 (PA)를 지정하는 것으로, 실선의 화살표로 나타내는 바와 같이, 메모리의 0043번지가 저장하는 곳이 되고, 데이터 레지스터 Dn의 유지값이 파선의 화살표로 나타내는 바와 같이 0043번지에 기입되어 있다.
PA 어드레싱을 이용한 메모리의 판독 기입 프로그램예를 도 15의 (a)에 나타낸다. 도 15는 PA 어드레싱을 이용하여 기술된 프로그램과, 종래대로의 기술로 작성된 프로그램을 비교하기 위한 설명도이다. 또, 도 15의 프로그램예는 도 2의 (a) 및 도 2의 (b)에 나타낸 프로그램예와 마찬가지로 모두 『메모리의 유지값을 판독하고, 그 유지값을 이용하여 연산을 실행하고, 그 결과를 원래의 메모리에 저장한다』라는 단순한 메모리 판독 기입를 나타내고 있다.
도 15에서, 도 15의 (a)는 PA 어드레싱으로 메모리 판독 기입을 행하는 프로그램예이며, 도 15의 (b)는 2회의 절대 어드레스 지정으로 메모리의 판독 기입을 행하는 프로그램예이다. 또, 도 15의 (c)는 어드레스 레지스터를 이용하여 메모리의 판독 기입을 실행하는 프로그램예이다. 본 도면의 도 15의 (b)의 프로그램예는 도 2의 (a)의 종래예의 프로그램예와 동일하며, 본 도면의 도 15의 (c)의 프로그램예는 도 2의 (b)의 종래예의 프로그램예와 동일하다.
도 15의 (a)의 프로그램은, 절대 어드레스의 지정에 의하여 메모리로부터 레지스터로의 판독를 실행하고 있는 점은 종래에에서 나타낸 도 15의 (b)와 같지만(명령 a1, a2), 도 15의 (b)가 레지스터 값의 저장을 절대 어드레스에 의한 어드레스 지정으로 실행하고 있는 데에 대하여(명령 a3), 도 15의 (a)에서는 PA 어드레싱에 의한 메모리 액세스 목표의 지정으로 저장을 행하고 있다(명령 a4). 그 때문에, 도 15의 (a)의 파선의 사각형 a5로 나타내고 있는 바와 같이, PA 어드레싱에 의한 코딩에서는 절대 어드레스에 의한 어드레스 지정이 불필요하다는 것을 알 수 있다.
또, 도 15의 (a)의 프로그램예를 도 15의 (c)의 프로그램예와 비교하면, 도 15의 (c)에서는 어드레스 레지스터에 절대 어드레스를 전송하는 명령(명령 b1), 어드레스 레지스터를 이용한 판독 명령(명령 b2), 어드레스 레지스터를 이용한 저장명령(명령 b4)을 포함하고 있는 데에 대하여, 본 도면 15A 도의 프로그램예는 어드레스 레지스터로의 전송 명령이나 판독 명령, 저장 명령을 포함하고 있지 않은 것을 알 수 있다.
이어서, 코드 크기에 대하여 비교한다. PA 어드레싱을 이용하면 도 15의 (a)에 나타내는 바와 같이, 판독 기입의 프로그램이 5바이트의 코드 크기로 실현된다. 이것을 도 15의 (b)의 프로그램예의 코드 크기와 비교하면 코드 크기가 2바이트 감소하고 있는 것을 알 수 있다. 또, 도 15의 (c)의 프로그램예의 코드 크기와 비교하면 코드 크기가 1바이트 감소하고 있는 것을 알 수 있다. 따라서, 메모리의 판독 기입을 PA 어드레싱으로 실행하면 다수의 RAM(36), 주변 회로(37)의 I/O 디바이스에 대한 판독 기입을 보다 작은 코드 크기로 실현할 수 있다.
<동작예>
상기와 같이 구성된 마이크로 프로세서의 동작을 이하의 ①∼④의 명령으로 이루어지는 프로그램을 대상으로 하여 설명한다. 또, 이 프로그램중 ②∼④의 명령은 상기 도 15의 (a)의 프로그램의 예가 포함하는 명령과 동일 내용이다.
①…『LD (d8, An), Dn』
②…『LD (abs16), Dn』
③…『ADD Dm, Dn』
④…『ST Dn, (PA)』
『LD (d8, An), Dn』의 실행 및 0AB 5의 유지 내용의 천이①
도 16 및 도 17은 도 12에 나타낸 각 구성의 동작을 설명하기 위한 타이밍차트이다. 도 16 및 도 17에서, 시간 t1 이전에 명령 『LD (An), Dn』이 이미 실행 되었다고 가정한다. 그 때문에, 시간 t1의 0AB(5)의 유지 내용은 『LD (An), Dn』의 소스측 오퍼랜드의 어드레스, 즉 어드레스 레지스터의 유지값인 『An』으로 되어 있다. 이 시간 t1에서 IB(1)로부터 IR(2)로 『LD (d8, An), Dn』의 오퍼레이션 코드가 전송되고, 이 오퍼레이션 코드가 디코더(12)에 의하여 해독된다. 이와 같이 해독됨으로써, 시간 t2에서 MIR(13)은 어드레스 계산 『adr. calc』의 제어를 실행한다. 이때, MIR(13)은 레지스터군(19) 내의 어드레스 레지스터의 유지값『An』을 ABUS(30)에 출력한다(화살표 y1). 또, 드라이버(3)를 구동하고, IB(1)에 유지되어 있는 변위(disp8)를 B2BUS(32)에 출력한다(화살표 y2). 이들 시간 t2에서의 처리에의하여 시간(t3)에서는 ABUS(30)에 어드레스 레지스터의 유지값 『An』이 나타나고, B2BUS(32)에 8비트 길이의 변위(disp8)가 나타난다. 또, 시간 t3에서 MIR(13)은 셀렉터(23), 셀렉터(24)를 전환하여 산술 논리 연산부(4)에 어드레스 레지스터의 유지값과, 8비트 길이의 변위(disp)와의 add 연산을 실행시킨다.
시간 t4에서는 MIR(13)이 전송제어 『load』를 행하고, 산술 논리 연산부(4)의 연산결과 『An + disp8』이 산술 논리 연산부(4)로부터 OAB(5)로 전송된다(화살표 y3).
시간 t1으로부터 시간 t2까지의 사이는 파선의 화살표로 나타내는 바와 같이, 0AB(5)에는 이전의 메모리 액세스 목표의 어드레스인 『An』이 유지되어 있었지만, 시간 t5에서의 저장에 의하여 0AB(5)의 유지 내용은 『An + disp8』로 갱신된다.
시간 t6에서는 MIR(13)은 드라이버(9)를 구동하고, 0AB(5)의 유지값 『An +disp8』을 어드레스(33)에 출력하여, 그것과 함께 RAM(36)의 판독을 허가한다(화살표 y6). 이것에 의하여, 어드레스 An + disp8의 유지값이 RAM(36)으로부터 데이터 버스(34)를 통하여 LDB(6)로 판독된다. LDB(6)로 판독된 유지값은 셀렉터(25)를 경유하여 레지스터군(19)내의 데이터 레지스터 Dn에 저장된다(화살표 y7).
『LD (abs16), Dn』의 실행 및 OAB(5)의 유지 내용의 천이②
시간 t5에서는 IB(1)로부터 IR(2)로 『LD(abs16), Dn』의 오퍼레이션 코드의 전송이 실행된다. 이 오퍼레이션 코드가 디코더(12)에 의하여 해독되고, 시간 t6에서 MIR(13)은 어드레스 계산 『adr. calc』의 제어를 실행한다. MIR(13)은 드라이버(3)를 구동하고, IB(1)에 유지되어 있는 16비트 길이의 절대 어드레스 abs16을 B2BUS(32)에 출력한다(화살표 y4). 이 출력에 의하여 B2BUS(32)는 절대 어드레스 『abs16』이 나타나 있는 상태가 된다. B2BUS(32) 상에 나타난 절대 어드레스 『abs16』은 산술 논리 연산부(4)를 통과(through)하여 OAB(5)로 전송된다(화살표 y5).
시간 t5로부터 시간 t8까지의 사이는 파선의 화살표로 나타내는 바와 같이, OAB(5)의 유지 내용은 『LD (d8, An), Dn』의 메모리 액세스 목표의 어드레스인 『An + disp8』이었지만, 시간 t9에서의 저장에 의하여 OAB(5)의 유지 내용은 『abs16』으로 갱신된다.
시간 t9에서는 MIR(13)은 드라이버(9)를 구동하고, OAB(5)의 유지값 『abs 16』을 어드레스(33)에 출력하여 그것과 함께 RAM(36)의 판독을 허가한다(화살표 y8). 이로써, 어드레스 abs16의 유지값이 RAM(36)으로부터 데이터 버스(34)를 통하여 LDB(6)로 판독되고, 셀렉터(25)를 경유하여 레지스터군(19)내의 데이터 레지스터 Dn에 전송된다(화살표 y9).
명령 『ADD Dm, Dn』의 실행 및 OAB(5)의 유지 내용의 천이③
시간 t9에서 OAB(5)로의 저장이 실행되고 있는 한편으로, IB(1)로부터 IR(2)로 『ADD Dm, Dn』의 오퍼레이션 코드의 전송이 실행된다. 디코더(12)에 의하여 『ADD Dm, Dn』의 오퍼레이션 코드가 해독된다. 이 디코더(12)는 이 오퍼레이션 코드를 해독하고, MIR(13)에 레지스터군(19)내의 데이터 레지스터 Dn의 유지값을 ABUS(30) 및 ABUS(32)에 출력시킨다. 이 출력에 의하여 ABUS(30) 및 B2BUS(32)에는레지스터군(19)내의 데이터 레지스터의 유지값이 나타나고, 이들을 피연산자로 하는 연산이 산술 논리 연산부(4)에 의하여 실행된다. 연산 결과는 ABUS(30)에 출력되고, ABUS(30)으로부터 레지스터군(19) 내의 데이터 레지스터 Dn으로 전송된다(도 17의 화살표 y10, y11).
또, 시간 t9로부터 시간 t11에 걸친 『ADD Dm, Dn』의 실행에서는 메모리 액세스가 실행되지 않았으므로, OAB(5)는 『LD (abs16), Dn』에서의 메모리 액세스 목표의 어드레스 『abs16』을 저장한 상태로 되어 있다.
명령 『ST Dn, (PA)』의 실행 및 OAB(5)의 유지 내용의 천이④
시간 t11에서, IB(1)로부터 IR(2)로 『ST Dn, (PA)』의 오퍼레이션 코드의 전송이 이루어진다. 이어서, IR(2)로부터 디코더(12)로의 전송이 실행되고,『STDn, (PA)』의 오퍼레이션 코드가 디코더(12)에 의하여 해독된다. 『ST Dn, (PA)』는 상기 PA 어드레싱의 지정 비트가 "1"로 되어 있다. 디코더(12)는 이것을 검출하고, PA 어드레싱에서 레지스터 Dn의 유지값을 메모리에 저장하도록 MIR(13)을 제어한다.
시간 t13에서, MIR(13)은 레지스터군(19) 내의 데이터 레지스터 Dn의 유지값을 ABUS(30)에 출력시킨다. ABUS(30)에 출력된 데이터 레지스터 Dn의 유지값은 STB (7)에 저장된다. 그것과 함께 MIR(13)은 어드레스 계산 제어를 행하지 않고 드라이버(9)를 구동하고, OAB(5)의 유지값 abs16을 어드레스버스(33)에 출력한다(화살표 y12). 이어서, MIR(13)은 RAM(36)의 기입을 허가한다. 이들 일련의 처리로 STB(7)의 유지값이 OAB(5)에 유지되어 있는 어드레스, 즉 어드레스 abs16에 대하여 기입된다.
이상의 설명에 의하여 PA 어드레싱(Previous Address)의 단어 의미대로 직전의 메모리 액세스 목표의 어드레스가 재이용되는 것을 알 수 있다.
<인터럽트 처리>
이상의 동작예에서는 OAB(5)의 유지 내용이 파괴되지 않는 것을 전제로 하고 있었지만, OAB(5)의 유지값은 인터럽트 처리에 의하여 파괴될 우려가 있다. 이와같이 인터럽트 발생에 의한 유지값 파괴를 감안하여, 본 실시예에서는 도 18에 나타내는 바와 같이 OAB(5)의 유지값의 세이브 경로(saving path)를 형성하고 있다.
도 18은 도 12의 OAB(5) 주변을 확대하여 나타내고 있다. 도 18에서 파선으로 나타내는 바와 같이, 패스(41)와, 패스(42)와, 패스(43)와, ABUS(30)와, 패스(44)는 OAB(5)의 유지값의 메모리로의 세이브 경로를 형성하고 있다. 여기에서, 드라이버(8)를 구동하면 이 세이브 경로에 따라 OAB(5)의 유지값을 도면중의 파선으로 나타내는 메모리의 스택 영역에 세이브할 수 있다.
이와 같이 설치된 세이브 경로에서 디코더(12) 및 MIR(13)이 0AB(5)의 유지값의 세이브를 실행하는 형태를 도 19를 참조하면서 설명한다. 도 19의 (a)는 인터럽트 처리전에서의 스택의 내용을 나타내는 도면이며, 도 19의 (b)는 인터럽트 처리시에서의 스택의 내용을 나타내는 도면이다.
NMI 인터럽트 발생시의 처리
NMI 인터럽트가 인터럽트 접수부(21)에 입력된 경우, 디코더(12)는 MIR(13)에 레지스터군(19) 내의 스택 포인터 내용의 갱신을 실행시킨다(SP-6 → SP). 갱신후, 디코더(12)는 MIR(13)에 드라이버(8)를 구동시켜서 OAB(5)의 세이브 경로를 확보시킨다. 그리고, 이 세이브 경로에서 OAB(5)의 유지값을 전송하고, 해당 유지값을 스택 포인터로 지시된 스택에 축적한다[OAB(5)→(SP + 4)]. OAB(5)의 유지값이 세이브되었으므로, 이어서 EXPC(18)의 내용을 스택으로 세이브하고[EXPC → (SP +2)], 이어서 PSW(20)의 내용을 스택에 세이브한다[PSW→ (SP)].
이상 3단계의 세이브를 마치면 스택의 저장 상태는 도 19의 (a)에서 도 19의 (b)로 천이한다.
이상의 인터럽트 처리를 위한 세이브를 마쳤으므로 NMI 인터럽트의 개시 어드레스를 IAB(10) 및 PFC(15)에 저장한다.
이어서, 복귀 처리에 대하여 설명한다. 복귀 처리란 스택에 저장된 유지값을 원래로 되돌리는 처리이며, 이하의 순서로 이루어진다.
스택의 1단째의 저장값을 PSW(20)에 전송하고[(SP)→ PSW], 이어서 스택의 2단째의 저장값을 프로그램 카운터(18)에 전송한다[(SP + 2) → EXPC]. 이어서, ABUS(30), 산술 논리 연산부(4)를 경유하여 스택의 3단째의 저장값을 0AB(5)에 전송한다[(SP + 4)→ 0AB(5)].
IRQn 인터럽트 발생시의 처리
IRQn 인터럽트 발생시의 처리가 NMI 인터럽트 발생시의 처리와 다른 것은 IRQn 인터럽트에서는 PSW(20) 내의 IMSK 필드를 접수한 인터럽트 레벨로 재기입하는 점 ①, IRQn의 레벨 n에 따라 점프선 어드레스를 구하는 점 ②이다.
또, 인터럽트 처리로의 이행 및 복귀는 NMI 인터럽트의 경우와 마찬가지이므로 설명은 생략한다.
이상과 같이, 본 실시예의 마이크로 프로세서에 의하면, PA 어드레싱으로 메모리 액세스를 실행하는 것으로 절대 어드레스 지정을 실행하지 않고, 또, 어드레스 레지스터를 이용하지 않아도 메모리의 판독 기입을 실행할 수 있다. 또, 내장용도에서 메모리 매핑된 I/O 포트가 다수 있고, 이들의 판독 기입을 빈번하게 실행하는 경우에도, 이들의 판독 기입로 어드레스 레지스터가 점유되지 않으므로, 어드레스 레지스터의 이용 효율이 향상된다.
( 제 3 실시예 )
제 3 실시예는 다단으로 한 오퍼랜드 어드레스 버퍼를 구비하는 마이크로 프로세서에 관한 것이다. 또, 이 다단의 오퍼랜드 어드레스 버퍼를 가지는 블록을 OAB 어레이라 한다.
OAB 어레이의 구성을 도 20에 나타낸다. 도 20은 제 3 실시예에 관한 OAB 어레이의 구성을 나타내는 도면이다. 도 20에 나타내는 바와 같이 OAB 어레이는 OAB(50)와, OAB(51)와, OAB(52)와, OAB(53)와, OAB(54)와, 5입력 셀렉터(60)로 구성된다. 또, 도 20에서 OAB(50)는 OAB(5)와 동일 구성이며, 그 출력선에 OAB(50)와 동일한 버퍼[도 20의 OAB(51)∼OAB(54)]가 4단 접속되어 전회, 2회 전, 3회 전, 4회 전의 메모리 액세스 목표의 어드레스를 유지하도록 되어 있다.
또, 5입력 셀렉터(60)는 후술하는 OABSEL 신호(63)의 입력에 기초하여 OAB(50)∼OAB(54)의 유지값을 선택적으로 출력한다.
도 20의 OABSFT 신호(61)는 OAB 어레이의 유지 내용을 시프트하기 위한 제어신호이다. 이 제어 신호의 출력에 의하여 OAB(50)∼OAB(54)는 시프트를 실행하고, 그 유지 내용은 OAB(51)로부터 OAB(54)로 차례차례 다음으로 내려간다. 이와 같은 내림이 실행되면 마지막 단[OAB(54)]의 유지 내용은 폐기되고, OAB(51)에는 OAB(50)의 그때까지의 유지값이 저장된다. 또, 이 OABSFT 신호(61)는 디코더(12)가 판독 명령을 해독한 경우, 또 저장 명령을 해독한 경우, MIR(13)에 의하여 출력된다. 따라서, OAB 어레이 내의 각 OAB(50)∼OAB(54)의 시프트 동작은 디코더(12)에 의하여 판독 명령, 저장 명령이 해독될 때마다 실행된다. OABW 신호(62)는 산술 논리 연산부(4)의 출력을 OAB(50)에 저장하기 위한 제어 신호이다. 상기 OABSFT 신호(61)의 출력에 의하여 레지스터의 유지값을 다음으로 내린 후에 이 OABW 신호(62)가 OAB(50)에 입력됨으로써, OAB(50)는 산술 논리 연산부(4)로부터 출력된 메모리 액세스 목표의 어드레스를 유지하게 된다.
OABSEL 신호(63)는 OAB(50)∼OAB(54) 중 어느 하나를 지정하는 정보를 포함하고, 5입력 셀렉터(60)의 출력을 그 지정대로 전환한다.
이상과 같이, OAB(50), OAB(51)∼OAB(54)가 OAB 어레이를 형성하고 있기 때문에, 제 3 실시예에서는 어떤 OAB(5)를 지정할 것인가가 오퍼레이션 코드에서 지정할 수 있도록 되어 있다. 이 후, 제 3 실시예의 PA 어드레싱에 대하여 제 21 도를 참조하면서 설명한다. 도 21의 (a)는 PA 어드레싱에서의 명령 포맷을 나타내는 도면이며, 도 21의 (b)는 PA 어드레싱에 의한 저장 명령의 니모닉 도면이다.
제 3 실시예의 PA 어드레싱을 위한 명령 포맷은 도 14의 (a)에 나타낸 명령의 종류를 나타내는 필드 d1, 기계어 코드내의 PA 어드레싱을 지정용 필드 d2(1비트), 데이터 레지스터 D0∼D3의 지정용 필드 d3(2비트 길이)에 덧붙여서, 도 21의 (a)에 나타내는 바와 같이 "0", "1"로 OAB(50)을 지정할 것인지, 혹은 OAB(51)∼OAB(54)를 지정할 것인지를 나타내는 OAB(50)의 지정용 필드 d4(1비트 길이)와, OAB(51)∼OAB(54) 중 어느 하나를 지정하는 OAB(51)∼OAB(54) 지정용 필드 d5(2비트 길이)가 할당되어 있다.
지정용 필드 d4는 "0"으로 OAB(50)를 지정한다는 취지를 나타내고, "1"로 OAB(51)∼OAB(54)를 지정한다는 취지를 나타낸다.
OAB(51)∼OAB(54) 지정용 필드 d5는 "00"으로 오퍼랜드에 OAB(51)를 지정한다는 취지를 나타내고, "01"오퍼랜드에 OAB(52)를 지정한다는 취지를 나타낸다. "10"으로 오퍼랜드에 OAB(53)를 지정한다는 취지를 나타내고, "11"로 오퍼랜드에 OAB(54)를 지정한다는 취지를 나타낸다.
또, 니모닉 레벨에서는 도 14의 (a)에 나타낸 (PA)라는 PA 어드레싱을 실행한다는 뜻의 지정 외에 도 21의 (b)에 나타내는 바와 같이, OAB(51)의 유지값을 메모리 액세스 목표에 지정한다면 (PA1), OAB(52)의 유지값을 메모리 액세스 목표에 지정한다면 (PA2), OAB(53)의 유지값을 메모리 액세스 목표에 지정한다면 (PA3), OAB(54)의 유지값을 메모리 액세스 목표에 지정한다면 (PA4) 라는 식으로 오퍼랜드로 OAB(51)부터 OAB(54) 중 어느 하나를 지정할 수 있도록 되어 있다.
도 22는 OAB 어레이 내의 OAB(50)∼OAB(54)의 지정을 상기 PA 어드레싱을 이용하여 기술한 프로그램예와, 그 프로그램에 의하여 OAB 어레이가 어떻게 동작하는 지를 나타내는 설명도이다.
①명령 『LD (adr1), D0』
우선, 『LD(adr1), D0』에 대하여 설명한다. IB(1)에 『LD (adr1), D0』이 저장되어 있고, IB(1)로부터 IR(2)로 『LD (adr1), D0』의 오퍼레이션 코드가 전송되고, 또 이 오퍼레이션 코드는 IR(2)로부터 디코더(12)로 전송된다. 디코더(12)는 이 『LD (adr1), D0』의 오퍼레이션 코드를 해독한다.『LD (adr1), D0』의 오퍼레이션 코드는 판독 명령이므로, 디코더(12)는 OABSFT 신호(61)를 출력하도록 MIR(13)을 제어한다. OABSFT 신호(61)에 의하여 OAB 어레이의 유지 내용이 시프트 되고, 이 시프트와 함께 MIR(13)은 『adr1』을 OAB(50)에 출력한다. MIR(13)의 제어에 의하여 명령 『LD (adr1), D0』의 소스측 오퍼랜드의 『adr1』이 산술 논리 연산부(4)를 통과하여 OAB(50)에 저장된다. 『adr1』이 저장되면 MIR(13)은 OABSEL 신호(63)를 출력하고, 이에 의하여 어드레스 adr1이 어드레스 버스(33)에 출력된다. 이어서, RAM(36)의 판독를 허가한다. 이에 의하여 어드레스 adr1의 유지값이 RAM(36)으로부터 데이터 버스(34)를 통하여 LDB(6)로 판독된다. LDB(6)로 판독된 유지값은 레지스터군(19) 내의 데이터 레지스터 Dn에 저장된다.
②명령 『ST D0, (adr2)』
이어서, 『ST D0, (adr2)』에 대하여 설명한다. IB(1)에 『ST D0, (adr2)』 가 저장되어 있고, IB(1)로부터 IR(2)로 『ST D0, (adr2)』의 오퍼레이션 코드가 전송되고, 또 이 오퍼레이션 코드는 IR(2)로부터 디코더(12)로 전송된다.
디코더(12)는 이 『ST D0, (adr2)』의 오퍼레이션 코드를 해독한다. 『ST D0, (adr2)』의 오퍼레이션 코드는 저장 명령이므로, 디코더(12)는 OABSFT신호(61)를 출력하도록 MIR(13)을 제어한다.
OABSFT 신호(61)에 의하여 OAB 어레이의 유지 내용이 시프트되고, 도면에 나타내는 바와 같이 이제까지 OAB(50)에 유지되어 있던 어드레스 adr1이 OAB(51)에 저장된다. 또, 산술 논리 연산부(4)를 통과하여 명령 『ST D0, (adr2)』 의 데스티네이션측의 어드레스인 『adr2』가 OAB(50)에 저장된다. 이 명령의 오퍼레이션 코드는 PA 어드레싱을 실행한다는 취지를 포함하고 있지 않으므로, OABSEL 신호(63)에 의하여 OAB (50)의 유지값인 『adr2』가 어드레스 버스(33)에 출력된다. 또, 『ST D0, (adr2)』는 저장 명령이므로, 레지스터군(19) 내의 데이터 레지스터 Dn의 유지값을 B2BUS(32)에 출력하고, 그 유지값을 B2BUS(32)로부터 STB(7)에 전송한다.
STB7에 레지스터의 유지값이 저장되면 MIR(13)은 RAM(36)에 제어 신호를 발하여 RAM(36)의 기입을 허가한다. 이에 의하여 어드레스 adr2에 STB7의 유지 내용이 기입된다.
③명령 『LD (adr3), D0』
IB(1)에 『LD (adr3), D0』가 저장되어 있고, IB(1)로부터 IR(2)로 『LD(adr3), D0』의 오퍼레이션 코드가 전송되고, 또 이 오퍼레이션 코드가 IR(2)로부터 디코더(12)로 전송된다. 디코더(12)는 이 『LD (adr3), D0』의 오퍼레이션 코드를 해독한다. 『LD (adr3), D0』는 판독 명령이므로, 디코더(12)는 OABSFT 신호(61)를 출력하도록 MIR(13)을 제어한다.
OABSFT 신호(61)에 의하여 OAB 어레이의 유지 내용이 시프트되고, 도면에 나타내는 바와 같이, 이제까지 OAB(51)에 유지되어 있던 어드레스 adr1이 OAB(52)에저장되고, 이제까지 OAB(50)에 유지되어 있던 어드레스 adr2가 OAB(51)에 저장된다. 또, 산술 논리 연산부(4)를 통과하여 명령 『LD (adr3), D0』의 소스측 어드레스인 『adr3』가 OAB(50)에 저장된다. 이 명령의 오퍼레이션 코드는 PA 어드레싱을 실행한다는 취지를 포함하고 있지 않으므로, OABSEL 신호(63)에 의하여 OAB(50)의 유지값인 『adr3』이 어드레스 버스(33)에 출력된다. 그것과 함께 MIR(13)은 제어 신호를 발하여 RAM(36)의 판독를 허가한다. 이로써, 어드레스 adr3의 유지값이 RAM(36)으로부터 데이터 버스(34)를 통하여 LDB(6)로 판독된다. LDB(6)로 판독된 유지값은 레지스터군(19) 내의 데이터 레지스터 Dn에 저장된다.
④명령 『ADD D0, D1』
IB(1)에 『ADD D0, D1』이 저장되어 있고, IB(1)로부터 IR(2)로 『ADD D0, D1』의 오퍼레이션 코드가 전송되고, 또 이 오퍼레이션 코드가 IR(2)로부터 디코더(12)로 전송된다. 디코더(12)는 이 『ADD D0, D1』의 오퍼레이션 코드를 해독한다. 『ADD D0, D1』는 add 연산이므로, 디코더(12)는 OABSFT 신호(61)를 출력을 지시하지 않는다.
디코더(12)는 레지스터 D0에 저장된 어드레스 adr1의 유지 내용과 레지스터 D1에 저장된 어드레스 adr3의 유지 내용의 연산을 산술 논리 연산부(4)에 실행시킨다. 명령 『ADD D0, D1』에서는 레지스터 D1이 수신측으로 되어 있기 때문에, 디코더(12)는 이 연산 결과를 레지스터 D1에 저장한다.
⑤명령 『ST D1, (PA2)』
IR(2)에 『ST D1, (PA2)』의 오퍼레이션 코드가 저장되고, 해당 오퍼레이션코드가 디코더(12)에 의하여 해독된다. 이 오퍼레이션 코드는 PA 어드레싱을 실행한다는 취지를 포함하고 있고, 2비트 길이의 정보로 OAB 어레이의 중 어느 하나에서 OAB(52)를 지정하고 있다. 디코더(12)는 이 지정대로 출력 목표를 OAB(50)로부터 OAB(52)로 전환한다는 뜻의 OABSEL 신호(63)를 5입력 셀렉터(60)에 대하여 발한다. 또 『ST D1, (PA2)』는 저장 명령이므로, 레지스터군(19) 내의 데이터 레지스터 D1의 유지값을 B2BUS에 출력하고, 그 유지값을 B2BUS(32)로부터 STB(7)로 전송한다. STB(7)에 유지값이 저장되면 MIR(13)은 RAM(36)에 제어 신호를 발하여 RAM(36)의 기입을 허가한다. 이로써, OAB(52)(도면 중에서는 해칭을 실시하고 있음)에 유지되어 있는 어드레스 adr2에 STB(7)의 유지 내용이 기입된다(파선의 화살표 참조).
인터럽트 발생시 OAB 어레이의 유지값 세이브
인터럽트 발생시에는 제 2 실시예와 마찬가지로, OAB 어레이 중의 OAB(50)∼OAB(54)의 유지 내용을 모두 세이브할 필요가 있다. 이 세이브가 어떻게 실행되는가를 도 23을 참조하면서 이하에 설명한다. 도 23의 (a)는 제 3실시예의 인터럽트 전의 스택 저장내용을 나타내는 도면이며, 도 23의 (b)는 제 3 실시예의 인터럽트시의 스택 저장내용을 나타내는 도면이다.
인터럽트 접수부(21)가 NMI 인터럽트를 접수한 경우에는 디코더(12)는 스택포인터의 내용을 갱신한다(SP - 14→ SP).
이어서, 디코더(12)는 드라이버(8)를 구동하여 OAB(50)의 세이브 경로를 확보한다. 그리고, OAB(50)를 지정하는 OABSEL 신호(63)를 5입력 셀렉터(60)에 발하고, 5입력 셀렉터(60)에 OAB(50)의 유지값을 출력시킨다. OAB(50)의 유지값은 드라이버(8), ABUS (30)를 경유하여 STB(7)에 저장되고, STB(7)로부터 스택에 축적된다.
OAB(50)의 출력후, OAB(51)를 지정하는 OABSFT 신호(61)를 5입력 셀렉터(60)에 발하고, 5입력 셀렉터(60)에 OAB(51)의 유지값을 출력시킨다. OAB(51)의 유지값도 OAB(50)와 마찬가지로 드라이버(9) - ABUS(30) - STB(7)로 이루어지는 세이브 경로를 거쳐서 스택 영역에 축적된다. OAB50, OAB(51)과 마찬가지로 OAB(52), OAB(53), OAB (54)를 지정하는 제어신호를 순차 5입력 셀렉터(60)로 향하여 발하고, OAB(52), OAB (53), OAB(54)의 유지값을 스택에 축적한다.
이상과 같이, OAB 어레이의 유지 내용을 세이브하면 EXPC(18)의 내용의 세이브[EXPC→ (SP + 2)], PSW(20)의 내용의 세이브[PSW→ (SP)], 인터럽트 점프선 어드레스로의 이행을 계속해서 실행한다. 이상 일련의 처리에 의하여 스택의 저장내용은 도 23의 (a)에 나타낸 상태로부터 도 23의 (b)에 나타내는 상태로 이행한다. 또, IRQn 인터럽트 발생시의 처리에 대해서는 IRQn 인터럽트에서는 PSW(20) 내의 IMSK 필드를 접수한 인터럽트 레벨로 바꿔쓰는 점 ①, IRQn의 레벨 n에 따라 점프선 어드레스를 구하는 점 ②가 다를 뿐이므로 설명은 생략한다.
또, 인터럽트 처리로부터의 복귀 처리에 대해서는 인터럽트 발생의 경우와 반대의 순서를 따르면 되므로 설명을 생략한다.
이상과 같이, 본 실시예에 의하면, 과거 복수회의 메모리 액세스 중 어느 하나를 선택적으로 지정시킬 수 있으므로, 어드레스 레지스터를 점유하지 않을 확률이 높아지고, 그 결과, 프로그램의 코드 크기가 보다 축소된다.
( 제 3 실시예의 응용예 )
제 3 실시예에서는 판독 명령 및 저장 명령의 실행시에 OAB 어레이를 시프트 하고 있었다. 단, 같은 저장선에 대하여 중복하여 저장하는 일은 드물기 때문에, 판독 명령 실행시만 OAB 어레이의 시프트 동작을 실행하도록 구성한 편이 좋다. 그것을 위한 응용예를 이하에 나타낸다. 도 24는 이 응용예를 설명하기 위한 설명도이다.
상기 일례에서는 『ST D0, (adr2)』의 실행시에서 OAB 어레이의 시프트 동작을 실행하여 어드레스 adr1을 OAB(51)에 저장하고 있었지만, 『ST D0, (adr2)』의 해독시에는 OABSEL 신호(63)를 출력하고 있지 않다. 즉, 『ST D0, (adr2)』의 OAB 어레이의 유지 내용은 OAB(50)에 어드레스 adr1이 들어간 상태로 되어 있다.
『ST D0, (adr2)』의 실행시에는 OAB(50)에 『adr1』이 들어간 상태였기 때문에, 『LD (adr3), D1』의 실행시에는 OABSFT 신호(61)에 의하여 OAB(5) 어레이의 유지 내용이 시프트되고, 도면에 나타내는 바와 같이 이제까지 OAB(50)에 유지되어 있던 어드레스 adr1이 OAB(51)에 저장되고, OAB(50)에는 어드레스 adr3이 저장된 상태로 되어 있다.
④의 명령 『ADD D0, D1』을 실행한 후, ⑤의 명령 『ST D1, (PA1)』의 오퍼레이션 코드가 저장된다. 이 오퍼레이션 코드에는 PA 어드레싱을 실행한다는 취지를 포함하고 있기 때문에 디코더(12)는 출력선을 OAB(50)로부터 OAB(51)로 전환한다는 취지의 OABSEL 신호(63)를 5입력 셀렉터(60)에 대하여 발한다. OAB(51)에는어드레스 adr1이 저장되어 있기 때문에, 어드레스 adr1이 어드레스 버스(33)에 출력된다. MIR(13)은 제어 신호를 발하여 RAM(36)의 판독를 허가한다. 이로써, OAB(51)에서 지정된 어드레스의 유지값이 RAM(36)으로부터 데이터 버스(34)를 통하여 LDB(6)로 판독된다. LDB(6)로 판독된 유지값은 레지스터군(19)내의 데이터 레지스터 Dn에 저장된다.
본 발명은 그 요지를 벗어나지 않는 범위에서 변경 실시할 수 있다. 예를들면, 오퍼랜드 어드레스 버퍼의 유지값으로부터 상태값이 지정되도록 명령 세트를 설정해도 된다.
또 가산, 감산, 시프트연산의 오퍼랜드에 오퍼랜드 어드레스 버퍼의 유지값을 지정할 수 있도록 명령 세트를 설정해도 된다.
또, 제 3실시예에서는 OAB(50)∼OAB(54)를 직렬로 접속했지만, 이것을 병렬로 접속하여 구성해도 된다. 또, 제 3 실시예의 5단이라는 단수는 일례이며, 2단, 3단∼9단, 10단과 같이 오퍼랜드 어드레스 버퍼의 단수를 증가시켜도 됨은 물론이다.
상술한 바와 같이, 본 발명에 따르면, 마이크로 프로세서가 가지는 명령 해독기의 비트폭의 정수배로 제한되지 않고, 효율적으로 단어 길이가 축소화된 명령세트를 가지는 마이크로 프로세서를 제공할 수 있으므로, 동일 내용이라도 코드 크기가 압축된 프로그램의 작성이 가능하게 된다.
또, 본 발명에 따르면, 어드레스 레지스터를 점유하지 않고 코드 크기의 축소를 꾀할 수 있는 프로세서를 제공하는 것도 가능하게 된다.

Claims (13)

  1. 프로그램의 코드 크기의 축소화를 지원하는 마이크로 프로세서로서,
    단어 길이(w)가 w = a + nb(단, a는 이 해독기가 한 번에 해독하는 코드의 단어 길이, b는 a보다 작은 양의 정수, n은 0 이상의 정수)로 나타나는 명령을 해독하고, 적어도 단어 길이(w)가 a인 명령과 단어 길이(w)가 a + b인 명령을 해독하는 해독기와,
    상기 해독기에 의한 해독 결과에 기초하여 데이터 처리를 실행하는 실행 수단을 포함하는 것을 특징으로 하는 마이크로 프로세서.
  2. 제 1 항에 있어서,
    상기 b는 상기 a를 1워드로 한 경우에 하프워드인 것을 특징으로 마이크로 프로세서.
  3. 제 2 항에 있어서,
    선행 인출한 명령을 유지하는 명령 버퍼와,
    상기 명령 버퍼의 명령의 하프워드 단위에서의 저장 상태를 기억하는 기억 수단과,
    상기 해독기에 의한 해독 결과에 기초하여 다음에 해독할 코드의 단어 길이가 하프워드인지 1워드인지를 판단하는 제 1 판단 수단과,
    상기 제 1 판단 수단에 의하여 판단된 단어 길이와 상기 기억 수단에서의 저장 상태에 기초하여 상기 명령 버퍼에 저장된 코드를 상기 해독기에 도입하도록 상기 명령 버퍼를 제어함과 동시에, 그 저장 상태를 갱신하는 제어 수단을 추가로 포함하는 것을 특징으로 하는 마이크로 프로세서.
  4. 제 3 항에 있어서,
    상기 해독기는 해독하는 1워드의 코드를 하프워드씩 분할하여 유지하는 상위측 해독 레지스터와 하위측 해독 레지스터로 이루어지고,
    상기 명령 버퍼는 가장 새롭게 인출한 1워드의 코드를 유지하는 제 1 레지스터와, 그 직전에 인출한 1 워드의 코드를 유지하는 제 2 레지스터와, 상기 제어 수단으로부터의 지시에 기초하여 복수의 코드로부터 선택한 하나의 코드를 상기 해독기에 전송하는 선택 수단으로 이루어지며,
    상기 제 1 레지스터는 1워드의 코드를 하프워드씩 분할하여 유지하는 상위측 제 1 레지스터와 하위측 제 1 레지스터로 이루어지고,
    상기 제 2 레지스터는 1워드의 코드를 하프워드씩 분할하여 유지하는 상위측 제 2 레지스터와 하위측 제 2 레지스터로 이루어지며,
    상기 선택 수단은 적어도 상기 상위측 제 2 레지스터와, 상기 하위측 제 2 레지스터와, 상기 하위측 해독 레지스터로부터 선택한 하나의 레지스터에 유지되어 있는 코드를 상기 상위측 해독 레지스터에 전송하는 상위측 선택 수단과, 적어도 상기 하위측 제 1 레지스터와, 상기 상위측 제 2 레지스터와, 상기 하위측 제 2 레지스터로부터 선택한 하나의 레지스터에 유지되어 있는 코드를 상기 하위측 해독 레지스터에 전송하는 하위측 선택 수단으로 이루어지고,
    상기 기억 수단은 상기 상위측 제 2 레지스터 및 상기 하위측 제 2 레지스터의 어느 것에도 코드가 유지되어 있지 않은 제 1 상태와, 상기 상위측 제 2 레지스터에는 코드가 유지되어 있지만, 상기 하위측 제 2 레지스터에는 코드가 유지되어 있지 않은 제 2 상태와, 상기 상위측 제 2 레지스터 및 상기 하위측 제 2 레지스터에 코드가 유지되어 있는 제 3 상태중 어느 하나의 저장 상태를 기억하는 것을 특징으로 하는 마이크로 프로세서.
  5. 제 4 항에 있어서,
    상기 제어 수단은 상기 기억 수단에 기억되어 있는 상태가 제 2 상태이며, 상기 제 1 판단 수단에 의하여 다음에 해독할 코드의 단어 길이가 1워드라고 판단된 경우에는 상기 상위측 선택 수단이 상기 상위측 제 2 레지스터에 유지되어 있는 코드를 상기 상위측 해독 레지스터에 전송하고, 상기 하위측 선택 수단이 상기 하위측 제 1 레지스터에 유지되어 있는 코드를 상기 하위측 해독 레지스터에 전송하도록 상기 선택 수단을 제어하는 것을 특징으로 하는 마이크로 프로세서.
  6. 제 4 항에 있어서,
    상기 제어 수단은 상기 기억 수단에 기억되어 있는 상태가 제 3 상태이며, 상기 제 1 판단 수단에 의하여 다음에 해독할 코드의 단어 길이가 하프워드라고 판단된 경우에는 상기 상위측 선택 수단이 상기 하위측 해독 레지스터에 유지되어 있는 코드를 상기 상위측 해독 레지스터에 전송하고, 상기 하위측 선택 수단이 상기 하위측 제 2 레지스터에 유지되어 있는 코드를 상기 하위측 해독 레지스터에 전송 하도록 상기 선택 수단을 제어함과 동시에 상기 기억 수단에 기억하는 상태를 제 2 상태로 갱신하는 것을 특징으로 하는 마이크로 프로세서.
  7. 제 4 항에 있어서,
    상기 제어 수단은 상기 기억 수단에 기억되어 있는 상태가 제 2 상태이며, 상기 제 1 판단 수단에 의하여 다음에 해독할 코드의 단어 길이가 하프워드라고 판단된 경우에는 상기 상위측 선택 수단이 상기 하위측 해독 레지스터에 유지되어 있는 코드를 상기 상위측 해독 레지스터에 전송하고, 상기 하위측 선택 수단이 상기 하위측 제 2 레지스터에 유지되어 있는 코드를 상기 하위측 해독 레지스터에 전송 하도록 상기 선택 수단을 제어함과 동시에 상기 기억 수단에 기억하는 상태를 제 3 상태로 갱신하는 것을 특징으로 하는 마이크로 프로세서.
  8. 제 3 항에 있어서,
    상기 기억 수단에 기억된 저장 상태와 상기 해독기에서의 해독 결과에 기초하여 상기 해독기에 의하여 해독된 명령이 하프워드로 종료하는 외부 메모리상의 위치에 위치되어 있던 서브루틴 분기 명령인지의 여부를 판단하는 제 2 판단 수단을 구비하고,
    상기 실행 수단은 상기 명령이 하프워드로 종료하는 외부 메모리 상의 위치에 위치되어 있던 서브루틴 분기 명령이라고 판단된 경우에는, 그 위치에 해당하는 메모리 번지에 하프워드의 코드에 상당하는 번지를 가산한 메모리 번지를 서브루틴으로부터의 복귀 번지로 간주하여 서브루틴으로의 분기 처리를 실행하는 것을 특징으로 하는 마이크로 프로세서.
  9. 프로그램의 코드 크기의 축소화를 지원하는 마이크로 프로세서로서,
    외부 메모리에 접속되고, 메모리 액세스 목표의 어드레스를 유지하는 오퍼랜드 어드레스 버퍼와,
    명령을 인출하는 인출(fetch)수단과,
    상기 인출 수단에 의하여 인출된 명령 중 메모리 액세스를 수반하는 명령을 검출하는 명령 검출 수단과,
    상기 명령 검출 수단에 의하여 검출된 명령이 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스를 액세스 목표로서 지정하고 있는지의 여부를 판정하는 판정 수단과,
    상기 판정 수단에 의하여 지정되어 있다고 판정된 경우에는, 그 어드레스를 외부 메모리에 출력하도록 상기 오퍼랜드 어드레스 버퍼를 제어하는 제 1 제어 수단과,
    지정되어 있지 않다고 판정된 경우에는, 그 명령의 오퍼랜드 어드레스를 오퍼랜드 어드레스 버퍼에 저장하여 그 어드레스를 외부 메모리에 출력하도록 오퍼랜드 어드레스 버퍼를 제어하는 제 2 제어 수단을 포함하는 것을 특징으로 하는 마이크로 프로세서.
  10. 제 9 항에 있어서,
    인터럽트 처리의 발생 및 종료를 검출하는 인터럽트 검출 수단과,
    상기 인터럽트 검출 수단에 의하여 인터럽트 처리의 발생이 검출되면 상기 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스를 스택에 세이브하는 세이브 수단과,
    상기 인터럽트 수단에 의하여 인터럽트 처리의 종료가 검출되면 스택에 세이브되어 있던 어드레스를 상기 오퍼랜드 어드레스 버퍼에 복귀하는 복귀 수단을 추가로 포함하는 것을 특징으로 하는 마이크로 프로세서.
  11. 프로그램의 코드 크기의 축소화를 지원하는 마이크로 프로세서로서,
    외부 메모리에 접속되고, 직전으로부터 n회째까지의 메모리 액세스의 n+1개의 어드레스를 유지하는 n+1단의 오퍼랜드 어드레스 버퍼를 가지는 버퍼 어레이와, 명령을 인출하는 인출 수단과,
    상기 인출 수단에 의하여 인출된 명령 중 메모리 액세스를 수반하는 명령을 검출하는 명령 검출 수단과,
    검출된 명령이 상기 버퍼 어레이 중의 어떤 오퍼랜드 어드레스 버퍼를 지정하는 정보를 포함하고 있는지의 여부를 판정하는 판정 수단과,
    정보를 포함하고 있다고 판정된 경우, 그 정보로 지정된 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스를 외부 메모리에 출력하도록 버퍼 어레이를 제어하는 제 1 제어 수단과,
    정보를 포함하고 있지 않다고 판정된 경우, 그 명령의 오퍼랜드 어드레스를 오퍼랜드 어드레스 버퍼에 저장하고, 그 오퍼랜드 어드레스를 외부 메모리에 출력 하도록 버퍼 어레이를 제어하는 제 2 제어 수단을 포함하는 것을 특징으로 하는 마이크로 프로세서.
  12. 제 11 항에 있어서,
    상기 제 2 제어 수단은,
    상기 명령 검출 수단에 의하여 메모리 액세스를 내용으로 하는 명령이 검출될 때마다 버퍼 어레이내의 각 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스를 순차적으로 후단의 오퍼랜드 어드레스 버퍼로 시프트시키도록 제어하는 제 1 제어부와,
    상기 제 1 제어부에 의한 시프트가 실행된 후에, 상기 인출 수단에 의하여 인출된 명령의 오퍼랜드 어드레스를 맨앞단의 오퍼랜드 어드레스 버퍼에 저장하도록 제어하는 제 2 제어부와,
    상기 제 2 제어부에 의하여 저장된 어드레스를 외부 메모리에 출력하도록 버퍼 어레이를 제어하는 제 3 제어부를 구비하는 것을 특징으로 하는 마이크로 프로세서.
  13. 제 12 항에 있어서,
    인터럽트 처리의 발생 및 종료를 검출하는 인터럽트 검출 수단과,
    상기 인터럽트 검출 수단에 의하여 인터럽트 처리의 발생이 검출되면, n+1단의 오퍼랜드 어드레스 버퍼에 유지되어 있는 어드레스를 스택에 세이브하는 세이브 수단과,
    상기 인터럽트 검출수단에 의하여 인터럽트 처리의 종료가 검출되면, 스택에 세이브되어 있던 n+1개의 어드레스를 상기 n+1단의 오퍼랜드 어드레스 버퍼에 복귀하는 복귀 수단을 추가로 포함하는 것을 특징으로 하는 마이크로 프로세서.
KR1019960015261A 1995-05-31 1996-05-09 프로그램의코드크기의축소화를지원하는마이크로프로세서 KR100436015B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP13328195A JP3199603B2 (ja) 1995-05-31 1995-05-31 コードサイズ縮小化マイクロプロセッサ
JP95-134078 1995-05-31
JP13407895A JP3199604B2 (ja) 1995-05-31 1995-05-31 プロセッサ
JP95-133281 1995-05-31

Publications (2)

Publication Number Publication Date
KR960042329A KR960042329A (ko) 1996-12-21
KR100436015B1 true KR100436015B1 (ko) 2004-09-16

Family

ID=26467675

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960015261A KR100436015B1 (ko) 1995-05-31 1996-05-09 프로그램의코드크기의축소화를지원하는마이크로프로세서

Country Status (5)

Country Link
US (2) US5966514A (ko)
EP (2) EP0745932B1 (ko)
KR (1) KR100436015B1 (ko)
CN (2) CN1114153C (ko)
DE (2) DE69632970T2 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6219779B1 (en) * 1997-06-16 2001-04-17 Matsushita Electric Industrial Co., Ltd. Constant reconstructing processor which supports reductions in code size
DE69823642T2 (de) * 1998-03-27 2005-04-21 Motorola Inc System und Verfahren zur Umwandlung von Befehlen
FR2777370B1 (fr) * 1998-04-09 2000-06-23 Sgs Thomson Microelectronics Architecture de dsp optimisee pour les acces memoire
US6178496B1 (en) 1999-02-17 2001-01-23 Motorola, Inc. System for converting instructions, and method therefore
KR100308211B1 (ko) 1999-03-27 2001-10-29 윤종용 압축 명령을 갖는 마이크로 컴퓨터 시스템
KR100619682B1 (ko) * 1999-12-22 2006-09-08 엘지전자 주식회사 이아이에스씨 프로세서
US6721875B1 (en) * 2000-02-22 2004-04-13 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form
KR100353814B1 (ko) * 2000-08-18 2002-09-27 주식회사 하이닉스반도체 확장된 램 억세스 명령어를 억세스하는 시간을 향상시킨램 억세스 장치
US6934936B2 (en) * 2001-02-01 2005-08-23 International Business Machines Corporation Apparatus and method for adaptive address-based historical utilization recording
JP2005050208A (ja) * 2003-07-30 2005-02-24 Matsushita Electric Ind Co Ltd マルチタスクシステムにおけるメモリ管理方式およびタスク制御装置
WO2010084379A1 (en) * 2009-01-21 2010-07-29 Freescale Semiconductor, Inc. Microprocessor architecture and method of instruction decoding
CN113138800B (zh) * 2021-03-25 2023-05-09 沐曦集成电路(上海)有限公司 定长指令集的编解码方法及计算***
CN115878187B (zh) * 2023-01-16 2023-05-02 北京微核芯科技有限公司 支持压缩指令的处理器指令处理装置和方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS54122043A (en) * 1978-03-15 1979-09-21 Toshiba Corp Electronic computer
JPS61282932A (ja) * 1985-06-07 1986-12-13 Fujitsu Ltd アドレスカウンタ制御方式
JPS63245522A (ja) * 1987-03-31 1988-10-12 Toshiba Corp マイクロプロセツサ
JPH03201133A (ja) * 1989-12-28 1991-09-03 Sanyo Electric Co Ltd 情報処理装置
JPH04104350A (ja) * 1990-08-23 1992-04-06 Hitachi Ltd マイクロプロセッサ
KR930016896A (ko) * 1992-01-06 1993-08-30 가나이 쯔도무 병렬연산기능을 가지는 계산기

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4245304A (en) * 1978-12-11 1981-01-13 Honeywell Information Systems Inc. Cache arrangement utilizing a split cycle mode of operation
US4336602A (en) * 1979-09-24 1982-06-22 Control Data Corporation Network for generating modified microcode addresses
AU553416B2 (en) * 1984-02-24 1986-07-17 Fujitsu Limited Pipeline processing
JPS61138333A (ja) * 1984-12-10 1986-06-25 Nec Corp 演算モジユ−ル
US5101483A (en) * 1988-01-27 1992-03-31 Oki Electric Industry Co., Ltd. Instruction decoder simplification by reuse of bits to produce the same control states for different instructions
US5249273A (en) * 1989-01-17 1993-09-28 Fujitsu Limited Microprocessor having a variable length instruction format
KR0163179B1 (ko) * 1989-03-31 1999-01-15 미다 가쓰시게 데이타 프로세서
JPH03233630A (ja) * 1990-02-08 1991-10-17 Nec Corp 情報処理装置
US5367648A (en) * 1991-02-20 1994-11-22 International Business Machines Corporation General purpose memory access scheme using register-indirect mode
US5428786A (en) * 1991-03-07 1995-06-27 Digital Equipment Corporation Branch resolution via backward symbolic execution
US5706460A (en) * 1991-03-19 1998-01-06 The United States Of America As Represented By The Secretary Of The Navy Variable architecture computer with vector parallel processor and using instructions with variable length fields
US5452423A (en) * 1991-06-13 1995-09-19 Chips And Technologies, Inc. Two-ROM multibyte microcode address selection method and apparatus
JPH0527970A (ja) * 1991-07-18 1993-02-05 Seikosha Co Ltd 演算装置
JP2970821B2 (ja) * 1991-08-21 1999-11-02 松下電器産業株式会社 データ処理装置
US5542058A (en) * 1992-07-06 1996-07-30 Digital Equipment Corporation Pipelined computer with operand context queue to simplify context-dependent execution flow
US5590358A (en) * 1994-09-16 1996-12-31 Philips Electronics North America Corporation Processor with word-aligned branch target in a byte-oriented instruction set

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS54122043A (en) * 1978-03-15 1979-09-21 Toshiba Corp Electronic computer
JPS61282932A (ja) * 1985-06-07 1986-12-13 Fujitsu Ltd アドレスカウンタ制御方式
JPS63245522A (ja) * 1987-03-31 1988-10-12 Toshiba Corp マイクロプロセツサ
JPH03201133A (ja) * 1989-12-28 1991-09-03 Sanyo Electric Co Ltd 情報処理装置
JPH04104350A (ja) * 1990-08-23 1992-04-06 Hitachi Ltd マイクロプロセッサ
KR930016896A (ko) * 1992-01-06 1993-08-30 가나이 쯔도무 병렬연산기능을 가지는 계산기

Also Published As

Publication number Publication date
DE69632970D1 (de) 2004-08-26
CN1492318A (zh) 2004-04-28
EP1143333A3 (en) 2001-10-31
DE69630416D1 (de) 2003-11-27
CN1144359A (zh) 1997-03-05
KR960042329A (ko) 1996-12-21
EP1143333A2 (en) 2001-10-10
DE69632970T2 (de) 2004-12-16
EP0745932A3 (en) 1998-09-09
DE69630416T2 (de) 2004-07-29
CN1114153C (zh) 2003-07-09
CN1286004C (zh) 2006-11-22
US5966514A (en) 1999-10-12
US6253305B1 (en) 2001-06-26
EP0745932B1 (en) 2003-10-22
EP0745932A2 (en) 1996-12-04
EP1143333B1 (en) 2004-07-21

Similar Documents

Publication Publication Date Title
US6405302B1 (en) Microcomputer
KR100436015B1 (ko) 프로그램의코드크기의축소화를지원하는마이크로프로세서
US5522053A (en) Branch target and next instruction address calculation in a pipeline processor
US5682531A (en) Central processing unit
EP1267258A2 (en) Setting up predicates in a processor with multiple data paths
US4945511A (en) Improved pipelined processor with two stage decoder for exchanging register values for similar operand instructions
US6631459B1 (en) Extended instruction word folding apparatus
EP0982655A2 (en) Data processing unit and method for executing instructions of variable lengths
JP2003044273A (ja) データ処理装置及びデータ処理方法
EP1267255A2 (en) Conditional branch execution in a processor with multiple data paths
US5077659A (en) Data processor employing the same microprograms for data having different bit lengths
US5396610A (en) Register address specifying circuit for simultaneously accessing two registers
KR100308211B1 (ko) 압축 명령을 갖는 마이크로 컴퓨터 시스템
JP3504355B2 (ja) プロセッサ
US5361338A (en) Pipelined system for decomposing instruction into two decoding parts and either concurrently generating two operands addresses of merging decomposing decoding codes based upon the second operand
JP3199603B2 (ja) コードサイズ縮小化マイクロプロセッサ
EP0967544A2 (en) Digital signal processor for data having a large bit-length
US5269008A (en) Method and apparatus for pre-processing the source of a pop instruction in a pipeline computer
US5596761A (en) Central processing unit with internal register initializing means
JP3199604B2 (ja) プロセッサ
JPH11259293A (ja) データ処理装置
JP2878250B2 (ja) データ処理装置
JPH117388A (ja) プロセッサ
KR19990046284A (ko) 확장명령어를갖는중앙처리장치
JP2004094973A (ja) プロセッサ

Legal Events

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

Payment date: 20130520

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20140522

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 12

EXPY Expiration of term