KR20010007031A - 데이터 처리장치 - Google Patents

데이터 처리장치 Download PDF

Info

Publication number
KR20010007031A
KR20010007031A KR1020000022824A KR20000022824A KR20010007031A KR 20010007031 A KR20010007031 A KR 20010007031A KR 1020000022824 A KR1020000022824 A KR 1020000022824A KR 20000022824 A KR20000022824 A KR 20000022824A KR 20010007031 A KR20010007031 A KR 20010007031A
Authority
KR
South Korea
Prior art keywords
instruction
register
command
data
code
Prior art date
Application number
KR1020000022824A
Other languages
English (en)
Inventor
미츠이시나오키
Original Assignee
가나이 쓰토무
가부시키가이샤 히타치세이사쿠쇼
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 가나이 쓰토무, 가부시키가이샤 히타치세이사쿠쇼 filed Critical 가나이 쓰토무
Publication of KR20010007031A publication Critical patent/KR20010007031A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/342Extension of operand address space

Abstract

본 발명은, 데이터 처리장치에 관한 것으로, 레지스터를 지정하는 레지스터 지정정보를 2개의 부분으로 분할하고, 이 2개의 부분을 명령코드의 기본단위상의 개개의 기본단위에 배치한다. 이 때, 한쪽 명령코드를 생략가능하게 하여, 생략가능한 명령코드를 생략하면 제어부(CONT)는 소정의 레지스터 지정정보를 암묵적으로 상정하여 레지스터 선택동작을 수행하며, 이로 인해 암묵적을 지정가능한 범용 레지스터(기존의 범용 레지스터)만을 사용한다면, 생략가능한 명령코드를 생략할 수 있으므로 명령코드를 증가시키지 않게 되며, 적어도 종래의 동등한 범용 레지스터를 사용하는 경우에는 종래의 동등한 명령코드로 충분하며, 명령코드를 증가시키지 않기 때문에 처리속도도 저하되지 않는다.
이와 같이 하여, 상위 호환성을 보지하면서 범용 레지스터의 수를 증가시킬 수 있는 데이터 처리장치를 제공하는 기술이 제시된다.

Description

데이터 처리장치{DATA PROCESSING APPARATUS}
본 발명은, 마이크로 컴퓨터, 마이크로 프로세서, 데이터 프로세서, CPU(Central Processing Unit) 등의 데이터 처리장치에 관한 것으로, 더욱 자세하게는, 레지스터 아키텍쳐, 상위호환성, 연산성능의 확장 등에 관한 것으로, 예를들어 싱글칩 마이크로 컴퓨터에 있어서의 소프트웨어 자산의 유효활용과 연산성능의 확장, 이용상의 편의성 향상 등에 적용하여 효과적인 기술에 관한 것이다.
반도체집적회로화된 마이크로 컴퓨터는, 어드레스 공간의 확장이나 명령세트의 확대, 고속화 등이 도모되어져 왔다. 마이크로 컴퓨터의 CPU(중앙처리장치)는 소프트웨어에 의하여 그 기능이 정의되어 있기 때문에, 어드레스 공간의 확장이나 명령세트확대, 고속화 등을 꾀한 마이크로 컴퓨터에 있어서도 기존의 마이크로 컴퓨터의 소프트웨어 자산을 효과적으로 이용할 수 있는 것이 바람직하다.
따라서, 목적레벨에서 호환성을 계속 유지하고 어드레스 공간의 확장이나 명령세트확대를 실현한 예로서, 예를들어 일본특허공개 평6-51981호 공보에 기재한 마이크로 컴퓨터 등이 있다. 이 중에서, 이른바 RISC(Reduced Instruction Set Computer) 아키텍쳐와 같은 로드저장형 아키텍쳐를 도입하는 것이 명령세트의 확장을 도모하는 데 있어서 효과적이라는 것이 나타나 있다.
로드저장형 아키텍쳐에서는, 연산처리는 CPU의 범용 레지스터를 이용하여 이루어진다. 즉, 메모리상의 데이터를 직접적으로 이용하여 연산을 수행하지 않고, 일단 메모리상의 데이터를 범용 레지스터에 전송하고, 전송된 데이터에 연산을 수행한 후, 범용 레지스터상의 연산결과를 메모리상에 다시 기록한다. 따라서, 그 처리에서 사용하지 않은 범용 레지스터가 있으면 당해 범용 레지스터에 메모리상의 데이터를 전송하면 된다. 그러나, 범용 레지스터의 수에는 한계가 있고, 마이크로 컴퓨터 내부의 처리상황에 따라서는 모든 범용 레지스터를 사용하고 있는 경우도 있다. 모든 범용 레지스터를 사용하고 있는 경우, 다시말해 모든 범용 레지스터의 내용이 보지되어야만 할 때에는, 상기 메모리상의 데이터에 대한 연산을 수행하기 전에 범용 레지스터의 내용을 스택영역 등에 퇴피시킨 후 필요한 처리를 수행하고, 이 처리가 종료된 후에는 중단시킨 처리를 재개하기 위하여 상기 퇴피시킨 범용 레지스터의 내용을 복귀하지 않으면 안된다.
《검토과제 A》
본 발명자는, 검토과제 A로서 호환성을 유지하여 소프트웨어 자산을 효과적으로 이용할 수 있도록 하고, CPU의 범용 레지스터를 증가시키는 것을 검토하였다. 또한, 본 검토과제 A에 관한 사항은, 본원에 있어서의 제 1 기초출원인 일본국출원의 특원평11-123450호의 명세서에 이미 개시된 내용이지만, 아직 공지되지는 않았다. 이하, 본 검토과제 A에 대하여 설명하기로 한다.
상기 로드저장 아키텍쳐를 도입한 CPU에 있어서는, 데이터처리는 CPU의 범용레지스터가 중심이 되기 때문에, 범용 레지스터가 많은 것은 유리하다. 이로 인해 프로그램의 용이성이나 고속화를 도모할 수가 있다.
그러나, 어느 범용 레지스터에 대하여 처리를 실행할 지는, 일반적으로 명령코드로 지정하기 때문에, 범용 레지스터수에 대응한 레지스터 지정필드를 명령코드 중에 보지할 필요가 있다. 예를들어, 범용 레지스터 16개에 대해서는, 레지스터 지정필드 4비트를 필요로 한다. 범용 레지스터를 증가시키고자 하면, 레지스터 지정필드가 증가된다. 범용 레지스터를 4배인 64개로 하면, 레지스터 지정필드 6비트가 필요하게 된다. 처리대상은 일반적으로 2개(소스와 데스티네이션)의 데이터가 되기 때문에, 레지스터 지정필드는 2배의 비트수가 필요하게 된다.
명령의 기본단위를 예를들어 16비트(이하 워드라 부른다)로 하면, 레지스터지정필드로 점유되는 비트수의 비율이 많아져, 결국 명령코드길이를 증가시키지 않으면 안되게 된다. 명령코드를 길게 하면 처리속도를 저하시켜 버리게 된다. CPU는 명령을 판독하여 실행하는데, 판독해야 할 명령의 워드수(비트수)가 커지게 되면 명령자체의 판독회수도 증가하기 때문이다. 또한, 레지스터 지정필드를 확대하는 것은 기존 CPU의 기존 명령과 양립되지 않아 기존 CPU와의 호환성을 유지하기가 어려워진다.
범용 레지스터를 외견상 늘리는 기술로서, 범용 레지스터를 뱅크라 불리는 그룹으로 나누어 어느 하나의 뱅크를 배타적으로 선택하도록 하는 레지스터 뱅크방식이 있다. 어느 뱅크를 선택할 것인지는 제어레지스터나 제어명령 등에 의해 지정된다. 따라서, 명령코드에는 뱅크내의 범용 레지스터에 대응하는 레지스터 지정필드만을 가지며, 명령코드길이의 증가를 억지할 수 있다. 그러나, 상기 레지스터 뱅크를 절환하기 위한 명령이 필요하게 되고, 또한 프로그램 작성에 있어서는 어느 뱅크를 선택하고 있는지를 의식하지 않으면 안되므로 프로그램의 용이성을 해치기 쉽다. 동시에, 사용할 수 있는 범용 레지스터는 늘어나지 않았기 때문에, 데이터량이 많은 태스크나 적은 태스크 등이 있는 경우에는 상호간에 범용 레지스터의 할당을 융통하는 것이 어렵다.
검토과제 A에 관한 본 발명의 목적은, 상위호환성을 유지하면서 범용 레지스터의 수를 증가시킬 수 있는 데이터 처리장치를 제공하는 것에 있다.
검토과제 A에 관한 본 발명의 다른 목적은, 전체적인 명령코드를 증가시키지 않으면서 범용 레지서터수를 증가시킬 수 있는 데이터 처리장치를 제공하는 것에 있다.
검토과제 A에 관한 본 발명의 또다른 목적은, 소프트웨어 자산에 대하여 상위호환성을 유지하면서 범용 레지스터수의 증가에 의한 프로그램 작성의 용이화와 CPU의 처리성능의 향상을 실현할 수 있는 데이터 처리장치를 제공하는 것에 있다.
《검토과제 B》
본 발명자는, 검토과제 B로서 로드저장형 등의 아키텍쳐에 대한 호환성을 유지하여 그 소프트웨어 자산을 효과적으로 이용(소프트웨어 자산에 대한 상위호환성을 달성)할 수 있도록 하고, 또한, 로드저장 아키텍쳐 혹은 RISC 아키텍쳐가 동작속도의 개선에 유리하다고 하는 기존의 CPU의 이점을 유지하면서 메모리상의 데이터를 직접적으로 연산가능하게 하는 것에 대하여 검토하였다. 또한, 본 검토과제 B에 관한 사항은 본원에 있어서의 제 2 기초출원인 일본국출원의 특원평11-151890호 명세서에 이미 개시되었지만, 아직 그 내용은 공지되지 않았다. 이하, 본 검토과제 B에 대하여 설명하기로 한다.
메모리상의 데이터를 직접적으로 연산가능하게 함으로써 얻어진다고 생각할 수 있는 이점은 다음과 같다.
범용 레지스터에 데이터를 로드하여 연산을 수행할 뿐 아니라, 범용 레지스터에 대한 데이터로드를 거치지 않고도 메모리상의 데이터에 대하여 연산이 가능하다면, CPU 혹은 마이크로 컴퓨터가 사용가능한 모든 데이터, 다시말해 마이크로 컴퓨터의 사용자가 프로그램상에서 지정할 수 있는 모든 데이터에 대하여 연산이 가능해지기 때문에, 마이크로 컴퓨터의 이용상의 편의성, 즉 기능이 향상되어지게 된다.
이 경우, CPU가 실행하는 명령은 데이터의 소재와 그 처리내용을 지정한다 데이터의 소재를 지정하는 방법을 어드레싱 모드라 부른다. 특정한 어드레싱 모드에서만 메모리상의 데이터의 연산을 가능하게 하면, 프로그래밍상의 제약이 발생하고 이용상의 편이성을 충분히 향상시킬 수 없다. 기존의 CPU에서 데이터를 접속하는 어드레싱 모드의 임의의 조합에 의하여 메모리상의 데이터를 연산할 수 있는 것이 바람직하다고 생각된다.
또한, 메모리상의 데이터를 직접 연산가능하게 할 수 있다고 해도, 사용빈도가 높은 데이터는 범용 레지스터상에 배치하여 처리하는 것이 바람직하다. 범용 레지스터는, 물리적으로 CPU의 일부로서 구성되기 때문에, 메모리에 비해 고속으로 접속할 수 있으며, 메모리상의 데이터에 비해 고속으로 처리할 수 있다. 사용빈도가 낮은 데이터는 메모리상에 배치한 채 처리하면 된다. CPU의 처리에 직접 관계가 없는 범용 레지스터의 퇴피/복귀를 수행하지 않아도 된다. 그렇게 함으로써 CPU의 처리속도를 전체적으로 향상시킬 수 있다고 생각된다.
통상, CPU나 마이크로 컴퓨터에 의하여 처리되는 데이터의 량은, CPU의 범용 레지스터의 수 보다도 많다. 또한, 스태그의 수는 복수존재하고, 이를 시분할로 실행하게 되기 때문에, 태스크를 절환하였을 때 메모리상의 데이터를 직접적으로 연산할 수 있다면 퇴피/복귀하는 일 없이 메모리에 대하여 바로 처리를 실행할 수 있게 된다. 퇴피·복귀처리를 수반하면서도 범용 레지스터를 이용하여 연산을 고속으로 수행하는 처리방법과 병용하면서 유리한 방법을 선택할 수 있다. 마찬가지로, 인터럽트 처리를 할 때에도 범용 레지스터를 퇴피시키거나 하는 일 없이 바로 메모리에 대하여 처리를 실행할 수 있게 되며, 인터럽트에 응답하여 원하는 처리를 수행할 때까지의 응답시간을 단축할 수도 있게 된다. 인터럽트의 응답시간을 단축함으로써, 다양한 기기를 제어하는 경우의 시간적인 정도, 이른바 실시간(real-time)성을 향상시킬 수 있게 된다.
동일한 처리루틴을 루프하는(반복하는) 프로그램을 작성한 경우, 루프내의 연산처리에 필요한 범용 레지스터를 확보하고, 또한 전체적인 프로그램용량을 축소하거나 처리시간을 단축하기 위하여 루프밖에서 사용하는 데이터를 할당하는 레지스터를 확보하거나 함으로써, 범용레지스터에 여유가 없는 경우에도 수시로 메모리에 대하여 연산처리를 수행할 수 있게 된다. 이로써, 프로그램의 작성이 용이해진다. 또한, 루프내의 처리를 단축함으로써 전체적으로는 반복회수에 비례하여 처리시간을 단축할 수 있다고 예상된다.
또한, C컴파일러 등의 개발장치의 개발에는 이와 같은 다양한 조건을 고려할 필요가 있으며, 메모리에 대한 연산을 가능하게 함으로써 원하는 C컴파일러의 성능을 달성하기 위하여 필요한 개발기간이나 자원을 절약할 수도 있다고 생각된다.
또한, 상기와 같은 기기의 고속화나 고기능화, 소형화는, 어드레스 공간이 비교적 작아 명령세트가 비교적 작은 CPU 혹은 마이크로 컴퓨터에 있어서도 요구되어지기 때문에, 상기 일본특허공개 평6-519815호 공보 등에 기재된 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 그 쌍방에 대하여 메모리상의 데이터에 대한 연산을 추가하는 것이 바람직하다.
그러나, 상기 소프트웨어 자산에 대한 상위호환의 달성과, 메모리의 데이터를 직접적으로 연산가능하게 함에 있어서 다음과 같은 문제점이 있다는 사실이 본 발명자에 의해 밝혀졌다.
기존의 명령세트는, 그 사양내에서 최적화되어 있기 때문에, 메모리상의 데이터를 직접적으로 연산가능하게 하는 다양한 연산 등의 처리에 신규 명령코드를 할당할 여지는 적다. 즉, 합산이나 논리곱 등의 원하는 연산에 대하여, 데이터를 접속하는 어드레싱 모드의 임의의 조합으로 메모리상의 데이터를 연산할 수 있도록 하는 신규 명령코드를 할당하는 것은 현실적으로 어렵다.
또한, 신규명령코드나 신규 어드레싱 모드의 추가에 의하여 명령코드의 체계를 변경하는 것은, 기존의 CPU에 있어서의 기존의 명령과 양립할 수 없으므로 기존의 CPU와의 호환성을 유지하는 것이 어렵게 되버린다. 또한, 기존의 CPU의 이점을 해치게 된다.
또한, 마이크로 컴퓨터를 사용한 시스템을 개발하는 경우에는 에뮬레이터이라 불리는 개발장치가 이용된다. 에뮬리에터에는, 마이크로 컴퓨터의 기능을 포함하는 에뮬레이션용 프로세서가 탑재되어 있으며, 에뮬레이션용 프로세서는, 마이크로 컴퓨터의 동작상태를 에뮬레이터에 의하여 해석할 수 있게 하기 위한 에뮬레이션용 신호를 출력한다. 에뮬레이터 및 에뮬레이션용 프로세서에 대해서는, 일본특허공개 평8-263290호 공보에 기재되어 있다. 상술한 메모리상의 데이터를 직접연산할 수 있게 하기 위하여 마이크로 컴퓨터의 구성을 변경할 때 상기 에뮬레이션용 신호도 변경하게 되면, 에뮬레이터의 하드웨어 자체를 변경하지 않으면 안되며, 에뮬레이터 자체도 새롭개 개발하지 않으면 안되므로, 마이크로 컴퓨터의 개발장치 혹은 개발환경의 제공도 늦어진다고 하는 문제점이 분명하게 드러나게 되었다.
검토과제 B에 관한 본 발명의 목적은, 논리적·물리적 규모의 증대를 최소한으로 하고, 로드·저장형 명령세트를 가지는 기존의 CPU 혹은 마이크로 컴퓨터 등과 호환성을 유지하면서 외견상, 메모리상의 데이터에 대한 직접적인 연산을 가능하게 하는 데이터 처리장치를 제공하는 것에 있다.
검토과제 B에 관한 본 발명의 다른 목적은, 외견상, 메모리상의 데이터에 대한 연산을 가능하게 함으로써, 프로그래밍을 용이하게 함과 동시에, 원하지 않은 범용 레지스터의 퇴피/복귀를 억지하고, CPU의 처리성능을 향상시키는 데 있다.
《검토과제 C》
본 발명자는, 상기 검토과제 A로서 검토한 상기 소프트웨어 자산에 대한 상위호환과, 상기 검토과제 B로서 검토한 메모리의 데이터를 직접적으로 연산가능하게 하는 것을 실현함에 있어서, 나아가 검토과제 C로서 다음과 같은 내용을 명백히 하였다. 또한, 본 검토과제 C에 관한 사항은, 본원에 있어서의 제 3 기초출원인 일본국출원 특원평11-191608호 명세서에 이미 개시되었지만, 아직 그 내용은 공지되지 않았다. 본 검토과제 C에 대하여 설명하기로 한다.
기존의 명령세트는, 그 사양내에서 최적화되어 있기 때문에, 메모리상의 데이터를 직접적으로 연산가능하게 하는 다양한 연산 등의 처리에 신규한 명령코드를 할당하는 여지는 적다. 즉, 합산이나 논리곱 등의 원하는 연산에 대하여, 데이터를 접속하는 어드레싱 모드의 임의의 조합으로 메모리상의 데이터를 연산할 수 있도록 하는 신규의 명령코드를 할당하는 것은 현실적으로 어렵다.
또한, 신규 명령코드나 신규 어드레싱 모드의 추가에 의하여 명령코드의 체계를 변경하는 것은 기존의 CPU에 있어서의 기존의 명령과 양립할 수 없으므로 기존의 CPU와의 호환성을 유지하는 것이 어려워진다. 또한, 기존의 CPU의 이점을 해치게 된다.
따라서, 본 발명자는, 기존의 메모리·레지스터간의 전송명령의 단수 또는 복수, 레지스터·레지스터간의 연산명령 중, 복수의 명령코드를 조합시켜 이를 조합시키는 전치명령코드를 이용하여 메모리상의 연산을 가능하게 하는 것의 유용성을 먼저 발견해 내었다. 이에 의하면, 메모리·레지스터간의 전송명령, 레지스터·레지스터간의 연산명령 등의 명령코드는 기존의 것이기 때문에, 단독으로는 종래와 마찬가지로 동작하여 기존의 명령실행을 저해하는 일이 없다. 또한, 기존의 명령만을 사용한다면 기존의 소프트웨어 자산을 효과적으로 이용할 수 있다. 범용 레지스터방식이나 로드저장 아키텍쳐 등의 기존의 CPU가 가지는 이점을 해치지 않으면서상기 연산성능을 확장할 수 있다.
또한, 본 발명자는, 응용분야가 넓은 마이크로 컴퓨터에 대한 다종다양한 요구에 대해서도 검토하였다. 예를들어, 어드레스 공간이 넓은 응용분야와 어드레스 공간이 좁은 응용분야, 고급언어에 의한 프로그래밍을 주로 이용하는 응용분야와 어셈블리언어에 의한 프로그래밍을 주로 이용하는 응용분야, 데이터처리가 중요한 응용분야와 비트조작 등의 제어가 필요한 응용분야, 혹은 처리성능이 필요한 응용분야와 처리성능보다 비용절감이 필요한 응용분야 등이 있으며, 이들에 대하여 일관된 아키텍쳐에 의한 CPU(중앙처리장치)를 제공하고, 어셈블러, C컴파일러 등의 소프트웨어 개발장치(크로스소프트웨어) 등의 개발장치를 공통적으로 이용할 수 있도록 하는 것이 바람직하다.
따라서, 본 발명자는 하위호환성을 가지는 CPU에 대하여 검토하였다. 상기한 바와 같이, 본 발명자에 의한 앞의 제안에 의하면, 기존의 어드레스 공간이 좁은 CPU에 대해서도 호환성을 유지하면서 범용 레지스터를 추가하거나 메모리에 대한 연산을 추가할 수 있다. 기능을 추가해 나가는 경우는, 예를들어 비용절감의 추구 등과 같은 상기의 마이크로 컴퓨터에 대한 다종다양한 요구에 충분히 응할 수 있도록 고려할 필요성이 있다는 것을 본 발명자가 발견하게 되었다.
또한, 어셈블리언어에 의한 프로그래밍에서는, CPU의 명령세트에 의존하는 부분이 크며, 또한 사용자의 경험 등에 의한 취향과 같은 것도 존재하기 때문에, 하나의 명령세트로는 모든 요구에 응할 수 없다. 예를들어, 다른 CPU나 사용자의 취향에 맞는 명령세트를 가지는 CPU라면 이행하기 쉽지만, 동일한 명령세트를 가진 CPU에서는 한계가 발생하게 된다.
마이크로 컴퓨터 혹은 CPU의 아키텍쳐에는, 범용 레지스터방식, 어큐뮬레이터방식 등이 있기 때문에, 각각에 유사한 명령세트를 가지는 CPU를 가지면, 대부분의 사용자의 명령세트에 대한 요구에는 응할 수 있다고 생각되어진다. 적어도, 하나의 명령세트라기 보다는 서로 다른 종류의 명령세트를 가지는 CPU를 준비함으로써, 대응할 수 있는 범위를 비약적으로 크게 할 수 있다.
이 때, 이들 CPU는 독립적인 것을 다수 준비하여도 호환성이나 소프트웨이의 이식성이 손상된다면, 사용자에게 있어서 소프트웨어의 이식을 할 수 없으며, 소프트웨어를 변경하거나 하게 되어 전체적인 개발비용을 증가시키거나 개발기간을 증대시켜 버리게 된다. 한편, CPU 내지는 마이크로 컴퓨터의 제공자에게 있어서는, 독립된 CPU에서는 사용하는 기술도 서로 달라져 하나의 CPU에서 얻어진 기술을 다른 CPU에 적용하기 어려워 지므로 개발효율을 저하시키고 기능이나 성능의 향상을 도모하기 어려워지게 된다.
또한, 마이크로 컴퓨터를 사용한 시스템을 개발하는 경우에는, 소프트웨어 개발장치 및 에뮬레이터라 불리는 개발장치가 이용된다.
어셈블러나 C컴파일러, 시뮬레이터 디버거 등의 소프트웨어 개발장치에 대해서는, 상기와 같은 호환성을 가진 복수의 CPU를, 서로 한쪽이 다른쪽을 포함하는 명령세트를 가지지 않는 CPU도 포함하여 공통으로 이용할 수 있는 것이 바람직하다는 사실을 본 발명자가 밝혀내었다. 이용자도, 소프트웨어 개발장치를 공통으로 하여 서로 다른 CPU에 적용할 수 있으면, CPU를 변경할 때 원하지 않는 비용을 발생시키지 않아도 된다. 제공자도, 하나의 개발장치를 개발하면 되므로 개발효율을 향상시킬 수 있으며, 적절하게 개발장치의 기능향상이나 이용상의 편의성을 향상시킬 수 있게 된다. 어셈블리언어에 의한 프로그래밍의 용이성을 유지하면서 순서대로 고급언어로 이행할 수 있게 된다.
상기 일본특허공개 평9-198272호 공보에는, 특히 한쪽이 다른쪽 명령세트나 레지스터 구성을 포함하는 복수의 CPU에 대응할 수 있는 에뮬레이터 및 에뮬레이션용 프로세서에 대한 기술이 있었는데, 상기와 같이 이와 같은 복수의 CPU에서는 응용분야 등의 다양한 요구에 충분히 응할 수 없다. 힌쪽이 다른쪽 명령세트 등을 포함하지 않는 복수의 CPU에 대해서, 양쪽의 기능을 포함하는 상위의 CPU를 준비하는 방법도 생각할 수 있지만, 전혀 서로 다른 복수의 CPU에 대해서는 명령코드가 다르거나 어드레스 공간이나 실효 어드레스 계산방법이 달라서, 이를 포함하는 상위의 CPU를 구성하는 일이 어렵다. 또한, 가능하다 하여도, 이 때문에 큰 개발자원이 필요하게 되므로 개발에 필요한 각종 자원을 절약한다는 목적을 달성할 수 없다. 또한, 상위의 CPU가 서로 다른 복수의 CPU의 기능을 포함하기 때문에, 쓸데없이 복잡한 회로를 가지게 되거나, 실제 제품에 이용하는 것이 어렵게 되어 버리고, 개별 CPU로 절환하여 사용한다면, 신규한 CPU라 할 수 없어 응용분야 등의 다양한 요구에 부응한다고 하는 목적을 달성할 수 없다.
검토과제 C에 관한 본 발명의 목적은, 첫번째로, 응용분야나 사용자의 광범위한 요구에 응할 수 있는 데이터 처리장치를 제공하는 것에 있다. 구체적으로는, 반도체 집적회로로서의 제조비용을 줄이고, 나아가 사용자의 반도체 집적회로에 대한 비용을 줄이는 것, 응용분야의 소프트웨어상의 요구에 쉽게 부응하는 것, 또는 어셈블리언어에 의한 프로그래밍도 용이하게 하는 것 등, 사용자의 마이크로 컴퓨터에 대한 취향에 맞추거나 혹은 다른 CPU로부터 이행하기 쉽게 하는 것을 실현하는 것에 있다.
검토과제 C에 관한 본 발명의 목적은, 두번째로, 총체적인 마이크로 컴퓨터와 같은 데이터 처리장치 제품군의 개발비용을 줄이고, 개발효율을 향상시키는 데 있다. 다시말해, 개별 응용분야나 시스템에 적용시킨 복수의 CPU를 제공함과 동시에, 복수의 CPU의 총체적인 개발비용을 줄이거나, 개발효율을 향상시키는 것에 있다. 구체적으로는, 호환성이나 소프트웨어 자산의 계승성을 유지하고, 사용자의 소프트웨어 개발효율을 향상시키는 것, 기능이나 성능의 향상에 대한 요구에 부응하고, 나아가 계속시켜 기능이나 성능의 향상에 대한 요구에 부응하기 쉽게 하는 것, CPU의 이행에 맞추어 사용자가 원하지 않는 비용을 억지하는 것, 소프트웨어 개발장치나 에뮬레이터 등의 개발환경을 공통으로 이용할 수 있게 하여 사용자가 원하지 않은 비용이 증대하는 것을 억지하는 것, 또한 개발환경의 개발효율을 향상시킴과 동시에 적절하게 개선해 나가는 것을 용이하게 실현하는 것이다.
검토과제 C에 관한 본 발명의 목적은, 세번째로, 프로그램 용량은 비교적 크지만 데이터 용량은 비교적 작은 싱클칩 마이크로 컴퓨터 등에 적절한 어드레스 공간을 가진 CPU와 같은 데이터 처리장치, 즉 어드레스 공간은 넓고 논리적인 규모를 축소시킨 CPU와 같은 데이터 처리장치를 제공하는 것에 있다.
《검토과제 D》
본 발명자는, 검토과제 B에 관련된 새로운 검토과제 D로서, 분기명령의 관점에서 보면, 명령코드길이의 단축이나 처리성능의 향상에 기여하는 복합적인 명령에 대하여 검토하였다. 본 검토과제 D에 대하여 설명하기로 한다.
일반적인 마이크로 컴퓨터 시스템에 있어서, CPU의 처리는 외부입력상태에 적합하도록 이루어진다. 이는, 입출력포트의 상태에 따르거나, 이를 바탕으로 내장 RAM 등에 보지한 비트의 상태에 따라 프로그램을 분기함으로써 이루어진다.
이와 같은 외부입력상태에 대응한 CPU의 처리를 실현하기 위한 수단으로서, USP4334268호에 기재되어 있는 바와 같이, 소위 비트 테스트·앤드·브랜치(bit test and branch)등의 명령을 가지는 데이터 프로세서가 있다. 이에 있어서는, 8비트의 절대 어드레스와 3비트의 비트번호로 테스트하는 비트를 지정함과 동시에, 분기조건이 상기 지정비트의 논리값 "1"상태 또는 논리값 "0"상태 중 어느 쪽인지를 1비트로 지정하고, 또한, 8비트의 디스플레이스먼트로 분기처의 어드레스를 지정한다. 이 경우, 3바이트 길이의 명령코드에서는 명령의 지정을 4비트로 수행하지 않으면 안된다. 이 예에서는, 명령코드의 선두 4비트가 논리값 "0"으로 되어 있는 것이 비트 테스트·앤드·브랜치이다. 따라서, 이 밖의 명령은 선두 4비트를 값 1∼F로 하지 않으면 안되어, 전체적인 명령코드길이의 증가를 초래하기 쉽다.
이와 같은 명령은, 지정비트의 판독과 판정, 및 분기 어드레스의 생성 등, 명령실행제어가 복잡하며 논리규모의 증가를 초래하기 쉽고, 또한 원하지 않은 논리회로의 지연에 의하여 동작주파수의 향상의 장해가 되기 쉽다는 것을 본 발명자가 밝혀내었다.
또한, 8비트 절대 어드레스로 지정할 수 있는 것은, 256바이트에 한정되어지므로, 마이크로 컴퓨터의 고기능화에 따라 내부 I/O레지스터 등이 증가될 때, 지정가능한 범위에 원하는 비트가 존재하지 않거나, 또한 마이크로 컴퓨터의 사양설계상 어드레스 배치가 어렵게 된다. 즉, 마이크로 컴퓨터는 범용적으로 이용가능하게 되지만, 응용분야나 사용자마다 판정대상이 되는 비트가 복수에 걸쳐 상이해짐으로써, 판정대상이 되는 비트에 대한 원하는 조합의 모든 요구에 부응하는 것은 어렵다.
또한, 제어가 복잡해지면, 8비트의 상대 어드레스로는 분기할 수 없는 경우가 생기게 된다. 당해 명령이 존재하는 어드레스 또는 다음 명령이 존재하는 어드레스를 기준으로, +127∼-128바이트 범위에서 밖에는 분기할 수 없기 때문에, 판정대상인 비트가 논리값 "1"일 때 또는 논리값 "0"일 때에 실행하는 처리프로그램의 적어도 한쪽(분기조건이 성립되지 않은 경우에 실행하는 처리프로그램)은 127바이트 미만으로 할 필요가 있다. 이것을 만족할 수 없는 경우에는, 다른 분기명령을 이용하여 2단계의 분기명령의 실행에 의하여 원하는 어드레스로 분기하지 않으면 안된다. 이는 프로그램을 복잡화시키고, 처리속도도 저하시킨다는 사실을 본 발명자가 밝혀내었다.
그렇다고 해서, 절대 어드레스나 디스플레이스먼트를 16비트 등으로 하면, 필연적으로 명령코드길이의 증가를 초래하여 처리속도도 저하시키며, 명령실행제어도 더욱 복잡해진다. 절대 어드레스와 디스플레이스먼트의 비트길이의 조합을 복수로 하고자 하면 명령실행제어가 더욱 복잡해진다. 이는 추가할 명령의 종류를 늘리게 되어 기존의 CPU의 상위호환성을 유지하는 것이 어려워진다. 또한, 기존의 CPU의 이점(논리구성의 간결함이나 고속성 등)을 유지하기가 어려워져 버린다.
검토사항 D에 관한 본 발명의 목적은, 논리적·물리적 규모의 증대를 최소한으로 하고, 기존의 CPU와 호환성을 유지하면서 메모리상의 임의의 어드레스의 데이터의 비트상태를 판정하여, 분기 및 서브루틴 분기를 가능하게 하는 것에 있다. 또한, CPU의 이용상 편의성의 향상, 명령코드길이의 단축 및 처리성능의 향상을 실현하는 것을 목적으로 한다.
《검토과제 E》
본 발명자는, 검토과제 E로서 단일한 명령으로 복수의 범용 레지스터 등에 대하여 판독/기록을 수행하도록 하는 것에 대하여 검토하였다. 또한, 본 검토과제 E에 관한 사항은 본원에 있어서의 제 4 기초출원인 일본국출원 특원평11-320518호 명세서에 이미 개시되었지만, 그 내용은 아직 공지되지 않았다. 본 검토과제 E에 대하여 설명하기로 한다.
데이터 전송시의 패킷명령어 등의 정보는 복수의 정보집합으로, 예를들어 16바이트 등으로서 CPU의 데이터 처리단위 보다도 크다. CPU는, 이에 포함되는 개별정보(명령어, 전송바이트수, 전송 로케이션 등)를 판독하여 해석한다. 예를들어, 명령어는 8비트, 전송바이트수는 32비트, 전송 로케이션(어드레스)은 32비트 등으로 되며, 이들 개별정보는 대부분의 경우 CPU가 조작가능한 데이터길이이다.
또한, 프린터의 인쇄데이터 등은, CPU가 조작하는 데이터길이 보다 크다. 이들은 개별 비트(도트, 픽셀 등)의 집합이다. 이를 조작하는 경우에는, 산술적인 처리가 아니라 비트단위의 처리이며, 논리적인 처리가 주로 필요하다. 이와 같은 데이터를 처리하는 경우에는, CPU가 조작하는 데이터의 단위로 복수회로 나누어 수행한다. 즉, 메모리로부터 데이터를 판독하여 범용 레지스터상에서 처리를 수행하고, 결과를 메모리로 기록하는 처리를 수행하는 것을 반복한다.
본 발명자는, 범용 레지스터의 이용태양을 더욱 검토하였다. 상기 패킷명령어나 인쇄데이터는 워드와 같은 CPU에 의한 데이터 처리의 데이터 단위보다 크다. 이와 같은 CPU에 의한 데이터 처리의 데이터 단위보다 큰 데이터 단위에 대해서도 일괄적으로 레지스터로부터 판독 혹은 레지스터에 기록할 수 있도록 하면, 데이터 처리의 고속화를 꾀하는 데 있어서 매우 유리하다는 것을 본 발명자는 발견해 내었다. 구체적으로는, 이른바 노이만(von Neumann)형 CPU에 있어서는, 전송명령의 실행에 있어서 명령코드를 판독하고 이를 디코드하여 데이터를 판독/기록할 필요가 있으므로, 바이트 혹은 워드단위로 그와 같은 데이터의 레지스터 전송을 복수회 반복하기 보다는, 단일한 명령으로 복수의 범용 레지스터의 판독/기록을 수행하도록 하면, 데이터 전송을 위하여 명령코드를 판독하는 회수를 줄일 수 있기 때문이다.
또한, 상기 생략가능한 워드에 의하여 범용 레지스터를 확장하는 기술과 조합시키면, 그로 인해 범용 레지스터를 확장하여 복수의 범용 레지스터를 일괄적으로 판독/기록하기 위하여 그들 레지스터를 비우는 것도 용이해진다는 것을 밝혀내었다.
한편, 본 발명자들이 먼저 제안한 일본특허공개 평8-263290호 공보에 기재된 CPU는, 명령을 실행하는 실행수단을 제어하기 위한 제어수단에 대하여 지정가능한 복수의 범용 레지스터의 조합을 고정시키고, 이들 복수의 범용 레지스터의 스택에 대한 퇴피/복귀명령을 가지며, 상기 복수의 범용 레지스터를 순서대로 대피/복귀하도록 하고 있다. 이는, 서브루틴이나 예외처리 등의 처리의 휴지점의 이전의 처리상태를 보존하는 것을 목적으로 하는 처리에 한정되어 있다. 따라서, 어드레싱 모드도 스택포인터의 프리디크리먼트(predecrement)(대피)/포스트인크리먼트 (postincrement)(복귀)에 한정되어 있다. 또한, 범용 레지스터의 대피/복귀마다 어드레스 연산기를 이용하여 어드레스 계산을 수행하고 있다.
상기 일본특호공개 평8-263290호 공보에 기재된 기술을 다른 어드레싱 모드에 적용하고자 하면, 예를들어 4개의 범용 레지스터와 메모리 간의 전송명령으로는 레지스터 간접 판독의 경우, 두번째 이후의 범용 레지스터마다 어드레스 레지스터의 내용에 +4, +8, +12의 어드레스 연산처리를 수행하여 실효 어드레스를 생성할 필요가 있다. 반대로, 기록의 경우, 마지막 이외의 범용 레지스터마다 어드레스 레지스터의 내용에 -12, -8, -4의 연산처리를 수행하여 실효 어드레스를 생성할 필요가 있다. 따라서, 레지스터마다 실효 어드레스의 연산이 필요하게 되기 때문에, 원하지 않는 내부동작상태가 발생하게 된다.
또한, 디스플레이스먼트가 부가된 레지스터 간접에서는 디스플레이스먼트와 어드레스 레지스터의 내용을 합산한 결과를 내부에 보지한 상태에서, 이 합산결과에 상기 레지스터 간접과 마찬가지의 어드레스 계산을 수행할 필요가 있다. 이는, CPU의 내용동작을 복잡하게 하여 논리적 규모의 증대를 초래하기 쉽다.
일반적으로, 마이크로 컴퓨터는 범용적으로 사용할 수 있는(1종류의 칩으로 복수의 응용분야에 대응할 수 있다) 것이 그 개발효율 등의 면에서 바람직하다. 특히, CPU에 대해서는, 어셈블러나 C컴파일러와 같은 소프트웨어 개발장치 및 인서킷 에뮬레이터와 같은 하드웨어 개발장치가 필요하기 때문에, 마이크로 컴퓨터의 아키텍쳐의 변경은 용이하지 않으며, 또한 변경하는 경우도 기존의 CPU와의 호환성을 유지하여, 상기 소프트웨어 내지 하드웨어 개발장치를 공통으로 이용할 수 있도록 하고 개발효율을 향상시키는 것이 바람직하다.
또한, 블럭전송명령 등과 같은 복수단위의 데이터를 메모리상에서 연속적으로 전송하는 명령을 명령세트에 가지는 마이크로 컴퓨터도 있다. 이와 같은 명령에서는, 전송데이터는 CPU의 범용 레지스터에 격납되지 않기 때문에, 당해 데이터에 대하여 직접 조작할 수 없거나, 적어도 범용 레지스터에 대한 것 만큼 고속으로는 조작할 수 없다.
검토과제 E에 관한 본 발명의 목적은, 마이크로 컴퓨터 등의 데이터 처리장치 또는 데이터 처리시스템에 있어서, 그 논리적 규모의 증가를 최소한으로 하면서 CPU가 처리하는 데이터길이, 예를들어 바이트, 워드, 롱워드 등 보다 큰 데이터를 처리할 필요가 있는 경우에, CPU 처리프로그램의 단축, CPU에 의한 데이터 처리속도의 고속화를 실현하는 것에 있다. 구체적으로는, 본 발명은 데이터의 판독/기록에 대하여 명령의 판독의 빈도를 줄이고, 데이터 처리의 고속화를 도모할 수 있도록 하고자 하는 것이다.
검토과제 E에 관한 본 발명의 다른 목적은, 기존 CPU의 소프트웨어 자산을 효과적으로 이용할 수 있고, 새로운 시스템의 개발효율을 향상시킬 수 있으며, 기존의 CPU의 시스템 개발장치를 유용(流用)할 수 있으며, 개발환경을 신속하게 조절할 수 있는 데이터 처리장치를 제공하는 것에 있다.
검토과제 E에 관한 본 발명의 또다른 목적은, 기존의 CPU에 대하여 범용 레지스터수의 증가를 소프트웨어로 지정할 수 있고, 이를 이용하여 프로그램작성의 용이화와 레지스터 판독·레지스터 기록동작의 고율화에 의해 CPU의 처리성능을 향상시킬 수 있는 데이터 처리장치를 제공하는 것에 있다.
검토과제 E에 관한 본 발명의 그 밖의 목적은, 목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우, 목적레벨에서 호환성을 유지하면서 상기 CPU 처리프로그램의 단축, CPU에 의한 처리의 고속화 등의 목적을 달성할 수 있는 데이터 처리장치를 제공하는 것에 있다.
상기 검토과제 A 내지 검토과제 E에 관한 본원 발명은, 데이터 처리장치의 연산성능의 확장과 이용상 편의성의 향상이라는 점에 있어서 해결하고자 하는 공통의 과제를 가지고 있다.
본 발명의 상기 및 그 밖의 목적과 신규한 특징은 본 명세서의 기술 및 첨부도면을 보면 명확해질 것이다.
본원에 있어서 개시되는 발명 중 대표적인 것의 개요를 간단하게 설명하면 다음과 같다.
《검토과제 A의 해결수단》
청구항 1 내지 청구항 9에 기재된 발명은 상기 검토과제 A에 관한 해결수단을 부여하는 것이다. 본 검토과제 A에 관한 해결수단으로서, 레지스터를 지정하는 레지스터 지정정보를 2개의 부분으로 분할한다. 이 2개의 부분을 명령코드의 기본단위상의 개개의 기본단위에 배치한다. 한쪽 명령코드를 생략가능하게 하여, 생략가능한 명령코드를 생략하면, 소정의 레지스터 지정정보를 암묵적으로 상정하여 레지스터 선택동작을 수행하도록 한다.
생략가능한 명령코드는, 레지스터 지정정보의 일부를 보지하기 위한 필드를 가지며, 연산의 종류 등은 지정하지 않은 명령코드로 하면 된다. 예를들어, 생략이 불가능한 명령코드를 기존의 CPU와 공통으로 하고, 생략가능한 명령코드를 기존의 CPU의 미정의된 워드에 할당하면 된다.
생략가능한 명령코드에 포함되는 레지스터 지정 필드의 정보를 보지하는 수단을 설치하고, 상기 생략가능한 명령이 실행되면 상기 생략가능한 명령코드에 포함되는 레지스터 지정 필드의 정보를 상기 보지수단에 격납한다. 또한, 명령의 실행종료시에 상기 보지수단을 상기 암묵적인 지정에 대응하는 소정의 값으로 설정한다.
상기한 수단에 의하면, 암묵적으로 지정가능한 범용 레지스터(기존의 범용 레지스터)만을 사용한다면, 생략가능한 명령코드를 생략할 수 있기 때문에, 명령코드길이를 증가시키지 않는다. 적어도 종래와 동등한 범용 레지스터를 사용하는 경우에는 종래의 동등한 명령코드로 충분하다. 명령코드길이를 증가시키지 않음으로써 처리속도를 저하시키는 일이 없다.
상기 생략가능한 명령코드를 부가함으로써, 명령에 의하여 직접 모든 범용 레지스터를 선택할 수 있기 때문에, 프로그램의 용이성을 해치지 않으며, 이용가능한 범용 레지스터의 수를 늘릴 수 있다. 또한, 임의의 량의 범용 레지스터의 일부를 원하는 태스크마다 또는 원하는 인터럽트 처리 등에 확보해 둠(다른 태스크나 처리에서는 사용하지 않는다)으로써, 상기 태스크나 인터럽트 처리에 있어서 범용 레지스터를 대피시키거나 할 필요가 없어 고속화를 도모할 수 있다. 또한, 상기 태스크나 인터럽트 처리에 확보하는 범용 레지스터수는 임의로 할 수 있기 때문에 태스크나 처리 동안에 사용하는 범용 레지스터를 상호 쉽게 융통할 수 있다.
상기 생략가능한 명령코드를 부가함으로써, 지정할 수 있는 범용 레지스터의 접속은 RAM 등의 메모리의 접속보다 일반적으로 고속으로 할 수 있기 때문에, 범용 레지스터수를 증가시킴으로써, 고속으로 처리할 수 있는 데이터 량을 증가시키고, 나아가 CPU의 처리속도를 향상시킬 수 있다. 또한, 이른바 로드 저장형 명령세트를 가지며, 메모리의 내용에 대하여 직접 연산할 수 없는 프로세서에 대해서는, 범용 레지스터를 증가시킴으로써 직접 처리할 수 있는 데이터 량을 증가시킬 수 있으며, 또한 메모리의 접속빈도를 줄일 수 있어 처리속도를 향상시킬 수 있다.
목적레벨에서 호환성을 유지하면서, 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 어드레스 공간이 넓은 CPU로 상기 생략가능한 명령코드를 부가할 수 있다면, 하위 호환성을 가지는 어드레스 공간이 좁은 CPU에도 상기 워드를 부가할 수 있게 되기 때문에, 목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU에 범용 레지스터를 추가할 수 있다. 목적레벨에서 호환성을 유지하는 것에 의한 이점과 범용 레지스터를 추가하는 것의 이점 모두를 누릴 수 있다.
상기 수단의 더 상세한 태양에 대하여 언급하기로 한다. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터(ER0∼ER31)를 복수개 가지는 데이터 처리장치는, 명령코드를 보지하는 제 1 명령코드 보지수단(IR1) 및 제 2 명령코드 보지수단(IR2)과, 명령코드를 디코드하는 명령디코드수단(DEC)과, 상기 레지스터를 선택하는 선택수단(RSEL)을 포함한다. 상기 제 1 명령코드 보지수단의 출력은 상기 제 2 명령코드 보지수단, 상기 명령디코드수단 및 상기 레지스터 선택수단에 결합되며, 상기 제 2 명령코드 보지수단의 출력은 레지스터 선택수단에 결합되며, 상기 명령디코드수단의 출력은 레지스터 선택수단 및 상기 제 2 명려코드 보지수단에 결합되며, 상기 명령디코드수단의 상기 제 2 명령코드 보지수단으로의 출력은 상기 제 2 명령코드 보지수단에 대한 래치신호(LGRCL)와, 소정의 값으로의 세트신호(RSLGR)를 포함한다. 상기 제 2 명령코드 보지수단에 대한 래치신호는, 상기 명령디코드수단이 소정의 명령코드를 디코드하였을 때 발생하고, 상기 제 2 명령코드 보지수단에 대한 소정의 값으로의 세트신호는 상기 소정의 명령코드에 의하여 지정된 레지스터를 이용하는 처리가 종료된 후에 세트동작이 이루어지도록 발생한다.
상기 제 2 명령코드 보지수단에 대한 상기 소정의 값으로의 세트신호는, 예를들어 상기 명령디코드수단이 명령의 실행종료에 호응하여 발생하면 된다. 혹은, 상기 소정의 값을 보지하기 위한 데이터 보지수단을 더욱 포함하며, 그 데이터 보지수단의 출력을 상기 제 2 명령코드 보지수단에 결합하고, 상기 소정의 값으로의 세트신호의 발생에 호응하여 상기 제 2 명령코드 보지수단이 상기 데이터 보지수단의 값에 따른 값에 세트되도록 하여도 좋다.
《검토사항 B의 해결수단》
청구항 10 내지 청구항 43에 기재된 발명은 상기 검토과제 B에 관한 해결수단을 부여하는 것이다. 검토과제 B에 관한 해결수단으로서, 기존의 메모리·레지스터간의 전송명령이나, 레지스터·레지스터간의 연산명령 내의 복수의 명령코드를 조합시키고, 예를들어 이를 결합시키는 전치명령코드를 이용하여 메모리상의 연산을 가능하게 한다. 즉, 소정의 전치명령코드가 부가된 경우, 이에 계속되는 복수의 명령코드를 하나의 명령으로서 해석하고 실행한다. 여기서, 하나의 명령이란, 예를들어 세트 이외의 요인으로 처리가 분단되지 않는다, 혹은 리셋 등의 특정한 요인을 제외하고는 도중에 인터럽트(예외처리)를 접수하지 않는다, 등과 같이 정의할 수 있다. 이 때, CPU내의 임시 레지스터와 같은 프로그램상 해방되어 있지 않은 래치수단을 범용 레지스터를 대신해서 혹은 범용 레지스터와 함께 이용하는 것이 메모리상의 데이터에 대한 직접적인 연산(혹은 직접적인 데이터 전송)을 가능하게 한다. 여기서, 메모리상의 데이터에 대한 직접적인 연산이란, 상기 명령코드에는 명시되어 있지 않은 데이터 래치수단으로 메모리로부터 데이터를 로드하고, 당해 데이터 래치수단에 로드한 데이터를 이용하여 수행하는 연산처리이다. 또한, 메모리와의 사이의 직접적인 데이터 전송이란, 상기 명령코드에는 명시되어 있지 않은 데이터 래치수단으로 메모리로부터 데이터를 로드하고, 당해 데이터 래치수단의 데이터를 상기 메모리에 저장하는 처리이다.
구체적으로는, 상기 전치명령코드에 이어 첫번째로, 메모리·레지스터간 전송명령코드를 실행하는 경우에는, 범용 레지스터가 아니라 CPU 내의 임시 레지스터와 같은 프로그램상 해방되어 있지 않은 제 1 래치수단과 메모리 사이에서 데이터 전송을 수행한다. 또한, 두번째로서, 계속해서 레지스터·레지스터간의 연산명령코드를 실행하는 경우에는, 연산대상 내의 단수 또는 복수의 데이터를 상기 제 1 래치수단으로부터 판독하도록 한다. 여기서, 프로그램상 해방되어 있지 않은 래치수단이란, 프로그램상 이용자가 지정할 수 없는 래치수단, CPU 혹은 마이크로 컴퓨터상에 있어서 이용자로부터 보이지 않은 임시 레지스터나 버퍼 레지스터를 의미한다. 그와 같은 래치수단은, 프로그램상 해방되어 있지 않기 때문에, 당연 그 기억정보가 퇴피되어지는 것은 상정되어 있지 않으며, 대부분의 경우, 연산의 도중결과 등을 격납하는 데 이용하는 것이 상정되어 있으며, 1명령실행 중에 그 사용상태를 종료하는 것이 전제로 되어 있다. 따라서, 그 전제하에서는 상기 래치수단을 사용할 때 퇴피를 전혀 생각하지 않아도 된다. 그 전제를 보증하기 위하여, 전치명령코드와 이에 계속되는 소정의 명령을 1명령으로 간주하고, 도중에 인터럽트 등이 들어오지 않도록 고려되며, 래치수단에 대한 퇴피의 필요성을 배제하고 있다.
상기 두번째 연산명령코드가 연산결과를 메모리에 격납하는 처리를 요구하는 명령코드의 경우에는, 상기 전송명령코드에서 사용한 메모리의 어드레스는, 다른 임시 레지스터 등의 다른 래치수단(제 2 래치수단)에 격납한다. 상기 연산명령의 연산결과는 상기 제 1 래치수단에 격납한다. 계속해서 메모리·레지스터간의 전송명령코드를 마이크로 컴퓨터 스스로가 생성하고, 상기 어드레스를 격납한 제 2 래치수단의 내용을 어드레스로서, 상기 연산결과를 격납한 제 1 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
더 자세하게 설명을 덧붙이면, 전치명령코드에 의하여 1명령으로 간주되는 명령이 메모리상의 데이터와 범용 레지스터상의 데이터의 연산을 수행하고, 결과를 범용 레지스터상에 격납하는 명령의 경우에는, 전치명령코드, 메모리·레지스터 전송명령코드, 연산명령코드를 실행하고, 메모리·레지스터 전송명령코드의 실행시에는, 범용 레지스터가 아니라 전송데이터를 래치수단에 격납하고, 연산명령코드는 상기 래치수단에 격납한 데이터와 범용 레지스터상의 데이터와의 연산을 수행하고, 결과를 범용 레지스터에 격납한다.
전치명령코드에 의하여 1명령이라 간주되는 명령이, 범용 레지스터상의 데이터와 메모리상의 데이터의 연산을 수행하고, 결과를 메모리상에 격납하는 명령의 경우에는, 전치명령코드, 메모리·레지스터 전송명령코드, 연산명령코드 및 내부에서 생성된 메모리·레지스터 전송명령코드를 실행하고, 메모리·레지스터 전송명령코드의 실행시에는, 범용 레지스터가 아니라 전송데이터를 래치수단에 격납하고, 연산명령코드는, 상기 래치수단에 격납한 데이터와 범용 레지스터상의 데이터와의 연산을 수행하고, 결과를 래치수단에 격납한다. 메모리·레지스터 전송명령코드는, 상기 어드레스를 격납한 래치수단의 내용을 어드레스로서, 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다. 인크리먼트 등과 같이, 하나의 메모리상의 데이터에 대한 연산을 수행하는 경우에도 이와 마찬가지로 한다. 또한, 메모리·레지스터 전송명령코드의 실행시에는, 다시말해 하나의 명령으로 간주되는 명령에 의한 처리 도중에는, 연산결과 등을 반영하는 플래그의 변화를 억지하고, 앞의 연산명령에 의한 연산결과의 플래그의 상태를 보지한다. 그 이유는 다음과 같다. 연산명령코드의 실행에 있어서는 앞의 연산명령의 실행에 의하여 플래그에 반영된 상태를 참조하지 않으면 안되는 경우가 있으며, 이 때, 전송명령 혹은 전송명령코드의 실행에 의해서도 상기 플래그의 상태변화를 모두 허용한 경우에는 문제를 발생시키기 때문이다. 더욱 자세하게는, 당해 명령으로서의 플래그의 변화와, 전송명령 자체의 플래그의 변화가 서로 다름으로써 문제를 발생시키지는 않는다는 것이다. 구체적으로는, 그 연산이 산술연산일 때, 산술연산결과로 생겨난 오버플로 플래그가 전송명령코드에 의하여 클리어되거나 하지 않도록 한다는 것이다.
전치명령코드에 의하여 1명령으로 간주되는 명령이, 메모리상의 2개의 데이터를 이용하여 연산하고, 연산결과를 메모리상에 격납하는 명령인 경우에는, 전치명령코드, 제 1, 제 2 메모리·레지스터 전송명령코드, 연산명령코드 및 내부에서 생성한 메모리·레지스터 전송명령코드를 실행하고, 제 1, 제 2 메모리·레지스터 전송명령코드의 실행시에는, 범용 레지스터가 아니라 전송데이터를 래치수단에 격납하고, 연산명령코드는, 상기 래치수단에 격납한 데이터의 연산을 수행하고, 결과를 래치수단에 격납한다. 메모리·레지스터 전송명령코드는, 상기 어드레스를 격납한 래치수단의 내용을 어드레스로서, 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
한편, 전치명령코드에 의하여 1명령으로 간주되는 명령이, 메모리상의 데이터를 다른 메모리에 전송하는 명령인 경우에는, 전치명령코드, 메모리·레지스터 전송명령코드, 메모리·레지스터 전송명령코드를 실행하고, 메모리·레지스터 전송명령코드의 실행시에는, 범용 레지스터가 아니라 전송데이터를 래치수단에 격납하고, 메모리·레지스터 전송명령코드는, 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
전치명령코드에 의하여 1명령으로 간주되는 명령이, 이미디에이트 데이터와 메모리상의 데이터와의 연산인 경우에는, 개략적으로 범용 레지스터상의 데이터와 메모리상의 데이터의 연산을 수행하고, 결과를 메모리상에 격납하는 명령과 마찬가지로할 수 있다.
전치명령코드에 의하여 1명령으로 간주되는 명령이, 이미디에이트 데이터를 메모리에 전송하는 명령인 경우에는, 전치명령코드, 이미디에이트·레지스터 전송명령코드, 메모리·레지스터 전송명령코드를 실행하고, 이미디에이트·레지스터 전송명령코드의 실행시에는, 범용 레지스터가 아니라 이미디에이트 데이터를 래치수단에 격납하고, 메모리·레지스터 전송명령코드는, 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
복수의 명령코드를 조합시켜 일련의 것으로서 실행하는 경우에는, 각각의 명령코드 사이에 인터럽트 등의 원하지 않은 처리가 삽입되는 것을 금지한다. 그러기 위한 제어신호는 상기 전치명령코드를 디코드하여 생성하면 된다. 전치명령코드에는 그 밖의 데이터 크기 등의 정보를 가져다 줄 수도 있다.
전치명령코드에 이어, 메모리·레지스터 전송명령코드를 실행하는 경우, 독립된 메모리·레지스터 전송명령의 명령코드와 완전히 동일한 명령코드일 필요는 없으며, 청구항 11 및 청구항 29에 기재된 바와 같이 어드레싱 모드와 같은 메모리의 지정방법을 나타내는 비트만을 공통으로 하고, 그 밖의 비트는 적절하게 변경할 수 있다.
상기한 수단에 의하면, 메모리·레지스터간의 전송명령, 레지스터·레지스터간의 연산명령 등의 명령코드는 기존의 것이기 때문에, 단독으로는 종래와 마찬가지로 동작하고, 기존의 명령실행을 저해하지 않는다. 또한, 기존의 명령만을 사용하고 있다면, 기존의 소프트웨어 자산을 효과적으로 이용할 수 있다.
범용 레지스터 방식이나 로드·저장·아키텍쳐 등의 기존의 CPU가 가지는 이점을 해치지 않고 상기 연산성능을 확장할 수 있다.
상기 전치명령코드는, 어드레싱 모드나 연산의 내용에 의하지 않고 공통으로 사용할 수 있기 때문에, 추가하는 명령코드를 최저한으로 할 수 있다. 또한, 전치명령코드에, 그 밖의 데이터 크기 등의 정보를 가져다 줌으로써 전체적인 명령코드길이를 단축할 수 있다.
메모리로부터 래치수단으로의 데이터 판독, 연산, 래치수단의 내용을 바탕으로 하는 메모리로의 기록은 기존의 명령과 사용하는 레지스터가 상이할 뿐이므로, 기존의 명령동작을 크게 변경시키지 않으면서 이용할 수 있다. 이로써, 메모리상의 데이터로의 연산을 가능하게 하는 것에 의한 논리규모의 증가를 최소한으로 할 수 있다.
메모리상의 데이터를 직접적으로 연산가능하게 함으로써, 직접처리할 수 있는 데이터 량을 증가시킬 수 있으며, 또한, 범용 레지스터의 퇴피/복귀 등을 생략할 수 있어 처리속도를 향상시킬 수 있다.
메모리상의 데이터와 범용 레지스터상의 데이터의 연산을 수행하고, 결과를 범용 레지스터상에 격납하는 명령인 경우에는, 전치명령코드를 포함하기 위하여 메모리·레지스터 전송명령코드, 연산명령코드를 개별적으로 실행한 경우의 합계 처리시간보다 늦지만, 범용 레지스터의 퇴피나 복귀를 수행하지 않기 때문에, 전체적인 처리사간은 향상시킬 수 있다. 또한, 메모리상의 데이터와 범용 레지스터상의 데이터의 연산을 수행하고, 결과를 메모리상에 격납하는 명령인 경우에는, 레지스터·메모리 전송명령코드를 내부에서 발생시켜, 명령코드의 판독을 수행하지 않으며, 상기 다른 래치수단(제 2 래치수단)을 이용하여 판독시에 계산한 메모리 어드레스를 재이용할 수 있는 것에 의하여, 메모리·레지스터 전송명령코드, 연산명령코드, 레지스터·메모리 전송명령코드를 개별적으로 실행한 경우의 합계 처리시간 보다도 처리시간을 단축할 수 있다.
목적레벨에서 호환성을 유지하면서, 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 어드레스 공간이 넓은 CPU로 상기 전치명령코드를 부가하고, 존재하는 전송명령, 연산명령을 조합시킴으로써, 하위 호환성을 가지는 어드레스 공간이 좁은 CPU로도 메모리상의 데이터에 대한 직접적인 연산을 가능하게 할 수 있다. 다시말해, 동일한 방법으로 목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU로도 메모리상의 데이터를 직접적으로 연산가능하게 할 수 있다. 목적레벨에서 호환성을 유지하는 것에 의한 이점과 메모리상의 데이터를 직접적으로 연산가능하게 하는 것의 이점 모두를 누릴 수 있다.
기존의 명령을 조합시켜 신규한 명령기능을 실현하고 있기 때문에, 한층 더명령세트를 확장시키고 고속화함에 있어서, 기존의 CPU에 대하여 새로운 과제를 적게 만들어낸다. 다시말해, 기존의 CPU에 대하여 더욱 명령세트를 확장시키고 고속화를 수행하는 기술이 존재하는(발명된) 경우에는 본 발명을 적용하고, 기존의 CPU에 대하여 명령세트를 확대한 CPU에 대해서도 마찬가지의 기술을 적용할 수 있다. 신규한 명령기능을 실현하기 위하여 이용하고 있는 기존의 명령의 각각에 상기 기술을 적용하여 다시 조합시키면 된다. 전치명령코드는 동작이 단순하며, 또한 기존의 명령과 유사한 동작으로 함으로써 변경이 용이하다.
또한, 기존의 명령을 조합시켜 신규한 명령기능을 실현하고 있기 때문에, 기존의 CPU와 에뮬레이션용 인터페이스를 공통화할 수 있으며, 나아가 동일한 에뮬레이터의 하드웨어를 공통으로 이용할 수 있다. 에뮬레이터의 하드웨어를 공통화함으로써, 신속하게 개발환경을 조절할 수 있으며, 또한 에뮬레이터의 개발에 필요한 자원을 최소한으로 할 수 있다.
《검토사항 C의 해결수단》
청구항 44 내지 청구항 66에 기재된 발명은 상기 검토과제 C에 관한 해결수단을 부여하는 것이다. 본 검토과제 C에 관한 해결수단으로서, [1]레지스터 구성 또는 명령과 어드레싱 모드와의 조합, 혹은 상기 쌍방의 점에 관하여 한쪽이 다른쪽을 포함하지 않는 서로 다른 명령세트를 포함하는 복수의 데이터 처리장치, 예를들어 복수의 하위 CPU를 상정한다. 이 때, 한쪽이 다른쪽의 명령세트를 포함하지 않은 복수의 하위 CPU에 대하여 모든 하위 CPU를 포함하는 명령세트를 가진 상위 CPU를 구성하여 제공한다.
개발에 있어서는, 기존의 CPU(상기 하위 CPU의 하나)에 대하여 범용 레지스터의 구성을 확장하고, 또한, 명령과 어드레싱 모드의 조합을 확장시킨 상위 CPU를 개발한다. 상기 하위 CPU는 상기 상위 CPU의 서브세트의 구성 혹은 명령세트를 가지게 된다. 상기 범용 레지스터의 확장, 명령과 어드레싱 모드의 조합의 확장에 대해서는 후술하기로 한다.
또한, 상기 상위 CPU의 다른 서브세트의 태양으로써 하위 CPU의 다른쪽을 실현한다.
상기와 같이 서로 다른 명령세트를 포함하는 복수의 하위 CPU와, 적절한 상위 CPU를 제공함으로써, 응용분야의 소프트웨어상의 요구에 부응하거나, 이용자의 다양한 취향에 부응하고, 또한 다른 CPU의 어셈블리언어에 의한 프로그램으로부터도 비교적 가까운 명령세트의 CPU를 선택할 수 있으며, 고위의 CPU로의 이행을 용이하게 할 수 있다.
상기의 한쪽이 다른쪽 명령세트를 포함하지 않은 복수의 하위 CPU에 대하여 모든 CPU를 포함하는 명령세트를 가진 상위 CPU를 준비함으로써 소프트웨어 자산의 효과적인 이용을 가능하게 하면서, 성능/기능이 향상된 CPU를 준비할 수 있다. 소프트웨어 자산의 효과적인 이용에 의하여 사용자의 소프트웨어 개발의 개발효율을 향상시킬 수 있다.
개발에 있어서는, 기존의 하위 CPU에 대하여 범용 레지스터 내지는 명령과 어드레싱 모드의 조합을 확장한 상위 CPU를 개발하고, 이 서브세트를 가지는 다른 하위 CPU를 개발함으로써, 상위 CPU의 논리적 규모의 증대를 최소한으로 하면서 성능·기능·이용상의 편의성 등을 향상시킬 수 있음과 동시에, 상기 다른 하위 CPU의 개발을 용이하게 하고, 개발효율을 향상시킬 수 있다. 상기 상위 CPU보다 더 상위의 CPU를 개발하는 경우에는, 상기 상위 CPU에 대한 호환성을 유지한다면 상기 복수의 CPU와의 호환성을 자동적으로 유지할 수 있기 때문에, 소프트웨어 자산의 효과적인 이용을 실현하면서, 장래적인 기능이나 성능의 향상을 도모한 CPU를 실현하기가 쉬워진다.
하위 CPU를 위하여 개발된 프로그램은 적어도 소스 프로그램의 레벨(어셈블리언어에서의 기술레벨)에서 본 발명에 관련된 상위 CPU에 이용할 수 있게 된다. 또한, 여기서 하위 CPU란 그 레지스터 구성 및 그 명령세트가 본 발명에 관련된 상위 CPU 등의 CPU의 레지스터 구성 및 명령세트에 포함되는 CPU를 말한다.
또한, 목적 프로그램 레벨에서의 상위 호환을 실현하려면, 유효한 어드레스의 비트수와, 벡터 및 스택의 단위크기를 상기 레지스터의 이용형태에 따라 절환하는 동작모드, 예를들어 최대 모드와 최소 모드를 준비해 두면 된다. 최소 모드에 있어서 CPU는 적어도 하나의 하위 CPU와 완전히 동일하게 동작한다. 최대 모드에 있어서 CPU는 그것에 준비된 최대한의 기능으로써 상위 CPU로서 동작된다.
[2] 범용 레지스터를 확장하기 위해서는, 상기 검토과제 A에 관한 수단에서 상술한 바와 같이, 레지스터를 지정하는 레지스터 지정정보를 2개의 부분으로 분할한다. 이 2개의 부분을 명령코드의 기본단위상의 개개의 기본단위에 배치한다. 한쪽 명령코드를 생략할 수 있게 하여 생략가능한 명령코드를 생략하면, 소정의 레지스터 지정정보를 암묵적으로 상정하여 레지스터 선택동작을 수행해도록 한다..
[3] 명령과 어드레싱 모드의 조합을 확장하기 위해서는, 상기 검토과제 B에 관한 수단에서 설명한 바와 같이, 기존의 메모리·레지스터간의 전송명령이나 레지스터·레지스터간의 연산명령 내의 복수의 명령코드를 조합시키고, 예를들어 이를 결합시키는 전치명령코드를 이용하여 메모리의 데이터를 직접적으로 이용한 연산을 가능하게 한다. 즉, 소정의 전치명령코드가 부가된 경우, 이에 계속되는 복수의 명령코드를 하나의 명령으로서 해석하여 실행한다.
[4] 어드레스 공간이 넓고 논리적인 규모를 축소시킨 CPU를 실현하려면, 어드레스 공간 전체에 대응하는 비트길이의 프로그램 카운터를 설치하여, 프로그램용으로서는 어드레스 공간 전체, 적어도 대부분을 리니어하게 이용할 수 있음과 동시에, 비교적 소규모의 데이터를 취급하는 정도로 데이터 전송의 어드레싱 모드를 축소하거나, 전송 데이터의 데이터 크기를 한정하여 데이터 접속시에 사용할 수 있는 어드레스 공간을 작게하고, 이와 같은 어드레스 공간을 2개로 분할한다.
상기에 의하면, 어드레스 공간 전체에 대응하는 비트길이의 프로그램 카운터를 설치하여, 프로그램용으로서는 어드레스 공간 전체, 적어도 대부분을 리니어하게 이용할 수 있음과 동시에, 비교적 소규모의 데이터를 취급하는 정도로 데이터 전송의 어드레싱 모드를 축소하거나, 전송 데이터의 데이터 크기를 한정하여, 원하는 응용분야 등에서의 이용상 편의성을 해치지 않으면서 논리적 규모를 축소시킬 수 있다.
데이터 접속시에, 사용할 수 있는 어드레스 공간을 작게하고, 이와 같은 어드레스 공간을 2개로 분할함으로써, 이용상 편의성을 해치지 않으면서 상위 CPU와의 어드레스 공간상의 호환성을 유지함과 동시에, 상위 CPU에 실효 어드레스 계산방법 등을 절환하는 동작모드를 미리 준비해 둠으로써 소프트웨어상의 호환성을 유지할 수 있다.
프로그램용 어드레스 공간을 넓힘으로써, C언어 등의 고급언어를 사용한 프로그래밍 등에 대한 적성을 향상시킬 수 있다. 또한, 스택 포인터를 절환할 수 있음으로써, OS 등의 태스크 관리시의 스택 용량의 원하지 않은 증가를 억지할 수 있다. 내장 메모리만을 이용하여 동작하는 싱글칩 마이크로 컴퓨터 내지 마이크로 컴퓨터 시스템에서도 고급언어나 OS 등을 용이하게 이용할 수 있으며, 사용자의 소프트웨어의 개발효율을 향상시킬 수 있다.
[5] 또한, 개발장치에 대해서는, 상기 상위 CPU의 명령세트에 대한 소프트웨어 개발장치를 준비하고, 또한 한쪽이 다른쪽 명령세트를 포함하지 않는 복수의 CPU에 대해서도 공통으로 이용할 수 있게 하여, 이용자가 CPU를 선택할 수 있도록 한다.
소프트웨어 개발장치상에서 어셈블리언어 등의 범용적인 기능을 가지는 범용 레지스터의 기술을 복수종류 허락하도록 한다.
에뮬레이터에 대해서는, 탑재하는 에뮬레이션용 프로세서의 에뮬레이션용 인터페이스를 공통화한다. CPU의 해석을 수행하기 위하여, 에뮬레이터상에서 대상이 되는 CPU를 선택하는 수단을 마련한다. 특히, 역 어셈블러의 대상 CPU를 선택할 수 있게 한다.
상기 상위 CPU의 명령세트에 대한 소프트웨어 개발장치를 준비하고, 또한 한쪽이 다른쪽 명령세트를 포함하지 않은 복수의 CPU에 대해서도 공통으로 이용할 수 있게 하여, 이용자가 CPU를 선택할 수 있도록 함으로써, 소프트웨어 개발장치의 개발효율을 향상시킬 수 있다. 사용자에게 있어서는, 상기 복수의 CPU를 사용하여도 소프트웨어 개발장치가 공통이기 때문에 원하지 않은 비용을 발생시키지 않는다. 상기 복수의 CPU 내의 하나의 CPU로부터 다른 CPU로의 이행이 용이해져, 개발효율을 향상시킬 수 있다.
또한, 상위 CPU와 하위 CPU와 에뮬레이션용 인터페이스를 공통화할 수 있으며, 또한, 상위 CPU의 에뮬레이션용 논리회로를 개발함으로써 이를 하위 CPU에도 이용할 수 있으며, 에뮬레이션용 프로세서를 포함한 개발효율을 향상시킬 수 있다. 또한, 동일한 에뮬레이터의 하드웨어를 공통화할 수 있으며, 이로써 신속하게 개발환경을 조절할 수 있음과 동시에, 또한 에뮬레이터의 개발에 필요한 자원을 최소한으로 할 수 있다. 에뮬레이터에 탑재하는 역 어셈블러는 상위 CPU의 것을 개발함과 동시에, 에뮬레이터상에서 대상이 되는 CPU를 선택하는 수단을 마련함으로써, 실질적으로 하나의 역 어셈블러로 충분하게 되기 때문에 개발효율을 더욱 향상시킬 수 있다.
[6] 검토과제 C에 관하여 이상에서 설명한 수단을, 호환성, 에뮬레이션용 프로세서, 에뮬레이터, 소프트웨어 개발장치, 상위 CPU와 같은 데이터 처리장치, 하위 CPU와 같은 데이터 처리장치의 관점에서 정리할 수 있다.
[6-1] 호환성의 관점에서의 데이터 처리장치는, 명령을 소정의 절차에 따라 실행하는 것으로서, 제 1 다른 데이터 처리장치의 명령실행기능을 포함함으로써 당해 제 1 다른 마이크로 컴퓨터의 명령코드와 동일한 명령코드를 실행할 수 있으며, 제 2 다른 데이터 처리장치의 명령실행기능을 포함함으로써 당해 제 2 다른 데이터 처리장치의 명령코드와 동일한 명령코드를 실행할 수 있다. 그리고, 상기 제 1 다른 데이터 처리장치의 명령실행기능에 포함되지 않고, 상기 제 2 다른 데이터 처리장치의 명령실행기능에 포함되는 것을 오퍼랜드 지정과 오퍼레이션 지정의 쌍방 또는 어느 한쪽에 관하여 복수의 상기 지정을 조합시킨 명령과, 상기 제 2 다른 데이터 처리장치의 명령실행기능에 포함되지 않고, 상기 제 1 다른 데이터 처리장치의 명령실행기능에 포함되는 것을 오퍼랜드 지정과 오퍼레이션 지정의 쌍방 또는 어느 한쪽에 관하여 복수의 상기 지정을 조합시킨 명령을 실행하는 명령실행수단을 포함한다.
상기 오퍼랜드 지정은, 예를들어 실효 어드레스의 연산, 범용 레지스터, 또는 어드레스 공간에 관한 지정이다.
상기 데이터 처리장치가 유효한 어드레스의 비트수와 벡터 및 스택의 단위크기가 상이해지는 제 1 동작모드와 제 2 동작모드를 절환할 수 있게 가진다면, 상기 제 1 동작모드에 있어서의 유효한 어드레스의 비트수와 벡터 및 스택의 단위크기는 상기 제 1 다른 데이터 처리장치와 동등하다. 상기 제 2 동작모드에 있어서의 유효한 어드레스의 비트수와 벡터 및 스택의 단위 크기는 상기 제 2 다른 데이터 처리장치와 동등한다.
호환성에 착목한 또 다른 관점의 데이터 처리장치는, 명령을 소정의 절차에 따라 실행하는 데이터 처리장치로서, 데이터 정보의 보지에는 전체 또는 2분할한 영역을 이용할 수 있으며, 동시에 2분할된 하위측 비트수 보다도 많은 비트수로써 어드레스 정보의 보지에도 이용할 수 있는 범용 레지스터를 복수 가진다. 명령실행수단은, 상기 2분할한 하위측 비트수에 상당하는 범용 레지스터를 소정의 복수 가지는 제 1 다른 데이터 처리장치의 명령코드와 동일한 비트수의 명령코드를 실행할 수 있도록, 당해 제 1 다른 데이터 처리장치의 명령실행기능을 포함한 상태에서, 상기 2분할할 수 있는 범용 레지스터의 전체를 이용하는 명령을 실행하고, 또한, 상기 2분할할 수 있는 범용 레지스터를 상기 소정의 복수 보다도 적은 수만큼 가지는 제 2 다른 데이터 처리장치의 명령코드와 동일한 비트수의 명령코드를 실행할 수 있도록, 당해 제 2 다른 데이터 처리장치의 명령실행기능을 포함한다.
호환성에 착목한 데이터 처리장치의 개발방법의 관점에 의하면, 제 1 데이터 처리장치에 있어서의 미정의된 명령코드를 전치명령코드로 하고, 상기 전치명령코드는 이에 계속되는 제 1 데이터 처리장치의 명령코드의 정의를 변경하여 제 1 데이터 처리장치에서는 정의되지 않은 오퍼랜드 지정과 오퍼레이션 지정의 쌍방 또는 어느 한쪽에 관하여 복수의 상기 지정을 조합시킨 명령을 정의함으로써, 상기 제 1 데이터 처리장치의 명령을 포함하는 명령을 가지는 제 2 데이터 처리장치의 명령을 실현한다. 상기 제 2 데이터 처리장치의 명령의 일부에 의하여 제 3 데이터 처리장치의 명령을 실현한다.
상기 전치명령코드는, 예를들어 이에 계속되는 명령코드에 의하여 지정되는 범용 레지스터의 지정을 변경가능하게 하는 것이다. 또한, 다른 전치명령코드는, 이에 계속되는 전송명령코드와, 다른 전송명령의 코드 또는 연산명령의 코드 내의 2개 이상의 명령코드에 의하여 메모리상의 데이터의 조작을 정의하는 것이다.
[6-2] 에뮬레이션용 프로세서의 관점에 의하면, 상기 호환성의 관점에서 설명한 데이터 처리장치와 에뮬레이션 인터페이스를 포함하고, 상기 데이터 처리장치의 명령실행에 의하여 상기 제 1, 제 2 다른 데이터 처리장치의 명령실행을 대행할 수 있도록 에뮬레이션용 프로세서를 구성한다.
[6-3] 에뮬레이터의 관점에 의하면, 상기 에뮬레이션용 프로세서를 탑재하고, 이용자 프로그램을 실행하는 에뮬레이션용 프로세서에 그 내부상태를 제어시키기 위한 제어 프로그램을 격납할 수 있는 에뮬레이션 프로그램 영역과, 에뮬레이션 프로그램 영역에 상기 제어 프로그램을 격납하는 콘트롤 프로세서를 포함하여 에뮬레이터를 구성한다.
에뮬레이션용 프로세서는, 상기 제어 프로그램에 따른 내부의 설정상태에 따라 상기 제 1, 제 2 다른 데이터 처리장치의 명령실행을 대행시킬 수 있다.
[6-4] 소프트웨어 개발장치(크로스 소프트웨어)의 관점에 의하면, 생성할 프로그램의 대상이 되는 데이터 처리장치를 선택하는 수단을 마련하고, 상기 호환성의 관점에서 설명한 데이터 처리장치, 제 1 다른 데이터 처리장치 또는 제 2 다른 데이터 처리장치의 프로그램을 생성할 수 있는 소프트웨어 개발장치를 구성한다.
[6-5] 상위 CPU의 관점에 의하면, 데이터 처리장치는 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 구비하고, 명령코드를 판독하여 제어수단으로 해독하고 동작한다. 상기 명령코드는 기본단위로 구성되며, 상기 레지스터를 지정하는 레지스터 지정정보는 복수의 명령코드 기본단위로 분할하여 보지시킬 수 있게 된다. 메모리와 레지스터간의 데이터전송을 수행하는 전송명령코드와, 레지스터상의 데이터에 대하여 연산을 수행하는 연산명령코드를 명령세트에 포함한다. 상기 제어수단은, 상기 명령코드가 보유하는 상기 레지스터 지정정보의 해독결과를 바탕으로 레지스터를 선택하고, 분할된 한쪽 레지스터 지정정보를 가지는 전치명령코드가 생략된 경우에는, 생략된 레지스터 지정정보를 대신하여 소정의 레지스터 지정정보를 암묵적으로 상정하여 레지스터를 선택하고, 또한, 전치명령코드와 상기 전송명령코드와 상기 연산명령코드를 순서대로 판독하여 하나의 명령으로서 해석하여, 메모리상의 데이터에 대한 직접적인 연산을 실행시킨다.
상기 메모리상의 데이터에 대한 직접적인 연산이란, 예를들어 상기 명령코드에는 명시되어 있지 않은 데이터 래치수단으로 메모리로부터 데이터를 로드하고, 당해 데이터 래치수단에 로드한 데이터를 이용하여 수행하는 연산처리이다.
또한, 상위 CPU의 다른 관점에 의한 데이터 처리장치는, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 구비하고, 명령코드를 판독하여 제어수단으로 해독하고 동작한다. 상기 명령코드는 기본단위로 구성되며, 상기 레지스터를 지정하는 레지스터 지정정보는 복수의 명령코드 기본단위로 분할되어 보지시킬 수 있게 된다. 메모리와 레지스터간의 데이터 전송을 수행하는 전송명령코드를 명령세트에 포함한다. 상기 제어수단은, 상기 명령코드가 보유하는 상기 레지스터 지정정보의 해독결과를 바탕으로 레지스터를 선택하고, 분할된 한쪽 레지스터 지정정보를 가지는 전치명령코드가 생략된 경우에는, 생략된 레지스터 지정정보를 대신해서 소정의 레지스터 지정정보를 암묵적으로 상정하여 레지스터를 선택하고, 또한, 전치명령코드와 상기 전송명령코드와 다른 전송명령코드를 순서대로 판독하여 하나의 명령으로서 해석하여, 메모리와의 사이의 직접적인 데이터 전송을 실행시킨다.
상기 메모리와의 사이의 직접적인 데이터 전송이란, 예를들어 상기 명령코드에는 명시되어 있지 않은 데이터 래치수단으로 메모리로부터 데이터를 로드하고, 당해 데이터 래치수단의 데이터를 상기 메모리에 저장하는 처리이다.
[6-6] 하위 CPU의 관점에 의한 데이터 처리장치는, 어드레스 공간의 비트수에 상응하는 비트수의 프로그램 카운터 수단과, 데이터 정보의 보지에는 전체 또는 2분할한 영역을 이용할 수 있으며, 동시에, 2분할된 상기 한쪽 비트수 보다도 많은 비트수로써 어드레스 정보의 보지에도 이용할 수 있는 복수의 범용 레지스터와, 명령실행수단을 가진다. 상기 명령실행수단은, 데이터 정보의 보지에 상기 범용 레지스터의 전체를 이용하는 명령과, 상기 범용 레지스터와 다른 기억장치와의 사이의 데이터 전송명령을 실행할 수 있으며, 상기 데이터 전송명령의 전송데이터의 비트수를 상기 범용 레지스터의 2분할한 상기 한쪽 비트수 이하로 할 수 있으며, 또한, 어드레스 공간상의 데이터를 지정하기 위한 어드레싱 모드의 일부를 어드레스 공간상에서 복수로 분리된 부분에서 유효하게 한다.
상기 어드레스 공간상에서 복수로 분리된 한쪽 부분에는, 명령실행의 개시어드레스를 지정하는 벡터를 포함하며, 다른쪽 부분에는 판독·기록이 가능한 다른 기억장치의 어드레스를 매핑할 수 있다.
《검토과제 D의 해결수단》
청구항 67 내지 청구항 76에 기재된 발명은 상기 검토과제 D에 관한 해결수단을 부여하는 것이다. 본 검토과제 D에 관한 해결수단으로서, 메모리상의 데이터의 비트상태에 따른 분기를 수행하는 명령을, 동작을 규정하는 필드(오퍼레이션 필드)를 복수로 분할하여 이를 명령코드의 기본단위상의 다른 워드로 실현하고, 이와 같은 워드를 독립적으로 사용할 수 있는 다른 명령의 명령코드, 내지 다른 명령의 명령코드의 일부와 공통으로 한다. 이와 같은 명령코드의 제 1 워드는, 임지 레지스터와 같은 프로그램상 해방되어 있지 않은 래치수단과 메모리 사이에서 데이터 전송을 수행한다. 제 2 워드는, 상기 래치수단의 원하는 비트상태를 판정하여 분기를 수행한다. 상기 임시 레지스터와 같은 래치수단에는, 지정된 비트의 상태를 판정하는 수단을 마련하고, ALU 등으로 판독하거나 하지 않고 소정의 비트상태를 판정할 수 있도록 한다. 상기 명령코드의 제 1 워드는, 콘디션 코드 등의 변화를 금지하고, 또한 그 종료시점에서 인터럽트 예외처리를 금지하도록 한다.
제 1 예는, 임시 레지스터와 같은 프로그램상 해방되어 있지 않은 래치수단과 메모리 사이에서 데이터 전송을 수행하는 전송명령코드(제 1 워드)와, 조건분기명령코드(제 2 워드)를 조합시키고, 상기 전송명령코드에 이어서 상기 조건분기명령을 실행하는 경우에는, 조건을 컨티션 코드 대신에 비트번호와 당해 비트상태로 하도록 하고, 메모리상의 데이터의 비트상태에 따른 분기를 가능하게 한다. 또한, 상기 전송명령코드는, 비트 테스트 명령 등의 일부와 공통화하면 된다.
제 1 예의 다른 관점에서는, 비트 테스트 명령 등의 명령코드와 공통된, 임시 레지스터와 같은 프로그램상 해방되어 있지 않은 래치수단과 메모리 사이에서 데이터 전송을 수행하는 전송명령코드와 조건분기명령의 명령코드를 조합시키고, 어드레스 공간상의 데이터의 소정 비트상태를 판정하여 분기하는 분기명령을 실현한다.
제 2 예는, 기존의 메모리 레지스터간의 전송을 수행하는 명령코드, 조건분기명령을 조합시켜 이를 결합시키는 전치명령코드로써 메모리상의 데이터 비트상태에 따른 분기를 가능하게 한다. 즉, 상기 전치명령코드에 이어서 메모리 레지스터간 명령을 실행하는 경우에는, 범용 레지스터가 아니라 CPU 내의 임시 레지스터와 같은 프로그램상 해방되어 있지 않은 래치수단과 메모리 사이에서 데이터 전송을 수행한다.
구체적으로는, 메모리상의 데이터와 범용 레지스터상의 데이터 연산을 수행하고, 결과를 범용 레지스터상에 격납하는 명령인 경우에는, 전치명령코드, 메모리·레지스터 전송명령코드, 연산명령코드를 실행하고, 메모리·레지스터 전송명령코드의 실행시에는, 범용 레지스터가 아니라 전송데이터를 래치수단에 격납하고, 연산명령코드는 상기 래치수단에 격납한 데이터와 범용 레지스터상의 데이터와의 연산을 수행하여 결과를 범용 레지스터에 격납한다.
범용 레지스터상의 데이터와 메모리상의 데이터의 연산을 수행하고, 결과를 메모리상에 격납하는 명령인 경우에는, 전치명령코드, 메모리·레지스터 전송명령코드, 연산명령코드 및 내부에서 생성한 메모리·레지스터 전송명령코드를 실행하고, 메모리·레지스터 전송명령코드의 실행시에는 범용레지스터가 아니라 전송데이터를 래치수단에 격납한다. 연산명령코드는, 상기 래치수단에 격납한 데이터와 범용 레지스터상의 데이터와의 연산을 수행하여 결과를 래치수단에 격납한다. 메모리·레지스터 전송명령코드는, 상기 어드레스를 격납한 래치수단의 내용을 어드레스로서, 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다. 인크리먼트 등과 같은 하나의 메모리상의 데이터에 대한 연산을 수행하는 경우에도 이와 동일하게 한다. 또한, 메모리·레지스터 전송명령코드 실행시에는 플래그의 변화를 억지하고 연산결과의 플래그의 변화를 보지한다.
2개의 메모리상의 데이터의 연산을 수행하고, 결과를 메모리상에 격납하는 명령인 경우에는, 전치명령코드, 제 1, 제 2 메모리·레지스터간 전송명령코드, 연산명령코드 및 내부에서 생성한 메모리·레지스터간 전송명령코드를 실행하고, 제 1, 제 2 메모리·레지스터간 전송명령코드의 실행시에는, 범용 레지스터가 아니라 전송데이터를 래치수단에 격납한다. 연산명령코드는, 상기 래치수단에 격납한 데이터의 연산을 수행하고 결과를 래치수단에 격납한다. 메모리·레지스터간 전송명령코드는, 상기 어드레스를 격납한 래치수단의 내용을 어드레스로서, 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
한편, 메모리상의 데이터를 다른 메모리에 전송하는 명령인 경우에는, 전치명령코드, 메모리·레지스터간 전송명령코드, 메모리·레지스터간 전송명령코드를 실행하고, 메모리·레지스터간 전송명령코드의 실행시에는, 범용 레지스터가 아니라 전송데이터를 래치수단에 격납하고, 메모리·레지스터간 전송명령코드는 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
이미디에이트 데이터와 메모리상의 데이터의 연산인 경우에는, 개략적으로 범용 레지스터상의 데이터와 메모리상의 데이터의 연산을 수행하고, 결과를 메모리상에 격납하는 명령과 마찬가지로 할 수 있다.
이미디에이트 데이터를 메모리에 전송하는 명령인 경우에는, 전치명령코드, 이미디에이트·레지스터간 전송명령코드, 메모리·레지스터간 전송명령코드를 실행하고, 이미디에이트·레지스터간 전송명령코드의 실행시에는, 범용 레지스터가 아니라 이미디에이트 데이터를 래치수단에 격납하고, 메모리·레지스터간 전송명령코드는 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
상기한 수단에 의하면, 제 1 워드, 제 2 워드(조건분기명령) 등의 명령코드는 기존의 것이기 때문에, 단독으로는 종래와 동일하게 동작하고, 기존의 명령실행을 저해하지 않는다. 또한, 기존의 명령만을 사용하고 있다면, 기존의 소프트웨어 자산을 유효하게 이용할 수 있다. 범용 레지스터나 로드 저장 아키텍쳐 등의 기존의 CPU의 이점을 해치지 않는다. 제 1 워드, 제 2 워드(조건분기명령)에, 각각 절대 어드레스의 비트길이, 디스플레이스먼트의 비트길이 등에 복수의 종류가 있다면, 동일한 방법에 의하여 이들을 조합시킬 수 있다. 이들 조합을 가능하게 함으로써, 프로그램상의 제약을 없애고, 이용상 편의성을 향상시킬 수 있다. 또한, 동일한 방법에 의하여 서브루틴 분기명령과 조합시킬 수 있게 되며, 이용상 편의성을 향상시킬 수 있다.
임시 레지스터와 같은 래치수단에는, 지정된 비트상태를 판정하는 수단을 설치하여 ALU 등으로 판독하거나 하지 않고 소정의 비트상태를 판정할 수 있도록 함으로써, 조건분기명령의 전체적인 동작을 변경하지 않고도 실현할 수 있기 때문에, 변경하는 부분을 작게하고, 또한 논리적 규모의 증가를 최소한으로 할 수 있다.
상기 전치명령코드는, 어드레싱 모드나 연산의 내용에 의하지 않고 공통으로 사용할 수 있기 때문에, 추가하는 명령코드를 최저한으로 할 수 있다. 또한, 전치명령코드에 그 밖의 데이터 크기 등의 정보를 가져다 줌으로써 전체적인 명령코드길이를 단축할 수 있다.
메모리로부터 래치수단으로의 데이터 판독, 연산, 래치수단의 내용을 바탕으로 하는 메모리로의 기록은 기존의 명령과 사용하는 레지스터가 상이할 뿐이기 때문에, 기존의 명령동작을 크게 변경하지 않고도 이용할 수 있다. 이로써, 메모리상의 데이터로의 연산을 가능하게 하는 것에 의한 논리규모의 증가를 최소한으로 할 수 있다.
목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 어드레스 공간이 넓은 CPU로 상기 명령을 실현함으로써 하위 호환성을 가지는 어드레스 공간이 좁은 CPU로도 메모리상의 데이터를 연산가능하게 할 수 있다. 다시말해, 동일한 방법으로, 목적레벨에서 호환성을 가지면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU로도 메모리상의 데이터를 연산가능하게 할 수 있다. 목적레벨에서 호환성을 유지함으로 인한 이점과 메모리상의 데이터를 연산가능하게 함으로 인한 이점 모두를 누릴 수 있다.
기존의 명령을 조합시켜 신규한 명령기능을 실현하고 있기 때문에, 명령세트를 더욱 확장하거나 고속화함에 있어서 기존의 CPU에 대하여 새로운 과제가 적어진다. 다시말해, 기존의 CPU에 대하여 더욱 명령세트를 확장하거나 고속화를 수행하는 기술이 존재하고, 혹은 새롭게 개발된 경우에는 본 발명을 적용하고, 기존의 CPU에 대하여 명령세트를 확대한 CPU에 대해서도 마찬가지의 기술을 적용할 수 있다. 신규한 명령기능을 실현하기 위하여 이용하고 있는 기존의 명령의 각각에 상기 기술을 적용하여 다시 조합시키면 된다. 전치명령코드는 동작이 단순하며, 또한, 기존의 명령과 유사한 동작으로 함으로써 변경이 용이하다.
또한, 기존의 명령을 조합시켜 신규한 명령기능을 실현하고 있기 때문에, 기존의 CPU와 에뮬레이션용 인터페이스를 공통화할 수 있으며, 나아가 동일한 에뮬레이터의 하드웨어를 공통화할 수 있다. 에뮬레이터의 하드웨어를 공통화함으로써, 신속하게 개발환경을 조절할 수 있으며, 또한 에뮬레이터의 개발에 필요한 자원을 최소한으로 할 수 있다.
《검토과제 E의 해결수단》
청구항 77 내지 청구항 92에 기재된 발명은 상기 검토과제 E에 관한 해결수단을 부여하는 것이다. 본 검토과제 E에 관한 수단으로서, [1] 데이터 처리장치는 명령을 실행하는 실행수단을 제어하는 제어수단에 대하여 지정가능한 복수의 범용 레지스터의 조합을 고정시키고, 당해 조합이 고정된 복수의 범용 레지스터와 어드레스 공간상의 어드레스와의 사이에서 데이터 전송을 수행하기 위한 전송명령을 명령세트에 포함하고 있다. 이로써, 범용 레지스터의 비트길이 보다 큰 데이터라도 용이하게 취급할 수 있으며, 이용상 편의성을 향상시킴과 동시에 데이터의 판독/기록에 대해서 명령의 판독 빈도를 줄여 데이터 처리의 고속화를 도모할 수 있다.
어드레스 연산기에 의한 상기 전송명령의 실효 어드레스 계산은 단 1회로 하고, 어드레스 버퍼에 인크리먼트 또는 디크리먼트기능과 인크리먼트결과를 보지하는 기능을 부여함으로써, 명령동작을 단순화하여 기존의 전송명령의 제어와 공통화를 꾀할 수 있으며, 명령디코더 등의 논리적인 규모의 증가를 최소한으로 할 수 있다. 또한, 다양한 어드레싱 모드에 공통으로 이용할 수 있다.
[2] 범용 레지스터가 분할가능하며, 동시에 분할된 부분에 기능상의 차이가 있는 경우 등에는 범용 레지스터 전체를 사용하는 전송명령과, 분할된 일부분을 사용하는 전송명령을 갖추면 된다. 이로써, 데이터 처리상 사용하기 쉬운 범용 레지스터와의 전송이 가능하기 때문에, 그 처리를 용이하게 하고 고속화할 수 있다.
[3] 범용 레지스터에 대한 연산명령 등의 실행 스테이트수 등이 범용 레지스터마다 상이한 경우 등에는, 소정의 조합의 복수 범용 레지스터와, 다른 복수 범용 레지스터와의 전송명령을 갖추면 된다. 이 때, 범용 레지스터를 증가시켜 범용 레지스터를 지정하는 레지스터 지정필드를 2개의 부분으로 분할하고, 이 2개의 부분을 명령코드의 기본단위상 다른 워드에 배치함과 동시에, 한쪽 워드를 생략가능하게 하여 생략가능한 워드를 생략하면, 암묵적으로 소정의 레지스터 지정정보가 지정되도록 하여도 좋다. 생략가능한 워드에는, 레지스터 지정필드의 일부만을 가지도록 하고, 연산의 종류 등은 지정하지 않도록 한다. 생략가능한 워드에 포함되는 레지스터 지정필드를 보지하는 수단을 설치하고, 상기 생략가능한 워드가 실행되면, 상기 생략가능한 워드에 포함되는 레지스터 지정필드를 상기 보지수단에 격납한다. 또한, 명령의 실행종료시에 상기 보지수단을 상기 암묵적인 지정에 대응하는 소정의 값으로 설정한다. 생략이 불가능한 워드를 기존의 CPU와 공통으로 하고, 생략가능한 워드를 기존의 CPU의 미정의된 워드에 할당하면 된다.
암묵적으로 지정가능한 범용 레지스터(예를들어 기존의 하위 CPU의 범용 레지스터)만을 사용하고 있다면, 생략가능한 워드를 생략할 수 있기 때문에, 명령코드를 증가시키지 않는다. 명령코드를 증가지시키 않음으로써 처리속도를 저하시키는 일도 없다.
상기 생략가능한 워드를 부가함으로써, 명령에 의하여 직접 모든 범용 레지스터를 선택할 수 있기 때문에, 프로그램의 용이성을 해치는 부분이 적다. 또한, 임의의 량의 범용 레지스터의 일부를 원하는 태스크마다 또는 원하는 인터럽트 처리 등에 확보해 둠(다른 태스크나 처리에서는 사용하지 않는다)으로써, 상기 태스크나 인터럽트 처리에 있어서 범용 레지스터를 대피시키거나 할 필요가 없이 고속화를 꾀할 수 있다. 또한, 상기 태스크나 인터럽트 처리에 확보하는 범용 레지스터수는 임의로 할 수 있기 때문에 태스크나 처리 동안에 사용하는 범용 레지스터를 상호 쉽게 융통할 수 있다.
상기 워드를 부가함으로써, 지정할 수 있는 범용 레지스터의 접속은 RAM 등의 메모리의 접속보다 일반적으로 고속으로 할 수 있기 때문에, 범용 레지스터수를 증가시킴과 동시에, 복수의 범용 레지스터와 메모리와의 전송을 고속으로 실행가능하게 함으로써 CPU의 처리속도를 향상시킬 수 있다. 또한, 이른바 로드 저장형 명령세트를 가지며, 메모리의 내용에 대하여 직접 연산할 수 없는 프로세서에 대해서는, 직접 처리할 수 있는 데이터 량을 증가시킬 수 있으며, 또한 메모리의 접속을 고속화할 수 있어 처리속도를 향상시킬 수 있다.
[4] 목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 어드레스 공간이 넓은 CPU에 있어서 어드레스 공간에 대응하는 범용 레지스터에 대한 상기 전송명령과, 어드레스 공간이 좁은 CPU의 어드레스 공간에 대응하는 크기(예를들어 16비트)의 범용 레지스터에 대한 상기 전송명령을 구비한다.
목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 어드레스 공간이 넓은 CPU에 있어서, 어드레스 공간에 대응하는 크기(예를들어 32비트)의 범용 레지스터에 대한 상기 전송명령과, 어드레스 공간이 좁은 CPU의 어드레스 공간에 대응하는 크기(예를들어 16비트)의 범용 레지스터에 대한 상기 전송명령을 갖춤으로써, 후자의 크기의 상기 전송명령을 하위 호환성을 가진 어드레스 공간이 좁은 CPU로도 용이하게 실현할 수 있다. 다시말해, 동일한 방법으로 목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU로도 복수 범용 레지스터의 전송명령을 실현가능하게 할 수 있다. 목적레벨에서 호환성을 유지함으로 인한 이점과 상기 전송명령을 추가함으로 인한 이점 모두를 누릴 수 있다.
도 1은 검토과제 A, B, C에 관한 발명에 관련된 싱글칩 마이크로 컴퓨터의 CPU를 상세하게 예시하는 블럭도이다.
도 2는 검토과제 A, B, C에 관련된 데이터 처리장치의 한 예인 싱글칩 마이크로 컴퓨터의 블럭도이다.
도 3은 CPU에 내장되어 있는 범용 레지스터 및 제어 레지스터의 구성을 나타내는 설명도이다.
도 4는 제 1 하위호환의 CPU에 있어서의 범용 레지스터 및 제어 레지스터의 구성을 나타내는 설명도이다.
도 5는 제 2 하위호환의 CPU에 있어서의 범용 레지스터 및 제어 레지스터의 구성을 나타내는 설명도이다.
도 6은 CPU의 어드레스 공간에 관한 설명도이다.
도 7은 상위 CPU(2)의 최대모드에 있어서의 실효 어드레스 계산방식을 도 8과 함께 나타낸 설명도이다.
도 8은 상위 CPU(2)의 최대모드에 있어서의 실효 어드레스 계산방법을 도 7과 함께 나타낸 설명도이다.
도 9는 CPU의 기계어의 명령포맷의 한 예를 나타내는 포맷도이다.
도 10은 CPU의 메모리에 대한 전송명령의 상세한 명령포맷을 예시하는 설명도이다.
도 11은 메모리데이터에 대한 직접적인 연산명령의 명령포맷으로서 이미디에이트(immediate)를 사용하지 않은 전치명령코드, EA1, EA2, 연산의 형태를 예시하는 설명도이다.
도 12는 메모리데이터에 대한 직접적인 전송명령의 명령포맷으로서 이미디에이트를 사용하지 않은 전치명령코드, EA1, EA2의 형태를 예시하는 설명도이다.
도 13은 메모리데이터에 대한 직접적인 연산명령의 명령포맷으로서 이미디에이트를 사용하는 전치명령코드, EA2, 연산(이미디에이트)의 형태를 예시하는 설명도이다.
도 14는 메모리데이터에 대한 직접적인 전송명령의 명령포맷으로서 이미디에이트를 사용하는 전치명령코드, EA2, 전송(이미디에이트)의 형태를 예시하는 설명도이다.
도 15는 전치명령코드의 포맷을 예시하는 포맷도이다.
도 16은 데이터 전송명령에 관한 CPU의 어드레싱 모드의 조합을 나타낸 설명도이다.
도 17은 합산명령에 관한 CPU의 어드레싱 모드의 조합을 나타낸 설명도이다.
도 18은 레지스터 셀렉터의 일부와 명령 레지스터의 상세한 사항을 나타낸 불럭도이다.
도 19는 레지스터 셀렉터의 선택논리의 일부를 논리기술에 의하여 도 20과 함께 나타낸 설명도이다.
도 20은 레지스터 셀렉터의 선택논리의 일부를 논리기술에 의하여 도 19와 함꼐 나타낸 설명도이다.
도 21은 스택포인터에도 사용할 수 있는 레지스터에 관한 레지스터 셀렉터의 선택논리의 한 예를 논리기술에 의하여 도 22와 함께 나타낸 설명도이다.
도 22는 스택포인터에도 사용할 수 있는 레지스터에 관한 레지스터 셀렉터의 선택논리의 한 예를 논리기술에 의하여 도 21과 함께 나타낸 설명도이다.
도 23은 명령디코더에 포함되는 전송명령코드(mov)의 해독논리를 도 24 및 도 25와 함께 예시하는 논리기술의 설명도이다.
도 24는 명령디코더에 포함되는 전송명령코드(mov)의 해독논리를 도 23 및 도 25와 함께 예시하는 논리기술의 설명도이다.
도 25는 명령디코더에 포함되는 전송명령코드(mov)의 해독논리를 도 23 및 도 24와 함께 예시하는 논리기술의 설명도이다.
도 26은 명령디코더에 포함되는 연산명령코드(exe)의 해독논리를 도 27과 함께 나타내는 설명도이다.
도 27은 명령디코더에 포함되는 연산명령코드(exe)의 해독논리를 도 26과 함께 나타내는 설명도이다.
도 28은 명령디코더에 포함되며, 내부에서 생성되는 기록형 전송명령과 동등한 동작을 수행하는 명령코드(mov.st)의 해독논리를 도 29 및 도 30과 함께 나타낸 설명도이다.
도 29는 명령디코더에 포함되며, 내부에서 생성되는 기록형 전송명령과 동등한 동작을 수행하는 명령코드(mov.st)의 해독논리를 도 28 및 도 30과 함께 나타내는 설명도이다.
도 30은 명령디코더에 포함되며, 내부에서 생성되는 기록형 전송명령과 동등한 동작을 수행하는 명령코드(mov.st)의 해독논리를 도 28 및 도 29와 함께 나타내는 설명도이다.
도 31은 전치명령코드를 수반하지 않은 합산명령의 실행타이밍을 예시하는 동작타이밍도이다.
도 32는 레지스터 확장용 전치명령코드가 부가된 합산명령의 실행타이밍을 예시하는 동작타이밍도이다.
도 33은 레지스터 그룹 필드를 가지는 전치명령코드, 메모리·레지스터형 연산의 전치명령코드, MOV.W@aa:16, R0에 상당하는 명령코드 및 ADD.W R0, R1에 상당하는 명령코드를 조합시켜 1명령으로 간주되는 명령을 실행하였을 때의 동작타이밍을 예시하는 타이밍도이다.
도 34는 레지스터·메모리형 합산명령(ADD.W R1, @aa:16)의 실행타이밍을 나타내는 타이밍도이다.
도 35는 메모리·메모리형 합산명령(ADD.W@ER1, @aa:16)의 실행타이밍을 나타내는 타이밍도이다.
도 36은 메모리·메모리형 전송명령(MOV.W @ER1, @aa:16)의 실행타이밍을 나타내는 타이밍도이다.
도 37은 이미디에이트·메모리형 합산명령(ADD.W #xx, @aa:16)의 실행타이밍을 나타내는 타이밍도이다.
도 38은 이미디에이트·메모리형 전송명령(MOV.W #xx, @aa:16)의 실행타이밍을 나타내는 타이밍도이다.
도 39는 명령디코더(DEC)에 포함되는 연산명령코드(exe)의 해독논리의 일부에 관한 논리기술의 다른 예를 도 40 및 도 41과 함께 나타내는 설명도이다.
도 40은 명령디코더(DEC)에 포함되는 연산명령코드(exe)의 해독논리의 일부에 관한 논리기술의 다른 예를 도 39 및 도 41과 함께 나타내는 설명도이다.
도 41은 명령디코더(DEC)에 포함되는 연산명령코드(exe)의 해독논리의 일부에 관한 논리기술의 다른 예를 도 39 및 도 40과 함께 나타내는 설명도이다.
도 42는 CPU의 개발환경의 개략을 나타내는 설명도이다.
도 43은 CPU의 시스템 개발장치에 있어서의 CPU 선택방법을 예시하는 설명도이다.
도 44는 CPU의 어셈블러가 출력하는 리스트의 한 예를 나타내는 설명도이다.
도 45는 마이크로 컴퓨터를 위한 에뮬레이터의 블럭도이다.
도 46은 CPU를 위한 에뮬레이터에 의한 트레이스 리스트를 예시하는 설명도이다.
도 47은 마이크로 컴퓨터의 에뮬레이션용 프로세서의 한 예를 나타내는 블럭도이다.
도 48은 제 2 하위 CPU의 다른 프로그래밍 모델을 나타내는 설명도이다.
도 49는 CPU의 어드레스 맵(map)의 다른 예를 나타내는 설명도이다.
도 50은 도 49에 나타낸 제 2 하위 CPU의 어드레스 맵에 있어서의 실효 어드레스의 계산방법을 도 51과 함께 예시하는 설명도이다.
도 51은 도 49에 나타낸 제 2 하위 CPU의 어드레스 맵에 있어서의 실효 어드레스의 계산방법을 도 50과 함께 예시하는 설명도이다.
도 52는 명령확장용 전치명령코드, MOV. W #xx, R0에 상당하는 명령코드에 상기 데스티네이션(destination) 정보를 부가한 명령코드를 조합시켜 1명령으로 간주되는 명령을 실행하였을 때의 타이밍도이다.
도 53은 검토과제 D에 관한 발명의 마이크로 컴퓨터가 가지는 CPU의 한 예를 나타내는 블럭도이다.
도 54는 도 53의 CPU에 있어서의 비트테스트 명령의 명령포맷을 예시하는 설명도이다.
도 55는 도 53의 CPU에 있어서의 비트조건 분기명령의 명령포맷을 도 56 및 도 57과 함께 나타내는 설명도이다.
도 56은 도 53의 CPU에 있어서의 비트조건 분기명령의 명령포맷을 도 55 및 도 57과 함께 나타내는 설명도이다.
도 57은 도 53의 CPU에 있어서의 비트조건 분기명령의 명령포맷을 도 55 및 도 56과 함께 나타내는 설명도이다.
도 58은 도 53의 CPU에 있어서의 비트조건 분기명령을 고려하였을 때의 다른 명령포맷에 있어서의 명령코드의 조합을 예시하는 설명도이다.
도 59는 임시 데이터 레지스터(TRD)의 판정회로의 논리구성 및 분기제어논리를 논리기술로 예시하는 설명도이다.
도 60은 비트테스트 명령 및 비트조건 분기명령의 일부(제 1 워드)에 대한 명령디코더(DEC)의 논리구성을 도 61 및 도 62와 함께 논리기술로 예시하는 설명도이다.
도 61은 비트테스트 명령 및 비트조건 분기명령의 일부(제 1 워드)에 대한 명령디코더(DEC)의 논리구성을 도 60 및 도 62와 함께 논리기술로 예시하는 설명도이다.
도 62는 비트테스트 명령 및 비트조건 분기명령의 일부(제 1 워드)에 대한 명령디코더(DEC)의 논리구성을 도 60 및 도 61과 함께 논리기술로 예시하는 설명도이다.
도 63은 조건분기명령의 일부에 대한 명령디코더(DEC)의 논리구성을 도 64 및 도 65와 함께 논리기술에 의하여 예시하는 설명도이다.
도 64는 조건분기명령의 일부에 대한 명령디코더(DEC)의 논리구성을 도 63 및 도 65와 함께 논리기술에 의하여 예시하는 설명도이다.
도 65는 조건분기명령의 일부에 대한 명령디코더(DEC)의 논리구성을 도 63 및 도 64와 함께 논리기술에 의하여 예시하는 설명도이다.
도 66은 서브루틴 분기명령의 일부에 대한 명령디코더(DEC)의 논리구성을 도 67 및 도 68과 함께 논리기술에 의하여 예시하는 설명도이다.
도 67은 서브루틴 분기명령의 일부에 대한 명령디코더(DEC)의 논리구성을 도 66 및 도 68과 함께 논리기술에 의하여 예시하는 설명도이다.
도 68은 서브루틴 분기명령의 일부에 대한 명령디코더(DEC)의 논리구성을 도 66 및 도 67과 함께 논리기술에 의하여 예시하는 설명도이다.
도 69는 다른 연산명령에 대한 명령디코더(DEC)의 논리구성을 도 70과 함께 논리기술에 의하여 예시하는 설명도이다.
도 70은 다른 연산명령에 대한 명령디코더(DEC)의 논리구성을 도 69와 함께 논리기술에 의하여 예시하는 설명도이다.
도 71은 또한 다른 연산명령에 대한 명령디코더(DEC)의 논리구성을 도 72와 함께 논리기술로 예시하는 설명도이다.
도 72는 또한 다른 연산명령에 대한 명령디코더(DEC)의 논리구성을 도 71과 함께 논리기술로 예시하는 설명도이다.
도 73은 비트조건 분기명령의 제 1 예(BBS #0, @FFFFFE, $+20)의 실행타이밍을 예시하는 타이밍차트이다.
도 74는 비트조건 서브루틴 분기명령의 예(BBSR #5, @FFFE00, $+300)의 실행타이밍을 예시하는 타이밍차트이다.
도 75는 비트테스트 명령의 제 1 예(BTST #0, @FFFFFE)의 실행타이밍을 예시하는 타이밍차트이다.
도 76은 비트테스트 명령의 제 2 예(BTST #1, @ER0+)의 실행타이밍을 예시하는 타이밍차트이다.
도 77은 비트세트명령의 예(BSET #2, @ER0+)의 실행타이밍을 예시하는 타이밍차트이다.
도 78은 비트조건 분기명령의 제 2 예(BBC #0, @ER0+, $+20)의 실행타이밍을 예시하는 타이밍차트이다.
도 79는 검토과제 E의 본 발명에 관련된 데이터 처리장치의 한 예인 마이크로 컴퓨터의 블럭도이다.
도 80은 CPU의 어드레스 공간을 나타내는 설명도이다.
도 81은 복수 범용 레지스터의 전송명령(MOVM)의 기능을 예시하는 설명도이다.
도 82는 복수 범용 레지스터의 전송명령(MOVM)에 의한 데이터 전송의 데이터 배치를 예시하는 설명도이다.
도 83은 복수 범용 레지스터의 전송명령(MOVM)과 같은 명령을 나타내는 전치명령코드(명령확장용 전치명령코드)를 예시하는 설명도이다.
도 84는 검토과제 E의 발명에 관련된 데이터 처리장치의 한 예인 CPU의 상세한 사항의 한 예를 나타내는 블럭도이다.
도 85는 레지스터 셀렉터의 일부와 명령 레지스터의 상세한 사항을 나타내는 블럭도이다.
도 86은 레지스터 셀렉터에 입력되는 제어신호(s1∼s3)의 기능을 예시하는 설명도이다.
도 87은 어드레스 버퍼를 예시하는 블럭도이다.
도 88은 레지스터·레지스터간의 워드크기의 전송명령(MOV 및 MOVM명령)에 대한 디코더의 제어논리의 일부를 논리기술에 의하여 나타내는 설명도이다.
도 89는 도 88 다음에 계속되는 나머지 논리기술을 나타내는 설명도이다.
도 90은 16비트 절대 어드레스에 의한 전송명령(MOV 및 MOVM명령)에 대한 디코더의 제어논리의 일부를 논리기술에 의하여 나타내는 설명도이다.
도 91은 도 90 다음에 계속되는 나머지 논리기술의 설명도이다.
도 92는 도 91 다음에 계속되는 나머지 논리기술의 설명도이다.
도 93은 도 88 및 도 89에 기재된 논리기술의 제어에 의한 레지스터·레지스터간의 전송명령(MOV 및 MOVM명령)에 의한 제어동작에 대응되는 순서도이다.
도 94는 도 90 내지 도 92에 기재된 논리기술의 제어에 의한 16비트 절대 어드레스에 의한 전송명령(MOV 및 MOVM명령)에 의한 제어동작에 대응되는 순서도이다.
도 95는 레지스터-레지스터형 제 1 전송명령(MOV. L ER0, ER1), 제 2 전송명령(MOV. L ER8, ER17), 및 복수 레지스터의 전송명령의 제 1 예(MOVM. W R0-R1, E28-E29)의 실행타이밍을 예시하는 타이밍차트이다.
도 96은 복수 레지스터의 전송명령의 제 2 예(MOVM. L @aa:16, ER0-ER1)의 실행시퀀스를 예시하는 타이밍차트이다.
도 97은 복수 레지스터의 전송명령의 제 3 예(MOVM. W R10-R11, @ER6)의 실행시퀀스를 예시하는 타이밍차트이다.
도 98은 CPU의 개발환경의 개략을 예시하는 설명도이다.
도 99는 마이크로 컴퓨터의 에뮬레이션용 프로세서를 예시하는 블럭도이다.
도 100은 마이크로 컴퓨터를 프린터제어에 이용한 마이크로 컴퓨터 시스템을 예시하는 블럭도이다.
<도면의 주요부분에 대한 부호의 설명>
1 : 싱글칩 마이크로 컴퓨터 2, 502 : CPU
2A : CPU 3 : 인터럽트 콘트롤러
4 : ROM 5 : RAM
6, 7 : 타이머 8 : 시리얼 커뮤니케이션 인터페이스
9 : A/D변환기 11∼19 : 입출력포트
20 : 클록발진기 21 : 시스템 콘트롤러
22 : CPUCR 30 : 내부버스
31 : 인터럽트 요구신호
33 : 다이렉트 메모리 억세스 콘트롤러(DMAC)
36 : 분기제어신호 37 : 분기제어논리
38 : 판정회로 200 : pf 디코드논리
201 : mov 디코드논리 202 : exe 디코드논리
400 : C언어 소스 프로그램 401 : 어셈블러
402 : 링키지 에디터 403 : 시뮬레이터 디버거
404 : 에뮬레이터 410 : 에뮬레이션 프로세서
411 : 커넥터부 412 : 응용시스템
413 : 마이크로 컴퓨터 탑재영역 414 : 인터페이스 케이블
415 : 이용자 버스 416 : 이용자 메모리
420 : 에뮬레이션 버스 421 : 에뮬레이션 메모리
422 : 브레이크 제어회로 423 : 실시간 트래이스회로
424 : 콘트롤버스 425 : 콘트롤 프로세서
426 : 호스트 인터페이스회로 427 : 시스템 개발장치
442 : 에뮬레이션 인터페이스 449 : 제어레지스터
501 : 마이크로 컴퓨터 510 : 버스 콘트롤러
580 : 송수신회로 581 : 버퍼 RAM
582 : 캐릭터 제너레이터 ROM 583 : 프로그램 ROM
584 : 인자제어회로 585 : 외부버스
590 : 라인 피이드 모터 591 : 캐리지 리턴 모터
AB : 어드레스 버퍼 ALU : 산술논리연산기
AU : 산술논리연산기 bc : 비트 콘디션 필드
CHG : 명령변경부 DB, GB, WB : 버스
DEC : 명령디코더 ER0∼ER7 : 범용 레지스터
EXEC : 실행부
gr1, gr2 : 생략가능한 명령코드의 레지스터 필드
IAB : 내부 어드레스 버스 IDB : 내부 데이터 버스
INTC : 인터럽트 제어부 IR1, IR2 : 명령레지스터
LAT1, LAT2 : 레지스터 셀렉터 내의 gr2, r2의 래치회로
LGR1, LGR2 : 명령레지스터 내의 gr1, gr2의 래치회로
LOG1, LOG2 : 레지스터 셀렉터 내의 r1, r2의 제어로직
mkmov : 명령코드 발생신호 mod(MODS, MODD) : 모디파이 제어신호
mskint : 인터럽트 마스크신호 PC : 프로그램 카운터
r1, r2 : 레지스터 필드 RDB : 판독데이터 버퍼
RSEL : 레지스터 셀렉터 s1∼s3 : 레지스터 필드값의 제어신호
TRA, TRD : 임시 레지스터 WDB : 기록데이터 버퍼
《검토과제 A 내지 C의 해결수단에 관한 실시예》
우선, 상기 검토과제 A 내지 C의 해결수단에 관한 발명의 구체예를 설명하기로 한다. 도 2에는, 본 발명에 관련된 데이터 처리장치의 한 예인 싱글칩 마이크로 컴퓨터가 제시된다.
도 2에 나타낸 싱글칩 마이크로 컴퓨터(1)는 전체제어를 담당하는 CPU(2), 인터럽트 콘트롤러(INT)(3), CPU(2)의 처리프로그램 등을 격납하는 메모리인 ROM(4), 상기 CPU(2)의 작업영역 및 데이터의 일시 기억에 이용되는 메모리인 RAM(5), 타이머[A](6), 타이머[B](7), 시리얼 커뮤니케이션 인터페이스(SCI)(8), A/D변환기(9), 제 1 내지 제 9 입출력포트(IOP[1]∼IOP[9])(11∼19), 클록발진기(CPG)(20), 시스템 콘트롤러(SYSC)(21) 및 DMAC(Direct Memory Access Controller)(33)의 기능 블럭 내지는 모듈로 구성되고, 공지의 반도체 제조기술에 의하여 단결정 실리콘과 같은 하나의 반도체기판상에 형성된다. CPUCR(22)은 시스템 콘트롤러(21)에 배치된 콘트롤 레지스터이다.
상기 CPU(2)는 주로 ROM(4)으로부터 명령을 페치(fetch)하고, 이를 해독하여 연산동작이나 제어동작을 수행한다. 상기 DMAC(33)는 CPU(2)와 버스(30)를 공유하고, CPU(2)로부터 설정된 데이터 전송제어조건에 따라 CPU(2) 대신에 데이터 전송제어를 수행할 수 있다. DREQ는 마이크로 컴퓨터(1)의 외부로부터 DMAC(33)에 주어지는 데이터 전송요구신호이다. DMAC(33)는 데이터 전송요구신호(DREQ)에 의한 데이터 전송요구를 접수할 때, 데이터 전송요구 승인신호(DACK)를 요구원으로 되돌려 보낸다.
이와 같은 싱글칩 마이크로 컴퓨터(1)는 전원단자로서 그랜드 레벨(Vss), 전원전압레벨(Vcc), 아날로그 그랜드레벨(AVss), 아날로그 전원전압레벨(AVcc), 아날로그 기준전압(Vref)의 입력단자를 가진다. 그리고, 전용제어단자로서 리셋(RES), 스탠바이(STBY), 모드제어(MD0, MD1, MD2), 클록입력(EXTAL, XTAL) 등의 각 단자를 가진다.
싱글칩 마이크로 컴퓨터(1)는, 상기 CPG(20)의 단자(EXTAL, XTAL)에 접속되는 수정발진자 또는 EXTAL단자에 입력되는 외부클록에 기초하여 생성되는 기준클록(시스템 클록)에 동기하여 동작을 수행한다. 이 기준클록의 1주기를 스테이트라 부른다.
싱글칩 마이크로 컴퓨터(1)의 기능블럭은, 내부버스(30)에 의하여 상호 접속된다. 싱글칩 마이크로 컴퓨터(1)는 버스의 제어를 수행하는 도시를 생략한 버스 콘트롤러를 내장하고 있다. 내부버스(30)는 내부 어드레스 버스·내부 데이터 버스 외에 판독신호·기록신호 등의 콘트롤 버스를 포함하며, 콘트롤 버스는 또한 버스 크기신호를 포함하거나 이들을 코드화한 버스 명령어 등으로 하여도 좋다. 혹은 시스템 클록 등을 포함하여도 좋다.
특별히 도시하지는 않았지만, 내부 어드레스 버스는 그 위상에 의하여 IAB, PAB의 2종류가 있으며, 내부 데이터 버스도 그 위상에 의하여 IDB, PDB가 존재한다. 예를들어, 판독의 경우, IAB 후에 PAB는 0.5 스테이트 지연된다. PAB와 PDB는 동기하고 있다. PDB 후에 IDB는 0.5 스테이트 지연된다. IAB와 PAB, IDB와 PDB의 인터페이스는 상기 버스 콘트롤러가 수행한다.
이와 같은 기능블럭이나 모듈은 내부버스(30)를 매개로 CPU(2)에 의하여 판독/기록된다. 내부버스(30)의 데이터 버스폭은 16비트로 한다. CPU(2)는 내장 ROM(4), RAM(5)을 1스테이트 동안 판독/기록할 수 있다.
또한, 타이머[A](6), 타이머[B](7), SCI(8), A/D변환기(9), IOP[1](11)∼IOP[9](19), CPG(20)이 가지는 제어 레지스터를 총칭하여 내부 I/O/레지스터라 한다.
각 입출력포트(11∼19)는, 어드레스 버스, 데이터 버스, 버스 제어신호, 혹은 타이머(6, 7), SCI(8), A/D변환기(9)의 입출력단자와 겸용되고 있다. 즉, 타이머(6, 7), SCI(8), A/D변환기(9)는, 각각 입력신호를 가지며, 입출력포트와 겸용된 단자를 매개로 외부와 입출력되는 것이다. 예를들어, IOP[5], IOP[6], IOP[7]은, 타이머(6, 7)의 입출력단자와 겸용되며, IOP[8]은 SCI(8)의 입출력단자와 겸용되어 있다. 아날로그 데이터의 입력단자는 IOP[9]와 겸용되어 있다.
이와 같은 싱글칩 마이크로 컴퓨터(1)에 리셋신호(RES)가 주어지면, CPU(2)를 시작으로 싱글칩 마이크로 컴퓨터(1)는 리셋상태가 된다. 이 리셋이 해제되면 CPU(2)는 소정의 어드레스로부터 스타트 어드레스를 판독하고, 이 스타트 어드레스로부터 명령의 판독을 개시하는 리셋 예외처리를 수행한다. 그 후, CPU(2)는 순서대로 ROM(4) 등으로부터 명령을 판독하여 해독하고, 그 해독내용을 바탕으로 데이터의 처리 혹은 RAM(5), 타이머(6, 7) 등과의 데이터 전송을 수행한다. 즉, CPU(2)는, 입출력포트(11∼19) 등으로부터 입력되는 데이터, 혹은 SCI(8) 등으로부터 입력되는 지시를 참조하면서 ROM(4) 등에 기억되어 있는 명령을 바탕으로 처리를 수행하고, 그 결과를 바탕으로 입출력포트(11∼19), 타이머(6, 7) 등을 사용하여 외부에 신호를 출력하고, 각종 외부접속기기의 제어를 수행한다.
타이머(6, 7), SCI(8), 외부신호 등의 상태를 인터럽트신호로서 CPU(2)에 전달할 수 있다. 인터럽트신호는, A/D변환기(9), 타이머[A](6), 타이머[B](7), SCI(8), 입출력포트(11∼19)가 출력하고, 인터럽트 콘트롤러(3)는 이를 입력하여 소정의 레지스터 등의 지정에 기초하여 CPU(2)에 인터럽트 요구신호(31)를 부여한다. 인터럽트 요인이 발생하면, CPU 인터럽트 요구가 발생되고, CPU(2)는 실행중인 처리를 중단하여 예외처리상태를 거쳐 소정의 처리루틴으로 분기하고, 원하는 처리를 수행하여 인터럽트 요인을 클리어한다. 소정의 처리루틴의 마지막에는 통상 복귀명령이 실행되고, 이 명령을 실행함으로써 상기 중단된 처리를 재개한다.
도 3에는, 본 발명이 적용된 상기 CPU(2)의 범용 레지스터 및 콘트롤 레지스터의 구성예(프로그래밍 모델)로서 상위 CPU(2)의 프로그래밍 모델이 제시된다.
CPU(2)는, 32비트길이의 범용 레지스터를 32개 가지고 있다. 범용 레지스터(ER0∼ER31)는, 모두 동일한 기능을 가지고 있으며, 어드레스 레지스터로서도 사용할 수 있으며 데이터 레지스터로서도 사용할 수 있다.
데이터 레지스터로서는 32비트(롱 워드), 16비트(워드) 및 8비트(바이트)의 레지스터로서 사용할 수 있다. 어드레스 레지스터 및 32비트 레지스터로서는, 일괄적으로 범용 레지스터 ER(ER0∼ER31)로서 사용한다. 16비트 레지스터로서는, 범용 레지스터 ER을 분할하여 범용 레지스터 E(E0∼E31), 범용 레지스터 R(R0∼R31)로서 사용한다. 이들은 동등한 기능을 가지고 있으며, 16비트 레지스터를 최대 64개 까지 사용할 수 있다. 8비트 레지스터로서는, 범용 레지스터 R을 분할하여 범용 레지스터 RH(R0H∼R31H), 범용 레지스터 RL(R0L∼R31L)로서 사용한다. 이들은 동등한 기능을 가지고 있으며, 8비트 레지스터를 최대 64개 까지 사용할 수 있다. 각 레지스터 독립적으로 사용방법을 선택할 수 있다.
범용 레지스터(ER7, ER15, ER23, ER31)에는 범용 레지스터로서의 기능에 덧붙여 스택 포인터(SP)로서의 기능이 할당되어 있으며, 예외처리나 서브루틴 분기 등에서 암묵적으로 사용되어진다. 예외처리는 상기 인터럽트 처리를 포함한다. 도시되지 않은 제어 레지스터 등의 설정에 의하여, 서브루틴 분기용 스택 포인터와, 예외처리용 스택포인터를 독립적으로 선택할 수 있다.
또한, 내부논리구성상은 ER0∼ER7을 그룹 0, ER8∼ER15를 그룹 1, ER16∼ER23을 그룹 2, ER24∼ER31을 그룹 3으로 하고 있다. 그룹 0이 기존의 CPU(하위 CPU)와 동일하게 된다.
이들 범용 레지스터는, 프로그래밍 사양상에 있어서는 다르지 않아 모두 동등하게 사용할 수 있다. 적어도 어셈블리언어로 쓰는 경우에는 그룹을 의식하지 않고, 예를들어 R0H, E8, R16, ER31 등으로 기술할 수 있다. 예를들어 1995년 3월 (주)히타치제작소 발행 『H8S/2600시리즈 H8S/2000시리즈 프로그래밍 매뉴얼』의 어셈블러 포맷에 따라 기술하면, "MOV. L ER0, ER31" 혹은 "ADD. W E8, R16" 등으로 레지스터 번호만으로 기술할 수 있다.
도 3에 있어서, PC로 나타내는 것은 24비트의 카운터(프로그램 카운터)로, CPU(2)가 다음에 실행할 명령의 어드레스를 나타낸다. 특별히 제한되어 있지는 않지만, CPU(2)의 명령은 모두 2바이트(워드)를 단위로 하고 있기 때문에, 최하위 비트는 무효이며, 명령판독시에는 최하위 비트는 0으로 간주된다.
CCR로 나타내지는 것은 8비트의 레지스터(콘디션 코드 레지스터)로, CPU(2)의 내부상태를 나타내고 있다. 인터럽트 마스크 비트(I)와 중간자리 올림(H), 네가티브(N), 제로(Z), 오버플로(V), 자리올림(C)의 각 플래그를 포함하는 8비트로 구성되어 있다.
EXR로 나타내지는 것은 8비트의 레지스터로, 인터럽트 등의 예외처리의 제어를 수행한다. 인터럽트 마스크 비트(I2∼I0)와 트래이스(T)의 각 비트를 포함하고 있다.
범용 레지스터상의 데이터 구성예, 메모리 공간상의 데이터 구성, 어드레싱 모드와 실효 어드레스의 계산방법 등에 대해서는 1995년 3월 (주)히타치제작소 발행 『H8S/2600시리즈 H8S/2000시리즈 프로그래밍 매뉴얼』에 기재된 CPU와 동일하며, 어드레스 공간 16MB(내지 데이터용 4GB)를 이용할 수 있다. 최대모드/최소모드(상기 1995년 3월 (주)히타치제작소 발행 『H8S/2600시리즈 H8S/2000시리즈 프로그래밍 매뉴얼』의 기재에서는 어드밴스드/노멀 모드)를 가지며, 각각 어드레스 공간 64k바이트/16M바이트(내지 데이터용 4G바이트)를 선택할 수 있다.
도 4에는 CPU(2)에 대한 제 1 하위 호환의 CPU의 프로그래밍 모델이 나타나 있다. 도 4에 나타낸 프로그래밍 모델은 1989년 7월 (주)히타치제작소 발행 『H8/300시리즈 프로그래밍 매뉴얼』에 기재된 CPU와 동일하다.
제 1 하위호환 CPU는, 16비트길이의 범용 레지스터를 8개 가지고 있다. 범용 레지스터는 모두 동일한 기능을 가지고 있으며, 어드레스 레지스터로서도 사용할 수 있으며 데이터 레지스터로서도 사용할 수 있다.
데이터 레지스터로서는 16비트 및 8비트 레지스터로서 사용할 수 있다. 어드레스 레지스터 및 16비트 레지스터로서는, 일괄적으로 범용 레지스터 R(R0∼R7)로서 사용한다. 8비트 레지스터로서는 범용 레지스터 R을 분할하여 범용 레지스터 RH(R0H∼R7H), 범용 레지스터 RL(R0L∼R7L)로서 사용한다. 이들은 동등한 기능을 가지고 있으며, 8비트 레지스터를 최대 16개 까지 사용할 수 있다. 각 레지스터 독립적으로 사용방법을 선택할 수 있다.
범용 레지스터 R7에는 상기와 마찬가지로 범용 레지스터로서의 기능에 덧붙여 스택 포인터(SP)로서의 기능이 할당되어 있으며, 예외처리나 서브루턴 분기 등에서 암묵적으로 사용된다.
어드레스 공간으로서, 64k바이트의 어드레스 공간을 이용할 수 있으며, 벡터나 스택의 구조 등이 상기 상위 CPU의 최소모드와 동등한 동작으로 된다.
상기 도 3의 프로그래밍 모델을 가지는 상위 CPU(2)는, 도 4의 제 1 하위호환 CPU의 범용 레지스터 및 명령세트를 포함하고 있다. 즉, 상위 CPU(2)가 제 1 하위 CPU와 호환을 유지하기 위하여, 상세한 사항은 후술하는 바와 같이, 범용 레지스터의 확장, 명령세트나 어드레싱 모드의 조합의 확장이 이루어지고 있다.
도 5에는 CPU(2)에 대한 제 2 하위호환 CPU의 프로그래밍 모델이 나타나 있다.
상기 도 3의 프로그래밍 모델을 가지는 상위 CPU(2)는, 도 5의 제 2 하위호환(하위호환을 단순히 하위라고도 부른다) CPU의 범용 레지스터 및 명령세트를 포함하고 있다. 즉, 상위 CPU(2)가 제 1 하위 CPU와 호환을 유지하기 위하여, 상세한 사항은 후술하는 바와 같이, 범용 레지스터의 확장, 명령세트나 어드레싱 모드의 조합의 확장이 이루어지고 있다. 한편, 도 4의 제 1 하위 CPU에 대해서는, 도 5의 제 2 하위 CPU는 범용 레지스터, 명령세트를 포함하거나, 포함되지 않은 관계를 가진다. 예를들어, 도 4의 제 1 하위 CPU에 대해서 도 5의 제 2 하위 CPU는 범용 레지스터의 비트길이가 크며, 도 5의 제 2 하위 CPU에 대하여 도 4의 제 1 하위 CPU는 범용 레지스터의 개수가 크다.
제 2 하위호환 CPU는, 32비트길이의 범용 레지스터를 4개 가지고 있다. 범용 레지스터는, 모두 동일한 기능을 가지고 있으며, 어드레스 레지스터로서도 사용할 수 있으며 데이터 레지스터로서도 사용할 수 있다.
데이터 레지스터로서는 32비트, 16비트 및 8비트 레지스터로서 사용할 수 있다. 어드레스 레지스터 및 32비트 레지스터로서는, 일괄적으로 범용 레지스터 ER(ER0, ER1, ER7, ER15)로서 사용한다. 16비트 레지스터로서는, 범용 레지스터 ER을 분할하여 범용 레지스터 E(E0, E1, E7, E15), 범용 레지스터 R(R0, R1, R7, R15)로서 사용한다. 이들은 동등한 기능을 가지고 있으며, 16비트 레지스터를 최대 8개 까지 사용할 수 있다. 8비트 레지스터로서는, 범용 레지스터 R을 분할하여 범용 레지스터 RH(R0H, R1H, R7H, R15H), 범용 레지스터 RL(R0L, R1L, R7L, R15L)로서 사용한다. 이들은 동등한 기능을 가지고 있으며, 8비트 레지스터를 최대 8개 까지 사용할 수 있다. 각 레지스터 독립적으로 사용방법을 선택할 수 있다.
범용 레지스터 ER7, ER15에는 범용 레지스터로서의 기능에 덧붙여 스택 포인터(SP)로서의 기능이 할당되어 있으며, 예외처리나 서브루틴 분기 등에서 암묵적으로 사용되어진다. 상기와 마찬가지로, 도시되지 않은 제어 레지스터 등의 설정에 의하여, 서브루틴 분기용 스택 포인터와 예외처리용 스택포인터를 독립적으로 선택할 수 있다.
범용 레지스터의 비트길이 등은, 상기 상위 CPU(2)와 동등하며, 동등한 어드레스 공간 16M바이트(내지 데이터용 4G바이트)를 이용할 수 있다. 제 2 하위 CPU는 최대모드에 상당하는 모드만을 가진다.
또한, 프로그램상, ER0, R0, R0H, R0L, ER1, R1, R1H, R1L은 각각 EAX, AX, AH, AL, EBX, BX, BH, BL로서도 기술할 수 있도록 하고 있다. 이들은 범용 레지스터의 기능을 나타내는 것이 아니라, 본 발명과는 관계가 없는 또 다른 CPU의 기술에 맞춘 것이다. 따라서, 상기 또 다른 CPU에서는 단독으로 사용할 수 없는 E0, E1은 그대로의 기술만을 이용한다. 이 경우, 예를들어, "ADD. W E1, BX"와, "ADD. W E1, R1"은 동일한 명령코드에 대응한다.
도 6에는 CPU의 어드레스 공간이 나타나 있다. 또한, 싱글칩 마이크로 컴퓨터의 어드레스 맵으로는, ROM은 0번지에서부터, 한편 RAM 및 내부 I/O레지스터는 H' FFFF 또는 H' FFFFFF번지까지, 각각 어드레스 공간의 양끝이 되도록 배치되어지게 한다.
상위 CPU(2)는, 상기와 같이 16MB의 어드레스 공간의 최대모드와 64kB의 어드레스 공간의 최소모드를 가진다. 최대모드/최소모드의 선택은 모드 선택신호 MD0∼MD2의 상태에 의하여 결정된다.
최대모드에서는, 절대 어드레스 24비트(상위에 8비트의 예약비트를 부가하고, 명령코드중은 32비트)로 전공간을 지정하고, 절대 어드레스 16비트로 0∼H' 7FFF 및 H' FF8000∼H' FFFFFF를 지정한다.
또한, 예외처리시의 벡터는 24비트(메모리상은 32비트로 되며, 상위 8비트는 무시된다), 서브루틴분기 등에 있어서 대피/복귀되는 PC도 24비트로 된다.
최소모드에서는, 절대 어드레스와 레지스터 간접의 어드레싱 모드 모두 하위 16비트만을 사용하고, 상위 비트는 무시한다. 예외처리시의 벡터는 16비트, 서브루틴분기 등에 있어서 대피/복귀되는 PC도 16비트로 된다.
제 1 하위 CPU는, 최소모드에 상당하는 64kB의 어드레스 공간을 가진다. 절대 어드레스는 16비트만을 가지며, 또한 레지스터 간접에서는 16비트 레지스터로 각각 전 공간을 지정한다. 예외처리시의 벡터는 16비트이며, 서브루틴분기 등에 있어서 대피/복귀되는 PC도 16비트로 된다.
제 2 하위 CPU는, 최대모드에 상당하는 16MB의 어드레스 공간을 가진다. 절대 어드레스는 16비트만을 가지며, 0∼H' 7FFF 및 H' FF8000∼H' FFFFFF를 지정한다. 한편, 레지스터 간접에서는 32비트 레지스터로 전 공간을 지정한다. 절대 어드레스는 16비트로는 RAM과 내부 I/O레지스터를 합쳐 32kB까지 지정할 수 있으며, 또한 ROM을 32kB까지 지정할 수 있다. 내장 RAM과 내부 I/O레지스터를 합쳐 32kB인 용량은, 버스를 확장하지 않은 응용분야는 이 싱글칩 마이크로 컴퓨터에서는 충분한 용량이라 할 수 있다. 또한, 내장 RAM과 내부 I/O레지스터를 합쳐 32kB가 넘는 경우에는, 그 자체의 논리적·물리적 규모가 커지게 되므로, 굳이 논리적 규모가 작은 하위 CPU를 사용할 필요성이 적으며, 상위 CPU를 사용하는 것이 적당하다 할 수 있겠다. 적어도, 제 2 하위 CPU를 사용하여 절대 어드레스로 지정할 수 없는 RAM 내지 내부 I/O레지스터를 설치하고, 논리적·물리적 규모의 축소를 추구하거나, 상위 CPU를 사용하여 모든 공간을 절대 어드레스로 지정할 수 있도록 하여 이용상 편의성을 추구하거나, 둘 중의 하나를 선택할 수 있다.
절대 어드레스 16비트로 지정할 수 있는 ROM의 어드레스가 한정되어 버리는데, ROM에 할당하는 정수 등에 대해서는 C컴파일러 등으로 기술한 경우에도 모듈간 최적화로 재배치할 수 있다. 또한, 모듈간 최적화는, 각 프로그램 모듈을 링크할 때 메모리 배치나 함수의 호출관계에 의존한 최적화를 수행하는 것이며, 1997년 8월 (주)히타치제작소 발행 『H8S, H8/300시리즈 C컴파일러 이용자 매뉴얼』(제 4판) 등에 기재되어 있다.
또한, 예외처리시의 벡터는 24비트(메모리상은 32비트로 되며, 상위 8비트는 무시된다), 서브루틴분기 등에 있어서 대피/복귀되는 PC도 24비트로 된다.
도 7 및 도 8에는 실효 어드레스의 계산방법으로서, 상위 CPU(2)의 최대모드에 있어서의 실효 어드레스 계산방법이 예시되어 있다.
도 7의 (1)에 나타낸 레지스터 간접에서는 명령코드중에 레지스터를 지정하는 부분을 포함하고, 이 명령코드로 지정된 범용 레지스터 ER의 내용의 합계 32비트를 어드레스로서 메모리상의 어드레스를 지정한다. 어드레스는 24비트로 충분하기 때문에 상위 8비트는 무시한다.
도 7의 (2), (3)에 나타낸 디스플레이스먼트가 부가된 레지스터 간접은, 상기 레지스터 간접과 마찬가지로 얻어진 32비트의 어드레스에, 명령코드중에 포함되는 디스플레이스먼트를 더한 결과를 어드레스로서 메모리상의 어드레스를 지정한다. 가산결과는 어드레스의 지정에만 사용되며, 범용 레지스터 ER의 내용에는 반영되지 않는다. 특별히 제한되어 있지는 않지만, 디스플레이스먼트는 32비트 또는 16비트이며, 16비트 디스플레이스먼트는 가산하는 경우에는 상위 16비트는 부호확장된다. 즉, 디스플레이스먼트의 상위 16비트는 16비트 디스플레이스먼트의 비트 15와 동일한 값으로서 가산이 이루어진다. 이 경우, 32비트 디스플레이스먼트의 상위 8비트는 예약영역으로 되어 무시된다.
도 7의 (4)에 나타낸 포스트 인크리먼트 레지스터 간접은, 상기 레지스터 간접과 마찬가지로 얻어진 32비트의 어드레스로 메모리상의 어드레스를 지정한다. 그 후, 이 어드레스에 1 또는 2 또는 4를 가산하고, 그 가산결과가 범용 레지스터 ER에 격납된다. 메모리상의 바이트 데이터를 지정하는 경우 1, 워드데이터를 지정하는 경우 2, 롱 워드 데이터를 지정하는 경우 4가 각각 가산된다. 가산결과인 상위 8비트도 확장레지스터에 격납된다.
도 7의 (5)에 나타낸 프리디크리먼트 레지스터 간접은, 상기 레지스터 간접과 마찬가지로 얻어진 32비트의 어드레스로부터 1 또는 2 또는 4를 감산한 결과인 24비트의 어드레스로 메모리상의 어드레스를 지정한다. 그 후, 그 감산결과가 범용 레지스터 ER에 격납된다. 메모리상의 바이트 데이터를 지정하는 경우 1, 워드 데이터를 지정하는 경우 2, 어드레스 데이터를 지정하는 경우 4가 각각 감산된다. 상기와 마찬가지로, 어드레스가 24비트로 충분한 경우에는, 특별히 제한되어 있지는 않지만, 감산결과인 상위 8비트도 확장레지스터에 격납된다.
도 8의 (6), (7), (8)에 나타낸 절대 어드레스는 명령코드중에 포함되는 8비트, 16비트 또는 24비트의 절대 어드레스를 어드레스로서 메모리상의 어드레스를 지정한다. 8비트 절대 어드레스는, 상위 16비트가 1확장된다. 즉, 어드레스의 비트 23∼8은 모든 비트 1로 된다. 따라서 사용가능한 어드레스는 H' FFFF00∼H' FFFFFF의 256바이트이다. 또한, 16비트 절대 어드레스는, 상위 8비트가 부호확장된다. 즉, 16비트 절대 어드레스의 비트 15가 0이면 어드레스의 비트 23∼16은 모든 비트 0으로 되며, 비트 15가 1이면 어드레스의 비트 23∼16은 모든 비트 1로 된다. 따라서 사용가능한 어드레스는 H' 000000∼H' 007FFF 및 H' FF8000∼H' FFFFFF의 64k바이트이다.
도 8의 (9), (10)에 나타낸 프로그램 카운터 상대는, 프로그램 카운터의 내용의 24비트의 어드레스에 명령코드중에 포함되는 디스플레이스먼트를 가산한 결과를 어드레스로서 메모리상의 어드레스를 지정한다. 가산결과는 프로그램 카운터에 격납된다. 특별히 제한되어 있지는 않지만, 디스플레이스먼트는 16비트 또는 8비트이며, 이들 디스플레이스먼트는 가산하는 경우에는 상위 8비트 또는 16비트는 부호확장된다. 즉, 디스플레이스먼트의 상위 8비트는 16비트 디스플레이스먼트의 비트 15와, 또는 상위 16비트는 8비트 디스플레이스먼트의 비트 7과 동일한 값으로 간주하여 가산이 이루어진다. 프로그램 카운터 상대는 분기명령만으로 사용된다.
또한, 최소모드에서는, 실효 어드레스의 상위 8비트가 무시된다. 상기의 것 외에 이미디에이트, 레지스터 직접, 메모리 간접 등의 어드레싱 모드를 실행하는데, 이들은 본 발명에 직접적으로는 관계하지 않기 때문에 상세한 설명은 생략하기로 한다.
제 1 하위 CPU의 데이터 전송명령에서는, 레지스터 간접, 16비트 디스플레이스먼트가 부가된 레지스터 간접, 포스트 인크리먼트/프리디크리먼트 레지스터 간접, 8/16비트 절대 어드레스가 사용가능하다. 실효 어드레스의 계산방법은 상위 CPU(2)와 동일하지만, 상위 8비트가 무시되고 하위 16비트가 유효하다.
제 2 하위 CPU의 데이터 전송명령에서는, 레지스터 간접, 16비트 디스플레이스먼트가 부가된 레지스터 간접, 포스트 인크리먼트/프리디크리먼트 레지스터 간접, 8/16비트 절대 어드레스가 사용가능하다. 또한, 절대 어드레스 24비트는 분기명령에서 사용가능하게 된다.
도 9에는 본 발명에 관련된 CPU(2)의 기계어의 명령포맷이 예시되어 있다. 상기 제 1 하위 CPU, 제 2 하위 CPU의 명령세트는 상위 CPU(2)의 명령세트의 서브세트로 된다.
CPU(2)의 명령은, 2바이트(워드)를 단위로 하고 있다. 각 명령은 오퍼레이션 필드(op), 레지스터 필드(r, gr), EA확장부(EA), 및 콘디션 필드(cc)를 포함한다. 특별히 제한되어 있지는 않지만, 상기 1995년 3월 (주)히타치제작소 발행 『H8S/2600시리즈 H8S/200시리즈 프로그래밍 매뉴얼』에 기재된 CPU와 동일한 명령포맷으로 하고 있다.
오퍼레이션 필드(op)는, 명령의 기능을 나타내고, 어드레싱 모드의 지정 오퍼랜드의 처리내용을 지정한다. 명령의 선두 4비트를 반드시 포함하며, 2개의 오퍼레이션 필드를 가지는 경우도 있다.
레지스터 필드(r, gr)는 범용 레지스터를 지정한다. 레지스터 필드(r)는 어드레스 레지스터일 때 3비트, 데이터 레지스터일 때 3비트(32비트 레지스터) 또는 4비트(8 또는 16비트 레지스터)이다. 2개의 레지스터 필드를 가지는 경우가 있으며, 또는 레지스터 필드를 가지지 않는 경우도 있다.
레지스터 필드(gr)는 그룹 0∼그룹 3의 어느 레지스터 세트를 선택할 지를 지정하는 정보를 보지하게 된다. 레지스터 필드(gr)는 4비트 존재하는데, 도 3의 레지스터 구성에 따르면, 특별히 제한되어 있지는 않지만, 하위 2비트를 유효하게 한다. 레지스터 필드(gr)를 포함하는 워드는 생략가능하게 되며, 생략된 경우에는 0이 주어진 것으로 상정되어, 그룹 0의 레지스터 세트가 지정된 것이라 간주되고, 레지스터 필드(r)로 지정되는 레지스터는 레지스터 번호가 0∼7로 되고, 범용 레지스터 ER0∼ER7을 선택할 수 있다.
예를들어, 레지스터 번호 n = gr[1 : 0]<<3 + r[2 : 0]로 구할 수 있다(<<3은 3비트 좌측 시프트를 나타낸다). 즉, gr을 상위로 하고, r의 하위 3비트 r[2 : 0]을 하위로 한 5비트로 지정되는 번호의 레지스터를 지정한다. 예를들어, gr = 0, r = 1인 경우에는 레지스터 번호 n = 1이 되며, gr = 2, r = 3인 경우에는 레지스터 번호 n = 19가 된다. 이 레지스터 번호 n에 대응하는 범용 레지스터 ERn의 명령코드의 크기를 지정하는 부분이나, r[3]의 내용에 의하여 레지스터 E, 레지스터 R, 레지스터 RH, 레지스터 RL이 지정된다. 예를들어, 데이터 크기가 롱워드, 워드, 바이트 중 어디에 속하는 지는 명령코드의 오프레이션 필드의 소정의 비트로 지정된다. 데이터 크기가 워드 또는 바이트일 때, 이용하는 레지스터 위치는 r[3]으로 지정된다. r[3]은, r의 하위로부터 4비트째의 비트데이터를 의미한다. 데이터 크기가 워드일 때 r[3] = 1일 때는 레지스터 E를 지정하고, r[3] = 0일 때는 레지스터 R을 의미한다. 데이터 크기가 바이트일 때 r[3] = 1일 때는 레지스터 RL을 지정하고, r[3] = 0일 때는 레지스터 RH를 의미한다.
또한, gr1, r1은 소스 레지스터 또는 어드레스 레지스터의 레지스터 지정필드를 의미하고, gr2, r2는 데스티네이션 레지스터 또는 데이터 레지스터의 레지스터 지정필드를 의미한다. gr1(명령코드의 기본워드 중 비트 7∼4)은 r1(명령코드의 기본워드 중 비트 7∼4 또는 비트 6∼4)에 대응하고, gr2(명령코드의 기본워드중 비트 3∼0)은 r2(명령코드의 기본워드 중 비트 11∼8 또는 비트 3∼0)에 대응한다.
EA확장부(EA)는, 이미디에이트 데이터, 절대 어드레스 또는 디스플레이스먼트를 지정한다. 8비트, 16비트 또는 32비트이다.
콘디션 필드(cc)는 조건분기명령(Bcc명령)의 분기조건을 지정한다.
도 9에는 CPU(2)의 기계어의 명령포맷을 나타내고 있다. 레지스터 필드(gr)를 가지는 전치명령코드(레지스터 확장용 전치명령코드)를 생략하면, 기존의 명령코드로 되도록 되어 있다. 레지스터 필드(gr)를 그룹지정필드(gr)라고도 표기한다. 예를들어, 도 9의 (2)에 예시되는 명령코드 "H'0901"을 단독으로 사용하는 경우, ADD. W R0, R1으로 되고, 도 9의 (3)에 예시되는 바와 같이 그것에 그룹지정필드를 가지는 전치명령코드 "H'0012"를 부가하면 명령코드 "H'00120901"은 ADD. W R8, R17로 된다.
또한, 암묵적으로 사용되는 그룹 0의 레지스터 세트를 지정하는 전치명령레코드 "H'0000"은, 특별히 제한되어 있지는 않지만, NOP(무조작)명령으로 되어 있다. 명령코드 "H'00xx"(xx는 01∼FF)는, 레지스터 세트의 그룹을 지정하고, 연속하는 다음 명령코드를 실행하는(인터럽트를 금지한다) 것 외에는 NOP명령과 마찬가지로 PC의 인크리먼트를 수행하고, 최소의 스테이트수로 실행된다.
그룹지정필드(gr)는, 4비트이기 때문에, 논리적으로는 범용 레지스터 그룹을 16으로 확장할 수 있다. 이 경우에는 32비트 범용 레지스터 128개(또는 16비트 범용 레지스터 256개)를 이용할 수 있다.
그룹지정필드(gr)에 대응하는 오퍼레이션 필드는 복수종류라도 좋다. 예를들어, 단순하게 레지스터 지정만을 수행하는 것과, 그 밖의 기능(데이터 크기 등)을 절환하는 기능을 병행하는 오퍼레이션 코드를 준비하여도 좋다.
상위 CPU(2)의 명령코드의 서브세트를 상기 제 1 하위 CPU, 제 2 하위 CPU가 가진다. 구체적으로, 상기 제 1 하위 CPU는 레지스터 지정필드(gr)를 가지지 않는다. 상기 제 2 하위 CPU는 스택포인터 ER15를 지정할 때에만 레지스터 지정필드(gr)를 사용한다.
도 10에는 CPU(2)의 메모리에 대한 전송명령의 상세한 명령포맷을 예시한다.
여기서는, 레지스터 간접, 포스트 인크리먼트/프리디크리먼트 레지스터 간접, 16비트 디스플레이스먼트가 부가된 레지스터 간접, 16비트 절대 어드레스에 대하여 나타낸다. 그 밖의 어드레싱 모드도 가지지만, 상세한 설명은 생략하기로 한다.
레지스터 간접(@ERn)은, 명령코드의 레지스터 필드(r)로 지정되는 어드레스 레지스터(ERn)의 내용을 어드레스로서 메모리상의 오퍼랜드를 지정한다.
디스플레이스먼트가 부가된 레지스터 간접(@(d:16, ERn))은, 명령코드의 레지스터 필드(r)로 지정되는 어드레스 레지스터(ERn)의 내용에 명령코드 중에 포함되는 16비트 디스플레이스먼트(d)를 가산한 내용을 어드레스로서 메모리상의 오퍼랜드를 지정한다. 가산할 때 16비트 디스플레이스먼트는 부호확장된다.
포스트 인크리먼트 레지스터 간접(@ERn+)은, 명령코드의 레지스터 필드로 지정되는 어드레스 레지스터(ERn)의 내용을 어드레스로서 메모리상의 오퍼랜드를 지정한다. 그 후, 어드레스 레지스터의 내용에 1, 2 또는 4가 가산되며, 가산결과가 어드레스 레지스터에 격납된다. 바이트 크기에서는 1, 워드크기에서는 2, 롱워드 크기에서는 4가 각각 가산되어진다.
프리디크리먼트 레지스터 간접(@-ERn)은, 명령코드의 레지스터 필드로 지정되는 어드레스 레지스터(ERn)의 내용으로부터 1, 2 또는 4를 감산한 내용을 어드레스로서 메모리 상의 오퍼랜드를 지정한다. 그 후, 감산결과가 어드레스 레지스터에 격납된다. 바이트 크기에서는 1, 워드크기에서는 2, 롱워드 크기에서는 4가 각각 감산된다.
절대 어드레스(@aa:16)은, 명령코드 중에 포함되는 절대 어드레스(aa)로, 메모리 상의 오퍼랜드를 지정한다. 특별히 지정되어 있지는 않지만, 16비트 절대 어드레스의 경우 상위 16비트는 부호확장된다. 이 경우, 비트 8∼10이 어드레싱 모드를 지정하는 필드로 되어 있다.
도 11 내지 도 14에는 상위 CPU(2)에 의한 메모리에 대한 직접적인 연산명령의 명령포맷에 있어서의 명령코드의 조합이 예시된다. 메모리에 대한 직접적인 연산명령이란, 기존의 명령세트에 대하여 확장된 연산명령이다. 동 도에 나타낸 명령포맷은 명령확장용 전치명령코드를 선두로, 전송명령코드, 연산명령코드 등이 부가된 1명령으로서 처리될 명령의 포맷이다. 또한, 도시는 생략하였지만, 제 1 하위 CPU, 제 2 하위 CPU는 상위 CPU(2)의 명령세트의 서브세트의 명령세트를 가진다.
상기 메모리에 대한 직접적인 연산명령은, 제어코드(명령확장용 전치명령코드), EA1코드, EA2코드, 및 연산코드의 조합에 의하여 구성된다.
EA1, EA2는 도 10에 나타낸 각 어드레싱 모드의 전송명령의 명령코드와 동일하게 된다. 전송방향은 판독방향으로 하고, 사용하지 않은 레지스터 필드(r2)는, 특별히 제한되어 있지는 않지만, 0으로 한다.
연산코드는, 범용 레지스터간의 연산명령의 명령코드와 동일하게 된다. EA1코드, EA2코드, 연산코드의 조합은 의미가 있는 것에 대해서는 임의로 할 수 있다. 즉, 원하는 처리의 내용에 따라 EA1코드, EA2코드, 연산코드의 필요한 것을 조합한다.
예를들어, 인크리먼트 처리 등은, 데스티네이션측 데이터만 필요로 하기 때문에, 소스측 데이터를 판독하기 위한 EA1코드는 필요없다. 따라서, 인크리먼트 처리의 포맷은 전치명령코드, EA2코드, 연산코드를 조합하여 구성된다.
가산처리 등은, 소스측, 데스티네이션측의 메모리를 사용하는 측의 EA1, EA2를 조합하면 된다. 소스측만을 메모리상의 데이터로 하는 경우(예를들어, ADD. W@ER1, R0)에는 명령확장용 전치명령코드, EA1코드(MOV. W@ER1, Rx와 동일. Rx는 의미를 가지지 않지만, 상기와 같이 R0로 한다), 연산코드(ADD. W Rx, R0와 동일)를 조합한다. 데스티네이션측만을 메모리상의 데이터로 하는 경우에는(ADD. W R1, @ER0)에는, 명령확장용 전치명령코드, EA2코드, 연산코드를 조합한다. 소스측, 데스티네이션측의 양측을 메모리상의 데이터로 하는 경우(ADD. W@ER1, @ER0)에는, 도 11에 예시된 바와 같이 명령확장용 전치명령코드, EA1코드, EA2코드, 연산코드를 조합한다. 또한, 소스측, 데스티네이션측의 양측을 범용 레지스터상의 데이터로 하는 경우(ADD. W R1, R0)에는, 기존의 명령이며, 연산코드만으로 충분하다. 다시말해, 전치명령코드는 필요없다.
이미디에이트 데이터와 메모리상의 데이터의 연산(예를들어, ADD. W #xx, @ER1)도 마찬가지지만, 이미디에이트 데이터는 소스측으로 되기 때문에, 도 13에 예시된 바와 같이 EA1코드는 필요없으며, 또한 연산코드로서 레지스터간 연산 대신에 이미디에이트·레지스터간의 연산코드(ADD. W #xx, Rx와 동일)를 이용한다.
메모리간 전송명령(예를들어, MOV. W @ER1, @aa:16)은, 상기 메모리간의 연산과 마찬가지로 명령확장용 전치명령코드, EA1코드, EA2코드 및 레지스터간 전송명령코드를 조합하여도 좋지만, 본 예에서는 도 12에 나타낸 바와 같이 명령확장용 전치명령코드, EA1코드(MOV. W @ER1, Rx와 동일), EA2코드(MOV. W Rx, @aa:16과 동일)를 조합한다. 연산코드는 필요없으며, EA1코드의 전송방향은 판독방향으로 하고, EA2코드의 전송방향은 기록방향으로 한다. 이로써, 명령코드길이를 단축(연산코드분)하고, 실행스테이트수(연산코드의 판독, 데스티네이션측 데이터의 판독)도 단축할 수 있다.
이미디에이트 데이터의 메모리로의 전송(예를들어, MOV. W #xx, @ER1)은, 상기 이미디에이트 데이터와 메모리상의 데이터와의 연산과 마찬가지로, 명령확장용 전치명령코드, EA2코드, 연산코드를 조합하여도 좋지만, 여기서의 예에서는, 도 14에 예시된 바와 같이 명령확장용 전치명령코드, 이미디에이트·레지스터간의 전송명령코드(MOV. W #xx, Rx와 동일), EA2코드(MOV. W Rx, @aa:16과 동일)를 조합한다. 이로써, 실행스테이트수(데스티네이션측 데이터의 판독)도 단축할 수 있다.
도 15에는 명령확장용 전치명령코드(제어코드)의 포맷이 예시된다. 도 15에 나타낸 명령확장용 전치명령코드는 소스측, 데스티네이션측이 메모리인지의 여부를 각각 나타내기 위한 비트를 가지고 있다. 대응비트가 예를들어 논리값 "1"이면 메모리, 논리값 "0'이면 범용 레지스터를 지정하는 것으로 한다. EA1와 EA2의 전송명령코드는 동일하게 하고 있기 때문에, 소스측이 메모리이면 데스티네이션측에 관계 없이 명령확장용 전치명령코드에 계속되는 것이 EA1코드라고 판단되어진다. 한편, 소스측이 범용 레지스터로 되고, 데스티네이션측이 메모리라면, EA2코드라고 판단되어진다. 그 밖에 롱워드 크기를 나타내는 정보를 가지고 있다.
또한, EA1, EA2의 전송명령코드의 동작을 변경시키는 정보를 가지고 있다. 예를들어, 포스트 인크리먼트/프리디크리먼트 레지스터 간접이, 메모리의 판독/기록의 방향에 의하여 일의적으로 지정되어 버리는 경우, 즉, 포스트 인크리먼트는 기록시, 프리디크리먼트는 판독시 등으로 고정되어 있는 명령세트의 경우, 상기 변경정보에 의하여 판독시에 포스트 인크리먼트 동작을 수행하거나, 기록시에 프리디크리먼트를 수행하는 것을 가능하게 하고 있다.
도 16 및 도 17에는 CPU의 어드레싱 모드의 조합에 대하여 나타낸다. 도 16은 데이터 전송명령에 대하여 나타내고, 도 17은 가산명령에 대하여 나타낸다. 가산 이외의 연산명령도 가산명령과 마찬가지로 된다.
도 16 및 도 17의 "소스"의 각 란에 있어서의 상단, 중단, 하단에는 각각 상위 CPU(2), 제 1 하위 CPU, 제 2 하위 CPU의 각각 실행가능한 데이터 크기가 나타나 있다. B는 바이트(8비트), W는 워드(16비트), L은 롱워드(32비트)를 의미한다.
어드레싱 모드에는 도 16 및 도 17에 나타낸 것 외에, 분기명령에만 사용하는 프로그램 카운터 상대나 메모리 간접의 어드레싱 모드도 있지만, 여기서는 도시를 생략하고 있다.
상위 CPU(2)는 데이터 전송명령, 가산명령과 함께 소스/데스티네이션과 데이터 크기의 어드레싱 모드의 조합을 임의로 할 수 있다. 단, 8비트 절대 어드레스에 대해서는, 단축형으로서의 특성상, 또한 16비트 단위의 명령코드의 특성상 바이트 크기만이 실행가능하다.
제 1 하위 CPU는, 어드레싱 모드는 어드레스 공간 64kB인 것에 대응하여 한정되고, 32비트 디스플레이스먼트가 부가된 레지스터 간접, 32비트 절대 어드레스는 실행할 수 있다. 데이터 크기는 바이트 및 워드이다. 데이터 전송명령은 소스측 또는 데스티네이션측의 한쪽이 레지스터 직접인 경우에만 실행가능하다. 또한, 가산명령은, 소스측은 이미디에이트 또는 범용 레지스터, 데스티네이션측은 범용 레지스터에 한정되어 있다. 즉, 메모리의 판독/기록은 데이터 전송명령으로 수행하고, 데이터의 처리는 범용 레지스터상에서 수행하는 이른바 로드 저장형 명령세트를 가진다.
제 2 하위 CPU는, 어드레스 공간 16MB이지만, 프로그램의 대용량화에 대응하는 것을 주목적으로 하고, 대규모 데이터의 고속처리 등이 필요하지 않은 응용분야를 고려하여, 어드레싱 모드에 대해서는 32비트 디스플레이스먼트가 부가된 레지스터 간접, 32비트 절대 어드레스는 실행할 수 없다. 데이터 크기는, 메모리상의 데이터를 지정하는 경우, 바이트 및 워드이다. 소스측이 이미디에이트 또는 범용 레지스터, 데스티네이션측이 범용 레지스터인 경우에 한하여 롱워드도 가능하다.
제 2 하위 CPU에 있어서는, 범용 레지스터의 개수는 적지만, 데이터 전송명령, 가산명령과 함께 소스/데스티네이션의 어드레싱 모드의 조합을 임의로 할 수 있다. 범용 레지스터와 메모리간의 전송명령의 데이터 크기는, 마이크로 컴퓨터의 기능블럭의 데이터 크기가 8비트 내지 16비트 길이이거나, 내부 데이터 버스가 16비트이거나, 또한 싱글칩 마이크로 컴퓨터가 응용되는 마이크로 컴퓨터 시스템에 필요한 분해능 등의 특성상, 16비트(워드) 또는 8비트(바이트)로 충분한 응용분야를 고려하고, 32비트(롱워드)는 가지지 않는다. 당연, 32비트(롱워드)의 데이터에 대해서는, 16비트(워드)의 데이터 전송을 2회 수행함으로써 실현할 수 있다.
한편, 제 2 하위 CPU에서는, 범용 레지스터가 32비트 구성이며, CPU의 내부구성이 32비트이기 때문에, 메모리상의 데이터의 판독/기록을 수행할 필요가 없는 이미디에이트 및 레지스터 직접에 대해서는 32비트(롱워드)도 실행가능하게 하고 있다.
이상의 상위 CPU, 제 1 하위 CPU(2), 제 2 하위 CPU는 예를들어 이하와 같이 응용분야나 마이크로 컴퓨터 시스템의 요구에 맞추어 선택할 수 있다.
싱글칩 마이크로 컴퓨터에 내장되어 있는 기능모듈, 즉, ROM, RAM, 타이머A, 타이머B, SCI, A/D변환기, 입출력 포트만을 사용하여 동작하는 마이크로 컴퓨터 시스템에 대해서는, 프로그램 용량이 60kB정도(RAM, 내부 I/O레지스터를 합쳐64kB)이하이면, 제 1 하위 CPU를 내장하는 것이 유리하다.
또한, 프로그램 용량이 60kB정도(RAM, 내부 I/O레지스터를 합쳐 64kB)이상이면, 제 2 하위 CPU를 내장하는 것이 유리하다. 데이터로서 취급하는 것은 RAM, 내부 I/O레지스터 및 일부 ROM이며, 어드레스 공간의 일부(H' 8000∼H' FF7FFF)에 데이터 전송/연산명령에서의 접속에 제약이 있어도 이 부분은 ROM 및 미사용 중인 영역으로 되기 때문에, 문제는 없다. 오히려, CPU의 불필요한 기능을 삭제하여 논리적 규모를 축소시키고, 비용을 축소시키는 것이 바람직하다.
이와 같은 싱글칩 마이크로 컴퓨터에 내장되어 있는 기능모듈만을 사용하여 동작하는 마이크로 컴퓨터 시스템으로서는, 카메라 등이 있으며, 예를들어 1994년 11월 사진공업사 발행 『사진공업』pp58∼70에 기재되어 있다. 또한, 프로그램 용량이 큰 것은 그 마이크로 컴퓨터 시스템의 기능이 높은 것을 나타낸다고 할 수 있다.
혹은, 싱글칩 마이크로 컴퓨터에 내장되어 있는 기능모듈에 덧붙어, 비교적 적은 어드레스를 가지는 전용 반도체 집적회로 등을 싱글칩 마이크로 컴퓨터의 외부버스에 접속시켜 동작하는 마이크로 컴퓨터 시스템도 마찬가지이며, 본 예로서는 광 디스크 드라이브 등이 있으며, 예를들어 1996년 2월 히타치 마이크로 컴퓨터 시스템사 발행 『히타치 마이크로 컴퓨터 기보』pp38∼39에 기재되어 있다.
한편, 싱글칩 마이크로 컴퓨터에 내장되어 있는 기능모듈, 즉 ROM, RAM, 타이머A, 타이머B, SCI, A/D변환기, 입출력 포트 이외에 프로그램 격납용 ROM이나 데이터 격납용 DRAM, 캐릭터 제너레이터 ROM(CGRON)이나, 입출력 회로나 제어회로 등을 접속시켜 동작하는 경우에는 대규모의 데이터를 취급하게 되어, 예를들어 배열의 처리 등도 생각할 수 있기 때문에, 모든 어드레스 공간을 제한없이 사용할 수 있는 상위 CPU(2)를 내장하는 것이 유리하다. 또한, 외부의 메모리 등을 효율적으로 이용하기 위한 고기능의 버스 콘트롤러나 고속 데이터 전송을 수행하기 위한 DMA 콘트롤러 등도 필요하기 때문에, 상대적으로 논리적 규모가 큰 상위 CPU(2)를 사용하여도 전체적인 논리적 규모에 대한 영향이 작다고 생각할 수 있다. 이와 같은 마이크로 컴퓨터 시스템으로는 프린터 등이 있다.
도 1에는 상위 CPU(2)의 상세한 한 예가 나타나 있다. 이 CPU(2)는 제어부(CONT)와 실행부(EXE)로 구성되어진다. IDB, IAB는 상기 내부버스(30)에 포함되는 내부 데이터 버스, 내부 어드레스 버스이다.
제어부(CONT)는, 명령레지스터(IR1), 명령레지스터(IR2), 명령변경부(CHG), 명령디코더(DEC), 레지스터 셀렉터(RSEL), 인터럽트 제어부(INTC)를 가진다. 특히 제어부(CONT)는, 명령확장용 전치명령코드의 유무에 따른 제 1 제어, 레지스터 확장용 전치명령코드의 유무에 따른 제 2 제어를 수행하도록 되어 있다. 제 1 제어는, 메모리 데이터의 직접적인 연산처리제어이며, 명령확장용 전치명령코드에 후속하는 데이터 전송명령 등의 복수의 명령코드를 1개의 명령으로 처리함으로써, 메모리상의 데이터를 직접적으로 연산가능하게 하는 제어를 수행한다. 제 2 제어는, 상위 호환을 고려한 레지스터 지정제어이며, 한쪽에서는 확장된 범용 레지스터를 레지스터 확장용 전치명령코드를 이용하여 지정하도록 하고, 다른쪽에서는, 생략가능한 레지스터 지정필드 gr(gr1, gr2)이 생략되었을 때 생략이 불가능한 레지스터 지정필드 r(r1, r2)에 의한 레지스터 지정을 암묵적으로 레지스터 그룹 0에 포함되는 레지스터 지정으로 간주하는 제어를 수행한다.
상기 명령디코더(DEC)는, 예를들어 마이크로 ROM 혹은 PLA(Programmable Logic Array) 또는 포선논리로 구성된다. 명령디코더(DEC)의 출력의 일부가 명령디코더(DEC)에 피이드백되어 있다. 그와 같은 피이드백 신호는, 각 명령코드내의 천이에 이용하는 스테이지 코드(TMG)와, 명령코드간에 이용하는 제어신호(MODS, MODD)를 포함한다. 명령디코더에 있어서의 상기 제 1 제어의 전체적인 기능을 개략적으로 설명하면, 명령확장용 전치명령코드는 제어신호(MODS, MODD)를 발생시키고, EA1코드, EA2코드는 상기 제어신호를 참조하면서 동작하고, 또한 제어신호를 발생시키기도 한다. 연산코드도 제어신호를 참조하여 데이터의 입출력원/입출력처를 절환하여 연산처리를 수행한다. 제저신호에 따라 내부에서 명령코드도 발생시킨다.
명령디코더(DEC)의 그와 같은 제 1 제어기능을 더욱 상세하게 설명하기로 한다. 도 1에는 명령디코더(DEC)의 일부 기능을 개념적으로 나타내고 있으며, 명령확장용 상기 전치명령코드(pf)의 해독논리 200은 제어신호(mod : MODS, MODD를 포함한다), 인터럽트 마스크신호(mskint)를 출력한다. 그 밖에는, NOP(무조작)명령 등과 동일하면 되고, 실질적인 동작은 아무것도 하지 않는다. 즉, 제어신호(mod)는, 후속 명령코드가 명령확장용 전치명령코드에 부가된 명령코드임을 명시하는 신호로서 위치결정된다.
전송명령코드(mov)의 해독논리 201은 스테이트 코드신호(nxttmg), 인터럽트 마스크 신호(mskint), 범용 레지스터 기록신호(Rdwr), 임시 레지스터 기록신호(TRDwr)를 출력한다. 이들 신호의 상태는 상기 제어신호(mod:MODS, MODD)에 의하여 상이해진다. 예를들어, MODS = 1일 때는 임시 레지스터 기록신호(TRDwr)가, MODS = 0일 때는 범용 레지스터 기록신호(Rdwr)가 각각 선택된다. 그 밖의 동작은, 메모리·범용 레지스터간의 전송명령의 경우와 마찬가지로 된다.
연산명령코드(exe)의 해독논리 202는, 인터럽트 마스크신호(mskint), 소스 범용 레지스터 판독신호(Rsrd), 데스티네이션 범용 레지스터 판독신호(Rdrd), 데스티네이션 범용 레지스터 기록신호(Rdwr), 판독 데이터 버퍼 판독신호(RDBrd), 임시 레지스터 판독신호(TRDrd), 임시 레지스터 기록신호(TRDwr)를 출력한다. 신호 Rsrd는 소스 레지스터로서범용 레지스터를 판독하고, Rdrd는 데스티네이션 레지스터로서 범용 레지스터를 판독하고, Rdwr는 데스티네이션 레지스터로서 범용 레지스터를 기록하는 것을 지시한다. 신호 RDBrd는 실행부(EXEC)의 후술하는 판독 데이터 버퍼를 판독하고, 신호 TRDrd는 후술하는 실행부(EXEC)의 임시 레지스터를 판독하고, 신호 TRDwr은 후술하는 실행부(EXEC)의 후술하는 임시 레지스터를 기록하는 것을 지시한다. 이들 신호의 상태는 상기 제어신호(mod : MODS, MODD)에 의하여 상이해진다. 즉, 소스 범용 레지스터 판독신호(Rsrd)와 임시 레지스터 판독신호(TRDrd), 데스티네이션 범용 레지스터 판독신호(Rdrd)와 판독 데이터 퍼버 판독신호(RDBrd), 데스티네이션 범용 레지스터 기록신호(Rdwr)와 임시 레지스터 기록신호(TRDwr)가 각각 배타적으로 선택되며, 범용 레지스터를 사용할지 임지 레지스터 등의 래치수단을 사용할지를 선택한다. 또한, 데스티네이션측 메모리의 경우에는, CPU내부에서 기록형 전송명령을 실행하는 것과 동등한 동작을 수행하기 위한 명령코드를 발생시키는 신호(mkmov)를 출력한다. 그 밖의 동작은, 범용 레지스터에 대한 연산명령과 동일하게 된다.
명령레지스터(IR1, IR2)는 판독한 명령을 일단 격납한다. 명령디코더(DEC)에는 명령레지스터(IR1)에 격납된 명령코드가 공급되어지게 된다. 명령변경부(CHG)는, 판독한 명령 이외의 명령코드를 명령디코더(DEC)에 부여하는 경우에 동작하고, 그 밖의 경우에는 명령레지스터(IR1)의 내용을 명령디코더(DEC)에 부여한다. 판독한 명령 이외의 명령코드는, 인터럽트 제어부(INTC)의 지시에 의하여 인터럽트 등의 예외처리를 실행할 때, 혹은 명령디코더(DEC)로부터의 제어신호(mkmov)에 의한 지시에 의하여 상기 내부에서 기록형 전송명령과 동등한 동작을 수행하는 명령코드를 발생시킬 때 등에 이용한다. 즉, 데스티네이션측을 메모리상의 데이터로 하는 경우에는, EA2코드로 생성한 어드레스에서 메모리 기록동작을 수행하기 위한 명령코드를 CPU내부에서 자동생성하고, 명령디코더(DEC)에 공급함으로써, 본 발명의 명령의 명령코드길이를 단축하고, 실행스테이트수도 단축할 수 있다.
인터럽트 제어부(INTC)는, 도 2의 인터럽트 콘트롤러(INT)(3)가 출력하는 인터럽트 요구신호(31)를 접수한다. 또한, 명령디코더(DEC)가 출력하는 인터럽트 마스크 신호(mskint)를 참조하여, 인터럽트가 마스크되어 있지 않으면 명령변경부(CHG)에 인터럽트를 지시한다. 이 경우, 명령변경부(CHG)는 인터럽트 예외처리를 위한 소정의 명령코드를 그 하드웨어에 따라 생성한다.
도 11 내지 도 14에서 설명한 바와 같이, 복수의 명령코드를 일련의 것으로 하여 실행하는 경우에는, 각각의 명령코드가 인터럽트 마스크를 제어신호(mskint)를 매개로 지시하여 소정의 조합명령코드의 실행이 중단되지 않도록 된다.
레지스터 셀렉터(RSEL)는 명령디코더(DEC)로부터의 신호 Rsrd, Rdrd, Rdwr 등에 의한 지시, 명령코드 중에 포함되는 레지스터 필드 r1, r2, gr1, gr2의 정보를 바탕으로 범용 레지스터를 선택한다.
실행부(EXEC)에는, 범용 레지스터(ER0∼ER7), 프로그램 카운터(PC), 콘디션 코드 레지스터(CCR), 임시 레지스터(TRA, TRD), 산술논리연산기(ALU), 인크리먼트(INC), 판독데이터 버퍼(RDB), 기록데이터 버퍼(WDB), 어드레스 버퍼(AB)를 포함한다. 이들 블럭은 내부버스(GB, DB, WB)에 의하여 상호 접속되어 있다.
상기 실행부(EXEC)에 포함되는 상기 레지스터 중, 도 3에도 나타나 있는 범용 레지스터(ER0∼ER31), 프로그램 카운터(CP), 콘디션 코드 레지스터(CCR) 이외에는 프로그래밍상에서는 참조할 수 없으며, CPU(2)의 내부동작에만 이용되어진다. 즉, 판독데이터 버퍼(RDB), 기록데이터 버퍼(WDB), 어드레스 버퍼(AB) 등은 내부버스(IAB, IDB)와의 인터페이스를 취하기 위하여 일시적으로 데이터를 래치한다. 임시 레지스터(TRA, TRD)는 마이크로 컴퓨터 내부의 동작에 적절히 이용되며, 예를들어 연산의 도중결과 등을 일시적으로 저장한다.
판독데이터 버퍼(RDB)는, ROM(4), RAM(5), 내부 I/O레지스터, 혹은 도시하지 않은 외부 메모리로부터 판독한 명령코드나 데이터를 일시적으로 격납한다. 기록데이터 버퍼(WDB)는 ROM(4), RAM(5), 내부 I/O레지스터, 혹은 외부 메모리로의 기록 데이터를 일시적으로 격납한다.
어드레스 버퍼(AB)는, CPU(2)가 판독/기록하는 어드레스를 일시적으로 격납하는 것 외에, 격납한 내용에 대한 인크리먼트 기능을 가지고 있다. 인크리먼트기능을 가지는 어드레스 버퍼는 일본특허공개 평4-333153호 공보 등에 기재되어 있다.
상기 산술논리연산기(ALU)는, 명령에 의하여 지정되는 각종 연산이나 실효 어드레스의 계산 등에 이용된다. 상기 인크리먼트(INC)는, 주로 프로그램 카운터(PC)의 가산에 이용된다. 또한, 도 1에서는 실행부(EXEC)는 범용 레지스터(ER0∼ER31)를 단위로 하여 산술논리연산기(ALU)나 인크리먼트(INC)가 설치되어 있는 것처럼 도시되어 있지만, 실제로는 범용 레지스터의 E(16비트), H(8비트), L(8비트)의 각 분할부분마다 분할되어 설치되어 있다.
상기 명령확장용 전치명령코드에 후속하는 명령코드를 이용하여 메모리상의 데이터를 직접적으로 연산하는 경우에는, 임시 레지스터(TRA, TRD) 및 판독 데이터 버퍼(RDB) 등을 이용한다. 임시 레지스터(TRA)는 데스티네이션측 데이터가 메모리로 되는 연산명령의 경우에 데스티네이션 어드레스의 판독시에 판독 어드레스(실효 어드레스)를 격납하고, 데이터의 데스티네이션측 메모리로의 기록시에 데스티네이션 어드레스(판독 어드레스와 동일한 어드레스)를 출력한다.
임시 레지스터(TRD)는, 소스측 데이터가 메모리로 되는 연산명령의 경우 등에, 소스측 데이터를 일시 격납하고, 연산명령코드의 실행시에 소스측 데이터를 출력한다. 또한, 데스티네이션측 데이터가 메모리로 되는 연산명령의 경우에, 연산결과를 일시 격납하고, 데이터의 데스티네이션측 메모리로의 기록시에 기록 데이터를 출력한다.
판독 데이터 버퍼(RDB)는, 또한 데스티네이션측 데이터가 메모리로 되는 연산명령의 경우에, 데스티네이션측 데이터를 일시 격납하고, 연산코드의 실행시에 소스측 데이터를 출력한다.
상기 레지스터(TRA, TRD, RDB) 등은 기존의 명령실행에 있어서도 적절하게 이용되는데, 그 상세한 내용은 본 발명과는 직접 관계가 없기 때문에 설명을 생략하기로 한다.
CPU(2)는 상기 제 2 제어를 실현하기 위하여, 상술한 바와 같이 2개의 명령레지스터(IR1, IR2)를 가지고 있다. 레지스터 셀렉터(RSEL)에는 상기 명령디코더(DEC)의 출력신호, 명령레지스터(IR1, IR2)의 출력신호, 그리고 상기 SYSC21에 포함되는 내부 I/O레지스터(CPUCR)(22)의 출력신호가 공급된다.
상기 명령레지스터(IR1)는 내부 데이터버스(IDB)로부터 명령이 공급된다. 상기 명령레지스터(IR1)의 출력은, 또 하나의 명령레지스터(IR2)에, 상기 명령변경부(CHG)를 매개로 명령디코더(DEC)에, 그리고 상기 레지스터 셀렉터(RSEL)에 결합된다. 상기 명령레지스터(IR2)의 출력은 상기 레지스터 셀렉터(RSEL)에 결합된다. 상기 명령디코더(DEC)의 출력은 레지스터 셀렉터(RSEL) 및 상기 명령레지스터(IR2)에 결합된다. 명령디코더(DEC)는 명령레지스터(IR1)에 페치된 명령의 오퍼레이션 필드의 오퍼레이션 코드를 해독한다. 명령레지스터(IR1)에 페치된 명령코드가 상기 레지스터 확장용 전치명령코드일 때, 명령디코더(DEC)가 이를 해독함으로써 당해 레지스터 확장용 전치명령의 레지스터 그룹지정필드(gr)의 레지스터 지정정보를 명령레지스터(IR2)에 래치시킨다. 그 때의 래치신호는 명령디코더(DEC)로부터 출력된다. 명령레지스터(IR2)에 래치된 레지스터 필드 지정정보 및 계속해서 명령 레지스터(IR1)에 페치된 후속 명령에 포함되는 레지스터 필드(r)의 레지스터 지정정보는, 레지스터 셀렉터(RSEL)에서 해독되며, 이들 정보로 직접적으로 지정된 레지스터 그룹 중의 레지스터가 선택되고, 선택된 레지스터를 이용하여 당해 후속명령이 실행된다. 이 명령실행 후, 상기 명령디코더(DEC)는 상기 명령레지스터(IR2)의 래치정보를 모든 비트값 "0"(레지스터 그룹 0의 지정정보)으로 클리어하기 위한 세트신호를 명령레지스터(IR2)에 공급한다. 따라서, 그 후에 레지스터 확장용 전치명령코드를 생략한 명령이 명령레지스터(IR1)에 페치되어도 명령레지스터(IR2)의 출력은 레지스터 그룹 0의 지정정보를 유지하는 결과, 레지스터 셀렉터(RSEL)는 암묵적으로 레지스터 그룹 0이 지정되어 있다고 간주되어, 명령레지스터(31)로부터의 레지스터 지정정보에 따른 레지스터를 레지스터 그룹 0으로부터 선택한다.
상기 제 2 하위 CPU는, 도 1의 구성으로부터 그 명령세트에 필요없는 기능블럭이나 논리회로를 삭제하여 개발할 수 있다. 범용 레지스터는 ER0, ER1, ER7, ER15만으로 하고, 레지스터 셀렉터(RSEL)도 이에 대응하여 삭제할 수 있다. 어드레스 버퍼의 인크리먼트 기능도 메모리에 대한 롱워드 크기의 데이터 전송명령을 삭제한 것에 대응하여 삭제할 수 있다.
명령디코드(DEC)도, 32비트 디스플레이스먼트가 부가된 레지스터 간접, 32비트 절대 어드레스, 메모리 간접 등을 삭제하여, 이에 필요한 논리회로를 삭제할 수 있다. 이와 같은 어드레싱 모드에 의한 명령은, 긴 명령코드를 가지며, 필연적으로 실행스테이트수도 커지게 되고, 또한, 롱워드 크기의 데이터 전송명령 등도 내부 데이터 버스가 16비트인 것에 대응하여, 2회의 워드 크기 데이터 전송을 수행하는 것으로 하여 제어논리도 복잡해지기 쉬우므로, 이들 어드레싱 모드나 롱워드 크기 데이터 전송명령을 삭제할 수 있다면 논리적 규모의 축소를 도모할 수 있다.
논리회로의 삭제에 있어서, 범용 레지스터 등의 불필요한 기능블럭을 삭제하고, 삭제된 기능블럭이 출력하고 있는 신호는 비활성 레벨로 고정하고, 또한 삭제된 블럭이 입력하고 있는 신호는 비접속 또는 해방이 되게 하면 된다. 나머지 논리회로는, 상기와 같이 비활성 레벨로의 고정이나 비접속 또는 해방으로 한 상태로, 논리 재합성을 수행하면 자동적으로 논리적 규모의 축소를 실현할 수 있다. 어떠한 방법을 도입하여도, 상위 CPU의 서브세트로 함으로써 개발효율을 향상시킬 수 있다.
도 18에는 상기 레지스터 셀렉터(RSEL)의 일부와 명령레지스터(IR2)의 상세한 블럭도가 나타나 있다.
명령레지스터(IR2)는, 보지수단으로서의 래치회로(LGR1)(321) 및 래치회로(LGR2)(322)를 가진다. 이들 래치회로(LGR1, LGR2)(321, 322)는 상술한 바와 같이 레지스터 그룹 지정필드(gr1, gr2)의 레지스터 그룹지정정보를 래치한다.
도 18에 따르면, 상기 래치회로(321, 322)는 이른바 리셋이 부가된 D형 플립플롭에 의하여 구성되어 있다. 리셋신호(RSLGR)로서 명령디코더(DEC)로부터 지정되는 명령실행 종료신호(RSLGR)를 입력한다. 래치클록으로서, 명령디코더(DEC)로부터 지정되는 LGRCL을 입력하고, 또한 데이터로서 명령레지스터(IR1)가 보지하는 명령코드의 비트 7∼4, 3∼0(그룹 4개의 경우에는 비트 5, 4, 1, 0만으로 충분하다)를 입력한다. 래치클록(LGRCL)은 레지스터 그룹을 지정하는 명령코드(생략가능한 레지스터 확장용 전치명령코드)를 실행하였을 때에 활성상태로 되고, 그 때의 레지스터 필드(gr)인 비트 7∼4, 3∼0을 래치시킨다. 래치회로(321, 322)는 명령의 실행종료시점에서 명령디코더(DEC)로부터의 제어신호(리셋신호(RSLGR))를 바탕으로 소정의 값으로 설정된다. 본 실시예에서는, 모든 비트값 "0"으로 클리어된다.
범용 레지스터 그룹을 지정하는 레지스터 확장용 전치명령코드를 가지지 않는 명령은, 래치회로(LGR1, LGR2)(321, 322)가 값 "0"으로 클리어된 상태로 되어 있기 때문에, 명령실행이 이루어질 때 레지스터 그룹 0의 범용 레지스터가 지정되어지게 된다.
레지스터 셀렉터(RSEL)의 데스티네이션 레지스터 지정측에는, 래치회로(LGR2)(322)로부터 출력되는 레지스터 그룹 지정필드(gr2)의 정보를 보지하는 래치회로(331)와, 명령레지스터(IR1)로부터 출력되는 레지스터 지정필드(r2)의 정보를 래치하는 래치회로(332)가 설치되어 있다. 이들 래치회로(331, 332)는 시스템 클록Φ의 반전클록Φ# 에서 래치되도록 되어 있으며, 소스 레지스터의 선택동작보다 늦게 데스티네이션 레지스터의 선택동작이 이루어진다. 이로써, 데스티네이션측 레지스터 지정정보의 래치타이밍, 즉 데스티네이션 레지스터 선택타이밍이 소스 레지스터 선택타이밍 보다도 0.5스테이트 느려지게 된다. 소스 레지스터는 어드레스 레지스터로서 선행해서 선택되며, 데스티네이션 레지스터는 데이터의 기록을 위하여 늦게 선택될 수 있게 되어 있다.
도 19 및 도 20에는 범용 레지스터(ER8)에 상당하는 레지스터 셀렉터(RSEL)의 논리기술의 일부가 예시되어 있다. 도 20의 기술은 도 19 후에 계속되는 나머지 논리기술이다.
도 19 및 도 20에 나타낸 논리기술은 RTL(Register Transfer Level) 혹은 HDL(Hardware Description Language) 기술이라 불리며, 공지의 논리합성수단에 의하여 논리회로에 논리전개할 수 있다. HDL은 IEEE1364로서 표준화되어 있다. 이에 나타나 있는 논리기술의 구문(構文)은, 케이스(case)문에 준거하여 있으며, always@의 다음 ( )내에 정의된 값 혹은 신호에 변화가 있을 때, 그 이하의 기술행의 처리를 수행한다는 기술내용으로 되어 있다. 또한, 기호「!」는 논리적인 합을 나타내고, 「&」는 논리적인 곱을 나타낸다. 「3'b001」은 3비트 길이의 001을 의미한다.
상기 논리기술은, always@(gr1 or r1 or gr2 or gr2) begin으로 시작되는 레지스터 선택기술부분과, always@(rs8 or rsgb or rsdb or wbrs, rd8, rdgb, rddb, wbrd) begin으로 시작되는 버스 선택기술부분과, always@(wbr8 or r2[3] or byte or word or long) begin으로 시작되는 레지스터크기 지정기술부분으로 대별된다.
상기 레지스터 선택기술부분에서는, 레지스터 필드 r[2 : 0] = 0, 레지스터 필드 gr[1 : 0] = 1일 때, 범용 레지스터 ER8를 선택하는 기술로 되어 있다.
즉, 소스 레지스터의 그룹 필드가 gr1 = 1(gr1 - 4'b0001)이고 소스 레지스터의 레지스터 필드가 r1 = 0(r1 - 3'b000)일 때 레지스터 ER8을 소스 레지스터로서 선택하기 위한 신호 rs8이 활성화된다(rs8 = 1). 그렇지 않으면 신호 rs8은 비활성 상태를 유지한다(rs8 = 0).
또한, 데스티네이션 레지스터의 그룹 필드가 gr2 = 1(gr2 = 4'b0001)이고, 데스티네이션 레지스터의 레지스터 필드가 r2 = 0(r2 = 3'b000)일 때 레지스터 ER8을 데스티네이션 레지스터로서 선택하기 위한 신호 rd8이 활성화된다(rd8 = 1). 그렇지 않으면, 신호 rd8은 비활성 상태를 유지한다(rd8 = 0).
상기 버스 선택기술부분의 always문에 있어서의 rsgb는 소스 레지스터의 내용을 버스 GB에 출력하는 것을 지시하는 신호, rsdb는 소스 레지스터의 내용을 버스 DB에 출력하는 것을 지시하는 신호, wbrs는 버스 WB의 내용을 소스 레지스터에 출력하는 것을 지시하는 신호, rdgb는 데스티네이션 레지스터의 내용을 버스 GB에 출력하는 것을 지시하는 신호, rddb는 데스티네이션 레지스터의 내용을 버스 DB에 출력하는 것을 지시하는 신호, wbrd는 버스 WB의 내용을 데스티네이션 레지스터에 출력하는 것을 지시하는 신호이다.
명령디코더(DEC)(33)에 의하여, 소스 레지스터를 지시하는 레지스터 지정필드(gr1, r1)의 레지스터의 내용을 내부버스 GB로 출력할 것이 지시되었을(rsgb = 1) 때에 신호 rs8이 활성화되어 있는 경우, 또는, 데스티네이션 레지스터를 지시하는 레지스터 지정필드(gr2, r2)의 레지스터의 내용을 내부버스 GB로 출력할 것이 지시되었을(rdgb = 1) 때에 신호 rd8이 활성화되어 있는 경우, 범용 레지스터 ER8로부터 내부버스 GB로의 데이터 출력을 지시하는 신호 r8gb가 활성화된다(r8gb = 1).
마찬가지로, 명령디코더(DEC)에 의하여, 소스 레지스터를 지시하는 레지스터 지정필드(gr1, r1)의 레지스터의 내용을 내부버스 DB로 출력할 것이 지시되었을(rsdb = 1) 때에 신호 rs8이 활성화되어 있는 경우, 또는 데스티네이션 레지스터를 지시하는 레지스터 지정필드(gr2, r2)의 레지스터의 내용을 내부버스 DB로 출력할 것이 지시되었을(rddb = 1) 때에 신호 rd8이 활성화되어 있는 경우, 범용 레지스터 ER8로부터 내부버스 DB로의 출력이 지시되는 신호 r8db가 활성화된다(r8db = 1).
또한, 명령디코더(DEC)에 의하여, 소스 레지스터를 지시하는 레지스터 지정필드(gr1, r1)의 레지스터로 내부버스 WB로부터 데이터를 입력시킬 것이 지시되었을(wbrs = 1) 때에 신호 rs8이 활성화되어 있는 경우, 또는 데스티네이션 레지스터를 지시하는 레지스터 지정필드(gr2, r2)의 레지스터로 내부버스 WB로부터 데이터를 입력시킬 것이 지시되었을(wbrd = 1) 때에 신호 rd8이 활성화되어 있는 경우, 범용 레지스터 ER8로 내부버스 WB로부터의 입력을 지시하는 신호 wbr8이 활성화된다(wbr8 = 1).
상기 레지스터 크기선택의 논리기술부분의 always문에 있어서, r2[3]은 레지스터 필드 r2의 하위로부터 4비트째의 값을 의미한다.
범용 레지스터 ER8로 내부버스 wb로부터 데이터의 입력이 지시된 경우, 데이터 크기가 롱워드 크기(long = 1)이면, 범용 레지스터 ER로서 32비트로 기록된다(wb8e = wb8h = wb8l = 1). 신호 wb8e는 도 3의 16비트분의 레지스터 E부분의 입력 게이트신호, 신호 wb8h는 도 3의 8비트분의 레지스터 RH부분의 입력 게이트신호, 신호 wb8l은 도 3의 8비트분의 레지스터 L부분의 입력 게이트신호를 의미한다.
또한, 워드크기(word = 1)의 경우, r2의 비트 3의 값에 대응하여 범용 레지스터 E로서 16비트로 기록될지(wb8e = 1, wb8h = wb8l = 0), 범용 레지스터 R(RH, RL)로서 16비트로 기록될지(wb8e = 0, wb8h = wb8l = 1)가 지정된다. 또한, 바이트크기의 경우, r2의 비트 3의 값에 대응하여 범용 레지스터 RH로서 8비트로 기록될지(wb8e = 0, wb8h = 1, wb8l = 0), 범용 레지스터 RL로서 8비트로 기록될지(wb8e = wb8h = 0, wb8l = 1)가 지정된다.
그 밖의 레지스터 번호에 대해서도 상기 논리기술에 있어서의 gr, r의 부분이 상이할 뿐으로, 그 밖에는 동일하게 된다. 레지스터 셀렉터(34)는 상기 기존의 하위 CPU의 레지스터 셀렉터에 대하여 gr의 디코드논리가 추가되며, 또한 신규한 범용 레지스터(ER8∼ER31)에 대응하는 부분의 디코드논리가 추가되어지게 된다.
레지스터 셀렉터(34)의 출력처를 gr의 내용에 따라 범용 레지스터 8개 단위로 나눌 뿐이기 때문에, 임의의 명령에 대하여 동일한 방법으로 지정가능한 범용 레지스터 개수를 늘릴 수 있게 된다.
도 21 및 도 22에는 스택 포인터에도 사용할 수 있는 레지스터 ER7에 관한 레지스터 셀렉터의 선택논리의 한 예를 논리기술로 나타낸다. 도 22의 기술은 도 21 후에 계속되는 나머지 논리기술이다. 기술형태는 도 19, 도 20과 동일하다. 특별히 제한되어 있지는 않지만, sspgr은 서브루틴 분기명령용 스택 포인터로서 사용하는 레지스터의 그룹을 지정하는 정보로 되며, ispgr은 예외처리용 스택 포인터로서 사용하는 레지스터의 그룹을 지정하는 정보로 된다. 이들 정보 sspgr, ispgr은 시스템 콘트롤러(SYSC)(21)에 포함되는 제어레지스터(CPUCR)(22)로부터 레지스터 셀렉터(RSEL)에 공급된다.
상기 도 19와 동일한 레지스터 선택을 위한 논리기술 외에, 명령디코더로부터의 제어신호(sspgb, wbssp, ispgb, wbisp)와, 스택 포인터지정 제어비트(sspgr, ispgr)에 의하여 레지스터 선택신호를 생성한다. 신호 sspgb는 서브루틴용 스택 포인터에 이용되는 레지스터의 값을 버스 GB에 출력할 것을 지시하고, 신호 wbssp는 버스 EB로부터 서브루틴용 스택 포인터에 이용되는 레지스터에 데이터를 공급할 것을 지시하고, 신호 ispgb는 예외처리용 스택 포인터에 이용되는 레지스터의 값을 버스 GB에 출력할 것을 지시하고, 신호 ebisp는 버스 WB로부터 예외처리용 스택 포인터에 이용되는 레지스터에 데이터를 공급할 것을 지시한다. 종래, 서브루틴 분기와 인터럽트 예외처리의 스택 포인터를 독립적으로 설치한 경우에는, 이것을 서브루틴 분기용(sspgb, wbssp), 인터럽트 예외처리용(ispgb, wbisp)으로 분리하여 명령디코더를 구성할 필요가 있다. 이것은 본래 개개의 처리에 대한 기능을 종합한 것을 분리하도록 한 것이기 때문에, 논리적인 규모의 증대 등은 적다.
이것 외에 예외처리의 스택 포인터가 될 수 있는 레지스터 ER15, ER23, ER31도 마찬가지로 구성할 수 있다. 즉, 레지스터 ER15는, sspgr = 1 또는 ispgr = 1일 때 선택된다. 마찬가지로, 레지스터 ER23은, sspgr = 2 또는 ispgr = 2일 때 선택되며, 레지스터 ER31은 sspgr = 3 또는 ispgr = 3일 때 선택된다.
제어레지스터(CPUCR)(22)의 구성은, 공지기술이기 때문에 상세한 설명은 생략하기로 한다. 제어레지스터(CPUCR)(22)는 리셋시에 레지스터 그룹 0이 선택되도록(sspgr = ispgr = 0) 하면 된다.
또한, 커런트(current)그룹 선택비트를 설치하여도 좋다. 즉, 레지스터 확장용 전치명령코드가 부가되지 않는 경우, 레지스터 그룹 0으로 하지 않고, 스택 포인터 그룹 선택비트와 동일한 제어레지스터에 상기 커런트그룹 선택비트를 설치하고, RSLGR신호에 의하여 상기 커런트그룹 선택비트의 내용을 명령레지스터 IR2(LHR1, LGR2)에 로드하도록 한다.
커런트그룹 선택비트에 0 이외의 것이 설정되어 있는 경우, NOP명령(H'0000)은 레지스터 그룹 0의 전치명령코드로 된다. 이 명령코드의 실행 후에는 인터럽트를 접수하지 않고 다음 명령코드를 실행하도록 하면 된다.
레지스터 그룹 0을 지정하기 위하여 H'0000을 사용하게 되고, 기존의 NOP명령과 동일한 코드이며, NOP명령은 사용하지 않도록 하면 된다. NOP명령 대신에 BRA $+2등을 사용하도록 하면 된다(「$+2」는 그 명령이 존재하는 어드레스에 대하여 2번지 앞, 즉 다음 명령의 어드레스임을 나타낸다).
각 지점에서의 프로그램의 실행내용에 의하여, 주로 사용하는 범용 레지스터의 대상은 서로 다르기 때문에, 주로 사용하는 그룹의 처리를 고속으로 하고, 나아가 CPU의 처리속도를 향상시킬 수 있다. 예를들어, 레지스터 그룹 3의 범용 레지스터를 소정의 인터럽트 처리에 할당하고, 다른 처리에서는 사용하지 않도록 해 두어 당해 인터럽트가 발생하였을 때 커런트그룹을 3으로 변경하여 레지스터 확장용 전치명령코드 없이 범용 레지스터 그룹 3에 대한 처리를 고속으로 실행할 수 있다.
예를들어, 인터럽트 우선순위를 4레벨로 하였을 경우, 통상, 인터럽트의 네스트(nest)는 4계층이 된다. 즉, 인터럽트의 우선순위를 3(고위)∼0(저위)로 하였을 경우, 동일한 우선순위의 인터럽트는 동시에 접수하지 않기 때문에, 처음에 우선순위 0인 인터럽트는 마스크되고, 메인 프로그램 실행 도중에 우선순위 1인 인터럽트가 발생하며, 이 처리도중에 우선순위 2인 인터럽트가 발생하고, 이 처리도중에 우선순위 3의 인터럽트가 발생하였을 경우, 최대 네스트 4가 된다.
예를들어, 그룹 3을 우선순위 3인 인터럽트용 처리에 확보하고, 그룹 2를 우선순위 2인 인터럽트용 처리에 확보해 두고, 그 밖의 인터럽트와 일반적인 처리에서는 그룹 0과 1을 사용하도록 프로그램을 짜면, 우선순위 3인 인터럽트 발생시에는 범용 레지스터를 대피시키지 않고도 범용 레지스터 그룹 3을 사용할 수 있기 때문에, 인터럽트 응답속도를 향상시킬 수 있다. 우선순위 2인 인터럽트 발생시에도 마찬가지로 할 수 있어, 보다 우선도가 높은 인터럽트 처리를 고속으로 처리할 수 있다.
오퍼레이팅 시스템(OS) 등에 의하여 CPU의 처리를 제어하는 경우, CPU의 처리는 이른바 태스크로 분할되며, 각 태스크는 독립적으로 관리된다. 예를들어, 스택 영역도 각 태스크마다 독립적으로 관라하게 된다.
태스크를 절환하는 경우 스택 영역도 절환하게 되고, 종래에는 사용중인 스택 포인터의 내용을 대피시켜 스택 포인터의 내용을 갱신하지 않으면 안된다. 갱신하는 경우에는, 당해 태스크가 전회 대피시킨 스택 포인터의 내용을 복귀할 필요가 있다.
이와 같은 태스크 절환의 경우, 상기의 예에서는 상기 레지스터(CPUCR)(22)의 내용을 바꿔쓰기만 하면 된다. 절환하기 전인 스택 포인터의 내용은 보지할 수 있기 때문에, 대피시키거나 복귀할 필요가 없다. CPU의 처리에 직접 영향을 미치지 않는 처리를 생략함으로써 실질적인 처리성능을 향상시킬 수 있다.
또한, 인터럽트는 태스크의 실행과 독립적으로 발생하고, 태스크로부터는 예기할 수 없다. 각 태스크에서 인터럽트를 허가하고 있는 경우에는, 발생할 수 있는 다종 인터럽트의 수분(일반적으로는, 인터럽트 우선순위의 수에 상당한다) 스택영역을 확보하지 않으면 안된다. 종래에는, 이것을 각 태스크마다 수행하여야만 하였으며, 스택 사용량을 불가피하게 증가시키고 있었다. 본 실시예에 있어서는, 예외처리용 스택 포인터를 이용하여 예외처리용 스택을 독립적으로 관리할 수 있기 때문에, 각 태스크는 인터럽트용 스택영역을 확보할 필요가 없다. 이로써, 스택의 사용량을 억지할 수 있다. 스택은 RAM으로 구성되며, 또한 싱글칩 마이크로 컴퓨터에 있어서는 내장할 수 있는 RAM의 용량은 칩 크기 등에 의하여 제한되어지기 때문에, 예외처리용 스택 포인터를 사용가능하게 함으로써 싱글칩 마이크로 컴퓨터에 있어서도 OS의 적용을 용이하게 한다.
또한, 제어레지스터(CPUCR)(22)의 초기값을 레지스터 그룹 0에 상당하도록 하고, 초기상태에서 기존의 하위 CPU와 동일한 스택 포인터의 사용방법을 가능하게 함으로써, 기존의 소프트웨어 자산도 유효하게 이용할 수 있다.
ER7, ER15, ER23, ER31을 스택 포인터로서 사용하지 않는 경우에는, 그 밖의 범용 레지스터로서 사용할 수 있기 때문에, 이용효율이나 이용상 편의성을 향상시킬 수 있다.
도 23 내지 도 25에는 상기 명령데코더(DEC)에 포함되는 전송명령코드(mov)의 해독논리(201)를 논리기술로 예시한다. 도 23 내지 도 25에 나타낸 논리기술은, 도 19와 동일한 RTL(Register Transfer Level) 혹은 HDL(Hardware Description Language)에 의하여 기술되어 있다. 또한, 기호 「!」는 논리적인 합을 나타내고, 「&」은 논리적인 곱을 나타낸다. 「3'b001」은 3비트길이의 바이너리 데이터 001을 의미한다. IR[8]은 명령 레지스터 IR의 최하위로부터 9비트째인 논리값을 의미한다.
도 23 내지 도 25의 논리기술은, 16비트 절대 어드레스에 의한 워드크기의 전송명령(MOV. W @aa:16, Rn)의 코드를 해독하기 위한 논리기술에 상당한다. 도 23 내지 도 25의 논리기술에 있어서, casex(IR)의 다음행에 기술된 16'b0110_101?_??00_????이 그 전송명령의 코드를 의미한다. IR[8] = 0일 때 바이트크기, IR [8] = 1일때 워드크기, IR[7] = 0일때 메모리→범용 레지스터(판독형), IR[7] = 1일때 범용 레지스터→메모리(기록형)의 전송을 의미한다. 그 명령을 독립된 전송명령으로서 실행할지, 메모리상의 데이터에 대한 직접적인 처리명령의 일부로서 실행할지는 신호 MODS, MODD의 값에 의하여 지시된다. 즉, 도 23 내지 도 25의 논리기술에서는, 스테이트 코드(TMG)의 값과 그 때의 MODS, MODD의 값 등에 따라 다음 스테이트 코드(NEXTTMG)의 값을 결정하도록 되어 있다. MODS, MODD신호에 의하여 독립된 전송명령으로서 실행할지, 메모리상의 데이터에 대한 직접적인 처리명령의 일부로서 실행할지의 제어가 대별되게 된다. 구체적으로는, MODS = MODD = 0인 경우는, 독립된 전송명령으로서 실행되어진다. 기존의 전송명령과 동일한 동작으로 된다. 특히 도시하지 않은 부분에 대해서는 독립된 전송명령과 마찬가지로 할 수 있다.
MODS = 1의 경우에는, 소스측 데이터의 판독동작으로서 실행되어진다. 판독 데이터는, 범용 레지스터에 기록하지 않고, 임시 레지스터(TRD)에 기록한다.
MODD = 1에서, MODS = 0 또는 MODSE = 1인 경우에는, 데스티네이션측 데이터의 판독동작으로서 실행되어진다. 판독 어드레스를 임시 레지스터(TRA)에 기록한다. 판독 데이터는, 판독 데이터 버퍼(RDB)에 입력한 후 1스테이트 빠르게 실행을 종료한다. 또한, MODSE는 소스측 판독형 전송명령코드의 실행이 종료한 것을 나타내는 신호이며, 해독논리 201로 생성된다.
판독데이터의 임시 레지스터(TRD)로의 기록 및 판독 어드레스의 임시 레지스터 (TRA)로의 기록은, 양쪽 경우 모두 구별없이 실행하여도 좋다(이용되지는 않아도 동작에 영향을 미치지 않는다. 구별하지 않음으로써 논리적인 낭비를 줄일 수 있다).
따라서, 독립된 전송명령(기존의 전송명령)에 비해 MODS = 1일 때 범용 레지스터로의 기록금지, MODD = 1일 때 1스테이트 단축한 차이가 있을 때에만 할 수 있다.
또한, 도 15에 나타낸 대로, 명령확장용 전치명령코드의 롱워드 크기의 지정에 의하여, MODS, MODD와 마찬가지로 롱워드 크기가 LNG신호에 의해 지시된다.
또한, 도에 있어서, 소문자의 신호는 명령디코더(DEC)에서 생성되어, 출력되는 신호로 하고, 대문자 신호는 명령디코더(DEC)에 입력된 신호로 한다.
도 23에 나타낸 논리기술의 제 1 부분(1-1)에서 스테이트 코드(TMG)가 생성된다. 스테이트 코드(TMG)는 1→2→3으로 진행하는데, 데스티네이션측 데이터의 판독동작(MODD = 1에서 MODS = 0 또는 MODSE = 1)의 경우 TMG는 1→2로 종료하도록 되어 있다.
또한, NEXTTMG[5] = 0의 경우에 있어서는 다음 스테이트 코드는 단순하게 하위비트의 값으로 되어 있다. NEXTTMG[5] = 1의 경우에 있어서의 다음 스테이트 코드는 5' b00001로 되도록 구성되어 있다.
도 23에 나타낸 논리기술의 제 2 부분(1-2)에서 버스제어를 수행한다. nop = 0은 버스 접속개시, nop = 1은 버스 접속금지를 지시한다. data = 0은 명령판독, data = 1은 데이터 접속을 지시한다. long = 1은 롱워드 크기, long = 0일 때 byte = 0은 워드크기, byte = 1은 바이트 크기를 지시한다. write = 0은 판독, write = 1은 기록을 지시한다.
본 전송명령의 경우, 스테이트 코드 1, 3으로 명령판독을 수행하고, 스테이트 코드 2로 데이터 접속을 수행하도록 되어 있다. 데이터 접속의 판독/기록은 IR[7]에 의하여 지시되어진다. 명령판독의 경우에는 소정의 타이밍에서 내부데이터 버스(IDB)의 내용이 명령 레지스터(IR)와 판독 데이터 버퍼(RDB)에 격납되어진다. 데이터 판독의 경우에는 소정의 타이밍에서 내부 데이터 버스(IDB)의 내용이 판독 데이터 버퍼(RDB)에 격납되어진다. 데이터 기록의 경우에는 소정의 타이밍에서 기록 데이터 버퍼(WDB)의 내용이 내부 데이터 버스(IDB)에 출력된다.
도 24에 나타낸 논리기술의 제 3 부분(1-3)에서 실효 어드레스를 계산한다. 본 전송명령의 경우, 스테이트 코드 2(=5' b00010)에서 판독 데이터 버퍼(RDB)에 보지하고 있는 명령코드의 EA확장부 16비트를, dbrext신호에 의하여 32비트로 부호확장한 후 내부버스(GB)에 출력한다. 버스 GB의 내용은 어드레스 버퍼(AB)에 매 스테이트 격납되도록 되어 있으며, 특별히 제어는 필요없다.
도 24에 나타낸 논리기술의 제 4 부분(1-4)에서 전송데이터를 제어한다. 판독형(IR[7] = 0)인 경우에는, 스테이트 코드 3에서 판독 데이터를 판독 데이터 버퍼(RDB)로부터 버스 DB로 출력하고, MODS = 0의 경우에는 범용 레지스터에, MODS = 1의 경우에는 임시 레지스터(TRD)에 격납한다.
기록형(IR[7] = 1)인 경우에는, 스테이트 코드 2에서, MODS = 0인 경우에는 범용 레지스터로부터, MODS = 1인 경우에는 임시 레지스터(TRD)로부터 내부버스(DB)로 출력하고, 두 경우 모두 기록 데이터 버퍼(WDB)를 경유하여 내부 데이터 버스(IDB)에 출력한다.
도 25에 나타낸 논리기술의 제 5 부분(1-5)에서, 인터럽트 마스크신호를 제어한다. 또한, 소스측 데이터의 판독이 종료한 경우에는 제어신호 MODSE를 발생시킨다.
도 23 및 도 25에 있어서 MODS = 1 또는 MODD = 1의 경우에는 입력된 오퍼레이션 레코드의 일부가 전송명령과 다르게 하여도 좋다. 예를들어, 오퍼레이션 코드의 비트 15는 다른 정의에 사용하도록 하여도 좋다.
논리규모의 축소를 위해서는 어드레싱 모드 등의 메모리의 지정방법을 결정하는 비트(오퍼레이션 코드의 비트 8∼10)는 공통으로 한다.
도 26 및 도 27에는 상기 명령디코더(DEC)에 포함되는 연산명령코드(exe)의 해독논리 202를 논리기술로 예시한다. 도 26 및 도 27 양측에 의하여 나타내지는 논리기술은, 레지스터간 가산명령(ADD. W Rm, Rn)의 코드를 해독하기 위한 논리기술에 상당한다.
상기와 마찬가지로, 독립된 전송명령으로서 실행할지, 메모리상의 데이터에 대한 처리명령의 일부로서 실행할지는 MODS, MODD신호에 의하여 지시된다. 특히 도시하지는 않은 부분(ALU의 제어 등)에 대해서는, 독립된 연산명령과 마찬가지로 할 수 있다.
도 26에 나타낸 논리기술의 제 1 부분(2-1)에서 스테이트 코드(TMG)가 생성된다. 스테이트 코드(TMG)는 1(=5' b00001)에서 종료한다. 도 26에 나타낸 논리기술의 제 2 부분(2-2)에서 버스제어를 수행한다. 스테이트 코드 1에서 명령판독을 종료한다.
도 27에 나타낸 논리기술의 제 3 부분(2-3)에서, 연산데이터를 제어한다. MODS = 0인 경우에는, 소스측 데이터를 범용 레지스터로 하고, 범용 레지스터의 내용을 DB로 판독한다(rsdb). MODS = 1인 경우에는, 소스측 데이터를 메모리로 하고, 임시 레지스터(TRD)의 내용을 DB로 판독한다(trddb).
MODD = 0인 경우에는, 데스티네이션측 데이터를 범용 레지스터로 하고, 범용 레지스터의 내용을 GB로 판독(rdgb)함과 동시에, 연산결과를 범용 레지스터에 기록(wbrd)한다. MODD = 1인 경우에는, 데스티네이션측 데이터를 메모리로 하고, 판독 데이터 버퍼의 내용을 버스 DB로 판독(rdbdb)함과 동시에, 연산결과를 임시 레지스터(TRD)에 기록한다(wbtrd).
도 27에 나타낸 논리기술의 제 4 부분(2-4)에서, 인터럽트 마스크 신호를 제어한다. 또한, 데스티네이션측이 메모리인 경우에는, 제어신호 mkmov를 발생시키고, 기록형 전송명령과 동등한 동작을 수행하는 명령코드의 발생을 명령변경부(CHG)에 지시한다. 또한, 롱워드 크기신호(LNG), 바이트 크기신호(BYTE)를 계속한다.
도 28 내지 도 30에는 상기 명령디코더(DEC)에 포함되는 연산명령코드(exe)의 해독논리 202 중, 내부에서 생성되는 기록형 전송명령과 동등한 동작을 수행하는 명령코드를 생성하는 논리의 논리기술이 예시되어 있다.
상기 내부에서 생성되는 기록형 전송명령과 동등한 동작을 수행하는 명령코드는, 항상 동일한 동작을 수행하는 것으로 하고, MODS나 MODD의제어신호는 참조하지 않는다.
도 28에 나타낸 논리기술의 제 1 부분(3-1)에서 스테이트 코드(TMG)가 생성된다. 스테이트 코드(TMG)는 1→3으로 진행한다. 도 28에 나타낸 논리기술의 제 2 부분(3-2)에서 버스제어를 수행한다. 스테이트 코드 1(=5' b00001)에서 데이터 기록을 수행하고, 스테이트 코드 3(-5' b00011)에서 명령판독을 수행한다. 데이터 크기는 연산명령코드가 발생한 제어신호 NLG, BYTE에 의하여 지시된다.
도 29에 나타낸 논리기술의 제 3 부분(3-3)에서 실효 어드레스를 재이용한다. 스테이트 코드 1에서 임시 레지스터(TRA)에 보지하고 있는 실효 어드레스를 내부버스(GB)에 출력한다. 도 29에 나타낸 논리기술의 제 4 부분(3-4)에서 전송데이터를 제어한다. 스테이트 코드 3에서 임시 레지스터(TRD)로부터 내부버스(DB)로 출력하고, 기록 데이터 버퍼(WDB)를 경유하여 내부 데이터 버스(IDB)로 출력한다.
도 30에 나타낸 논리기술의 제 5 부분(3-5)에서, 제어신호는 모두 초기화한다. 인터럽트도 허가하여, 인터럽트가 요구되면 계속해서 인터럽트 예외처리를 수행할 수 있다.
명령확장용 전치명령코드(pf)를 해독하는 논리회로의 논리기술에 대해서는 특히 도시하지는 않았지만, 도 15의 명령확장용 전치명령코드의 해독결과에 따른 mod나 mskint 등의 제어신호를 생성하고, MODS, MODD 등에 의하여 도 23 내지 도 30에 예시되는 논리동작을 제어하여, 명령디코더(DEC) 전체로서 메모리의 데이터에 대한 직접적인 연산제어를 가능하게 한다.
도 31에는 레지스터 확장용 전치명령코드를 수반하지 않는 제 1 가산명령(ADD. LER0, ER1)의 실행 타이밍이 나타나 있다.
ADD. L ER0, ER1은 그룹 0의 범용 레지스터만을 사용하기 때문에, 범용 레지스터 그룹을 지정하는 레지스터 확장용 전치명령코드를 필요로 하지 않으며, 상기 기존의 하위 CPU, 예를들어 상기 1995년 3월 (주)히타치제작소 발행 『H8S/2600시리즈 H8S/2000시리즈 프로그래밍 매뉴얼』에 기재된 CPU와 동일한 1워드의 명령으로 된다.
특별히 제한되어 있지는 않지만, 내부 데이터버스(IDB)는 16비트로서, 내장 ROM(4), RAM(5)의 판독/기록을 1스테이트로 수행할 수 있는 것으로 설명한다. 또한, CPU는 명령페치, 디코드, 실행의 3단 파이프라인으로 명령을 실행하는 것으로 한다.
사이클 T0의 슬롯 C2(Φ#동기:클록신호 Φ의 반전클록인 Φ#동기)에서, CPU(2)의 어드레스 버퍼(AB)로부터 어드레스가 버스 IAB에 출력된다. 또한, 명령디코더(DEC)로부터 명령페치(if)를 나타내는 버스 명령어(BCMD)가 출력된다.
사이클 T1의 슬롯 C1(Φ동기)에서, 어드레스 버스 IAB의 내용이 주변 어드레스 버스(PAB)에 출력되고, 버스 명령어를 바탕으로 판독사이클이 개시되고, 주변 데이터 버스(PDB)에 데이터가 출력된다. 슬롯 C2에서 주변 데이터 버스(PDB)의 판독데이터가 내부 데이터버스(IDB)로 얻어지며, 이를 사이클 T2의 슬롯 C1에서 명령레지스터(IR1)에 래치한다. 이상의 동작은 이전 명령의 실행 제어에 의하여 이루어진다. 상기 주변 데이터 버스(PDB) 및 주변 어드레스 버스(PAB)는 내부 데이터 버스(IDB) 및 내부 어드레스 버스(IAB)에 접속된 주변 회로용의 도시를 생략한 버스이다. 내장 ROM(4), RAM(5)은 그 모듈 내에서 주변 어드레스 버스, 주변 데이터 버스 상당의 동작을 수행한다.
직전의 명령 실행이 종료하면, 가장 빠르게 명령의 실행이 개시되는 경우에는, 사이클 T2의 슬롯 C1에서 명령코드가 제어부(CONT)의 명령디코더(DEC)에 입력되어 명령의 내용이 해독된다. 명령디코더(DEC)는 해독결과에 따라 제어신호를 출력하고, 각 부의 제어를 수행한다. 명령의 일부(레지스터 지정 필드의 정보 : SEL1)가 레지스터 셀렉터(RSEL)에 주어진다. 도에 있어서 소스측 레지스터 지정 필드의 정보 SEL1 = 0으로 되고, 데스티네이션측 레지스터 지정 필드의 정보 SEL2 = 1로 되어 있다. SEL1은 도 18의 RSEL의 r1[3 : 0], SEL2는 r2[3 : 0]에 상당한다.
레지스터간 연산명령에서는, 사이클 T2의 슬롯 C2에서 프로그램 카운터 PC의 내용을 내부버스(BD)로 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스(IAB)에 어드레스 신호가 출력된다. 레지스터 셀렉터(34)에 제어신호를 부여한다. 이 때, 래치회로(LGR1, LGR2)(321, 322)가 모두 0으로 클리어되어 있기 때문에, 레지스터 필드(SEL1, SEL2)로부터의 신호와 제어부(CONT)가 출력하는 제어신호A(Rs-DB, Rd-GB)를 바탕으로 레지스터 선택신호 B(R0-DB, R1-GB)가 생성된다.
사이클 T3로부터 다음 다음의 명령이 판독된다. 사이클 T3의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 입력신호(SEL2)와 제어신호 B(WB-Rd)를 바탕으로 레지스터 선택신호 C(selectC:WB-R1)가 생성된다. 상기 레지스터 선택신호 B는 레지스터를 선택하고, 소스측, 데스티네이션측의 레지스터(Rs, Rd)의 데이터를 산술논리연산기(ALU)에 입력한다. 산술논리연산기(ALU)의 연산내용은 제어부(CONT)가 제어신호 C(controlC)에 의하여 지시한다. 가산·논리연산·시프트 등은 1클록에서 연산을 수행할 수 있다. 예를들어, 상기 명령에서는 32비트의 가산을 수행한다. 다음 명령의 제어부(CONT)로의 로드를 지시한다.
제어신호 B(RSLGR)에 의하여, 래치회로(LGR1, LGR2)(321, 322)의 클리어가 지시된다. 래치회로(LGR1)(321)는 사이클 T3의 슬롯 C1에서, 래치회로(LGR2)(322)는 사이클 T3의 슬롯 C2에서 클리어된 결과가 전달된다.
사이클 T3의 슬롯 C2에서, 산술논리연산기(ALU)의 연산결과가 내부버스(WB)를 경유하여 레지스터 선택신호가 선택한 데스티네이션측 레지스터(ER1)에 기록된다. 도시되지는 않았지만, 제어신호 C에 의하여 콘디션 코드 레지스터(CCR)의 갱신을 수행한다.
도 31의 예에서는 레지스터 그룹 0끼리의 레지스터간 연산은 실질적으로 1 스테이트에서 실행되고 있다.
도 32에는 레지스터 확장용 전치명령코드가 부가된 제 2 가산명령(ADD. L ER8, ER1)의 실행 타이밍을 나타낸다.
범용 레지스터 그룹을 지정하는 레지스터 확장용 전치명령코드를 부가하여 2워드명령으로 한다. 제 2 워드는 상기 ADD. L R0, R1과 동일하다. 즉, gr1 = 1이기 때문에, 동일한 r1 = 0에 대하여 레지스터 번호 n = 8로 해석된다.
사이클 T0의 슬롯 C2에서, CPU(2)의 어드레스 버퍼(AB)나 어드레스가 어드레스 버스(IAB)에 출력된다.
사이클 T1의 슬롯 C1(Φ동기)에서, 어드레스 버스(IAB)의 내용이 주변 어드레스 버스(PAB)에 출력되고, 판독사이클이 개시된다. 슬롯 C2에서 판독 데이터가 내부 데이터 버스(IDB)에 얻어지며, 이것을 사이클 T2의 슬롯 C1에서 명령 레지스터(IR1)에 래치한다. 이것은, 레지스터 그룹 필드를 가지는 생략 가능한 레지스터 확장용 전치명령코드의 워드이다.
계속해서, 사이클 T2의 슬롯 C2에서 다음 어드레스(+2된 내용)가 어드레스 버스(IAB)에 출력되고, 이 판독 데이터가 사이클 T3의 슬롯 C1에서 명령 레지스터(IR)에 래치된다. 이상의 동작은 이전 명령의 실행제어에 의하여 이루어지며, 상대적인 관계가 서로 다른 경우도 있다.
직전의 명령 실행이 종료되면, 가장 빠르게 명령의 실행이 개시되는 경우에는, 사이클 T2의 슬롯 C1에서 명령코드(레지스터 확장용 전치명령코드)가 제어부(CONT)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라, 제어신호를 출력하여 각 부의 제어를 수행한다. 그룹 필드 래치신호(LGRCL)가 발행되고, 레지스터 그룹 지정 필드(IR1의 비트 7∼0)가 래치회로(LGR1, LGR2)(321, 322)에 래치된다.
사이클 T2의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 신호가 어드레스 버퍼(IAB)에 출력된다.
사이클 T3로부터 다음 다음의 명령이 판독된다. 사이클 T3의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 제 1 워드와 제 2 워드 이후가 분할되지 않기 위한 제어신호 B(controlB)로 연속명령신호(인터럽트 금지신호 : continue = mskint)를 인터럽트 접수회로에 출력한다. 본 신호에 의하여, 인터럽트 요구 등이 발생하여도 명령의 실행을 계속할 수 있다. 또한, 래치회로(LGR1, LGR2)(321, 322)의 내용이 보지된다.
한편, 사이클 T2의 슬롯 C1에서 명령코드(가산명령을 지시)가 명령디코더(DEC)(33)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라 제어신호를 출력하고 각 부의 제어를 수행한다. LGR1 = 1 및 LGR2 = 0이기 때문에, SEL1(및 SEL2)과 명령디코더(DEC)가 출력하는 제어신호 A(Rs=DB, Rd-GB)를 바탕으로 레지스터 선택신호 B(R8-DB, R1-GB)가 생성된다. 이 밖의 제 2 워드에 의한 동작은 제 1 가산명령(ADD. L ER0, ER1)과 동일하게 할 수 있다. 제 1 가산명령과 마찬가지로, 제어신호 B(RSLGR)에 의하여 래치회로(LGR1, LGR2)(321, 322)의 클리어가 지시된다. 래치회로(LGR1)(321)는 사이클 T4의 슬롯 C1에서, 래치회로(LGR2)(322)는 사이클 T4의 슬롯 C2에서 클리어된 결과가 전달된다.
제 1 워드(레지스터 확장용 전치명령코드)에 대응하는 래치회로(LGR1, LGR2)(321, 322)의 래치신호와 연속명령신호를 출력하는 것 이외에는, 명령디코더(DEC)의 내용을 기존의 CPU의 명령디코더와 동등하게 할 수 있다. 명령디코더(DEC)의 레지스터 확장용 전치명령코드에 대응하는 부분이 상대적으로 작은 것은 물론이다. 즉, 논리적인 규모의 추가를 최소한으로 할 수 있다. 또한, 명령디코더(DEC)의 대부분을 기존의 CPU의 명령디코더와 동등하게 할 수 있기 때문에, 종래의 설계자산을 유효하게 이용할 수 있다.
또한, 그 밖의 명령에 대해서도, 동일한 레지스터 확장용 전치명령코드를 부가함으로써, 어떠한 범용 레지스터도 지정할 수 있다. 상기 명령코드는 레지스터 지정 필드를 가지는 명령코드의 명령에 대하여 적용할 수 있다
도 33에는 메모리·레지스터형 가산명령(ADD. W @aa:16, R9)의 실행 타이밍을 나타낸다. 즉, 레지스터 그룹 필드를 가지는 레지스터 확장용 전치명령코드, 메모리·레지스터형 연산의 명령확장용 전치명령코드, MOV. W @aa:16, R0에 상당하는 명령코드, ADD. W R0, R1에 상당하는 명령코드를 조합하여 1명령으로 간주되는 명령을 실행하였을 때의 타이밍이 나타나 있다.
레지스터 그룹 필드를 가지는 레지스터 확장용 전치명령코드는, 그룹 1의 범용 레지스터를 지정하도록, H' 0001로 된다. 즉, gr2 = 1이기 때문에 동일한 r2 = 1에 대하여 레지스터 번호 n = 9로 해석된다.
또한, 메모리·레지스터형 명령확장용 전치명령코드는, 도 15에 따라, H' 0108로 되며, MODS신호에 의하여 소스측이 메모리인 것을 지시한다. 본 명령에서는, 직접 관계는 없지만, EA1 명령코드의 실행시에는, gr1와 r1이 조합되어 범용 레지스터가 선택된다. 또한, 연산명령코드의 실행시에는, gr2 와 r2가 조합되어 범용 레지스터가 선택된다.
전송명령코드는, 기존의 전송명령과 마찬가지로, 메모리의 판독을 수행하는데, 전치명령코드에 의한 소스측을 메모리로 하는 지시를 바탕으로, 판독 데이터를 임시 레지스터(TRD)에 격납한다. 소스측을 메모리로 하는 지시를 계속한다.
연산명령코드는, 소스측을 메모리로 하는 지시에 따라, 소스측 데이터를 범용 레지스터가 아니라, 임시 레지스터(TRD)로부터 판독한다. 그 밖의 동작은 기존의 연산명령과 마찬가지가 된다.
사이클 T0의 슬롯 C2(Φ#동기. #는 반전논리를 나타낸다)에서 CPU(2)의 어드레스 버퍼(AB)로부터 어드레스가 IAB에 출력된다.
사이클 T1의 슬롯 C1(Φ동기)에서, IAB의 내용이 PAB에 출력되고, 판독 사이클이 개시된다. 사이클 T1의 슬롯 C2에서 판독 데이터가 내부 데이터 버스에 얻어지며, 이것을 사이클 T2의 슬롯 C1에서 IR(IR1)에 래치한다. 이것은, 레지스터 그룹 필드를 가지는 생략가능한 명령워드(레지스터 확장용 전치명령코드)이다.
계속해서, 사이클 T2의 슬롯 C2에서 다음 어드레스(+2된 내용)가 IAB에 출력되며, 이 판독 데이터가 사이클 T3의 슬롯 C1에서 IR(IR1)에 래치된다. 이상의 동작은 이전 명령의 실행제어에 의하여 이루어지며, 상대적인 관계가 서로 다른 경우도 있다.
직전의 명령실행이 종료되면, 가장 빠르게 명령의 실행이 개시되는 경우에는, 사이클 T2의 슬롯 C1에서 명령코드(레지스터 확장용 전치명령코드)가 명령디코더(DEC)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라 제어신호를 출력하고 각 부의 제어를 수행한다. 그룹 필드 래치신호(LGRCL)가 발행되고, 레지스터 그룹 지정 필드(IR1의 비트 7∼0)이 래치 LGR1, LGR2에 래치된다.
사이클 T2의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스 정보가 출력된다.
사이클 T1의 슬롯 C2에서, CPU(2)의 어드레스 버퍼(AB)나 어드레스 정보가 어드레스 버스(IAB)에 출력된다.
사이클 T2의 슬롯 C1(Φ동기)에서, 어드레스 버스(IAB)의 내용이 PAB에 출력되고, 판독 사이클이 개시된다. 사이클 T2의 슬롯 C2에서 판독 데이터가 내부 데이터 버스에 얻어지며, 이것을 사이클 T2의 슬롯 C1에서 IR에 래치한다. 이것은, 메모리에 대한 연산을 나타내는 명령확장용 전치명령코드(pf)이다.
사이클 T3의 슬롯 C2에서 다음 어드레스(+2된 내용)가 어드레스 버스(IAB)에 출력되고, 이 판독 데이터가 사이클 T4의 슬롯 C1에서 명령 레지스터 IR(IR1)에 래치된다(MOV명령의 제 1 워드(mov-1)).
사이클 T3의 슬롯 C1에서 명령코드(명령확장용 전치명령코드(pf))가 디코더(DEC)에 입력되어, 명령의 내용이 해독되고, 이와 같은 명령확장용 전치명령코드의 경우에는, 소스측 데이터가 메모리상에 존재할 것을 지시한다. 즉, 제어신호 C로서 MODS신호를 1에 세트하고, 디코더(DEC)에 피이드백한다.
사이클 T3의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 정보가 어드레스 버스(IAB)에 출력된다.
사이클 T4의 슬롯 C1에서 명령코드(MOV명령의 제 1 워드(mov-1))가 명령디코더(DEC)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라 제어신호를 출력하고, 각 부의 제어를 수행한다. 절대 어드레스의 어드레싱 모드이기 때문에, 계속해서 EA확장부인 절대 어드레스를 판독한 후, 이 절대 어드레스를 바탕으로 소스 데이터의 판독을 수행하고, 판독결과를 임시 레지스터(TRD)에 격납한다.
사이클 T4의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가, 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 사이클 T4의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 정보가 어드레스 버스(IAB)에 출력된다.
사이클 T4으로부터 판독 사이클이 개시되고, 이 판독 데이터가 사이클 T5의 슬롯 C1에서 판독 데이터 버퍼(RDB)에 래치된다(MOV명령의 제 2 워드(mov-2), 즉, EA확장부인 절대 어드레스).
사이클 T5의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 사이클 T5의 슬롯 C2에서 판독 데이터 버퍼(RDB)의 내용(절대 어드레스)을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 정보가 어드레스 버스(IAB)에 출력된다.
사이클 T6으로부터 소스 데이터가 판독된다. 또한, 사이클 T5의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 정보가 어드레스 버스(IAB)에 출력된다.
사이클 T7의 슬롯 C1에서 상기 판독 데이터(소스 데이터)가, 판독 데이터 퍼버(RDB)에 격납된다. 또한, 판독 데이터 버퍼(RDB)로부터 내부버스(DB)에 출력되고, 산술논리연산기(ALU)에 입력한다. 산술논리연산기(ALU)의 동작은 무조작으로 한다.
사이클 T7의 슬롯 C2에서, 판독 데이터가 산술논리연산기(ALU)로부터 내부버스(WB)에 출력되고, 신호 MODS가 1에 세트되어 있기 때문에, 범용 레지스터가 아니라 임시 레지스터(TRD)에 격납된다.
사이클 T7의 슬롯 C1에서, 명령코드(ADD명령(add))가 명령디코더(DEC)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라, 제어신호를 출력하여 각 부의 제어를 수행한다. 신호 MODS가 1로 세트되어 있기 때문에, 소스측 데이터를 범용 레지스터가 아니라 임시 레지스터(TRD)로부터 판독한다. 데스티네이션측은, 범용 레지스터로부터 판독하여 연산결과는 범용 레지스터에 격납한다.
사이클 T7의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 정보가 어드레스 버스(IAB)에 출력된다.
사이클 T8의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 또한, 데스티네이션측은 병경되지 않으면서 레지스터 그룹 필드(gr2 = 1)와 레지스터 필드(r2 = 1)에 따라 범용 레지스터(ER9)로부터 데스티네이션 데이터가 내부버스(GB)에 출력되고, 소스측 데이터가 신호 MODS에 따라 임시 레지스터(TRD)로부터 내부버스(DB)에 출력되어, 모두 산술논리연산기(ALU)에 입력된다. 산술논리연산기(ALU)는 가산동작으로 된다.
사이클 T8의 슬롯 C2에서, 연산결과가 산술논리연산기(ALU)로부터 내부버스(WB)에 출력되고, 범용 레지스터(ER9)에 격납된다.
또한, 제 1 워드와 제 2 워드 이후가 분할되지 않기 위한 제어신호 B에서 연속명령신호를 출력한다. 본 신호에 의하여, 인터럽트 요구 등이 발생하여도 명령의 실행을 계속할 수 있다.
즉, 명령확장용 전치명령코드에 대응하는 신호 MODS의 출력과 연속명령신호의 출력, 전송명령코드에 대응하는 신호MODS에 따른 데이터 격납처의 선택과 연속명령신호의 출력, 가산명령코드에 대한 신호 MODS에 따른 데이터 판독원의 선택 이외에는, 명령디코더(DEC)의 논리구성을 하위 CPU의 명령디코더와 동등하게 할 수 있다. 이들에 대응하는 부분이 상대적으로 작은 것은 물론이다. 즉, 논리적인 규모의 추가와 변경을 최소한으로 할 수 있다. 또한, 명령 디코더(DEC)의 대부분을 기존 하위 CPU의 명령 디코더와 동등하게 할 수 있기 때문에, 종래의 설계자산을 유효하게 이용할 수 있다.
또한, 그 밖의 연산명령(가산, 감산, 승산, 제산(除算), 비교, 논리곱, 논리합, 배타적 논리합 등)에 대해서도, 동일한 명령확장용 전치명령코드와 전송명령코드를 부가함으로써, 메모리와 범용 레지스터의 연산을 실현할 수 있다.
또한, 소스측 어드레싱 모드를 레지스터 간접 등으로 하는 경우, 레지스터 그룹 필드를 가지는 레지스터 확장용 전치명령코드를 상기 명령의 선두에 부가하고, gr1 = 1∼3의 어느 하나로 함으로써, 소스측 범용 레지스터를 그룹 1∼3으로 할 수 있다. 즉, 레지스터 그룹 필드를 가지는 레지스터 확장용 전치명령코드의 gr1이 소스측, gr2가 데스티네이션측에 대응한다.
도 34에는 레지스터·메모리형 가산명령(ADD. W R1, @aa:16)의 실행 타이밍을 나타낸다. 즉, 명령확장용 전치명령코드, MOV. W @aa:16, R0에 상당하는 명령코드 및 ADD. W R1, R0에 상당하는 명령코드를 조합하여, 1명령으로 간주되는 명령을 실행하였을 때의 타이밍이 나타나 있다. 이 때의 명령확장용 전치명령코드는, 도 15에 따라 H' 0104로 되고, 신호 MODD에 의하여 소스측은 범용 레지스터, 데스티네이션측이 메모리인 것을 지시한다.
전송명령코드는, 기존의 전송명령과 마찬가지로, 사이클 T4의 슬롯 C2로부터 메모리의 판독을 수행하고, 명령확장용 전치명령코드에 의한 데스티네이션측을 메모리로 하는 지시(MODD)를 바탕으로, 생성한 실효 어드레스(메모리 어드레스)를 임시 레지스터(TRA)에 격납한다. 또한, 사이클 T6의 슬롯 C1에서, 판독 데이터를 판독 데이터 버퍼(DBR)에 격납한 시점에서, 기존의 전송명령 또는 소스측 데이터의 판독 경우보다 1스테이트 빠르게 실행을 종료한다. 따라서, 명령페치와 PC의 인크리먼트는 수행하지 않는다. 데스티네이션측을 메모리로 하는 지시를 계속한다. 연산명령코드(add)를 사이클 T5의 슬롯 C1으로부터 명령 디코더(DEC)에 입력한다.
연산명령코드는, 데스티네이션측을 메모리로 하는 지시(MODD)를 따라, 사이클 T6의 슬롯 C1에서 데스티네이션측 데이터를 범용 레지스터가 아니라 판독 데이터 버퍼(RDB)로부터 버스 GB에 판독하고, 산술논리연산기(ALU)에 입력한다. 소스측은 범용 레지스터가 암묵적으로 지시되어 있기 때문에, 범용 레지스터(R1)의 내용을 버스 DB에 판독하고, 산술논리연산기(ALU)에 입력한다. 사이클 T6의 슬롯 C2에서, 연산결과를 임시 레지스터(TRD)에 격납한다. 또한, 제어신호 mkmov에 의하여 MOV. WR0, @ER0과 유사한 명령코드(mov-st : 16' b0111_1000_1???_????, ?의 비트는 임의로 할 수 있다)를 CHG로 발생시키고, 사이클 T6의 슬롯 C1으로부터 명령 디코더(DEC)에 입력한다.
발생된 명령코드(mov-st)는, 임시 레지스터(TRA)를 어드레스 레지스터로 하고, 임시 레지스터(TRD)를 데이터 레지스터로 하는 전송명령과 동일한 동작을 수행한다. 즉, 사이클 T6의 슬롯 C2에서, 임시 레지스터(TRA)에 격납되어 있는 실효 어드레스를 버스 GB에 판독하고, 어드레스 버퍼(AB)를 경유하여 내부 어드레스 버스(IAB)에 출력함과 동시에, 워드 데이터 기록의 버스 명령어를 발행한다. 사이클 T7의 슬롯 C2에서, 임시 레지스터(TRD)에 격납되어 있는 연산결과를 버스 DB에 판독하고, 기록 데이터 버퍼(WDB)를 경유하여 내부 데이터 버스(IDB)에 출력하고, 데스티네이션의 메모리 어드레스에 연산결과를 기록한다. 사이클 T7의 슬롯 C2로부터 명령 페치를 수행함과 동시에, 프로그램 카운터(PC)의 인크리먼트를 수행한다. 이로써, 전송명령코드(mov-1)의 실행을 단축시키고, 명령 페치와 프로그램 카운터(PC)의 인크리먼트를 수행하지 않았던 분을 회복한다.
데스티네이션측 메모리에 기록하는 경우, 명령코드(mov-st)를 CPU(2) 내부에서 발생시킴으로써, 명령코드를 단축하고 처리시간을 단축할 수 있다. 임시 레지스터(TRA)의 내용을 참조함으로써, 다시 실효 어드레스의 계산을 수행할 필요가 없으며, 또한, 처리시간을 단축할 수 있다. MOV. W R0, @ER0과 유사한 명령코드를 사용함으로써 설계를 용이하게 하고, 논리적인 규모의 증가를 억지할 수 있다.
비교명령의 경우에는, 데스티네이션측 메모리에 기록할 필요가 없다. 이 경우에도, 상기 마찬가지로 동작시켜 사이클 T6의 슬롯 C2의 버스 명령어를 무조작으로 변경하기만 하는 것으로 끝내면 된다. 즉, 비교명령의 명령코드를 실행한 경우에, 제어신호를 발행하고, 데스티네이션측 메모리에 기록하는 명령코드에 기록동작을 금지시키도록 하는 것이다. 제어방식을 공통화하고, 논리적인 규모의 증가를 억지할 수 있다. 혹은, 내부에서 발생하는 명령코드를 무조작(NOP) 명령의 명령코드에 상당하는 것으로 하여도 좋다. 이 경우에는, 처리시간을 더욱 단축할 수 있다.
또한, 그 밖의 2개의 데이터에 대한 연산명령(가산, 감산, 승산, 제산, 비교, 논리곱, 논리합, 배타적 논리합 등)에 대해서도, 동일한 명령확장용 전치명령코드와 전송명령코드를 부가함으로써, 메모리와 범용 레지스터의 연산을 실현할 수 있다. 또한, 하나의 데이터에 대한 연산명령(부호반전, 논리반전, 시프트, 로테이트 등)에 대해서도, 동일한 명령확장용 전치명령코드와 전송명령코드를 부가함으로써, 메모리상의 데이터의 연산을 실현할 수 있다.
또한, 도 34에서 설명한 명령의 실행에 있어서도, 연산명령의 실행에 이를 때 까지의 도중 연산결과에 의한 콘디션 코드 레지스터(CCR)의 변경억지와, 제어신호 mskint에 의한 인터럽트 억지의 제어는 상기와 마찬가지로 이루어진다.
도 35에는 메모리·메모리형 가산명령(ADD. W @ER1, @aa:16)의 실행 타이밍을 나타낸다. 즉, 명령확장용 전치명령코드(pf), MOV. W @ER1, R0에 상당하는 명령코드(mov-1), MOV. W @aa:16, R0에 상당하는 명령코드(mov2), 및 ADD. W R0, R1에 상당하는 명령코드(add)를 조합하여 1명령으로 간주되는 명령을 실행하였을 때의 타이밍이 나타나 있다.
도 35의 경우, 명령확장용 전치명령코드는, 도 15에 따라 H' 010C로 되며, MODS, MODD신호에 의하여 소스측, 데스티네이션측이 모두 메모리인 것을 지시한다.
전송명령코드(mov-1)는, 사이클 T3의 슬롯 C2로부터 메모리의 판독을 수행하고, 명령확장용 전치명령코드에 의한 소스측을 메모리로 하는 지시(MODS)를 바탕으로, 생성한 실효 어드레스(메모리 어드레스)를 임시 레지스터(TRA)에 격납한다. 또한, 사이클 T5의 슬롯 C1에서, 판독 데이터(data1)를 판독 데이터 버퍼(RDB)를 경유하여 버스 GB에 출력한다. 산술논리연산기(ALU)를 경유하여 버스 WB에 출력되고, 사이클 T5의 슬롯 C2에서 임시 레지스터(TRD)에 격납된다. 소스측 및 데스티네이션측을 메모리로 하는 지시를 계속함과 동시에, 소스측 데이터의 종료를 지시한다(MODSE).
전송명령코드(mov-2)는, 도 34의 전송명령코드와 마찬가지로, 사이클 T6의 슬롯 C2로부터 메모리의 판독을 수행하고, 명령확장용 전치명령코드에 의한 데스티네이션측을 메모리로 하는 지시(MODD)와 소스측 데이터의 종료지시(MODSE)를 바탕으로, 생성한 실효 어드레스(메모리 어드레스)를 임시 레지스터(TRA)에 격납한다. 또한, 사이클 T8의 슬롯 C1에서, 판독 데이터를 판독 데이터 버퍼(RDB)에 격납한 시점에서, 기존의 전송명령 또는 소스측 데이터의 판독의 경우보다 1스테이트 빠르게 실행을 종료한다. 소스측 및 데스티네이션측을 메모리로 하는 지시를 계속한다.
연산명령코드는, 소스측 및 데스티네이션측을 메모리로 하는 지시(MODS, MODD)에 따라 사이클 T8의 슬롯 C1에서, 데스티네이션측 데이터를 판독 데이터 버퍼(RDB)로부터 버스 GB에 판독하고, 산술논리연산기(ALU)에 입력한다. 소스측 데이터를 임시 레지스터(TRD)로부터 버스 DB에 판독하고, 산술논리연산기(ALU)에 입력한다. 사이클 T8의 슬롯 C2에서, 연산결과를 임시 레지스터(TRD)에 격납한다. 또한, MOV. W R0, @ER0과 유사한 명령코드(mov-st)를 발생시키고, 사이클 T6의 슬롯 C1으로부터 명령 디코더(DEC)에 입력한다.
발생된 명령코드(mov-st)는 임시 레지스터(TRA)를 어드레스 레지스터로 하고, 임시 레지스터(TRD)를 데이터 레지스터로 하는 전송명령과 동일한 동작을 수행한다.
여기서, 소스측 및 데스티네이션측을 메모리로 하는 지시(MODS, MODD)가 이루어지고 있는 경우, 전송명령코드는, 1회째는 MODSE신호가 0으로 클리어되어 있어 소스측 데이터의 판독을 수행하고, 2회째는 MODSE신호가 1로 세트되어 있어 데스티네이션측 판독을 수행하는 것으로 한다.
또한, 도 35에서 설명한 명령의 실행에 있어서도, 연산명령의 실행에 이르기 까지의 도중 연산결과에 의한 콘디션 코드 레지스터(CCR)의 변경억지와, 제어신호 mskint에 의한 인터럽트 억지의 제어는 상기와 마찬가지로 이루어진다.
도 36에는 메모리·메모리형 전송명령(MOV. W @ER1, @aa:16)의 실행 타이밍을 나타낸다. 즉, 명령확장용 전치명령코드, MOV. W @ER1, R0에 상당하는 명령코드, MOV. W R0, @aa:16에 상당하는 명령코드를 조합시켜 1명령으로 간주되는 명령을 실행하였을 때의 타이밍이 나타나 있다. 이 때의 명령확장용 전치명령코드는 도 15에 따라 H' 0108로 된다.
메모리·메모리간의 전송명령은 상기 가산명령과 마찬가지로 하여, ADD. W R0, R1에 상당하는 명령코드 대신에, MOV. W R0, R1에 상당하는 명령코드를 이용하여 실현할 수도 있다. 이 경우에는, 데스티네이션측 판독을 수행해 버리는데, 전송명령의 성질상 데스티네이션측의 판독은 팔요가 없으며 처리시간이 낭비되어 버린다.
본 예에서는, 명령확장용 전치명령코드와, 판독형 전송명령코드와, 기록형 전송명령코드를 조합하고, 명령확장용 전치명령코드는 소스측이 메모리인 것을 지시한다.
판독형 전송명령코드는, 메모리의 판독을 수행하여 명령확장용 전치명령코드의 지시를 바탕으로 판독 데이터를 임시 레지스터(TRD)에 격납한다. 소스측을 메모리로 하는 지시를 계속한다.
기록형 전송명령코드는, 기존의 전송명령과 마찬가지로, 메모리의 기록을 수행하는데, 소스측을 메모리로 하는 지시(MODS)에 따라 기록 데이터를 범용 레지스터가 아니라 임시 레지스터(TRD)로부터 꺼낸다.
상기 가산명령과 동일한 실현방법을 도입한 경우에 비해, 연산명령코드를 생략할 수 있다. 결과적으로, 명려코드길이를 1워드 단축하고 실행 스테이트수를 3스테이트 단축할 수 있다.
도 37에는 이미디에이트 메모리형 가산명령(ADD. W #xx, @aa:16)의 실행 타이밍을 나타낸다. 도 37의 내용은, 도 34와 마찬가지로 명령확장용 전치명령코드, MOV. W @aa:16, R0에 상당하는 명령코드, 및 ADD. W #xx, R0에 상당하는 명령코드를 조합하여 정의되며, 1명령으로 간주되는 명령을 실행하였을 때의 타이밍이 나타나 있다. 데스티네이션측이 메모리이지만, 이미디에이트 데이터의 경우에는, 판독 데이터를 일단 임시 레지스터(TRD)에 격납한다. 따라서, 명령확장용 전치명령코드는 도 15에 따라 H' 0108로 되고, 소스측을 메모리로 하는 제어신호(MODS)를 발행한다.
명령확장용 전치명령코드, 전송명령코드의 동작은, 사이클 T6의 슬롯 C1에서, 판독 데이터가 판독 데이터 버퍼(RDB)로부터 버스 GB에 판독된다. 산술논리연산기(ALU)를 경유하여 버스 WB에 출력되고, 사이클 T6의 슬롯 C2에서 임시 레지스터(TRD)에 격납된다.
명령확장용 전치명령코드의 지시(MODS)에 대하여, 이미디에이트 데이터의 연산명령코드는, 사이클 T8의 슬롯 C1에서, 데스티네이션측 데이터를 범용 레지스터가 아니라 임시 레지스터(TRD)로부터 버스 GB에 판독하고, 산술논리연산기(ALU)에 입력한다. 소스측은 이미디에이트 데이터가 판독 데이터 버퍼(RDB)로부터 내부버스(DB)에 판독하고, 산술논리연산기(ALU)에 입력한다. 사이클 T8의 슬롯 C2에서, 연산결과를 임시 레지스터(TRD)에 격납한다. 또한, 명령확장용 전치명령코드의 지시(MODS)를 바탕으로, 사이클 T6의 슬롯 C2로부터 워드 크기 기록을 개시한다. 어드레스는 임시 레지스터(TRA)로부터 사이클 T6의 슬롯 C2에서 판독하고, 버스 GB 및 어드레스 버퍼(AB)를 경유하여 내부 어드레스 버스(IAB)에 출력한다. 데이터는, 사이클 T8의 슬롯 C1에서 연산결과를 임시 레지스터(TRD)로부터 판독하여 버스 DB 및 기록 데이터 버퍼(WDB)를 경유하여 내부 데이터 버스(IDB)에 출력한다. 명령확장용 전치명령코드의 지시(MODS)에 따라 이미디에이트 데이터의 연산명령에 기록동작이 더해지게 된다.
ADD. W #xx, @aa:16의 경우에는, 연산명령코드가 2워드이기 때문에 도 34와 상이하지만, 바이트 크기의 이미디에이트의 경우에는 연산명령코드가 1워드이면 도 34와 동일한 동작 타이밍으로 하면 된다.
또한, 도 37에서 설명한 명령의 실행에 있어서도, 연산명령의 실행에 이르기 까지의 도중 연산결과에 의한 콘디션 코드 레지스터(CCR)의 변경억지와, 제어신호 mskint에 의한 인터럽트 억지의 제어는 상기와 마찬가지로 이루어진다.
도 38에는 이미디에이트·메모리형 전송명령(MOV. W #xx, @aa:16)의 실행 타이밍을 나타낸다. 즉, 명령확장용 전치명령코드, MOV. W #xx, R0에 상당하는 명령코드 및 MOV. W RO, @aa:16에 상당하는 명령코드(기록형 전송명령코드)를 조합하여 1명령으로 간주되는 명령을 실행하였을 때 타이밍이 나타나 있다. 이 때, 명령확장용 전치명령코드는 도 15에 따라 H' 0104로 된다.
도 38에 있어서의 사이클 T4의 슬롯 C1에서, 이미디에이트 데이터를 판독 데이터 버퍼(RDB)로부터 버스 DB에 판독하고, 산술논리연산기(ALU)를 경유하여 사이클 T4의 슬롯 C2에서, 버스 WB에 출력한다. 이 이미디에이트 데이터를 명령확장용 전치명령코드의 지시(MODD)를 바탕으로, 임시 레지스터(TRD)에 격납한다.
기록형 전송명령코드는, 기존의 전송명령과 마찬가지로 메모리의 기록을 수행하는데, 사이클 T7의 슬롯 C2에서, 명령확장용 전치명령코드의 지시(MODD)에 따라 기록 데이터를 범용 레지스터가 아니라 임시 레지스터(TRD)로부터 꺼집어 낸다.
이미디에이트 데이터를 내부 I/O레지스터를 포함하는 메모리에 설정하는 것은 비교적 출현빈도가 높다고 생각되어지기 때문에, 명령코드길이의 단축 및 처리시간의 단축은 바람직하다.
도 39 내지 도 41에는 명령디코더(DEC)에 포함되는 연산명령코드(exe)의 해독논리 201의 일부에 관한 논리기술의 다른 예가 나타나 있다. 도 39에 나타난 논리기술은 16비트 이미디에이트 데이터의 워드 크기의 가산명령(ADD. W #xx:16, Rn)에 상당한다.
MODS신호에 대응하여, 실행 스테이트가 연장되고 기록동작이 삽입된다. 도 39에 나타낸 논리기술의 제 1 부분(4-1)에서 스테이트 코드(TMG)가 생성된다. 단독명령으로는, 스테이트 코드(TMG)는 1→3으로 진행한다. 이미디에이트 데이터와 메모리상의 데이터를 연산하는 경우에는, MODS = 1로 되고, 스테이트 코드(TMG)는 1→17→3으로 진행한다.
도 39에 나타낸 논리기술의 제 2 부분(4-2)에서 버스제어를 수행한다. MODS = 0인 경우에는 2회의 명령판독을 수행한다. MODS = 1의 경우에는, 스테이트 코드 1에서 데이터 기록을 수행하고, 스테이트 코드 17, 3에서 명령판독을 수행한다. 데이터 크기는 연산명령코드가 발생한 당해 명령(ADD. W #xx:16, Rn)의 데이터 크기인 워드크기로 된다.
도 40에 나타낸 논리기술의 제 3 부분(4-3)에서 실효 어드레스를 계산한다. MODS = 1인 경우에는 스테이트 코드 1에서 임시 레지스터(TRA)에 보지하고 있는 실효 어드레스를 내부버스(GB)에 출력한다.
도 40에 나타낸 논리기술의 제 4 부분(4-4)에서 전송데이터를 제어한다. 스테이트 코드 1에서 연산을 수행한다. MODS = 0인 경우에는 범용 레지스터와 판독 데이터 버퍼(RDB)로부터 데이터를 판독하고, 연산결과를 범용 레지스터에 격납한다. MODS = 1인 경우에는 임시 레지스터(TRD)와 판독 데이터 버퍼(RDB)로부터 데이터를 판독하고, 연산결과를 임시 레지스터(TRD)에 격납한다.
도 41에 나타낸 논리기술의 제 5 부분(5)에서, 제어신호는 모두 초기화한다. 인터럽트도 허가하고, 인터럽트가 요구한다면 계속해서 인터럽트 예외처리를 수행할 수 있다.
여기서, 상기 명령확장용 전치명령코드를 생략하여도 그와 마찬가지로 명령의 확장을 수행할 수 있는 복합명령에 대하여 설명한다. 예를들어, 도 38을 바탕으로 설명한 MOV. W #xx, R0의 명령코드에 여유가 있어, 메모리에 대한 전송인지 범용 레지스터에 대한 전송인지에 대한 데스티네이션 정보를 가질 수 있다면, 명령확장용 전치명령코드를 설치하지 않아도 된다. 즉, 명령코드에 실질적인 빈 영역이 있어, 그 빈 영역에 메모리에 대한 전송인지 범용 레지스터에 대한 전송인지의 정보를 집어넣어도 그 밖의 명령코드와 구별할 수 있으면 된다. 그와 같은 상기 데스티네이션 정보를 바탕으로, 이미디에이트 데이터를 임시 레지스터(TRD)에 격납함과 동시에, 데스티네이션측을 메모리로 하는 제어신호를 발생하면 된다. 그와 같은 상기 데스티네이션 정보를 부가한 전송명령코드와 연산명령코드를 결합하여 1명령으로서 실행가능한 복합 명령을 도입하면, 명령확장용 전치명령코드를 설치한 경우와 동일한 기능을 실현할 수 있으며, 또한 당해 명령확장용 전치명령코드를 설치하지 않은 분 만큼 명령코드길이를 단축할 수 있고, 명령실행시간을 단축할 수 있다.
도 52에는 명령확장용 전치명령코드, MOV. W #xx, R0에 상당하는 명령코드에 상기 데스티네이션 정보를 부가한 명령코드를 조합하여 1명령으로 간주되는 명령을 실행하였을 때의 타이밍이 나타나 있다. 도 38과 비교하면 명확히 알 수 있듯이, 명령확장용 전치명령코드(pf = H' 0104)에 대한 처리는 없다.
도 42에는 본 발명에 관련된 CPU의 개발환경의 개략이 나타나 있다. 개발환경의 사용자는 각종 에디터 등을 이용하여 C언어 내지 어셈블리언어로 프로그램을 작성한다. 이것은 통상, 복수의 모듈로 분할하여 작성된다.
C컴파일러(400)는, 사용자가 작성한 각각의 C언어 소스 프로그램을 입력하고, 어셈블리언어 소스 프로그램 내지 목적모듈을 출력한다.
어셈블러(401)는 어셈블리언어 소스 프로그램을 입력하고 목적모듈을 출력한다.
링키지 에디터(402)는, 상기 C컴파일러(400)나 어셈블러(401)가 생성한 복수의 목적 모듈을 입력하고, 각 모듈의 외부참조나 상대 어드레스 등의 해결을 수행하여 하나의 프로그램에 결합하고 로드모듈을 출력한다.
로드모듈은, 시뮬레이터 디버거(403)에 입력되어, PC 등의 시스템 개발장치상에서 CPU(2)의 동작을 시뮬레이션하고, 실행결과를 표시하여 프로그램의 해석이나 평가를 수행할 수 있다. 또한, 로드모듈은 에뮬레이터(404)에 입력되어 실제의 응용 시스템상 등에서 동작하는 이른바 인서킷 에뮬레이션을 수행하여, CPU(2)를 가지는 마이크로 컴퓨터 전체로서의 실동작의 해석이나 평가를 수행할 수 있다.
그 밖에, 라이브러리언으로서 범용적인 서브루틴 등을 제공할 수도 있다.
도 43에는 본 발명에 관련된 CPU(2)의 시스템 개발장치에 있어서의 CPU 선택방법을 나타낸다.
여기서는, 상위 CPU(2)의 최대모드를 선택하는 경우를 예시하고 있다. (a)의 경우, PC 등의 시스템 개발장치상의 디스플레이에서 프롬프트가 표시된 상태에서, "SET CPU = CPU - UMAX"로 입력되면 되도록 한다. (b)의 경우에는, 프롬프트가 표시된 상태에서, "SET CPU"와 명령어를 입력하여 이에 대하여 CPU의 종류 및 동작 모드의 메뉴를, 예를들어 "CPU NAME(1. CPU - UMAX, 2. CPU - UMIN, 3. CPU - L1, 4. CPUL2)"로 표시함과 동시에, 메뉴번호의 입력을 요구하고, 사용자가 메뉴번호 1∼4 중 어느 하나를 입력하면 되도록 한다. 여기서, CPU - UMAX는 상기 상위 CPU(2)의 최대모드, CPU - UMIN은 상기 상위 CPU의 최소모드, CPU - L1은 상기 제 1 하위 CPU, CPUL2는 상기 제 2 하위 CPU를 나타내는 것으로 한다.
이 밖에, 윈도우의 드롭 다운 메뉴로 선택할 수 있게 하여도 좋고, 워크 스테이션인 경우에는 C셸 명령어로서 입력할 수도 있다.
또한, 어셈블러(401)나 C컴파일러(400) 등의 소스 프로그램의 제어명령으로서, CPU의 종류 및 동작모드를 입력하도록 할 수도 있다.
어셈블러(401)는, 선택된 CPU의 종류 및 동작모드를 따라 입력된 어셈블리언어 소스 프로그램상의 기술을 해석하고, 목적모듈을 생성하거나 에러가 있으면 그것을 표시한다. 하위 CPU를 선택하고, 상위 CPU에 존재하며 하위 CPU에 존재하지 않는 명령을 기술하면 에러가 된다. 명령코드 자체는 상위 CPU가 포함하고 있기 때문에 이를 위한 어셈블러를 개발하고, 하위 CPU에 대해서는 상위 CPU에 존재하고 하위 CPU에는 존재하지 않는 명령을 검출하는 추가를 수행하여 용이하게 개발할 수 있다.
C컴파일러(400)는, 선택된 CPU의 종류 및 동작모드에 따라서 사용가능한 오퍼레이션, 데이터 크기, 어드레싱 모드의 조합으로 나타낸 명령이나, 범용 레지스터, 어드레스 공간을 판별하여 C언어에 의한 프로그램을, CPU의 명령으로 변환하여 어셈블리언어 프로그램이나 목적 모듈로서 출력한다.
C컴파일러(400) 자체에는, C언어에 의한 프로그램을 CPU의 명령으로 변환하는 경우에, 그 프로그램 자체의 해석을 최적화하는 단계나 그 결과를 당해 CPU의 명령으로 실현하는 단계를 가진다. 또한, C++언어에 의한 프로그램의 컴파일이나, 모듈간 최적화 등과 같은 CPU의 명령세트와는 직접 관계가 없는 기능의 향상이 도모되어 있다. CPU마다의 개별 컴파일러에서는, 이들 CPU에 의존하지 않는 기능향상을 모든 개별 컴파일러에 적용하지 않으면 안된다. 본 발명과 같이, 서로 호환성이 없는 CPU를 포함하고, 공통의 C컴파일러로 해 두면, 상기 CPU의 명령세트와는 직접 관계가 없는 기능향상을 꾀하기 쉬워지며, 또한 개발효율 등을 향상시킬 수 있다.
상기 시뮬레이터 디버거(403)는, 입력된 모드 모듈의 프로그램을 해석하고, CPU의 동작을 시뮬레이션하여, 그 중에서 에러가 있으면 그것을 표시한다. 예를들어 하위 CPU를 선택하고, 상위 CPU에 존재하며 하위 CPU에 존재하지 않는 명령을 기술하면 에러가 된다. 명령코드 및 명령실행기능 자체는 상위 CPU가 포함하고 있기 때문에, 이를 위한 시뮬레이터 디버거를 개발하고, 하위 CPU에 대해서는 상위 CPU에 존재하고 하위 CPU에는 존재하지 않는 명령을 검출하는 추가를 수행하여 용이하게 개발할 수 있다.
도 44에는 본 발명의 CPU(2)의 어셈블러가 출력하는 리스트를 예시한다. 리스트에는, 행번호, 로케이션 카운터, 목적코드, 소스 행번호, 소스 스테이트먼트가 표시된다.
도 44의 (a)에 나타낸 프로그램에서는, 제어명령(.CPU)으로 CPU-UMAX, 즉 상기 상위 CPU의 최대모드를 지정하고 있다. 또한, 소스 프로그램상에서 「.」로 시작되는 명령은 제어명령이며, 마이크로 컴퓨터의 프로그램에는 직접 관계는 없다.
SP는 ER7을 나타낸다. 이는 스택 포인터로서의 기능의 표기이다. 또한, 본 발명에서는 상기 도 5와 같이 R0L을 AL로, ER1을 EBX로 표기하여도 좋다. 어떠한 표기를 이용해도 에러가 되지 않으며, 동일한 목적코드로 변환된다.
또한, STACK 등의 라벨은, 본 프로그램만으로는 해결되지 않기 때문에, 목적코드상의 상당하는 필드는 0으로 되어 있따. 이것은 상기와 같이 링키지 에디터로 해결된다.
도 44의 (b)에 나타낸 프로그램에서는, 동일한 프로그램을 제 1 하위 CPU(CPU-L1)를 지정하여 어셈블한 예를 나타낸다. 제 1 하위 CPU에는 MOV. L명령이 존재하지 않기 때문에, 에러가 표시되어 목적코드는 생성되지 않는다. 도 44의 리스트에 관한 더욱 상세한 내용은 본 발명과 직접 관계가 없기 때문에 설명을 생략하기로 한다.
도 45에는 본 발명에 관련된 CPU(2)를 가지는 마이크로 컴퓨터를 위한 에뮬레이터를 나타낸다.
에뮬레이션용 프로세서(410)는, 마이크로 컴퓨터부분에 에뮬레이션용 인터페이스를 가하여 구성된다. 상기 마이크로 컴퓨터부분은, 예를들어 도 2의 마이크로 컴퓨터(1)의 구성에 상당한다.
커넥터부(411)가 싱글칩 마이크로 컴퓨터 대신에 응용 시스템(타겟 시스템 또는 이용자 시스템이라고도 한다)(412)의 타겟 마이크로 컴퓨터 탑재영역(413)에 장착된다. 에뮬레이션용 프로세서(410)는 상기 커넥터부(411)와 인터페이스 케이블(414)을 매개로 상기 타켓 시스템 인터페이스를 이용하여 상기 응용시스템과 신호의 입출력을 수행한다.
특별히 제한되어 있지는 않지만, 상기 응용시스템(412)에 이용자 버스(415)가 존재하여 이용자 메모리(416)를 접속할 수도 있게 된다. 이 경우, 에뮬레이션용 프로세서(410)가 출력하고, 인터페이스 케이블(414)을 매개로 공급되는 이용자 스트로브신호에 따라 이용자 메모리(416)는 판독/기록된다.
한편, 에뮬레이션용 프로세서(410)는 상기 에뮬레이션 인터페이스를 이용하여 에뮬레이션 버스(420)에 접속된다. 에뮬레이션 버스(420)에는 도시되지 않은 상태신호·제어신호 등을 포함한다. 상기 에뮬레이션 버스(420)를 이용하여 에뮬레이션용 프로세서(410)로부터 응용시스템(412)과 에뮬레이션용 프로세서(410)의 내부상태에 따른 정보 등이 출력되고, 또한 에뮬레이션용 프로세서(410)에 대하여 에뮬레이션을 위한 각종 신호가 입력된다. 에뮬레이션용 프로세서(410)의 도시되지 않은 에뮬레이터 모드단자가 전원레벨로 고정되고, 에뮬레이션용 프로세서(410) 내부에서는 에뮬레이터 모드가 설정된다.
또한, 상기 에뮬레이션 버스(420)에는 에뮬레이션 메모리(421), 브레이크 제어회로(422), 실시간 트래이스회로(423) 등이 접속된다. 상기 에뮬레이션 메모리(421)는, 특별히 제한되어 있지는 않지만, RAM 등에 의하여 구성되며, 상기 이용자 프로그램을 격납한 영역과, 에뮬레이션을 위한 프로그램을 격납한 영역을 가진다. 상기 브레이크 제어회로(422)는 에뮬레이션용 프로세서(410)에 의한 제어상태나 에뮬레이션 버스(420)의 상태를 감시하여 그 상태가 미리 설정된 상태에 도달하였을 때, 상기 에뮬레이터 전용 인터럽트를 입력하여 에뮬레이션용 프로세서(410)의 CPU(편의상 CPU(2)라 한다)에 의한 이용자 프로그램의 실행을 정지시키고, 에뮬레이션용 프로그램 실행상태로 천이시킨다(브레이크한다). 상기 실시간 트래이스회로(423)는, 상기 CPU(2)의 판독동작 또는 기록동작을 나타내는 신호, 명령판독동작을 나타내는 신호(CPU 스테이터스 신호), 에뮬레이션 버스에 주어지는 어드레스나 데이터 나아가 제어신호를 순서대로 저장한다.
상기 에뮬레이션 메모리(421), 브레이크 제어회로(422), 실시간 트래이스회로(423)는 콘트롤 버스(424)에도 접속되며, 콘트롤 버스(424)를 매개로 콘트롤 프로세서(425)의 제어를 받도록 되어 있다. 상기 콘트롤 버스(424)는 상기 콘트롤 프로세서(425)에 접속됨과 동시에, 호스트 인터페이스회로(426)를 매개로, 특별히 제한되어 있지는 않지만, 상기 PC 등의 시스템 개발장치(427)에 접속된다.
예를들어, 시스템 개발장치(427)로부터 입력된 프로그램(로드 모듈)을 에뮬레이션 메모리(421)의 이용자 프로그램 격납영역에 전송하고, 내장 ROM상에 배치되어야 할 이와 같은 프로그램을 CPU(2)가 판독하면, 에뮬레이션 메모리(421)상의 프로그램이 판독되어 실행된다. 또한, 브레이크 조건이나 실시간 트래이스 조건 등도 시스템 개밸장치(427)로부터 주어질 수있다.
콘트롤 프로세서(425)는, 응용시스템(412)에서 본래 사용하는 CPU 종류의 선택을 수행하기 위한 프로그램을, 에뮬레이션 메모리(421)의 에뮬레이션 프로그램 격납영역에 격납한다. CPU(2)는 이와 같은 프로그램을 소정의 조건에서 브레이크한 상태에서 실행하고, 에뮬레이션 인터페이스(442) 내의 제어 레지스터(449)의 설정을 수행함으로써, 에뮬레이션상의 필요한 설정을 수행한다. 이 경우, 에뮬레이션용 프로그램의 실행모드, 이른바 브레이크 모드에서만 기록가능하게 하면 유리하다. 개발도상에 있는 이용자의 소프트웨어의 오동작에 의하여 잘못된 설정을 수행해 버리는 것을 억지할 수 있다. 또한, 제어 레지스터를 이용함으로써, 응용시스템(412)에서 본래 사용하는 CPU 종류의 선택 대상이 늘어나거나 하여도 제어 레지스터의 구성만을 변경하면 되며, 에뮬레이션용 인터페이스를 변경할 필요가 없으며, 에뮬레이터의 하드웨어를 변경하지 않아도 된다.
에뮬레이션용 프로세서(410) 및 에뮬레이터를 복수의 CPU를 서포트할 수 있게 함으로써, 실제 마이크로 컴퓨터만을 개발하면 되어, 개발효율을 향상시킬 수 있다.
에뮬레이터에 있어서도, 상기와 마찬가지로 CPU의 종류를 선택할 수 있게 한다. 선택방법은, PC 등의 시스템 개발장치상에서 도 42와 마찬가지로 수행하면 된다. 선택된 내용은, 콘트롤 프로세서(425)를 매개로, 소정의 프로그램으로서 에뮬레이션 메모리(421)의 에뮬레이션 프로그램 격납영역에 격납되고, CPU(2)는 이와 같은 프로그램을 실행하여 에뮬레이션 인터페이스 내의 제어 레지스터의 설정을 수행함으로써 상기 선택이 실행된다.
이 때, 싱글칩 마이크로 컴퓨터의 동작모드 등을 동시에 지정하여도 좋다. 싱글칩 마이크로 컴퓨터의 동작모드는, 예를들어 싱글칩 모드, 내장 ROM 유효확장모드, 내장 ROM 무효확장 모드 등이 있으며, 이것에 CPU(2)의 동작모드를 조합시켜 지정할 수 있다. 또한, 범용 레지스터의 표시방법도 함꼐 선택할 수도 있다. 트래이스 리스트 상 등의 역 어셈블 시에 ER0로 표시할지 EAX로 표시할지를 절환하도록 한다.
응용시스템(412)에서 본래 사용하는 CPU 종류를 지정가능하게 함으로써, 동일한 에뮬레이션용 프로세서 내지 동일한 에뮬레이터로써 내장기능 모듈이나 내장메모리의 용량의 조합 등으로 다수의 종류의 싱글칩 마이크로 컴퓨터를 에뮬레이션할 수 있다. 에뮬레이션용 프로세서 내지 에뮬레이터의 개발 후라도, 내장하고 있는 기능의 조합으로 실현할 수 있다면, 에뮬레이션용 프로세서 내지 에뮬레이터의 개발을 수행하지 않고도 응용분야 등의 동향에 맞춘 싱글칩 마이크로 컴퓨터만을 개발해 나갈 수 있으며, 개발효율을 향상시킬 수 있다.
에뮬레이터가 차지하는 에뮬레이션용 프로세스의 비용은 적기 때문에 에뮬레이션용 프로세스에는 가능한 한 많은 기능모듈 등을 내장시켜 두면 좋다.
도 46에는 본 발명에 관한 CPU를 위한 에뮬레이터에 의한 트래이스 리스트를 예시한다.
트래이스 리스트는, 행번호(BP), 어드레스 버스(AB), 데이터 버스(DB), 어드레스 디코드(MA), 판독/기록(R/W), 스테이터스(ST), 인터럽트 신호(NMI, IRQ)를 표시함과 동시에, 실행한 명령의 어셈블리언어에 의한 리스트를 나타낸다. 이는, 데이터 버스의 상태와, 도시되지 않은 CPU 명령실행 상태신호를 해석하여 역 어셈블러가 표시한다. 또한, 행번호는, 트래이스 리스트의 마지막은 0이 된다. 또한, 어드레스 디코드(MA)의 ROM은 내장 ROM으로의 접속, 판독/기록(R/W)의 R은 판독사이클, 스테이터스(ST)의 PRG는 명령을 나타낸다.
또한, (a)에 나타낸 LIR, LID신호는 에뮬레이션용 인터페이스에 포함되어 있다. 명령해석용 신호의 트래이스 결과이다. 통상, 이와 같은 신호는 트래이스 리스트상에는 표시되어 있지 않지만, 트래이스 메모리에는 격납되며, 역 어셈블러 등의 해석에 이용된다. 또한, 사용자에게는 통상 공개되지 않은 명령어 등에 의하여 표시할 수 있다.
LIR신호는 당해 버스 사이클이 명령판독인 것을 나타낸다. LID신호는 명령실행개시를 나타낸다.
예를들어, 200행째는, 100번지에서부터 명령판독을 수행하고, 명령코드 H' 7A07을 판독한 것을 나타낸다. 199, 198행째와 함께 MOV. L #FFFFFF0E:32, ER7을 실행한 것이 표시되어 있다. 역 어셈블러는, LID신호로 명령의 제 1 워드를 판정하고, H' 7A07FFFFFF0E를, 상기 MOV. L #FFFFFF0E:32, ER7로 해석하여 표시하는 것이다.
하위 CPU의 에뮬레이션 시, 역 어셈블러는 상위 CPU는 가지지만 하위 CPU가 가지지 않는 명령을 실행하면, 미정의된 명령으로서 표시한다. 미정의된 명령으로서 표시하는 경우에는 데이터로서 명령코드를 표시한다.
도 46에서는, 상위 CPU의 "MOV. L ER0, @ER1"에 상당하는 명령코드를, 80, 79행째에서 200번지부터 명령판독을 수행하고, 제 2 하위 CPU에서 미정의된 명령(DATA. L H' 01006990)으로서 표시하는 예가 나타나 있다.
도 47에는 본 발명을 적용시킨 마이크로 컴퓨터의 에뮬레이션용 프로세서의 블럭도를 나타낸다.
에뮬레이션용 프로세서(410)는, 도 2의 싱글칩 마이크로 컴퓨터(1)의 부분(마이크로 컴퓨터 코어(441))과, 에뮬레이션 인터페이스(442)로 구성된다. 또한, 도 2의 타이머나 입출력 포트 등은 I/O로서 대표시키고, 또한 내부버스의 상세한 내용과 버스 콘트롤러를 도시하고 있다. 또한, 도 2의 타이머(6, 7)나 입출력 포트(11∼19) 등은 I/O(443), 이용자 버퍼(이용자 BUF)(444)로서 대표시키고, 또한, 도 2에서는 그 상세한 도시를 생략한 내부버스(IDB, IAB, PDB, PAB)의 상세한 사항과 버스 콘트롤러(BSC)(445)를 도시하고 있다. 이용자 인터페이스(446)는 상기 I/O(443), 이용자 버퍼(444) 및 도시를 생략하는 입출력 버퍼 등을 포함하는 이용자 시스템(에뮬레이션 대상 시스템인 타겟 시스템)에 접속되는 인터페이스 회로를 총칭한다.
마이크로 컴퓨터 코어(441)는, 도 2의 마이크로 컴퓨터(1)에 대하여 미정의 명령검출회로(448)가 추가되어 있다. 에뮬레이션 인터페이스(440)는, 제어 레지스터(449)를 포함한다. 제어 레지스터(449)는 브레이크 모드에서만 기록가능하게 된다. 에뮬레이션 인터페이스(440)로부터 입출력되는 신호는 어드레스 버스, 데이터버스, 판독신호, 기록신호, 데이터 크기신호, 명령페치신호 등 버스의 상태를 표시하는 버스 스테이터스 신호, 명령의 실행개시를 나타내는 신호, 인터럽트 처리의 실행개시를 나타내는 신호 등의 CPU(2)의 실행상태를 나타내는 CPU 스테이터스 신호 등을 포함하며, 에뮬레이터에 의한 마이크로 컴퓨터의 동작해석에 사용된다.
미정의 명령검출회로(448)는, CPU(2)에 입력되는 명령코드를 해석하고, 선택되어 있는 CPU(2)에 존재하지 않는 명령이 실행을 개시한 것을 검출하면, CPU(2)에 브레이크 인터럽트를 요구한다. CPU(2)에 어떠한 기능이 선택될지는 제어 레지스터(449)로부터 지시된다. 예를들어, 제 1 하위 CPU가 선택되어 있는 경우에는, 레지스터 그룹 필드를 가지는 전치명령코드를 실행하면, 미정의 명령으로서 검출된다. 구체적으로는, 명령코드를 상기 LIR 신호로 페치하여 해석하고, 미정의로 해독된 경우에는 상기 LID신호가 발생한 시점에서 브레이크 인터럽트를 요구하도록 하면 되므로 용이하다.
에뮬레이션용 프로세서(410)는, 상기와 같이 상위 CPU(2)(CPU-U)를 내장하고, 이를 이용하여 서브세트의 기능을 가지는 제 1 하위 CPU, 제 2 하위 CPU의 대행을 시킨다. 이로써, 하위 CPU에 에뮬레이션용 기능을 부여할 필요가 없어 개발효율을 향상시키거나, 하위 CPU는 에뮬레이션용 논리회로를 포함할 필요가 없어 논리적 규모를 축소할 수 있다. 상위 CPU(2)에 대해서도 미정의 명령검출회로(448)를 독립된 기능블럭으로 가짐으로써, CPU(2)를 변경할 필요가 없어 개발효율을 손상시키지 않는다.
여하튼, 에뮬레이션용 인터페이스를 공통화시켜 두면, CPU 내지 그 밖의 기능블럭이 변경되는 경우에도 에뮬레이터측 하드웨어의 변경을 할 필요가 없으며, 에뮬레이션용 프로세서(410)만을 변경하여 명령의 동작을 해석하고 표시할 때의 역 어셈블러에 어느 CPU를 대상으로 할지를 지시하면 된다. 역 어셈블러에 대한 지시는, 사용자가 시스템 개발장치로부터 지정할 수도 있으며, 어셈블러로부터의 입력정보에 의하여 자동적으로 선택되어지는 것이라도 좋다. 이로써 에뮬레이터의 개발효율을 향상시켜 신속하게 에뮬레이터의 개발환경을 제공할 수 있다.
도 48에는 제 2 하위 CPU의 다른 프로그래밍 모델이 나타나 있다. 이 프로그래밍 모델에 있어서도, 범용 레지스터의 총 비트수는 동등하게 하고 있지만, 범용 레지스터만 4개로 하고 있다. 범용 레지스터의 기능자체는 상기와 동일하다. 상기 도 5와 마찬가지로, R0, R1, R2, R3를 AX, BX, CX, DX 등으로 표기할 수 있도록 하고 있다. 또한, PC는 24비트로 동등하다. 도시되지는 않았지만, 레지스터 직접이나 이미디에이트도 포함하고, 롱워드 크기의 데이터는 취급하지 않도록 한다. 범용 레지스터를 16비트 구성으로 함으로써, 산술논리연산기(ALU) 등, CPU의 실효부의 구성을 프로그램 카운터(PC)와 인크리멘터를 제외하고 16비트 구성으로 할 수 있으며, 논리적 규모를 더욱 축소할 수 있다.
도 49에는 CPU의 어드레스 맵의 다른 예가 나타나 있다. 제 2 하위 CPU의 어드레스 맵은, 최대모드에 상당하는 16MB의 어드레스 공간을 가진다. 데이터 접속시는 실효 어드레스를 16비트로 생성하고, 0∼H' 7FFF 및 H' FF8000∼H' FFFFFF를 지정한다. 따라서, RAM과 내부 I/O 레지스터를 합쳐 32kB까지, 및 ROM을 32kB까지 지정할 수 있다. 상기와 같이, RAM과 내부 I/O 레지스터를 합쳐 32kB인 용량은, 내장된 기능 모듈만으로 동작하는 싱글칩 마이크로 컴퓨터 내지는 마이크로 컴퓨터 시스템에서는 충분한 용량이라 할 수 있다.
데이터 접속시에서 지정할 수 있는 ROM의 어드레스가 한정되어 버리는데, 상기와 마찬가지로 ROM에 할당하는 정수 등에 대해서는 C컴파일러 등으로 기술한 경우도 모듈간 최적화로 재배치할 수 있다.
프로그램 카운터(PC)는 24비트 구성으로, 명령판독시는 24비트로 어드레스를 생성하여, 16MB의 어드레스 공간을 이용할 수 있다. 분기명령에 대하여, 프로그램 카운터 상대와, 메모리 간접 또는 절대 어드레스 24비트를 실행할 수 있게 하면 된다. 분기명령은, 레지스터 필드를 가지지 않기 때문에, 2워드의 명령길이로 절대 어드레스 24비트를 가지는 것은 가능하다. 16MB의 어드레스 공간을 연속시킨 것으로서 소프트웨어의 부하없이 이용할 수 있다.
또한, 예외처리시의 벡터는 24비트(메모리상은 32비트로 되며, 상위 8비트는 무시된다), 서브루틴분기 등에 있어서 대피/복귀되는 프로그램 카운터(PC)도 24비트로 된다.
한편, 상위 CPU에 대해서도, 준 최대모드를 추가하고, 최대모드에 상당하는 어드레스 맵을 가지는 제 2 하위 CPU와 동등한 동작을 수행할 수 있도록 하고 있다.
도 50 및 도 51에는 도 49에 나타낸 제 2 하위 CPU의 어드레스 맵에 있어서의 실효 어드레스의 계산방법이 예시되어 있다.
실효 어드레스의 계산방법은, 도 7, 도 8과 거의 동일하지만, 데이터 접속시에는 모두 실효 어드레스는 16비트로 계산한 상태에서 상위 8비트를 부호확장하고, 0∼H' 7FFF 및 H' FF8000∼H' FFFFFF를 지정한다.
프로그램 카운터 상대는, 분기명령에 사용하고, 상기와 마찬가지로 24비트로 계산한다. 또한, 도시하지는 않았지만, 분기명령에 메모리 간접 또는 절대 어드레스 24비트가 사용가능한 경우에는, 24비트로 실효 어드레스를 계산한다.
상위 CPU의 상기 준 최대모드에 있어서는, 도 49에 제 2 하위 CPU의 어드레스 맵과 동일하게 한다. 실제로는, 실효 어드레스의 계산자체는 도 7, 도 8과 동일하게 해 두고, 포스트 인크리먼트/프리디크리먼트 레지스터 간접의 범용 레지스터 E로의 기록을 억지함과 동시에, 실효 어드레스를 이용할 때 상위 8비트를 부호확장하면 된다. 개별 어드레싱 모드에 의하지 않고, 통일적인 제어를 가능하게 하여 논리적 규모를 축소할 수 있다. 한편, 실효 어드레스의 계산에는 사양상 범용 레지스터 R만을 사용하게 되기 때문에, 범용 레지스터 E를 데이터용으로 사용할 수 있어, 실질적으로 범용 레지스터를 증가시킨 것으로 된다.
제 2 하위 CPU의 경우에는, 상위 CPU에 비해 범용 레지스터 개수가 한정되어 있기 때문에, 프로그램용 어드레스 공간을 축소하지 않고, 실질적으로 범용 레지스터를 증가시키는 이점이 상대적으로 크다.
이상 설명한 제 1 하위 CPU 및 제 2 하위 CPU와 함께 상위 CPU(2)를 제공함으로써 이하의 작용효과를 얻는다.
[1-1] 서로 다른 명령세트를 가지는 복수의 CPU가, 각각 논리적 규모를 축소하면서 각각 고유의 특징으로써 응용분야 내지 사용자의 다양한 요구에 부응할 수 있게 한다.
[1-2] 하위 CPU의 레지스터 구성, 명령세트 및 하위 CPU의 명령실행기능을 포함함으로써, 하위 CPU를 위하여 개발된 프로그램은, 적어도 소스 프로그램의 레벨에서 상위 CPU에 이용할 수 있게 되며, 적어도 소스 프로그램 레벨에서의 상위 호환을 실현할 수 있다.
[1-3] 유효한 어드레스의 비트수와, 벡터 및 스택의 단위크기를 절환하는 동작모드를 미리 준비해 둠으로써, 목적 프로그램 레벨에서의 상위 호환도 간단하게 실현할 수 있게 된다.
[1-4] 제 1, 제 2의 하위 CPU의 쌍방에 대하여, 소스 프로그램 레벨 또는 목적 프로그램 레벨에서의 상위 호환을 실현한 상위 CPU를 제공함으로써, 제 1, 제 2 하위 CPU의 각각의 상위 호환의 CPU를 개발하는 것에 비해 개발효율을 향상시킬 수 있다. 또한, 기능 내지 성능을 향상시키는 경우에도, 상위 CPU에 대한 호환성을 유지하면 스스로가 제 1, 제 2 하위 CPU에 대해서도 상위 호환을 유지할 수 있기 때문에, 장래확장성을 유지할 수 있으며, 또한 개발효율도 향상시킬 수 있다. 예를들어, 상위 CPU에 대하여 내부 데이터 버스를 32비트화하여 고속화할 수 있다면 제 1, 제 2 하위 CPU의 소프트웨어 자산을 유효하게 이용하면서 고속화를 누릴 수 있게 된다.
[1-5] 내부구성을 공통화함으로써, 제 1 하위 CPU의 상위 호환이며 상위 CPU의 하위호환이 되는 CPU, 혹은 제 2 하위 CPU에 더욱 하위 호환인 CPU 등, 다양한 호환성이 있는 CPU를 용이하게 제공할 수 있다.
[1-6] 제 2 하위 CPU의 명령세트를 상위 CPU의 서브세트로 하고, 삭제한 명령세트에 대응하는 논리회로 등을 상위 CPU로부터 삭제하여, 제 2 하위 CPU를 개발함으로써 개발효율을 향상시킬 수 있다.
[1-7] 제 1 하위 CPU에 대하여 상위 CPU에서 추가된 명령세트 부분의 일부를 제 2 하위 CPU에서 계승함으로써, 제 1, 제 2 하위 CPU를 서로 포함하지 않는 명령세트로 하여 총체적으로 다양한 요구에 부응할 수 있다.
[1-8] 소스 프로그램 레벨 또는 목적 프로그램 레벨에서의 상위 호환을 실현함으로써, 소프트웨어 자산을 유효하게 이용할 수 있으며, 사용자의 소프트웨어 개발효율을 향상시킬 수 있다.
[1-9] 서로 다른 명령세트를 가지는 복수의 CPU를 포함하고, 소프트웨어 개발장치를 공통으로 이용가능하게 하여, CPU를 선택하는 수단을 설치함으로써, 소프트웨어 개발비용을 감소시킬 수 있다. 또한, 어셈블러 등은 상위 CPU에 대하여 개발하고, 그 밖의 CPU에 대해서는 미정의된 명령을 검출하면 되기 때문에, 소프트웨어 개발장치의 개발효율을 향상시킬 수 있다. 개발효율을 향상시킴으로써, 개발에 필요한 자원을 삭감하고, 삭감한 자원으로써 기능향상의 빈도를 높일 수도 있게 된다.
[1-10] 소프트웨어 개발장치 및 어셈블리언어에서의 기술포맷을 제 1, 제 2 하위 CPU에서 공통으로 이용할 수 있게 하여, 제 1, 제 2 하위 CPU간에서의 소프트웨어 자산의 이식을 비교적 용이하게 할 수 있다. 어느 한 하위 CPU를 사용함으로써, 하위 CPU로 이행할수록 비용을 증가시키지 않는다.
[1-11] 소프트웨어 개발장치상의 범용적인 기능만을 가지는 범용 레지스터의 기술을 복수 사용가능하게 함으로써, 다른 CPU로부터의 프로그램의 이식을 비교적 용이하게 수행할 수 있다.
[1-12] 복수의 CPU에 대응시켜 에뮬레이션용 프로세서의 에뮬레이션용 인터페이스를 공통화함으로써, 동일한 에뮬레이터의 하드웨어를 공유할 수 있다. 에뮬레이션용 인터페이스를 공통화하거나, 에뮬레이터의 하드웨어를 공통화함으로써, 신속하게 개발환경을 조절할 수 있으며, 또한, 에뮬레이터의 개발에 필요한 자원을 최소한으로 할 수 있다.
[1-13] 상위 CPU에 대한 에뮬레이션용 논리를 가지며, 이와 같은 상위 CPU에 대한 에뮬레이션용 논리로써 제 1, 제 2 하위 CPU의 에뮬레이션용 프로세서를 구성할 수 있어, 에뮬레이션용 프로세서의 개발효율을 향상시킬 수 있다.
이상 설명한 상위 CPU(2)에 의하면 다음과 같은 작용효과를 얻을 수 있다.
[2-1] 레지스터 확장용 전치명령코드로 레지스터 그룹을 지정하고, 이 레지스터 확장용 전치명령코드를 생략가능하게 하며, 나아가 레지스터 확장용 전치명령코드를 부가하지 않는 경우의 명령코드를 기존의 CPU의 명령코드와 동일하게 함으로써, 호환성을 해치지 않으면서 범용 레지스터를 증가시킬 수 있다. 소프트웨어 자산을 유효하게 이용할 수 있게 함과 동시에, 이용상 편의성을 향상시키고, 처리속도를 향상시킬 수 있다. 레지스터 확장용 전치명령코드를 이용함으로써, 모든 범용 레지스터는 동시에 지정가능하게 때문에, 범용 레지스터상의 데이터의 배치 등을 고려할 필요가 없이 프로그램의 작성을 용이하게 할 수 있다.
[2-2] 그룹 지정 필드를 기존의 명령코드 앞에 배치함으로써, 범용 레지스터를 사용하는 모든 명령에 대하여 범용 레지스터를 증가시킬 수 있다. 이 지정방법을 공통화함으로써, 필요한 논리적 물리적 규모의 증가를 억지하고, 나아가 제조비용의 증가도 억지할 수 있다. 기존의 논리와 대부분을 공통으로 할 수 있기 때문에, 설계자산을 유효하게 이용하여 설계품질을 향상시키거나 개발기간을 단축할 수 있다. 또한, 호환성을 유지한 어드레스 공간이 넓은 CPU와 좁은 CPU가 있는 경우에 서로 호환성을 유지하면서 범용 레지스터를 추가할 수도 있다.
[2-3] 하위 CPU에 있어서의 기존의 레지스터 그룹을 지정하는 것에 상당하는 오퍼레이션 코드(레지스터 확장용 전치명령코드)를 NOP(no operation)명령과 동일하게 함으로써, 오퍼레이션 코드맵을 유효하게 이용함과 동시에, 논리구성을 공통화하여 논리적 규모의 증가를 억지할 수 있다.
[2-4] 그룹 지정 필드에 여유를 부여함으로써, 반도체 제조프로세스의 진전 등에 대응하여 호환성을 유지하면서, 범용 레지스터를 증가시킬 수 있다. 이용상 편의성을 더욱 향상시켜 처리속도를 향상시킬 수 있다. 방식적으로는 동일하게 할 수 있기 때문에 개발효율을 향상할 수 있다. 또한, 어셈블러나 C컴파일러, 시뮬레이터, 역 어셈블러 등의 소프트웨어 수단 등을 상기 확장을 고려하여 설계해 두거나, 또는 미리 상기 확장에 대응시켜 둠으로써, 개발효율을 향상시킬 수 있다.
[2-5] CPUCR과 같은 제어 레지스터를 설치하고, 이로써 암묵적으로 사용되는 스택 포인터 등의 그룹을 지정함으로써, 스택 포인터를 변경할 수 있게 되며, 스택의 재배치 등을 용이하게 수행할 수 있다. 레지스터 확장용 전치명령코드를 부가할 수 없는 인터럽트 예외처리에 대해서도 스택 포인터를 변경할 수 있다. 서브루틴분기와 인터럽트 등의 예외처리의 스택 포인터를 분리할 수 있다. 서브루틴용 스택 영역과 인터럽트용 스택 영역을 따로 가질 수 있다. 이로써, 서브루틴분기 등으로 실현되는 각 태스크가 예기할 수 없는 인터럽트 예외처리에 대응하기 위하여 스택을 확보할 필요가 없어져, 스택의 사용량을 억지할 수 있다.
[2-6] 상위 CPU는, 제 1 하위 CPU에 기존의 전송명령코드, 연산명령코드를 명령확장용 전치명령코드와 함께 조합시켜 1명령으로서 실행하고, 상기 각 명령코드 단독으로 기존의 동작을 수행하기 때문에 기존의 명령실행을 저해하지 않는다. 또한, 제 1 하위 CPU에서 작성한 기존의 명령만을 사용한 기존의 소프트웨어 자산을 그대로 이용할 수 있다. 다시말해, 제 1 하위 CPU와의 호환성을 해치지 않으면서 메모리상의 데이터에 대한 직접적인 연산을 가능하게 할 수 있다. 메모리와 레지스터간의 연산 뿐만 아니라, 메모리간의 직접적인 데이터전송을 가능하게 할 수 있다. 소프트웨어 자산을 유효하게 이용할 수 있게 함과 동시에, 원하지 않는 범용 레지스터의 대피/복귀 동작 등을 억지하여, 이용상 편의성을 향상시킴과 동시에, 프로그램 용량을 축소하여 처리속도를 향상시킬 수 있다. 프로그램 용량을 축소함으로써, 나아가 프로그램 격납용 ROM 등의 메모리 용량을 축소하여 비용을 절약할 수 있다.
[2-7] 제 1 하위 CPU에 기존의 전송명령의 명령코드, 연산명령의 명령코드를 명령확장용 전치명령코드와 함께 조합시켜 동작하기 때문에, 명령디코더의 종래의 설계자산을 유효하게 이용할 수 있으며, 논리적인 규모의 추가와 변경을 최소한으로 하여 논리적·물리적 규모의 증대를 최소한으로 할 수 있다. 또한, 개발에 필요한 기간을 단축하여 자원을 절약할 수 있다. 기존의 데이터 접속을 위한 어드레싱 모드를 모두 서포트할 수 있기 때문에, 임의의 어드레싱 모드의 조합을 가능하게 하고 프로그램의 작성을 용이하게 할 수 있다.
[2-8] 제 1 하위 CPU의 명령세트에 추가하는 명령코드를 레지스터 확장용 및 명령확장용 전치명령코드에 한정시킬 수 있기 때문에, 명령세트의 변경을 최소한으로 하여 상위 CPU(2)의 명령세트를 구성할 수 있다.
[2-9] 데스티네이션이 메모리인 경우, 데스티네이션 데이터의 판독시의 실효 어드레스를 임시 레지스터에 확보하고, 연산결과의 데스티네이션 데이터의 기록시의 실효 어드레스의 계산을 필요 없게 하여 바로 기록동작을 실행할 수 있게 함으로써 실행시간을 단축할 수 있다. 또한, 데스티네이션 데이터의 기록을 수행하는 명령코드를, CPU 내부에서 자동적으로 생성하여 명령길이를 단축함과 동시에, 이와 같은 명령코드에 데이터 크기를 지시함으로써 필요한 명령코드를 절약하고, 이와 같은 명령코드를 전송명령의 동작과 유사하게 함으로써, 설계를 용이하게 하고, 제어회로의 논리규모를 축소할 수 있다. 비교명령과 같이, 데스티네이션 데이터의 기록동작을 필요로 하지 않는 명령에 있어서는, 기록사이클을 빈 사이클로 함으로써, 다른 명령과의 동작을 공통화하고, 설계를 용이하게 하여 제어회로의 논리규모를 축소할 수 있다. 설계를 용이하게 함으로써 나아가 개발기간을 단축할 수 있다.
[2-10] 명령확장용 전치명령코드와, 메모리를 판독하는 전송명령의 명령코드와, 메모리에 대한 전송명령의 명령코드를 조합함으로써 메모리·메모리간의 전송을 실현할 수 있다.
[2-11] 이미디에이트 데이터의 전송명령의 명령코드와 메모리에 대한 전송명령의 명령코드를 조합함으로써, 이미디에이트·메모리간의 전송을 실현할 수 있다.
[2-12] 명령확장용 전치명령코드에 다른 정보를 포함함으로써, 명령코드길이를 단축하고 실행시간을 단축할 수 있다. 예를들어, 기존의 CPU에 있어서, 메모리에 대한 연산 이외의 지시를 수행하는 전치명령코드와 연산코드를 조합하여 실현되어 있는 명령이 존재하는 경우, 상기 메모리에 대한 연산 이외의 지시를 상기 메모리에 대한 연산을 지시하는 명령확장용 전치명령코드에 포함함으로써, 명령코드길이를 단축하여 실행시간을 단축할 수 있다.
[2-13] 기존의 명령을 조합하여 신규한 명령기능을 실현하고 있기 때문에, 기존의 CPU에 비해 장래 확장여유를 동등한 정도로 보지할 수 있다. 예를들어, 기존의 CPU에 대하여 더욱 명령세트를 확장시키고 고속화할 수 있게 된 경우에는, 이와 같은 기술을 본 발명을 적용한 CPU에도 이용할 수 있다. 신규한 명령기능을 실현하고 있는 기존의 명령에 상기 기술을 이용하여 이를 조합하여, 상기 신규한 명령기능을 실현할 수 있다.
이상 설명한 제 2 하위 CPU에 의하면 다음과 같은 작용효과를 얻을 수 있다.
[3-1] 제 2 하위 CPU에 있어서, 어드레스 공간과 프로그램 카운터를 상위 CPU와 동등하게 하여, 프로그램의 대용량화에 부응함과 동시에, 비교적 소규모의 데이터를 취급하는 정도로 데이터 전송의 어드레싱 모드를 축소하거나, 전송데이터의 데이터 크기를 한정시켜, 원하는 응용분야 등에서의 이용상 편의성을 해치지 않으면서 CPU의 논리적 규모를 축소할 수 있다.
[3-2] 데이터 접속시에 사용할 수 있는 어드레스 공간을 작게 함으로써, 더욱 논리적인 규모를 축소할 수 있다. 또한, 데이터 접속시에 사용할 수 있는 어드레스 공간을 2개로 분할함으로써, 사용상 편의성을 해치지 않으면서 상위 CPU와의 어드레스 공간상의 호환성을 유지함과 동시에, 상위 CPU에 실효 어드레스 계산방법 등을 절환하는 동작모드를 미리 준비해 둠으로써 소프트웨어 상의 호환성을 유지할 수 있다.
[3-3] 프로그램용 어드레스 공간을 상위 CPU와 동등하게 크게 함으로써, C언어 등의 고급언어를 사용한 프로그래밍 등에 대한 적성을 향상시킬 수 있다. 또한, 스택 포인터를 절환할 수 있게 함으로써, OS 등의 태스크 관리시의 스택 용량의 원하지 않는 증가를 막을 수 있다.
[3-4] 데이터 접속용 실효 어드레스의 계산을 어드레스 공간에 대응하는 비트길이보다 짧은 비트길이(16비트)로 수행하고, 부호확장하여 실효 어드레스를 얻음으로써, 범용 레지스터의 상위측(범용 레지스터 E)을 데이터 레지스터로서 사용할 수 있게 하여 실질적으로 범용 레지스터수를 증가시킬 수 있다.
상기 검토과제 A 내지 C의 해결수단에 관한 발명의 구체예에 대하여 설명하였는데, 본 발명은 그것에 한정되는 것이 아니라 그 요지를 벗어나지 않는 범위에 있어서 물론 다양하게 변경할 수 있다.
예를들어, 대상이 되는 CPU는, 상위 CPU, 제 1, 제 2 하위 CPU에 한정되지 않는다. 제 1 하위 CPU의 상위 호환이며, 상위 CPU의 하위 호환이 되는 CPU가 존재하여도 좋다. 혹은, 제 2 하위 CPU에 더욱 하위 호환인 CPU가 존재하여도 좋다. 제 2 하위 CPU의 2개의 실시예는 배타적인 것이 아니라 동시에 존재하여도 좋다. 그 밖에, 다양한 호환성이 있는 CPU를 제공할 수 있다.
레지스터 구성(프로그래밍 모델), 즉 범용 레지스터의 비트수 혹은 레지스터의 개수 등은 임의로 선택할 수도 있다. 어드레싱 모드와 실효 어드레스의 계산방법에 대해서도 다양하게 변경할 수 있다. CLU의 구체적인 논리회로예 등에 대해서도 한정되지 않는다. EA1코드 등은 전송명령코드와 완전히 동일하지 않아도 좋다. 적어도 CPU 내부의 실행에 있어어 동등한 동작을 하면 된다. 전치코드에 따라서 전송명령코드의 일부 비트의 의미를 변경하여 EA1코드로 하거나 할 수 있다. 범용 레지스터는, 어드레스 및 데이터에 공통으로 이용할 수 있는 것일 필요는 없으며, 일부 또는 전부가 어드레스 전용 또는 데이터 전용인 것이라도 좋다.
전치명령코드의 종류는 특히 제한되어 있지는 않다. 명령확장용 전치명령코드는, 전송명령과 연산명령을 조합하는 정보나, 전송명령과 전송명령을 조합하는 정보 이외의 다른 제어정보를 포함하여도 좋다. 예를들어, 데이터 크기를 지시하는 정보를 포함하여도 좋다. 또한, 명령코드의 기본단위 16비트에 한정할 필요는 없으며, 8비트 혹은 32비트 등의 임의의 비트폭으로 할 수 있다. 명령코드의 조합에 대해서는, 명령확장용 전치명령코드, 제 1 판독형 전송명령코드, 제 2 판독형 전송명령코드, 연산명령코드, 기록형 전송명령코드를 조합하여 메모리상의 상이한 2개의 어드레스 데이터를 입력하고 연산하여, 그 결과를 기록형 전송명령코드로 지정하는 다른 메모리의 어드레스에 격납하도록 할 수도 있다. 제 1, 제 2 판독형 전송명령코드를 생략하여 범용 레지스터상의 데이터를 입력할 수도 있다. 명령확장용 전치명령코드, 제 1 판독형 전송명령코드, 제 2 판독형 전송명령코드를 조합하여 제 1 판독형 전송명령코드로 판독한 데이터를 제 2 판독형 전송명령코드의 어드레스계산에 이용하도록 할 수도 있다.
또한, 그룹 0의 범용 레지스터만을 메모리상의 데이터에 대한 연산명령에 사용할 수 있도록 하여도 좋다. 싱글칩 마이크로 컴퓨터의 그 밖의 기능블럭에 대해서도 아무런 제약을 받지 않는다.
《검토과제 D의 해결수단에 관한 실시예》
다음으로, 상기 검토과제 D의 해결수단에 관한 발명의 구체예를 설명하기로 한다. 여기서 설명하는 마이크로 컴퓨터는, 특별히 제한되어 있지는 않지만, 도 53에 예시되는 CPU(2A)를 가진다. 마이크로 컴퓨터의 모듈구성은, 특별히 제한되어 있지는 않지만 도 2와 동일하다. CPU(2A)는 도 3의 레지스터 구성을 가지며, CPU(2A)의 어드레스 공간은 도 6과 동일하며, CPU(2A)에 의한 실효 어드레스의 연산수법은 도 7 및 도 8에 나타낸 바와 같다. CPU(2A)의 기계어의 명령포맷은 도 9에 준거한다.
도 54에는 CPU(2A)의 비트 테스트 명령의 명령포맷이 예시된다. 비트 테스트 명령은, 범용 레지스터상 또는 어드레스 공간상의 데이터의 소정 비트를 검사하여 검사결과를 CCR의 Z플래그에 반영하는 것이다.
비트 테스트 명령에 있어서, 범용 레지스터상의 데이터는, 도 54의 (5)에 예시된 바와 같이, 레지스터 직접으로 지정된다. 이 때의 비트 테스트 명령은, 오퍼레이션 피드(op)와 레지스터 필드(r) 및 비트번호를 지정하는 비트필드(n)를 가지는 명령코드가 된다.
비트 테스트 명령에 있어서, 범 어드레스 공간상의 데이터의 지정은, 도 54의 (1), (2), (3), (4)에 예시된 바와 같이, 절대 어드레스 8비트, 16비트, 32비트 및 레지스터 간접을 사용할 수 있다. 즉, 절대 어드레스의 경우에는 오퍼레이션 필드(op)와 EA확장부(EA)를 가지는 워드, 레지스터 간접의 경우에는 오퍼레이션 필드(op)와 레지스터 필드(r)를 가지는 워드를 가지며, 이것에 상기 레지스터 직접의 비트 테스트 명령에 상당하는 워드가 계속되는 명령포맷을 가진다.
도 55 내지 도 57에는 CPU(2A)의 어드레스 공간상으로부터 데이터를 판독하고, 상기 데이터의 소정비트의 상태에 따른 처리를 수행하는 복합명령의 명령포맷으로서, 어드레스 공간상의 데이터의 소정비트에 대한 조건분기명령(비트조건분기명령)의 명령포맷을 나타낸다. 여기서 나타내는 명령포맷은 명령확장용 전치명령코드를 이용하는 후술하는 예와는 다른 예이다. 또한, 단독 조건분기명령에서는 콘디션 코드필드(cc)가 분기조건을 지정한다. 복합명령으로서 분기명령이 입력된 비트조건분기명령에 있어서 분기조건은 비트 콘디션 필드(bc)에서 지정되어지게 된다.
어드레스 공간상의 데이터의 지정은, 도 55 내지 도 57에 나타낸 바와 같이, 절대 어드레스 8비트, 16비트, 32비트 및 레지스터 간접을 사용할 수 있다. 이것은 상기 비트 테스트 명령의 경우의 데이터 지정을 위한 명령코드(워드)와 완전히 동일하지는 않지만, 공통의 코드를 가진다. 즉, 데이터 지정을 위한 명령코드는, 예를들어 "MOV명령"과 같은 데이터 전송명령이며, 명령코드 중에 단수 또는 복수의 여잉 비트가 존재하고, 그 여잉비트에 적당한 정보를 설정하여도 명령세트 상에서 그 밖의 명령코드와 구별이 가도록 되어 있다. 이와 같은 데이터 지정을 위한 명령코드는, 메모리 공간상에서 참조한 데이터를 프로그램상 해방되어 있지 않은 레지스터, 예를들어 임시 데이터 레지스터(TRD)에 로드한다.
상기 데이터 지정을 위한 명령코드의 뒤에는, 상기 레지스터 직접의 비트 테스트 명령에 상당하는 명령워드를 대신하여 조건분기명령, 서브루틴 분기명령에 상당하는 워드가 계속되는 것이다. 분기 어드레스의 지정은, 디스플레이스먼트 8비트, 16비트의 프로그램 카운터 상대를 사용할 수 있다. 이것은, 기존의 조건분기명령과 공통적인 명령코드이며, 콘디션 필드(cc)가 비트 콘디션 필드(bc)로 되어 있다. 또한, 서브루틴분기는, 디스플레이스먼트 16비트의 프로그램 카운터 상대만을 사용할 수 있도록 하고 있다.
또한, 상기 어드레스 공간이 좁은, 혹은 하위 CPU에 있어서, 비트 테스트 명령에 절대 어드레스 32비트가 없는 경우에는 가능한 범위의 조합만을 가지도록 하면 된다.
비트 콘디션 필드(bc)는, 하위 3비트 bc[2 : 0]가 상기 임시 데이터 레지스터(TRD)의 비트번호를, 상위 1비트 bc[3]가 분기조건(세트/클리어)을 지정한다. 즉, 비트 조건분기명령의 맨 처음 명령코드에 의하여 어드레스 공간상에서 참조되어 상기 임시 데이터 레지스터(TRD)에 로드된 데이터에 대한 비트번호가 하위 3비트 bc[2 : 0]로 지정되고, 지정된 비트번호의 값의 참값(True)을 상기 상위 1비트 bc[3]가 지정하고, 참조값이 참값일 때 분기를 지시하도록 작용된다.
도 55 내지 도 57의 복합명령으로서의 비트 조건분기명령에 의하면, 어드레스 aa의 비트 n이 1로 세트되어 있는 경우에 분기하는 명령은, BBS, #n, @aa, d로 기술하면 되며, 어드레스 aa의 비트 n이 0으로 클리어되어 있는 경우에 분기하는 명령은, BBC #n, @aa, d로 기술하면 되고, 어드레스 aa의 비트 n이 1로 세트되어 있는 경우에 서브루틴분기하는 명령은, BSSR #n, @aa, d로 기술하면 되며, 어드레스 aa의 비트 n이 0으로 클리어되어 있는 경우에 서브루틴분기하는 명령은, BCSR #n, @aa, d로 기술하면 된다. 상기와 같이, n = bc[2 : 0]이다. 디스플레이스먼트 d는, 어셈블리언어에 있어서는 라벨을 기술하면 되며, 상대값의 계산은 어셈블러가 수행한다.
상기 비트조건분기명령을 서포트하지 않는 CPU에서는, 예를들어 BBS #n, @aa, d는,
BTST #n, @aa
BNE d
와 같이 비트 테스트 명령(BTST)과 그 명령의 실행결과에 따라 분기하는 명령(BNT)을 기술할 필요가 있었다. 또한, BSSR #n, @aa, d는 예를들어,
BTST #n, @aa
BEQ NEXT
BSR d
NEXT :
와 같이 비트 테스트 명령(BTST)과, 그 명령의 실행결과에 따라 분기하는 명령(BEQ)과, PC상대에 의한 서브루틴 분기명령(BSR)을 기술할 필요가 있었다. 비트 테스트 명령을 대신하여 비트 전송명령(BLD)과 그 명령의 실행결과에 따라 분기하는 명령(BCS 또는 BCC)을 이용하여도 동일하다.
도 55 내지 도 57에 나타낸 비트 조건분기명령에서는, 어드레스 공간상에서 참조된 데이터가 범용 레지스터가 아니라 임시 데이터 레지스터(TRD)에 로드되어 그 소정비트의 값에 따라 분기의 가부를 제어할 수 있다. 따라서, 당해 명령코드는 1워드, 실행 스테이트수는 1스테이트의 단축이 가능하다. 또한, 비트조건 서브루틴 분기명령에서는, 명령코드는 2워드, 실행 스테이트수는 3스테이트의 단축이 가능하다.
상기와 같이, 기기제어의 경우에는, 이들 조건분기명령이 조합되어(나무모양으로 구성하여), 다수의 분기조건 중에서 분기처를 판정하는 경우가 많기 때문에, 상기 단축효과는 전체적으로 더욱 커진다.
도 58에는 CPU(2A)에 있어서의 비트 조건분기명령을 고려하였을 때의 다른 명령포맷에 있어서의 명령코드의 조합이 예시된다. 여기에 나타나는 예는, 도 55 내지 도 57에서 설명한 명령포맷의 명령에 의한 기능을 명령확장용 전치명령코드를 이용하여 실현하는 예이다. 즉, 어드레스 공간상의 데이터 지정에 이용하는 명령코드를 상기 비트 테스트 명령의 경우의 데이터 지정을 위한 명령코드(워드)와 동일하게 하고, 또한 그 워드 앞에 프리픽스코드로서 전치명령코드를 부가함으로써, 상기와 마찬가지로, 복합명령을 임시 데이터 레지스터(TRD) 등을 이용하여 단일명령으로서 실행할 수 있게 하는 것이다.
도 58은 상기 도 12 내지 도 14와 합치면, 상기 도 11 내지 도 14를 바탕으로 설명한 명령확장용 전치명령코드 및 전송명령과 함께 복합된 상기 직접적인 연산명령의 명령포맷에 있어서의 명령코드의 조합도 포함하여 표현되어지게 된다. 또한, CPU(2A)의 메모리에 대한 전송명령의 예인 명령포맷은 상기 도 11을 바탕으로 설명한 명령포맷과 동일하다.
도 58의 명령포맷에 있어서, 비트 조건분기명령은, 명령확장용 전치명령코드, EA1코드, 분기코드를 조합하여 실현된다. 도에서는, EA2코드와의 조합도 가능하지만, EA2코드는 메모리 어드레스를 데스티네이션 어드레스로 하는 코드를 의미하기 때문에, 실제로는 의미가 없다.
도 58의 명령포맷에 있어서, 복합명령으로서의 비트 테스트 명령은, 명령확장용 전치명령코드, EA1코드, 비트 테스트 명령코드를 조합하여 실현할 수 있다. 이 때의 비트 테스트 명령코드는 범용 레지스터상의 원하는 비트에 대한 비트 테스트 명령, 즉 도 54의 (5)의 상기 레지스터 직접의 어드레싱 모드에 상당하는 명령코드로 한다. 또한, 원하는 비트와 캐리와의 연산명령을 구비하고 있는 경우에는, 비트 테스트 명령과 마찬가지로 실현할 수 있다. 도에서는 EA2코드와의 조합도 가능하지만, 상기와 마찬가지로 실제로는 의미가 없다.
도 58의 명령포맷에 있어서는, 비트 세트명령의 기능을 확장할 수 있다. 단독 비트세트명령은, 지정된 데이터의 지정된 비트로 세트하는 명령이다. 도 58의 명령포맷에 있어서, 복합명령으로서의 비트 세트명령은, 명령확장용 전치명령코드, EA2코드, 비트 테스트 명령코드를 조합한다. 이 때의 비트 세트명령코드는 상기와 마찬가지로, 범용 레지스터상의 원하는 비트에 대한 비트 세트명령에 상당하는 명령코드로 한다. 도에서는 EA1코드와의 조합도 가능하지만, EA1코드는 메모리 어드레스를 소스 어드레스로 하는 코드를 의미하기 때문에 실제로는 의미가 없다.
CPU(2A)에 있어서의 상기 명령확장용 전치명령코드(제어코드)의 포맷은 상기 도 15를 바탕으로 설명한 포맷과 동일하다. 이 포맷에 따르면, 소스측, 데스티네이션측이 메모리인 정보를 나타내는 비트를 가지고 있다. 비트 조건분기명령, 비트 조작명령의 경우에는, 소스측이 메모리로 되도록 지정한다. EA1과 EA2의 전송명령코드는 동일하게 하고 있기 때문에, 소스측이 메모리이면 데스티네이션측에 관계없이 명령확장용 전치명령코드에 계속되는 것이 EA1이라 판단된다. 한편, 소스측이 범용 레지스터로 되고, 데스티네이션측이 메모리이면, EA2로 판단된다. 도 58의 명령포맷을 가지며 1개의 명령으로서 실행될 때, 명령코드간에서의 데이터의 주고받기에 임시 레지스터(TRD)가 이용되는 것에 대해서는 도 55 내지 도 57에서 설명한 것과 동일하다.
도 58에 의한 명령코드의 조합에 의하여, 원하는 비트가 존재하는 어드레스를 지정하기 위하여, 전송명령과 동등한 어드레싱 모드를 사용할 수 있다. 당해 명령세트 중에서 임의의 어드레싱 모드를 사용할 수 있기 때문에, 프로그래밍을 용이하게 할 수 있다. 예를들어, 레지스터 직접, 레지스터 간접과 절대 어드레스만을 가지는 기존의 CPU에 대하여, 디스플레이스먼트가 부가된 레지스터 간접, 프리디크리먼트/포스트 인크리먼트 레지스터 간접 등을 추가함으로써, 복수의 어드레스에 존재하는 비트를 조작하거나, 참조하는 경우에 프로그램 단계수를 줄이거나, 처리속도를 향상시킬 수 있다. 이 때, 기존의 전송명령의 명령코드, 비트조작명령의 명령코드를 조합하여 동작하기 때문에, 명령 디코더의 종래의 설계자산을 유효하게 이용할 수 있으며, 논리적인 규모의 추가와 변경을 최소한으로 하고, 논리적·물리적 규모의 증대를 최소한으로 할 수 있다.
비트 조건분기명령에 있어서는, 도 55 내지 도 57의 포맷의 것과 도 58의 포맷의 것을 갖출 수 있다. 양측 모두에서 동등한 기능을 실현할 수 있는 명령(데이터 및 분기처의 어드레싱 모드의 조합)에 대해서는 명령코드길이 및 실행 스테이트수가 짧은 쪽을 도입하면 된다.
도 53에는 상기 CPU(2A)의 상세한 한 예가 나타나 있다. 도 1의 CPU(2)에서는, 특별히 도시되지 않았지만, 콘디션 코드 레지스터(CCR)에는 콘디션 필드(cc)의 값이 입력되고, 콘디션 코드 레지스터(CCR)의 소정비트의 값이 콘디션 필드(cc)의 값에 일치하는지의 여부를 판정하는 판정회로(CMP)(35)가 설치되고, 이에 의한 판정결과를 받아 분기제어신호(36)를 생성하는 분기제어논리(BRC)(37)가 설치되어 있다.
도 55 내지 도 58의 명령포맷에서 설명한 복합명령으로서의 비트 조건분기명령에 있어서, 임시 데이터 레지스터(TRD)에는 비트 콘디션 필드(bc)의 값이 입력되고, 이에 의하여 지정되는 비트위치의 값이 분기조건에 일치하는 지의 여부를 판정하는 판정회로(CMP)(38)가 설치되며, 이에 의한 판정결과는 상기 분기제어논리(37)에 공급된다. 분기제어논리(37)는, 제어신호 MODS의 논리값에 따라서 판정회로(35) 또는 판정회로(38)로부터의 입력을 유효하게 한다. 즉, 복합명령으로서의 비트 조건분기명령을 실행하여 어드레스 공간상으로부터 데이터를 참조할 때, 명령디코더(DEC)는 MODS = 1로 하고, MODS = 1일 때 임시 레지스터 기록신호(TRDwr)가 유효하게 되며, 범용 레지스터를 대신하여 임시 데이터 레지스터(TRD)에 참조데이터가 기록된다. 명령디코더(DEC)는 상기 복합명령 이외일 때는 MODS = 0으로 하고, MODS = 0일 때 범용 레지스터 기록신호(RDwr)가 유효하게 되며, 범용 레지스터에 기록되는 연산결과에 따라 CCR의 플래그가 조작된다. 상기 분기제어논리(37)는 MODS = 1일 때 임시 데이터 레지스터(TRD)의 판정회로(38)로부터 출력되는 정보를 도입하고, 이에 따라 분기제어를 수행한다. MODS = 0일 때, 분기제어회로(37)는 콘디션 코드 레지스터(CCR)의 판종회로(35)로부터 출력되는 정보를 도입하여 분기제어를 수행한다.
인터럽트 제어부(INTC)는, 도 55 내지 도 58에 나타낸 바와 같이, 복수의 명령코드(오퍼레이션 필드를 가지는 워드)를 일련의 것으로 하여 실행하는 경우에는, 각각의 명령코드가 인터럽트 마스크를 지시하고, 소정의 조합의 명령코드의 실행이 중단되지 않도록 한다.
산술연산기(AU)는, 프로그램 카운터 상대의 분기명령/서브루틴 분기명령의 분기 어드레스의 생성에 사용한다. 구체적으로는, 직전의 명령판독에 사용한 프로그램 카운터(PC)의 출력을 입력함과 동시에, 판독 데이터 버퍼(RDB)가 보지하는 디스플레이스먼트를 입력하고, 그의 가산을 수행한다. 8비트 디스플레이스먼트의 프로그램 카운터 상대의 분기명령/서브루틴 분기명령의 실행개시시에는, 분기 어드레스가 얻어지도록 한다.
인크리멘터(INC)는, 프로그램 카운터(PC)의 인크리먼트에 이용된다. 상술한 바와 같이, 비트 조건분기명령에서는 임시 데이터 레지스터(TRD)와 판정회로(38)를 이용한다.
또한, 그 밖에 도 1과 동일한 기능을 가지는 회로블럭에는 동일한 부호를 붙여 그 상세한 설명은 생략하기로 한다.
도 59에는 상기 임시 데이터 레지스터(TRD)의 판정회로(38)의 논리구성 및 분기제어논리(37)를 논리기술에 의하여 예시한다.
도 59의 (5-1)의 부분에 있어서, 비트 콘디션 필드(bc)는 명령코드에 따라 명령코드의 비트 11∼8, 비트 7∼4 중 어느 한쪽이다. 이것을, 제어신호 bcc1로 선택한 결과를 내부신호 bc1로 한다. 이 내부신호 bc1의 최상위비트 bc1[3]는 비트의 상태(세트/클리어)를 지정하고, 하위 비트 bc1[2 : 0]은 비트번호를 지정한다.
도 59의 (5-2)의 부분에서는, bc1[2 : 0]에 의한 셀렉터에 의하여 TRD의 원하는 비트가 선택된다(trdse1).
도 59의 (5-3)의 부분에서는, bc[3] = 0일 때는 선택된 비트의 반전이 출력되고, bc[3] = 1일 때는 선택된 비트가 그대로 출력된다(bout). 이것이 비트조건의 판정결과이다.
도 59의 (5-4)의 부분에서는, MODS신호에 의하여 기존의 조건분기명령의 콘디션 코드(CCR)의 판정결과(cout)와 상기 출력(bout)이 선택되고, 분기/비분기의 결과를 얻는다(bcout). 이 결과가, 1일 때 분기성립, 0일때 분기 비성립이다. 또한, 특별히 제한되어 있지는 않지만, 분기조건 판정신호(bcc1과 bcc2의 논리합)가 활성상태가 아닐 때에는 1로 하도록 하고 있다.
도 60 내지 도 62에는 비트 테스트 명령 및 비트 조건분기명령의 일부(제 1 워드)에 대한 명령디코더(DEC)의 논리구성이 논리기술에 의하여 나타내진다. 디코더(DEC)의 논리기술에 있어서, 소문자 신호는 명령디코더(DEC)에서 생성되어 출력되는 신호로 하고, 대문자 신호는 명령디코더(DEC)에 입력된 신호로 한다. 동 도의 논리기술은, 8비트 절대 어드레스에 의한 데이터 판독을 수행하고, 판독한 데이터를 임시 데이터 레지스터(TRD)에 격납하는 경우를 예시한다.
도 60의 (6-1)의 부분에서 스테이트 코드(TMG)가 생성된다. 스테이트 코드(TMG)는 1→2로 진행한다. 또한, NEXTTMG[5] = 0일 때, 다음 TMG은 NEXTTMG[4 : 0]으로 된다. NEXTTMG[5] = 1일때 다음 TMG는 5' b00001로 된다.
도 60의 제 2 부분(6-2)에서는 버스제어를 수행한다. nop = 0은 버스 접속개시, nop = 1은 버스 접속금지를 지시한다. data = 0은 명령판독, data = 1은 데이터 접속을 지시한다. long = 1은 롱워드 크기, long = 0일 때 byte = 0은 워드크기, byte = 1은 바이트 크기를 지시한다. write = 0은 판독, write = 1은 기록을 지시한다. 명령판독의 경우에는 소정의 타이밍에서 버스 IDB의 내용이 IR1과 판독 데이터 버퍼(RDB)에 격납된다. 데이터 판독의 경우에는 소정의 타이밍에서 버스 IDB의 내용이 판독 데이터 버퍼(RDB)에 격납된다. 데이터 기록의 경우에는 소정의 타이밍에서 기록 데이터 버퍼(WDB)의 내용이 버스 IDB에 출력된다. 본 발명의 경우, 스테이트 코드 1에서 데이터 접속을 수행하고, 데이터 접속의 판독과 동시에 바이트 접속이 지시된다. 스테이트 코드 2에서 명령판독을 수행한다.
도 61의 (6-3)의 부분에서 실효 어드레스를 계산한다. 본 전송명령의 경우, 스테이트 코드 1에서 dbragb = 1로 하고 DBRA에 보지하고 있는 명령코드의 EA확장부 8비트를 32비트로 1확장(상위 24비트를 모두 1로 한다)한 후에, 내부버스(GB)에 출력한다. GB의 내용은 어드레스 버퍼(AB)에 매 스테이트 격납되도록 되어 있으며, 특별히 제어는 필요없다.
도 61의 (6-4)의 부분에서 전송데이터를 제어한다. 스테이트 코드 2에서, dbrdb = 1로 하고, 판독 데이터를 DBR로부터 DB에 출력함과 동시에, 산술논리연산기(ALU)를 경유하여 sbtrd = 1로 하여, 임시 데이터 레지스터(TRD)에 격납한다.
도 62의 (6-5)의 부분에서, 인터럽트 마스크신호를 제어한다. 또한, 제어신호 MODS를 발생한다.
도 63 내지 도 65에는 조건분기명령의 일부에 대한 명령 디코더(DEC)의 논리구성이 논리기술에 의하여 나타내어진다. 본 논리기술은, 8비트 디스플레이스먼트의 조건분기명령(Bcc d : 8)에 상당한다.
도 63의 (7-1)의 부분에서는 스테이트 코드(TMG)가 생성된다. 스테이트 코드(TMG)는 1→2로 진행한다. 도 63의 (7-2)의 부분에서 버스제어를 수행한다. 본 명령의 경우, 스테이트 코드 1, 2에서 명령판독을 수행하고, 스테이트 코드 1에서는 산술연산기(AU)로 계산한 분기 어드레스를 바탕으로 분기 어드레스의 명령판독을 수행한다. 후술하는 바와 같이, 판독완료 이전에, 분기할지의 여부에 대한 판정을 수행하여, 분기하지 않는 경우에는 판독한 명령은 입력하지 않는다. 스테이트 코드 2에서는, 상기 판정결과에 따라서 분기 어드레스의 다음 어드레스 또는 당해 분기명령의 다음 다음 어드레스의 명령판독을 수행한다.
도 64의 (7-3)의 부분에서 실효 어드레스를 계산한다. 스테이트 코드 1에서 augb = 1로 하고, 산술연산기(AU)의 결과(분기 어드레스의 실효 어드레스)를 내부버스(GB)에 출력한다. 또한, bcc1 = 1로 하고, 분기판정을 지시한다. 실제의 판정은, MODS = 0일 때 콘디션 코드 레지스터(CCR)의 내용에 따라 수행되고, MODS = 1일 때 임시 데이터 레지스터(TRD)의 내용에 따라 수행된다. 또한, bcc1과 bcc2는, 콘디션 필드(cc/bc)로서 사용되는 명령코드의 비트위치가 상이해진다. bcc1의 경우에는 비트 11∼8이, bcc2의 경우에는 비트 7∼4가 사용된다.
도 64의 (7-4)의 부분에서 전송 데이터를 제어하는데, 본 명령에서는 동작을 수행하지 않는다. 도 64의 (7-5)의 부분에서 제어신호는 모두 초기화한다. 인터럽트도 허가하여, 인터럽트가 요구하면 계속해서 인터럽트 예외처리를 수행할 수 있다.
도 66 내지 도 68에는 서브루틴 분기명령의 일부에 대한 명령 디코더(DEC)의 논리구성이 논리기술에 의하여 나타내진다. 본 논리기술은, 16비트 디스플레이스먼트의 서브루틴명령(BSR d : 16)에 상당한다. MAX신호는 최대모드를 나타낸다. 실제로는 스택 포인터(ER7)의 디크리먼트나 GB로의 출력제어를 수행하는데, 본 발명에 직접 관계가 없기 때문에 도시는 생략하기로 한다.
조건성립/비성립에 따라 동작이 다르다. 또한, 최대/최소 모드에서, 스택하는 프로그램 카운터(PC)의 비트길이가 다르다.
도 66의 (8-1)의 논리기술부분에서 스테이트 코드(TMG)가 생성된다. 최소모드의 조건성립시, 스테이트 코드(TMG)는 1→14→2→3으로 진행한다. 최대모드의 조건성립시, 스테이트 코드(TMG)는 1→14→2→11→3으로 진행한다. 비성립의 경우에는 스테이트 코드(TMG)는 1→14→3으로 진행한다.
도 66의 (8-2)의 논리기술부분에서 버스제어를 수행한다. 본 명령의 경우, 스테이트 코드 14, 3에서 명령판독을 수행하고, 스테이트 코드 2, 11은 스택으로의기록을 수행한다. 스테이트 코드 1에서는 버스접속을 수행하지 않는다. 스테이트 코드 14에서의 명령판독은 분기조건 판정결과를 바탕으로 수행한다.
도 67의 (8-3)의 논리기술부분에서 실효 어드레스를 계산한다. bcc2 = 1로 하고, 분기판정을 지시한다. 실제의 판정은, MODS = 1일 때 임시 데이터 레지스터(TRD)의 내용에 따라 이루어진다. 또한, 스테이트 코드 1에서는, 판독 데이터 버퍼(RDB)에 보지하고 있는 명령코드의 EA확장부 16비트를 dbrext신호에 의하여 32비트로 부호확장하고, 내부버스(DB)로 출력한다. 도시는 하지 않았지만, 프로그램 카운터(PC)의 내용을 내부버스(GB)로 출력하고, 산술논리연산기(ALU)로 가산을 수행한다. 스테이트 코드 2에서는, 판정결과(BCOUT)에 따라서 BCOUT = 1이면 ALU 로부터 내부버스(GB)로의 출력을 수행한다. 또한, 도시는 되지 않았지만, BCOUT = 0이면 PC로부터 내부버스(GB)로의 출력을 수행한다.
도 67의 (8-4)의 논리기술부분에서 전송 데이터를 제어하는데, 본 명령에서는 동작을 수행하지 않는다. 도 68의 (8-5)의 논리기술부분에서, 제어신호는 모두 초기화한다. 인터럽트도 허가하여, 인터럽트가 요구한다면 계속해서 인터럽트 예외처리를 수행할 수 있다.
도 60 내지 도 68에서 설명한 논리기술을 조합함으로써 명령 디코더(DEC)는 상기 비트 조건분기명령을 제어할 수 있다.
명령 디코더(DEC)에 있어서의 전송명령 일부의 논리기술은 도 23 내지 도 25의 예와 동일하다. 또한, 명령 디코더(DEC)에 있어서의 연산명령 일부의 논리기술은 도 26 및 도 27과 동일하다.
도 69 및 도 70에는 다른 연산명령에 대한 명령 디코더(DEC)의 논리구성의 논리기술이 예시된다. 본 논리기술은, 비트 테스트 명령(BTST #n, Rn)에 상당한다. 상기와 마찬가지로, 독립된 비트 테스트 명령으로서 실행할지, 메모리상의 데이터에 대한 처리명령의 일부로서 실행할지는 MODS신호에 의하여 지시된다. 특별히 도시되지 않은 부분(산술논리연산기(ALU)의 제어 등)에 대해서는 독립된 비트 테스트 명령과 동일하게 할 수 있다.
도 69에 있어서의 (9-1)의 논리기술부분에서 스테이트 코드(TMG)가 생성된다. 스테이트 코드(TMG)는 1에서 종료한다. 동 도에 있어서의 (9-2)의 논리기술부분에서는 버스제어를 수행한다. 스테이트 코드 1에서 명령판독을 종료한다.
도 70에 있어서의 (9-3)의 논리기술부분에서는 연산 데이터를 제어한다. MODS = 0인 경우에는, 데이터를 범용 레지스터로 하고, 범용 레지스터의 내용을 DB에 판독한다(rsdb). MODS = 1인 경우에는, 데이터를 메모리로 하고, 임시 레지스터(TRD)의 내용을 DB에 판독한다(trddb). 동 도에 있어서의 (9-4)의 논리기술부분에서 제어신호가 모두 초기화된다. 인터럽트도 허가하여, 인터럽트가 요구하면 계속해서 인터럽트 예외처리를 수행할 수 있다.
도 71 및 도 72에는 또한 다른 연산명령에 대한 명령 디코더(DEC)의 논리구성을 논리기술로 예시한다. 본 논리기술은, 비트 세트명령(BSET #n, Rn)에 상당한다. 상기와 마찬가지로, 독립된 비트 세트명령으로서 실행할지, 메모리상의 데이터에 대한 처리명령의 일부로서 실행할지는 MODD신호에 의하여 지시된다. 특별히 도시하지는 않은 부분(산술논리연산기(ALU)의 제어 등)에 대해서는 독립된 비트 세트명령과 마찬가지로 할 수 있다.
도 71에 있어서의 (10-1)의 논리기술부분에서 스테이트 코드(TMG)가 생성된다. 스테이트 코드(TMG)는 1에서 종료한다. 동 도에 있어서의 (10-2)의 논리기술부분에서 버스제어를 수행한다. 스테이트 코드 1에서 명령판독을 종료한다.
도 72에 있어서의 (10-3)의 논리기술부분에서 연산데이터를 제어한다. MODD = 0인 경우에는, 데이터를 범용 레지스터로 하고, 범용 레지스터의 내용을 GB에 판독(rdgb)함과 동시에, 연산결과를 범용 레지스터에 기록한다(wbrd). MODD = 1인 경우에는 데이터를 메모리로 하고, 판독 데이터 버퍼의 내용을 버스 DB에 판독(DBRdb)함과 동시에, 연산결과를 임시 데이터 레지스터(TRD)에 기록한다(wbtrd).
도 72에 있어서의 (10-4)의 논리기술부분에서는, 인터럽트 마스크신호를 제어한다. 또한, 데스티네이션측이 메모리인 경우에는 제어신호 MKMOV를 발생하고, 기록형 전송명령과 동등한 동작을 수행하는 명령코드의 발생을 명령변경부(CHG)에 지시한다. 또한, 롱워드 크기신호(LNG), 바이트 크기신호(BYTE)를 계속한다.
다음으로 상기 비트조건 분기명령 등의 복합명령의 실행 타이밍의 예를 설명하기로 한다. 특별히 제한되어 있지는 않지만, 내부 데이터 버스는 16비트이며, 내장 ROM, RAM 판독/기록을 1스테이트에서 판독/기록가능하게 된다. 내장 ROM, RAM은 버스 IAB를 어드레스 버스로 하고, 버스 IDB를 데이터 버스로 한다. 후술할 PAB, PDB는 접속되어 있지는 않지만, 동일한 타이밍을 내부에서 생성하고 있다고 볼 수 있다.
도 73에는 비트 조건분기명령의 제 1 예(BBS #0, @FFFFFE, $+20)의 실행 타이밍이 예시된다. 사이클 T0의 슬롯 C2에서 CPU(2A)의 어드레스 버퍼(AB)로부터 어드레스가 버스 IAB에 출력된다.
사이클 T1의 슬롯 C1에서, 버스 IAB의 내용이 버스 PAB에 출력되고, 판독 사이클이 개시된다. 슬롯 C2에서 판독 데이터가 내부 데이터 버스에 얻어지며, 이것이 사이클 T2의 슬롯 C1에서 레지스터 IR1에 래치된다. 이것은, 비트 테스트 명령의 제 1 워드와 공통의 워드이며(bld), 지정한 어드레스의 데이터를 임시 레지스터에 격납한다.
계속해서, 사이클 T2의 슬롯 C2에서 다음 어드레스(+2된 내용)가 버스 IAB에 출력되며, 이 판독 데이터가 사이클 T3의 슬롯 C1에서 레지스터 IR1에 래치된다(조건분기명령의 명령코드(bcc)). 이상의 동작은 이전 명령의 실행제어에 의하여 이루어지며, 상대적인 관계가 서로 다른 경우도 있다.
직전의 명령의 실행이 종료되면, 가장 빠르게 명령의 실행이 개시되는 경우에는, 사이클 T2의 슬롯 C1에서 명령코드(bld)가 명령 디코더(DEC)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라서, 도 60 내지 도 62를 바탕으로 설명한 대로, 제어신호를 출력하고 각 부의 제어를 수행한다. 즉, 8비트 절대 어드레스의 어드레싱 모드이기 때문에, 이 절대 어드레스를 바탕으로 소스 데이터의 판독을 수행하며, 판독결과를 임시 레지스터(TRD)에 격납한다. 또한, 제어신호 MODS = 1로 한다.
사이클 T2의 슬롯 C2에서, 판독 데이터 버퍼(RDB)의 내용(절대 어드레스)을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다.
사이클 T3로부터 데이터가 판독된다. 또한, 사이클 T3의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 산술연산기(AU)는, 이 버스 GB의 내용을 입력하여 사이클 T4의 슬롯 C1으로부터 분기 어드레스의 계산을 수행한다.
사이클 T4의 슬롯 C1에서 상기 판독 데이터가 판독 데이터 버퍼(RDB)에 격납된다. 또한, 판독 데이터 버퍼(RDB)로부터 내부버스(DB)에 출력되고, 산술논리연산기(ALU)에 입력한다. 산술논리연산기(ALU)의 동작은 무조작으로 한다.
사이클 T4의 슬롯 C2에서, 판독 데이터가 산술논리연산기(ALU)로부터 내부버스(WB)에 출력되고 임시 데이터 레지스터(TRD)에 격납된다.
사이클 T4의 슬롯 C1에서, 명령코드(조건분기명령(bcc))가 명령 디코더(DEC)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라서, 도 63 내지 도 65를 바탕으로 설명한 바와 같이, 제어신호를 출력하고 각 부의 제어를 수행한다. MODS신호가 1에 세트되어 있기 때문에, 콘디션 코드 레지스터(CCR)가 아니라 임시 데이터 레지스터(TRD)의 소정 비트의 테스트를 수행한다.
사이클 T4의 슬롯 C2에서, 상기와 같이 산술연산기(AU)로 계산한 분기 어드레스의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다.
사이클 T5의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 임시 레지스터(TRA)에 기록된다. 분기조건의 테스트가 지시된다.
사이클 T5의 슬롯 C2에서, 분기조건이 성립하고 있는 경우에는 임시 어드레스 레지스터(TRA)의 내용을, 비성립된 경우에는 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리엔터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 이로써, 다음 다음 명령코드의 어드레스를 절환한다.
한편, 사이클 T6의 슬롯 C1에서, 분기조건이 성립하고 있는 경우에는, 버스 IDB의 내용을 레지스터 IR1에 래치한다(분기처의 명령코드). 비성립인 경우에는, 레지스터 IR1의 내용이 보지되며, 비트 조건분기명령의 다음 명령코드가 보존된다. 이로써, 다음 명령코드를 절환한다.
또한, 제 1 워드와 제 2 워드 이후가 분할되지 않기 위한 연속명령신호(mskint)를 출력한다. 본 신호에 의하여, 인터럽트 요구 등이 발생하여도 명령의 실행을 계속할 수 있다.
도 74에는 비트조건 서브루틴 분기명령의 예(BBSR #5, @FFFE00, $+300)의 실행 타이밍이 나타나 있다.
사이클 T2의 슬롯 C1에서 명령코드(bld-1)가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. 즉, 16비트 절대 어드레스의 어드레싱 모드이기 때문에, 계속해서 EA확장부인 절대 어드레스를 판독한 후, 이 절대 어드레스를 바탕으로 소스 데이터의 판독을 수행하고, 판독결과를 임시 데이터 레지스터(TRD)에 격납한다. 또한, 제어신호 MODS = 1로 한다.
사이클 T1의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 사이클 T2로부터 판독 사이클이 개시되며, 이 판독 데이터가 사이클 T3의 슬롯 C1에서 판독 데이터 버퍼(RDB)에 래치된다(EA확장부인 절대 어드레스(bld-2)).
사이클 T2의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 사이클 T3로부터, 판독 사이클이 개시되며, 이 판독 데이터가 사이클 T4의 슬롯 C1에서 판독 데이터 버퍼(RDB)에 래치된다(서브루틴 분기명령(bsr-1)).
사이클 T3의 슬롯 C2에서, 판독 데이터 버퍼(RDB)의 내용(절대 어드레스)을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 사이클 T4로부터, 데이터가 판독되며, 사이클 T6의 슬롯 C1에서 상기 판독 데이터가 판독 데이터 버퍼(RDB)에 격납된다. 또한, 판독 데이터 버퍼(RDB)로부터 내부버스(DB)에 출력되어, 산술논리연산기(ALU)에 입력한다. 산술논리연산기(ALU)의 동작은 무조작으로 한다.
사이클 T6의 슬롯 C2에서, 판독 데이터가 산술논리연산기(ALU)로부터 내부버스(WB)에 출력되며, 임시 데이터 레지스터(TRD)에 격납된다.
사이클 T5의 슬롯 C1에서, 명령코드(서브루틴 분기명령(bsr-1))가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서 도 66 내지 도 68을 바탕으로 설명한 대로, 제어신호를 출력하여 각 부의 제어를 수행한다. MODS신호가 1에 세트되어 있기 때문에, 임시 레지스터(TRD)의 소정비트의 테스트를 수행한다.
사이클 T5에서 분기조건의 테스트가 지정된다. 사이클 T6의 스테이트 C1에서 프로그램 카운터(PC)의 내용을 내부버스(GB)에, 판독 데이터 버퍼(RDB)의 내용(디스플레이스먼트)을 내부버스(DB)에 각각 판독하여 산술논리연산기(ALU)로 가산을 수행한다. 사이클 T6의 슬롯 C2에서, 분기조건이 성립하고 있는 경우에는 산술논리연산기(ALU)의 내용을, 비성립된 경우에는 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 이로써, 다음 명령코드의 어드레스를 절환한다. 사이클 T7의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다.
사이클 T7의 슬롯 C1에서 스택 포인터(SP)(ER7)의 내용을 내부버스(GB)에 판독하고, 산술논리연산기(ALU)로 디크리먼트(최대모드일 때는 4, 최소모드일 때는 2를 감산)를 수행한다. 사이클 T7의 슬롯 C2에서, 산술논리연산기(ALU)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)에 입력하고, 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 워드 크기 기록의 버스 명령어를 발생시킨다. 사이클 T8의 슬롯 C2에서, 프로그램 카운터(PC)의 내용이 내부버스(DB), 기록 데이터 버퍼(WDB)를 경유하여 내부버스(IDB)에 출력된다 최대모드의 경우에는, 또한 1회 더 워드 크기 라이트가 이루어진다. 조건 비성립인 경우에는, 이 스택 동작은 수행하지 않는다.
사이클 T8의 슬롯 C2에서, 조건 비성립인 경우에는, 사이클 T8의 슬롯 C2에서 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 다음 스테이트로부터 판독 사이클이 개시된다.
도 75에는 비트 테스트 명령의 제 1 예(BTST #0, @FFFFFF)의 실행 타이밍이 나타나 있다. 이것은 기존의 단독 명령인 경우이다.
사이클 T2의 슬롯 C1에서 명령코드(bld)가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 도 60 내지 도 62를 바탕으로 설명한 바와 같이, 제어신호를 출력하고 각 부의 제어를 수행한다. 즉, 8비트 절대 어드레스의 어드레싱 모드이기 때문에, 이 절대 어드레스를 바탕으로 소스 데이터의 판독을 수행하고, 판독결과를 임시 데이터 레지스터(TRD)에 격납한다. 또한, 제어신호 MODS = 1로 한다.
사이클 T2의 슬롯 C2에서, 판독 데이터 버퍼(RDB)의 내용(절대 어드레스)을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다.
사이클 T3로부터 데이터가 판독된다. 또한, 사이클 T3의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 산술연산기(AU)는, 이 버스(GB)의 내용을 입력하고, 사이클 T4의 슬롯 C1으로부터 분기 어드레스의 계산을 수행한다.
사이클 T4의 슬롯 C1에서 상기 판독 데이터가 판독 데이터 버퍼(DBR)에 격납된다. 또한, 판독 데이터 버퍼(DBR)로부터 내부버스(DB)에 출력되며, 산술논리연산기(ALU)에 입력한다. 산술논리연산기(ALU)의 동작은 무조작으로 한다.
사이클 T4의 슬롯 C2에서, 판독 데이터가 산술논리연산기(ALU)로부터 내부버스(WB)에 출력되어 임시 데이터 레지스터(TRD)에 격납된다.
사이클 T4의 슬롯 C1에서, 명령코드(비트 테스트 명령(btst))가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하여 각 부의 제어를 수행한다. MODS신호가 1로 세트되어 있기 때문에, 데이터를 범용 레지스터가 아니라 임시 데이터 레지스터(TRD)로부터 판독한다.
사이클 T4의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스(IAB)가 출력된다. 사이클 T5의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과, 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다.
사이클 T5의 슬롯 C1에서, 데이터가 MODS신호에 따라서 임시 레지스터(TRD)로부터 내부버스(GB)에 출력되고 산술논리연산기(ALU)에 입력된다. 지정된 비트의 선택을 수행한다.
사이클 T7의 슬롯 C2에서, 비트 테스트 결과가 콘디션 코드 레지스터(CCR)의 Z플래그에 격납된다. 선택된 비트가 0일때 Z = 1, 1일때 Z = 0이 된다.
도 76에는 비트 테스트 명령의 제 2 예(BTST #1, @ER0+)의 실행 타이밍이 나타나 있다. 이것은, 어드레싱 모드를 확장한 예이다. 전치명령코드, MOV. B @ER0+, R0에 상당하는 명령코드, BTST #1, R0H에 상당하는 명령코드를 조합하여 실행된다. 전치명령코드는, 도 15에 따라서 H' 0108로 되며, MODS신호에 의하여 소스측이 메모리인 것을 지시한다.
전송명령코드는, 기존의 전송명령과 마찬가지로, 메모리의 판독을 수행하는데, 전치명령코드에 의한 소스측을 메모리로 하는 지시를 바탕으로, 판독 데이터를 임시 데이터 레지스터(TRD)에 격납한다. 소스측을 메모리로 하는 지시를 계속한다. 연산명령코드는, 소스측을 메모리로 하는 지시에 따라서, 소스측 데이터를 범용 레지스터가 아니라 임시 데이터 레지스터(TRD)로부터 판독한다. 그 밖의 동작은, 기존의 연산명령과 마찬가지가 된다.
사이클 T2의 슬롯 C1에서 명령코드(전치명령코드(pf))가 명령디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. 이와 같은 전치명령코드의 경우에는, 소스측 데이터가 메모리상에 존재하는 것을 지시한다. 즉, 제어신호 control1C로서 MODS신호를 1로 세트하고, 명령디코더(DEC)에 피이드 백한다.
사이클 T2의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 다음 명령의 판독을 수행한다.
사이클 T3의 슬롯 C1에서 명령코드(MOV명령(mov))가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. 포스트 인크리먼트 레지스터 간접의 어드레싱 모드이기 때문에, 어드레스 레지스터(ER0)를 바탕으로 소스 데이터의 판독을 수행하고, 판독결과를 임시 데이터 레지스터(TRD)에 격납한다.
사이클 T3의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 사이클 T3의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다.
사이클 T3로부터 판독 사이클이 개시되고, 이 판독 데이터가 사이클 T4의 슬롯 C1에서 판독 데이터 버퍼(RDB)에 래치된다(비트 테스트 명령(btst)).또한, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다.
사이클 T4의 슬롯 C2에서, 어드레스 레지스터(ER0)의 내용(EA)을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 사이클 T5의 슬롯 C1에서, 다시 어드레스 레지스터(ER0)의 내용(EA)을 내부버스(GB)에 판독하여 산술논리연산기(ALU)에 입력하고, 인크리먼트 처리를 수행한다. 그 결과, 사이클 T5의 슬롯 C2에서 어드레스 레지스터(ER0)에 격납된다.
사이클 T5로부터 데이터가 판독된다. 사이클 T6의 슬롯 C1에서 상기 판독 데이터가 판독 데이터 버퍼(RDB)에 격납된다. 또한, 판독 데이터 버퍼(RDB)로부터 내부버스(DB)에 출력되어 산술논리연산기(ALU)에 입력한다. 산술논리연산기(ALU)의 동작은 무조작으로 한다. 사이클 T6의 슬롯 C2에서, 판독 데이터가 산술논리연산기(ALU)로부터 내부버스(WB)에 출력되어 MODS신호가 1로 세트되어 있기 때문에, 범용 레지스터가 아니라 임시 데이터 레지스터(TRD)에 격납된다.
또한, 사이클 T5의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 다음 명령의 판독을 수행한다.
사이클 T6의 슬롯 C1에서, 명령코드(BTST명령(btst))가 명령 디코더(DEC)에 입력되어 명령의 내용이 판독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. MODS신호가 1로 세트되어 있기 때문에, 데이터를 범용 레지스터가 아니라 임시 데이터 레지스터(TRD)로부터 판독한다.
사이클 T6의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버퍼(IAB)에 어드레스가 출력된다. 사이클 T7의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(SB)를 경유하여 프로그램 카운터(CP)에 기록된다.
또한, 사이클 T7의 슬롯 C1에서, 데이터가 MODS신호에 따라서 임시 데이터 레지스터(TRD)로부터 내부버스(GB)에 출력되고 산술논리연산기(ALU)에 입력된다. 지정된 비트의 선택이 이루어진다.
사이클 T7의 슬롯 C2에서, 비트 테스트 결과가 콘디션 코드 레지스터(CCR)의 Z플래그에 격납된다. 선택된 비트가 0일 때 Z = 1, 1일 때 Z = 0으로 된다.
도 77에는 비트 세트명령의 예(BSET #2, @ER0+)의 실행 타이밍이 나타나 있다. 이것은, 어드레싱 모드를 확장한 예이다. 전치명령코드, MOV. B @ER0+, R0에 상당하는 명령코드, BSET#2, R0H에 상당하는 명령코드를 조합하여 실행된다. 전치명령코드는, 도 15에 따라서, H' 0104로 되고, MODD신호에 의하여 데스티네이션측이 메모리인 것을 지시한다.
전송명령코드는, 기존의 전송명령과 마찬가지로, 사이클 T4의 슬롯 C2로부터 메모리의 판독을 수행하고, 전치명령코드에 의한 데스티네이션측을 메모리로 하는 지시(MODD)를 바탕으로 생성한 실효 어드레스(메모리 어드레스)를 임시 어드레스 레지스터(TRA)에 격납한다. 또한, 사이클 T6의 슬롯 C1에서, 판독 데이터를 판독 데이터 버퍼(DBR)에 격납한 시점에서, 기존의 전송명령 또는 소스측 데이터의 판독인 경우보다 1 스테이트 빠르게 실행을 종료한다. 따라서, 명령페치와 프로그램 카운터(PC)의 인크리먼트는 수행하지 않는다. 데스티네이션측을 메모리로 하는 지시를 계속한다. 비트세트 명령코드(bset)를 사이클 T5의 슬롯 C1으로부터 명령 디코더(DEC)에 입력한다.
연산명령코드는, 데스티네이션측을 메모리로 하는 지시(MODD)에 따라서, 사이클 T6의 슬롯 C1에서, 데스티네이션측 데이터를 범용 레지스터가 아니라 판독 데이터 버퍼(DBR)로부터 버스 GB에 판독하여 산술논리연산기(ALU)에 입력한다. 사이클 T6의 슬롯 C2에서 비트세트 결과를 임시 데이터 레지스터(TRD)에 격납한다. 또한, MOV. W R0, @ER0과 유사한 명령코드(mov-st)를 발생시켜 사이클 T6의 C1으로부터 명령 디코더(DEC)에 입력한다.
발생된 명령코드(mov-st)는, 임시 어드레스 레지스터(TRA)를 어드레스 레지스터로 하고, 임시 데이터 레지스터(TRD)를 데이터 레지스터로 하는 전송명령과 마찬가지의 동작을 수행한다. 즉, 사이클 T6의 슬롯 C2에서, 임시 레지스터(TRA)에 격납되어 있는 실효 어드레스를 버스 GB에 판독하여 어드레스 버퍼(AB)를 경유하여 버스 7IAB에 출력함과 동시에, 바이트 데이터 기록의 버스 명령어를 발행한다. 사이클 T7의 슬롯 C2에서, 임시 데이터 레지스터(TRD)에 격납되어 있는 연산결과를 버스 DB에 판독하여 기록 데이터 버퍼를 경유하고 버스 IDB에 출력하여 데스티네이션의 메모리 어드레스에 연산결과를 기록한다. 사이클 T7의 슬롯 C2로부터 명령페치를 수행함과 동시에, 프로그램 카운터(PC)의 인크리먼트를 수행한다. 이로써, 전송명령코드(mov-1)의 실행을 단축하고, 명령페치와 프로그램 카운터(PC) 인크리먼트를 수행하지 않았던 분을 회복한다.
데스티네이션측 메모리에 기록하는 경우, 명령코드(mov-st)를 CPU(2A) 내부에서 발생시킴으로써 명령코드를 단축하고, 처리시간을 단축할 수 있다. 임시 레지스터(TRA)의 내용을 참조함으로써, 다시 실효 어드레스의 계산을 수행할 필요가 없고, 또한 처리시간을 단축할 수 있따. MOV. W R0, @ER0과 유사한 명령코드를 사용함으로써, 설계를 용이하게 하고 논리적인 규모의 증가를 억지할 수 있다.
도 78에는 비트 조건분기명령의 제 2 예(BBC #0, @ER0+, $+20)의 실행 타이밍이 나타나 있다.
전치명령코드, MOV. B @ER0+, R0에 상당하는 명령코드, BRA $+20에 상당하는 명령코드를 조합하여 실행된다. 전치명령코드는, 도 15에 따라서 H' 0108로 되며, MODS신호에 의하여 소스측이 메모리인 것을 지시한다. 전송명령코드는, 기존의 전송명령과 마찬가지로 메모리의 판독을 수행하는데, 전치명령코드에 의한 소스측을 메모리로 하는 지시를 바탕으로 판독 데이터를 임시 데이터 레지스터(TRD)에 격납한다. 소스측을 메모리로 하는 지시를 계속한다.
사이클 T3의 슬롯 C1에서 명령코드(조건분기명령(bcc))가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. 포스트 인크리먼트 레지스터 간접의 어드레싱 모드이기 때문에, 어드레스 레지스터(ER0)를 바탕으로 소스 데이터의 판독을 수행하고, 판독결과를 임시 레지스터(TRD)에 격납한다.
사이클 T3의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 사이클 T3의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다.
사이클 T3로부터, 판독 사이클이 개시되고 이 판독 데이터가 사이클 T4의 슬롯 C1에서 판독 데이터 버퍼(RDB)에 래치된다(조건분기명령(bcc)). 또한, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다.
사이클 T4의 슬롯 C2에서, 어드레스 레지스터(ER0)의 내용(EA)을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 사이클 T5의 슬롯 C1에서, 다시 어드레스 레지스터(ER0)의 내용(EA)을 내부버스(GB)에 출력하여 산술논리연산기(ALU)에 입력하고, 인크리먼트 처리를 수행한다. 그 결과는 사이클 T5의 슬롯 C2에서 어드레스 레지스터(ER0)에 격납된다.
사이클 T5로부터 데이터가 판독된다. 사이클 T6의 슬롯 C1에서 상기 판독 데이터가 판독 데이터 버퍼(RDB)에 격납된다. 또한, 판독 데이터 퍼버(RDB)로부터 내부버스(DB)에 출력되어 산술논리연산기(ALU)에 입력한다. 산술논리연산기(ALU)의 동작은 무조작으로 한다. 사이클 T6의 슬롯 C2에서, 판독 데이터가 산술논리연산기(ALU)로부터 내부버스(WB)에 출력되며, MODS신호가 1로 세트되어 있기 때문에, 범용 레지스터가 아니라 임시 데이터 레지스터(TRD)에 격납된다.
또한, 사이클 T5의 슬롯 C2에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 다음 명령의 판독을 수행한다.
사이클 T6의 슬롯 C1에서, 명령코드(조건분기명령(bcc))가 명령 디코더(DEC)에 입력되고, 도 74와 마찬가지로 명령의 내용을 해독하고 제어신호를 출력하여 각 부의 제어를 수행한다. MODS신호가 1에 세트되어 있기 때문에, 콘디션 코드 레지스터(CCR)가 아니라 임시 데이터 레지스터(TRD)의 소정 비트의 테스트를 수행한다.
사이클 T6의 슬롯 C2에서, 상기와 마찬가지로 산술연산기(AU)로 계산한 분기 어드레스의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 입력된다.
사이클 T8의 슬롯 C1에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가, 내부버스(WB)를 경유하여 임시 어드레스 레지스터(TRA)에 기록된다. 분기조건의 테스트가 지시된다.
사이클 T7의 슬롯 C2에서, 분기조건이 성립하고 있는 경우에는 임시 어드레스 레지스터(TRA)의 내용을, 비성립된 경우에는 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스가 출력된다. 이로써, 다음 다음의 명령코드의 어드레스를 절환한다.
한편, 사이클 T8의 슬롯 C1에서, 분기조건이 성립하고 있는 경우에는, 서브(IDB)의 내용을 명령 레지스터(IR1)에 래치한다(분기처의 명령코드). 비성립된 경우에는, 명령 레지스터(IR1)의 내용이 보지되고, 비트 조건분기명령의 다음 명령코드가 보존된다. 이로써, 다음 명령코드를 절환한다.
전송명령으로 사용가능한 어드레싱 모드를 비트 테스트 명령, 비트 조건분기명령, 비트 조건 서브루틴 분기명령의 테스트 대상인 비트가 존재하는 어드레싱의 지정에 이용할 수 있다.
또한, CPU(2A)는 가산명령이나 데이터 전송명령 등을 실행할 때 도 1의 CPU(2)와 마찬가지로 도 31 내지 도 41의 실행 타이밍을 실현한다. 또한, CPU(2A)의 명령 디코더(DEC)는 도 1의 CPU(2)와 마찬가지로 도 39 내지 도 41에 예시되는논리기술의 제어논리를 실현하고 있다. 또한, CPU(2A)의 개발환경은 도 42와 같이 구성할 수 있다. 이 때의 시스템 개발장치에 있어서의 CPU 선택수법에 대해서도 도 43에서 설명한 수법을 그대로 적용할 수 있다. 또한, CPU(2A)의 어셈블러가 출력하는 리스트로서 도 44를 예시할 수 있다. 또한, CPU(2A)의 에뮬레이터에는 도 45와 동일한 구성을 도입하면 된다. CPU(2A)를 이용한 마이크로 컴퓨터의 에뮬레이션용 마이크로 컴퓨터는 도 47에서 설명한 바와 같이 구성할 수 있다.
상기 검토과제 D의 해결수단에 관한 발명의 구체적인 실시예에 의하면 다음의 작용효과를 얻을 수 있다.
[1] 제 1 워드, 제 2 워드(조건분기명령) 등의 명령코드는 기존의 것이기 때문에, 단독으로는 종래와 마찬가지로 동작하며 기존의 명령실행을 저해하지 않는다. 또한, 기존의 명령만을 사용하고 있다면 기존의 소프트웨어 자산을 유효하게 이용할 수 있다. 범용 레지스터나 로드 저장 아키텍쳐 등의 기존의 CPU의 이점을 해치지 않는다. 제 1 워드, 제 2 워드(조건분기명령)에 각각 절대 어드레스의 비트길이, 디스플레이스먼트의 비트길이 등에 복수의 종류가 있으면 동일한 방법에 의하여 이들을 조합할 수 있다. 다시말해, 기존의 데이터 접속을 위한 어드레싱 모드나 조건분기명령의 어드레싱 모드를 모두 서포트할 수 있기 때문에, 임의의 어드레싱 모드의 조합을 가능하게 할 수 있다. 이들 조합을 가능하게 함으로써, 프로그램상의 제약을 없애고, 이용상 편의성을 향상시킬 수 있다. 또한, 동일한 방법에 의하여, 서브루틴 분기명령과 조합할 수 있게 되어, 이용상 편의성을 향상시킬 수 있다. 또한, 기존의 독립된 비트 테스트 명령과 조건분기명령을 조합시키는 것 보다 명령코드길이의 단축이나 처리속도의 향상에 기여할 수 있다.
비트 테스트 명령, 비트 세트명령 등의 비트 조작명령 등과 같은 어드레싱 모드에도, 전송명령과 동등한 어드레싱 모드를 지정할 수 있으며, 사용상 편의성을 향상시킬 수 있다. 다양한 어드레싱 모드를 지정가능하게 함으로써, 복수의 비트의 상태에 따라 복수의 처리에 분기하거나, 또한 복수의 비트를 설정하는 경우 등에 최적의 어드레싱 모드를 사용할 수 있어, 전체적인 프로그램 용량의 저감이나 처리속도의 향상에 기여할 수 있다.
[2] 기존의 전송명령의 명령코드, 연산명령의 명령코드를 조합하여 동작하기 때문에, 명령 디코더의 종래의 설계자산을 유효하게 이용할 수 있으며, 논리적인 규모의 추가와 변경을 최소한으로 하고, 논리적·물리적 규모의 증대를 최소한으로 할 수 있다. 또한, 개발에 필요한 기간을 단축하여 자원을 절약할 수 있다. 명령코드의 동작내용을 변경하기 위한 제어신호인 MOD신호를 공통화할 수 있다. 즉, 데이터를 전송하는 명령코드를 공통으로 하고, 계속해서 명령코드를 연산명령코드 혹은 분기명령코드를 조합하면 된다. 명령세트를 최적화하여 논리적 규모의 증가를 억지할 수 있다.
[3] 임시 레지스터와 같은 래치수단에는, 지정된 비트의 상태를 판정하는 수단을 설치하고, ALU 등에 판독하거나 하지 않아도 소정 비트의 상태를 판정할 수 있도록 함으로써, 조건분기명령의 전체적인 동작을 변경하지 않고도 실현할 수 있기 때문에, 변경하는 부분을 작게하고, 또한 논리적 규모의 증가를 최소한으로 할 수 있다.
[4] 추가하는 명령코드를 전치명령코드에 제한함으로써, 명령세트의 변경을최소한으로 할 수 있으며, 일반적인 CPU 내지는 명령세트에 대하여 적용할 수 있다. 상기 전치명령코드는, 어드레싱 모드나 연산의 내용에 의하지 않고 공통으로 사용할 수 있기 때문에, 추가하는 명령코드를 최저한으로 할 수 있다. 또한, 전치명령코드에 그 밖의 데이터 크기 등의 정보를 가지게 함으로써, 전체적인 명령코드길이를 단축할 수 있다. 전치명령코드에 다른 정보를 포함함으로써, 명령코드길이를 단축하여 실행시간을 단축할 수 있다. 예를들어, 기존의 CPU에 있어서, 메모리에 대한 연산 이외의 지시를 수행하는 전치명령코드와 연산코드를 조합하여 실현되고 있는 명령이 존재하는 경우, 상기 메모리애 대한 연산 이외의 지시를 상기 메모리에 대한 연산을 지시하는 전치명령코드에 포함함으로써, 명령코드길이를 단축하고 실행시간을 단축할 수 있다.
메모리로부터 래치수단으로의 데이터 판독, 연산, 래치수단의 내용을 바탕으로 하는 메모리로의 기록은 기존의 명령과, 사용하는 레지스터가 상이할 뿐이므로, 기존의 명령동작을 크게 변경하지 않고도 이용할 수 있다. 이로써, 메모리상의 데이터로의 연산을 가능하게 하는 것에 의한 논리규모의 증가를 최소한으로 할 수 있다.
[5] 목적레벨에서 호환성을 유지하면서, 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 어드레스 공간이 넓은 CPU로 상기 명령을 실현함으로써 하위 호환성을 가지는 어드레스 공간이 좁은 CPU로도 메모리상의 데이터를 연산할 수 있다. 다시말해, 동일한 방법으로 목적레벨에서 호환성을 유지하면서, 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU로도 메모리 상의 데이터를 연산할 수 있다. 목적레벨에서 호환성을 유지하는 것에 의한 이점과 메모리상의 데이터를 연산가능하게 하는 것의 이점 모두를 누릴 수 있다.
[6] 기존의 명령을 조합하여 신규한 명령기능을 실현하고 있기 때문에, 더욱 명령세트를 확장하거나 고속화하는 기술이 존재하는(발명된) 경우에는, 본 발명을 적용하여 기존의 CPU에 대하여 명령세트를 확장한 CPU에 대해서도 동일한 기술을 적용할 수 있다. 신규한 명령기능을 실현하기 위하여 이용하고 있는 기존의 명령의 각각에 상기 기술을 적용하여 다시 조합하면 된다. 전치명령코드는 동작이 단순하며, 또한 기존의 명령과 유사한 동작으로 함으로써 변경이 용이하다.
[7] 또한, 기존의 명령을 조합하여 신규한 명령기능을 실현하고 있기 때문에, 기존의 CPU와 에뮬레이션용 인터페이스를 공통화할 수 있으며, 나아가 동일한 에뮬레이터의 하드웨어를 공통화할 수 있다. 에뮬레이터의 하드웨어를 공통화함으로써, 신속하게 개발환경을 조절할 수 있으며, 또한 에뮬레이터의 개발에 필요한 자원을 최소한으로 할 수 있다.
상기 검토과제 D의 해결수단에 관한 발명의 실시예는 한 예에 불과하며, 그 요지를 벗어나지 않는 범위에 있어서 다양하게 변경할 수 있다.
예를들어, 조합하는 명령코드는, 비트 테스트 명령이나 조건분기명령에 한정되지 않는다. 신규한 명령세트를 생각하는 경우, 기존의 명령세트의 상위 호환으로 하는 경우 등, 적절한 명령코드를 조합하도록 하면 된다. 적어도, 하나의 오퍼레이션 필드 내지 1회의 명령 디코더로 비트 조건분기명령을 실행하는 복잡한 동작을 수행하지 않고, 당해 비트가 존재하는 어드레스의 판독, 당해 비트 테스트, 분기판정, 분기 등의 개별 동작을 유사한 명령과 공통화하도록 하면 된다.
비트 조건분기명령의 어드레싱 모드도 실시예에 한정되지 않는다. 분기 오드레스의 지정은 프로그램 카운터 상대에 한정되지 않고, 절대 어드레스나 레지스터 간접 등으로 하여도 좋다. 이것은, 전체적인 명령세트에 적합하도록 하면 된다.
CPU의 아키텍쳐는, 로드 저장형 아키텍쳐가 아니라도 좋다. 범용 레지스터는, 어드레스 및 데이터에 공통으로 이용할 수 있는 것일 필요는 없으며, 일부 또는 전부가 어드레스 전용 또는 데이터 전용인 것이라도 좋다. 범용 레지스터의 데이터 크기에 대해서도 임의로 할 수 있다.
전치명령코드의 종류는 특별히 제한되어 있지는 않다. 또한, 전치명령코드는, 전송명령과 조건분기명령 내지 연산명령을 조합하는 정보 외에, 그 밖의 제어정보를 포함하여도 된다. 예를들어, 데이터 크기를 지시하는 정보를 포함하여도 된다.
또한, 명령코드의 기본단위 16비트에 한정할 필요가 없으며, 8비트 혹은 32비트 등의 임의의 비트폭으로 할 수 있다. 제어신호는, MODS, MODD를 이용하는 것으로 하였지만, 그 밖의 제어신호로 분할할 수도 있다.
전치명령코드, 제 1 판독형 전송명령코드, 제 2 판독형 전송명령코드, 연산명령코드, 기록형 전송명령코드를 조합하여, 메모리상의 상이한 2개의 어드레스의 데이터를 입력하고 연산하여, 결과를 기록형 전송명령코드로 지정하는 다른 메모리의 어드레스에 격납할 수 있다. 제 1, 제 2의 판독형 전송명령코드를 생략하여 범용 레지스터상의 데이터를 입력으로 할 수도 있다.
《검토과제 E의 해결수단에 관한 실시예》
다음으로, 상기 검토과제 E의 해결수단에 관한 발명의 구체예를 설명하기로 한다. 여기서 설명하는 마이크로 컴퓨터는 도 2를 바탕으로 설명한 구성을 가지는 것으로, 반복되는 것이기 때문에 그 상세한 설명은 생략하기로 한다. 따라서, 마이크로 컴퓨터(1)에 내장되는 상기 CPU(2)는 도 3에 나타낸 바와 같은 범용 레지스터 및 제어 레지스터의 구성을 가지고 있다. 당연히 CPU(2)는 도 4의 프로그래밍 모델을 가지는 하위 CPU의 범용 레지스터 및 명령 세트를 포함하게 된다. 그리고, 상위 CPU로서의 CPU(2)는 도 5의 어드레스 공간을 가지고 있다. CPU(2)의 실효 어드레스의 계산에는 상술한 도 7 및 도 8에서 설명한 수법이 도입되어 있다.
여기서 설명하는 마이크로 컴퓨터의 한 예는 도 79에 나타나 있다. 마이크로 컴퓨터(501)는 명령을 실행하여 마이크로 컴퓨터(501) 전체의 제어를 담당하는 중앙처리장치(CPU)(502), 싱글칩 마이크로 컴퓨터의 동작모드 등을 제어하는 시스템 콘트롤러(SYSC)(514), 인터럽트 콘트롤러(INT)(503), 버스 콘트롤러(510), DMA콘트롤러(DMAC)(511), 외부버스 DMAC(EXDMAC)(512), CPU(502)의 처리 프로그램 등을 격납하는 메모리인 판독 온리 메모리(ROM)(504), CPU(502)의 작업영역 및 데이터의 일시 기억용 메모리인 랜텀 접속 메모리(RAM)(505), 타이머(506), 펄스 출력회로(507), 시리얼 커뮤니케이션 인터페이스(SCI)(508), A/D변환기(A/D)(509), 입출력포트(IOPA∼IOPF), 입출력포트(IOP1∼IOP5) 및 클록 발진기(CPG)(513)의 기능블럭 혹은 회로 모듈을 가지며, 공지의 반도체 집적회로 제조기술에 의하여 하나의 반도체기판(반도체 칩)에 형성되어 있다.
상기 CPU(502)는 주로 ROM(504)으로부터 명령을 페치하고, 이를 해독하여 연산동작이나 제어동작을 수행한다. 상기 DMAC(511)는 CPU(502)와 버스를 공유하고, CPU(502)를 대신해서 데이터 전송제어를 수행한다. 상기 EXDMAC(512)는 외부버스 상의 데이터 전송제어에 특화된 전송제어장치이며, CPU(502) 또는 DMAC(511)의 내부버스 상에서의 접속동작에 병행하여 외부버스 상에서의 데이터 전송제어가 가능하게 된다.
버스 콘트롤러(510)는 내부버스 콘트롤러, 외부버스 콘트롤러 및 리프레시 타이머 등을 가진다. 내부버스 콘트롤러는 CPU(502)와 DMAC(511)와의 서브권리 조정을 수행한다. 외부 어드레스는, 예를들어 8개의 영역으로 분할되며, 외부버스 콘트롤러에는 영역마다 버스폭이나 접속 스테이트수를 설정할 수 있으며, DRAM이나 ROM 등의 고속 페이지 모드와 같은 연속 접속시에 단축된 버스 사이클을 실현가능하게 하고 있다. 예를들어, 외장 DRAM에 대한 경우, 노멀 4 스테이트 접속에 대하여 고속 페이지 2 스테이트 등으로 된다. 외부버스 콘트롤러는 CPU(502), DMAC(511), EXDMAC(512)의 각각으로부터의 버스권리 요구와, 외부로부터 버스권리 요구에 대한 조정을 수행한다.
마이크로 컴퓨터(501)의 상기 각종 기능블럭은, 내부버스에 의하여 상호 접속된다. 내부버스는 어드레스 버스, 데이터 버스 외에, 도시되지 않은 버스권리 요구신호, 버스 액크놀로지 신호, 버스 명령어, 외부버스 명령어, 준비신호, 외부버스 준비신호, 판독신호·기록신호, 또한 버스크기 신호, 시스템 클록신호 등을 포함한다. 내부 어드레스 버스에는, IAB, PAB, EXAB가 존재한다. 내부 데이터 버스에는 IDB, PDB가 존재한다.
이들 버스는, 버스 콘트롤러(510)에 의하여 인터페이스되어 있다. 내부버스(IAB, IDB)는 CPU(2), DMAC(11), ROM(504), RAM(505), 버스 콘트롤러(510)에 접속되며, 또한 어드레스 버스(IAB)는 외부버스의 어드레스 버스와 인터페이스하기 위하여 입출력포트(IOPA∼IOPC)에 접속되고, 데이터 버스(IDB)는 외부버스의 데이터 버스와 인터페이스하기 위하여 입출력포트(IOPD, IOPE)에 접속된다.
주변장치 버스(PAB, PDB)는 버스 콘트롤러(510), EXDMAC(512), 타이머(506), 펄스 출력회로(507), SC(508), A/D변환기(509), 인터럽트 콘트롤러(503), 입출력포트(IOPA∼IOPF) 및 입출력포트(IOP1∼IOP5)에 접속된다. 이들 기능블럭이 가지는 제어 레지스터를 총칭하여 내부 I/O 레지스터라 부른다.
어드레스 버스(EXAB)는, EXDMAC(512)와 버스 콘트롤러(510), 입출력포트(IOPA∼IOPC)를 접속한다. 또한, 버스 콘트롤러(510)는 어드레스 버스(EXAB)의 어드레스를 판정하고, 버스 사양에 따른 동작을 실행하기 위하여 참조한다. 따라서, 버스 콘트롤러(510)는 영역을 판정하거나, DRAM의 로우 어드레스를 판정할 정도의 상위 비트를 입력하는 것으로 충분하다.
CPU(502)와 DMAC(511)가 내부버스 마스터로서 내부버스를 사용할 수 있으며, 각각의 버스권리 요구신호에 따라서 버스 콘트롤러(내부버스 아비터)(510)가 조정한다. 또한, 외부버스에 대해서는, 내부버스 마스터에 의한 외부버스 접속, EXDMAC(512), 외부버스권리 해방요구, 리프레시 요구의 버스권리 요구신호에 따라서 버스 콘트롤러(외부버스 아비터)(510)가 조정한다.
ROM(504), RAM(505) 및 타이머(506), 펄스 출력회로(507), SCI(508), A/D변환기(509), 입출력포트(IOPA∼IOPF) 및 입출력포트(IOP1∼IOP5), 인터럽트 콘트롤러(503)의 각 기능블럭 및 EXDMAC(512)는 내부버스 슬레이브로서 CPU(502) 또는 DMAC(511)에 의하여 동작제어 정보 등이 판독/기록가능하게 된다.
인터럽트 콘트롤러(503)는, 타이머(506), SCI(508), A/D변환기(509), 입출력포트(IOP5)가 출력하는 인터럽트 신호를 입력하고, CPU(502)에 인터럽트 요구신호(531)를, DMAC(511)에 기동요구신호(도시생략)를 출력한다. 또한, DMAC(511)가 출력하는 클리어신호(도시생략)를 입력하여 인터럽트 클리어신호(도시생략)를 출력한다.
입출력포트는, 외부버스신호, 입출력회로의 입출력신호와 겸용되어 있다. 입출력포트(IOPA∼IOPC)는 어드레스 버스출력, 입출력포트(IOPD, IOPE)는 데이터 버스 입출력, 입출력포트(IOPF)는 버스 제어신호 입출력신호와 겸용되어 있다. 외부 어드레스, 외부 데이터는, 각각 이들 입출력포트에 포함되는 버퍼회로를 매개로 버스(IAB, IDB)와 접속되어 있다. 버스 PAB, PDB는 입출력포트의 레지스터를 판독/기록하기 위하여 사용하고, 외부버스와는 직접 관계가 없다. 버스제어신호 출력은, 어드레스 스트로브, 하이/로우 데이터 스트로브, 판독 스트로브, 기록 스트로브, 버스 액크놀로지신호 등이 있다. 버스제어 입력신호에는 웨이트 신호, 버스 리퀘스트 신호 등이 있다. 이들 입출력신호는 도시되지 않았다. 외부버스 확장을 수행하는 것은 동작모드 등으로 선택되며, 이들 입출력포트의 기능도 선택된다.
또한, 입출력포트(IOP1)는 타이머 입출력, 입출력포트(IOP2)는 펄스출력, 입출력포트(IOP3)는 SCI(508)의 입출력, 입출력포트(IOP4)는 아날로그 입력, 입출력포트(IOP5)는 EXDMAC(512), DMAC(511) 입출력과 겸용되어 있다. EXDMAC(512), DMAC(511), 타이머(506), SCI(508), 펄스 출력(507), A/D변환기(509)와 입출력포트(IOP1∼IOP5)와의 입출력신호나 내부 인터럽트 요구신호 등은 도시를 생략하였다.
인터럽트 요인이 발생하면, 인터럽트 콘트롤러(503)로 CPU(502) 또는 DMAC(511) 중 어디서 요구를 수행할지를 판정하고, 또한 우선순위 등이 판정된다. CPU(502)에 인터럽트 요구가 발생되면, CPU(502)는 실행중인 처리를 중단하고 예외처리상태를 거쳐 소정의 처리루틴으로 분기하여 원하는 처리를 수행하고 인터럽트 요인을 클리어한다. 소정의 처리루틴의 마지막에는 통상 복귀명령(RTE명령)이 주어지며, 이 명령을 실행함으로써 상기 중단된 처리를 재개한다.
상기 마이크로 컴퓨터(501)는, 전원단자로서 그랜드레벨(Vss), 전원전압레벨(Vcc), 아날로그 그랜드 레벨(AVss), 아날로그 전원전압레벨(AVcc), 아날로그 기준전압(Vref)의 입력단자 외에, 전용제어단자로서 리셋(RES), 스탠바이(STBY), 모드제어(MD0, MD1, MD2), 클록입력(EXTAL, WTAL)의 각 단자를 가진다.
상기 단자 EXTAL, XTAL을 매개로 CPG(513)에 수정발진자에 의한 발진신호 또는 외부 클록신호가 입력되고, 이를 바탕으로 기준클록신호(시스템클록)Φ를 생성한다. 마이크로 컴퓨터는 그 기준클록신호Φ에 동기하여 동작을 수행한다 .이 기준클록신호Φ의 1주기를 스테이트라 부른다.
RES단자에 리셋신호가 가해지면, SYSC(514)가 모드단자(MD0∼MD2)로 주어지는 동작모드를 입력하고, 마이크로 컴퓨터(501)는 리셋상태가 된다. 모드단자로 설정하는 동작모드는, 싱글칩/확장, 어드레스 공간, 내장 ROM의 유효/무효, 데이터 버스폭의 초기값 8비트/16비트 등을 선택한다.
이 리셋이 해제되면, CPU(502)는 소정의 어드레스로부터 스타트 어드레스를판독하고, 이 스타트 어드레스로부터 명령의 판독을 개시하는 리셋 예외처리를 수행한다. 그 후, CPU(502)는 순서대로 ROM(504)등으로부터 명령을 판독하고 해독하여 그 해독내용을 바탕으로 데이터의 처리 혹은 RAM(505), 타이머(506), SCI(508), 입출력포트 등, 혹은 외부버스에 접속되는 메모리나 I/O 등과의 데이터 전송을 수행한다. 즉, CPU(502)는 입출력포트, A/D 변환기(509) 등이 입력되는 데이터 혹은 SCI(508) 등으로부터 입력되는 지시를 참조하면서 ROM(504) 등에 기억되어 있는 명령을 바탕으로 처리를 수행하고, 그 결과를 바탕으로 입출력포트, 타이머(506) 등을 사용하여 외부에 신호를 출력하고, 각종 기기의 제어를 수행한다.
도 3은 상기 CPU(502)에 내장되어 있는 범용 레지스터 및 제어 레지스터의 구성예(프로그래밍 모델)로서 상위 CPU(502)의 프로그래밍 모델을 나타내는 도면이기도 하다.
CPU(502)는 32비트길이의 범용 레지스터를 32개 가지고 있다. 범용 레지스터(ER0∼ER31)는 모두 동등한 기능을 가지고 있으며, 어드레스 레지스터로서도 데이터 레지스터로서도 사용할 수 있다.
데이터 레지스터로는 32비트, 16비트 및 8비트 레지스터로서 사용할 수 있다. 어드레스 레지스터 및 32비트 레지스터로는, 일괄적으로 범용 레지스터 ER(ER0∼ER31)로 사용한다. 16비트 레지스터로는, 범용 레지스터(ER)를 분할하여 범용 레지스터 E(E0∼E31), 범용 레지스터 R(R0∼R31)로 사용한다. 이들은 동등한 기능을 가지고 있으며, 16비트 레지스터를 최대 64개까지 사용할 수 있다. 또한, 범용 레지스터 E(E0∼E31)를 특히 확장 레지스터라 부르는 경우가 있다. 8비트 레지스터로는, 범용 레지스터 R을 분할하여 범용 레지스터 RH(R0H∼R31H), 범용 레지스터 RL(R0L∼R31L)로 사용한다. 이들은 동등한 기능을 가지고 있으며, 8비트 레지스터를 최대 64개 까지 사용할 수 있다. 각 레지스터 독립적으로 사용방법을 선택할 수 있다.
범용 레지스터(ER7, ER15, ER23, ER31)에는, 범용 레지스터로서의 기능에 덧붙여 스택 포인터(SP)로서의 기능이 할당되어 있으며, 예외처리나 서브루틴 분기 등에서 암묵적으로 사용된다. 예외처리는 상기 인터럽트 예외처리를 포함한다.
또한, 내부논리구성상은 ER0∼ER7을 그룹 0, ER8∼ER15를 그룹 1, ER16∼ER23을 그룹 2, ER24∼ER31을 그룹 3으로 하고 있다. 그룹 0이 기존의 CPU(CPU(502)에 대한 하위 CPU)의 범용 레지스터와 동일하게 된다.
이들 범용 레지스터는, 프로그래밍 사양상은 다르지 않아 모두 동등하게 사용할 수 있다. 적어도, 어셈블리 언어로 쓰는 경우에는, 그룹을 의식하지 않고, 예를들어 R0H, E8, R16, ER31 등으로 기술할 수 있다. 예를들어, 1995년 3월 (주)히타치제작소 발행 『H8S/2600시리즈 H8S/2000시리즈 프로그래밍 매뉴얼』의 어셈블러 포맷에 따라서 기술하면, 「MOV. L ER0, ER31」 혹은 「ADD. W E8, R16」등으로 레지스터 번호만으로 기술할 수 있다.
CPU(502)는 또한 콘트롤 레지스터로서 도 3에 예시되는 24비트의 프로그램 카운터(PC)와 8비트의 확장 레지스터(EXR) 및 8비트의 콘디션 코드 레지스터(CCR)를 포함하고 있다.
상기 프로그램 카운터(CP)는, CPU(502)가 다음에 실행할 명령의 어드레스를 나타낸다. 특별히 제한되어 있지는 않지만, CPU(502)의 명령은 모두 2바이트(워드)를 단위로 하고 있기 때문에, 바이트를 최소단위로서 지시하는 어드레스 신호의 최하위 비트는 무효이며, 명령판독시에는 명령 어드레스의 최하위 비트는 0으로 간주된다.
상기 콘디션 코드 레지스터(CCR)는 8비트의 레지스터로, CPU(502)의 내부상태를 나타내고 있다. 인터럽트 마스크 비트(I)와 중간자리 올림(H), 네가티브(N), 제로(Z), 오버플로(V), 자리올림(C)의 각 플래그를 포함하는 8비트로 구성되어 있다.
상기 확장 레지스터(EXR)는 8비트의 레지스터로, 인터럽트 등의 예외처리의 제어를 수행한다. 인터럽트 마스크 비트(I2∼I0)와 트래이스(T)의 각 비트를 포함하고 있다.
도 4는 CPU(502)에 대한 하위 호환의 CPU의 프로그래밍 모델을 나타내는 도면이기도 하다. 상기 도 3의 프로그래밍 모델을 가지는 상위 CPU(502)는, 도 4의 프로그래밍 모델을 가지는 하위 CPU의 범용 레지스터 및 명령세트를 포함하고 있다.
하위 호환의 CPU는, 16비트길이의 범용 레지스터를 8개 가지고 있다. 범용 레지스터 R0∼R7은 모두 동등한 기능을 가지고 있으며, 어드레스 레지스터로서도 데이터 레지스터로서도 사용할 수 있다.
데이터 레지스터로서 16비트 및 8비트 레지스터로서 사용할 수 있다. 어드레스 레지스터 및 16비트 레지스터로서는, 일괄적으로 범용 레지스터 R(R0∼R7)로서 사용한다. 8비트 레지스터로서는, 범용 레지스터 R을 분할하여 범용 레지스터 RH(R0H∼R7H), 범용 레지스터 RL(R0L∼R7L)로서 사용한다. 이들은 동등한 기능을 갖고 있으며, 8비트 레지스터를 최대 16개 까지 사용할 수 있다. 각 레지스터를 독립적으로 사용방법을 선택할 수 있다.
범용 레지스터 R7에는 상기와 마찬가지로 범용 레지스터로서의 기능에 덧붙여 스택 포인터(SP)로서의 기능이 할당되어 있으며, 예외처리나 서브루틴분기 등에서 암묵적으로 사용된다.
도 80에는 CPU(502)의 어드레스 공간이 나타나 있다. 마이크로 컴퓨터(501)의 어드레스 맵으로서는 ROM(504)은 0번지부터, 한편, RAM(505) 및 내부 I/0 레지스터는 H' FFFF 또는 H' FFFFFF번지까지 각각 어드레스 공간의 양 끝이 되도록 배치되게 한다.
상위 CPU(502)는, 16MB의 어드레스 공간의 최대모드와 64kB의 어드레스 공간의 최소모드를 가진다. 이와 같은 최대모드와 최소모드의 선택은 마이크로 컴퓨터(501)의 모드제어 입력단자(MD0∼MD2)의 상태에 의하여 이루어진다.
최대모드에서는, 절대 어드레스 24비트(상위 8비트는 예약되며, 명령코드 중에서는 32비트)로 전 공간을, 절대 어드레스 16비트로 0∼H' 7FFF 및 H' FF8000∼H' FFFFFF를 지정한다. 또한, 예외처리시의 벡터는 24비트(메모리상은 32비트로 되며, 상위 8비트는 무시된다)로 되며, 서브루틴분기 등에 있어서 대피/복귀되는 프로그램 카운터(PC)도 24비트로 된다.
최소모드에서는, 절대 어드레스와 레지스터 간접의 어드레싱 모드 모두 하위 16비트만을 사용하고 상위 비트는 무시한다. 예외처리시의 벡터는 16비트, 서브루틴분기 등에 있어서 대피/복귀되는 프로그램 카운터(PC)도 16비트로 된다.
하위 CPU는, 최소모드에 상당하는 64kB의 어드레스 공간을 가진다. 절대 어드레스는 16비트만을 가지며, 또한, 레지스터 간접에서는 16비트 레지스터로, 각각 전 공간을 지정한다. 벡터나 스택의 구조 등이 상기 상위 CPU(502)의 최소모드와 동등한 동작이 되며, 예외처리시의 벡터는 16비트, 서브루틴분기 등에 있어서 대피/복귀되는 프로그램 카운터(PC)도 16비트로 된다.
상기 도 7 및 도 8은 상위 CPU(502)의 최대모드에 있어서의 실효 어드레스 계산방법을 예시하는 도면이기도 하다.
도 7의 (1)에 나타낸 레지스터 간접에서는 명령코드 중에 레지스터를 지정하는 부분(레지스터 필드)을 포함하고, 이 명령코드로 지정된 범용 레지스터(ER)의 내용의 합계 32비트를 어드레스로서 메모리상의 어드레스를 지정한다. 어드레스는 24비트면 되기 때문에, 상위 8비트는 무시한다.
도 7의 (2), (3)에 나타낸 디스플레이스먼트가 부가된 레지스터 간접은, 상기 레지스터 간접과 마찬가지로 얻어진 32비트의 어드레스에, 명령코드 중에 포함되는 디스플레이스먼트를 가산한 결과를 어드레스로서 메모리상의 어드레스를 지정한다. 가산결과는 어드레스의 지정에만 사용되고, 범용 레지스터(ER)의 내용에는 반영되지 않는다. 특별히 제한되어 있지는 않지만, 디스플레이스먼트는 32비트 또는 16비트이며, 16비트 디스플레이스먼트는, 가산하는 경우 상위 16비트는 부호확장된다. 즉, 디스플레이스먼트의 상위 16비트는 16비트 디스플레이스먼트의 비트 15와 동일한 값으로서 가산이 이루어진다. 이 경우도 상위 8비트는 무시된다.
도 7의 (4)에 나타낸 포스트 인크리먼트 레지스터 간접은, 상기 레지스터 간접과 마찬가지로 얻어진 32비트의 어드레스로 메모리상의 어드레스를 지정한다. 그 후, 이 어드레스에 1, 2 또는 4를 가산하고, 그 가산결과가 범용 레지스터(ER)에 격납된다. 메모리상의 바이트 데이터를 지정하는 경우에는 1이, 워드 데이터를 지정하는 경우에는 2가, 어드레스 데이터를 지정하는 경우에는 4가 각각 가산된다. 또한, 복수 레지스터의 전송명령에서는, 레지스터 개수분을 승산한 결과가 이용된다. 가산결과의 상위 8비트도 확장 레지스터에 격납된다. 후술하는 복수 범용 레지스터 전송명령의 경우에는, 2(워드 크기) 또는 4(롱워드 크기)에 레지스터 개수를 승산한 값이 이용된다.
도 7의 (5)에 나타낸 프리디크리먼트 레지스터 간접은, 상기 레지스터 간접과 마찬가지로 얻어진 32비트의 어드레스로부터 1, 2 또는 4를 감산한 결과의 24비트의 어드레스로 메모리상의 어드레스를 지정한다. 그 후, 그 감산결과가 범용 레지스터(ER)에 격납된다. 메모리상의 바이트 데이터를 지정하는 경우에는 1이, 워드 데이터를 지정하는 경우에는 2가, 어드레스 데이터를 지정하는 경우에는 4가 각각 감산된다. 또한, 복수 레지스터의 전송명령에서는 레지스터 개수분을 승산한 결과가 이용된다. 상기와 마찬가지로, 어드레스가 24비트로 충분한 경우에는, 특별히 제한은 되어 있지 않지만, 감산결과의 상위 8비트도 확장 레지스터에 격납된다. (4)와 마찬가지로, 후술하는 복수 범용 레지스터 전송명령의 경우에는 2(워드 크기) 또는 4(롱워드 크기)에 레지스터 개수를 승산한 값이 이용된다.
도 8의 (6)(7)(8)에 나타낸 절대 어드레스는 명령코드 중에 포함되는 8비트, 16비트 또는 32비트의 절대 어드레스를 어드레스로서 메모리상의 어드레스를 지정한다. 8비트 절대 어드레스는, 상위 16비트가 논리값 1로 확장(1확장)된다. 즉, 어드레스의 비트 23∼8은 전 비트 1로 된다. 따라서 사용가능한 어드레스는 H' FFFF00∼H' FFFFFF의 256바이트이다. 또한, 16비트 절대 어드레스는, 상위 8비트가 부호확장된다. 즉, 16비트 절대 어드레스의 비트 15가 0이면 어드레스의 비트 23∼16은 전 비트 0으로 되고, 비트 15가 1이면 어드레스의 비트 23∼16은 전 비트 1로 된다. 따라서, 사용가능한 어드레스는 H' 000000∼H' 007FFF 및 H' FF8000∼H' FFFFFF의 64kB바이트이다.
도 8의 (9), (10)에 나타낸 프로그램 카운터 상대는, 프로그램 카운터 내용의 24비트의 어드레스에 명령코드 중에 포함되는 디스플레이스먼트를 가산한 결과를 어드레스로서 메모리상의 어드레스를 지정한다. 가산결과는 프로그램 카운터에 격납된다. 특별히 제한되어 있지는 않지만, 디스플레이스먼트는 16비트 또는 8비트이며, 이들 디스플레이스먼트는 가산하는 경우에는 상위 8비트 또는 16비트는 부호확장된다. 즉, 디스플레이스먼트의 상위 8비트는 16비트 디스플레이스먼트의 비트 15와, 또는 상위 16비트는 8비트 디스플레이스먼트의 비트 7과 동일한 값이라 간주하여 가산이 이루어진다. 프로그램 카운터 상대는 분기명령만으로 사용된다.
또한, 상위 CPU(502)의 최소모드에서는, 실효 어드레스의 상위 8비트가 무시되고, 하위 16비트가 유효하게 된다. 상기 외에 이미디에이트, 레지스터 간접, 메모리 간접 등의 어드레싱 모드를 실행하는데, 이들은 본 발명에 직접은 관계하지 않기 때문에 상세한 설명은 생략하기로 한다.
도 4의 프로그래밍 모델을 가지는 하위 호환의 CPU의 데이터 전송명령에서는 레지스터 간접, 16비트 디스플레이스먼트가 부가된 레지스터 간접, 포스트 인크리먼트/프리디크리먼트 레지스터 간접, 8/16비트 절대 어드레스가 사용가능하다. 실효 어드레스의 계산방법은 상기와 마찬가지이다.
도 81에는 복수 레지스터 전송명령(복수 레지스터·메모리간 전송명령, 복수 레지스터·레지스터간 전송명령)으로서의 복수 범용 레지스터의 전송명령(MOVM)의 기능이 나타나 있다. 데이터 크기는, 워드(W) 및 롱워드(L)가 가능하며, 또한 범용 레지스터간 및 범용 레지스터·메모리간의 데이터 전송이 가능하다. 또한, 어드레싱 모드는 이미디에이트를 제외하고 종래의 전송명령과 동일하다.
범용 레지스터의 선택은 2, 3, 4개의 선택이 가능하며, 롱워드 크기의 경우, ER0-ER1, ER2-ER3, ER4-ER5, ER6-ER7, …, ER30-ER31의 2개의 조합이 가능하고, ER0-ER2, ER4-ER6, …, ER28-ER30의 3개의 조합이 가능하며, ER0-ER3, ER4-ER7, …, ER28-ER31의 4개의 조합이 가능하다. 워드 크기의 경우에는, 상당하는 범용 레지스터 R만, 또는 범용 레지스터 E만 선택된다.
도 81에 있어서 Rns는 소스가 되는 범용 레지스터 번호를 의미하고, Rnd는 데스티네이션이 되는 범용 레지스터 번호를 의미하며, EAs는 소스가 되는 실효 어드레스를 의히마고, EAd는 데스티네이션이 되는 실효 어드레스를 의미한다.
도 82에는 복수 범용 레지스터의 전송명령(MOVM)에 의한 데이터 전송의 데이터 배치가 나타나 있다. (1)은 워드 크기의 2개의 데이터의 레지스터·메모리간 전송을 나타내고, (2)는 워드 크기의 2개의 데이터의 레지스터·레지스터간 전송을 나타내고, (3)은 롱워드 크기의 2개의 데이터의 레지스터·메모리간 전송을 나타내며, (4)는 롱워드 크기의 2개의 데이터의 레지스터·레지스터간 전송을 나타내고 있다.
예를들어, 도 82의 (3)에 있어서, 제 1 범용 레지스터(ERn)의 최상위 데이터, 예를들어 En의 상위 8비트(a로 나타낸다)가 실효 어드레스(EA)로 지정되는 메모리(a로 나타낸다)에 대응하고, 범용 레지스터의 다음 데이터, 예를들어 En의 하위 8비트(b로 나타낸다)가 실효 어드레스(EA+1)로 지정되는 메모리(b로 나타낸다)에 대응한다. 제 1 범용 레지스터의 최하위 데이터, 예를들어 RLn의 데이터 d의 다음은, 제 2 범용 레지스터 예를들어 ERn+1의 최상위 데이터, 예를들어 En+1의 상위 8비트의 데이터 e로 된다. 워드 크기의 경우에는, 도시는 생략하였지만, En과 En+1의 2개와, Rm과 Rm+1의 2개의 사이의 데이터 전송도 가능하다.
도 9는 CPU(502)의 기계어의 명령포맷과 명령코드를 예시하는 도면이기도 하다. CPU(502)의 명령은, 2바이트(워드)를 단위로 하고 있다. 각 명령은 오퍼레이션 필드(op), 레지스터 필드(r, gr), EA확장부(EA) 및 콘디션 필드(cc)를 포함한다.
오프레이션 필드(op)는, 명령의 기능을 나타내고, 어드레싱 모드의 지정 오퍼랜드의 처리내용을 지정한다. 오퍼레이션 필드(op)는, 명령의 선두 4비트를 반드시 포함한다. 2개의 오퍼레이션 필드를 가지는 경우도 있다.
레지스터 필드(r, gr)는 조합하여 범용 레지스터를 지정한다. 레지스터 필드(r)는 어드레스 레지스터일 때 3비트, 데이터 레지스터일 때 3비트(32비트 레지스터) 또는 4비트(8 또는 16비트 레지스터)이다. 2개의 레지스터 필드(r1, r2)를 가지는 경우, 또는 레지스터 필드(r1, r2)를 가지지 않는 경우도 있다.
레지스터 필드(gr)는 4비트 존재하는데, 특별히 제한되어 있지는 않는 하위 2비트를 유효하게 한다. 레지스터 필드(gr)를 포함하는 워드(op, gr1, gr2를 포함하는 워드)는 생략할 수 있게 되며, 생략된 경우에는, 0이 주어진 것으로 상정되어, 그룹 0의 레지스터 세트가 지정된 것이라 간주되며, 레지스터 필드(r)에서 지정되는 레지스터는 레지스터 번호가 0∼7로 되고, 범용 레지스터 ER0∼ER을 선택할 수 있다. 그와 같은 워드(op, gr1, gr2를 포함하는 명령코드)를 레지스터 확장용 전치명령코드라 칭한다.
레지스터 번호 n = gr[1 : 0]<<3+r[2 : 0]로 구해진다(<<3은 3비트 좌측 시프트를 나타낸다). 즉, gr을 상위로 하고, r의 하위 3비트 r[2 : 0]을 하위로 한 5비트로 지정되는 번호의 레비스터를 지정한다. 예를들어, gr = 0, r = 1의 경우는 레지스터 번호 n = 1로 되고, gr = 2, gr = 3의 경우는 레지스터 번호 n = 19로 된다. 이 레지스터 번호 n에 대응하는 범용 레지스터 ERn의 명령 코드의 크기를 지정하는 부분이나, r[3]의 내용에 의하여 레지스터 ER, 레지스터 E, 레지스터 R, 레지스터 H, 레지스터 RL이 지정된다. 예를들어, 데이터 크기가 롱워드, 워드, 바이트 중 어느 것인가는 명령 코드의 오퍼레이션 필드의 소정 비트로 지정된다. 데이터 크기가 워드 또는 바이트일 때, 이용하는 레지스터 위치는 r[3]로 지정된다. r[3]는, r의 하위로부터 4비트째인 비트 데이터를 의미한다. 데이터 크기가 워드일 때 r[3] = 1일 때는 레지스터 E를 지정하고, r[3] = 0일 때는 레지스터 R을 의미한다. 데이터 크기가 바이트일 때 r[3] = 1일 때는 레지스터 RL을 지정하고, r[3] = 0일 때는 레지스터 RH를 의미한다.
또한, gr1, r1은 소스 레지스터 또는 어드레스 레지스터의 레지스터 지정 필드를 의미하고, gr2, r2는 데스티네이션 레지스터 또는 데이터 레지스터의 레지스터 지정 필드를 의미한다. gr1(명령코드의 기본워드 중의 비트 7∼4)은 r1(명령코드의 기본워드 중의 비트 7∼4 또는 비트 6∼4)에, gr2(명령코드의 기본워드 중의 비트 3∼0)는 r2(명령코드의 기본워드 중의 비트 11∼8 또는 비트 3∼0)에 대응한다.
EA확장부(EA)는, 이미디에이트 데이터, 절대 어드레스 또는 디스플레이스먼트를 지정하고, 8비트, 16비트, 또는 32비트이다. 콘디션 필드(cc)는 조건분기명령(Bcc명령)의 분기조건을 지정한다.
각 명령 포맷마다 예시되어 있는 명령코드는, 16진수로 표기한 기계어를 의미한다. 그룹 지정 필드 gr1, gr2를 가지는 전치명령코드(00)를 생략하면, 기존의 명령코드가 되도록 되어 있다.
예를들어, 도 9의 (2)에 예시된 H' 0901을 단독으로 사용하는 경우, ADD. W R0, R1이 되며, 이것에 도 9의 (3)에 예시되는 그룹 지정 필드를 가지는 전치명령코드 H' 0012를 부가하면, H' 00120901은 ADD. W R8, R17이 된다.
또한, 암묵적으로 사용되는 그룹 0을 지정하는 H' 0000은 NOP(무조작)명령으로 된다. H' 00xx(xx는 01∼FF)는 그룹필드를 지정하고, 연속적으로 다음 명령코드를 실행하는(인터럽트를 금지한다) 것 외에는 NOP명령과 마찬가지로 PC의 인크리먼트를 수행하여 최소의 스테이트수로 지정된다.
레지스터 지정필드(gr)는 4비트이기 때문에, 논리적으로는 범용 레지스터 그룹을 16으로 확장할 수 있다. 이 경우에서는 32비트 범용 레지스터 128개(또는 16비트 범용 레지스터 2256개)를 이용할 수 있다.
레지스터 지정필드(gr)에 대응하는 오퍼레이션 필드는 복수 종류 있어도 좋다. 예를들어, 단순히 레지스터 지정만을 수행하는 것과, 그 밖의 기능(데이터 크기 등)을 절환하는 기능을 함께 가지는 오퍼레이션 코드를 준비하여도 좋다.
도 10은 CPU(502)에 있어서의 단일한 범용 레지스터의 데이터 전송명령의 기계어의 명령코드를 예시하는 도면이기도 하다. 각각의 어드레싱 모드의 실효 어드레스의 계산을 도 7 및 도 8에 따르고 있으며, 기계어의 명령포맷은 도 9에 따르고 있다.
도 83에는 복수 범용 레지스터의 전송명령(MOVM)과 같은 명령을 나타내는 전치명령코드(명령확장용 전치명령코드)가 예시된다. 복수 레지스터의 전송명령은, 명령확장용 전치명령코드와 기존의 전송명령코드를 조합하여 복합 명령화시켜 실현된다.
명령확장용 전치명령코드는 이하와 같다. 비트 2(최하위로부터 3비트째)가 레지스터의 크기를 나타내고, B' 0(B'는 바이너리 데이터인 것을 의미한다)이 워드 크기, B' 1이 롱워드 크기를 의미한다. 비트 5, 4가 범용 레지스터 개수를 나타내며, B' 01이 2개, B' 10이 3개, B' 11이 4개로 한다. 이 명령코드는 하위 CPU의 명령세트에 대하여 추가된 새로운 명령코드로 된다.
이 명령확장용 전치명령코드를 이용한 데이터 전송명령은, 단일한 범용 레지스터와 메모리의 데이터 전송명령(MOV)과 같은 워드 크기의 명령코드(예를들어, 절대 어드레스 16비트일 때 2워드)에 롱워드 크기를 나타내는 명령코드가 부가되어 구성되는(예를들어, 절대 어드레스 16비트일 때 합계 3워드) 것과 등가이다.
도 83에 의하면, 크기를 절환하는 정보를 보지하고 있기 때문에, 단일한 범용 레지스터와 메모리의 데이터 전송명령의 롱워드 크기를 나타내는 명령코드를 대신하여, 상기 명령확장용 전치명령코드를 부가하면 된다. 명령코드길이를 길게 하지 않고도 복수 범용 레지스터의 데이터 전송명령(MOV)을 실현할 수 있다.
또한, 기존의 복수 범용 레지스터의 스택으로의 대피명령인 「STM ER0-3, @-SP」와, 본 발명의 명령인 「MOVM. L ER0-3, @-SP」와는 개략적으로 동일한 동작이 되지만, 스택 상에서의 범용 레지스터의 배치순서가 다르다. STM명령에서는, 스택의 선두(실효 어드레스)로부터 ER3, ER2, ER1, ER0의 순서대로 데이터가 배치되는 것에 반하여, MOVM명령에서는, 스택의 선두로부터 ER0, ER1, ER2, ER3의 순서대로 데이터가 배치된다. 상기 쌍방의 명령에 의한 처리는 후술하는 바와 같이 어드레스 연산수법에 있어서 크게 상이하게 된다.
상기 명령 확장용 전치명령코드를 도입하는 경우에는 상기 스택으로의 퇴피명령을 가지지 않아도 동작상 지장은 없지만, 소프트웨어 자산을 유효하게 이용하는 관점에서 보면 양방의 명령코드를 가지는 것이 바람직한다.
또는, 복수 레지스터의 전송명령에 있어서의 범용 레지스터의 판독/기록의 순서를 번호가 큰 것부터 사용하는 것으로 한다면, 상기 명령을 동일한 동작으로 할 수도 있다. 또한, 범용 레지스터의 판독/기록의 순서를 내부 I/0 레지스터 등으로 지정할 수 있게 하여도 좋다.
도 84에는 상위 CPU(502)의 상세한 한 예가 나타나 있다. 이 CPU(502)는 제어부(CONT)와 실행부(EXEC)로 구성된다.
제어부(CONT)는 명령 레지스터(IR1), 명령 레지스터(IR2), 명령 디코더(DEC), 레지스터 셀렉터(RSEL), 인터럽트 제어부(INTC)를 가진다. 하위 CPU에 대하여 명령 레지스터(IR2)가 추가되어 레지스터 셀렉터(RSEL)의 구성이 상이해져 있다. 명령 디코더(DEC)도 명령 레지스터(IR2)의 추가나 레지스터 셀렉터(RSEL)의 구성의 변경에 대응하여 변경되어 있다. 특히, 제어부(CONT)는 명령 확장용 전치명령코드의 유무에 따른 제 1 제어, 레지스터 확장용 전치명령코드의 유무에 따른 제 2 제어를 수행하도록 되어 있다.
제 1 제어는, 명령으로 지정가능한 복수의 범용 레지스터의 조합을 고정적으로 하고, 당해 조합이 고정적인 복수의 범용 레지스터와 어드레스 공간상의 메모리 어드레스 또는 범용 레지스터와의 사이에서 데이터 전송을 가능하게 하는 제어를 수행한다. 상기 전송명령의 실효 어드레스의 계산은, 연산기(ALU)로 1회만 수행하도록 하고, 후속 어드레스에 대하여는 어드레스 버퍼(AB)의 인크리먼트 또는 디크리먼트 기능으로 대처시킨다.
제 2 제어는, 상위 호환을 고려한 레지스터 지정제어이며, 한쪽에서는, 확장된 범용 레지스터를 레지스터 확장용 전치명령코드를 이용하여 지정하도록 하고, 다른쪽에서는, 생략가능한 레지스터 지정필드 gr(gr1, gr2)이 생략되었을 때 생략불가능한 레지스터 지정필드 r(r1, r2)에 의한 레지스터 지정을 암묵적으로 레지스터 그룹 0에 포함되는 레지스터의 지정으로 간주하는 제어를 수행한다.
상기 명령 디코더(DEC)는, 예를들어 마이크로 ROM 혹은 PAL(Programmable Logic Array) 또는 포선논리로 구성된다.
레지스터 셀렉터(RSEL)에는, 상기 명령 디코더(DEC)의 출력신호, 명령 레지스터(IR1, IR2)의 출력신호, 그리고 상기 SYSC3에 포함되는 내부 I/O 레지스터 CPUCR의 출력신호 ispgr, sspgr가 공급되어진다.
상기 명령 레지스터(IR1)는 내부 데이터 버스(IDB)로부터 명령이 공급된다. 상기 명령 레지스터(IR1)의 출력은 또 하나의 명령 레지스터(IR2), 상기 명령 디코더(DEC) 및 상기 레지스터 셀렉터(RSEL)에 결합된다. 상기 명령 레지스터(IR2)의 출력은 상기 레지스터 셀렉터(RSEL)에 결합된다.
상기 명령 디코더(DEC)의 출력은 레지스터 셀렉터(RSEL) 및 상기 명령 레지스터(IR2)에 결합된다. 명령 디코더(DEC)는 명령 레지스터(IR1)에 페치된 명령의 오퍼레이션 필드의 오퍼레이션 코드를 해독한다.
명령 레지스터(IR1)에 페치된 명령 코드가 레지스터 확장용 상기 전치명령코드일 때, 명령 디코더(DEC)가 이를 해독함으로써, 당해 레지스터 확장용 전치명령코드의 레지스터 그룹 지정필드(gr)의 레지스터 지정정보를 명령 레지스터(IR2)에 래치시킨다. 이 때의 래치신호는 명령 디코더(DEC)로부터 출력된다. 명령 레지스터(IR2)에 래치된 레지스터 필드 지정정보 및 계속해서 명령 레지스터(IR1)에 페치된 후속 명령에 포함되는 레지스터 필드(r)의 레지스터 지정정보는 레지스터 셀렉터(RSEL)에서 해독되며, 이들 정보로 직접적으로 지정된 레지스터 그룹 중의 레지스터가 선택되고, 선택된 레지스터를 이용하여 당해 후속 명령이 실행된다. 이 명령실행 후, 상기 명령 디코더(DEC)는 상기 명령 레지스터(IR2)의 래치정보를 모든 비트값 "0"(레지스터 그룹 0의 지정정보)으로 클리어하기 위한 세트신호를 명령 레지스터(IR2)에 공급한다. 따라서, 그 후에 전치명령코드를 생략한 명령이 명령 레지스터(IR1)에 페치되어도 명령 레지스터(IR2)의 출력은 레지스터 그룹 0의 지정정보를 유지하는 결과, 레지스터 셀렉터(RSEL)는 암묵적으로 레지스터 그룹 0이 지정되어 있다고 간주하여 명령 레지스터(IR1)로부터의 레지스터 지정정보에 따른 레지스터를 레지스터 그룹 0으로부터 선택한다.
실행부(EXEC)에는, 또한 임시 레지스터(TRA, TRD), 산술논리연산기(ALU), 인크리멘터(INC), 판독 데이터 버퍼(RDB), 기록 데이터버퍼(WDB0, 어드레스 버퍼(AB)를 포함한다. 이들 회로 블럭은 데이터 버스(GB, DB, WB)에 의하여 상호 접속되어 있다. 상기 데이터 버스(GB, DB)는 레지스터 ER0∼ER31에 대한 데이터 판독버스, 데이터 버스(WB)는 레지스터 ER0∼ER31에 대한 데이터 기록버스로서 위치결정된다. 또한, 상세한 도시를 생략하였지만, 실행부(EXEC)의 각 부는 범용 레지스터의 분할 E(16비트), H(8비트), L(8비트)에 호응하여 분할되어 있다.
상기 산술논리연산기(ALU)는 명령에 의하여 지정되는 각종 연산이나 실효 어드레스의 계산 등을 이용한다. 상기 인크리멘터(INC)는 주로 프로그램 카운터(PC)의 가산에 이용된다.
판독 데이터 버퍼(RDB)는, 상기 ROM(504), RAM(505), 내부 I/O 레지스터, 혹은 도시를 생략한 외부 메모리로부터 판독한 명령코드나 데이터를 일시적으로 격납한다. 기록 데이터 버퍼(WDB)는 ROM(504), RAM(505), 내부 I/O 레지스터 혹은 외부 메모리로의 기록 데이터를 일시적으로 격납한다. 판독 데이터 버퍼(RDB), 기록 데이터 버퍼(WDB)에 의하여 CPU(502)의 내부동작과 CPU(502)의 외부 판독/기록동작의 타이밍을 조정하고 있다.
어드레스 버퍼(AB)는, CPU(502)가 판독/기록하는 데이터의 어드레스를 일시적으로 격납하는 것 외에, 격납한 내용에 대한 인크리먼트 기능과 인크리먼트 결과를 보지하는 기능을 가지고 있다. GB버스, DB버스, WB버스가 32비트엔 것에 대해, IDB가 16비트이기 때문에, 32비트의 데이터를 2회의 16비트 데이터의 접속으로 하는 경우에, 2회째의 데이터 접속에 앞서 어드레스 버퍼(AB)의 내용을 인크리먼트한다.
도 85에는 상기 레지스터 셀렉터(RSEL)의 일부와 명령 레지스터(IR2)와의 상세한 블럭도가 나타나 있다.
상기 명령 레지스터(IR2)는, 보지수단으로서의 래치회로(LGR1, LGR2)를 가진다. 이들 래치회로(LGR1, LGR2)는, 상술한 대로 레지스터 그룹 지정필드(gr1, gr2)의 레지스터 그룹 지정정보를 래치한다.
도 85에 따르면, 상기 래치회로(LGR1, LGR2)는, 이른바 리셋이 부가된 D형 플립플롭에 의하여 구성되어 있다. 리셋신호(RSLGR)로서, 명령 디코더(DEC)로부터 지정되는 명령실행 종료신호(RSLGR)를 입력한다. 래치클록으로서, 명령 디코더(DEC)로부터 지정되는 래치클록(LGRCL)을 입력하고, 또한 데이터로서 명령 레지스터(IR1)가 보지하는 명령코드의 비트 7∼4, 3∼0(그룹 4의 경우에는 비트 5, 4, 1, 0만으로도 좋다)을 입력한다. 래치클록(LGRCL)은, 레지스터 그룹을 지정하는 명령코드(생략가능한 레지스터 확장용 전치명령코드)를 실행하였을 때에 활성상태가 되고, 그 때의 레지스터 필드(gr)인 비트 7∼4, 3∼0을 래치시킨다. 래치회로(LGR1, LGR2)는, 명령의 실행종료 시점에서 명령 디코더(DEC)로부터의 제어신호인 리셋신호(RSLGR)를 바탕으로 소정의 값, 예를들어 전체 비트 0으로 설정되어 레지스터 블럭 0을 지정하는 상태로 초기화된다. 범용 레지스터 그룹을 지정하는 레지스터 확장용 전치명령코드를 가지지 않는 명령은, 래치회로(LGR1, LGR2)가 값 "0"으로 클리어된 채 되어 있기 때문에, 명령실행이 이루어질 때 레지스터 그룹 0의 범용 레지스터가 지정되어지게 된다.
레지스터 셀렉터(RSEL)의 데스티네이션 레지스터 지정측에는, 래치회로(LGR2)로부터 출력되는 레지스터 그룹 지정필드(gr2)의 정보를 보지하는 래치회로(LAT1)와, 명령 레지스터(IR1)로부터 출력되는 레지스터 지정필드(r2)의 정보를 래치하는 래치회로(LAT2)가 설치되어 있다. 이들 래치회로(LAT1, LAT2)는, 시스템 클록 Φ의 반전클록 Φ#으로 래치동작을 수행하도록 되어 있으며, 소스 레지스터의 선택동작보다 늦게 데스티네이션 레지스터의 선택동작이 이루어진다. 이로써, 데스티네이션측 레지스터 지정정보의 래치 타이밍, 즉 데스티네이션 레지스터 선택 타이밍이 소스 레지스터 선택 타이밍 보다도 0.5 스테이트 느리게 된다. 소스 레지스터는 어드레스 레지스터로서 선행하여 선택되고, 데스티네이션 레지스터는 데이터의 기록을 위하여 늦게 선택되어질 수 있게 되어 있다.
또한, 명령 레지스터(IR1)로부터 출력되는 레지스터 지정필드(r1)의 정보와, 래치회로(LAT2)로부터 출력되는 레지스터 지정필드(r2)의 정보는 논리회로(LOG1, LOG2)에 입력되고, 입력된 레지스터 지정필드(r1, r2)의 비트 0과 1이 제어신호 s1∼s3에 의하여 제어되며, 논리회로(LOG1, LOG2)로부터 출력되어 조합 고정적인 레지스터 선택에 이용된다. 상기 제어신호 s1∼s3은 디코더(DEC)로부터 출력된다. 제어신호 s1∼s3은 복수 범용 레지스터의 전송명령의 실효시에 사용되며, 그 밖에는 전부 0으로 되어 있어 LOG1, LOG2의 입력 r1, r2가 그대로 출력된다.
상기 제어신호 s1∼s3의 기능은 도 86에 예시되어 있다. 제어신호 s1은 레지스터 지정필드(r1, r2) 정보의 비트 0을 1로 고정한다. 마찬가지로, 제어신호 s2는 레지스터 지정필드(r1, r2) 정보의 비트 1을 1에, 비트 0을 0에 고정한다. s3은 레지스터 지정필드(r1, r2) 정보의 비트 1과 비트 0을 함께 1에 고정한다. 범용 레지스터 2개를 지정하는 경우에는 제어신호 s1이 출력된다. 3개인 경우에는 s1, s2의 순서대로 출력되며, 4개인 경우에는 s1, s2, s3의 순서대로 출력된다. 이로써, 복수개의 범용 레지스터를 대상으로 하는 전송명령에 있어서 최초로 하나의 레지스터가 레지스터 지정필드(r1, r2)에서 지정되면, 그 후에는 그에 계속되는 레지스터가 상기 제어신호 s1∼s3에 의하여 규정된 순서대로 선택된다. 이로써, 조합 고정적으로 순서대로 범용 레지스터가 선택된다. 상기 제어신호 s1∼s3의 출력논리로부터 명확히 알 수 있듯이, 복수의 범용 레지스터의 전송명령에 있어서 3비트 또는 4비트의 레지스터 지정영역(r1, r2)에서 레지스터를 지정할 때, 당해 레지스터 지정영역(r1, r2)에 설정가능한 초기값은, 그 명령이 전송대상으로 하는 범용 레지스터의 개수에 의하여 다르며, 2개의 경우에는 ***0, 3개인 경우에는 **00, 4개인 경우에는 **00이어야만 한다. 기호 *는 어떠한 값을 도입하여도 좋다. 이로써, 레지스터 셀렉터(SEL) 자체를 그 밖의 명령과 공통화하고, 상기 복수 범용 레지스터 전송명령에 대처할 수 있기 때문에, 논리적 규모의 증가를 극력하게 억지할 수 있다.
도 87에는 상기 어드레스 버퍼(AB)의 한 예가 나타나 있다. 어드레스 버퍼(AB)는, 래치회로(521), 인크리멘터(522), 셀렉터·버퍼(523)로부터 구성된다. 상기 래치회로(521)는, 내부버스(GB)와 인크리멘터(522)의 출력을 입력한다. 제어신호 mabinc가 활성상태인 경우에 인크리멘터(522)의 출력이 래치되고, 비활성상태인 경우에 버스 GB의 내용이 래치된다.
상기 인크리멘터(522)는, 래치회로(521)의 출력을 입력하고, +2의 가산을 수행한다. 제어신호 mabinc가 활성상태로 됨으로써, 인크리먼트된 값이 래치회로(521)로부터 인크리멘터(522)에 반복해서 귀환되어짐으로써, 복수회의 인크리먼트 +4, +6, …가 가능하게 된다.
셀렉터·버퍼(523)는 래치회로(521)과 인크리멘터(522)의 내용을 입력한다. 제어신호 mabinc가 활성상태인 경우에 인크리멘터(522)의 출력이 선택되고, 비활성상태인 경우에 래치회로(521)의 출력이 선택된다. 선택된 내용은, 버스권리 액크놀로지 신호에 따라서 내부 어드레스 버스(IAB)에 출력된다. 버스권리 액크놀로지가 비활성인 경우에는, 어드레스 버퍼(AB)는 내부 어드레스 버스(IAB)로의 출력을 수행하지 않아 출력은 고 임피던스상태로 된다.
도 88 및 도 89에는 레지스터·레지스터간의 워드 크기의 전송명령(MOV 및 MOVM명령)에 대한 디코더(DEC)의 제어논리의 일부가 논리기술에 의하여 나타나 있다. 도 9의 기술은 도 88 뒤에 계속되는 나머지 논리기술이다. 도 93은 도 88 내지 도 89에 기재된 논리기술의 제어에 의한 레지스터·레지스터간의 단일 및 복수 범용 레지스터의 전송명령(MOV 및 MOVM)에 의한 제어동작에 대응되는 순서도이다.
도 88 및 도 89에 나타낸 논리기술은, RTL(Register Transfer Level) 혹은 HDL(Hardware Description Language)기술이라 불리며, 공지된 논리합성수단에 의하여 논리회로에 논리전개할 수 있다. HDL은 IEEE1364로서 표준화되어 있다. 이에 나타내지는 논리기술의 구문(構文)은 케이스(case)문에 준거하고 있으며, always@의 다음 ( )내에서 정의된 값 혹은 신호에 변화를 가졌을 때, 그 이하의 기술행의 처리를 수행한다는 내용으로 되어 있다. 「8' b00001000」은 8비트길이의 00001000을 의미한다. 또한, 도에 있어서, 소문자 신호는 명령 디코더(DEC)에서 생성되어 출력되는 신호로 하고, 대문자 신호는 명령 디코더(DEC)에 입력된 신호로 한다.
도 88의 논리기술에 있어서 전송명령이 단일 범용 레지스터를 이용할지, 복수 범용 레지스터를 이용할지는 신호 MOD2∼MOD4에 의하여 지시된다. 신호 MOD2는 2개의 범용 레지스터의 지정을 나타내고, 신호 MOD3는 3개의 범용 레지스터의 지정을 나타내며, 신호 MOD4는 4개의 범용 레지스터의 지정을 나타낸다. 이들 신호 MOD2∼MOD4는 명령확장용 전치명령코드의 내용에 의하여 생성된다.
도 88 및 도 89의 논리기술에서는 스테이트 코드(TMG)(5비트의 정보)에 따라서 제어신호를 생성하도록 되어 있으며, 현 시점에서의 스테이트 코드의 값과 그 때의 MOD2∼MOD4의 값에 따라서 다음 스테이트 코드 NEXTTMG의 값을 결정하도록 되어 있다.
단일 레지스터의 전송명령에서는 스테이트 코드(TMG)는 1(0001)이며, 이에 대하여 복수 레지스터의 전송명령 고유의 데이터 전송제어를 위하여 스테이트 코드 (TMG) 5(00101), 9(01001), 13(01101)이 더해져 있다.
복수의 레지스터 전송명령은, MOD2∼MOD4 신호로 나타내진다. 도 88의 논리기술의 제 1 부분(1)에서 스테이트 코드(TMG)가 생성된다. 단일 레지스터의 경우, 스테이트 코드(TMG)는 1이다. 복수의 레지스터의 경우, 예를들어 MOD4 = 1에서는 TMG는 1→5→9→13으로 진행한다. MOD3 = 1에서는 스테이트 코드 13이, MOD2 = 1에서는 스테이트 코드 9 및 13이 생략된다.
또한, NEXTTMG[5] = 0일 때, 다음 TMG는 NEXTTMG[4 : 0]으로 된다. NEXTTMG[5] = 1일 때, 다음 TMG는 5' b00001로 된다.
도 89의 논리기술의 제 2 부분(2)에서 버스제어를 수행한다. nop = 0은 버스 접속개시, nop = 1은 버스 접속금지를 지시한다. data = 0은 명령판독, data = 1은 데이터 접속을 지시한다.
본 전송명령의 경우, 스테이트 코드(TMG)가 1에서 명령판독을 수행하고, 스테이트 코드(TMG)가 5, 9, 13에서는 버스 접속을 수행하지 않는다.
명령판독의 경우에는 소정의 타이밍에서 내부 데이터 버스(IDB)의 내용이 명령 레지스터(IR1)와 판독 데이터 버퍼(RDB)에 격납된다. 데이터 판독의 경우에는 소정의 타이밍에서 내부 데이터 버스(IDB)의 내용이 판독 데이터 버퍼(RDB)에 격납된다. 데이터 기록의 경우에는 소정의 타이밍에서 기록 데이터 버퍼(WDB)의 내용이 IDB에 출력된다.
도 89의 논리기술의 제 3 부분(3)에서 전송 데이터를 제어한다. 각 스테이트에서 범용 레지스터로부터 내부버스(DB)로 출력하고, 산술논리연산기(ALU)를 경유하여 내부버스(WB)로부터 범용 레지스터로의 기록을 지시한다.
어떠한 경우에도, 범용 레지스터를 지정한 후, 레지스터 지정필드(r2)의 갱신을 수행한다. 신호 s1이 1일 때에는, 레지스터 필드(r1)의 비트 0을 1에 고정한다. 마찬가지로, 신호 s2는 비트 1을 1에, 비트 0을 0에 고정한다. 신호 s3는 비트 1, 0을 1에 고정한다.
스테이트 코드(TMG)의 1에서는 단일 레지스터의 전송명령, 즉 MOD2∼MOD4가 모두 0일 때, ccrset신호가 1로 되고, 콘디션 코드 레지스터(CCR)의 소정비트가 전송 데이터를 반영하여 변화하도록 된다.
도 90 내지 도 92에 기재된 논리기술은, 16비트 절대 어드레스에 의한 전송명령(MOV 및 MOVM명령)에 대한 디코더(DEC)의 제어논리의 일부를 나타낸다. 도 91의 기술은 도 90 뒤에 계속되는 나머지 논리기술, 도 92의 기술은 도 91 뒤에 계속되는 나머지 논리기술이다. 도 94는 도 90 내지 도 92에 기재된 논리기술의 제어에 의한 16비트 절대 어드레스에 의한 단일 및 복수 범용 레지스터의 전송명령(MOV 및 MOVM)에 의한 제어동작에 대응되는 순서도이다.
도 10의 「(4) 16비트 절대 어드레스」에 나타낸 바와 같이, 데이터 크기는 IR[8](명령 레지스터(IR)의 최하위로부터 8비트째) = 0일 때 바이트 크기, IR[8] = 1일 때 워드크기, 전송방향은 IR[7] = 0일 때 메모리→범용 레지스터(판독형), RI[7] = 1일 때 범용 레지스터→메모리(기록형)의 전송으로 된다.
워드크기/롱워드 크기, 단일 레지스터/복수 레지스터의 선택은 신호 LNG, 신호 MOD2∼MOD4에 의하여 지시된다. 신호 LNG는 롱워드 크기를 나타낸다. 신호 MOD2∼MOD4는 각각 2∼4개의 레지스터 선택을 나타내며, 명령확장용 전치명령코드에 따라서 생성된다.
단일 레지스터의 전송명령의 흐름(스테이트 코드 1→2→3)에 대하여, 복수 레지스터의 전송명령 고유의 데이터 전송의 스테이트(스테이트 코드 6, 10, 14)와, 단일/복수 레지스터의 전송명령의 롱워드 크기일 때의 스테이트(스테이트 코드 18, 22, 26, 30)가 더해져 있다.
도 90에 나타낸 논리기술의 제 1 부분(1)에서 스테이트 코드(TMG)가 생성된다. 단일 레지스터의 경우, 스테이트 코드(TMG)는 1→2→3으로 진행한다. 복수 레지스터의 경우, 예를들어, MOD4 = 1에서는 TMG는 1→2→6→10→14→3으로 진행한다. MOD3 = 1에서는, 스테이트 코드 14가 생략되고, MOD2 = 1에서는 스테이트 코드 10 및 14가 생략된다. 또한, 롱워드 크기의 경우에는, 스테이트 코드 18, 22, 26, 30이 추가된다.
도 91의 논리기술의 제 2 부분(2)에서는 버스제어를 수행한다. 본 전송명령의 경우, 스테이트 코드 1, 3에서 명령판독을 수행하고, 스테이트 코드 2, 18, 6, 22, 10, 26, 14, 30에서 데이터 접속을 수행한다. 데이터 접속의 판독/기록은 IR[7]에 의하여 지시된다. 마지막 데이터 접속 이외에는 long = 1로 하고 버스권리 이양금지를 지시한다.
명령판독의 경우는, 소정의 타이밍에서 내부 데이터 버스(IDB)의 내용이 명령 레지스터(IR)와 판독 데이터 버퍼(RDB)에 격납된다. 데이터 판독의 경우는 소정의 타이밍에서 내부 데이터 버스(IDB)의 내용이 판독 데이터 버퍼(RDB)에 격납된다. 데이터 기록의 경우는 소정의 타이밍에서 기록 데이터 버퍼(WDB)의 내용이 내부 데이터 버스(IDB)에 출력된다.
도 91에 나타낸 논리기술의 제 3 부분(3)에서 실효 어드레스를 계산한다. 본 전송명령의 경우, 스테이트 코드 2에서 판독 데이터 버퍼(RDB)에 보지하고 있는 명령코드의 EA확장부 16비트를 신호 dbrext에 의하여 32비트로 부호확장한 후, 내부버스(GB)에 출력한다. 내부버스(GB)의 내용은 어드레스 버퍼(AB)에 매 스테이트 격납되도록 되어 있으며, 특별히 제어는 필요없다. 스테이트 코드 18, 6, 22, 10, 26, 14, 30에서는 신호 mabinc에 의하여 어드레스 버퍼(AB)에 보지한 내용의 인크리먼트(+2)를 수행한다.
도 92에 나타낸 논리기술의 제 4 부분(4)에서, 전송 데이터를 제어한다. 판독형(IR[7] = 0)의 경우는, 스테이트 코드 6, 10, 14, 3에서 판독 데이터를 판독 데이터 버퍼(RDB)로부터 내부버스(GB)로 출력하고, 산술논리연산기(ALU)와 내부버스(WB)를 경유하여 범용 레지스터로 격납한다. 기록형(IR[7] = 1)의 경우는, 스테이트 코드 2, 6, 10, 14에서 범용 레지스터로부터 내부버스(DB)로 출력하고, 기록 데이터 버퍼(WDB)를 경유하여 내부 데이터 버스(IDB)에 출력한다. 어떠한 경우라도 범용 레지스터를 지정한 후 레지스터 지정필드 r1의 갱신을 수행한다. 신호 s1이 1일 때에는, 레지스터 필드 r1의 비트 0을 1에 고정한다. 마찬가지로, 신호 s2는 비트 1을 1에, 비트 0을 0에 고정한다. 신호 s3은 비트 1, 0을 1에 고정한다. 이들은, 도 93에 있어서 r2++로 나타내고 있다.
스테이트 코드 3에서는, 단일 레지스터의 전송명령, 즉 신호 MOD2∼MOD4가 모두 0일 때, 신호 ccrset가 1로 되고, 콘디션 코드 레지스터(CCR)의소정비트가 전송 데이터를 반영하여 변화하게 된다.
그 밖의 어드레싱 모드에 대해서도, 상기와 마찬가지로, 소정의 명령판독과실효 어드레스의 계산에 덧붙여 스테이트 코드 18, 6, 22, 10, 26, 14, 30에 상당하는 데이터 접속의 동작을 더하면 된다. 이들은 각종 어드레싱 모드에 공통으로 할 수 있다.
도 95에는 레지스터·레지스터형의 제 1 전송명령(MOV. L ER0, ER1), 제 2 전송명령(MOV. L ER8, ER17) 및 복수 레지스터의 전송명령의 제 1 예(MOVM. W R0-R1, E28-E29)의 실행 타이밍이 예시된다.
레지스터·레지스터형의 제 1 전송명령(MOV. L ER0, ER1)은, 그룹 0의 범용 레지스터만을 사용하기 때문에, 범용 레지스터 그룹을 지정하는 명령코드를 필요로 하지 않고, 상기 CPU(2)에 대한 하위 CPU와 동일한 1워드의 명령으로 한다.
도 95에서는, 특별히 제한되어 있지는 않지만, 내장 ROM(504), RAM(505)의 판독/기록을 1스테이트에서 판독/기록가능하게 하는 경우의 타이밍을 나타내고 있다. 이하의 설명에 있어서, Φ의 상승에 동기하는 1스테이트를 Φ동기 스테이트라 칭하고, Φ#(클록신호 Φ의 반전클록신호이며, 도시를 생략한다)의 상승에 동기하는 1스테이트를 Φ#동기 스테이트라 칭한다.
사이클 T0의 Φ#동기 스테이트에서, CPU(502)의 어드레스 버퍼(AB)로부터 어드레스가 내부 어드레스 버스(IAB)에 출력된다. 또한, 명령 디코더(DEC)로부터 명령 페치(if)를 나타내는 버스 명령어(BCMD)가 출력된다.
사이클 T1의 Φ동기 스테이트에서, 내부 어드레스 버스(IAB)의 내용이 내부 어드레스 버스(PAB)에 출력되고, 버스 명령어(BCMD)를 바탕으로 판독 사이클이 개시되어, 내부 데이터 버스(PDB)에 데이터가 출력된다. 사이클 T1의 Φ#동기 스테이트에서 내부 데이터 버스(PDB)의 판독 데이터가 내부 데이터 버스(IDB)에 얻어지며, 이것을 사이클 T2의 Φ동기 스테이트에서 명령 레지스터(IR1)에 래치한다. 이상의 동작은 이전의 명령실행의 제어에 의하여 이루어진다(프리페치). 여기서, 내장 ROM(504), RAM(505)은 내부 어드레스 버스(PAB) 및 내부 데이터 버스(PDB)에 접속되어 있지 않지만, 상기 내부버스(PAB, PDB) 상당의 동작을 모듈 내에서 수행하며, 본 타이밍도에는 이 모듈 내의 동작을 나타내고 있다.
직전의 명령 실행이 종료하면, 가장 빠르게 명령 실행이 개시되는 경우에는, 사이클 T2의 Φ동기 스테이트에서 명령코드가 명령 디코더(DEC)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. 명령의 일부인 레지스터 지정필드(r1, r2)의 값이나 복수 레지스터의 레지스터 개수에 의하여 형성되는 신호 s1∼s3를 회로 LOG1, LOG2가 받아 레지스터 필드(r1, r2)의 값을 제어하고 그것을 출력한다. 회로 LOG1의 출력은 신호 SEL1, 회로 LOG2의 출력을 신호 SEL2로 칭한다.
레지스터간 연산명령에서는, 사이클 T2의 Φ#동기 스테이트에서 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스 신호가 출력된다. 이 때, 래치회로(LGR1, LGR2)가 모두 0으로 클리어되어 있기 때문에, 상기 신호 SEL1, SEL2와 명령 디코더(DEC)가 출력하는 제어신호 B(Rs→DB)를 바탕으로 레지스터 셀렉터(RSEL)는 레지스터 선택신호 B(ER0→DB)를 생성한다.
사이클 T3로부터 다음 다음 명령(본 예에서는 MOV. L ER8, ER17)이 판독된다. 사이클 T3의 Φ동기 스테이트에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 신호 SEL1, SEL2와 제어신호 C(WB→Rd)를 바탕으로 레지스터 셀렉터(RSEL)가 레지스터 선택신호 C(WB→ER1)를 생성한다. 레지스터 선택신호 B가 레지스터를 선택하고, 소스측의 레지스터(Rs)의 데이터를 산술논리연산기(ALU)에 입력한다. 산술논리연산기(ALU)의 연산내용은, 명령 디코더(DEC)가 제어신호 C에 의하여 지시한다. 가산, 논리연산, 시프트 등은 1클록에서 연산을 수행할 수 있다. 예를들어, 상기 명령에서는 32비트의 가산이 지시된다(버스 GB측의 입력은 0이 된다).
다음 명령의 명령 디코더(DEC)로의 로드가 지시된다. 제어신호 B(RSLGR)에 의하여 래치회로(LGR1, LGR2)의 클리어가 지시된다. 래치회로(LGR1)는 사이클 T3의 Φ동기 스테이트에서, 래치회로(LGR2)는 사이클 T3의 Φ#동기 스테이트에서 클리어된 결과가 전달된다.
사이클 T3의 Φ#동기 스테이트에서, 산술논리연산기(ALU)의 연산결과가 내부버스(WB)를 경유하여 레지스터 선택신호 C가 선택한 데스티네이션측의 레지스터(ER1)에 기록된다. 도시되지는 않았지만, 제어신호 C에 의하여 콘디션 코드 레지스터(CCR)의 갱신을 수행한다. 또한, 다음 다음 명령을 명령 레지스터(IR1)에 입력한다. 동시에, 다음 명령의 실행이 개시되고, 예를들어 프로그램 카운터(PC)의 내용을 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력된다.
그룹 0 끼리의 레지스터간 연산을 실질적으로 1스테이트에서 실행할 수 있다.
레지스터·레지스터형 제 2 전송명령(MOV. L ER8, ER17)은, 범용 레지스터 그룹을 지정하는 명령코드를 부가하여 2워드 명령으로 한다. 제 2 워드는 상기 MOV. L R0, R1과 동일하다. 즉, gr1 = 1이기 때문에, 동일한 r1 = 0에 대하여 레지스터 번호 n = 8, 또한 gr2 = 2이기 때문에, 동일한 r2 = 1에 대하여 레지스터번호 n = 17으로 해석된다.
사이클 T2의 Φ#동기 스테이트에서, CPU(502)의 어드레스 버퍼(AB)로부터 어드레스가 어드레스 버스(IAB)에 출력된다.
사이클 T3의 Φ동기 스테이트에서, 어드레스 버스(IAB)의 내용이 어드레스 버스(PAB)에 출력되고, 판독 사이클이 개시된다. 사이클 T3의 Φ#동기 스테이트에서 판독 데이터가 내부 데이터 버스에 얻어지며, 이것을 사이클 T4의 Φ동기 스테이트에서 명령 레지스터(IR1)에 래치한다. 이것은, 레지스터 그룹 필드를 가지는 생략가능한 명령워드(전치명령코드)이다.
계속해서, 사이클 T4의 Φ#동기 스테이트에서 다음 어드레스(+2된 내용)가 어드레스 버스(IAB)에 출력되며, 이 판독 데이터가 사이클 T5의 Φ동기 스테이트에서 명령 레지스터(IR1)에 래치된다. 이상의 동작은 상기 레지스터·레지스터형 제 1 전송명령 및 도시되지 않은 다음 명령의 실행 제어에 의하여 이루어진다.
사이클 T4의 Φ동기 스테이트에서 명령코드(전치명령코드)가 명령디코더(DEC)에 입력되고, 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. 그룹 필드 래치신호(LGRCL)가 발행되어 레지스터 그룹 지정필드(IR1의 비트 7∼0)가 래치회로(LGR1, LGR2)에 래치된다.
사이클 T4의 Φ#동기 스테이트에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스 신호가 출력된다.
사이클 T5로부터 또한 다음 명령(본 예에서는 MOVM. W R0-R1, E28-E29)이 판독된다.
사이클 T5의 Φ동기 스테이트에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 제 1 워드와 제 2 워드 이후가 분할되지 않기 위한 제어신호 B(control B)에 포함되는 연속명령신호 continue(인터럽트 금지신호 mskint와 동일)를 인터럽트 제어회로(INTC)에 출력한다. 본 신호에 의하여, 인터럽트 요구 등이 발생하여도 명령의 실행을 계속할 수 있다. 또한, 래치회로(LGR1, LGR2)의 내용이 보지된다.
한편, 사이클 T4의 Φ동기 스테이트에서 명령코드(전송명령을 지시)가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. LGR1 = 1 및 LGR2 = 2이기 때문에, 신호 SEL1, SEL2와 명령 디코더(DEC)가 출력하는 제어신호 B(Rs-DB)를 바탕으로 레지스터 선택신호 B(ER8-DB)가 생성된다. 신호 SEL1, SEL2와 제어신호 C(WB-Rd)를 바탕으로 레지스터 선택신호 C(WB-ER17)가 생성된다. 이것 이외의 제 2 워드에 의한 동작은 제 1 전송명령(MOV. L ER0, ER1)과 동일하게 할 수 있다(제 1 전송명령과 마찬가지로 제어신호 B(RSLGR)에 의하여 LGR1, LGR2의 클리어가 지시된다. 래치회로(LGR1)는 사이클 T6의 Φ동기 스테이트에서, 래치회로(LGR2)는 사이클 T6의 Φ#동기 스테이트에서 클리어된 결과가 전달된다).
즉, 제 1 워드(전치명령코드)에 대응하는 래치회로(LGR1, LGR2)의 래치신호, 연속명령신호를 출력하는 것 이외에는 명령 디코더(DEC)의 내용을 기존의 하위 CPU의 명령 디코더와 동등하게 할 수 있다. 명령 디코더(DEC)의 전치명령코드에 대응하는 부분이 상대적으로 작은 것은 물론이다. 즉, 논리적인 규모의 추가를 최소한으로 할 수 있다. 또한, 명령 디코더(DEC)의 대부분을 기존의 하위 CPU의 명령 디코더와 동등하게 할 수 있기 때문에, 종래의 설계 자산을 유효하게 이용할 수 있다.
다음으로, 복수 레지스터의 레지스터·레지스터간 전송명령인 「MOVM. W RO-R1, E28-E29」의 예를 나타낸다. 레지스터 지정 필드 r1은 3' b000, r2는 3' b100이다.
본 전송명령 「MOVM. W RO-R1, E28-E29」는, 범용 레지스터 그룹을 지정하는 레지스터 확장용 전치명령코드와, MOVM을 나타내는 명령확장용 전치명령코드(프리픽스코드라고도 한다)를 부가하여 3워드 명령으로 한다. 제 3 워드(mov)는 MOV. W R0, R4와 동일하다. gr2 = 3이기 때문에, 동일한 r1 = 4에 대하여 레지스터 번호 n = 28이라 해석된다. 워드크기에서, r2[3] = 1이기 때문에 범용 레지스터 E가 지정된다.
사이클 T5의 Φ#동기 스테이트에서, CPU(502)의 어드레스 버퍼(AB)로부터 어드레스가 어드레스 버스(IAB)에 출력된다.
사이클 T6의 Φ동기 스테이트에서, 어드레스 버스(IAB)의 내용이 어드레스 버스(PAB)에 출력되며, 판독 사이클이 개시된다. 사이클 T6의 Φ#동기 스테이트에서 판독 데이터가 내부 데이터 버스에 얻어지며, 이것을 사이클 T7의 Φ동기 스테이트에서 명령 레지스터(IR1)에 래치한다. 이것은 레지스터 그룹 필드를 가지는 생략가능한 명령워드(전치명령코드)이다.
계속해서, 사이클 T7의 Φ#동기 스테이트에서 다음 어드레스(+2된 내용)가 어드레스 버스(IAB)에 출력되며, 이 판독 데이터가 사이클 T8의 Φ동기 스테이트에서 명령 레지스터(IR1)에 래치된다. 이상의 동작은 상기 레지스터·레지스터형 제 2 전송명령 및 도시되지 않은 다음 명령의 실행제어에 의하여 이루어진다.
사이클 T7의 Φ동기 스테이트에서 제 1 명령코드가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 그룹 필드 래치신호(LGRCL)가 발행되며, 레지스터 그룹 지정필드(IR1의 비트 7∼0)가 래치회로(LGR1, LGR2)에 래치된다.
사이클 T7의 Φ#동기 스테이트에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하고, 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스 버스(IAB)에 어드레스 신호가 출력된다.
사이클 T8로부터, 다음 다음 명령이 판독된다. 사이클 T8의 Φ에서, 인크리멘터(INC)로 인크리먼트(+2)된 결과가 내부버스(WB)를 경유하여 프로그램 카운터(PC)에 기록된다. 제 1 워드와 제 2 워드 이후가 분할되지 않기 위한 제어신호 B에서 연속명령신호(인터럽트 금지신호)를 인터럽트 제어회로(INTC)에 출력한다. 또한, 래치회로(LGR1, LGR2)의 내용이 보지된다. 또한, 제 2 명령코드가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호 MOD2가 출력된다. 사이클 T8의 Φ#동기 스테이트에서, 프로그램 카운터(PC)의 내용을 내부버스(GB)에 판독하여 어드레스 버퍼(AB)와 인크리멘터(INC)에 입력한다. 어드레스 버퍼(AB)로부터 어드레스(IAB)에 어드레스 신호가 출력된다.
한편, 사이클 T9의 Φ동기 스테이트에서 명령코드(전송명령을 지시)가 명령 디코더(DEC)에 입력되어 명령의 내용이 해독된다. 해독결과에 따라서, 제어신호를 출력하고 각 부의 제어를 수행한다. LGR1 = 0 및 LGR2 = 3이기 때문에, 신호 SEL1, SEL2와 명령 디코더(DEC)가 출력하는 제어신호 B, C(Rs-DB, WB-Rd)를 바탕으로, 레지스터 셀렉터(RSEL)로 레지스터 선택신호 B, C(R0-DB, WB-E28)이 생성된다. 제어신호 s1이 생성되고, SEL1, SEL2의 변경(3' b100→101)이 지시된다.
계속해서, MOD2신호에 따라서 신호 SEL1, SEL2와 명령 디코더(DEC)가 출력하는 제어신호 B, C(Rs-DB, WB-Rd)를 바탕으로 레지스터 셀렉터(RSEL)가 레지스터 선택신호 B, C(R1-DB, WB-E29)를 생성한다.
도 96에는 복수 레지스터의 전송명령의 제 2 예(MOVM. L @aa:16, ER0-ER1)의 실행 시퀀스가 나타나 있다.
상기 명령은, 2개의 범용 레지스터로 데이터를 판독하는 예이다. 레지스터 지정필드는 3' b000이다. 어드레싱 모드는, 절대 어드레스 16비트이며, 실효 어드레스는 aa를 부호확장한 내용이다. 이 부호확장은, 판독 데이터 버퍼(RDB)로부터 판독할 때에 이루어지게 된다. 이하에서는, aa를 부호확장한 내용도 간단하게 aa라 표기한다.
사이클 T2로부터 전송명령의 실행이 개시된다. 특별히 제한되어 있지는 않지만, 명령코드의 제 1 워드는 MOVM을 나타내는 프리픽스코드이며, 다음 명령코드의 동작을 지정(MOD2 신호출력)하여 프로그램 카운터(PC)를 인크리먼트하는 것 외의 동작은 수행하지 않는다.
제 2 워드의 명령코드(mov-1)는, MOV. L @aa:16, ER0명령과 공통이다.
사이클 T4의 Φ#동기 스테이트에서 판독 데이터 버퍼(RDB)의 내용이 버스 GB에 출력되고, 어드레스 버퍼(AB)에 격납된다. 어드레스 버퍼(AB)의 내용이 어드레스 버스(IAB)에 출력된다. 동시에, 버스 명령어(BCMD)가 출력되며, 워드 데이터 판독과 다음 버스 사이클에서의 버스권리 이양금지가 나타나 있다.
사이클 T5의 Φ#동기 스테이트에서, 판독 데이터의 상위 16비트(범용 레지스터 E의 내용)가 내부 데이터 버스(IDB)에 출력된다. 또한, 어드레스 버퍼(AB)의 인크리먼트 기능에 의하여 어드레스 버스(IAB)의 출력값을 aa+2로 한다. 동시에, 버스 명령어(BCMD)가 출력되고, 워드 데이터 판독과 다음 버스 사이클에서의 버스권리 이양금지가 나타나 있다.
사이클 T6의 Φ동기 스테이트에서, 판독 데이터가 판독 데이터 버퍼(RDB)에 격납된다.
사이클 T6의 Φ#동기 스테이트에서, 판독 데이터의 하위 16비트(범용 레지스터 R의 내용)가 내부 데이터 버스에 출력된다. 또한, 어드레스 버퍼(AB)의 인크리먼트 기능에 의하여, 어드레스 버스(IAB)의 출력값을 aa+4로 한다. 동시에, 버스 명령어(BCMD)가 출력되며, 워드 데이터 판독과 다음 버스 사이클에서의 버스권리 이양금지가 나타나 있다.
사이클 T7의 Φ동기 스테이트에서, 판독 데이터의 내용이 32비트로 버스 GB를 경유하여 산술논리연산기(ALU)에 전송된다.
사이클 T7의 Φ#동기 스테이트에서, 판독 데이터의 상위 16비트(범용 레지스터 E의 내용)이 내부 데이터 버스에 출력된다. 또한, 어드레스 버퍼(AB)의 인크리먼트 기능에 의하여 어드레스 버스(IAB)의 출력값을 aa+6으로 한다. 동시에, 버스 명령어(BCMD)가 출력되고, 워드 데이터 판독과 다음 버스 사이클에서의 버스권리 이양허가가 나타나 있다.
사이클 T8의 Φ#동기 스테이트에서, 판독 데이터의 하위 16비트(범용 레지스터R의 내용)이 내부 데이터 버스에 출력된다. 또한, 제 2 제어신호 B에 의하여 레지스터 선택신호의 비트 0이 반전된다. 제 1 제어신호 A와 신호 SEL2(=3' b001)에 의하여, 전송되는 레지스터가 선택되고, 레지스터 제어신호 B가 생성된다.
사이클 T8의 Φ#동기 스테이트 이후에서, 상기와 마찬가지로 다음 다음 명령의 판독과 프로그램 카운터(PC)의 인크리먼트(+2)를 수행한다.
레지스터 3개를 지정한 경우에는, 실행 스테이트수가 2스테이트 길게 되고, 어드레스 버퍼(AB)의 인크리먼트(+2)가 2회 더 이루어진다(합계+6). 또한, 신호 SEL1, SEL2의 비트 1이 반전되어 레지스터 지정필드가 000인 경우, 010으로 되어 범용 레지스터 ER2가 선택된다. 기록동작이 2회(합계 6회) 이루어진다.
레지스터 4개를 지정한 경우에는, 또한 실행 스테이트수가 2 스테이트 길어지며, 어드레스 버퍼(AB)의 인크리먼트(+2)가 2회 더 이루어진다(합계+10). 또한, 신호 SEL1, SEL2의 비트 1과 비트 0이 반전되고, 레지스터 지정필드가 000인 경우, 011로 되어 범용 레지스터 ER2, ER3가 선택된다. 기록동작이 2회(합계 8회) 이루어진다.
레지스터 번호의 하위 비트가 고정적이기 때문에, 이것을 명령처리의 실행에 따라서 변경하는 제어가 용이하다. 가산기 등을 필요로 하지 않아 논리적 규모의 증가를 억지할 수 있다. 예를들어, 2개의 레지스터를 대피하는 경우, 명령코드상의 레지스터 지정필드의 하위 비트는 0이기 때문에, 1회째의 레지스터 지정은 레지스터 지정필드의 값에 따르고, 2회의 레지스터 지정은 명령 디코더(DEC)의 제어에 따라서 레지스터 지정필드의 하위 1비트를 1로 변경하여 이루어지게 한다.
한편, MOV명령은 레지스터 1개의 판독이며, 상기 2회째의 판독동작을 수행하지 않도록 되어 있어 실행동작의 공통화를 도모하고 있다.
도 97에는 복수 레지스터의 전송명령의 제 3 예(MOVM. W R10-R11, @ER6)의 실행 시퀀스가 나타나 있다. 상기 명령은, 2개의 워드 크기의 범용 레지스터를 기록하는 예이다. 레지스터 지정필드는 3' b010이다.
사이클 T2로부터 전송명령의 실행이 개시된다. 특별히 제한되어 있지는 않지만, 명령코드의 제 1 워드는 레지스터 그룹필드를 가지는 프리픽스코드이며, 레지스터 그룹 지정필드(IR1의 비트 7∼0)가 래치회로(LGR1, LGR2)에 래치되며, 프로그램 카운터(PC)를 인크리먼트한다.
제 2 워드의 명령코드는, MOVM을 나타내는 프리픽스코드이며, 다음 명령코드의 동작을 지정한다. 제어신호 MOD2가 출력된다. 제 3 워드의 명령코드는 MOV. W R2, @ER6 명령과 공통된다.
사이클 T4의 Φ#동기 스테이트에서 레지스터 ER6의 내용이 버스 GB에 출력되어, 어드레스 버퍼(AB)에 격납된다. 어드레스 버퍼(AB)의 내용이 어드레스 버스(IAB)에 출력된다. 동시에, 버스 명령어(BCMD)가 출력되며, 워드 데이터 기록과 다음 버스 사이클에서의 버스권리 이양금지가 나타나 있다.
또한, 제 1 제어신호 B와 래치회로(LGR2)의 래치정보(=3' b001)와 신호 SEL2(=3' b010)에 의하여, 전송되는 레지스터가 선택되어 레지스터 제어신호 B가 생성된다. 제어신호 s1이 생성되어 신호 SEL2의 변경(3' b010→011)이 지시된다.
스테이트 사이클 T5의 Φ동기 스테이트에서, 선택된 레지스터(R10의 내용)가 버스 DB를 경유하여 기록 데이터 버퍼(WDB)에 전송된다.
T5의 Φ#동기 스테이트에서, 전송된 데이터(R10의 내용)가 내부 데이터 버스(IDB)에 출력된다. 또한, 어드레스 버퍼(AB)의 인크리먼트 기능에 의하여, 어드레스 버스(IAB)의 출력값을 EA+2로 한다. 또한, 제 1 제어신호 B와 래치회로(LGR2)의 래치정보(=3' b001)와 신호 SEL2(=3' b011)에 의하여, 전송되는 레지스터가 선택되고 레지스터 제어신호 B가 생성된다.
사이클 T6의 Φ동기 스테이트에서, 선택된 레지스터 R11의 내용이 버스 DB경유로 기록 데이터 버퍼(WDB)에 전송된다.
사이클 T6의 Φ#동기 스테이트에서, 전송된 데이터(R11의 내용)가 내부 데이터 버스(IDB)에 출력된다.
사이클 T6의 Φ#동기 스테이트 이후에서, 상기와 마찬가지로 다음 다음 명령의 판독과 프로그램 카운터(PC)의 인크리먼트(+2)를 수행한다.
레지스터 3개를 지정한 경우에는, 실행 스테이트수가 1스테이트 길어지며, 어드레스 버퍼(AB)의 인크리먼트(+2)가 1회 더 이루어진다(합계+4). 또한, 신호 SEL1, SEL2의 비트 1이 반전되고, 레지스터 지정필드가 000인 경우 010으로 된다. 기록동작이 1회(합계 3회) 이루어진다.
레지스터 4개를 지정한 경우에는, 또한 실행 스테이트수가 1스테이트 길어지며, 어드레스 버퍼(AB)의 인크리먼트(+2)가 또한 1회 이루어진다(합계+6). 또한, SEL1, SEL2의 비트 1과 비트 0이 반전되고, 레지스터 지정필드가 000인 경우 011로 된다. 기록동작이 1회(합계 4회) 이루어진다.
도 98에는 상기 CPU(502)의 개발환경의 개략이 나타나 있다. 이것은, 기존의 하위 CPU와, 이에 대한 상위 호환의 상기 CPU(502)에서 공통의 개발환경을 제공할 수 있도록 하는 것이다.
사용자는, 각종 에디터 등을 이용하여 C언어 내지 어셈블리언어로 프로그램을 작성한다. 이것은 통상, 복수의 모듈로 분할하여 작성된다.
C컴파일러(540)는, 사용자가 작성한 각각의 C언어 소스 프로그램을 입력하여, 어셈블리언어 소스 프로그램 내지 목적모듈을 출력한다. 어셈블러(541)는, 어셈블리언어 소스 프로그램을 입력하고, 목적모듈을 출력한다. 링키지 에디터(542)는, 상기 C컴파일러(540)나 어셈블러(541)가 생성한 복수의 목적모듈을 입력하여 각 모듈의 외부참조나 상대 어드레스 등의 해결을 수행하고, 하나의 프로그램에 결합하여 로드모듈을 출력한다.
로드모듈은, 시뮬레이터 디버거(543)에 입력하여 PC등의 시스템 개발장치상에서 CPU의 동작을 시뮬레이션하고, 실행결과를 표시하여 프로그램의 해석이나 평가를 수행할 수 있다. 또한, 로드모듈을 에뮬레이터(544)에 입력하고 실제의 응용시스템상 등에서 동작하는 이른바 인서킷 에뮬레이션을 수행하며, 마이크로 컴퓨터 전체로서의 실동작의 해석이나 평가를 수행할 수 있다. 또한, 로드모듈을 PROM 라이터(545)에 입력하여 마이크로 컴퓨터(1)의 ROM(504)이 플래시메모리와 같은 전기적으로 기록가능한 메모리인 경우에, 이와 같은 메모리에 기록을 수행할 수 있다. 그 밖에, 라이브러리언으로서 범용적인 서브루틴 등을 제공할 수도 있다.
도 43은 상기 CPU(502)의 시스템 개발장치에 있어서의 CPU 선택방법을 예시하는 도면이기도 하다. 도 43을 바탕으로 설명한 내용은 CPU(502)의 시스템 개발장치에도 그대로 적용된다. CPU의 선택방법으로서는, 윈도우의 드롭 다운 메뉴에서 선택할 수 있게 하여도 좋고, 워크 스테이션 등이라면 C셀 명령어로서 입력할 수도 있다. 또한, 어셈블러나 C컴파일러 등의 소스 프로그램의 제어명령으로서 CPU의 종류 및 동작모드를 입력할 수 있다.
어셈블러는, 선택된 CPU의 종류 및 동작모드에 따라서, 입력된 어셈블리언어소스 프로그램상의 기술을 해석하여 목적모듈을 생성하거나, 에러가 있으면 그것을 표시한다. 기존의 하위 CPU를 선택하여, 상기 상위 CPU(502)에는 존재하고 기존 CPU에는 존재하지 않는 명령(상기 확장명령)을 기술하면 에러가 된다. 명령코드 자체는 CPU(502)가 포함하고 있기 때문에, 이를 위한 어셈블러(541)를 개발하여 기존의 하위 CPU에 대해서는 상위 CPU(502)에는 존재하고 기존의 하위 CPU에는 존재하지 않는 명령을 검출하는 추가를 수행하면 용이하게 공통화할 수 있다. 기존의 하위 CPU에 대해서는 어셈블러가 존재하고 있을 것이므로, 이를 용이하게 개조하여 상기 상위 CPU(2)에 적용할 수 있다.
C컴파일러는, 선택된 CPU의 종류 및 동작모드에 따라서 사용가능한 오퍼레이션, 데이터 크기, 어드레싱 모드의 조합으로 나타내지는 명령이나, 범용 레지스터, 어드레스 공간을 판별하여, C언어에 의한 프로그램을 CPU의 명령으로 변환하고, 어셈블리언어 프로그램이나 목적모듈로서 출력한다.
C컴파일러 자체에는 C언어에 의한 프로그램을 CPU의 명령으로 변환하는 기능 외에, C++언어에 의한 프로그램의 컴파일러나 모듈간 최적화 등과 같은 CPU의 명령세트와는 직접 관계가 없는 기능의 향상이 꾀해져 있는데, CPU마다의 개별 컴파일러에서는, 이러한 기능향상을 모든 개별 컴파일러에 적용하지 않으면 안된다. 본 발명과 같이, 공통의 C컴파일러(540)로 해 두면 상기 CPU의 명령세트와는 직접 관계가 없는 기능향상을 꾀하기가 쉬워지며, 또한, 개발효율 등을 향상시킬 수 있다.
시뮬레이터 디버거는, 입력된 로드모듈의 프로그램을 해석하여 CPU의 동작을 시뮬레이션하고, 그 중에서 에러가 있으면 그것을 표시한다. 예를들어, 기존의 하위 CPU를 선택하여, 본 발명의 CPU(502)에는 존재하고 기존의 CPU에는 존재하지 않는 명령을 실행하고자 하면 에러가 생긴다. 명령코드 및 명령실행기능 자체는 본 발명의 CPU(502)가 포함하고 있기 때문에, 이를 위한 시뮬레이터 디버거(543)를 개발하여, 기존의 하위 CPU에 대해서는, 본 발명의 CPU(502)에는 존재하고 기존의 CPU에 존재하지 않는 명령을 검출하는 추가를 수행하여 용이하게 공통화할 수 있다. 기존의 CPU에 대해서, 시뮬레이터 디버거가 존재한다면, 이것을 용이하게 개조하여 본 발명의 CPU(502)에도 물론 적용할 수 있다.
도 45는 본 발명에 관련된 CPU(502)를 가지는 마이크로 컴퓨터를 위한 에뮬레이터를 나타내는 도면이기도 하다. 도 45에 있어서, 에뮬레이션용 프로세서(410)는, 마이크로 컴퓨터 부분에 에뮬레이션용 인터페이스를 더해 구성된다. 상기 마이크로 컴퓨터 부분은, 예를들어 도 79의 마이크로 컴퓨터(501)의 구성에 상당된다. 예를들어, 시스템 개발장치(427)로부터 입력된 프로그램(로드모듈)을 에뮬레이션 메모리(421)의 이용자 프로그램 격납영역에 전송하고, 내장 ROM(504)상에 배치될 이와 같은 프로그램을 CPU(502)가 판독하면, 레뮬레이션 메모리(421)상의 프로그램이 판독되어 실행된다. 또한, 브레이크 조건이나 실시간 트래이스 조건 등도 시스템 개발장치(427)로부터 부여할 수 있다.
콘트롤 프로세서(425)는, 응용 시스템(412)에서 본래 사용하는 CPU의 종류의 선택을 수행하기 위한 프로그램을, 에뮬레이션 메모리(421)의 에뮬레이션 프로그램 격납영역에 격납한다. CPU(502)는, 이와 같은 프로그램을 소정의 조건에서 브레이크한 상태에서 실행하고, 에뮬레이션용 제어 레지스터의 설정을 수행함으로써, 에뮬레이션상의 필요한 설정을 수행한다. 이 경우는, 에뮬레이션용 프로그램의 실행모드, 이른바 브레이크 모드에서만 기록가능하게 하면 유리하다. 개발도상에 있는 이용자의 소프트웨어의 오동작에 의하여 잘못된 설정을 수행해 버리는 것을 막을 수 있다. 또한, 제어 레지스터를 이용함으로써, 응용 시스템(412)에서 본래 사용하는 CPU의 종류의 선택대상이 늘어나도 제어 레지스터의 구성만을 변경하면 되며, 에뮬레이션용 인터페이스를 변경할 필요가 없고 에뮬레이터의 하드웨어를 변경하지 않아도 된다.
도 99에는 상기 마이크로 컴퓨터(501)에 대응되는 에뮬레이션용 프로세서의 블럭도가 나타나 있다. 에뮬레이션용 프로세서(50)는, 도 79의 마이크로 컴퓨터(501) 부분(마이크로 컴퓨터 코어(571))과 에뮬레이션 인터페이스(572)로 구성된다. 또한, 도 79의 타이머나 입출력 포트 등은 I/O로서 대표시키고, 또한, 내부버스의 상세한 사항과 버스 콘트롤러를 도시하고 있다. 또한, 도 79의 타이머(506), 펄스 출력회로(507) 및 입출력 포트(IOP1∼IOP5, IOPA∼IOPF) 등은, I/O(573), 이용자 버퍼(이용자 BUF)(574)로서 대표시키고 있다. 이용자 인터페이스(576)는 상기 I/O(573), 이용자 버퍼(574) 및 도시를 생략하는 입출력 버퍼 등을 포함하는, 이용자 시스템(에뮬레이션 대상 시스템인 타겟 시스템)에 접속되는 인터페이스 회로를 총칭한다.
마이크로 컴퓨터(571)는, 도 79의 마이크로 컴퓨터(501)에 대하여 미정의 명령검출회로(578)가 추가되어 있다. 에뮬레이션 인터페이스(572)는 제어 레지스터(579)를 포함한다. 제어 레지스터(579)는 브레이크 모드에서만 기록가능하게 된다. 에뮬레이션 인터페이스(572)로부터 입출력되는 신호는, 어드레스 버스, 데이터 버스, 판독신호, 기록신호, 데이터 크기신호, 명령페치신호 등 버스의 상태를 표시하는 버스 스테이터스 신호, 명령의 실행개시를 나타내는 신호, 인터럽트 처리의 실행개시를 나타내는 신호 등의 CPU(502)의 실행상태를 나타내는 CPU 스테이터스 신호 등을 포함하는, 에뮬레이터에 의한 마이크로 컴퓨터의 동작해석에 사용된다.
미정의 명령검출회로(578)는, CPU(502)에 입력되는 명령코드를 해석하고, 선택되어 있는 CPU의 기능에 존재하지 않는 명령이 실행을 개시한 것을 검출하면, CPU(502)에 브레이크 인터럽트를 요구한다. CPU(502)에 어떠한 기능이 선택되어질지는 제어 레지스터(579)로부터 지시된다. 예를들어, 기존의 하위 CPU의 기능이 선택되어 있는 경우에는, 레지스터 그룹 필드를 가지는 전치명령코드를 실행하면, 미정의 명령으로서 검출된다. 구체적으로는, 명령코드를 상기 LIR신호로 래치하고 분석하여, 미정의라고 해독된 경우에는 상기 LID신호가 발생한 시점에서 브레이크 인터럽트를 요구하도록 하면 되므로 용이하다.
에뮬레이션용 프로세서(550)는 상술한 바와 같이 상위 CPU(502)를 내장하고, 이것을 이용하여 그 밖의 하위 CPU의 대행을 시킬 수 있다. 어느 것을 선택할지는 레지스터(579)로 지정하면 된다.
여하튼, 에뮬레이션용 인터페이스를 공통화시켜 두면, CPU 내지 그 밖의 기능블럭이 변경된 경우에도, 에뮬레이터측 하드웨어의 변경을 할 필요가 없으며, 에뮬레이션용 프로세서(550)만을 변경하여 명령의 동작을 해석하고 표시할 때의 역 어셈블러에 어느 CPU를 대상으로 할지를 지시하면 된다. 역 어셈블러에 대한 지시는, 사용자가 시스템 개발장치로부터 지정할 수도 있으며, 어셈블러로부터의 입력정보에 의하여 자동적으로 선택되는 것일 수도 있다. 이로써, 에뮬레이터의 개발효율을 향상시키고, 에뮬레이터의 개발환경을 빨리 제공할 수 있다.
도 100에는 본 발명이 적용된 마이크로 컴퓨터(501)를 프린터 제어에 이용한 마이크로 컴퓨터 시스템이 예시된다.
프린터 제어 시스템은, 마이크로 컴퓨터(501)와 센트로닉스 인터페이스(또는 IEEE1284)나 유니버설 시리얼 버스 또는 옵션 등과 같은 송수신회로(송신회로 또는 수신회로)(580)와, 버퍼 RAM(DRAM)(581)와, 캐릭터 제너레이터 ROM(CGROM)(582)과, 프로그램 ROM(583)과, 인자제어회로(584)를 포함하고, 이들이 마이크로 컴퓨터의 외부버스(585)를 매개로 접속된다.
외부버스(585)에 접속되는 어드레스 공간은 소정 크기의 영역으로 분할되어 있어, 각각에 버스사양(버스폭, 접속 스테이트수, 어드레스 다중, 버스트동작 등)을 설정할 수 있게 되어 있다. 영역마다의 그와 같은 버스제어는, 마이크로 컴퓨터(501)에 포함되는 상기 버스 콘트롤러(510)의 외부버스 콘트롤러가 수행된다.
프로그램 ROM(583)은 영역 0에, 버퍼 RAM(581)은 영역 2에, CGROM(582)은 영역 6에, 송수신회로(580) 및 인자제어회로(584)는 영역 7에 접속된다. 버퍼 RAM(581)은 판독/기록가능한 메모리이며, 다이나믹형 메모리이기 때문에 리프레시동작이 필요하지만, 저렴하다고 알려져 있다. 버퍼 RAM(581)에 대해서는 어드레스 배치가 기재되어 있다. 버퍼 RAM(581)은 2MB(16M비트)의 기억용량을 가지며, 1M바이트를 CPU(502)의 작업영역으로 하고, 나너지를 512kB씩의 링버퍼로 한다.
또한, 본 시스템은 라인 피이드 모터(590), 캐리지 리턴 모터(591)를 포함하고, 이들 모터(590, 591)는 각각 타이머(506)의 출력, 펄스출력장치(507)의 출력이 버퍼회로(92)를 매개로 주어짐으로써 제어된다. 라인 피이드 모터(590), 캐리지 리턴 모터(591)는, 특별히 제한되어 있지는 않지만, 스테핑 모터이다.
마이크로 컴퓨터(501)에 내장되어 있는 DMAC(511)는, 인자데이터의 출력, 라인 피이드 모터(590), 캐리지 리턴 모터(591)를 구동하는 펄스출력을 수행한다. 또한, DMAC(511)는 SCI(508)의 송신데이터, 수신데이터의 전송제어를 수행한다.
도시되지는 않았지만, SCI(508)는 호스트 등의 통신에 사용하고, A/D변환기(509)는 종이매수 등의 센서정보를 입력한다.
EXDMAC(512)는 센트로닉스 인터페이스나 유니버설 시리얼 버스 등의 복수의 송수신회로(580)에 의한 데이터의 수신을 CPU(502)의 동작과 병행하여 수행한다. EXDREQ입력에 전송요구신호를 입력하고, 전송시에는 EXDACK출력에 의하여 싱글 어드레스 전송을 수행할 수 있다. 예를들어, 센트로닉스 인터페이스의 인풋 스트로브신호를 EXDREQ0에 입력하여 채널 0에서 듀얼 어드레스 전송을 수행하고, 옵션 인터페이스의 수신신호를 EXDREQ1에 입력하여 EXDACK1출력을 옵션 인터페이스에 부여하고 채널 1에서 싱글 어드레스 전송을 수행한다.
EXDAMC(512)는 데스티네이션 또는 소스의 한쪽을, 어드레스 공간상의 메모리나 내부 I/O 레지스터가 아니라 EXDMAC(512)의 데이터 레지스터로 할 수 있다. 이 선택은 EXDMAC(512)의 제어 레지스터의 소정의 제어비트로 수행하도록 한다.
실질적인 데이터 전송에 앞서, 패킷명령어 등의 전송정보를, EXDMAC(512)의 데이터 레지스터에 전송한다. CPU(502)는, 이 정보를 해석하고, 예를들어 전회의 데이터 전송과 연속해서 수신하면 되는 경우에는, 데스티네이션을 메모리로 하도록 설정하여 전송 카운터 레지스터를 설정하여 기동을 걸면 된다.
이와 같은 정보의 해석에 있어서는, 예를들어 전송정보가 16바이트인 경우, 「MOVM. L @EXD0DR0, ER0-3」을 실행하고, 범용 레지스터에 전송정보를 격납하여 해석을 수행할 수 있다. 또한, EXD0DR0은 EXDMAC(512)의 채널0의 데이터 레지스터의 선두 어드레스를 나타내는 라벨이다. 상기 MOVM명령에서는, 절대 어드레스의 어드레싱 모드를 이용하여 고유의 어드레스를 용이하게 접속할 수 있다. 또한, EXDMAC(512)의 데이터 레지스터를 사용하지 않고 버퍼 RAM(581)상에 전송정보가 격납되어 있는 경우에는, 「MOV. L @EXDAR0, ER4, MOVM. L @-ER4, ER0-3」으로 하면 된다. EXDAR0은 채널 0의 데스티네이션 어드레스 레지스터의 라벨이다. 데스티네이션 어드레스 레지스터는 다음 데이터 전송의 데스티네이션이 되는 어드레스를 나타내고 있다. 이 내용을 범용 레지스터 ER4에 격납하고, 프리디크리먼트 레지스터 간접의 어드레싱 모드를 이용하고 있다. 간접적으로 어드레스를 취급함으로써 메모리상의 고정되어 있지 않은 어드레스도 용이하게 접속할 수 있다.
또한, 버퍼 RAM(581)의 판독을 연속해서 수행하기 때문에, 버퍼 RAM(581)의 고속 페이지 모드 등을 유효하게 이용하여 고속화를 도모할 수 있다.
전송정보의 범용 레지스터로의 격납을 고속으로 수행하고, 범용 레지스터상에서 해석을 수행함으로써, 전송정보의 수신에서부터 전송정보를 바탕으로 하는 처리의 개시까지의 시간을 단축할 수 있다. 나아가 시스템의 고속화에 기여할 수 있다.
상기 시스템에 있어서는, 호스트측으로부터 프린터의 스테이터스를 판독하는 경우에는, 채널 2의 EXD2DR에 CPU(502)가 스테이터스를 수시로 기록해 두도록 하고, EXDREQ2 입력에 따라서 송수신회로(580)로 출력하여, 송수신회로(580)로부터 호스트로 전송하도록 할 수 있다. 이 경우도, 설정할 데이터가 많으면 MOVM명령을 이용하여 EXD2DR의 설정을 수행할 수 있다.
예를들어, CPU(502)는, 전송정보대기를 나타내는 스테이터스를 EXD2DR 0∼7에 설정해 둔다. 호스트로부터 패킷 명령어의 전송정보를 수신하면, 비지 스테이터스를 EXD2DR 0∼7에 설정하여 전송정보의 해석이 종료되고, EXDMAC(512)의 설정이 완료되면 데이터 수신대기를 나타내는 스테이터스를 EXD2DR 0∼7에 설정하도록 한다. 호스트는, 수시로 스테이터스를 확인하면서 전송정보나 데이터를 송신하도록 하면 된다.
버퍼 RAM(581)상의 인쇄데이터를 조작할 수도 있다. 각종 어드레싱 모드의 복수 레지스터 전송명령(MOVM)을 이용하여 고속화할 수 있다. 복수 레지스터 전송명령으로 버스권리 이양을 금지함으로써, 그 밖의 버스 마스터인 DMAC(511)나 EXDMAC(512)의 데이터 전송과의 경합에 의한 원하지 않는 데이터 변화를 막을 수 있다.
또한, 반도체 집적회로의 집적도의 향상에 의하여, 옵션 이외의 수신회로의 일부나, 인자제어회로(584) 등을 1개의 반도체 집적회로에 집적시킬 수 있다. 또한, 버퍼 RAM(581) 등의 범용적인 메모리도 1개의 반도체 집적회로에 집적시킬 수 있다. 프로그램 ROM(583)이나 CGROM(582) 등과 같이 개별 프린터의 기종 등, 마이크로 컴퓨터 시스템마다 변경하게 되는 것은 개별 반도체 집적회로로 하는 것이 유리하다.
이상 설명한 도 79의 마이크로 컴퓨터 및 데이터 처리시스템에 의하면 이하의 작용효과를 얻을 수 있다.
[1] 단일한 명령으로 복수의 범용 레지스터와 메모리간, 또는 복수의 범용 레지스터 상호간에서 전송을 수행함으로써, 상대적으로 명령코드의 판독회수를 줄여 고속화할 수 있다. 또한, 데이터의 판독/기록을 연속해서 수행함으로써, 외부 메모리에 대한 버스트 동작 등을 유효하게 이용할 수 있다. 복수의 버스마스터가 데이터를 처리하는 경우에, 데이터 접속시에 버스권을 이양하는 것을 금지하고, 원하지 않는 데이터의 경합을 피할 수 있다.
상기 전송명령의 실효 어드레스의 계산은 1회만 수행하도록 하고, 어드레스 버퍼(AB)에 인크리먼트(또는 디크리먼트)기능과 인크리먼트(또는 디크리먼트)결과를 보지하는 기능을 구비함으로써, 명령동작을 단순하게 하고, 전송명령을 위한 많은 제어를 기존의 전송명령과 공통화시킬 수 있어, 명령디코더(DEC)의 논리적인 규모의 증가를 최소한으로 할 수 있다. 실효 어드레스의 계산회수를 줄여 고속화를 도모할 수 있다. 또한, 다양한 어드레싱 모드를 공통으로 이용할 수 있어 논리적 규모의 증가를 최소한으로 할 수 있다.
복수 레지스터 전송명령에 있어서 레지스터의 개수가 서로 다른 명령을 복수명령서포트함으로써, 또한 워드 크기와 롱 워드 크기 등 데이터 크기가 서로 다른 명령을 복수 명령서포트함으로써 프로그램의 작성을 용이하게 하고, 마이크로 컴퓨터의 이용상 편의성을 향상시킬 수 있다.
범용 레지스터만을 CPU가 직접 처리할 수 있는 아키텍쳐에 있어서는, 범용 레지스터와 메모리와의 전송을 고속화하여 처리속도를 크게 향상시킬 수 있다.
복수의 범용 레지스터의 조합을 고정적으로 한 복수의 범용 레지스터와, 어드레스 공간상의 어드레스(메모리)와의 사이의 전송명령을 구비함으로써, 범용 레지스터의 비트길이보다 큰 데이터라도 용이하게 취급할 수 있으며, 마이크로 컴퓨터의 이용상 편의성을 향상시킴과 동시에, 데이터의 판독/기록에 대하여 명령의 판독빈도를 줄여 데이터 처리의 고속화를 도모할 수 있다.
복수 레지스터 전송을 지시하는 명령코드와 기존의 단일한 범용 레지스터의 전송명령의 명령코드를 조합시켜, 복수의 범용 레지스터의 전송명령을 실현함으로써, 기존의 CPU라도 명령의 추가를 용이하게 할 수 있다.
[2] 범용 레지스터가 분할가능하며, 동시에 분할한 부분에 기능상 상이한 점이 있는 경우 등에는, 범용 레지스터 전체를 사용하는 전송명령과 분할된 일부분을 사용하는 전송명령을 구비함으로써, 사용하기 쉬운 범용 레지스터와의 전송이 가능하기 때문에, 그 처리를 용이하게 하여 고속화할 수 있다.
목적레벨에서 호환성을 유지하면서, 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU, 또는 범용 레지스터의 비트길이가 긴 CPU와, 범용 레지스터의 비트길이가 짧은 CPU가 존재하는 경우에는, 후자의 CPU에도 낭비없이 이용가능한 전송명령을 제공할 수 있다.
[3] 전치명령코드로 레지스터 그룹을 지정하고, 이 전치명령코드를 생략가능하게 하고, 나아가 전치명령코드를 부가하지 않는 경우의 명령코드를 기존의 CPU의 명령코드와 동일하게 함으로써, 호환성을 해치지 않고 범용 레지스터를 증가시킬 수 있다.
암묵적으로 지정가능한 범용 레지스터(기존의 범용 레지스터)만을 사용하고 있다면, 생략가능한 워드를 생략할 수 있기 때문에, 명령코드를 증가시키지 않는다(적어도 종래의 동등한 범용 레지스터를 사용하는 경우에는 종래와 동등한 명령코드로 충분하다). 명령코드를 증가시키지 않음으로써 처리속도를 저하시키지 않게 된다.
상기 생략가능한 워드를 부가함으로써, 명령에 의하여 직접 모든 범용 레지스터를 선택할 수 있기 때문에, 프로그램의 용이성을 해치는 부분이 적다. 또한, 임의의 량의 범용 레지스터의 일부를, 원하는 태스크마다 또는 원하는 인터럽트 처리 등에 확보에 둠(다른 태스크나 처리에서는 사용하지 않는다)으로써, 상기 태스크나 인터럽트 처리에 있어서 범용 레지스터를 대피시키거나 할 필요가 없어 고속화를 꾀할 수 있다. 또한, 상기 태스크나 인터럽트 처리에 확보하는 범용 레지스터수는 임의로 할 수 있기 때문에, 태스크나 처리 동안에 사용하는 범용 레지스터를 상호 쉽게 융통할 수 있다.
상기 워드를 부가함으로써, 지정할 수 있는 범용 레지스터의 접속은, RAM 등의 메모리의 접속보다 일반적으로 고속으로 할 수 있기 때문에, 범용 레지스터수를 증가시킴과 동시에, 복수의 범용 레지스터의 전송명령에 의하여 복수의 범용 레지스터와 메모리와의 전송을 고속으로 실행할 수 있게 함으로써, CPU의 처리속도를 향상시킬 수 있다. 또한, 이른바 로드 저장형 명령세트를 가지고, 메모리의 내용에 대하여 직접 연산할 수 있는 프로세서에 대해서는, 직접 처리할 수 있는 데이터 량을 증가시킬 수 있으며, 또한 메모리의 접속을 고속화할 수 있어 처리속도를 향상시킬 수 있다.
복수 레지스터 전송명령으로 지정할 수 있는 범용 레지스터를 증가시키는 경우에는 용이하게 대처할 수 있다.
[4] 목적레벨에서 호환성을 유지하면서, 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 어드레스 공간이 넓은 CPU에 있어서 어드레스 공간에 대응하는 크기(예를들어 32비트, MONM. L명령)의 범용 레지스터에 대한 상기 전송명령과, 어드레스 공간이 좁은 CPU의 어드레스 공간에 대응하는 크기(예를들어 16비트, MOVM. W명령)의 범용 레지스터에 대한 상기 전송명령을 구비함으로써, 후자의 크기의 상기 전송명령을 하위 호환성을 가진 어드레스 공간이 좁은 CPU로도 용이하게 실현할 수 있다. 다시말해, 동일한 방법으로, 목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU로도 복수 범용 레지스터의 전송명령을 실현할 수 있다.
소스 프로그램 레벨 또는 목적 프로그램 레벨에서, 기존의 CPU의 명령세트를 포함한 상태에서, 상기 명령을 추가함으로써 소프트웨어 자산을 유효하게 이용할 수 있으며, 사용자의 소프트웨어 개발효율을 향상시킬 수 있다. 소스 프로그램 레벨 또는 목적 프로그램 레벨에서 호환성을 유지함으로 인한 이점과 상기 전송명령을 추가함으로 인한 이점 모두를 누릴 수 있다.
[5] 기존의 CPU와, 소프트웨어 개발장치를 공통으로 이용할 수 있게 하고, CPU를 선택하는 수단을 설치함으로써, 사용자의 원하지 않은 비용을 억지할 수 있다. 또한, C컴파일러 등은 공통으로 기능향상 등을 수행할 수 있기 때문에, 소프트웨어 개발장치의 개발효율을 향상시킬 수 있다. 개발효율을 향상시킴으로써, 개발에 필요한 자원을 삭감하고, 삭감한 자원으로써 기능향상에 할당하는 것도 가능해진다.
기존의 CPU와, 에뮬레이션용 인터페이스를 공통화하고, 나아가 동일한 에뮬레이터의 하드웨어를 공유할 수 있다. 에뮬레이션용 인터페이스를 공통화하거나, 에뮬레이터의 하드웨어를 공통화함으로써, 개발환경을 신속하게 조절할 수 있으며, 또한 에뮬레이터의 개발에 필요한 자원을 최소한으로 할 수 있다.
상기 검토과제 E의 해결수단에 관한 발명의 실시예는 한 예이며, 그 요지를 벗어나지 않는 범위에 있어서 다양하게 변경할 수 있다.
예를들어, CPU의 명령세트나 레지스터 구성, 어드레스 공간은 변경가능하다. CPU의 아키텍쳐도 로드 저장 아키텍쳐에 한정되지 않는다. 단, 어드레스 공간상의 대부분보다 고속으로 이용할 수 있는 레지스터 수단을 가지고 있는 것이 바람직하다. 또한, 복수 레지스터의 전송명령의 상세한 사양에 대해서도 다양하게 변경할 수 있다. 데이터 크기로서는, 바이트 크기를 가져도 좋다. CPU의 논리적인 구성, 복수 레지스터의 전송명령의 논리적인 실현방법에 대해서도 다양하게 변경할 수 있다. 어드레스 버퍼는 인크리먼트가 아니라, 디크리먼트기능을 가지도록 하고, 어드레스가 큰 쪽부터 접속하도록 하여도 좋다. 또한, 내부버스 폭이나 내부버스 구성 등도 변경할 수 있다. 또한, 호환성을 유지해야 하는 CPU는, 어드레스 공간이나 범용 레지스터의 개수가 서로 다른 것 외에, 명령의 종류와 어드레싱 모드 및 데이터의 크기로 정의되는 명령세트가 다른 것이라도 좋다.
마이크로 컴퓨터의 그 밖의 기능블럭에 대해서도 아무런 제약을 받지 않는다. 데이터 처리시스템인 응용분야도 프린터에 한정되지 않는다. 상기 EXDMAC 등은 적절한 예로서 나타내지고 있는 것으로, 다양하게 변경할 수 있는 것은 물론이다.
이상의 설명에서는 주로 본 발명자에 의하여 이루어진 발명을 그 배경이 된 이용분야인 싱글칩 마이크로 컴퓨터에 적용한 경우에 대하여 설명하였지만, 그것에 한정되는 것이 아니라, CPU 및 DRAM 등을 탑재한 시스템 LSI, 시스템 온 칩화된 VLSI 등과 같은 데이터 처리장치에 폭넓게 적용시킬 수 있다. 본 발명은 적어도 명령을 해독하여 처리하고, 연산처리를 수행하는 데이터처리장치에 적용할 수 있다.
《검토과제 A에 관한 발명의 효과》
검토과제 A에 관한 발명의 효과는 다음과 같다. 즉, 범용 레지스터를 지정하는 레지스터 지정필드를 2개의 부분으로 분할하고, 이 2개의 부분을 명령코드의 기준단위상의 다른 워드에 배치함과 동시에, 한쪽의 워드를 생략가능하게 하여, 생략가능한 워드를 생략하면 암묵적인 지정이 이루어지게 된다. 또한, 생략가능한 워드에는, 레지스터 지정필드의 일부만을 가지도록 하여 연산의 종류 등은 지정하지 않도록 한다. 따라서, 암묵적으로 지정가능한 범용 레지스터만을 사용한다면, 생략가능한 워드를 생략할 수 있기 때문에 명령코드를 증가시키지 않으며, 명령코드를 증가시키지 않음으로써 처리속도를 저하시키지 않게 된다.
상기 생략가능한 워드를 부가함으로써, 명령에 의하여 직접 모든 범용 레지스터를 선택할 수 있기 때문에, 프로그램의 용이성을 해치지 않는다. 또한, 임의의 량의 범용 레지스터의 일부를 원하는 태스크마다 또는 원하는 인터럽트 처리 등에 확보해 둠(다른 태스크나 처리에서는 사용하지 않는다)으로써, 상기 태스크나 인터럽트 처리에 있어서 범용 레지스터를 대피시키거나 할 필요가 없어 고속화를 꾀할 수 있다. 또한, 상기 태스크나 인터럽트 처리에 확보할 범용 레지스터수는 임의로 할 수 있기 때문에 태스크나 처리하는 동안에 사용하는 범용 레지스터를 상호 융통하기 쉬워진다.
상기 워드를 부가함으로써, 지정할 수 있는 범용 레지스터의 접속은 RAM 등의 메모리의 접속으로부터 일반적으로 고속화 할 수 있기 때문에, 범용 레지스터수를 증가시킴으로써 고속으로 처리할 수 있는 데이터 량을 증가시키고, 나아가 CPU의 처리속도를 향상시킬 수 있다. 또한, 이른바 로드 저장형 명령세트를 가지며, 메모리의 내용에 대하여 직접 연산할 수 없는 프로세서에 대해서는, 범용 레지스터를 증가시킴으로써 직접 처리할 수 있는 데이터량을 증가시키고, 또한 메모리의 접속빈도를 줄일 수 있어 처리속도를 향상시킬 수 있다.
《검토과제 B에 관한 발명의 효과》
검토과제 B에 관한 발명의 효과는 다음과 같다. 즉, 기존의 메모리·레지스터간의 전송명령코드의 단수 또는 복수, 그리고 레지스터·레지스터간의 연산명령코드 내의 복수의 명령코드를 조합시켜 이에 전치명령코드를 전치결합한다. 상기 전치명령코드에 결합된 메모리·레지스터간 전송명령의 코드를 실행하는 경우에는, 범용 레지스터가 아니라 CPU내의 임시 레지스터와 같은 프로그램상 해방되어 있지 않은(다시말해 명령코드에는 명시되어 있지 않은) 래치수단과 메모리와의 사이에서 데이터 전송을 수행한다. 또한, 상기 전치명령코드에 결합된 레지스터·레지스터간의 연산명령의 코드를 계속해서 실행하는 경우에는, 연산대상 내의 단수 또는 복수의 데이터를 상기 래치수단으로부터 판독하도록 한다. 그 연산결과를 메모리에 격납하는 경우에는, 상기 전송명령의 코드를 실행하였을 때에 사용한 메모리의 어드레스를 다른 래치수단에 격납하고, 상기 연산명령의 연산결과를 상기 래치수단에 격납함과 동시에, 메모리·레지스터간의 전송명령의 코드를 스스로 생성하고(즉, 프로그램에 명시되어 있지 않아도 생성하고), 상기 어드레스를 격납한 래치수단의 내용을 어드레스로서, 그리고 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
이 때, 데이터 처리장치에 있어서 메모리·레지스터간의 전송명령, 레지스터·레지스터간의 연산명령의 명령코드는 기존의 것이기 때문에, 이들 명령코드 단독의 실행으로는 종래와 마찬가지로 동작하고, 기존의 명령실행을 저해하지 않는다. 따라서, 기존의 명령만을 사용하고 있는 기존의 소프트웨어 자산을 효과적으로 이용할 수 있다. 데이터 처리장치는, 소프트웨어 자산에 관한 상위호환을 유지하여 기능향상을 실현할 수 있다.
또한, 기존의 범용 레지스터 혹은 로드·저장·아키텍처의 이점을 보지하고, 상기 전치명령코드는, 어드레싱 모드나 연산의 내용에 의하지 않고 공통으로 사용할 수 있기 때문에, 추가하는 명령코드를 최저한으로 할 수 있다.
메모리로부터 래치수단으로의 데이터 판독, 연산, 래치수단의 내용을 바탕으로 한 메모리로의 기록동작의 지시는, 기존의 명령에 대하여 사용하는 레지스터가 상이할 뿐이므로, 기존의 명령동작을 크게 변경시키지 않고 이용할 수 있다.
이렇게 함으로써, 설계자산을 효과적으로 이용하고, 메모리상의 데이터로의 연산을 가능하게 하여 이로 인한 논리규모의 증가를 최소한으로 할 수 있다.
메모리상의 데이터를 연산가능하게 함으로써, 직접처리할 수 있는 데이터 량을 증가시킬 수 있으며, 또한, 범용 레지스터의 퇴피/복귀 등을 생략할 수 있어 처리속도를 향상시킬 수 있다.
목적레벨에서 호환성을 유지하면서, 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU가 존재하는 경우에는, 어드레스 공간이 넓은 CPU로 상기 워드를 부가하고, 존재하는 전송명령, 연산명령을 조합시킴으로써, 하위호환성을 가지는 어드레스 공간이 좁은 CPU로도 메모리상의 데이터를 직접적으로 연산가능하게 할 수 있다. 다시말해, 동일한 방법으로, 목적레벨에서 호환성을 유지하면서 어드레스 공간이 넓은 CPU와 어드레스 공간이 좁은 CPU로도 메모리상의 데이터를 직접적으로 연산할 수 있다.
목적레벨에서 호환성을 유지하는 것에 의한 이점과 메모리상의 데이터를 직접적으로 연산가능하게 하는 것의 이점 모두를 누릴 수 있다.
기존의 명령을 조합시켜 신규한 명령기능을 실현시키고 있기 때문에, 장래적인 기능확장이나 고속화에 대한 여유를 기존의 CPU와 동등한 정도로 보지할 수 있다.
또한, 기존의 CPU와 에뮬레이션용 인터페이스를 공통화할 수 있으며, 나아가 동일한 에뮬레이터의 하드웨어를 공유할 수 있다. 에뮬레이터의 하드웨어를 공통화함으로써, 빨리 개발환경을 조절할 수 있으며, 또한 에뮬레이터의 개발에 필요한 자원을 최소한으로 할 수 있다.
《검토과제 C에 관한 발명의 효과》
검토과제 C에 관한 발명의 효과는 다음과 같다. 즉, 레지스터 구성, 명령과 어드레싱 모드의 조합 등의 면에서, 한쪽이 다른쪽을 포함하지 않는 서로 다른 명령세트를 포함하는 복수의 데이터 처리장치, 예를들어 CPU를 제공함으로써, 각종 적용분야의 소프트웨어상의 요구에 부응하거나, 이용자의 다양한 취향에 부응하여 다른 CPU의 어셈블리언어에 의한 프로그램으로부터도 비교적 가까운 명령세트 CPU를 선택할 수 있으며, 기능을 향상시킨 CPU로의 이행을 용이하게 할 수 있다.
상기 한쪽이 다른쪽의 명령세트를 포함하지 않는 복수의 CPU에 대하여, 모든 CPU를 포함하는 명령세트를 갖는 상위의 CPU를 준비함으로써, 소프트웨어 자산의 효과적인 이용을 가능하게 하면서, 성능/기능을 향상시킨 CPU를 준비할 수 있다. 소프트웨어 자산의 효과적인 이용에 의하여 사용자의 소프트웨어 개발의 개발효율을 향상시킬 수 있다.
상위 CPU는, 효과적인 어드레스의 비트수와, 벡터 및 스택의 단위크기, 혹은 실효 어드레스의 계산방법을 절환하는 동작모드, 예를들어 최대모드, 준 최대모드와 최소모드를 준비해 둠으로써 메모리의 사용방법도 포함하여 상위호환으로 할 수 있다.
개발에 있어서, 기존의 CPU(하위 CPU가 되는 CPU)에 대하여, 범용 레지스터를 확장하고, 명령과 어드레싱 모드의 조합을 확장시킨 상위 CPU의 명령세트의 서브세트를 가지게 된다. 이로써, 상위 CPU의 논리적 규모의 증대를 최소한으로 하면서 성능·기능·이용상의 편의성 등을 향상시킬 수 있음과 동시에, 상기 다른 하위 CPU의 개발을 용이하게 하고, 개발효율을 향상시킬 수 있다. 상기 상위 CPU보다 더상위 CPU를 개발하는 경우에는, 상기 상위 CPU에 대한 호환성을 유지한다면 상기 복수의 CPU와의 호환성을 자동적으로 유지할 수 있기 때문에, 소프트웨어 자산의 효과적인 이용을 실현시키면서, 장래적인 기능이나 성능의 향상을 도모한 CPU를 실현할 수 있다. 다시말해, 개별적인 응용분야나 시스템에 적합한 복수의 CPU를 제공함과 동시에, 복수의 CPU의 총체적인 개발비용을 줄이거나 개발효율을 향상시킬 수 있다.
범용 레지스터를 확장하기 위하여, 범용 레지스터를 지정하는 레지스터 지정 필드를 2개의 부분으로 분할하고, 이 2개의 부분을 명령코드의 기본단위상의 다른 워드에 배치함과 동시에, 한쪽의 워드를 생략가능하게 하여 생략가능한 워드를 생략하게 되면, 암묵적인 지정이 이루어지게 된다. 생략가능한 워드에는 레지스터 지정 필드의 일부만을 가지도록 하고, 연산의 종류 등은 지정하지 않도록 한다. 이렇게 함으로써, 암묵적으로 지정가능한 범용 레지스터만을 사용하고 있다면, 생략가능한 워드를 생략할 수 있다. 상기 확장된 처리를 지정하는 신규한 명령코드를 개별적으로 추가하지 않기 때문에, 명령코드가 늘어나지 않아(명령코드의 비트수가 늘어나지 않아) 명령의 실행처리속도를 저하시키지 않는다. 상기 생략가능한 명령코드를 부가함으로써, 명령에 의하여 모든 범용 레지스터를 선택할 수 있기 때문에, 프로그램의 용이성을 해지지 않게 된다. 또한, 임의의 량의 범용 레지스터의 일부를 원하는 태스크마다 또는 원하는 인터럽트 처리 등에 확보해 둠(다른 태스크나 처리에서는 사용하지 않는다)으로써, 상기 태스크나 인터럽트 처리에 있어서 범용 레지스터를 대피시키거나 할 필요가 없으며, 고속화를 꾀할 수 있다. 또한, 상기 태스크나 인터럽트 처리에 확보하는 범용 레지스터수는 임의로 할 수 있으므로, 태스크나 처리를 하는 동안에 사용하는 범용 레지스터를 상호 쉽게 융통할 수 있다.
일반적으로, 레지스터의 접속은 메모리의 접속보다 고속이기 때문에, 범용 레지스터수를 증가시킴으로써, 고속으로 처리할 수 있는 데이터 량을 증가시킬 수 있으며, 나아가 CPU의 처리속도를 향상시킬 수 있다.
명령과 어드레싱 모드의 조합을 확장하기 위하여, 기존의 메모리·레지스터간의 전송명령의 단수 또는 복수, 레지스터·레지스터간의 연산명령 중 복수의 명령코드를 조합시켜 이를 결합시키는 명령확장용 전치명령코드를 도입한다. 상기 명령확장용 전치명령코드에 이어, 메모리·레지스터간 명령을 실행하는 경우에는, 범용 레지스터가 아니라 CPU내의 임시 레지스터와 같은 프로그램상 해방되어 있지 않은 래치수단과 메모리의 사이에서 데이터 전송을 수행한다. 또한, 계속해서 레지스터·레지스터간의 연산명령을 실행하는 경우에는, 연산대상 내의 단수 또는 복수의 데이터를 상기 래치수단으로부터 판독하도록 한다. 그 연산결과의 메모리에 격납하는 경우에는, 상기 전송명령으로 사용한 메모리의 어드레스를 다른 래치수단에 격납하고, 상기 연산명령의 연산결과를 상기 래치수단에 격납함과 동시에, 메모리·레지스터간의 전송명령을 스스로 생성하여(즉, 프로그램에 명시되어 있지 않아도 생성하여), 상기 어드레스를 격납한 래치수단의 내용을 어드레스로서, 그리고 상기 연산결과를 격납한 래치수단의 내용을 데이터로서 메모리로의 기록을 수행한다.
이 때, 메모리·레지스터간의 전송명령, 레지스터·레지스터간의 연산명령의 명령코드는 기존의 것이기 때문에, 단독으로는 종래와 마찬가지로 동작하며, 기존의 명령실행을 저해하지 않는다. 따라서, 기존의 명령만을 사용하고 있는 기존의 소프트웨어 자산을 효과적으로 이용할 수 있다. 데이터 처리장치는, 소프트웨어 자산에 관한 상위 호환을 유지하여 기능향상을 실현할 수 있다.
어드레스 공간 전체에 대응하는 비트길이의 프로그램 카운터를 설치하고, 프로그램용으로서는 어드레스 공간전체, 적어도 대부분을 리니어하게 이용할 수 있게 함과 동시에, 비교적 소규모의 데이터를 취급하는 정도로 데이터 전송의 어드레싱 모드를 축소하거나, 전송데이터의 데이터 크기를 한정하여 원하는 응용분야 등에서의 이용상의 편의성을 해치지 않고 논리적 규모를 축소할 수 있다.
데이터 접속시에, 사용할 수 있는 어드레스 공간 내지는 효율적으로 사용할 수 있는 어드레스 공간을 작게 하고, 이와 같은 어드레스 공간을 2개로 분할함으로써 이용상의 편의를 해치지 않으며, 상위 CPU와의 어드레스 공간상의 호환성을 유지함과 동시에, 상위 CPU에 실효 어드레스 계산방법 등을 절환하는 동작모드를 미리 준비해 둠으로써, 소프트웨어상의 호환성을 유지할 수 있다.
프로그램용 어드레스 공간을 넓힘으로써, C언어 등의 고급언어를 사용한 프로그래밍 등에 대한 적성을 향상시킬 수 있다. 또한, 스택포인터를 절환할 수 있게 함으로써, OS 등의 태스크 관리시의 스택 용량의 원하지 않는 증가를 억지할 수 있다.
또한, 개발장치에 대해서는, 상기 상위 CPU의 명령세트에 대한 소프트웨어 개발장치를 준비하고, 또한, 한쪽이 다른쪽의 명령세트를 포함하지 않는 복수의 CPU에 대해서도 공통으로 이용할 수 있게 하여, 이용자가 CPU를 선택할 수 있도록 함으로써, 소프트웨어 개발장치의 개발효율을 향상시킬 수 있다. 사용자에게 있어서는, 상기 복수의 CPU를 사용하여도 소프트웨어 개발장치가 공통적이기 때문에, 원하지 않은 비용을 발생시키지 않는다. 상기 복수의 CPU 내에서의 이행이 용이해져 개발효율을 향상시킬 수 있다.
소프트웨어 개발장치상에서, 어셈블리언어 등의 범용적인 기능을 가지는 범용 레지스터의 기술을 복수종류 허락하도록 함으로써, 다른 CPU로부터의 이행을 비교적 용이하게 할 수 있다.
또한, 에뮬레이터에 대해서는, 상위 CPU와 하위 CPU로 에뮬레이션용 인터페이스를 공통화할 수 있으며, 또한, 상위 CPU의 에뮬레이션용 논리회로를 개발함으로써 이를 하위 CPU에도 이용할 수 있으며, 에뮬레이션용 프로세서를 포함한 개발효율을 향상시킬 수 있다. 또한, 동일한 에뮬레이터의 하드웨어를 공통화할 수 있으며, 이로써 신속하게 개발환경을 조절할 수 있음과 동시에, 또한, 에뮬레이터의 개발에 필요한 자원을 최소한으로 할 수 있다. 에뮬레이터에 탑재하는 역 어셈블러는 하위 CPU의 것을 개발함과 동시에 에뮬레이터상에서 대상인 CPU를 선택하는 수단을 설치함으로써, 실질적으로 하나의 역 어셈블러로 충분하게 되기 때문에, 개발효율을 더욱 향상시킬 수 있다.
《검토과제 D에 관한 발명의 효과》
검토과제 D에 관한 발명의 효과는 다음과 같다. 즉, 기존의 명령코드 내지 명령코드 일부의 워드를 조합시켜, 비트조건 분기명령/비트조건 서브루틴명령을 실현함으로써, 기존의 명령실행을 저해하지 않으면서 기존의 소프트웨어 자산을 효과적으로 이용할 수 있게 된다. 그리고, 기존의 CPU와 호환성을 유지하면서 또한 논리적·물리적 규모의 증대를 최소한으로 할 수 있다. 또한, 메모리상의 임의의 어드레스의 데이터 비트의 상태를 판정하고, 분기 및 서브루틴분기를 가능하게 할 수 있다. 더구나, CPU의 이용상 편의성의 향상, 명령코드길이의 단축 및 처리성능의 향상에 기여할 수 있다. 특히, 복수의 비트상태에 따라 분기처, 나아가 처리내용을 변경하는 처리의 프로그램 용량의 단축과 처리속도의 향상을 실현할 수 있다.
《검토과제 E에 관한 발명의 효과》
검토과제 E에 관한 발명의 효과는 다음과 같다. 즉, 복수의 범용 레지스터와 메모리간, 또는 복수의 범용 레지스터간에서의 전송명령을 갖춤으로써, 범용 레지스터의 비트길이 보다 큰 데이터라 하여도 용이하게 취급할 수 있으며, 이용상 편의성을 향상시킴과 동시에 데이터의 판독/기록에 대하여 명령의 판독 빈도를 줄여 고속화를 꾀할 수 있다.
단일한 명령으로, 복수의 범용 레지스터·메모리간 등의 전송을 수행함으로써, 상대적으로 명령코드의 판독회수를 줄여 데이터 처리를 고속화할 수 있다. 또한, 데이터의 판독/기록을 연속적으로 수행함으로써, 외부 메모리에 대한 버스트동작 등을 효과적으로 이용할 수 있다.
복수의 범용 레지스터를 지정하는 고정된 조합으로 함으로써, 명령코드길이를 단축시킬 수 있으며, 또한 각 명령의 실행 스테이트수를 고정시킴으로써 내부의 조건분기 수행을 없애고, 내부논리를 간결하게 하여 논리규모를 축소할 수 있다.
복수의 레지스터 전송을 지시하는 명령코드와, 기존의 단일한 범용 레지스터의 전송명령의 명령코드를 조합시켜 복수의 범용 레지스터의 전송명령을 실현함과 동시에, 단일한 범용 레지스터의 전송명령과 공통화된 동작을 수행하도록 함으로써, 논리적 규모의 증가를 최소한으로 할 수 있다. 기존의 단일한 범용 레지스터의 전송명령의 어드레싱 모드를 공통으로 이용할 수 있다. 기존의 단일한 범용 레지스터의 전송명령의 어드레싱 모드를 이용가능하게 함으로써, 프로그램의 작성을 용이하게 하여 이용상의 편의성을 향상시킬 수 있다.
상기 전송명령의 실효 어드레스 계산은, 연산기로 1회만 수행하도록 하고, 어드레스 버퍼에 인크리먼트(또는 디크리먼트)기능과 인크리먼트(또는 디크리먼트)결과를 보지하는 기능을 갖춤으로써 명령동작을 단순하게 하여, 기존의 전송명령과 공통화를 꾀할 수 있으며, 논리적인 규모의 증가를 최소한으로 할 수 있다. 실효 어드레스의 계산회수를 줄여 고속화를 꾀할 수 있다.
레지스터의 개수가 서로 다른 복수의 레지스터 전송명령을 복수명령 서포트함으로써, 또한 워드크기와 롱 워드크기 등, 데이터 크기가 다른 복수 레지스터 전송명령을 복수명령 서포트함으로써 프로그램의 작성을 용이하게 하여 이용상 편의성을 향상시킬 수 있다.

Claims (92)

  1. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 가지는 데이터 처리장치에 있어서,
    상기 명령코드는 기본단위로 구성되며,
    상기 명령코드는 레지스터를 지정하는 정보를 가지며,
    상기 레지스터를 지정하는 정보가 복수의 명령코드 기본단위로 분할되고, 분할된 한쪽 레지스터를 지정하는 정보를 가지는 명령코드를 생략할 수 있으며,
    생략된 경우에 생략된 레지스터정보를 대신해서 소정의 레지스터정보가 암묵적으로 상정되는 것을 특징으로 하는 데이터 처리장치.
  2. 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 가지며, 명령코드를 판독하고 제어수단으로 해독하여 동작하는 데이터 처리장치에 있어서,
    상기 명령코드는 기본단위로 구성되고, 상기 레지스터를 지정하는 레지스터 지정정보는 복수의 명령코드 기본단위로 분할되어 보지시킬 수 있으며,
    상기 제어수단은, 상기 명령코드가 보유하는 상기 레지스터 지정정보의 해독결과를 바탕으로 레지스터를 선택하고, 분할된 한쪽 레지스터 지정정보를 가지는 전치명령코드가 생략된 경우에는, 생략된 레지스터 지정정보를 대신해서 소정의 레지스터 지정정보를 암묵적으로 상정하여 레지스터를 선택하는 것임을 특징으로 하는 데이터 처리장치.
  3. 각각 복수개의 레지스터를 가지는 레지스터 세트를 복수개 갖추고, 명령코드를 판독하여 제어수단으로 해독하고, 그 해독결과에 따라 상기 레지스터를 선택하여 동작할 수 있는 데이터 처리장치에 있어서,
    상기 명령코드는 오퍼레이션 지정영역과 레지스터 지정영역을 가지며,
    상기 제어수단은, 상기 오퍼레이션 지정영역에 특정한 오퍼레이션 코드를 보유하는 전치명령코드에 대하여 당해 명령코드의 레지스터 지정영역이 보유하는 레지스터 지정정보를 레지스터 세트의 지정정보로 간주하고, 계속해서 판독한 명령코드의 레지스터 지정영역이 보유하는 레지스터 지정정보를 그 레지스터 세트내의 레지스터의 지정정보라 간주하여 레지스터를 선택하고, 상기 전치명령코드가 전치되지 않고 판독된 명령코드의 레지스터 지정영역이 보유하는 레지스터 지정정보를 규정된 레지스터 세트내의 레지스터 지정정보라 간주하여 레지스터를 선택하는 것임을 특징으로 하는 데이터 처리장치.
  4. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 가지는 데이터 처리장치에 있어서,
    명령코드를 보지하는 제 1 명령코드 보지수단 및 제 2 명령코드 보지수단과,
    명령코드를 디코드하는 명령디코드수단과,
    상기 레지스터를 선택하는 선택수단을 포함하고,
    상기 제 1 명령코드 보지수단의 출력은, 상기 제 2 명령코드 보지수단, 상기 명령디코드수단 및 상기 레지스터 선택수단에 결합되고,
    상기 제 2 명령코드 보지수단의 출력은 레지스터 선택수단에 결합되며,
    상기 명령디코드수단의 출력은, 레지스터 선택수단 및 상기 제 2 명령코드 보지수단에 결합되며,
    상기 명령디코드수단의 상기 제 2 명령코드 보지수단으로의 출력은, 상기 제 2 명령코드 보지수단에 대한 래치신호와, 소정의 값으로의 세트신호를 포함하며,
    상기 제 2 명령코드 보지수단에 대한 래치신호는, 상기 명령디코드수단이 소정의 명령코드를 디코드하였을 때 발생하며,
    상기 제 2 명령코드 보지수단에 대한 소정의 값으로의 세트신호는, 상기 소정의 명령코드에 의하여 지정된 레지스터를 이용하는 처리가 종료된 후에 발생하는것임을 특징으로 하는 데이터 처리장치.
  5. 청구항 4에 있어서,
    상기 명령디코드수단은, 명령의 실행종료에 호응하여 상기 제 2 명령코드 보지수단에 대한 상기 소정 값으로의 세트신호를 발생시키는 것임을 특징으로 하는 데이터 처리장치.
  6. 청구항 5에 있어서,
    데이터 보지수단을 더 포함하고, 상기 데이터 보지수단의 출력이 상기 제 2 명령코드 보지수단에 결합되며,
    상기 소정 값으로의 세트신호의 발생에 호응하여 상기 제 2 명령코드 보지수단은, 상기 데이터 보지수단의 값에 따른 값으로 세트되는 것임을 특징으로 하는 데이터 처리장치.
  7. 청구항 5 또는 청구항 6에 있어서,
    서브루틴 분기 또는 예외처리시에 사용하는 스택을 가리키는 스택포인터를 포함하고,
    다른 데이터 보지수단을 포함하고, 상기 다른 데이터 보지수단의 출력이 상기 레지스터 선택수단에 결합되고,
    상기 레지스터 선택수단은, 상기 명령디코드수단의 출력과, 상기 다른 데이터 보지수단의 출력에 호응하여 그 출력이 스택포인터를 선택하는 것임을 특징으로 하는 데이터 처리장치.
  8. 청구항 2 또는 청구항 3에 있어서,
    상기 전치명령코드를 가지지 않는 다른 데이터 처리장치를 위한 명령코드와 동일한 명령코드를 가지며, 당해 다른 데이터 처리장치의 명령실행기능을 포함한 상태에서 상기 전치명령코드를 이용함으로써, 레지스터 전체를 이용하는 명령을 실행할 수 있는 것을 특징으로 하는 데이터 처리장치.
  9. 청구항 2 또는 청구항 3에 있어서,
    상기 레지스터는, 데이터의 보지에는 전체 또는 2분할된 영역을 사용할 수 있으며, 상기 분할된 한쪽 비트수 보다도 많은 비트수를 가져 어드레스의 보지에도 사용되며,
    분할된 상기 한쪽 비트수에 상당하는 레지스터를 가지는 다른 데이터 처리장치를 위한 명령코드와 동일한 명령코드를 가지고, 당해 다른 데이터 처리장치의 명령시행기능을 포함한 상태에서 레지스터 전체를 이용하는 명령을 실행할 수 있는 것을 특징으로 하는 데이터 처리장치.
  10. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지는 데이터 처리장치에 있어서,
    메모리와 레지스터간의 데이터 전송을 수행하는 전송명령과, 레지스터상의 데이터에 대하여 연산을 수행하는 연산명령을 명령세트에 포함하고,
    전치명령코드와, 상기 전송명령의 명령코드와, 상기 연산명령의 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 메모리상의 데이터에 대한 직접적인 연산을 실행하는 것을 특징으로 하는 데이터 처리장치.
  11. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지는 데이터 처리장치에 있어서,
    메모리와 레지스터간의 데이터 전송을 수행하는 전송명령과, 레지스터상의 데이터에 대하여 연산을 수행하는 연산명령을 명령세트에 포함하고,
    전치명령코드와, 상기 전송명령의 명령코드와, 적어도 메모리를 지정하는 부분이 동일한 명령코드와, 상기 연산명령의 명령코드와, 적어도 연산을 지정하는 부분이 동일한 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 메모리상의 데이터에 대한 직접적인 연산을 실행하는 것을 특징으로 하는 데이터 처리장치.
  12. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지는 데이터 처리장치에 있어서,
    메모리와 레지스터간의 데이터 전송을 수행하는 전송명령과, 레지스터상의 데이터에 대하여 연산을 수행하는 연산명령을 명령세트에 포함하고,
    제어신호를 발생하는 처리와 메모리로부터 래치수단으로의 전송을 수행하는 처리와 래치수단의 내용에 대한 연산을 수행하는 처리를 실행하는 수단을 가지며, 상기 3개의 처리를 순서대로 실행함으로써, 메모리상의 데이터에 대한 직접적인 연산을 실행하는 것을 특징으로 하는 데이터 처리장치.
  13. 청구항 10에 있어서,
    상기 전치명령코드와, 상기 전송명령의 명령코드와, 상기 연산명령의 명령코드를 하나의 명령으로서 해석하였을 때, 당해 하나의 명령에 포함되는 각각의 명령코드로 규정되는 처리의 실행과 실행간에 인터럽트처리의 실행을 금지하고,
    상기 전송명령, 상기 연산명령을 독립된 명령으로서 실행할 때에는, 당해 개개의 명령의 실행과 실행간에 인터럽트처리를 실행할 수 있는 것을 특징으로 하는 데이처 처리장치.
  14. 청구항 10 또는 청구항 13에 있어서,
    연산결과를 반영하는 플래그수단을 더 가지며,
    상기 전치명령코드와, 상기 전송명령의 명령코드와, 상기 연산명령의 명령코드를 하나의 명령으로서 해석하였을 때, 상기 전송명령의 명령코드의 실행시에 상기 플래그수단의 변화를 억지하고,
    상기 전송명령을 독립된 명령으로서 실행하는 경우에는, 상기 플래그수단의 변화를 가능하게 하는 것임을 특징으로 하는 데이터 처리장치.
  15. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지는 데이터 처리장치에 있어서,
    메모리와 레지스터간의 데이터 전송을 실시하는 전송명령을 명령세트에 포함하고,
    전치명령코드와, 상기 전송명령의 명령코드와, 다른 전송명령의 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 메모리와의 사이의 직접적인 데이터 전송을 실행하는 것임을 특징으로 하는 데이터 처리장치.
  16. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지는 데이터 처리장치에 있어서,
    메모리와 레지스터간의 데이터 전송을 실시하는 전송명령을 명령세트에 포함하고,
    제어신호를 발생시키는 처리와 메모리로부터 래치수단으로의 전송을 수행하는 처리와 래치수단으로부터 메모리로의 전송을 수행하는 처리를 실행하는 수단을 가지며, 상기 3개의 처리를 순서대로 실행함으로써 메모리와의 사이의 직접적인 데이터 전송을 실행하는 것을 특징으로 하는 데이터 처리장치.
  17. 청구항 15에 있어서,
    상기 전치명령코드와, 상기 전송명령의 명령코드와, 다른 전송명령의 명령코드를 하나의 명령으로서 해석하였을 때, 당해 하나의 명령에 포함되는 각각의 명령코드로 규정되는 처리의 실행과 실행간에 인터럽트 처리의 실행을 금지하고,
    상기 전송명령, 상기 다른 전송명령을 실행하는 경우에는, 당해 개개의 명령의 실행과 실행간에 인터럽트 처리를 실행할 수 있는 것을 특징으로 하는 데이터 처리장치.
  18. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지는 데이터 처리장치에 있어서,
    메모리와 레지스터간의 데이터 전송을 수행하는 전송명령과, 레지스터상의 데이터에 대한 연산명령을 명령세트에 포함하고,
    상기 전송명령과 연산명령을 가지는 다른 마이크로 컴퓨터의 명령코드를 포함한 상태에서,
    상기 다른 마이크로 컴퓨터가 처리대상으로 하지 않는 전치명령코드와, 상기 전송명령의 명령코드와, 상기 연산명령의 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 상기 다른 마이크로 컴퓨터가 가지지 않는 메모리상의 데이터에 대한 직접적인 연산을 실행하는 명령을 명령세트에 포함하는 것임을 특징으로 하는 데이터 처리장치.
  19. 청구항 18에 있어서,
    상기 전치명령코드와, 상기 전송명령의 명령코드와, 상기 연산명령의 명령코드를 하나의 명령으로서 해석하였을 때 당해 하나의 명령에 포함되는 각각의 명령코드로 규정되는 처리의 실행과 실행간에 인터럽트 처리의 실행을 금지하고,
    상기 전송명령, 상기 연산명령을 독립된 명령으로서 실행하였을 때에는, 당해 개개의 명령의 실행과 실행간에 인터럽트 처리를 실행할 수 있는 것을 특징으로 하는 데이터 처리장치.
  20. 청구항 18 또는 청구항 19에 있어서,
    연산결과를 반영하는 플래그수단을 더 가지며,
    상기 전치명령코드와, 상기 전송명령의 명령코드와, 상기 연산명령의 명령코드를 하나의 명령으로서 해석하였을 때, 상기 전송명령의 명령코드의 실행시에 상기 플래그수단의 변화를 억지하고,
    상기 전송명령을 독립된 명령으로서 실행하는 경우에는, 상기 플래그수단의 변화를 가능하게 하는 것을 특징으로 하는 데이터 처리장치.
  21. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지는 데이터 처리장치에 있어서,
    메모리와 레지스터간의 데이터 전송을 수행하는 제 1, 제 2 전송명령을 명령세트에 포함하고,
    상기 제 1, 제 2 전송명령을 가지는 다른 마이크로 컴퓨터의 명령코드를 포함한 상태에서,
    상기 다른 마이크로 컴퓨터가 처리대상으로 하지 않는 전치명령코드와, 상기 제 1 전송명령의 명령코드와, 상기 제 2 전송명령의 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 상기 다른 마이크로 컴퓨터가 가지지 않는, 메모리와의 사이의 직접적인 데이터 전송을 실행하는 명령을 명령세트에 포함하는 것을 특징으로 하는 데이터 처리장치.
  22. 청구항 21에 있어서,
    상기 전치명령코드와, 상기 제 1 전송명령의 명령코드와, 상기 제 2 전송명령의 명령코드를 하나의 명령으로서 해석하였을 때, 당해 하나의 명령에 포함되는 각각의 명령코드로 규정되는 처리의 실행과 실행간에 인터럽트 처리의 실행을 금지하고,
    상기 제 1 전송명령과, 상기 제 2 전송명령을 독립된 명령으로서 실행하는 경우에는, 당해 개개의 명령의 실행과 실행간에 인터럽트 처리를 실행할 수 있는 것을 특징으로 하는 데이터 처리장치.
  23. 청구항 10 또는 청구항 18에 있어서,
    상기 메모리상의 데이터에 대한 직접적인 연산이란, 상기 명령코드에는 명시되어 있지 않은 데이터 래치수단에 메모리로부터 데이터를 로드하고, 당해 데이터 래치수단으로 로드한 데이터를 이용하여 수행하는 연산처리인 것을 특징으로 하는 데이터 처리장치.
  24. 청구항 15 또는 청구항 21에 있어서,
    상기 메모리와의 사이의 직접적인 데이터 전송이란, 상기 명령코드에는 명시되어 있지 않은 데이터 래치수단에 메모리로부터 데이터를 로드하고, 당해 데이터 래치수단의 데이터를 상기 메모리에 저장하는 처리인 것을 특징으로 하는 데이터 처리장치.
  25. 청구항 10 내지 청구항 24의 어느 한 항에 기재된 데이터 처리장치와,
    상기 데이터 처리장치에 접속되는 버스와,
    상기 버스에 접속되어, 상기 데이터 처리장치에 의한 상기 전송명령의 명령코드의 실행에 의하여 접속되는 메모리를 1개의 반도체칩에 포함하여 이루어지는 것을 특징으로 하는 반도체장치.
  26. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지며,
    메모리와 레지스터 간의 데이터 전송을 수행하는 전송명령을 명령세트에 포함하고,
    상기 전송명령의 명령코드는 데이터의 전송원 또는 전송처를 지시하기 위한 데이터 레지스터 필드를 가지는 마이크로 컴퓨터에 있어서,
    상기 명령세트에는, 상기 전송명령의 명령코드를, 명령코드의 선두가 아닌 위치에 포함하는 명령코드를 가지는 다른 명령을 더 포함하고,
    상기 다른 명령의 명령코드중에 있어서는, 상기 전송명령의 명령코드에 있어서의 상기 데이터의 전송원 또는 전송처를 지시하기 위한 데이터 레지스터 필드를 사용하지 않고, 상기 데이터의 전송원 또는 전송처를 지시하기 위한 정보필드를 상기 명령코드의 다른 위치에 보지하는 것을 특징으로 하는 마이크로 컴퓨터.
  27. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지는 마이크로 컴퓨터에 있어서,
    제 1 명령코드와 제 2 명령코드를 포함한 명령과, 상기 제 2 명령코드만을 가진 명령을 명령세트에 포함하고,
    상기 제 1 명령코드는, 메모리상의 데이터를 판독 또는 기록하기 위한 정보를 보지하는 레지스터 필드를 가지지 않고,
    상기 제 1 명령코드의 실행에는, 메모리상의 데이터의 판독 또는 기록을 수행하지 않고 명령의 판독동작만을 수행하며, 계속되는 명령코드에 대한 제어신호를 발생시키고,
    상기 제 2 명령코드는, 메모리상의 데이터를 판독 또는 기록하기 위한 정보를 보지하는 레지스터 필드를 가지며,
    상기 제 2 명령코드의 실행에는, 명령의 판독과, 상기 레지스터 필드의 정보를 바탕으로 하는 메모리의 판독 또는 기록을 수행하고, 상기 제 1 명령코드가 발생시킨 제어신호를 바탕으로 상기 메모리에 대한 판독 또는 기록의 데이터 전송처 또는 전송원의 어느 하나를 변경시키는 것임을 특징으로 하는 마이크로 컴퓨터.
  28. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지며, 메모리와 레지스터 간의 데이터 전송을 수행하는 전송명령과, 레지스터상의 데이터에 대하여 연산을 수행하는 연산명령을 명령세트에 포함하는 마이크로 컴퓨터에 있어서,
    상기 명령세트는, 전치명령코드와, 상기 전송명령의 명령코드와, 상기 연산명령의 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 메모리상의 데이터에 대한 연산을 실행하는 명령을 더 포함하고,
    상기 전송명령, 상기 연산명령, 및 연산결과를 메모리에 기록하기 위한 전송명령의 각 실행시간의 합계보다, 상기 메모리상의 데이터에 대한 연산을 실행하는 명령의 실행시간이 짧은 것을 특징으로 하는 마이크로 컴퓨터.
  29. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 가지며, 메모리와 레지스터 간의 데이터 전송을 수행하는 전송명령과, 레지스터상의 데이터에 대하여 연산을 수행하는 연산명령을 명령세트에 포함하는 마이크로 컴퓨터에 있어서,
    상기 명령세트는, 전치명령코드와, 상기 전송명령의 명령코드와, 적어도 메모리를 지정하는 부분이 동일한 명령코드와, 상기 연산명령의 명령코드와, 적어도 연산을 지정하는 부분이 동일한 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 메모리상의 데이터에 대한 연산을 실행하는 명령을 더 포함하고,
    상기 전송명령, 상기 연산명령, 및 연산결과를 메모리에 기록하기 위한 전송명령의 각 실행시간의 합계보다, 상기 메모리상의 데이터에 대한 연산을 실행하는 명령의 실행시간이 짧은 것을 특징으로 하는 마이크로 컴퓨터.
  30. 청구항 28에 있어서,
    상기 명령세트는, 전치명령코드와, 상기 전송명령의 명령코드와, 상기 연산명령의 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 메모리상의 데이터와 범용 레지스터상의 데이터에 대한 연산을 수행하고, 연산결과를 범용 레지스터에 격납하는 다른 명령을 더 포함하며,
    상기 전송명령 및 상기 연산명령의 실행시간의 합계보다, 상기 메모리 상의데이터와 범용 레지스터상의 데이터에 대한 연산을 수행하여, 연산결과를 범용 레지스터에 격납하는 다른 명령의 실행시간이 긴 것을 특징으로 하는 마이크로 컴퓨터.
  31. 명령코드를 판독하여 동작하는 마이크로 컴퓨터에 있어서,
    명령코드를 디코드하는 수단을 가지며,
    상기 디코드수단은, 소정의 명령코드를 해독하여 다음 명령코드에 대하여 제 1 데이터의 출력처 또는 입력원을 가리키는 제 1 제어신호와, 제 2 데이터의 출력처 또는 입력원을 지시하는 제 2 제어신호를 발생시키는 것임을 특징으로 하는 마이크로 컴퓨터.
  32. 청구항 31에 있어서,
    상기 디코드수단은, 상기 소정의 명령코드를 해독하여 다음 명령코드에 대하여 연산 또는 전송대상이 되는 데이터의 크기를 지시하는 신호를 더 발생시키는 것임을 특징으로 하는 마이크로 컴퓨터.
  33. 청구항 32에 있어서,
    명령코드를 판독하여 동작하는 마이크로 컴퓨터에 있어서,
    명령코드를 디코드하는 수단과,
    데이터 또는 어드레스를 격납할 수 있는 레지스터와,
    데이터를 연산하는 연산수단과,
    상기 명령코드에서는 명시되어 있지 않고, 데이터를 래치하는 래치수단을 포함하며,
    상기 디코드수단은, 제 1 제어신호를 발생시킴과 동시에, 소정의 명령코드와 상기 제 1 제어신호를 해독하고, 상기 연산수단의 입력데이터의 입력원 또는 출력데이터의 출력처의 적어도 한쪽을 상기 레지스터 또는 래치수단 중 어디서 선택할 것인가를 제어하는 제 2 제어신호를 생성하는 것임을 특징으로 하는 마이크로 컴퓨터.
  34. 청구항 33에 있어서,
    상기 래치수단은, 임시 레지스터 및 데이터 버퍼 레지스터 중에서 선택된 레지스터인 것을 특징으로 하는 마이크로 컴퓨터.
  35. 청구항 33에 있어서,
    상기 디코드수단은, 제 1 명령코드를 해독하여 상기 제 1 제어신호를 출력하고, 제 2 명령코드와 상기 제 1 제어신호를 해독하여 상기 제 2 제어신호를 출력하고,
    상기 제 2 제어신호는, 메모리상의 데이터를 판독하는 어드레스신호와 판독동작을 지시하는 판독신호이며, 상기 제 1 제어신호가 제 1 레벨일 때에는 메모리로부터의 판독데이터를 상기 레지스터에 격납시키고, 상기 제 1 제어신호가 제 2 레벨일 때에는 메모리로부터의 판독데이터를 상기 래치수단에 격납시키는 것임을 특징으로 하는 마이크로 컴퓨터.
  36. 청구항 35에 있어서,
    상기 제 1 명령코드는 전치명령코드이며, 상기 제 2 명령코드는 전송명령코드인 것을 특징으로 하는 마이크로 컴퓨터.
  37. 청구항 35에 있어서,
    상기 디코드수단은, 제 3 명령코드와 상기 제 1 제어신호를 해독하고, 상기 제 1 제어신호가 제 1 레벨일 때에는 상기 레지스터의 데이터를 상기 연산수단의 입력에 공급시키고, 제어신호가 제 2 레벨일 때에는 상기 래치수단의 데이터를 상기 연산수단의 입력에 공급시키는 것임을 특징으로 하는 마이크로 컴퓨터.
  38. 청구항 37에 있어서,
    상기 디코드수단은, 제 3 명령코드와 상기 제 1 제어신호를 해독하고, 제어신호가 제 1 레벨일 때에는 상기 레지스터에 상기 연산수단의 출력데이터를 공급시키고, 상기 제 1 제어신호가 제 2 레벨일 때에는 상기 래치수단에 상기 연산수단의 출력데이터를 공급시키는 것임을 특징으로 하는 마이크로 컴퓨터.
  39. 청구항 38에 있어서,
    상기 디코드수단은, 제 3 명령코드와 상기 제 1 제어신호를 해독하여 제 4 명령코드를 발생시키고, 발생시킨 상기 제 4 명령코드를 입력시켜 해독하고, 이 제 4 명령코드의 결과에 따라 메모리로의 데이터를 기록하는 제어신호를 발생시키는 것임을 특징으로 하는 마이크로 컴퓨터.
  40. 청구항 39에 있어서,
    명령코드에서는 명시되지 않고 데이터를 래치하는 또 다른 래치수단을 가지며,
    상기 디코드수단은, 제 2 명령코드(전송명령코드)를 해독하여 상기 발생한 메모리의 어드레스의 정보를 상기 다른 래치수단에 격납하고, 상기 제 4 명령코드의 해독결과에 따라 상기 다른 래치수단에 격납시킨 어드레스의 정보를 바탕으로 메모리로의 데이터를 기록시키는 것임을 특징으로 하는 마이크로 컴퓨터.
  41. 청구항 37 내지 청구항 40의 어느 한 항에 있어서,
    상기 제 3 명령코드는 연산명령코드인 것을 특징으로 하는 마이크로 컴퓨터.
  42. 청구항 37 또는 청구항 38에 있어서,
    상기 디코드수단은, 제 1 명령코드, 제 2 명령코드, 및 제 3 명령코드로 규정되는 처리의 실행과 실행간에 인터럽트 처리의 실행을 금지하는 제어신호를 생성하는 것임을 특징으로 하는 마이크로 컴퓨터.
  43. 청구항 39 또는 청구항 40에 있어서,
    상기 디코드수단은, 제 1 명령코드, 제 2 명령코드, 제 3 명령코드 및 제 4 명령코드로 규정되는 처리의 실행과 실행간에 인터럽트 처리의 실행을 금지하는 제어신호를 생성하는 것임을 특징으로 하는 마이크로 컴퓨터.
  44. 명령을 소정의 절차에 따라 실행하는 데이터 처리장치에 있어서,
    제 1 다른 데이터 처리장치의 명령실행기능을 포함함으로써 당해 제 1 다른 마이크로 컴퓨터의 명령코드와 동일한 명령코드를 실행할 수 있으며,
    제 2 다른 데이터 처리장치의 명령실행기능을 포함함으로써 당해 제 2 다른 데이터 처리장치의 명령코드와 동일한 명령코드를 실행할 수 있으며,
    상기 제 1 다른 데이터 처리장치의 명령실행기능에 포함되지 않고, 상기 제 2 다른 데이터 처리장치의 명령실행기능에 포함되는 부분의 오퍼랜드 지정과 오퍼레이션 지정의 쌍방 또는 둘 중 어느 한쪽에 관하여 복수의 상기 지정을 조합시킨 명령과,
    상기 제 2 다른 데이터 처리장치의 명령실행기능에 포함되지 않고, 상기 제 1 다른 데이터 처리장치의 명령실행기능에 포함되는 부분의 오퍼랜드 지정과 오퍼레이션 지정의 쌍방 또는 둘 중 어느 한쪽에 관하여 복수의 상기 지정을 조합시킨 명령을 실행하는 명령실행수단을 포함하여 이루어지는 것을 특징으로 하는 데이터 처리장치.
  45. 청구항 44에 있어서,
    상기 오퍼랜드 지정은, 실행어드레스의 연산, 범용 레지스터, 또는 어드레스 공간에 관한 지정인 것을 특징으로 하는 데이터 처리장치.
  46. 청구항 44 또는 청구항 45에 있어서,
    유효한 어드레스의 비트수와 벡터 및 스택의 단위크기가 상이한 제 1 동작모드와 제 2 동작모드를 절환할 수 있도록 가지며,
    상기 제 1 동작모드에 있어서의 유효한 어드레스의 비트수와 벡터 및 스택의 단위크기가, 상기 제 1 다른 데이터 처리장치와 동등하며,
    상기 제 2 동작모드에 있어서의 유효한 어드레스의 비트수와 벡터 및 스택의 단위크기가, 상기 제 2 다른 데이터 처리장치와 동등한 것을 특징으로 하는 데이터 처리장치.
  47. 명령을 소정의 절차에 따라 실행하는 데이터 처리장치에 있어서,
    데이터 정보의 보지에는 전체 또는 2분할한 영역을 이용할 수 있으며, 동시에 2분할된 하위측 비트수 보다도 많은 비트수로써 어드레스 정보의 보지에도 이용할 수 있는 범용 레지스터를 복수개 가지며,
    상기 2분할한 하위측 비트수에 상당하는 범용 레지스터를, 소정의 복수개 가지는 제 1 다른 데이터 처리장치의 명령코드와 동일한 비트수의 명령코드를 실행할 수 있도록 당해 제 1 다른 데이터 처리장치의 명령실행기능을 포함한 상태에서, 상기 2분할 할 수 있는 범용 레지스터의 전체를 이용하는 명령을 실행하고,
    또한, 상기 2분할이 가능한 범용 레지스터를 상기 소정의 복수개 보다도 적은 수를 가지는 제 2 다른 데이터 처리장치의 명령코드와 동일한 비트수의 명령코드를 실행할 수 있도록 당해 제 2 다른 데이터 처리장치의 명령실행기능을 포함한 명령실행수단을 가지고 이루어지는 것임을 특징으로 하는 데이터 처리장치.
  48. 제 1 데이터 처리장치에 있어서의 미정의된 명령코드를 전치명령코드로 하고, 상기 전치명령코드는, 이에 계속되는 제 1 데이터 처리장치의 명령코드의 정의를 변경하고, 제 1 데이터 처리장치에서는 정의되지 않는 오퍼랜드 지정과 오퍼레이션 지정의 쌍방 또는 둘 중 어느 한쪽에 관하여 복수의 상기 지정을 조합시킨 명령을 정의함으로써, 상기 제 1 데이터 처리장치의 명령을 포함하는 명령을 가지는 제 2 데이터 처리장치의 명령을 실현하고,
    상기 제 2 데이터 처리장치의 명령의 일부에 의하여 제 3 데이터 처리장치의 명령을 실현하는 것을 특징으로 하는 데이터 처리장치의 개발방법.
  49. 청구항 48에 있어서,
    상기 전치명령코드는 이에 계속되는 명령코드에 의하여 지정되는 범용 레지스터의 지정을 변경할 수 있도록 하는 것임을 특징으로 하는 데이터 처리장치의 개발방법.
  50. 청구항 48에 있어서,
    상기 전치명령코드는, 이에 계속되는 전송명령코드와, 다른 전송명령코드 또는 연산명령코드 내의 2이상의 명령코드에 의하여, 메모리상의 데이터의 조작을 정의하는 것임을 특징으로 하는 데이터 처리장치의 개발방법.
  51. 청구항 48 내지 청구항 50의 어느 한 항에 있어서,
    상기 제 1 및 제 2 데이터 처리장치는 CPU이며, 상기 제 1 데이터 처리장치는 명령실행기능상 제 2 데이터 처리장치에 대한 하위 CPU이고, 상기 제 2 데이터 처리장치는 명령실행기능상 제 1 데이터 처리장치에 대한 상위 CPU인 것을 특징으로 하는 데이터 처리장치의 개발방법.
  52. 청구항 44 내지 청구항 47의 어느 한 항에 기재된 데이터 처리장치와 에뮬레이션 인터페이스를 포함하고,
    상기 데이터 처리장치의 명령실행에 의하여 상기 제 1, 제 2 다른 데이터 처리장치의 명령실행을 대행할 수 있는 것임을 특징으로 하는 에뮬레이션용 프로세서.
  53. 청구항 52에 기재된 에뮬레이션용 프로세서를 탑재하고, 사용자 프로그램을 실행하는 에뮬레이션용 프로세서에 그 내부상태를 제어시키기 위한 제어프로그램을 격납할 수 있는 에뮬레이션 프로그램영역과,
    에뮬레이션 프로그램영역에 상기 제어프로그램을 격납하는 콘트롤 프로세서를 포함하여 이루어지는 것을 특징으로 하는 에뮬레이터.
  54. 청구항 53에 있어서,
    에뮬레이션용 프로세서는, 상기 제어프로그램에 따른 내부의 설정상태에 따라 상기 제 1, 제 2 다른 데이터 처리장치의 명령실행을 대행할 수 있게 되는 것을 특징으로 하는 에뮬레이터.
  55. 청구항 44 내지 청구항 47의 어느 한 항에 기재된 데이터 처리장치, 제 1 다른 데이터 처리장치 또는 제 2 다른 데이터 처리장치의 프로그램을 생성할 수 있는 소프트웨어 개발장치에 있어서,
    생성해야 할 프로그램의 대상이 되는 데이터 처리장치를 선택하는 수단을 가지는 것임을 특징으로 하는 소프트웨어 개발장치.
  56. 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 갖추고, 명령코드를 판독하여 제어수단으로 해독하여 동작하는 데이터 처리장치에 있어서,
    상기 명령코드는 기본단위로 구성되며, 상기 레지스터를 지정하는 레지스터 지정정보는 복수의 명령코드 기본단위로 분할하여 보지시킬 수 있게 되며,
    메모리와 레지스터간의 데이터 전송을 수행하는 전송명령코드와, 레지스터상의 데이터에 대하여 연산을 수행하는 연산명령코드를 명령세트에 포함하고,
    상기 제어수단은, 상기 명령코드가 보유하는 상기 레지스터 지정정보의 해독결과를 바탕으로 레지스터를 선택하고, 분할된 한쪽 레지스터 지정정보를 가지는ㄴ전치명령코드가 생략된 경우에는, 생략된 레지스터 지정정보를 대신해서 소정의 레지스터 지정정보를 암묵적으로 상정하여 레지스터를 선택하고, 또한, 전치명령코드와, 상기 전송명령코드와, 상기 연산명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 메모리상의 데이터에 대한 직접적인 연산을 실행시키는 것임을 특징으로 하는 데이터 처리장치.
  57. 청구항 56에 있어서,
    상기 전치명령코드와, 상기 전송명령코드와, 상기 연산명령코드를 하나의 명령으로서 해석하였을 때, 당해 하나의 명령에 포함되는 각각의 명령코드로 규정되는 처리의 실행과 실행간에 인터럽트 처리의 실행을 금지하고,
    상기 전송명령코드, 상기 연산명령코드를 독립된 명령으로서 실행할 때에는 당해 개개의 명령코드의 실행과 실행간에 인터럽트 처리를 실행할 수 있는 것을 특징으로 하는 데이터 처리장치.
  58. 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 갖추고, 명령코드를 판독하여 제어수단으로 해독해서 동작하는 데이터 처리장치에 있어서,
    상기 명령코드는 기본단위로 구성되어, 상기 레지스터를 지정하는 레지스터 지정정보는 복수의 명령코드 기본단위로 분할하여 보지시킬 수 있게 되며,
    메모리와 레지스터간의 데이터 전송을 실시하는 전송명령코드를 명령세트에 포함하며,
    상기 제어수단은, 상기 명령코드가 보유하는 상기 레지스터 지정정보의 해독결과를 바탕으로 레지스터를 선택하고, 분할된 한쪽 레지스터 지정정보를 가지는 전치명령코드가 생략된 경우에는, 생략된 레지스터 지정정보 대신에 소정의 레지스터 지정정보를 암묵적으로 상정하여 레지스터를 선택하고, 또한, 전치명령코드와, 상기 전송명령코드와, 다른 전송명령코드를 순서대로 판독하여 하나의 명령으로서 선택하고, 메모리와의 사이의 직접적인 데이터 전송을 실행시키는 것임을 특징으로 하는 데이터 처리장치.
  59. 청구항 58에 있어서,
    상기 전치명령코드와, 상기 전송명령코드와, 다른 전송명령코드를 하나의 명령으로서 해석하였을 때, 당해 하나의 명령에 포함되는 각각의 명령코드로 규정되는 처리의 실행과 실행간에 인터럽트 처리의 실행을 금지하고,
    상기 전송명령코드, 상기 다른 전송명령코드를 개개에 실행하는 경우에는 당해 개개의 명령코드의 실행과 실행간에 인터럽트 처리를 실행할 수 있는 것을 특징으로 하는 데이터 처리장치.
  60. 명령코드를 판독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 가지는 데이터 처리장치에 있어서,
    명령코드를 보지하는 제 1 명령코드 보지수단 및 제 2 명령코드 보지수단과,
    명령코드를 디코드하는 명령디코드수단과,
    상기 레지스터를 선택하는 선택수단을 포함하고,
    명령세트에는 메모리와 레지스터간의 데이터 전송을 수행하는 전송명령코드와, 레지스터상의 데이터에 대하여 연산을 수행하는 연산명령코드를 포함하고,
    상기 디코드수단은, 전치명령코드와, 상기 전송명령코드와, 상기 연산명령코드를 순서대로 해독하여 하나의 명령으로서 해석하고, 메모리상의 데이터에 대한 직접적인 연산을 실행시킬 수 있으며,
    상기 제 1 명령코드 보지수단의 출력은, 상기 제 2 명령코드 보지수단, 상기 명령디코드수단 및 상기 레지스터 선택수단에 결합되며,
    상기 제 2 명령코드 보지수단의 출력은 레지스터 선택수단에 결합되며,
    상기 명령디코드수단의 출력은, 레지스터 선택수단 및 상기 제 2 명령코드 보지수단에 결합되며,
    상기 명령디코드수단의 상기 제 2 명령코드 보지수단으로의 출력은, 상기 제 2 명령코드 보지수단에 대한 래치신호와, 소정 값으로의 세트신호를 포함하고, 상기 제 2 명령코드 보지수단에 대한 래치신호는, 상기 명령디코드수단이 소정의 명령코드를 디코드하였을 때 발생하며, 상기 제 2 명령코드 보지수단에 대한 소정 값으로의 세트신호는, 상기 소정의 명령코드에 의하여 지정된 레지스터를 이용하는 처리가 종료된 후에 발생되는 것을 특징으로 하는 데이터 처리장치.
  61. 명령코드를 해독하여 동작하고, 데이터 또는 어드레스를 격납할 수 있는 레지스터를 복수개 가지는 데이터 처리장치에 있어서,
    명령코드를 보지하는 제 1 명령코드 보지수단 및 제 2 명령코드 보지수단과,
    명령코드를 디코드하는 명령디코드수단과,
    상기 레지스터를 선택하는 선택수단을 포함하고,
    명령세트에는 메모리와 레지스터간의 데이터 전송을 수행하는 전송명령코드를 포함하고,
    상기 디코드수단은, 전치명령코드와, 상기 전송명령코드와, 다른 전송명령코드를 순서대로 판독하여 하나의 명령으로서 해석하여, 메모리와의 사이의 직접적인 데이터 전송을 실행시킬 수 있게 되며,
    상기 제 1 명령코드 보지수단의 출력은 상기 제 2 명령코드 보지수단, 상기 명령디코드 수단 및 상기 레지스터 선택수단에 결합되며,
    상기 제 2 명령코드 보지수단의 출력은 레지스터 선택수단에 결합되며,
    상기 명령디코드수단의 출력은, 레지스터 선택수단 및 상기 제 2 명령코드 보지수단에 결합되며,
    상기 명령디코드수단의 상기 제 2 명령코드 보지수단으로의 출력은, 상기 제 2 명령코드 보지수단에 대한 래치신호와 소정 값으로의 세트신호를 포함하고, 상기 제 2 명령코드 보지수단에 대한 래치신호는, 상기 명령디코드수단이 소정의 명령코드를 디코드하였을 때 발생하고, 상기 제 2 명령코드 보지수단에 대한 소정 값으로의 세트신호는, 상기 소정의 명령코드에 의하여 지정된 레지스터를 이용하는 처리가 종료된 후에 발생되는 것을 특징으로 하는 데이터 처리장치.
  62. 청구항 56 또는 청구항 60에 있어서,
    상기 메모리상의 데이터에 대한 직접적인 연산이란, 상기 명령코드에는 명시되지 않은 데이터 래치수단으로 메모리로부터 데이터를 로드하고, 당해 데이터 래치수단으로 로드한 데이터를 이용하여 수행하는 연산처리인 것을 특징으로 하는 데이터 처리장치.
  63. 청구항 58 또는 청구항 61에 있어서,
    상기 메모리와의 사이의 직접적인 데이터 전송이란, 상기 명령코드에는 명시되지 않은 데이터 래치수단으로 메모리로부터 데이터를 로드하고, 당해 데이터 래치수단의 데이터를 상기 메모리에 저장하는 처리인 것을 특징으로 하는 데이터 처리장치.
  64. 청구항 56 내지 청구항 63의 어느 한 항에 기재된 데이터 처리장치와,
    상기 데이터 처리장치에 접속되는 버스와,
    상기 버스에 접속되어 상기 데이터 처리장치에 의한 상기 전송명령의 명령코드의 실행에 의하여 접속되는 메모리를 1개의 반도체 칩에 포함하여 이루어지는 것을 특징으로 하는 반도체장치.
  65. 어드레스 공간의 비트수에 상응하는 비트수의 프로그램 카운트수단과,
    데이터 정보의 보지에는 전체 또는 2분할한 영역을 이용할 수 있으며, 동시에 2분할된 상기 한쪽 비트수 보다도 많은 비트수로써 어드레스 정보의 보지에도 이용할 수 있는 복수의 범용 레지스터와,
    명령실행수단을 가지며,
    상기 명령실행수단은,
    데이터 정보의 보지에 상기 범용 레지스터의 전체를 이용하는 명령과, 상기 범용 레지스터와 다른 기억장치와의 사이의 데이터 전송명령을 실행할 수 있으며,
    상기 데이터 전송명령의 전송데이터의 비트수를 상기 범용 레지스터의 2분할한 상기 한쪽 비트수 이하로 하는 것이 가능하며,
    어드레스 공간상의 데이터를 지정하기 위한 어드레싱 모드의 일부를 어드레스 공간상에서 복수로 분리된 부분에서 유효하게 하는 것임을 특징으로 하는 데이터 처리장치.
  66. 청구항 65에 있어서,
    상기 어드레스 공간상에서 복수로 분리된 한쪽 부분은, 명령실행의 개시어드레스를 지정하는 벡터를 포함하며, 다른쪽 부분은 판독·기록가능한 다른 기억장치의 어드레스가 매핑되는 것임을 특징으로 하는 데이터 처리장치.
  67. 명령세트에 포함되는 명령코드를 판독하여 동작하는 데이터 처리장치에 있어서,
    어드레스 공간상의 데이터를 판독하고, 상기 데이터의 소정의 비트가 소정의 상태인 것에 호응하여 분기를 수행하는 분기명령을 상기 명령세트에 포함하고,
    상기 분기명령은, 명령코드의 기본단위의 복수배의 정보를 포함하여 구성되며,
    상기 분기명령의 제 1 기본단위정보는, 어드레스 공간상의 지정된 데이터를 판독하여 프로그래밍상 해방되어 있지 않은 래치수단에 격납하는 처리를 지시하고,
    상기 분기명령의 제 2 기본단위정보는, 상기 래치수단에 격납한 데이터의 소정의 비트를 검사하여 검사결과에 따라 분기할지의 여부에 대한 처리를 지시하는 것임을 특징으로 하는 데이터 처리장치.
  68. 청구항 67에 있어서,
    상기 제 1 기본단위정보는, 어드레스 공간상의 데이터의 지정방법에 따라 복수종류 중에서 사용할 수 있게 되고,
    상기 제 2 기본단위정보는, 분기처 어드레스의 지정방법에 따라 복수종류 중에서 사용할 수 있게 되고,
    상기 분기명령은, 상기 제 1 기본단위정보와 제 2 기본단위정보의 종류의 조합에 따른 동작을 지시하는 것임을 특징으로 하는 데이터 처리장치.
  69. 청구항 67 또는 청구항 68에 있어서,
    연산결과를 반영하는 플래그수단을 더 가지며,
    상기 제 2 기본단위정보는, 독립된 조건분기명령으로서 기능할 수 있으며, 상기 독립된 조건분기명령으로서 기능할 때에는, 상기 플래그수단의 소정의 단수 또는 복수의 비트를 검사하고, 그 검사결과에 따라 분기하는 지시를 부여하는 것임을 특징으로 하는 데이터 처리장치.
  70. 명령세트에 포함되는 명령코드를 판독하여 동작하는 데이터 처리장치에 있어서,
    메모리와 레지스터간의 데이터 전송을 수행하는 전송명령과, 레지스터에 격납한 데이터의 소정의 비트를 검사하여 검사결과에 따라 분기할지의 여부에 대한 동작을 수행하는 분기명령을 상기 명령세트에 포함하고,
    전치명령코드, 상기 전송명령의 명령코드 및 상기 분기명령의 명령코드를 순서대로 판독하여 하나의 명령으로서 해석하고, 어드레스 공간상의 지정된 데이터를 판독하여 프로그래밍상 해방되어 있지 않은 래치수단에 격납하고, 상기 래치수단에 격납한 데이터의 소정의 비트를 검사하여 검사결과에 따라 분기할지의 여부에 대한 동작을 수행하는 것임을 특징으로 하는 데이터 처리장치.
  71. 청구항 70에 있어서,
    연산결과를 반영하는 플래그수단을 더 가지며, 상기 전치명령코드와 함께 하나의 명령으로서 해석된 상기 전송명령은, 상기 플래그수단의 변화를 억지하는 것임을 특징으로 하는 데이터 처리장치.
  72. 청구항 70 또는 청구항 71에 있어서,
    상기 래치수단에 결합된 비트검사수단을 가지며,
    상기 비트검사수단은, 상기 전치명령코드와 함께 하나의 명령으로서 해석되는 상기 분기명령의 소정의 비트에 따라 검사결과의 출력을 수행하고,
    상기 전치명령코드와 함께 하나의 명령으로서 해석되는 상기 분기명령은, 상기 검사결과의 출력에 호응하여 분기할지의 여부에 대한 판정을 수행하는 것임을 특징으로 하는 데이터 처리장치.
  73. 청구항 70 내지 청구항 72의 어느 한 항에 있어서,
    명령코드를 디코드하는 디코드수단을 가지며,
    상기 디코드수단은, 상기 전치명령코드와 함께 하나의 명령으로서 해석되는 상기 전송명령을 해독하고, 후속 분기명령의 명령코드에 대하여 동작의 변경을 지시하는 제어신호를 발생하는 것임을 특징으로 하는 데이터 처리장치.
  74. 청구항 70 내지 청구항 73의 어느 한 항에 있어서,
    상기 전치명령코드와 함께 하나의 명령으로서 해석되는 상기 전송명령 및 분기병령을 실행할 때, 상기 전송명령의 명령코드로 규정되는 처리와 상기 분기명령의 명령코드로 규정되는 처리와의 사이에 인터럽트 처리의 삽입을 금지하는 것임을 특징으로 하는 데이터 처리장치.
  75. 명령세트에 포함되는 명령코드를 판독하여 동작하는 데이터 처리장치에 있어서,
    어드레스 공간상의 데이터를 판독하고, 판독한 데이터를 이용하여 데이터 처리를 수행하는 복합명령을 상기 명령세트에 포함하고,
    상기 복합명령은, 명령코드의 기본단위의 복수배의 정보를 포함하여 구성되며,
    상기 복합명령의 제 1 기본단위정보는, 어드레스 공간상의 규정된 데이터를 판독하여 프로그래밍상 해방되어 있지 않은 래치수단에 격납하는 처리를 지시하고,
    상기 복합명령의 제 2 기본단위정보는, 상기 래치수단에 격납한 데이터를 이용한 소정의 데이터 처리를 지시하는 것임을 특징으로 하는 데이터 처리장치.
  76. 청구항 75에 있어서,
    상기 래치수단은 임시 데이터 레지스터 또는 임시 어드레스 레지스터인 것을 특징응로 하는 데이터 처리장치.
  77. 복수개의 범용 레지스터를 가지고 명령을 실행하는 실행수단과, 명령을 해독하여 상기 실행수단을 제어하는 제어수단을 포함하는 데이터 처리장치에 있어서,
    상기 제어수단에 대하여 지정가능한 복수개의 범용 레지스터의 조합을 고정적으로 하고, 당해 조합한 고정적인 복수개의 범용 레지스터와 어드레스 공간상의 메모리와의 사이에서 데이터 전송을 실행시키는 복수 레지스터·메모리간 전송명령을 명령세트에 포함하여 이루어지는 것임을 특징으로 하는 데이터 처리장치.
  78. 청구항 77에 있어서,
    상기 제어수단은 상기 복수 레지스터·메모리간 전송명령이 보유하는 정보에 따라 상기 실행수단의 연산기에 최초로 접속되는 메모리 어드레스를 계산시키고, 계속해서 접속되는 메모리 어드레스를 상기 실행수단의 어드레스 버퍼에 갱신시키는 것임을 특징으로 하는 데이터 처리장치.
  79. 청구항 77 또는 청구항 78에 있어서,
    상기 복수 레지스터·메모리간 전송명령은, 복수단위의 명령코드로 구성되며, 그 일부의 명령코드는, 단일한 범용 레지스터와 메모리와의 사이의 전송명령의 명령코드와 공통인 것을 특징으로 하는 데이터 처리장치.
  80. 청구항 77 내지 청구항 79의 어느 한 항에 있어서,
    상기 복수 레지스터·메모리간 전송명령은, 메모리의 어드레스를 지정하는 복수종류의 어드레싱 모드로부터 선택된 하나의 어드레싱 모드가 지정되어 있는 것임을 특징으로 하는 데이터 처리장치.
  81. 청구항 77 또는 청구항 80의 어느 한 항에 있어서,
    상기 제어수단에 대하여 지정가능한 복수개의 범용 레지스터의 조합을 고정적으로 하고, 당해 조합된 고정적인 복수개의 범용 레지스터와 범용 레지스터와의 사이에서 데이터 전송을 실행시키는 복수 레지스터·레지스터간 전송명령을 명령세트에 포함하여 이루어지는 것임을 특징으로 하는 데이터 처리장치.
  82. 청구항 81에 있어서,
    상기 복수 레지스터·레지스터간 전송명령은, 레지스터를 지정하는 정보의 하위비트가 전송원 레지스터와 전송처 레지스터에서 공통되어 있는 것을 특징으로 하는 데이터 처리장치.
  83. 청구항 77 내지 청구항 82의 어느 한 항에 있어서,
    상기 레지스터는, 데이터의 보지에는 전체 또는 2분할된 영역을 사용할 수 있으며, 상기 분할된 한쪽 비트수 보다도 많은 비트수로써 어드레스의 보지에도 사용되고,
    분할된 상기 한쪽 비트수에 상당하는 레지스터를 가지는 다른 데이터 처리장치의 명령코드와 동일한 명령코드로써, 당해 다른 데이터 처리장치의 명령실행기능을 포함한 상태에서, 레지스터 전체를 이용하는 명령을 실행할 수 있는 것을 특징으로 하는 데이터 처리장치.
  84. 청구항 77 내지 청구항 83의 어느 한 항에 있어서,
    명령코드는 레지스터를 지정하는 정보를 가지며, 상기 레지스터를 지정하는 정보가 복수의 명령코드 기본단위로 분할되고, 분할된 한쪽 레지스터를 지정하는 정보를 가지는 명령코드가 생략가능하게 되며, 생략된 경우에는, 생략된 레지스터 정보를 대신해서 소정의 레지스터 정보가 암묵적으로 상정되는 것을 특징으로 하는 데이터 처리장치.
  85. 청구항 77 내지 청구항 84의 어느 한 항에 기재된 데이터 처리장치와, 송신 또는 수신회로와, 송신 또는 수신데이터를 격납하는 기억수단을 가지며,
    상기 기억수단이, 상기 데이터 처리장치의 어드레스 공간상에 배치되어 이루어지는 것을 특징으로 하는 데이터 처리시스템.
  86. 복수개의 범용 레지스터를 가지고 명령을 실행하는 실행수단과, 명령을 해독하여 상기 실행수단을 제어하는 제어수단을 포함하는 데이터 처리장치에 있어서,
    상기 제어수단에 대하여 지정가능한 복수개의 범용 레지스터의 조합을 고정적으로 하고, 당해 조합된 고정적인 복수개의 범용 레지스터와 범용 레지스터 또는 어드레스 공간상의 소정의 어드레스 영역과의 사이에서 데이터 전송을 실행시키는 복수 레지스터 전송명령을 명령세트에 포함하여 이루어지는 것을 특징으로 하는 데이터 처리장치.
  87. 청구항 86에 있어서,
    상기 복수 레지스터 전송명령은, 명령확장코드와 데이터 전송명령코드를 가지며,
    상기 데이터 전송명령코드는, 소스 데이터 또는 데스티네이션 데이터의 적어도 한쪽 소재를 레지스터 지정영역으로 지정하는 것이며,
    상기 명령확장코드는, 상기 레지스터 지정영역으로 지정되는 레지스터를 선두로 순서대로 선택할 복수개의 레지스터의 개수를 지정하는 레지스터 개수 지정영역을 가지고,
    상기 제어수단은 상기 데이터 전송명령코드의 레지스터 지정영역으로 지정된 레지스터를 기점으로 레지스터 개수 지정영역으로 지정된 범위를, 상기 조합된 고정적인 복수개의 범용 레지스터로서 지정하는 것을 특징으로 하는 데이터 처리장치.
  88. 청구항 87에 있어서,
    상기 복수 레지스터 전송명령은, 생략가능한 레지스터 확장코드를 더 가지며,
    상기 레지스터 확장코드는, 데이터 전송명령코드의 레지스터 지졍영역의 정보와 함께 레지스터를 지정하는 정보를 가지며, 레지스터 확장코드가 생략된 경우에는, 생략된 레지스터 정보를 대신하여 소정의 레지스터 정보가 암묵적으로 상정되는 것을 특징으로 하는 데이터 처리장치.
  89. 청구항 86 내지 청구항 88의 어느 한 항에 있어서,
    상기 레지스터 지정영역은 소스 데이터 및 데스티네이션 데이터의 쌍방의 소재를 지정하는 것임을 특징으로 하는 데이터 처리장치.
  90. 청구항 89에 있어서,
    상기 제어수단은, 레지스터 지정영역의 정보에 따라 지정가능한 조합된 고정적인 복수개의 범용 레지스터를 순서대로 지정하기 위한 정보의 하위복수비트를, 전송원 레지스터와 전송처 레지스터에서 공통화하여 생성하는 것을 특징으로 하는 데이터 처리장치.
  91. 청구항 86 내지 청구항 88의 어느 한 항에 있어서,
    상기 레지스터 지정영역은, 소스 데이터 또는 데스티네이션 데이터 중 어느 한쪽을 지정하고, 다른쪽 데이터는 데이터 전송명령코드로 지정되는 메모리상의 데이터인 것을 특징으로 하는 데이터 처리장치.
  92. 청구항 91에 있어서,
    상기 제어수단은, 상기 복수 레지스터 전송명령이 보유하는 정보에 따라 상기 실행수단의 연산기에 최초로 접속되는 메모리 어드레스를 계산시키고, 계속해서 접속되는 메모리 어드레스를 상기 실행수단의 어드레스 버퍼에 갱신시키는 것임을 특징으로 하는 데이터 처리장치.
KR1020000022824A 1999-04-30 2000-04-28 데이터 처리장치 KR20010007031A (ko)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
JP99-123450 1999-04-30
JP12345099 1999-04-30
JP99-151890 1999-05-31
JP15189099 1999-05-31
JP99-191608 1999-07-06
JP19160899 1999-07-06
JP32051899 1999-11-11
JP99-320518 1999-11-11
JP2000056019A JP2001202243A (ja) 1999-04-30 2000-02-28 データ処理装置
JP2000-056019 2000-02-28

Publications (1)

Publication Number Publication Date
KR20010007031A true KR20010007031A (ko) 2001-01-26

Family

ID=27526991

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000022824A KR20010007031A (ko) 1999-04-30 2000-04-28 데이터 처리장치

Country Status (3)

Country Link
US (1) US6745320B1 (ko)
JP (1) JP2001202243A (ko)
KR (1) KR20010007031A (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE0002440D0 (sv) 2000-06-28 2000-06-28 Virtutech Ab Interpreter
JP4626032B2 (ja) * 2000-08-28 2011-02-02 株式会社デンソー プログラム変換装置,プログラム変換方法及び記録媒体
JP4044756B2 (ja) * 2001-12-11 2008-02-06 松下電器産業株式会社 プログラム変換装置、プログラム変換方法、及び当該プログラム変換装置を実現するプログラム
JP2004152049A (ja) * 2002-10-31 2004-05-27 Renesas Technology Corp データ処理装置
US7680990B2 (en) * 2003-05-30 2010-03-16 Hewlett-Packard Development Company, L.P. Superword memory-access instructions for data processor
US7852343B2 (en) * 2004-04-15 2010-12-14 Panasonic Corporation Burst memory access method to rectangular area
US7774748B1 (en) * 2004-08-03 2010-08-10 Tensilica, Inc. System and method for automatic conversion of a partially-explicit instruction set to an explicit instruction set
US8804212B2 (en) * 2007-05-23 2014-08-12 Kyocera Document Solutions Inc. Stepping motor control device capable of reducing load on CPU
JP5217431B2 (ja) 2007-12-28 2013-06-19 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP5357475B2 (ja) * 2008-09-09 2013-12-04 ルネサスエレクトロニクス株式会社 データプロセッサ
JP5437878B2 (ja) * 2010-03-29 2014-03-12 ルネサスエレクトロニクス株式会社 情報処理装置
TWI441020B (zh) * 2011-02-15 2014-06-11 Nat Univ Chung Cheng Extend the segmentation method of the RISC processor scratchpad
KR101949417B1 (ko) * 2011-12-02 2019-02-20 삼성전자주식회사 프로세서, 명령어 생성 장치 및 방법
JP5610551B2 (ja) * 2013-02-04 2014-10-22 ルネサスエレクトロニクス株式会社 データプロセッサ
JP5767374B2 (ja) * 2014-07-30 2015-08-19 ルネサスエレクトロニクス株式会社 データプロセッサ
CN105404496B (zh) * 2015-11-06 2018-11-16 深圳国微技术有限公司 数据传输的控制方法和控制装置及具有其的微处理器
JP6819166B2 (ja) * 2016-09-13 2021-01-27 富士通株式会社 演算処理装置および演算処理装置の制御方法
US10761822B1 (en) * 2018-12-12 2020-09-01 Amazon Technologies, Inc. Synchronization of computation engines with non-blocking instructions
US11275701B2 (en) * 2020-06-24 2022-03-15 Qualcomm Incorporated Secure timer synchronization between function block and external SOC

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5083263A (en) * 1988-07-28 1992-01-21 Sun Microsystems, Inc. BISC with interconnected register ring and selectively operating portion of the ring as a conventional computer
JPH0944356A (ja) * 1995-08-03 1997-02-14 Hitachi Ltd プロセッサおよびデータ処理装置
JPH1011352A (ja) * 1996-06-19 1998-01-16 Hitachi Ltd データ処理装置およびそのレジスタアドレス変換方法
KR19990026795A (ko) * 1997-09-26 1999-04-15 윤종용 마이크로프로세서
US6092183A (en) * 1994-03-16 2000-07-18 Hitachi, Ltd. Data processor for processing a complex instruction by dividing it into executing units

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3839705A (en) * 1972-12-14 1974-10-01 Gen Electric Data processor including microprogram control means
JP2551167B2 (ja) * 1989-06-19 1996-11-06 日本電気株式会社 マイクロコンピュータ
JP3432532B2 (ja) * 1992-08-03 2003-08-04 株式会社日立製作所 データ処理装置
DE4434895C2 (de) * 1993-12-23 1998-12-24 Hewlett Packard Co Verfahren und Vorrichtung zur Behandlung von Ausnahmebedingungen
JPH07219769A (ja) * 1994-02-07 1995-08-18 Mitsubishi Electric Corp マイクロプロセッサ
JPH08263290A (ja) 1995-03-20 1996-10-11 Hitachi Ltd データ処理装置
JP2889845B2 (ja) * 1995-09-22 1999-05-10 松下電器産業株式会社 情報処理装置
JPH09198272A (ja) 1996-01-16 1997-07-31 Hitachi Ltd エミュレーション用プロセッサおよびエミュレータ
JPH1091443A (ja) * 1996-05-22 1998-04-10 Seiko Epson Corp 情報処理回路、マイクロコンピュータ及び電子機器
JP3292823B2 (ja) 1997-10-24 2002-06-17 ナカジマ鋼管株式会社 丸形鋼管の製造方法および丸形鋼管
JPH11151890A (ja) 1997-11-21 1999-06-08 Kuromikku:Kk 感熱発色・感熱消色式のホワイトボード及び発色・消色方法
JPH11191608A (ja) 1997-12-26 1999-07-13 Hitachi Ltd 半導体装置およびその製造方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5083263A (en) * 1988-07-28 1992-01-21 Sun Microsystems, Inc. BISC with interconnected register ring and selectively operating portion of the ring as a conventional computer
US6092183A (en) * 1994-03-16 2000-07-18 Hitachi, Ltd. Data processor for processing a complex instruction by dividing it into executing units
JPH0944356A (ja) * 1995-08-03 1997-02-14 Hitachi Ltd プロセッサおよびデータ処理装置
JPH1011352A (ja) * 1996-06-19 1998-01-16 Hitachi Ltd データ処理装置およびそのレジスタアドレス変換方法
KR19990026795A (ko) * 1997-09-26 1999-04-15 윤종용 마이크로프로세서

Also Published As

Publication number Publication date
US6745320B1 (en) 2004-06-01
JP2001202243A (ja) 2001-07-27

Similar Documents

Publication Publication Date Title
KR20010007031A (ko) 데이터 처리장치
US6298434B1 (en) Data processing device for processing virtual machine instructions
US7350055B2 (en) Tightly coupled accelerator
US7478351B2 (en) Designing system and method for designing a system LSI
US20060095722A1 (en) Program subgraph identification
EP2015174B1 (en) Microprogrammed processor having multiple processor cores using time-shared access to a microprogram control store
JP2008536240A (ja) レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス
US20080201564A1 (en) Data processor
JP2006313561A (ja) データ処理装置
US20040003209A1 (en) Data processor
KR100601745B1 (ko) 다중 데이터형 결과를 발생하는 컴퓨터 명령
JP2002215387A (ja) 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置
JP3839835B2 (ja) データ処理装置及びマイクロコンピュータ
JPH0651981A (ja) データ処理装置
JP2002157115A (ja) データ処理装置
US20040098708A1 (en) Simulator for software development and recording medium having simulation program recorded therein
JP3740321B2 (ja) データ処理装置
US20020004877A1 (en) Method and system for updating user memory in emulator systems
JP4545777B2 (ja) データ処理装置
JP2636821B2 (ja) 並列処理装置
JP3539951B2 (ja) データ処理装置
JP2002132499A (ja) データ処理装置及び記録媒体
JP4382076B2 (ja) データ処理装置
JP4498338B2 (ja) データ処理装置
JP2001297002A (ja) データ処理装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application