마이크로프로그램 제어방식
최종 수정 : 25.1.5
마이크로프로그램 제어방식
제어장치의 구현방식에는 하드와이어드(hardwired) 제어방식과 마이크로프로그램 제어방식이 있다. 하와이어드 방식은 게이트, 플립플롭, 디코더 등 디지털 논리회로를 이용하여 제어논리회로로 구현하기 때문에 처리속도는 마이크로프로그램 방식보다 빠르다. 그러나 CPU의 구조가 변경되면 배선을 모두 바꾸어야 하는 단점이 있다. 프로그램 내장방식은 하드와이어드 방식에 비해 처리속도는 느리지만 제어기억장치에 기억된 제어정보를 이용하여 마이크로 연산을 순차적으로 수행시키기 때문에 CPU의 구조가 변경되어도 제어장치의 마이크로프로그램만 변경하면 되므로 경제적인 방법이다.
1. 마이크로 명령어의 형식
마이크로 연산에 필요한 제어신호를 제어기억장치에 기억시킨 후 마이크로프로그램을 순서적으로 수행시킨다.
모드(I) | op code 부 | operand(address) |
명령어 형식의 예
F1 (3bit) |
F2 (3bit) |
F3 (3bit) |
CD (2bit) |
BR (2bit) |
AD (7bit) |
마이크로 명령어의 형식의 예(20비트)
- F1 : 연산필드1(micro-operation field 1)
- F2 : 연산필드2(micro-operation field 2)
- F3 : 연산필드3(micro-operation field 3)
- CD : 조건필드(condition field)
- BR : 분기필드(branch field)
- AD : 주소필드(address field)
마이크로 연산필드 각각은 7개의 마이크로 동작을 하는데, 연산코드 001에서 111까지다. 연산코드 000은 NOP(no operation)로, 동작의 기능은 없지만 시간을 지연시킨다. 연산필드는 3개이므로 3개의 마이크로 연산이 동시에 수행될 수 있으며, 조건필드는 분기에 사용될 조건 플래그를 지정하며, 분기필드는 분기의 종류와 다음에 실행할 마이크로 명령어의 주소를 결정하는 방법을 알려주며, 주소필드는 분기가 발생하는 경우에 목적지 마이크로 명령어의 주소를 표시한다.
연산필드1의 마이크로 연산
코드(F1) | 마이크로 연산 | 기호 |
000 | None | NOP |
001 | AC ← AC + MBR | ADD |
010 | AC ← 0 | CLRAC |
011 | AC ← AC + 1 | INCAC |
100 | AC ← MBR | BRTAC |
110 | MAR ← PC | PCTAR |
111 | M[MAR] ← MBR | WRITE |
연산필드2의 마이크로 연산
코드(F2) | 마이크로 연산 | 기호 |
000 | None | NOP |
001 | AC ← AC - MBR | SUB |
010 | AC ← AC ∨ MBR | OR |
011 | AC ← AC ∧ MBR | AND |
110 | MBR ← M[MAR] | READ |
101 | MBR ← AC | ACTBR |
110 | MBR ← MBR + 1 | INCBR |
111 | IR ← MBR | BRTIR |
연산필드3의 마이크로 연산
코드(F3) | 마이크로 연산 | 기호 |
000 | None | NOP |
001 | AC ← AC MBR | XOR |
010 | AC ← AC' | COM |
011 | AC ← shift left AC | SHL |
100 | AC ← shift right AC | SHR |
101 | PC ← PC + 1 | INCPC |
110 | PC ← MAR | ARTPC |
111 | MBR(주소) ← PC | PCTBR |
조건필드
코드(CD) | 조건 | 기호 |
00 | Always = 1 | U |
01 | I 비트 | I |
10 | AC(S bit) | S |
11 | AC = 0(Z 비트) | Z |
U | 무조건 분기(unconditional branch) | |
I | 간접주소방식 비트(indirect address bit) | |
S | 누산기의 부호비트(sign bit of AC) | |
Z | 누산기의 제로비트(zero value in AC) |
조건필드는 2개의 비트로 구성되며 분기필드의 조건을 표시한다. CD = 00이면 현재의 마이크로 명령어가 실행이 완료된 다음에 무조건 분기를 의미하며, 분기될 목적지의 주소는 주소필드의 값이다. CD = 01이면, I 비트의 값에 따라 간접주소의 여부를 표시한다. I 비트가 1이면 간접 사이클 루틴을 호출하여 기억장치에서 유효주소를 인출한다. CD = 10이면 조건 플래그 S(Sign)가 1이면 (음수) 분기가발생하고, 11이면 Z(Zero)비트가 1이면 분기가 발생한다.
분기필드
코드(BR) | 기호 | 기능 |
00 | JMP | CAR ← AD(주소) if 조건 = 1 |
CAR ← CAR + 1 if 조건 = 0 | ||
01 | CALL | CAR ← AD(주소), SBR ← CAR + 1 if 조건 = 1 |
CAR ← CAR + 1 if 조건 = 0 | ||
10 | RET | CAR ← SBR(복귀) |
11 | MAP(사상) | CAR(2 - 5) ← IR(op code), CAR(0, 1, 6) ← 0 |
00이면 조건부 점프(conditional jump)를 나타낸다. 조건이 만족되면 주소필드의 값이 CAR로 들어가고 그 주소의 마이크로 명령어로 점프한다. 조건이 만족되지 않으면 분기가 발생하지 않고 CAR의 내용이 1 증가하여 다음 명령어를 수행한다. 여기서 조건필드의 값이 00이면 무조건 점프(unconditional jump)를 하게 된다. 01이면 조건부 호출(conditional call)을 나타낸다. CAR의 내용을 1 증가시킨 후 서브루틴(SBR) 저장되고 주소필드의 값이 CAR에 들어가서 다음 사이클에서 그 주소의 마이크로 명령어가 실행된다. 조건이 만족하지 않으면 원래 순서대로 다음에 위치한 마이크로 명령어가 수행된다. 이 경우도 마찬가지로 조건필드가 00이면 무조건 호출이 수행된다. 10이면 SBR(복귀 주소)에 저장되어 있던 주소가 CAR로 다시 이동하여 호출되기 전의 프로그램 실행순서로 돌아간다. 11이면 사상(mapping)의 결과로 얻어진 시작주소가 CAR로 이동되어 그 주소로 분기한다.
2. 마이크로 프로그래밍
1) 인출 사이클 루틴
명령어 주소는 PC에서 MAr로 전송되고, 지정된 메모리의 명령어가 MBR로 전송되며, PC의 카운터가 증가한다. MBR의 내용이 IR로 전송된 후, 실행의 시작주소는 op coded의 사상에 의해 계산된다.
대표적인 해독방법 중의 하나로 사상방식이 있다. 사상방식은 명령어의 연산코드를 특정한 비트 패턴에 혼합시켜서 마이크로 명령어의 시작주소를 찾아내는 방식이다.
2) 간접 사이클 루틴
간접주소지정방식을 사용하는 경우는 명령어의 I 비트가 1이 된다. 실행 사이클의 시작 부분에서 간접 사이클 루틴을 호출하여 기억장치에서 유효주소를 읽어 온다.
IR에 저장되어 있는 명령어의주소필드가 가리키는 기억장치에서 유효주소를 다시 인출하여 IR 주소필드에 적재한다. 수행이 끝난 후에는 실행 사이클 루틴으로 복귀해서 SBR의주소를 CAR로 옮긴다.
3. 마이크로프로그램 실행
다양한 연산코드의 실행 사이클 루틴
명령어 | 기호 | 조건필드 | 분기필드 | 주소 | 특성 |
ORG 0 | |||||
STORE | NOP | I | CALL | INDIRECT | ;if I = 1 indirect 루틴 수행 |
ACTBR | U | JMP | NEXT | ;MBR ← M[MAR] | |
WRITE | U | JMP | FETCH | ;M[MAR] ← MBR | |
ADD | ORG 04 | ||||
NOP | I | CALL | INDIRECT | ;if I = 1 indirect 루틴 수행 | |
READ | U | JMP | NEXT | ;MBR ← M[MAR] | |
ADD | U | JMP | FETCH | ;AC ← AC + MBR | |
ORG 64 | |||||
FETCH | PACTAR | U | JMP | NEXT | ;MAR ← PC |
READ, INCPC | U | JMP | NEXT | ;MBR ← M[MAR], PC ← PC + 1 | |
BRTIR | U | JMP | NEXT | ;IR ← MBR | |
IRTAR | U | MAP | ;MAPPING | ||
INDRT | READ | U | JMP | NEXT | ;MAR ← PC |
BRTIR | U | JMP | NEXT | ;IR ← MBR | |
IRTAR | U | RET | ;MAR ← IR(주소) |
제어장치가 명령어의 실행을 제어한다는 것은 제어기억장치(ROM)에 저장된 마이크로 명령어들을 순서대로 인출하는 것이다. 마이크로 명령어를 읽어서 연산필드에 있는 비트들의 출력신호가 바로 제어신호이다.
4. 마이크로프로그램의 순서제어
제어장치가 명령어의 실행을 제어한다는 것은 제어기억장치(ROM)에 저장된 마이크로 명려엉들을 순서대로 인출하는 것이다. 마이크로 명령어를 읽어서 연산필드에 있는 비트들의 출력신호가 바로 제어신호이다.
제어주소 레지스터는 CAR가 지정하는 제어메모리의 마이크로 명령어를 인출하면서 마이크로프로그램이 실행된다. 마이크로 명령어 비트 중에 CD(제어필드)의 비트가 MUX2에 보내져서 1개를 선택해서 출력된 신호는 주소선태괴로의 입력 C로 들어간다. MUX1의 입력은 CAR이 1 증가한 주소, ADF의 주소, SBR(서브루틴 레지스터)에 저장되어 있던 주소, op code가 사상되어 결정된 주소 중에서 선택된 주소가 CAR로 저장된다. CAR의 내용이 제어기억장치의 주소를 지정한다.
마이크로 명령어 내의 적은 수의 비트들에 해독기를 부착하여 제어신호로 확장하는 방식을 수직적 마이크로 프로그래밍(vertical micro programming)이라 한다. 이 방식에서 사용되는 명령어를 수직적 마이크로 명령어(vertical micro instruction)라고 한다. 이 명령어는 명령어의 길이가 짧아서 제어기억장치의 용량이 적게 필요하다는 장점이 있다. 하지만 해독기를 통과하는 시간만큼 지연된다. 반면에 마이크로 명령어 내 연산필드들의 각 비트와 제어신호를 일대일로 대응시키는 방식을 수평적 마이크로 프로그래밍(horizontal miro programming)이라고 한다. 이 방식은 하드웨어가 간단하고 해독에 따른 시간지연이 없지만 제어기억장치의 용량이 커지는 단점이 있다.
참고
독학사 교재