KR19990046279A - 중앙처리장치 - Google Patents

중앙처리장치 Download PDF

Info

Publication number
KR19990046279A
KR19990046279A KR1019990003093A KR19990003093A KR19990046279A KR 19990046279 A KR19990046279 A KR 19990046279A KR 1019990003093 A KR1019990003093 A KR 1019990003093A KR 19990003093 A KR19990003093 A KR 19990003093A KR 19990046279 A KR19990046279 A KR 19990046279A
Authority
KR
South Korea
Prior art keywords
instruction
extension
register
data
operand
Prior art date
Application number
KR1019990003093A
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 KR1019990003093A priority Critical patent/KR19990046279A/ko
Publication of KR19990046279A publication Critical patent/KR19990046279A/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/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/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

Landscapes

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

Abstract

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

Description

중앙처리장치{Central Processing Unit}
본 발명은 메모리 어드레스, 변위(offset), 그리고 즉시 데이터(immediate date)를 가변하는 고정길이 명령어를 가지는 중앙처리 장치에 관한 것이다.
선행 기술에 의한 중앙처리장치는 도() 에 도시된 바와 같이, 사용자가 쉽게 접근할 수 있는 영역으로 아키텍처에 맞게 구성된 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'명령어 다음에는 예외 처리가 수행될 수 없다는 단점을 가지고 있어서 주변장치의 응답요구를 실시간으로 처리할 수 없는 문제점이 있다.
따라서, 본 발명은 상기와 같은 제반 결점을 해소하기 위하여 창출한 것으로서, 본 발명의 목적은 모든 길이의 메모리 어드레스, 변위 및 즉시 데이터를 표현함과 동시에 고정 길이 명령어를 사용함으로서 명령어 디코더 회로와 메모리 관리 장치(Memory Management Unit : MMU) 및 예외처리가 간단한 중앙처리장치를 제공하는데 있다.
도 1 은 본 발명의 실시예에 의한 중앙처리장치를 나타낸 개요도.
도 2 는 도 1 에 도시된 데이터 입출력부의 상세회로도.
도 3 은 상태 레지스터(SR)에 확장 플래그가 세팅된 명령어 포맷을 나타낸 도면.
도 4 는 도 1 에 도시된 어드레스 발생부의 상세회로도.
도 5 는 중앙처리장치에서 탑 스테이트 메시인을 나타낸 도면.
도 6 는 중앙처리장치에서 리세트 스테이트 메시인을 나타낸 도면.
도 7 는 중앙처리장치에서 퓨시/팝 스테이트 메시인을 나타낸 도면.
도 8 는 중앙처리장치에서 인터럽트 스테이트 메시인을 나타낸 도면.
도 9 는 중앙처리장치에서 시프트 스테이트 메시인을 나타낸 도면.
도 10A, B는 중앙처리장치에서 데이터를 처리하는 과정을 설명하는 플로우챠트.
도 11 은 도 1 에 도시된 연산처리부의 상세회로도.
도 12 는 확장 명령어가 입력되었을 때의 작동을 설명하는 플로우챠트.
도 13 은 확장 레지스터의 일시예시도.
도 14 는 파이프라인 단계를 나타낸 도면.
도 15 는 선행기술에 의한 중앙처리장치를 나타낸 도면.
*도면의 주요 부분에 대한 부호의 설명*
10...데이터 입출력부 12...데이터 입출력 제어부
13...데이터 래치부 15...프리패취 명령어 레지스터
17...프리 디코더 19...명령어 레지스터
50...디코더/콘트롤부 60...연산처리부
80...레지스터 파일 90...어드레스 발생부
상기의 목적을 달성하기 위하여 본 발명에 따른 확장 명령어를 가진 중앙처리장치는, 프로그래머가 접근 가능하며, 확장 데이터를 기억하는 확장 데이터 필드만으로 구성되거나 상기 확장 데이터 필드를 하나의 구성 요소로 가지는 확장 레지스터와; 상기 확장 레지스터에 상기 확장 데이터를 기억하는 명령어를 수행하면 상태가 변경되는 프로그래머가 접근 가능한 하나 또는 다수개의 비트로 구성되는 확장 플래그를 더욱 포함 하므로써; 상기 확장 레지스터의 확장 데이터 필드에 확장 데이터를 기억시키는 동작을 나타내는 OP 코드와 즉시 상수 오퍼랜드로 구성되어, 확장 레지스터의 확장 데이터 필드에 확장 데이터를 기억시키는 명령어는 상기 제어 블록에서 해석되어 즉시 상수 오퍼랜드 필드를 확장 레지스터의 확장 데이터 필드에 기억시키고, 상기 OP 코드와 상기 오퍼랜드 필드로 구성되는 확장 명령어는 상기 제어 블록에서 확장 명령어에 포함된 오퍼랜드 필드와 상기 확장 레지스터의 확장 데이터 필드에 기억된 확장 데이터를 연결하여 새로운 오퍼랜드 필드를 형성함으로써, 새로이 형성된 오퍼랜드 필드를 가지는 명령어로 해석되어 실행되는 것을 특징으로 한다.
이하, 예시된 도면을 참조하여 본 발명을 더욱 상세히 설명하면 디음과 같다.
본 발명은 CISC와 RISC의 장점을 취한, 모든 길이의 메모리 어드레스, 변위 및 즉시 데이터를 표현할 수 있는 고정 길이 명령어를 가지는 중앙 처리 장치인 32비트 EISC(Extendible Instruction Set Computer)에 관한 것이다. 본 발명의 32 비트 EISC는 종래 기술과 마찬가지로 범용 레지스터(General Purpose Register : GPR)와 특수 목적 레지스터(Special Purpose Register : SPR)를 가지고 있으며, 이에 더하여 도 13과 같은 32 비트의 확장 레지스터(Extension Register : ER)를 가진다. 또한 본 발명의 32 비트 EISC는 종래 기술과 동일하게 중앙 처리 장치의 상태를 나타내는 상태 플래그들(Status Flags : SF)과 이들 상태 플래그의 집합인 상태 레지스터(Status Register : SR)를 가지며, 이에 더하여 명령어 확장 상태를 나타내는 확장 플래그(Extension Flag : EF)를 상태 레지스터 내에 가진다.
여기서의 상태 플래그는 한 비트로 할당하지만 그 이상의 비트로 할당할 수도 있으며 프로그래머가 접근 가능한 형태이어야 한다. 또한 ER의 길이는 중앙 처리 장치의 워드 길이에 따라 변경되는데 16 비트 중앙 처리 장치에서는 16 비트 이하, 32 비트 중앙 처리 장치에서는 32 비트 이하, 64 비트 중앙 처리 장치에서는 64 비트 이하의 길이를 가진다.
본 발명의 기술에서는 32 비트 중앙 처리 장치에서의 32 비트 ER을 설명하지만, 이것은 ER의 길이에 제한을 두거나 중앙 처리 장치의 워드 길이에 제한을 두기 위한 것이 아님을 밝힌다. 중앙 처리 장치가 가지는 일부 플래그와 레지스터는 프로그래머가 접근할 수 없는 것이 있다. 본 발명의 기술에서 EF는 상태 레지스터의 한 비트로 설명하고 있는데, 이 또한 설명의 용이성을 위한 것으로 EF의 구현 형태를 제한하고자 하는 목적이 아님을 밝힌다.
EISC는 ER에 데이터를 저장하면서 동시에 EF를 '1'로 설정하는 명령어를 가지는데 본 발명의 기술에서는 설명의 편의성을 위하여 'LERI(Instruction Load ER Immediate)' 라는 명령어를 사용한다. 이 명령어는 ER을 이용하여 오퍼랜드를 확장하길 원하는 명령어를 뒤따르게 하여 오퍼랜드를 확장할 수 있도록 하고 오퍼랜드를 확장했다는 의미로 EF를 셋팅하게 된다. 32 비트 중앙 처리 장치에서 16 비트 고정 길이 명령어를 사용하고 'LERI' 명령어의 오퍼랜드를 14 비트 즉시 상수라고 정의하면
LERI → #567
이라는 명령문은 이 명령문 수행 이전에 EF가 '1' 이었다면 ER의 데이터를 왼쪽으로 14 비트 길이만큼 산술 이동(Arithmetic shift) 시키고, 이 명령문의 오퍼랜드 부분인 '567'을 ER에 더하는 작용을 한다. 또한 이 명령문 수행 이전에 EF가 '0' 이었다면 이 명령문의 오퍼랜드 부분인 '567'의 기호를 확장(Sign extend)하여 32 비트를 만들어서 ER에 저장한다. 이때의 기호 확장은 오퍼랜드 14비트 중 최상위 비트를 ER의 나머지 부분에 채워 넣으면 된다. 만약 이때의 상위 비트들이 모두 '0'이라면 오퍼랜드는 양의 정수 값이 되고 만약 '1'이라면 sign extend되어 오퍼랜드가 결정된다. 그리고 EF가 '0'이였든 '1'이였든 두 경우 모두에서 EF는 '1'로 셋팅된다.
앞의 기술에서 'LERI' 명령어를 이용한 명령어의 오퍼랜드 길이는 다른 명령어의 정의에 따라서 결정되는 것으로 본 발명에서는 그 길이에 제한을 두지는 않는다. 또한 'LERI' 명령어에서 오퍼랜드로 즉시 상수를 사용하는 예를 보였는데, 오퍼랜드 종류는 메모리 어드레스 등 다른 종류의 오퍼랜드를 사용할 수도 있음을 밝힌다. 즉 예를 들어서 PC 상대 어드레싱(PC relative addressing)을 가질 수도 있으며 본 발명에서는 ER에 데이터를 격납(load)하는 하나 또는 다수 개의 명령어 수단을 가지는 것을 의미한다.
본 발명의 32 비트 EISC는 종래 기술이 가지는 일반적인 명령어를 가지고 있는데, 이중 가변하는 오퍼랜드를 필요로 하는 명령어는 EF 상태에 따라서 오퍼랜드 해석에 차이를 가진다.
예를 들어서 8 비트 변위를 가지는 'JMP' 명령어는 다음과 같이 표현된다.
JMP→ offset
'JMP' 명령어는 프로그램의 순서를 바꾸는 명령어로 이 명령문 다음에는 현재 프로그램의 위치에서 변위(offset) 만큼 떨어진 위치의 명령문을 수행하게 된다. 그런데 변위의 길이가 8 비트로 할당되어 있으므로 점프되는 위치는 128 바이트에서 +127 바이트 이내로 국한된다(Memory configuration에 따라 달라짐).
본 발명의 EISC에서는 이 경우에 EF의 상태에 따라서 변위는 2가지로 해석된다. 먼저 'EF'가 '0'인 경우에는 변위의 길이를 8 비트로 해석하며, EF가 '1'인 경우에는 ER의 값을 왼쪽으로 8 비트 산술 이동(Arithmetic shift) 시킨 다음에 명령문에 나타난 8 비트 변위를 더하여 변위를 산출한다. 따라서 32 비트 변위를 가지도록 명령문의 오퍼랜드가 확장된다.
명령어에 따라서 ER을 왼쪽으로 이동시키는 거리는 다르다. 앞의 예에서도 'LERI' 명령어는 14 비트, 'JMP' 명령어는 8 비트를 이동시키고 있다.
EF 플래그는 'LERI' 명령어에 의하여 '1'이 되고, 'LERI' 명령을 제외하고 ER 레지스터를 참조하는 모든 명령어에서 '0'이 된다. 그러나 구현 방식에 따라서 다른 값을 가질 수도 있으며, EF 플래그는 명령어의 확장 상태를 나타내는 다른 구현 형태를 가질 수 있다.
이와 같이 본 발명의 32 비트 EISC는 모든 명령어가 16 비트 고정 길이이고, 모든 명령어가 독립적으로 수행되며, 가변 길이의 오퍼랜드를 가질 수 있다.
결론적으로 본 발명은 확장 레지스터 ER과 확장 레지스터의 상태를 나타내는 수단과 ER에 값을 저장하는 명령어와 확장 레지스터의 상태에 따라서 오퍼랜드 해석을 달리하는 명령어를 가지는 중앙 처리 장치에 대한 발명이다.
본 발명으로 고정 길이 명령어를 가지면서 메모리 어드레스, 변위, 즉시 상수의 길이가 가변되는 중앙 처리 장치의 구현이 가능하게 되었다.
본 발명인 32 비트 확장 명령어를 가진 중앙 처리 장치의 기능을 블록별로 설명하고 LERI 명령어를 이용해 ER을 확장 시키고 확장 시킨 ER을 어떤 명령어들이 어떻게 사용하는지 설명한다.
도 1 는 32비트 확장 명령어를 가진 중앙 처리 장치의 개요도이다. 동 도면에서, 32 비트의 확장 명령어를 가진 EISC의 내부 구조는 어드레스 발생부(90), 데이터 입출력부(10) 레지스터 파일(80), 연산부(60), 그리고 디코더/콘트롤부(50)등으로 구성되며 이러한 내부 블록은 32 비트 데이터 버스와 32 비트 어드레스 버스로 연결되어 있다.
또한 메모리 Configuration은 8 비트 데이터 폭을 가진 메모리 4개를 병렬로 연결하는 것으로 한다.
우선 32 비트 MCU의 데이터 처리 흐름을 살펴보자.
처음에 전원이 켜지거나 리셋이 되면, 내부적으로 도 6에 나타나 있는 Reset State Machine이 동작하여 Reset Vector를 메모리로부터 읽어온다. 여기서 Reset Vector라 함은 사용자가 작성한 응용 프로그램의 시작 주소를 의미한다. 읽어온 Reset Vector 값은 도 2 의 DIO 블록내의 Data Latch에 저장되었다가 레지스터 파일 내의 PC(프로그램 카운터)로 옮겨지며, 다음 사이클부터 프로그램이 순차적으로 진행되는 한 이 값은 메모리 Configuration에 맞게 증가되고 메모리로 부터 명령어를 읽어오는데 사용된다. 여기까지의 동작을 실행하고 나면 Reset State Machine은 Start라는 신호를 발생시켜 Main State Machine에 넘겨주며 동작을 마친다.
Start 신호를 넘겨 받은 도10의 Main State Machine은 프로그램 카운터 값에 따라 명령어를 읽어와 DIO 블록 내의 PIR(Prefetch Instruction Register)에 저장하게 하고, 이것을 다시 명령어 레지스터에 옮겨 해당 명령어를 실행시키고, 또한 이와 동시에 다음 명령어를 읽어와 파이프라인을 유지시켜 이후로 한 사이클마다 한 개의 명령어가 실행되도록 제어한다.
명령어는 크게 내부 명령, 메모리 명령, 분기 명령, Interrupt/Exception등으로 나눌 수 있는데, Pre-Decoder 블록에서 이를 결정한다. 명령어가 명령어 레지스터에 패치되어 실행될 때 Pre-Decoder 블록에서 발생시키는 이 TYPE값에 따라 적절한 제어 신호를 발생시키는 상태로 천이를 하게 되는 것이다.
본 발명인 32비트 확장 명령어를 가진 중앙 처리 장치는 도 14와 같은 3단 파이프 라인(명령어 패치/디코드, ALU, MEM 사이클) 특성을 갖는다. 도 11에서 보여지는 제어 블록에서는 이러한 각 파이프에 해당하는 제어 신호들과 각종 명령어들의 실행을 위해 필요한 신호들을 발생시키는 역할을 수행한다.
연산부(60)는 레지스터 파일에 저장된 데이터와 실행되는 명령어, 그리고 제어 블록에서 발생되는 신호에 의해 사용자가 요구하는 적절한 동작을 수행하고, 이렇게 실행된 값은 내부 레지스터 파일에 저장되거나 메모리로 옮겨지게 되는데 이때 적절한 메모리의 주소를 발생 시키는 블록이 주소 생성기이다. 주소는 크게 3가지로 구분할 수 있다. 순차적인 명령어를 읽어오기 위해 사용되는 PC값, 위에서 설명된 것처럼 특별한 상태, 즉 부팅이나 Reset, 또는 Interrupt나 Exception등이 발생했을 때에 필요로 하는 표 2의 벡터 값, 이러한 경우 그 때의 프로세서 상태를 저장하기 위해 사용되는 스택 포인터 값, 일반적인 데이터를 읽거나 비순차적인 분기 발생시에 필요로 하는 유효 주소 등이다. 주소 생성기는 각 명령어의 파이프에 맞는 주소를 발생시켜준다. 이상에서 본 발명인 32 비트 확장 명령어를 가진 중앙처리장치의 일반적인 동작의 흐름을 설명하였다.
다음은 위에서 언급된 각 기능 블록들의 구체적인 구성과 기능들을 설명하기로 하자.
데이터 입출력부(10)는 도 2 에 도시된 바와 같이 데이터 입출력부(12), 데이터 래취부(13), 프리 패취 명령어 레지스터(15), 프리 디코더(17), 명령어 레지스터(19)로 구성된다.
본 발명의 중앙처리장치는 8 비트, 16 비트, 32 비트의 데이터 액세스가 가능하다. 그래서 각각의 명령어에 맞게 데이터의 크기를 할당하는 기능이 필요하다. 이를 Data I/O Arbitration Block에서 수행하는데 그 동작을 표 1에 나타내었다. 이렇게 읽혀진 데이터는 Data Latch에 일시적으로 저장되고, 그 값을 해당 레지스터(Rd)에 옮겨 메모리로부터 데이터를 읽는 명령어를 완성한다. 반면, 명령어의 경우는 연속적인 패치 즉 파이프라인을 위해 PIR 과 IR이 필요하다. 실행되는 명령어는 IR에 그리고 다음 명령어는 PIR에 저장되며, 이때 Pre-Decode Unit에서 PIR에 저장된 명령어의 유형을 결정하여 그 명령어가 실행할 때 정확한 상태 천이를 하도록 한다. 이것은 그림 31의 Main State Machine에서 TYPE이란 값을 의미한다.
레지스터 파일의 상세도는 도 3에 보여지듯이 크게는 GPR과 SPR로 나눌 수 있다. GPR은 사용자가 쉽게 접근할 수 있는 영역이며, 16개의 32비트 레지스터로 구성되어있다. 반면에 SPR은 특수한 목적으로 사용되는 레지스터들로 구성되어 있으며, 그 각각을 설명하면 다음과 같다.
1. PC(Program Counter) : 프로그램의 순차적인 흐름을 유지하기위해 사용된다.
2. SP(User/Supervisor Stack Pointer) : 예외 발생시나 비순차적인 프로그램의 흐름에 의해 분기가 필요할 때 등의 경우에 그 예외나 분기에 해당하는 동작을 수행하고 난 후, 현재 진행중인 프로그램의 흐름을 유지하기위해 필요한 내용(PC, SR, etc)을 저장해야 하고, 이때 그 주소를 나타내기 위해 사용된다.
3. LR(Link Register) : 비 순차적인 프로그램의 흐름에 의해 분기가 발생할 때 위에서 설명한 것처럼 프로그램 카운터의 값을 메모리(스택 영역)에 저장 하는데 프로그램의 특성상 말단 함수의 경우에는 바로 주소를 되돌려 받고, 다시 말단 함수를 호출하고 하는 동작을 반복하기 쉽다. 이러한 것을 고려하여 말단 함수의 호출일 경우에 그 주소를 메모리에 저장하지 않고 임시적으로 저장하기 위하여 이 LR를 사용한다. 이를 통하여 함수의 동작을 끝내고 그 주소 값을 돌려 받을 때 메모리를 읽지 않아도 되므로 성능을 향상시킬 수 있다.
4. ML/MH(Multiply Result Low/High Register) : 곱셈기와 나눗셈기의 연산 결과를 임시적으로 저장하기 위해 사용된다.
5. ER(Extension Register) : 앞에서 설명한 것처럼 정의된 명령어로 해결할 수 없는 큰 변위나 즉시 데이터 값을 요하는 명령어를 실행하고자 할 때 미리 초과하는 양을 임시적으로 저장하여 목적하는 명령어가 실행될 때 오퍼랜드로 사용될 수 있도록 하기위해 사용된다.
6. SR(Status Register) : 일반적인 모든 MCU에서처럼 연산하는 과정의 여러 가지 상태 값을 저장하기 위해 사용된다. 각각의 비트는 그림 24에서 보여지는 것과 같은 상태를 나타내고 주목할 것은 11번째 비트가 EF(Extension Flag)로서 다음에 이어지는 명령어가 변위 또는 즉시 데이터 값으로서 명령어 자체의 오퍼랜드 값인 짧은 값을 취할지, 앞서 사용된 ER을 이용하여 확장된 값을 취할지를 결정해 준다는 것이다. 물론, 이 예에서는 상태 레지스터 내의 한 비트 즉, 11번째 비트를 플래그로 사용하였지만, 이는 하나의 예일 뿐 실제로는 다양한 방법을 통해 하드웨어적으로 구현이 가능하다.
도 4의 어드레스 발생부(90)는 Interrupt Vector Generation Block, Effective Address Generation Block, Address Incrementer, 그리고 이들 중에 하나의 주소를 선택하는 MUX로 구성된다. 전술하였듯이 주소 소스는 레지스터 파일로부터 오는 프로그램 카운터 혹은 스택 포인터 값, 인터럽트나 Exception 발생시 서비스 루틴의 시작 포인터인 벡터 값, 그리고 일반적인 데이터를 읽거나 분기 명령에 의한 유효 주소 등으로 구분할 수 있다. 먼저 Interrupt Vector Generation Block은 Interrupt나 Exception 발생시 해당하는 서비스 루틴의 주소의 포인터를 발생시키는 기능을 수행하며, 이것을 표 2에 나타내었다.
Effective Address Generation Block은 메모리에 데이터를 쓰거나 메모리로부터 데이터를 읽을 때 혹은 여러 가지 분기 명령에 의하여 주소의 비순차적인 증감이 필요할 때 연산 처리부(60)의 연산 결과를 유효 주소로 사용하기 위해 일시적으로 저장하는 기능을 갖는다.
또한 레지스터 파일로부터 프로그램 카운터 값과 스택 포인터 값을 받는데 프로그램 카운터 값은 프로그램의 순차적인 흐름을 위해, 스택 포인터 값은 인터럽트나 Exception 발생시 현재 프로세서의 상태를 저장하고자 할 때 사용된다. 또한 여기에 Address Incrementer가 있는데 프로그램 카운터와 스택 포인터는 순차적으로 증가하거나 감소하는 특징이 있다. 그래서 순차적으로 증가나 감소할 때 Address Incrementer를 사용하여 주소를 발생시킨다. 이들 중에서 제어 블록으로부터 선택 신호를 받아 Multiplexor를 통해 한 개를 선택하여 메모리 주소를 발생시킨다.
도 5내지 도 10까지는 구현된 프로세서의 모든 동작을 제어하는 제어 블록이다. 이러한 제어 블록은 구현하는 방법이 여러 가지가 있겠으나 여기서는 State Machine으로 구현되었다. 이것은 다시 Main Block, RST(Reset) Block, SHIFT Block, PUSH/POP Block, INT Block 등으로 나뉘어 질 수 있는데, 이러한 전체 블록 중 RST Block은 전체 State Machine을 초기화 하는 블록으로 전체 레지스터를 리셋시키고 프로그램의 시작 주소를 PC에 셋팅하며 Main 블록에 초기화가 되었음을 알리는 역할을 한다.
Main 블록은 RST 블록으로부터 초기화가 끝났음을 알리는 신호가 들어오면 메모리로부터 프로그램을 읽어서 실행하며 이를 위해 필요한 각종 제어 신호를 발생시킨다. 또한 패치한 명령어가 PUSH/POP이라면 PUSH/POP 블록으로, Shift라면 SHIFT 블록으로, SWI나 혹은 그 밖의 Interrupt가 발생하면 INT 블록 등으로 제어권을 넘겨주고 그 명령어의 수행이 마쳐지면 다시 각각의 블록들은 Main State Machine 블록으로 제어권을 넘겨준다.
다음은 나머지 State Machine 블록들의 동작을 간략하게 설명한 것이다.
EISC의 특징 중 하나가 RISC처럼 단순한 하드웨어이면서, CISC처럼 명령어의 밀도를 높여 둘의 장점을 선택하였다는 것인데, 그 예를 PUSH/POP 명령어에서 발견할 수 있다.
도 7은 PUSH/POP을 제어하는 State Machine을 나타낸다.
일반적으로 인터럽트나 Exception 발생시 현재 시스템의 상태를 저장하기 위해서 다수의 레지스터들을 스택 영역에 옮겨 놓는다. 이러한 특징을 고려하여 EISC에서는 1개의 명령어로 최대 8개의 레지스터를 옮길 수 있다. IR에 PUSH/POP 명령어가 옮겨질 때 Main State Machine은 제어권을 PUSH/POP State Machine 블록으로 넘긴다. PUSH/POP State Machine은 명령어 내의 레지스터 리스트를 순서(PUSH : MSB First, POP : LSB First)대로 옮긴 후 다시 제어권을 Main State Machine에 넘겨주게 된다.
구현한 마이크로 프로세서는 인터럽트 소스로서 NMI(Non-Maskable Interrupt), IRQ(Interrupt Request), SWI(Software Interrupt) 등을 지원하고, 상태 레지스터 12번째 비트를 사용하여 Auto-vectored와 Vectored Interrupt를 지원한다. 그림 29는 INTERRUPT State Machine 블록을 나타낸다. 인터럽트가 발생하면 패치한 명령어를 수행한 후에 현재의 시스템의 상태를 저장하기 위해 다수의 레지스터를 스택 영역에 저장하는데 구현한 프로세서는 프로그램 카운터와 상태 레지스터만을 하드웨어적으로 저장하고 나머지는 소프트웨어에 맡긴다. 두개의 레지스터를 옮기고 나면 인터럽트 소스에 맞는 벡터 값을 설정하여 프로그램 카운터를 서비스 루틴에 해당하는 주소로 변경한 후에 제어권을 Main State Machine에 넘긴다.
도 9는 SHIFT State Machine 블록을 나타낸 것이다. 특징적인 것은 ALSU안에 Barrel Shifter를 사용하는 대신 MUX를 사용하여 구현하였다는 것이다. 이는 1, 2, 8 비트 Shifter로 구성된다. 그래서 이동시키고자 하는 비트 수에 따라 1~7 사이클이 소요된다. 예를 들어 15 비트 이동시키고자 할 때는 8 비트 => 2 비트 => 2 비트 => 2 비트 => 1 비트의 순서로 진행되며 5 사이클이 소요된다. 물론, Barrel Shifter를 사용한다면 단일 사이클에 모든 종류의 비트 이동이 가능하므로 이러한 State Machine은 필요가 없어진다.
도11에서 보는 것과 같이 연산 기능 블록은 기본적인 산술/논리 연산(Arithmetic / Logical Unit) 블록, Huffman decoding을 위해 '1'과' '0'을 counting하는 블록(Count Leading 1/0 Unit), 0 비트에서 31 비트까지 산술/논리 이동(SHIFT Unit)이 가능한 Shifter, 32 비트의 정수 곱셈기/나눗셈기(Multiply/Divide Unit) 블록 등으로 구성된다.
이상에서는 구현된 32 비트 MCU의 블록별 기능을 살펴보았다. 이제 구체적으로 LERI 명령어와 ER을 사용하는 명령어들의 동작을 살펴보도록 하자.
명령어는 일반적으로 OP-Code, Operand로 구성된다. 물론, Operand는 소스 레지스터, 목적 레지스터, 인덱스 레지스터, 혹은 즉시 상수나 변위 값 등으로 구성될 수 있다. 그러므로 정해진 길이의 명령어에 이들을 모두 수용하기 위해서는 각각의 길이를 제한할 수 밖에 없다. 즉 원하는 만큼의 변위나 즉시 상수 값을 한 개의 명령어로 나타내는 것이 불가능한 경우가 발생하는 것이다. 구현한 프로세서는 명령어가 16 비트로 고정되어 있다. 예를 들어 OP-Code 4 비트, 목적 레지스터 4 비트, 인덱스 레지스터 4 비트를 할당하면, 결국 남는 변위의 크기는 4 비트이다. 그러므로 인덱스 어드레싱에서 액세스 할 수 있는 메모리의 어드레스가 극히 한정됨을 알 수 있고, 또한 같은 방법으로 즉시 데이터 값을 필요로 하는 여러 연산에서도 즉시 데이터가 제한되는 경우가 발생한다. 이러한 제한성을 벗어나기 위해 기존의 프로세서들은 가변적인 길이의 명령어를 사용하거나 확장 명령어를 사용하였다. 그러나 구현한 프로세서는 16비트 고정 길이의 명령어를 사용하고, 확장 명령어(LERI)와 이를 위한 확장 레지스터(ER), 그리고 확장 명령어가 사용되고 있음을 나타내는 확장 플래그(EF)를 사용함으로써 주소의 변위나 즉시 상수의 크기가 제한되는 문제를 해결할 뿐만 아니라 기존의 프로세서가 안고 있는 몇 가지의 문제점들, 즉 하드웨어가 복잡해지거나, 확장 명령어를 쓸 경우 반드시 두 명령어가 연속적으로 사용되어야 한다는 것, 단 한번만 확장이 가능하다는 것, 그리고 그 두개의 명령어 사이에 Exception이 발생할 경우 이에 대한 처리가 불가능 하다는 것 등을 해결할 수 있었다.
정의된 명령어의 변위나 즉시 상수 값의 범위를 벗어나는 경우 LERI 명령어를 사용하는데 정의된 명령어의 변위나 즉시 상수에서 초과하는 양을 LERI 명령어를 통해 확장 레지스터(ER)에 저장하고 또한 LERI 명령어가 사용되었음을 나타내기 위해 확장 플래그(EF)를 셋팅한다. 그리고 목적하는 명령어를 사용하면 원하는 만큼의 변위나 즉시 상수를 오퍼랜드로 사용할 수 있고 이때 확장 플래그를 클리어 시킨다. 주목할 것은 LERI 명령어의 반복 수행이 가능하다는 것과 두 명령어 사이에 LERI를 사용하지 않는 명령어가 삽입되더라도 영향을 받지 않는다는 것, 그리고 이때 인터럽트가 발생한다면 곧바로 이 두 가지의 정보를 스택 영역에 저장하고, 인터럽트 서비스를 마친 후에 확장 레지스터와 확장 플래그 값을 스택에서 읽어와 명령어의 손실이나 지연없이 원하는 동작을 수행할 수 있다는 것 등이다. 그러한 일련의 과정을 도12에도시되었다.
LERI는 반복 수행이 가능하기 때문에 이 명령어의 동작 유형은 SR의 11 번째 비트인 EF에 따라 두 가지로 나눌 수 있다. 첫째는 SR의 11번째 비트인 EF가 '0'인 경우이고 두번째는 이것이 '1'인 경우이다. 또한 확장하는 방법도 여러 가지로 정의할 수 있다. 만약, 실행하고자 하는 명령어가 4 비트의 변위만을 나타낼 수 있는데 20 비트의 변위가 필요할 경우를 가정하자. 첫번째는 상위 비트부터 ER에 채우는 것이다.
그림 1에서 보여지듯이 LERI가 정의되었다면, 한번의 LERI 명령어로 14 비트만을 확장할 수 있다. 그래서 20 비트의 변위를 얻고자 하면, 최상위 2 비트 확장, 14 비트 확장 후에 즉, LERI를 두 번 수행한 후 필요한 명령어를 사용해야 원하는 변위를 얻을 수 있다. 이때 최상위 2 비트를 확장하고자 할 때는 변위는 부호를 가질 수 있는 것으로 전제하면 부호 확장이 필요함을 알 수 있다. 즉 20 비트 확장을 위한 첫 LERI 명령어를 사용할 때 즉시 상수 14 비트에 하위 2 비트를 채우고, 상위 12 비트는 부호 확장을 시킨다. 그래서 이 첫번째 LERI 명령어가 수행되고 나면 ER 레지스터의 하위 14 비트가 채워지고 나머지 상위 비트들은 또한 부호 확장으로 채워진다. 두번째 LERI 명령어가 수행되면 먼저 수행된 14 비트를 왼쪽으로 산술 이동시키고 그곳에 두번째 LERI 명령어에 포함된 14 비트 즉시 상수 값으로 채운다. 그런 다음 20 비트의 변위를 요하는 명령어를 실행하면 그 명령어에 포함된 4 비트까지 포함하여 20 비트의 변위를 얻을 수 있다.
두번째는 하위 비트부터 ER 레지스터에 채우는 방법이다. 이 경우 첫번째의 경우와 같은 가정을 하면, 먼저 LERI 명령어를 통해 최하위 14 비트를 ER 레지스터에 채우고 두번째 LERI를 통해 나머지 2 비트를 채운다. 물론 이때는 산술 이동은 더 이상 필요치 않다. 그러나 이런 경우는 ER 레지스터의 몇 번째 비트까지 채워져 있는지에 대한 정보를 필요로 하게 된다. 그 후에 20 비트의 변위를 원하는 명령어를 실행하면 그 명령어에 포함된 4 비트를 ER 레지스터의 17번째 비트부터 채우고 상위 비트는 부호 확장을 하여 원하는 변위를 얻을 수 있다. 이러한 방법 외에도 ER 레지스터에 즉시 상수나 변위 값을 채우는 다양한 방법(순서)들이 가능하나 구현한 프로세서는 첫번째의 경우로 정의한다.
이제 EF에 따라 어떻게 LERI 명령어가 동작하는지 살펴보자. 첫번째로 EF가 '0'일 때이다. 이것은 바로 이전에 수행된 명령어가 LERI가 아니라는 의미로 확장을 요하는 현재의 명령어를 위해 처음으로 ER을 사용함을 나타낸다. 이런 경우의 LERI는 EF를 '1'로 셋팅하고, 16비트의 명령어 중 LERI를 나타내는 OP-Code를 제외한 즉시 상수 값으로 32비트 ER를 채우고 명령어의 정의에 따라 부족한 상위 비트는 부호 확장을 시킨다. 아래의 그림 1과 같이 LERI 명령어를 정의하였을 경우 OP-Code를 제외한 하위 14 비트[13:0]를 ER의 하위 14 비트에 채우고 ER의 상위 18 비트는 LERI의 13번째 비트로 채운다(sign extend).
두번째는 EF가 '1'인 경우를 살펴보자. 이 경우는 LERI 명령어를 반복 수행하고 있음을 의미한다. 즉 현재 LERI 명령어 이전에 LERI를 사용하여 이미 ER에 LERI가 사용된 수만큼 크기가 확장되어 있음을 나타낸다. 그래서 이런 경우에는 현재의 LERI의 하위 14 비트를 ER에 더 확장하기 위해 ER을 왼쪽으로 14 비트 산술이동 한 후, LERI의 하위 14 비트를 ER의 하위 14 비트에 둔다. 이렇게 확장된 ER을 이용하여 첫번째의 경우와 마찬가지로 다음에 오는 명령어에 따라 활용할 수 있도록 한다.
이것을 설명하기 위해 본 발명에서 정의한 LERI 명령어의 구조는 다음의 그림 1과 같이 간단히 보여질 수 있다.
그림 1 LERI 명령어의 구조
앞서 설명된 것과 같이 LERI임을 알리는 OP-Code 2 비트와 오퍼랜드 14 비트로 이루어진 구조이다.
그러면 이제 변위나 즉시 상수 값의 확장이 필요하여 LERI 명령어를 사용하는 명령어들이 실제로 어떻게 정의되고 동작하는지를 살펴 보기로 하자.
첫째, 메모리에서 데이터를 읽어오거나, 쓰는 동작을 수행하는 데이터 이동 명령어에서 이 명령어가 주소의 변위로서 어떻게 동작하는지 살펴보자. 본 발명인 32 비트 EISC에서는 load/store 명령어를 몇 가지로 구분하여 정의한다.
■32 Bit Load/Store
■Signed or Unsigned 8/16 Bit Load/Store
■Load Immediate Data
■Stack Area Load/Store
1. 32 Bit Load/Store
그림 2 32 Bit Load/Store
위의 32 비트 load/store 명령어를 실행하고자 할 때 제어 블록에서 상태 레지스터의 11번째 비트인 EF를 참조한다. 그래서 만약, 그 값이 '0'(부 논리의 경우에는 '1')이라면 유효 주소는 인덱스 레지스터의 값에 변위를 더한 값이 된다. 즉 인덱스 레지스터 값을 베이스 주소라 했을 때 액세스하고자 하는 메모리의 영역이 4 비트의 변위로 나타낼 수 있음을 의미한다. 이때 32 비트 단위로 메모리를 액세스하므로 주소의 최하위 2 비트는 의미가 없음을 알 수 있고, 그러므로 변위 값이 4 비트이지만 인덱스 레지스터의 [5:2] 비트와 더해짐을 알 수 있다.
그리고 참고한 EF의 값이 '1'(부 논리의 경우에는 '0')이라면 이는 바로 전에 LERI 명령어가 수행되어 ER에 확장할 변위 값을 옮겨 놓았음을 의미한다. 명령어의 정의에서 32비트 Load/Store 명령어로는 인덱스 레지스터 + 63(변위가 [5:2]까지 이므로 6 비트로 간주한다.)까지의 주소를 액세스할 수 있다. 그러나 변위가 63을 넘어서는 경우에는 LERI 명령어를 사용해야 한다. 만약, 최대 32 비트의 변위가 필요하다면 한번의 LERI로 14 비트까지 확장 가능하므로 LERI 명령어를 두번 사용하고 나머지 4 비트를 32 비트 Load/Store 명령어 내의 변위 비트로 채우는데 단, 전술하였듯이 32 비트 단위 메모리 액세스이므로 하위 2 비트가 의미가 없으므로 ER을 4 비트 왼쪽으로 산술 이동시키고 그곳에 명령어 내의 변위 4 비트 중 2 비트만을 취하고 나머지 최하위 2 비트는 0으로 채워 오퍼랜드를 구성한다. 그러므로 명령어 내의 변위가 63을 초과하는 경우는 먼저 LERI 명령어를 사용하여 15를 초과하는 값을 ER에 옮겨 놓고 32 비트 Load/Store 명령어를 수행하여 원하는 주소를 액세스할 수 있도록 한다. 결국 유효 주소는 위에서 구한 오퍼랜드와 인덱스 레지스터 값을 더한 것이 된다. 이것을 간단한 수식으로 나타내면 다음과 같다.
그림 3 Effective Address Calculation for 32 Bit Load/Store
2. 8/16 Bit Load/Store
구현한 프로세서는 8/16/32 비트 단위로 데이터를 액세스할 수 있다. 그래서 아래의 그림 4와 같은 8/16 비트 Load/Store 명령어가 필요하다. 8/16 비트 Load/Store 명령어는 부호를 고려할 것인지에 따라 두 가지로 구분할 수 있다.
그림 4 Signed or Unsigned 8/16 Bit Load/Store
위의 8/16 비트 load/store 명령어를 실행하고자 할 때 제어 블록에서 상태 레지스터의 11번째 비트인 EF를 참조한다. 그래서 만약, 그 값이 '0'(부 논리의 경우에는 '1')이라면 유효 주소는 인덱스 레지스터의 값에 변위를 더한 값이 된다. 즉 인덱스 레지스터 값을 베이스 주소라 했을 때 액세스하고자 하는 메모리의 영역이 3 비트의 변위로 나타낼 수 있음을 의미한다. 이때 16 비트 단위로 메모리를 액세스할 경우는 주소의 최하위 비트는 의미가 없음을 알 수 있고, 그러므로 변위 값이 3 비트이지만 인덱스 레지스터의 [3:1] 비트와 더해짐을 알 수 있다. 반면에 8 비트 단위로 메모리를 액세스하고자 할 때는 변위 값이 인덱스 레지스터의 [2:0] 비트와 더해져야 하므로 명령어에 따라 적절한 만큼의 이동이 필요하다. 이는 뒤에 나오는 확장 레지스터에 관한 부분에서 설명하도록 하겠다.
그리고 참고한 EF의 값이 '1'(부 논리의 경우에는 '0')이라면 이는 바로 전에 LERI 명령어가 수행되어 ER에 확장할 변위 값을 옮겨 놓았음을 의미한다. 명령어의 정의에서 16 비트 Load/Store 명령어로는 인덱스 레지스터 + 15(변위가 [3:1]까지 이므로 4 비트로 간주한다.)까지의 주소를 액세스할 수 있다. 그러나 변위가 15를 넘어서는 경우에는 LERI 명령어를 사용해야 한다. 한번의 LERI로 14 비트가 확장 가능하므로 LERI 명령어를 두번 사용하고 나머지 4 비트를 16 비트 Load/Store 명령어 내의 변위 비트로 채우는데 단, 전술하였듯이 16 비트 단위 메모리 액세스일 때는 하위 1 비트가 의미가 없으므로 ER을 4 비트 왼쪽으로 산술 이동시키고 그곳에 명령어 내의 변위 3 비트를 취하고 나머지 최하위 비트를 0으로 채워 오퍼랜드를 구성한다. 그러므로 명령어 내의 변위가 15를 초과하는 경우는 먼저 LERI 명령어를 사용하여 15를 초과하는 값을 ER에 옮겨 놓고 32 비트 Load/Store 명령어를 수행하여 원하는 주소를 액세스할 수 있도록 한다. 결국 유효 주소는 위에서 구한 오퍼랜드와 인덱스 레지스터 값을 더한 것이 된다.
8 비트 Load/Store 명령어로는 인덱스 레지스터 + 7(변위가 3 비트이므로)까지의 주소를 액세스할 수 있다. 그러나 변위가 7을 넘어서는 경우에는 LERI 명령어를 사용해야 한다. 만약, 32 비트의 변위가 필요하면 한번의 LERI로 14 비트를 확장 가능하므로 LERI 명령어를 세번 사용해야 한다. 단, 전술하였듯이 8 비트 단위 메모리 액세스일 때는 ER을 3 비트 왼쪽으로 산술 이동시키고 그곳에 명령어 내의 변위 3 비트를 취하여 오퍼랜드를 구성한다. 그러므로 명령어 내의 변위가 7을 초과하는 경우는 먼저 LERI 명령어를 사용하여 7을 초과하는 값을 ER에 옮겨 놓고 8 비트 Load/Store 명령어를 수행하여 원하는 주소를 액세스할 수 있도록 한다. 결국 유효 주소는 위에서 구한 오퍼랜드와 인덱스 레지스터 값을 더한 것이 된다. 이것을 간단한 수식으로 나타내면 다음과 같다.
그림 5 Effective Address Calculation for 8/16 bit Load/Store
4. Load Immediate Data
데이터 이동 명령어 중에서 즉시 데이터 값을 바로 격납하는 경우를 예로 들어보자. 이를 위해 다음과 같이 Load Immediate Data를 정의한다.
그림 6 Load Immediate Data
위의 Load Immediate Data에서 알 수 있듯이 부호를 가진 8 비트 즉시 데이터 값 (256 ~ 255)을 목적 레지스터에 로드할 수 있다. 그러나, 필요한 즉시 데이터 값이 (256 ~ 255)의 범위를 벗어나는 경우에는 역시 LERI 명령어를 먼저 수행하여 초과하는 즉시 데이터 값을 ER 레지스터에 옮겨놓고 이 Load Immediate Data를 수행하여 원하는 즉시 데이터 값을 얻을 수 있다. 이 경우도 역시 Load Immediate Data가 IR에 래치되고 이를 실행하기 위해 제어 블록에서 제어신호를 발생시킬 때 상태 레지스터의 EF를 참조하여 '0'(부 논리일 때는 '1')이면 명령어 내의 8 비트 즉 (256 ~ 255)까지의 즉시 데이터 값을 직접 목적 레지스터에 로드하고, 만약 '1'(부 논리일 때는 '0')일 때는 ER 레지스터의 값을 4 비트 왼쪽으로 이동시키고, 여기에 명령어 내의 하위 4 비트를 채워서 원하는 크기의 즉시 데이터 값을 로드할 수가 있다. 물론, 여기에서 ER레지스터의 값을 이동시키는 양이나, 채우는 즉시 데이터 값은 명령어의 정의에 따라 다양하게 변화 시킬 수 있다. 만약, 여기에서 정의한 명령어로 32 비트의 즉시 데이터 값을 원한다면, LERI 명령어를 두 번 수행하여 상위 28 비트를 ER에 옮겨 놓은 후에 Load Immediate Data를 수행하면 32비트의 즉시 데이터 값을 얻을 수 있다. 이를 간단한 수식으로 나타내면 다음과 같다.
그림 7 Immediate Data Extension
5. Stack Area Load/Store
그림 8 Stack Area Load/Store
구현한 프로세서는 스택영역에 액세스할 수 있는 명령어를 그림 8과 같이 정의하였다. 이 명령어 또한 8/16/32 비트 단위의 액세스가 가능하다. 그래서 주소의 변위를 확장하는 것은 앞서 설명한 내용들과 같고 단지, 인덱스 레지스터 대신 스택 포인터가 사용된다. 이에 대한 동작을 다음의 그림 9에 나타내었다.
그림 9 Effective Address Extension for Stack Area Load/Store
둘째, 산술/논리연산 명령어의 경우를 보자. 확장 명령어를 사용하는 산술/논리 명령어는 다음과 같이 나눌 수 있다.
■ Arithmetic/Logic Operation (ADD, ADC, SUB, SBC, AND, OR, XOR, CMP)
■ Add Stack Pointer with immediate data
■ Test (Source1 and Source2)
1. Arithmetic/Logic Operation
이를 위해 다음과 같은 명령어를 정의한다.
그림 10 ALU 명령어
일반적으로 ALU 명령어의 오퍼랜드는 몇 가지 유형으로 구분할 수 있겠다.
1. 2개의 레지스터간의 연산.
2. 1개의 레지스터와 즉시 데이터 값과의 연산.
3. 1개의 레지스터와 메모리 내용과의 연산 등
그러나 일반적인 RISC 구조에서는 Load/Store를 제외한 명령어는 메모리를 액세스하지 않는다. 그래서 여기서의 구조도 그러한 RISC의 특징을 따라 ALU 연산은 2가지 유형으로 구분(유형 1과 2)하고, 이를 그림 10에서 보여지는 하나의 명령어로 나타내었다. 이 ALU 명령어가 IR 레지스터에 래치되어 실행을 위해 제어 블록에서 제어신호를 발생시킬 때도 또한 상태 레지스터의 EF를 참조한다. 만약, EF가 '0'(정 논리일 경우)이라면 이 명령어는 2개의 레지스터간 연산이 된다. 즉, 이 경우는 명령어의 3번째 비트부터 최하위 비트까지의 4 비트를 통해 16개의 레지스터중 하나를 선택하여 목적 레지스터(IR[7:4])와 연산을 수행하고 그 결과값은 목적 레지스터에 기록되게 된다.
만약, EF가 '1'이라면 1개의 레지스터와 즉시 데이터 값과의 연산이 된다. 이 경우는 목적 레지스터와 ER 레지스터를 참조한 즉시 데이터 값과 연산한다. 즉, 즉시 데이터 값과의 연산을 수행하고자 할 때는 먼저 LERI 명령어를 수행하여 원하는 값을 ER에 옮기고 난후에 이 ALU 명령어를 수행하게 되는데 ER을 왼쪽으로 4 비트 산술 이동한 후 ALU 명령어의 즉시 데이터 4 비트로 ER의 최하위 4 비트를 채워 이를 목적 레지스터의 값과 연산하게 된다. 단, 즉시 상수 값이 아주 작은 경우는 따로 단일 명령으로 수행할 수 있도록 Short Immediate ADD/SUB 명령어가 있다. 이 명령어에서 제공하는 즉시 상수의 값은 6 비트이다. 결국 연산하고자 하는 즉시 상수 값이 6 비트를 초과하는 경우에만 이 확장 명령어를 사용하면 된다. 위에서 설명한 확장 명령어를 사용하는 예를 간단한 수식으로 나타내면 다음과 같다.
그림 11 Immediate Data Extension
2. Add Stack Pointer with Immediate Data
현재의 스택 포인터에 변위만큼 확장된 영역을 스택 포인터가 가리키도록 하는 명령어를 생각해 보자. 이런 명령어는 아래와 같이 정의 할 수 있다.
그림 12 Add Stack Pointer with Immediate Data 명령어
이 명령어가 IR 레지스터에 래치되고 실행을 위해 제어 블록에서 필요한 제어 신호를 발생시킬 때 또한 EF를 참조한다. 그래서 만약, EF가 '0'이면 단순히 스택 포인터에 부호 확장된 8 비트를 더하게 된다. 즉, 현재의 스택 포인터에서 (1024 ~ 1023)까지의 범위를 가리킬 수 있다. 여기서 명령어의 오퍼랜드는 8 비트인데 범위가 (1024 ~ 1023)인 이유는 32 비트 단위로 스택 영역을 액세스하기 때문에 최하위 2 비트는 의미가 없어진다. 그래서 실제 변위 값은 최하위 2 비트를 '0'으로 채우면 10 비트가 되는 것이다.
반면에 EF가 '1'이면 스택 포인터에 ER 레지스터를 참조하여 변위 값을 더하여 원하는 스택 포인터를 만든다. 이때 ER의 하위 4 비트를 왼쪽으로 산술 이동한 후 즉시 데이터의 [3:2] 비트를 더하여 만들게 된다. 이 경우를 간단한 수식으로 표현하면 다음과 같다.
그림 13 Immediate Data Extension for Add Stack Pointer with Immediate Data
3. Test Instruction
그림 14 Test Instruction
그림 14에서 보여지는 명령어는 두개의 오퍼랜드를 AND 연산을 수행하여 결과 값은 무시하고 단지 상태 레지스터 값만을 변화시키는 명령어이다. 이 명령어가 IR 레지스터에 래치되고 실행을 위해 제어 블록에서 필요한 제어 신호를 발생시킬때 또한 EF를 참조한다. 그래서 만약, EF가 '0'이면 단순히 두 레지스터간의 AND Operation을 수행한다. 반면에 EF가 '1'이면 ER 레지스터를 참조하여 오퍼랜드를 만든다. 실제적인 동작은 ER의 하위 4 비트를 왼쪽으로 산술 이동시킨 후 명령어의 [3:0]비트를 더하여 만들게 된다. 이 경우를 간단한 수식으로 표현하면 다음과 같다.
그림 15 Operand Selection for Test Instruction
셋째, 분기 명령어의 경우를 보자. 이를 위해 다음과 같이 분기명령어를 정의한다.
그림 16 분기 명령어
분기 명령어에는 여러 가지의 종류가 있을 수 있으나 여기에서는 프로그램 카운터 상관(PC Relative)분기 명령어를 사용한다. 이 명령어가 IR 레지스터에 래치되고 실행을 위해 제어 블록에서 필요한 제어 신호를 발생시킬 때 또한 EF를 참조한다. 그래서 만약, EF가 '0'이면 단순히 프로그램 카운터에 부호 확장된 8 비트를 더한다. 즉, 현재의 프로그램 카운터에서 (512 ~ 511)까지의 범위로 분기할 수 있다. 변위가 8 비트인데 범위가 (512 ~ 511)인 이유는 16 비트 고정길이 명령어를 사용하는 구조이기 때문에 최하위 비트는 의미가 없어진다. 그래서 실제 변위 값은 최하위 비트를 '0'으로 채우면 9 비트가 되는 것이다.
반면에 EF가 '1'이면 프로그램 카운터에 ER 레지스터를 참조하여 변위 값을 더하여 분기하고자 하는 유효 주소를 만든다. 즉, 분기하고자 하는 주소가 (512 ~ 511)의 범위를 벗어나는 경우는 먼저 LERI 명령어를 수행하여 (512 ~ 511)을 초과하는 값을 ER 레지스터에 옮겨 놓은 후 분기 명령어를 수행하여 필요한 변위를 얻을 수 있다는 것이다. 이 경우를 간단한 수식으로 표현하면 다음과 같다.
그림 17 Branch Address Extension
넷째, 메모리의 유효 주소를 옮기거나 현재 진행 중인 프로그램의 주소가 아닌 전혀 다른 주소를 load하는 경우를 살펴보자. 이 경우의 명령어를 정의하면 다음과 같다.
그림 18 Move/Load Effective Address Instruction
우선 위의 명령어를 해석하면 EF에 따라서 명령어의 해석이 확연히 달라짐을 알 수 있다. 일단 EF가 '0'이라면 이 명령어는 MOVE 명령어가 되어 source 레지스터의 내용, 즉 유효 어드레스를 destination 레지스터에 move하여 전혀 새로운 메모리 주소로 옮기도록 한다. 하지만 EF가 '1'이라면 이 명령어는 이미 LERI에 의해 확장된 ER의 내용을 source 레지스터에 더하여 destination 레지스터에 보내고 그 유효 주소를 load하도록 한다. 이 경우는 EF와 ER에 의해 하나의 명령어가 전혀 다른 명령어로 해석되는 것을 보여주는 아주 좋은 예라 하겠다. 이 경우를 간단한 수식으로 표현하면 다음과 같다.
그림 19 Operand Selection for Move/Load Effective Address
다섯째, 곱셈과 나눗셈 연산을 위한 명령어를 생각해 보자. 이를 다음과 같이 간단히 정의하였다.
그림 20 Multiply/Divide Instruction
Multiply/Divide연산은 2가지 유형으로 구분하고, 이를 그림 20에서 보여지는 하나의 명령어로 나타내었다. 이 Multiply/Divide 명령어가 IR 레지스터에 래치되어 실행을 위해 제어 블록에서 제어신호를 발생시킬 때도 또한 상태 레지스터의 EF를 참조한다. 만약, EF가 '0'(정 논리일 경우)이라면 이 명령어는 2개의 레지스터간 연산이 되고, 그 오퍼랜드는 명령어의 [3:0]비트까지 4 비트(Source-2)와 명령어의 [7:4]비트까지의 4 비트(Source-1)를 통해 16개의 레지스터중 2개가 선택된다. 그래서 선택된 2개의 오퍼랜드간 연산을 수행하고 결과값은 ML/MH 레지스터에 기록되게 된다. 반면에, EF가 '1'이라면 1개의 레지스터와 즉시 데이터 값과의 연산이 된다. 이 경우는 ER의 하위 4 비트를 왼쪽으로 산술 이동 후 명령어의 [3:1]비트까지의 즉시 데이터를 채워 한개의 오퍼랜드를 만들고 명령어의 [7:4]비트가 나타내는 Source1 레지스터와의 연산을 한다. 이렇게 연산된 결과는 레지스터 파일의 MH/ML에 넣어두게 된다. 이렇게 즉시 데이터 값과의 연산을 수행하고자 할 때는 먼저 LERI 명령어를 수행하여 원하는 값을 ER에 옮기고 난후에 Multiply/Divide 명령어를 수행한다는 것이다. 이 예를 간단한 수식으로 나타내면 다음과 같다.
그림 21 Operation of Multiply/Divide
지금까지 많은 명령어들 중, LERI 명령어와 EF를 이용하여 상태에 따라 어떻게 ER을 활용하는지를 살펴 보았다. 여기에 설명되지는 않았지만 그밖에 Co-processor를 장착할 시에 사용되는 여러 명령어 중 변위나, 즉시 데이터 값을 필요로 하는 명령어들도 이와 동일한 방법으로 LERI 명령어의 적용이 가능하고 그 확장할 수 있는 양은 제한이 없다고 할 수 있다. LERI 명령어는 명령어가 실행될 때 EF를 '1'로 셋팅하여 ER을 확장했음을 알릴 수 있도록 하고, 앞서 설명된 ER 레지스터를 활용하는 모든 명령어가 실행될 때 상태 레지스터의 EF를 클리어 시킨다.
앞에서 설명된 것을 토대로 확장 레지스터 ER을 살펴보면, 32비트 길이를 가지고 있고 상황에 따라 가변적으로 데이터를 이동시킬 수 있는 기능이 필요하다는 것을 알 수 있다. 확장 레지스터 ER은 다양한 방법으로 구현이 가능하나 여기서는 그림 34와 같이 구현하였다. 그림에서 알 수 있듯이 LERI 명령어가 수행될 때만 앞에서 설명된 것처럼 ER에 부호 확장을 하여 즉시 상수 14 비트를 Load하든지 아니면 LERI가 반복 수행되는 경우라면 자신의 값을 왼쪽으로 14비트 산술 이동시킨 후 그곳에 즉시 상수 값을 Load한다. 그리고 실제로 목적하는 명령어가 실행될 때는 ER의 출력 쪽에 Shifter 대신 MUX가 있어 명령어가 요구하는 만큼씩 이동시킨 값과변위 혹은 즉시 상수를 채워 오퍼랜드를 구성하도록 되어있다. 그래서 여기에 필요한 제어신호는 LERI가 실행되어 확장 데이터를 레지스터에 저장하라는 ER_LD 신호, LERI 명령어가 반복 수행 중인지를 나타내는 EF가 필요하며, 또한 실제 오퍼랜드로 사용될 때 몇 비트의 산술 이동이 필요한지를 결정할 신호가 필요한데 이것은 DIO에서 결정되는 명령어의 TYPE과 명령어에 따라 적당히 선택되어 진다.
이제 LERI 명령어가 수행될 때 예외가 발생하면 어떻게 처리되는지에 대해 살펴보자. 이때 고려해야 할 문제의 핵심은 LERI 명령어 수행 중에 예외가 발생했는지를 예외 처리가 끝난 후까지 어떻게 유지 하느냐와 또한 이미 옮겨 놓은 변위나 즉시 데이터 값을 예외 처리 후 어떻게 복원할 것이냐 하는 것이다. 앞에서 설명하였듯이 본 발명은 이 문제를 해결하기위해 EF와 ER을 사용한다. 대부분의 MCU가 그렇듯이 예외가 발생하면 예외를 처리하기에 앞서 현재의 프로그램의 흐름을 잃지 않기 위해 몇 가지 요소를 스택 영역에 저장한다. 여기서의 구조도 프로그램 카운터 값과 상태 레지스터의 값을 스택 영역에 저장한다. 그래서 예외 처리 후에 프로그램 카운터와 상태 레지스터 값을 되돌려 받았을 때 EF값을 참조하면 LERI 명령어가 수행중일 때 예외가 발생하였는지를 알 수 있고, 또한 ER 레지스터를 소프트웨어적으로 접근 가능하게 하여 예외 처리 전에 이를 역시 스택 영역에 옮겨 놓을 수 있도록 하여 예외 처리 후에 ER 값을 되돌려 받을 수 있어 두 가지의 문제를 해결할 수 있다. 이러한
LERI의 동작과 예외 처리, 그리고 ER 및 EF의 처리 과정을 그림 33의 순서도에 나타내었다.
상술한 본 발명에 의하면 대부분의 MCU가 그렇듯이 예외가 발생하면 예외를 처리하기에 앞서 현재의 프로그램의 흐름을 잃지 않기 위해 몇 가지 요소를 스택 영역에 저장한다. 본 실시예의 구조도 프로그램 카운터 값과 상태 레지스터의 값을 스택 영역에 저장한다. 그래서 예외 처리 후에 프로그램 카운터와 상태 레지스터 값을 되돌려 받았을 때 E플래그 값을 참조하면 확장 명령어가 수행중일 때 예외가 발생할 경우 그 상태를 유지할 수 있고, 또한 ER레지스터를 소프트웨어적으로 접근 가능하게 하여 예외 처리 전에 이를 역시 스택영역에 옮겨 놓을 수 있도록 하여 예외 처리 후에 스택으로 부터 ER값을 복원 시킴으로서 두가지의 문제를 해결할 수 있다.

Claims (10)

  1. 프로그래머가 접근 가능하고 연산 데이터, 메모리 번지를 기억하는 하나 또는 다수개의 범용 레지스터와, 프로그래머가 접근 가능하고 중앙처리장치 동작에 필요한 정보를 기억하는 하나 또는 다수개의 특수 레지스터와, 프로그래머가 접근 할 수 없으며 중앙처리장치 동작에 필요한 특수한 기능이나 연산의 중간 과정을 기억하는 하나 또는 다수개의 내부 레지스터로 구성되는 레지스터 파일과;
    버스에 의해 상기 레지스터 파일과 연결되며 연산 기능을 수행하는 연산 기능 블록과; 명령어를 저장하는 명령 레지스터와;
    상기 명령 레지스터로부터의 명령어를 해석하여 제어 신호를 발생하는 제어 블록과;
    상기 명령 레지스터의 상태와 상기 제어 블록의 상태를 표시하는 하나 또는 다수개의 상태 플래그를 포함하는 중앙처리장치에 있어서;
    상기 특수 레지스터는 프로그래머가 접근 가능하며, 확장 데이터를 기억하는 확장 데이터 필드만으로 구성되거나 상기 확장 데이터 필드를 하나의 구성 요소로 가지는 확장 레지스터와;
    상기 확장 레지스터에 상기 확장 데이터를 기억하는 명령어를 수행하면 상태가 변경되는 프로그래머가 접근 가능한 하나 또는 다수개의 비트로 구성되는 확장 플래그를 더욱 포함 하므로써;
    상기 확장 레지스터의 확장 데이터 필드에 확장 데이터를 기억시키는 동작을 나타내는 OP 코드와 즉시 상수 오퍼랜드로 구성되어, 확장 레지스터의 확장 데이터 필드에 확장 데이터를 기억시키는 명령어는 상기 제어 블록에서 해석되어 즉시 상수 오퍼랜드 필드를 확장 레지스터의 확장 데이터 필드에 기억시키고, 상기 OP 코드와 상기 오퍼랜드 필드로 구성되는 확장 명령어는 상기 제어 블록에서 확장 명령어에 포함된 오퍼랜드 필드와 상기 확장 레지스터의 확장 데이터 필드에 기억된 확장 데이터를 연결하여 새로운 오퍼랜드 필드를 형성함으로써, 새로이 형성된 오퍼랜드 필드를 가지는 명령어로 해석되어 실행되는 것을 특징으로 하는 중앙처리장치.
  2. 제 1항에 있어서, 상기 확장 레지스터의 길이는 상기 범용 레지스터의 길이와 같거나 짧은 것을 특징으로 하는 중앙처리장치.
  3. 제 1항에 있어서, 상기 확장 플래그는 상태 레지스터내에 구성되는 것을 특징으로 하는 중앙처리장치.
  4. 제 3항에 있어서, 상기 확장 레지스터에 기억된 상기 확장 데이터를 연결하여 오퍼랜드 필드를 형성하는 상기 기본 명령어가 수행되면 상기 확장 플래그의 상태를 변경하는 것을 특징으로 하는 중앙처리장치.
  5. 제 4항에 있어서, 상기 확장 플래그의 상태에 따라서 상기 기본 명령어가 가지는 상기 일부분 오퍼랜드를 양의 정수나 2의 보수로 보아서 확장하여 상기 오퍼랜드를형성하거나 상기 확장 레지스터에 기억된 확장 데이터와 상기 일부분 오퍼랜드를 형성하는 것을 특징으로 하는 중앙처리장치.
  6. 제 2항에 있어서, 상기 확장 레지스터에 기억된 상기 확장 데이터를 연결하여 상기 오퍼랜드 필드를 형성하는 상기 기본 명령어가 수행되면 상기 확장 레지스터에 일정한 데이터를 기억시키는 것을 특징으로 하는 중앙처리장치.
  7. 제 4항에 있어서, 상기 확장 레지스터에 상기 확장 데이터를 기억하는 상기 명령어의 즉시 상수 오퍼랜드 필드의 길이가 상기 확장 레지스터의 길이 보다 짧으며, 상기 확장 레지스터에 상기 확장 데이터를 기억하는 명령어는 상기 확장 플래그의 상태에 따라서 즉시 상수 오퍼랜드를 양의 정수나 2의 보수로 보아서 확장 레지스터의 길이만큼 확장하여 상기 확장 레지스터에 저장하거나 상기 확장 레지스터에 기억된 확장 데이터를 즉시 상수 오퍼랜드 길이만큼 왼쪽으로 이동시키고 즉시 상수 오퍼랜드를 연결하여 확장 데이터를 형성하여 상기 확장 레지스터에 저장하는 기능을 가지는 것을 특징으로 하는 중앙처리장치.
  8. 제 7항에 있어서, 상기 확장 플래그의 상태에 따라서 상기 기본 명령어가 가지는 상기 일부분 오퍼랜드를 양의 정수나 2의 보수로 보아서 확장하여 상기 오퍼랜드를 형성하거나 상기 확장 레지스터에 기억된 확장 데이터와 상기 일부분 오퍼랜드를 형성하는 것을 특징으로 하는 중앙처리장치.
  9. 제 3항에 있어서, 상기 확장 플래그의 상태에 따라서 상기 기본 명령어가 가지는 OP code를 다르게 해석하는 것을 특징으로 하는 중앙처리장치.
  10. 메모리에서 파이프라인을 위해 명령어를 패치하는 제 1 명령어 패치 스텝과, 상기 제 1 명령어 패치 스텝에서 패치된 명령어를 명령어 레지스터에 래치하는 명령어 래치 스텝과, 상기 명령어 래치 스텝에서 래치된 명령어가 확장 명령어인가를 판단하는 제 1 판단 스텝과, 상기 제 1 판단 스텝에서 판단한 결과 명령어 확장 명령어이면 확장 플래그를 상태 레지스터에 셋팅하고 데이터 확장 명령어를 확장 레지스터에 저장하는 확장 플래그 셋팅 스텝과, 상기 확장 플래그 셋팅 스텝에서 플래그가 셋팅된 상태에서 주변장치에서 인터럽트 요구 신호가 입력되는 가를 판단하는 인터럽트 요구 판단 스텝과, 상기 인터럽트 요구 판단 스텝에서 인터럽트 요구 신호가 인가되면 확장 명령어를 확장 레지스터에 저장한 상태로 인터럽트를 수행하는 인터 럽트 수행 스텝과, 상기 인터럽트 수행 스텝에서 수행이 완료되면 메모리로 부터 다음 명령어를 패치하는 제 2 명령어 패치 스텝과, 상기 제 2 명령어 패치 스텝에서 패치된 명령어를 명령어 래치스터에 래치하고 확장 명령어 인가를 판단하는 제 2 판단 스텝과, 상기 제 2 판단 스텝에서 판단한 결과 확장 명령어가 아니면 상태 레지스터에 셋팅된 확장 플레그를 제거하고 확장 레지스터에 저장된 확장 명령어 데이터를 제 2 명령어 패치 스텝에서 패치된 명령어 데이터 수 만큼 시프트하여 가변하는 명령어데이터를 확장하는 명령어 확장스텝으로 이루어 진것을 특징으로 하는 중앙처리장치.
KR1019990003093A 1999-01-30 1999-01-30 중앙처리장치 KR19990046279A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019990003093A KR19990046279A (ko) 1999-01-30 1999-01-30 중앙처리장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019990003093A KR19990046279A (ko) 1999-01-30 1999-01-30 중앙처리장치

Publications (1)

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

Family

ID=54781054

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990003093A KR19990046279A (ko) 1999-01-30 1999-01-30 중앙처리장치

Country Status (1)

Country Link
KR (1) KR19990046279A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040002305A (ko) * 2002-06-29 2004-01-07 주식회사 에이디칩스 중앙처리장치
KR100880681B1 (ko) * 2000-08-09 2009-01-30 어드밴스드 마이크로 디바이시즈, 인코포레이티드 확장 레지스터 모드로 확장 레지스터 세트를 액세스하는 중앙 처리 장치

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100880681B1 (ko) * 2000-08-09 2009-01-30 어드밴스드 마이크로 디바이시즈, 인코포레이티드 확장 레지스터 모드로 확장 레지스터 세트를 액세스하는 중앙 처리 장치
KR20040002305A (ko) * 2002-06-29 2004-01-07 주식회사 에이디칩스 중앙처리장치

Similar Documents

Publication Publication Date Title
KR100325430B1 (ko) 상이한 워드 길이의 산술연산을 수행하는 데이터 처리장치 및 그 방법
US5996057A (en) Data processing system and method of permutation with replication within a vector register file
US7159100B2 (en) Method for providing extended precision in SIMD vector arithmetic operations
KR100266337B1 (ko) 정보처리회로,반도체집적회로장치,마이크로컴퓨터,및전자기기
EP1019805B1 (en) Data processing unit with digital signal processing capabilities
US6334176B1 (en) Method and apparatus for generating an alignment control vector
US7487338B2 (en) Data processor for modifying and executing operation of instruction code according to the indication of other instruction code
KR100328162B1 (ko) 정보처리회로와마이크로컴퓨터와전자기기
JPH11154114A (ja) 複数データ・フェッチのアーキテクチャを使ってテーブル・ルックアップを実行するためのシステムおよび方法
WO1998011483A1 (en) A vector processing system with multi-operation, run-time configurable pipelines
JPH10134036A (ja) マルチメディア信号プロセッサの単一命令多重データ処理
US5682531A (en) Central processing unit
KR100322277B1 (ko) 확장 명령어를 가진 중앙처리장치
JP3645573B2 (ja) データ処理装置におけるレジスタ・アドレッシング
US20030046516A1 (en) Method and apparatus for extending instructions with extension data of an extension register
JPH10143494A (ja) スカラ/ベクトル演算の組み合わせられた単一命令複数データ処理
KR19990046279A (ko) 중앙처리장치
US6484194B1 (en) Low cost multiplier block with chain capability
JP2000039995A (ja) 高性能マイクロプロセッサで使用するためのフレキシブル累算レジスタファイル
JP3504355B2 (ja) プロセッサ
KR19990046283A (ko) 확장명령어를갖는중앙처리장치
KR19990046282A (ko) 확장명령어를갖는중앙처리장치
KR19990046280A (ko) 중앙처리장치
KR19990046284A (ko) 확장명령어를갖는중앙처리장치
EP0967543B1 (en) Method of multiplying numbers represented in multiple-word chains

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