KR19990046284A - 확장명령어를갖는중앙처리장치 - Google Patents

확장명령어를갖는중앙처리장치 Download PDF

Info

Publication number
KR19990046284A
KR19990046284A KR1019990003201A KR19990003201A KR19990046284A KR 19990046284 A KR19990046284 A KR 19990046284A KR 1019990003201 A KR1019990003201 A KR 1019990003201A KR 19990003201 A KR19990003201 A KR 19990003201A KR 19990046284 A KR19990046284 A KR 19990046284A
Authority
KR
South Korea
Prior art keywords
instruction
operand
register
extended
field
Prior art date
Application number
KR1019990003201A
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 권기홍
Priority to KR1019990003201A priority Critical patent/KR19990046284A/ko
Publication of KR19990046284A publication Critical patent/KR19990046284A/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/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/30189Instruction operation extension or modification according to execution mode, e.g. mode flag

Abstract

본 발명은 메모리 어드레스, 변위(offset), 그리고 즉시 데이터(immediate data)를 가변하는 고정 길이 명령어를 가짐과 동시에 확장 명령어를 갖는 중앙 처리 장치에 관한 것이다.
본 발명에 따른 확장 명령어를 가진 중앙 처리 장치는 범용 레지스터와, 특수 레지스터와, 내부 레지스터로 구성되는 레지스터 파일과; 연산 기능을 수행하는 기능 블록과; 명령어를 저장하는 명령 레지스터와; 상기 명령 레지스터에 제어 신호를 발생하는 제어 블록과; 다수개의 상태 플래그를 포함하는 중앙 처리 장치에 있어서; 상기 특수 레지스터는 프로그래머가 접근 가능하며, 확장 데이터를 기억하는 확장 데이터 필드만으로 구성되거나 상기 확장 데이터 필드를 하나의 구성 요소로 가지는 확장 버퍼를 상태 레지스터 내에 포함하고; 상기 확장 버퍼에 상기 확장 데이터를 기억하는 명령어를 수행하면 상태가 변경되는 프로그래머가 접근 가능한 하나 또는 다수개의 비트로 구성되는 확장 플래그를 더욱 포함하는 것을 특징으로 한다.

Description

확장 명령어를 갖는 중앙 처리 장치{Central Processing Unit having Extendable Instructions}
본 발명은 확장 명령어를 갖는 중앙 처리 장치에 관한 것으로서, 특히 모든 길이의 메모리 어드레스, 변위 및 즉시 데이터를 표현할 수 있는 고정 길이 명령어를 가지는 중앙 처리 장치인 확장 명령어 세트 컴퓨터(Extendable Instruction Set Computer : EISC)에 관한 것이다.
선행 기술에 의한 중앙처리장치는 도 14에 도시된 바와 같이, 사용자가 쉽게 접근할 수 있는 영역으로 아키텍처에 맞게 구성된 GPR(General Purpose Register) 및 특수한 목적으로 사용되는 SPR(Special Purpose Register)로 구성된 레지스터 파일(7)과, 메모리로부터 패치된 명령어를 래치하는 명령어 레지스터(4)와, 상기 명령어 레지스터(4)에 래치된 명령어를 OP코드와 오퍼랜드로 디코딩하고 명령어에 따라 소정의 제어신호들을 출력하는 디코더/콘트롤부(5)와, 상기 디코더/콘트롤부(5)에서 디코딩된 명령어의 연산을 처리하는 연산처리부(6)와, 메모리에 데이터를 쓸 때나 메모리로부터 데이터를 읽어 올 때 래치하고 버퍼링하는 메모리 데이터 레지스터(1)와, 프로그램 카운터에서 계산된 어드레스를 래치하여 출력하는 메모리 어드레스 레지스터(2)와, 외부에서 입력되는 콘트롤시그날을 버퍼링하는 콘트롤시그날 레지스터(3)로 이루어져 있다.
상기와 같은 구성을 가진 중앙처리장치의 명령어는 기계어(machine language)라고도 하는데 2진수 비트의 나열로 표현되고 작용을 나타내는 OP 코드와 그 작용을 받는 객체인 오퍼랜드로 구성된다.
ADD 명령어를 예를 들어 OP 코드와 오퍼랜드의 예를 들어보자.
'A = B + C'는 'B'와 'C'를 더하여 'A'에 저장하라는 의미로 여기서 '+'는 작용을 나타내는 OP 코드이고 'A', 'B' 그리고 'C'는 작용을 받는 객체이므로 오퍼랜드가 된다. 이 표현식을 기계어로 예를 들어 표현하면 '0001 0000 0001 0010'으로 나타낼 수 있는데 순서대로 '0001'은 OP 코드 즉, '+'를 기호화 한 것이고, '0000', '0001' 그리고 '0010'은 각각 오퍼랜드인 A, B 그리고 C를 기호화 한 것이다. 이러한 2진수의 표현은 길고 읽기가 어려워 보다 간단한 16진수로 표현하기도 한다. 그래서 위와 같은 예의 16진수 표현은 '0×1012'가 된다. 기계어에서 오퍼랜드는 레지스터, 메모리 어드레스, 변위, 그리고 즉시 데이터 등이 있다.
레지스터는 그 수가 한정이 되어 있어 32개 이하인 경우가 많다. 예를 들어 레지스터의 수가 16개라면 4비트의 오퍼랜드로 이를 표현할 수 있다(2**4=16). 메모리 어드레스인 경우 32 비트 중앙처리장치는 4G바이트의 메모리를 사용할 수 있는데 이를 표현하기 위해서는 32비트의 어드레스가 필요하게 된다. 따라서 이를 정의하게 되는 오퍼랜드의 길이가 길어지게 된다. 그리고 변위와 즉시 데이터의 경우도 메모리의 경우와 유사하게 오퍼랜드의 길이가 길어지게 된다. 오퍼랜드의 길이가 길어지면 기계어의 길이가 길어지고 기계어의 길이가 길어지면 프로그램의 크기가 증가하게 되어 비효율적이 된다.
이러한 이유로 각각의 중앙처리장치는 오퍼랜드를 효율적으로 표현하는 기법을 가지게 된다.
IBM-PC에서 사용하는 80386은 여러 바이트 길이 명령어(Multi byte length instruction)를 가진다. 예를 들면 80386의 'MOVE' 명령 기계어는 오퍼랜드 길이에 따라 다음과 같이 정의된다.
MOV AL, 12 → B012
MOV AX, 1234 → B8 34 12
MOV EAX, 12345678 → 66B8 78 56 34 12
또한, MC6800도 80386과 유사하게 여러 16비트 길이 명령어(Multi 16bit length instruction)를 가진다.
이와 같이 가변 길이 명령어(Variable length instruction)는 어떠한 길이의 오퍼랜드도 나타낼 수 있는 장점을 가지고 있으나 기계어의 길이가 변화하므로 명령어 디코더, 예외처리 등이 어려워지는 단점을 가지게 된다. 이러한 가변 길이 명령어를 가지는 중앙처리 장치를 CISC(Complex Instruction Set Computer)라고 칭한다.
한편, RISC(Reduced Instruction Set Computer)에서는 기계어의 길이가 고정되어 있다.
이것의 예로 MIPS-R3000, SPARC, ARM-7 등은 32비트 고정 길이 명령어(32 bit fixed length instruction)를 가지고, Hitachi의 SH-3은 16비트 고정길이 명령어를 가진다. 이러한 고정길이 명령어는 모두 기계어의 길이가 일정하므로 명령어디코드, 예외처리 등이 손 쉬어 지므로 파이프라인을 적용하기 쉬워 간단한 하드웨어로 고성능 중앙처리장치의 구현이 가능한 반면에 명령어의 길이가 고정이 되어 오퍼랜드 길이에 제약이 따른다.
예를 들어 MIPS-R3000에서는 32비트 용량의 메모리를 가지나 기계어에서 표현할 수 있는 변위는 16비트이다. 또한 32비트 중앙처리 장치이면서도 즉시 상수의 길이도 16비트로 한정된다. 이에 따라서 프로그램 작성이 어렵고 따라서 성능을 저하시키는 요인이 되고 있다.
또한 'MOVE' 명령은 레지스터의 내용을 다른 레지스터로 복사하는 내용인데, MIPS-R3000은 32개의 레지스터를 가지므로 레지스터 오퍼랜드는 5비트 길이가 되며, 'MOVE'를 나타내는 OP코드를 6비트로 정의하면 16비트 길이 명령어로 정의할 수 있다. 그러나 고정길이 명령어를 사용하기 위해서 이와 같이 16비트로 표현 가능한 명령어를 32비트로 표현하고 있다. 따라서, 32비트 고정 길이 명령어는 오퍼랜드 길이가 제한되는 단점을 가지면서 또한 불필요하게 긴 명령어를 가지게 되는 단점이 있다.
또 다른 예로 TR-4101을 보자.
TR-4101은 16비트 고정 길이 명령어를 가지며 이러한 고정길이 명령어와 오퍼랜드를 일부 확장하는 기능을 가진다. 예를 들면, 메모리에서 데이터를 읽어오는 'LOAD'명령어는 'LOAD'를 나타내는 OP코드와, 읽어와서 저장되는 레지스터를 나타내는 목적 레지스터, 오퍼랜드와 메모리의 위치를 나타내는 인덱스 레지스터, 오퍼랜드와 인덱스로부터의 변위를 나타내는 변위 오퍼랜드로 구성된다. 이들 OP 코드와 여러 종류의 오퍼랜드를 16비트 길이의 명령어에 표현하기 위해서 TR-4101에서는 변위를 5비트로 제한하였다. 그러나 5비트 변위로는 메모리의 위치를 지정하기에는 충분하지 않다. 그래서 TR-4101에서는 'EXTEND' 명령어를 사용한다.
상기 'EXTEND' 명령어는 5비트의 OP코드와 11비트의 즉시 상수 오퍼랜드로 구성된다. 여기서 11비트의 즉시 상수 오퍼랜드는 'EXTEND' 명령어 다음에 위치하는 명령어에 따라서 다르게 해석된다. 예를 들어 'EXTEND' 명령어 다음에 'LOAD'가 나타나면 'EXTEND' 명령어의 11비트 즉시 상수 오퍼랜드와 'LOAD' 명령어의 5비트 변위가 연계(concatenation)되어서 16비트 변위를 나타낸다.
이러한 TR-4101의 명령어 확장 기술은 변위와 즉시 상수를 16비트로 확장하는데 그치므로 종래 RISC 중앙처리 장치가 가지고 있었던 오퍼랜드 길이의 제약은 해결하지 못하고 있다.
또한 오퍼랜드 확장이 가능한 명령어는 선행하는 'EXTEND' 명령어의 유무에 따라서 오퍼랜드 지정이 달라지게 된다. 따라서 'EXTEND' 명령어가 연계되는 명령어는 하나의 명령어로 취급되어 진다. 즉, 'EXTEND'명령어 다음에는 예외 처리가 수행될 수 없다는 단점을 가지고 있어서 주변장치의 응답요구를 실시간으로 처리할 수 없는 문제점이 있다.
본 발명은 상기한 문제점을 해결하기 위한 것으로서, 모든 길이의 메모리 어드레스, 변위 및 즉시 데이터를 표현하는 CISC의 장점과 고정 길이 명령어를 사용함으로써 명령어 디코더 회로가 간단하고, 예외 처리가 손쉬워 파이프라인 및 메모리 관리 장치(Memory Management Unit : MMU)가 간단해지는 RISC의 장점을 취하여, 모든 길이의 메모리 어드레스, 변위 및 즉시 데이터를 표현할 수 있는 고정 길이 명령어를 가지는 중앙 처리 장치인 확장 명령어 세트 컴퓨터(Extendable Instruction Set Computer : EISC)를 제공하는데 그 목적이 있다.
즉, 본 발명은 확장 버퍼 EB와 확장 버퍼의 상태를 나타내는 수단(EF)과 EB에 값을 저장하는 명령어와 확장 버퍼의 상태에 따라서 오퍼랜드 해석을 달리하는 명령어를 가지는 중앙 처리 장치를 제공하는데 그 목적이 있다.
도 1은 본 발명에 따른 확장 명령어를 갖는 중앙 처리 장치의 구성을 설명하는 상위 블록도.
도 2는 도 1의 데이터 입/출력 블록의 구조를 설명하는 블록도.
도 3은 도 1의 레지스터 파일의 구조를 설명하는 블록도.
도 4는 도 1의 주소 생성기의 구조를 설명하는 블록도.
도 5는 본 발명에 따른 중앙 처리 장치의 명령어 실행을 개략적으로 보여주는 상위 상태도.
도 6은 본 발명에 따른 중앙 처리 장치의 리셋 명령어의 실행을 보여주는 상태도.
도 7은 본 발명의 중앙 처리 장치의 푸시/팝 명령어의 실행을 보여주는 상태도.
도 8은 본 발명의 중앙 처리 장치의 인터럽트 명령어 실행 과정을 보여주는 상태도.
도 9, 10은 본 발명의 중앙 처리 장치의 주 상태 제어를 설명하는 흐름도.
도 11은 도 1의 연산 기능 블록(ALSU)의 구조를 설명하는 블록도.
도 12는 본 발명에 따른 중앙 처리 장치의 확장 명령어 실행을 설명하는 흐름도.
도 13은 본 발명의 중앙 처리 장치의 파이프라인 동작을 설명하는 도면.
도 14는 종래의 중앙 처리 장치의 구성을 설명하는 블록도.
* 도면의 주요 부분에 대한 부호의 설명 *
10... 주소 생성기20... 연산 기능 블록
30... 레지스터 파일 40... 특수 목적 레지스터
50... 범용 레지스터60... 제어 블록
70... 데이터 입/출력 블록
상기한 문제점을 해결하기 위한 본 발명에 따른 확장 명령어를 갖는 중앙 처리 장치는, 접근 속도가 빠른 소규모 기억 장치인 레지스터의 집합인 레지스터 파일과 상기 레지스터 파일과 접속되어 정보를 송수신하는 통로인 내부 버스와 상기 내부 버스에 연결되어 있으며 외부 버스를 연결하는 외부 버스 버퍼와 상기 내부 버스에 연결되어 있으며 연산 기능을 수행하는 기능 블록과, 상기 내부 버스에 연결되어 있으며 수행중인 명령어를 기억하는 명령 레지스터와, 상기 명령 레지스터에 연결되어 있어서 명령어를 해석하여 상기 레지스터 파일과 상기 내부 버스와 상기 외부 버스 버퍼와 상기 기능 블록과 상기 명령 레지스터에 제어 신호를 발생하는 제어부로 구성되며, 상기 레지스터 파일은 프로그래머가 접근 가능하고 연산 원시 데이터나 연산 결과 데이터를 저장하거나 상기 연산 데이터를 기억하고 있는 메모리의 번지 등을 기억하는 하나 또는 다수개의 범용 레지스터와 프로그래머가 접근 가능하고 중앙처리 장치 동작에 필요한 정보를 기억하는 하나 또는 다수개의 특수 레지스터와 프로그래머가 접근할 수 없으며 중앙처리장치 동작에 필요한 특수한 기능이나 연산의 중간 과정 등을 기억하는 하나 또는 다수개의 내부 레지스터로 구성되어 있고, 상기 특수 레지스터의 일종으로 진행하고 있는 프로그램이 저장되어 있는 메모리 번지를 기억하는 프로그램 카운터를 가지며, 상기 프로그램 카운터가 지정하는 프로그램 번지가 상기 내부 버스에 출력되고, 상기 내부 버스에 출력된 프로그램 번지가 상기 외부 버스 버퍼를 통하여 프로그램을 기억하고 있는 외부 메모리의 번지로 출력되고, 상기 방법으로 지정된 외부 메모리로부터 명령어가 읽혀져서 상기 외부 버스 버퍼를 통하여 상기 내부 버스에 연결되고, 상기 명령어가 상기 명령 레지스터에 저장되어 상기 제어부에서 상기 제어 신호를 발생하며, 상기 명령 레지스터에 저장되어 상기 제어부에서 해석되는 상기 명령어는 동작을 지정하는 OP 코드 필드만으로 구성되거나 상기 OP 코드 필드와 동작의 작용을 받는 하나 또는 다수개의 오퍼랜드 필드로 구성되고, 상기 OP 코드 필드와 상기 오퍼랜드 필드는 하나 또는 다수개의 2진수 비트로 구성되고, 상기 오퍼랜드 필드는 상기 명령어의 종류에 따라서 메모리 번지를 나타내는 번지 오퍼랜드나 상기 범용 레지스터나 상기 특수 레지스터에 기억된 메모리 번지로부터의 변위를 나타내는 변위 오퍼랜드나 연산이나 메모리 번지나 제어에 사용되기 위한 즉시 상수로 나타내는 즉시 상수 오퍼랜드 등으로 해석하고 실행하는 통상적인 중앙처리 장치에 있어서, 상기 특수 레지스터의 일종으로 프로그래머가 접근 가능한 상태 레지스터를 더 포함하고, 상기 상태 레지스터는 확장 데이터 필드와 중앙처리장치의 동작에 필요한 정보나 플래그 및 기타 필드로 구성되고, 상기 상태 레지스터의 확장 데이터 필드에 확장 데이터를 기억하는 동작을 나타내는 OP 코드와 즉시 상수 오퍼랜드 필드로 구성된 명령어를 제어부에서 해석하여 즉시 상수 오퍼랜드 필드를 상태 레지스터의 확장 데이터 필드에 기억시키는 동작을 수행하며, 상기 OP 코드와 OP 코드가 필요로 하는 상기 오퍼랜드 필드의 일부분으로 구성되는 기본 명령어는 상기 상태 레지스터의 확장 데이터 필드에 기억된 상기 확장 데이터가 상기 기본 명령어의 상기 일부분 오퍼랜드 필드와 연결(concatenation)되어서 완전한 오퍼랜드를 가진 명령어를 구성하여 상기 제어부에서 해석되고 실행되는 것을 특징으로 하는 확장 명령어를 갖는 것을 특징으로 한다.
본 발명의 64 비트 EISC는 범용 레지스터(General Purpose Register : GPR)와 특수 목적 레지스터(Special Purpose Register : SPR)와, 중앙 처리 장치의 상태를 나타내는 상태 플래그들(Status Flags)과 이들 상태 플래그의 집합인 상태 레지스터(Status Register)를 가지며, 이에 더하여 명령어의 오퍼랜드를 확장할 수 있도록 사용되는 확장 버퍼(Extension Buffer : EB)와 명령어 확장 상태를 나타내는 확장 플래그(Extension Flag : EF)를 상태 레지스터 내에 가진다.
EB의 길이는 중앙 처리 장치의 워드 길이에 따라 변경되는데 본 발명인 64 비트 EISC는 48 비트의 EB를 갖는다. 여기서 사용된 EB의 길이는 단지 본 발명에서 구현된 하나의 일례일 뿐 고정된 값은 아님을 밝힌다.
또한, EF는 1 비트 이상의 길이로 프로그래머(programmer)가 접근 가능한 형태이어야 한다. 본 발명의 기술에서 EF는 상태 레지스터의 한 비트로 설명하고 있는데, 이 또한 설명의 용이성을 위한 것으로 EF의 구현 형태를 제한하고자 하는 목적이 아님을 밝힌다.
본 발명의 64 비트 EISC는 EB에 데이터를 저장하면서 동시에 EF를 1로 설정하는 명령어를 가지는데 본 발명의 기술에서는 설명의 편의성을 위하여 LEBI(Load EB Immediate)라는 명령어를 사용한다. 또한 64 비트 중앙 처리 장치에서 32 비트 고정 길이 명령어를 사용하고 LEBI 명령어의 오퍼랜드를 24 비트 즉시 상수라고 정의하면
LEBI#123456
라는 명령문은 이 명령문 수행이전에 EF가 1 이었다면 EB의 상위 24 비트 자리인 47-24 위치에 이 명령문의 오퍼랜드 부분인 123456을 EB에 더하는 작용을 한다. 또한 이 명령문 수행 이전에 EF가 0 이었다면 이 명령문의 오퍼랜드 부분인 123456의 부호를 확장(Sign extend)하여 48 비트를 만들어서 EB에 저장한다. 그리고 두 경우 모두에서 EF는 1로 설정된다.
앞의 기술에서 LEBI 명령어의 오퍼랜드 길이는 다른 명령어의 정의에 따라서 결정되는 것으로 본 발명에서는 그 길이에 제한을 두지는 않는다. LEBI 명령어 다음에 ALSU Immediate Operation이 수행된다면 ALSU 명령어에 포함된 즉시 상수와 LEBI에 의해 EB에 저장된 값이 적절하게 더하여져서 오퍼랜드로 사용된다.
구체적인 설명을 위해 다음과 같은 명령어를 정의하자.
ADD src, immd, dst ( immed : 16bit )
LEBI와 위의 ADD 명령어를 수행하면 Rsrc 와 (EB + immed)를 더한 값이 Rdst에 저장된다. 물론 ADD 명령어에 앞서 LEBI를 반복 수행하면 64비트까지도 확장 가능하다.
위의 예에서 LEBI 명령어를 사용하여 오퍼랜드로 사용될 즉시 상수를 확장하는 예를 보였는데, 다음은 LEBI가 메모리 어드레스를 구하는데 변위를 확장시키는 예를 들어보자.
예를 들어서 32 비트 고정 길이 명령어를 가지는 64 비트 중앙 처리 장치에서 프로그램 카운터 상대 어드레싱 분기 명령어를 다음과 같이 정의하자. 단, 편의상 16 비트 변위를 가지는 것으로 정의하면
JMPoffset
과 같이 나타낼 수 있다.
JMP 명령어는 프로그램의 순서를 바꾸는 명령어로 이 명령문 다음에는 현재 프로그램의 위치에서 변위(offset) 만큼 떨어진 위치의 명령문을 수행하게 된다. 그런데 변위의 길이가 16 비트로 할당되어 있으므로 점프되는 위치는 현재의 프로그램 카운터에서부터 215번지에서 (215-1)번지 이내로 국한된다. 그러나 읽고자 하는 메모리의 주소가 이 영역을 벗어나는 경우가 발생할 수 있다. 본 발명의 EISC에서는 이 경우에 EF의 상태에 따라서 변위를 2가지로 해석한다. 먼저 EF가 0인 경우에는 변위의 길이를 16 비트로 해석하며, EF가 1인 경우에는 48비트인 EB의 값을 왼쪽으로 16 비트 산술 이동(Arithmetic shift) 시킨 다음에 명령문에 나타난 16 비트 변위를 더하여 변위를 산출한다. 따라서 전술하였듯이 LEBI의 반복 수행을 통해 64 비트 변위까지 확장시킬 수 있다.
명령어의 정의에 따라서 EB를 왼쪽으로 이동시키는 길이는 다르지만 구현의 편의를 위해 오퍼랜드와 변위를 만드는데 16비트를 왼쪽으로 산술 이동시키는 것으로 한다. 이에 대한 자세한 내용은 뒤에서 다시 설명하도록 하자.
EF 플래그는 LEBI 명령어에 의하여 1이 되고, LEBI 명령을 제외하고 EB를 참조하는 모든 명령어에서 0이 된다. 그러나 구현 방식에 따라서 다른 값을 가질 수도 있으며, EF 플래그는 명령어의 확장 상태를 나타내는 다른 구현 형태를 가질 수 있다.
이와 같이 본 발명의 64 비트 EISC는 모든 명령어가 고정 길이이고, 모든 명령어가 독립적으로 수행되며, 가변 길이의 오퍼랜드를 가질 수 있다.
이하, 첨부된 도면을 참조하여 본 발명인 64 비트 EISC에 대해 기능 블록과 확장 버퍼의 사용 예를 들어 상세히 설명하고, LEBI 명령어를 이용해 EB를 어떻게 확장하고 확장된 EB를 어떤 명령어들이 사용하는지 알아보기로 하자.
도 1은 64비트 EISC의 구조를 설명하는 상위 블록도이다. 도시된 것과 같이 64 비트의 확장 명령어를 가진 EISC의 내부 구조는 주소 생성 블록(Address Generation Block)(10), 데이터 입/출력 블록(Data Input/Output Block)(70), 레지스터 파일(30), 연산 기능 블록(ALSU & Multiplier/Divider)(20), 그리고 제어 블록(Instruction Decoder & Control Logic)(60) 등으로 구성되며 이러한 내부 블록은 64 비트 데이터 버스와 64 비트 어드레스 버스로 연결되어 있다.
우선 64 비트 MCU의 데이터 처리 흐름을 살펴보자.
처음에 전원이 켜지거나 리셋이 되면, 내부적으로 도 6에 나타나 있는 리셋 스테이트 머신(Reset State Machine)(TS1)이 동작하여 리셋 벡터(Reset Vector)를 메모리로부터 읽어온다(RS1). 여기서 리셋 벡터(Reset Vector)란 사용자가 작성한 응용 프로그램의 시작 주소를 의미한다. 읽어온 리셋 벡터 값은 도 2의 데이터 입/출력(DIO) 블록내의 데이터 래치(Data Latch)(74)에 저장되었다가 레지스터 파일(30) 내의 PC(프로그램 카운터)(41)로 옮겨지며(RS2), 다음 사이클부터 프로그램이 순차적으로 진행되는 한 이 값은 메모리 구성(Configuration)에 맞게 증가되고 메모리로부터 명령어를 읽어오는데 사용된다. 여기까지의 동작을 실행하고 나면 리셋 스테이트 머신(TS1)은 스타트 신호를 발생시켜(RS3) 메인 스테이트 머신(Main State Machine)(TS2)에 넘겨주며 동작을 마친다(RS4).
스타트 신호를 넘겨받은 도 9, 10의 메인 스테이트 머신(TS2)은 프로그램 카운터(41) 값에 따라 명령어를 읽어와 DIO 블록(70) 내의 PIR(Pre-fetch Instruction Register)(72)에 저장하게 하고(MS10,MS12), 이것을 다시 명령어 레지스터에 옮겨 해당 명령어를 실행시키고, 또한 이와 동시에 다음 명령어를 읽어와 파이프라인을 유지시켜 이후로 한 사이클마다 한 개의 명령어가 실행되도록 제어한다(MS14 ~ MS94).
명령어는 크게 내부 명령, 메모리 명령, 분기 명령, 인터럽트/예외(Interrupt/Exception) 등으로 나눌 수 있는데, Pre-Decoder 블록(78)에서 이를 결정한다. 명령어가 명령어 레지스터에 패치되어 실행될 때 Pre-Decoder 블록(78)에서 발생시키는 이 TYPE값에 따라 적절한 제어 신호를 발생시키는 상태로 천이를 하게 되는 것이다(MS14).
본 발명인 64비트 확장 명령어를 가진 중앙 처리 장치는 도 13과 같은 3단 파이프라인(명령어 패치/디코드, ALU, MEM 사이클) 특성을 갖는다. 도 1에 도시된 제어 블록(60)에서는 이러한 각 파이프에 해당하는 제어 신호들과 각종 명령어들의 실행을 위해 필요한 신호들을 발생시키는 역할을 수행한다.
ALSU 블록(20)은 레지스터 파일(30)에 저장된 데이터와 실행되는 명령어, 그리고 제어 블록(60)에서 발생되는 신호에 의해 사용자가 요구하는 적절한 동작을 수행한다.
이렇게 실행된 값은 내부 레지스터 파일(30)에 저장되거나 메모리로 옮겨지게 되는데 이때 적절한 메모리의 주소를 발생시키는 블록이 주소 생성기(10)이다. 주소는 크게 3가지로 구분할 수 있다. 순차적인 명령어를 읽어오기 위해 사용되는 PC값, 위에서 설명된 것처럼 특별한 상태, 즉 부팅이나 리셋, 또는 인터럽트나 예외 등이 발생했을 때에 필요로 하는 표 2의 벡터 값, 이러한 경우 그 때의 프로세서 상태를 저장하기 위해 사용되는 스택 포인터 값, 일반적인 데이터를 읽거나 비순차적인 분기 발생시에 필요로 하는 유효 주소 등이다. 주소 생성기(10)는 각 명령어의 파이프에 맞는 주소를 발생시켜준다. 이상에서 본 발명인 64 비트 확장 명령어를 가진 중앙처리장치의 일반적인 동작의 흐름을 설명하였다.
다음은 위에서 언급된 각 기능 블록들의 구체적인 구성과 기능들을 설명하기로 하자.
도 2의 DIO(70)는 데이터 입/출력 중재기(Data I/O Arbitration)(71), 데이터 래치(Data Latch)(74), PIR(Pre-fetch Instruction Register)(72), IR(76), 그리고 Pre-Decode Unit(78)으로 구성된다. 본 발명의 중앙처리장치는 8 비트, 16 비트, 32 비트, 64 비트의 데이터 액세스가 가능하다. 그래서 각각의 명령어에 맞게 데이터의 크기를 할당하는 기능이 필요하다. 이를 데이터 입/출력 중재기(71)에서 수행하는데 그 동작을 표 1에 나타내었다. 이렇게 읽혀진 데이터는 데이터 래치(74)에 일시적으로 저장되고, 그 값을 해당 레지스터(Rd)에 옮겨 메모리로부터 데이터를 읽는 명령어를 완성한다. 반면, 명령어의 경우는 연속적인 패치 즉 파이프라인을 위해 PIR(72)과 IR(76)이 필요하다. 실행되는 명령어는 IR(76)에 그리고 다음 명령어는 PIR(72)에 저장되며, 이때 Pre-Decode Unit(78)에서 PIR(72)에 저장된 명령어의 유형을 결정하여 그 명령어가 실행할 때 정확한 상태 천이를 하도록 한다. 이것은 도 9의 메인 스테이트 머신에서 TYPE이란 값을 의미한다.
레지스터 파일(30)의 상세도는 도 3에 보여지듯이 크게 GPR(50)과 SPR(40)로 나눌 수 있다. GPR(50)은 사용자가 쉽게 접근할 수 있는 영역이며, 32개의 64비트 레지스터로 구성되어있다. 반면에 SPR(40)은 특수한 목적으로 사용되는 레지스터들로 구성되어 있으며, 그 각각을 설명하면 다음과 같다.
1. PC(Program Counter)(41) : 프로그램의 순차적인 흐름을 유지하기 위해 사용된다.
2. SP(User/Supervisor Stack Pointer)(42,43) : 예외 발생시나 비순차적인 프로그램의 흐름에 의해 분기가 필요할 때 등의 경우에 그 예외나 분기에 해당하는 동작을 수행하고 난 후, 현재 진행중인 프로그램의 흐름을 유지하기 위해 필요한 내용(PC, SR, etc)을 저장해야 하고, 이때 그 주소를 나타내기 위해 사용된다.
3. LR(Link Register)(44) : 비순차적인 프로그램의 흐름에 의해 분기가 발생할 때 위에서 설명한 것처럼 프로그램 카운터의 값을 메모리(스택 영역)에 저장하는데 프로그램의 특성상 말단 함수의 경우에는 바로 주소를 되돌려 받고, 다시 말단 함수를 호출하고 하는 동작을 반복하기 쉽다. 이러한 것을 고려하여 말단 함수의 호출일 경우에 그 주소를 메모리에 저장하지 않고 임시적으로 저장하기 위하여 이 LR를 사용한다. 이를 통하여 함수의 동작을 끝내고 그 주소 값을 돌려 받을 때 메모리를 읽지 않아도 되므로 성능을 향상시킬 수 있다.
4. ML/MH(Multiply Result Low/High Register)(45,46) : 본 발명의 64 비트 EISC에서는 곱셈기와 나눗셈기가 존재한다. 그래서 이들의 연산 결과를 임시적으로 저장하기 위해 이 두개의 레지스터를 사용한다.
5. SR(Status Register)(47) : 일반적인 모든 MCU에서처럼 연산하는 과정의 여러 가지 상태 값을 저장하기 위해 사용하지만 거기에 확장 명령어를 위한 버퍼로서 24비트, 확장 명령어를 사용하고 있는지를 나타내는 확장 플래그를 위한 1비트가 추가되었다. 도시된 것처럼 확장 버퍼로는 63~16비트가 할당되어 있고, 11번째 비트가 확장 플래그로 할당되어 있다. 이 11번째 비트는 다음에 이어지는 명령어가 변위 또는 즉시 데이터 값으로서 짧은 값을 취할지, 확장된 값을 취할지를 결정해 주는 것으로 앞서 확장 버퍼를 사용했는지 여부를 알 수 있도록 하는 플래그이다. 물론, 본 발명인 64 비트 EISC에서는 한 비트로 이 플래그를 나타냈지만 이는 하나의 실시 예일 뿐 실제로는 다양한 방법을 통해 하드웨어적으로 구현이 가능하다.
도 4의 주소 생성 블록은 인터럽트 벡터 생성 블록(Interrupt Vector Generation Block)(12), 유효 주소 생성 블록(Effective Address Generation Block)(14), 주소 증가기(Address Incrementer)(16), 그리고 이들 중에 하나의 주소를 선택하는 MUX(18)로 구성된다. 전술하였듯이 주소 소스는 레지스터 파일(30)로부터 오는 프로그램 카운터(41) 혹은 스택 포인터(42,43) 값, 인터럽트나 예외 발생시 서비스 루틴의 시작 포인터인 벡터 값, 그리고 일반적인 데이터를 읽거나 분기 명령에 의한 유효 주소 등으로 구분할 수 있다. 먼저 인터럽트 벡터 생성 블록(12)은 인터럽트나 예외 발생시 해당하는 서비스 루틴의 주소의 포인터를 발생시키는 기능을 수행하며, 이것을 표 2에 나타내었다.
유효 주소 생성 블록(14)은 메모리에 데이터를 쓰거나 메모리로부터 데이터를 읽을 때 혹은 여러 가지 분기 명령에 의하여 주소의 비순차적인 증감이 필요할 때 ALU의 연산 결과를 유효 주소로 사용하기 위해 일시적으로 저장하는 기능을 갖는다. 또한 레지스터 파일(30)로부터 프로그램 카운터(41) 값과 스택 포인터(42,43) 값을 받는데 프로그램 카운터(41) 값은 프로그램의 순차적인 흐름을 위해, 스택 포인터(42,43) 값은 인터럽트나 예외 발생시 현재 프로세서의 상태를 저장하고자 할 때 사용된다. 또한 여기에 주소 증가기(16)가 있는데 프로그램 카운터(41)와 스택 포인터(42,43)는 순차적으로 증가하거나 감소하는 특징이 있다. 그래서 순차적으로 증가나 감소할 때 주소 증가기(16)를 사용하여 주소를 발생시킨다. 이들 중에서 제어 블록으로부터 선택 신호를 받아 MUX(18)를 통해 한 개를 선택하여 메모리 주소를 발생시킨다.
도 5부터 도 10까지는 구현된 프로세서의 모든 동작을 제어하는 제어 블록을 보여주는 상태도이다. 이러한 제어 블록은 구현하는 방법이 여러 가지가 있겠으나 여기서는 스테이트 머신(State Machine)으로 구현되었다. 이것은 다시 메인 블록(Main Block)(TS2), RST 블록(Reset Block)(TS1), 푸시/팝 블록(PUSH/POP Block)(TS3), INT 블록(TS4) 등으로 나뉘어 질 수 있는데, 이러한 전체 블록 중 RST 블록(TS1)은 전체 스테이트 머신을 초기화하는 블록으로 전체 레지스터를 리셋 시키고(RS1) 프로그램의 시작 주소를 PC(41)에 셋팅하며(RS2) 메인 블록(TS2)에 초기화가 되었음을 알리는 역할을 한다(RS3,RS4).
메인 블록(TS2)은 RST 블록(TS1)으로부터 초기화가 끝났음을 알리는 신호가 들어오면(MS10) 메모리로부터 프로그램을 읽어서(MS12) 실행하며 이를 위해 필요한 각종 제어 신호를 발생시킨다(MS14 ~ MS94). 또한 패치한 명령어가 PUSH/POP이라면 푸시/팝 블록(TS3)으로, SWI나 혹은 그 밖의 인터럽트가 발생하면 INT 블록(TS4) 등으로 제어권을 넘겨주고 그 명령어의 수행이 마쳐지면 다시 각각의 블록들은 메인 스테이트 머신 블록(TS2)으로 제어권을 넘겨준다.
다음은 나머지 스테이트 머신 블록들의 동작을 간략하게 설명한 것이다.
EISC의 특징 중 하나가 RISC처럼 단순한 하드웨어이면서, CISC처럼 명령어의 밀도를 높여 둘의 장점을 선택하였다는 것인데, 그 예를 PUSH/POP 명령어에서 발견할 수 있다. 도 7은 PUSH/POP 명령어의 실행을 설명하는 상태도이다. 일반적으로 인터럽트나 예외 발생시 현재 시스템의 상태를 저장하기 위해서 다수의 레지스터들을 스택 영역에 옮겨 놓는다. 이러한 특징을 고려하여 EISC에서는 1개의 명령어로 최대 16개의 레지스터를 옮길 수 있다. IR(76)에 PUSH/POP 명령어가 옮겨질 때 메인 스테이트 머신(TS2)은 제어권을 푸시/팝 스테이트 머신 블록(TS3)으로 넘긴다. 푸시/팝 스테이트 머신(TS3)은 명령어 내의 레지스터 리스트를 순서(PUSH : MSB First, POP : LSB First)대로 옮긴 후 다시 제어권을 메인 스테이트 머신(TS2)에 넘겨주게 된다(PPS1 ~ PPS6).
구현한 마이크로 프로세서는 인터럽트 소스로서 NMI(Non-Maskable Interrupt), IRQ(Interrupt Request), SWI(Software Interrupt) 등을 지원한다. 도 8은 인터럽트 명령어를 실행하는 상태를 보여주는 인터럽트 스테이트 머신 블록(TS4)의 상태도이다. 인터럽트가 발생하면 패치한 명령어를 수행한 후에 현재의 시스템의 상태를 저장하기 위해 다수의 레지스터를 스택 영역에 저장하는데 구현한 프로세서는 프로그램 카운터(41)와 상태 레지스터만(47)을 하드웨어적으로 저장하고(IS2,IS3) 나머지는 소프트웨어에 맡긴다. 두개의 레지스터를 옮기고 나면 인터럽트 소스에 맞는 벡터 값을 설정하여 프로그램 카운터(41)를 서비스 루틴에 해당하는 주소로 변경한 후에 제어권을 메인 스테이트 머신(TS2)에 넘긴다(IS4 ~ IS9).
도 11에서 보는 것과 같이 연산 기능 블록(20)은 기본적인 산술/논리 연산(Arithmetic / Logical Unit) 블록(21,22), 허프만 코딩(Huffman decoding)을 위해 '1'과' '0'을 카운트하는 블록(Count Leading 1/0 Unit)(23), 0 비트에서 63 비트까지 산술/논리 이동(SHIFT Unit)이 가능한 쉬프터(Shifter)(24), 64 비트의 정수 곱셈기/나눗셈기(Multiply/Divide Unit) 블록(25) 등으로 구성된다. 이상에서는 구현된 64 비트 MCU의 블록별 기능을 살펴보았다.
이제 구체적으로 LEBI 명령어와 EF를 체크하여 EB를 사용하는 명령어들의 동작을 살펴보도록 하자.
명령어는 일반적으로 OP-Code, Operand로 구성된다. 물론, Operand는 소스 레지스터, 목적 레지스터, 인덱스 레지스터, 혹은 즉시 상수나 변위 값 등으로 구성될 수 있다. 그러므로 정해진 길이의 명령어에 이들을 모두 수용하기 위해서는 각각의 길이를 제한할 수밖에 없다. 즉 원하는 만큼의 변위나 즉시 상수 값을 한 개의 명령어로 나타내는 것이 불가능한 경우가 발생하는 것이다. 구현한 프로세서는 명령어가 32 비트로 고정되어 있다. 예를 들어 OP-Code 6 비트, GPR이 32개이므로 목적 레지스터 5 비트, 인덱스 레지스터 5 비트를 할당하면, 결국 남는 변위의 크기는 16 비트이다. 그러므로 인덱스 어드레싱에서 액세스 할 수 있는 메모리의 어드레스가 극히 한정됨을 알 수 있고, 또한 같은 방법으로 즉시 데이터 값을 필요로 하는 여러 연산에서도 즉시 데이터가 제한되는 경우가 발생한다. 이러한 제한성을 벗어나기 위해 기존의 프로세서들은 가변적인 길이의 명령어를 사용하거나 확장 명령어를 사용하였다. 그러나 구현한 프로세서는 32비트 고정 길이의 명령어를 사용하고, 확장 명령어(LEBI)와 이를 위한 확장 버퍼(EB)를 사용함으로써 주소의 변위나 즉시 상수의 크기가 제한되는 문제를 해결할 뿐만 아니라 기존의 프로세서가 안고 있는 몇 가지의 문제점들, 즉 하드웨어가 복잡해지거나, 확장 명령어를 쓸 경우 반드시 두 명령어가 연속적으로 사용되어야 한다는 것, 단 한번만 확장이 가능하다는 것, 그리고 그 두개의 명령어 사이에 예외가 발생할 경우 이에 대한 처리가 불가능하다는 것 등을 해결할 수 있었다.
정의된 명령어의 변위나 즉시 상수 값의 범위를 벗어나는 경우 LEBI 명령어를 사용하는데 정의된 명령어의 변위나 즉시 상수에서 초과하는 양을 LEBI 명령어를 통해 확장 버퍼(EB)에 저장하고 또한 LEBI 명령어가 사용되었음을 EF를 읽어서 알 수 있도록 한다. 그리고 목적하는 명령어를 사용하면 원하는 만큼의 변위나 즉시 상수를 오퍼랜드로 사용할 수 있고 이때 EF를 클리어 시킨다. 주목할 것은 LEBI 명령어의 반복 수행이 가능하다는 것과 두 명령어 사이에 LEBI를 사용하지 않는 명령어가 삽입되더라도 영향을 받지 않는다는 것, 그리고 이때 인터럽트가 발생한다면 곧바로 이 두 가지의 정보를 스택 영역에 저장하고, 인터럽트 서비스를 마친 후에 SR(47)을 스택에서 읽어와 EF를 확인한 후 명령어의 손실이나 지연 없이 원하는 동작을 수행할 수 있다는 것 등이다. 그러한 일련의 과정을 도 12에서 순서도로 나타내었다.
LEBI 명령어가 아닌 일반적인 명령어가 앞에서의 설명처럼 수행되다가 LEBI 명령어가 들어오면 의도하는 변위 또는 즉시 데이터의 값을 EB에 가져온다. 그런 다음 뒤따라오는 명령어에 따라 확장된 오퍼랜드를 사용하고 EF를 클리어하게 된다.
이것을 설명하기 위해 LEBI 명령어를 다음과 같이 정의하자. 단, 이 명령어를 사용할 때에는 다른 명령어와는 달리 EF를 셋팅해야 한다.
** LEBI 명령어 **
Bit 31-24 : OP code
Bit 23-0 : 즉시 데이터
위의 명령어는 다음과 같이 해석된다. 일단 SR(47)의 EF를 체크하여 이 플래그가 '0'이면 위에 표시된 즉시 데이터 24 비트를 EB의 23~0 비트에 채우고, EB의 상위 비트들은 부호 확장 시켜준다. 그리고 EF가 '1'이면 지금의 LEBI 바로 이전에 LEBI가 쓰여졌다는 표시로 그런 경우에는 이미 EB의 23~0 비트에는 즉시 데이터가 채워진 상태가 된다. 그래서 채워진 EB의 23~0 비트는 그대로 두고 상위 47~24 비트에 위의 즉시 데이터를 채우게 된다. 이를 통해 알 수 있는 바와 같이 LEBI 명령어의 반복 수행으로 무한대로 변위와 즉시 데이터 값을 확장시킬 수 있다.
이제 LEBI 명령어에 이어서 나올 수 있는 명령어들의 동작을 예를 들어가며 설명해 보자. 이런 명령어들을 통해 확장된 오퍼랜드가 어떻게 활용이 되는지 알아보자.
첫째, 메모리에서 데이터를 읽어오거나, 쓰는 동작을 수행하는 데이터 이동 명령어들에서 이 명령어가 주소의 변위로서 어떻게 동작하는지 살펴보자. 이에 대한 설명의 편의를 위해 다음과 같은 load/store명령어를 정의한다.
** Load/Store 명령어 **
Bit 31-26 = OP code
Bit 25-21 = Source/Destination register
Bit 20-16 = Index register
Bit 15-0 = Offset bit
이 명령어를 실행하고자 할 때 제어 블록에서 상태 레지스터(47)의 11번째 비트인 EF를 참조한다. 그래서 만약, 그 값이 '0'(부 논리의 경우에는 '1')이라면 유효 주소는 인덱스 레지스터의 값에 변위를 더한 값이 된다. 플래그 값이 '1'(부 논리의 경우에는 '0')이라면 이는 바로 전에 LEBI 명령어가 수행되어 EB에 확장할 변위 값을 옮겨 놓았음을 의미하고, 그러므로 유효 주소는 EB의 값을 16비트만큼 왼쪽으로 이동시키고, 명령어에 포함된 변위 16비트 중 load/store하고자 하는 데이터의 양에 따라 각각 15~3(64 비트 load/store), 15~2(32 비트 load/store), 15~1(16 비트 load/store), 15~0(8 비트 load/store) 비트를 EB의 하위 비트 자리에 두게 된다. 여기에 인덱스 레지스터 값을 더한 것이 유효 주소가 된다. 물론, 여기에서 EB를 왼쪽으로 이동시키는 양은 정의에 따라 다양할 수 있다. 이 예에서 32비트 Load/Store 명령어로서는 인덱스 레지스터 + 256K까지의 주소를 엑세스할 수 있다. 그러나 변위가 256K를 넘어서면 먼저 LEBI 명령어를 사용하여 63K를 초과하는 값을 EB에 옮겨 놓고 32비트 Load/Store 명령어를 수행하여 원하는 주소를 엑세스할 수 있다는 것이다.
둘째, ALU 명령어의 경우를 예로 들어보자. 이를 위해 다음과 같은 명령어를 정의한다.
** ALU 명령어 **
Bit 31-26 = OP code
Bit 25-21 = Destination register
Bit 20-16 = Source register
Bit 15-0 = Immediate bit
이 ALU 명령어가 IR 레지스터(76)에 래치되어 실행을 위해 제어 블록(60)에서 제어신호를 발생시킬 때도 또한 상태 레지스터(47)의 EF를 참조한다. 만약, EF가 '0'(정 논리일 경우)라면 이 명령어는 부호/제로 확장(sign/zero extend)된 즉시 데이터 비트 15-0 값과 비트 20-16의 결과인 레지스터와의 연산이 수행되어 비트 25-21로 결정이 되는 목적 레지스터에 기록이 된다. 반면에 EF가 '1'이라면 EB의 값을 왼쪽으로 16 비트 이동 한 후 명령어의 즉시 데이터 16 비트를 하위에 두고 소스 레지스터(source register)와 연산 후 목적 레지스터에 기록하면 된다. 즉, 확장된 즉시 데이터 값과의 연산을 수행하고자 할 때는 먼저 LEBI 명령어를 수행하여 원하는 양을 EB에 옮기고 난 후에 ALU 명령어를 수행한다는 것이다. 이 예를 간단한 수식으로 나타내면 다음과 같다.
셋째, 분기 명령어의 경우를 예를 들어보자. 이를 위해 다음과 같이 분기
명령어를 정의한다.
** Conditional branch 명령어 **
Bit 31-24 = OP code
Bit 23-2 = Offset bit 23-2
Bit 1-0 = 00
분기 명령어에는 여러 가지의 종류가 있을 수 있으나 여기에서는 프로그램 카운터 상관(PC Relative)분기 명령어를 예로 사용하겠다. 이 명령어가 IR 레지스터(76)에 래치되고 실행을 위해 제어 블록(60)에서 필요한 제어 신호를 발생시킬 때 또한 EF를 참조한다. 그래서 만약, 0 이면 단순히 프로그램 카운터(41)에 부호를 가진 24 비트를 더한다. 즉, 현재의 프로그램 카운터(41)에서 223~ +(223-1)번지까지의 범위를 분기할 수 있다. 반면에 1이면 프로그램 카운터(41)에 EB를 참조하여 변위 값을 더하여 분기하고자 하는 유효 주소를 만든다. 즉, 먼저 LEBI 명령어를 수행하여 필요한 양을 EB에 옮겨 놓은 후 분기 명령어를 수행하여 필요한 변위를 얻을 수 있다는 것이다.
지금까지 많은 명령어들 중, 몇 가지 대표적인 유형의 명령어에서 LEBI 명령어가 어떻게 적용될 수 있는지를 예를 통해 설명하였다. 여기에 설명되지는 않았지만 변위나, 즉시 데이터 값을 필요하는 명령어들도 이와 동일한 방법으로 LEBI 명령어의 적용이 가능하고 그 확장할 수 있는 양은 제한이 없다고 할 수 있다.
이제 LEBI 명령어가 수행될 때 예외가 발생하면 어떻게 처리되는지에 대해 살펴보자. 이때 고려해야 할 문제의 핵심은 LEBI 명령어 수행 중에 예외가 발생했는지를 예외 처리가 끝난 후까지 어떻게 유지 하느냐와 또한 이미 옮겨 놓은 변위나 즉시 데이터 값을 어떻게 예외 처리 후 복원할 것이냐 하는 것이다. 앞에서 설명하였듯이 본 발명은 이 문제를 해결하기 위해 EF와 EB를 사용한다. 그리고 이를 구현하기 위한 한 예로서 보여지듯이 SR(47)내에 EB와 한 비트의 EF를 할당하였다. 물론 이는 본 발명을 하드웨어로 구현하기 위한 많은 방법들 중에 설명의 용이성을 위하여 간략하게 나타낸 하나의 실례라 하겠다. 대부분의 MCU가 그렇듯이 예외가 발생하면 예외를 처리하기에 앞서 현재의 프로그램의 흐름을 잃지 않기 위해 몇 가지 요소를 스택 영역에 저장한다. 여기에서의 64 비트 EISC 구조도 프로그램 카운터(41) 값과 상태 레지스터(47)의 값을 스택 영역에 저장한다. 그래서 예외 처리 후에 프로그램 카운터(41)와 상태 레지스터(47) 값을 되돌려 받았을 때 EF값을 참조하면 LEBI 명령어가 수행중일 때 예외가 발생하였는지를 유지할 수 있고, 또한 EB를 소프트웨어적으로 접근 가능하게 하여 예외 처리 전에 이를 역시 스택 영역에 옮겨 놓을 수 있도록 하여 예외 처리 후에 EB 값을 되돌려 받을 수 있어 두 가지의 문제를 해결할 수 있다.
본 발명에 따르면 고정 길이 명령어를 가지면서 메모리 어드레스, 변위, 즉시 상수의 길이가 가변되는 중앙 처리 장치의 구현이 가능하다.
또한 본 발명에 따르면, 주소의 변위나 즉시 상수의 크기가 제한되는 문제를 해결할 뿐만 아니라 기존의 프로세서가 안고 있는 몇 가지의 문제점들, 즉 하드웨어가 복잡해지거나, 확장 명령어를 쓸 경우 반드시 두 명령어가 연속적으로 사용되어야 한다는 것, 단 한번만 확장이 가능하다는 것, 그리고 그 두개의 명령어 사이에 예외가 발생할 경우 이에 대한 처리가 불가능하다는 것 등을 해결할 수 있다.
본 발명에서는 프로그램 카운터 값과 상태 레지스터의 값을 스택 영역에 저장함으로써, 예외 처리 후에 프로그램 카운터와 상태 레지스터 값을 되돌려 받았을 때 EF값을 참조하면 LEBI 명령어가 수행중일 때 예외가 발생하였는지를 유지할 수 있는 효과가 있다.
또한 본 발명에 의하면 EB 버퍼를 소프트웨어적으로 접근 가능하게 하여 예외 처리 전에 이를 역시 스택 영역에 옮겨 놓을 수 있도록 하여 예외 처리 후에 EB 값을 되돌려 받을 수 있는 효과가 있다.

Claims (7)

  1. 접근 속도가 빠른 소규모 기억 장치인 레지스터의 집합인 레지스터 파일과 상기 레지스터 파일과 접속되어 정보를 송수신하는 통로인 내부 버스와 상기 내부 버스에 연결되어 있으며 외부 버스를 연결하는 외부 버스 버퍼와 상기 내부 버스에 연결되어 있으며 연산 기능을 수행하는 기능 블록과;
    상기 내부 버스에 연결되어 있으며 수행중인 명령어를 기억하는 명령 레지스터와;
    상기 명령 레지스터에 연결되어 있어서 명령어를 해석하여 상기 레지스터 파일과 상기 내부 버스와 상기 외부 버스 버퍼와 상기 기능 블록과 상기 명령 레지스터에 제어 신호를 발생하는 제어부로 구성되며;
    상기 레지스터 파일은 프로그래머가 접근 가능하고 연산 원시 데이터나 연산 결과 데이터를 저장하거나 상기 연산 데이터를 기억하고 있는 메모리의 번지 등을 기억하는 하나 또는 다수개의 범용 레지스터와 프로그래머가 접근 가능하고 중앙처리 장치 동작에 필요한 정보를 기억하는 하나 또는 다수개의 특수 레지스터와 프로그래머가 접근할 수 없으며 중앙처리장치 동작에 필요한 특수한 기능이나 연산의 중간 과정 등을 기억하는 하나 또는 다수개의 내부 레지스터로 구성되어 있고;
    상기 특수 레지스터의 일종으로 진행하고 있는 프로그램이 저장되어 있는 메모리 번지를 기억하는 프로그램 카운터를 가지며, 상기 프로그램 카운터가 지정하는 프로그램 번지가 상기 내부 버스에 출력되고, 상기 내부 버스에 출력된 프로그램 번지가 상기 외부 버스 버퍼를 통하여 프로그램을 기억하고 있는 외부 메모리의 번지로 출력되고, 상기 방법으로 지정된 외부 메모리로부터 명령어가 읽혀져서 상기 외부 버스 버퍼를 통하여 상기 내부 버스에 연결되고, 상기 명령어가 상기 명령 레지스터에 저장되어 상기 제어부에서 상기 제어 신호를 발생하며, 상기 명령 레지스터에 저장되어 상기 제어부에서 해석되는 상기 명령어는 동작을 지정하는 OP 코드 필드만으로 구성되거나 상기 OP 코드 필드와 동작의 작용을 받는 하나 또는 다수개의 오퍼랜드 필드로 구성되고, 상기 OP 코드 필드와 상기 오퍼랜드 필드는 하나 또는 다수개의 2진수 비트로 구성되고, 상기 오퍼랜드 필드는 상기 명령어의 종류에 따라서 메모리 번지를 나타내는 번지 오퍼랜드나 상기 범용 레지스터나 상기 특수 레지스터에 기억된 메모리 번지로부터의 변위를 나타내는 변위 오퍼랜드나 연산이나 메모리 번지나 제어에 사용되기 위한 즉시 상수로 나타내는 즉시 상수 오퍼랜드 등으로 해석하고 실행하는 통상적인 중앙처리 장치에 있어서;
    상기 특수 레지스터의 일종으로 프로그래머가 접근 가능한 상태 레지스터를 더 포함하고, 상기 상태 레지스터는 확장 데이터 필드와 중앙처리장치의 동작에 필요한 정보나 플래그 및 기타 필드로 구성되고, 상기 상태 레지스터의 확장 데이터 필드에 확장 데이터를 기억하는 동작을 나타내는 OP 코드와 즉시 상수 오퍼랜드 필드로 구성된 명령어를 제어부에서 해석하여 즉시 상수 오퍼랜드 필드를 상태 레지스터의 확장 데이터 필드에 기억시키는 동작을 수행하며, 상기 OP 코드와 OP 코드가 필요로 하는 상기 오퍼랜드 필드의 일부분으로 구성되는 기본 명령어는 상기 상태 레지스터의 확장 데이터 필드에 기억된 상기 확장 데이터가 상기 기본 명령어의상기 일부분 오퍼랜드 필드와 연결(concatenation)되어서 완전한 오퍼랜드를 가진 명령어를 구성하여 상기 제어부에서 해석되고 실행되는 것을 특징으로 하는 확장 명령어를 가진 중앙처리장치.
  2. 제 1항에 있어서, 상기 상태 레지스터의 확장 데이터 필드에 상기 확장 데이터를 기억하는 상기 명령어를 수행하면 상태가 변경되는 프로그래머가 접근 가능한 하나 또는 다수개의 비트로 구성되는 확장 플래그를 더 포함하는 것을 특징으로 하는 확장 명령어를 가진 중앙처리장치.
  3. 제 2항에 있어서, 상기 상태 레지스터의 확장 데이터 필드에 기억된 상기 확장 데이터를 연결하여 상기 오퍼랜드 필드를 형성하는 상기 기본 명령어가 수행되면 상기 확장 플래그의 상태를 변경하는 것을 특징으로 하는 확장 명령어를 가진 중앙처리장치.
  4. 제 3항에 있어서, 상기 확장 플래그의 상태에 따라서 상기 기본 명령어가 가지는 상기 일부분 오퍼랜드를 양의 정수나 2의 보수로 보아서 확장하여 상기 오퍼랜드를 형성하거나 상기 상태 레지스터의 확장 데이터 필드에 기억된 확장 데이터와 상기 일부분 오퍼랜드를 연결하여 상기 오퍼랜드를 형성하는 것을 특징으로 하는 확장 명령어를 가진 중앙처리장치.
  5. 제 1항에 있어서, 상기 상태 레지스터의 확장 데이터 필드에 기억된 상기 확장 데이터를 연결하여 상기 오퍼랜드 필드를 형성하는 상기 기본 명령어가 수행되면 상기 상태 레지스터의 확장 데이터 필드에 일정한 데이터를 기억시키는 것을 특징으로 하는 확장 명령어를 가진 중앙처리장치.
  6. 제 3항에 있어서, 상기 상태 레지스터의 확장 데이터 필드에 상기 확장 데이터를 기억하는 상기 명령어의 즉시 상수 오퍼랜드 필드의 길이가 상기 상태 레지스터의 확장 데이터 필드의 길이보다 작으며, 상기 상태 레지스터의 확장 데이터 필드에 상기 확장 데이터를 기억하는 명령어는 상기 확장 플래그의 상태에 따라서 즉시 상수 오퍼랜드를 양의 정수나 2의 보수로 보아서 확장 데이터 필드 길이 만큼 확장하여 상기 상태 레지스터의 확장 데이터 필드에 저장하거나 상기 확장 버퍼의 확장 데이터 필드에 기억된 확장 데이터를 즉시 상수 오퍼랜드 길이만큼 왼쪽으로 이동시키고 즉시 상수 오퍼랜드를 연결하여 확장 데이터를 형성하여 상기 상태 레지스터의 확장 데이터 필드에 저장하는 기능을 가지는 것을 특징으로 하는 확장 명령어를 가진 중앙처리장치.
  7. 제 6항에 있어서, 상기 확장 플래그의 상태에 따라서 상기 기본 명령어가 가지는 상기 일부분 오퍼랜드를 양의 정수나 2의 보수로 보아서 확장하여 상기 오퍼랜드를 형성하거나 상기 상태 레지스터의 확장 데이터 필드에 기억된 확장 데이터와 상기 일부분 오퍼랜드를 연결하여 상기 오퍼랜드를 형성하는 것을 특징으로 하는 확장 명령어를 가진 중앙처리장치.
KR1019990003201A 1999-02-01 1999-02-01 확장명령어를갖는중앙처리장치 KR19990046284A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019990003201A KR19990046284A (ko) 1999-02-01 1999-02-01 확장명령어를갖는중앙처리장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019990003201A KR19990046284A (ko) 1999-02-01 1999-02-01 확장명령어를갖는중앙처리장치

Publications (1)

Publication Number Publication Date
KR19990046284A true KR19990046284A (ko) 1999-07-05

Family

ID=54781059

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990003201A KR19990046284A (ko) 1999-02-01 1999-02-01 확장명령어를갖는중앙처리장치

Country Status (1)

Country Link
KR (1) KR19990046284A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100388943B1 (ko) * 2000-10-23 2003-06-25 아스텔 주식회사 디지털 신호 처리 프로세서의 즉시 데이터 처리 장치
KR20160103205A (ko) 2015-02-23 2016-09-01 주식회사 에이디칩스 다중 인터럽트 제어기를 구비하는 프로세서 시스템

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100388943B1 (ko) * 2000-10-23 2003-06-25 아스텔 주식회사 디지털 신호 처리 프로세서의 즉시 데이터 처리 장치
KR20160103205A (ko) 2015-02-23 2016-09-01 주식회사 에이디칩스 다중 인터럽트 제어기를 구비하는 프로세서 시스템

Similar Documents

Publication Publication Date Title
US7487338B2 (en) Data processor for modifying and executing operation of instruction code according to the indication of other instruction code
KR100323191B1 (ko) 다중명령세트를이용한데이터프로세싱장치
KR100328162B1 (ko) 정보처리회로와마이크로컴퓨터와전자기기
EP1323036B1 (en) Storing stack operands in registers
US5682531A (en) Central processing unit
JPS6339931B2 (ko)
US4833640A (en) Register bank change including register to register transfer in a data processing system
JPH03218523A (ja) データプロセッサ
JPH0766324B2 (ja) データ処理装置
KR20010050792A (ko) 2개의 서로 다른 고정 길이 명령 세트를 실행하기 위한프로세서 아키텍쳐
US5590358A (en) Processor with word-aligned branch target in a byte-oriented instruction set
KR100322277B1 (ko) 확장 명령어를 가진 중앙처리장치
US5924114A (en) Circular buffer with two different step sizes
EP0982655A2 (en) Data processing unit and method for executing instructions of variable lengths
EP0745932B1 (en) Microprocessor supporting variable length instruction execution
US4893235A (en) Central processing unit for a digital computer
US20030046516A1 (en) Method and apparatus for extending instructions with extension data of an extension register
EP0206653A2 (en) Method and means for loading and storing data in a reduced instruction set computer
KR19990046284A (ko) 확장명령어를갖는중앙처리장치
JP3504355B2 (ja) プロセッサ
KR19990046283A (ko) 확장명령어를갖는중앙처리장치
US5649229A (en) Pipeline data processor with arithmetic/logic unit capable of performing different kinds of calculations in a pipeline stage
KR19990046280A (ko) 중앙처리장치
KR19990046279A (ko) 중앙처리장치
KR19990046282A (ko) 확장명령어를갖는중앙처리장치

Legal Events

Date Code Title Description
G15R Request for early publication
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid