7. 마이크로 프로그램된 제어
7.3 마이크로 프로그램의 예
일단 컴퓨터와 마이크로 프로그램된 제어 장치의 구조가 결정되면, 제어 메모리에 마이크로 프로그램을 작성해 넣어야 한다. 간단한 범용 컴퓨터로 마이크로 프로그램을 작성하는 방법을 보이기로 한다.
- 컴퓨터 하드웨어의 구성
컴퓨터 하드웨어 구성
- 주 메모리는 명령어와 데이타를 저장
- 프로세서 레지스터로 프로그램 카운터(PC), 주소 레지스터(AR), 데이타 레지스터(DR), 누산기 레지스터(AC)를 가지고 있다.
- 마이크로 명령어를 저장하기 위한 제어 메모리
- 마이크로 프로그램된 제어장치를 구성하기 위한 제어 주소 레지스터(CAR)과 서브루틴 레지스터(SBR) 등이 있다.
- 멀티플렉서를 통해 정보 전송
- DR은 AC, PC 및 메모리로부터 데이타를 받는다.
- AR은 PC와 DR로부터 데이타를 받는다.
- PC는 AR로부터만 데이타를 받는다.
- AC와 DR에 있는 데이타에 대해 마이크로 연산을 수행
- 그 결과는 AC에 저장
- DR하고만 데이타를 주고 받을 수 있다.
- 컴퓨터의 명령어 형식
컴퓨터 명령어
그림(a)
- I비트는 간접주소를 표시
- 연산 코드(opcode) 는 4-비트
- 주소비트는 11-비트
- 그림(b)
- ADD 명령어는 유효주소에 저장되어 있는 피연산자를 AC에 더한다.
- BRANCH 명령어는 AC에 있는 피연산자가 음수일 때 유효 주소로 분기
- STORE 명령어는 AC의 값을 유효 주소로 지정된 메모리에 저장
- EXCHANGE 명령어는 AC의 데이타와 유효 주소로 지정된 메모리의 데이타를 서로 교환
마이크로 명령어 형식(Format)
- 마이크로 명령어 형식
마이크로 명령어 코드 형식(20비트)
- 구성
- 20비트로서 4개의 필드로 구분
- F1, F2, F3 필드는 컴퓨터의 마이크로 연산을 지정하며 각각 3비트로 구성
- CD 필드는 상태 비트 조건을 선택
- BR 필드는 분기의 종류를 지정
- AD 필드는 분기주소를 가지며 주소 필드는 7비트로 구성되므로 제어 메모리의 크기가 128=2의 7제곱
마이크로 명령어의 각 필드에 대한 기호와 이진 코드
- F1, F2, F3에 대한 7가지 동작
- 모두 21개의 동작을 수행
- 하나의 마이크로 명령어에는 세 개의 동작만 지정
- 세 개의 동작을 모두 사용하지 않을 때에는 해당 필드의 값을 이진수 000으로 지정
- 위 표의 마이크로 연산들은 레지스터 전송문으로 정의되고 마이크로 프로그램에서 사용되는 기호로 나타내고 있다.
- 이 중에서 전송을 나타내는 마이크로 연산은 근원 레지스터와 목적 레지스터를 포함하도록 다섯 개의 문자로 표시. ex) DR 에서 AC로 전송하는 동작은 DRTAC
예시)
F1 = 000, F2 = 100, F3 = 101의 값을 주면 다음과 같이 두 개의 마이크로 연산을 동시에 지정할 수 있다.
DR ← M[AR] (F2 = 100)
PC ← PC + 1 (F3 = 101)
그러나 010 001 000과 같은 값을 지정하면 AC를 0으로 클리어하는 동작과 AC에서 DR을 빼는 동작을 동시에 수행하여 충돌이 발생. 이와 같은 동작은 동시에 지정할 수 없다.
- CD(조건) 필드의 동작
- 상태 비트 중 하나를 지정
- 조건은 항상 1인 것으로서 CD = 00일 때 항상 참인 조건을 표시. BR(분기) 필드와 함께 사용되어 무조건 분기동작을 수행
- 간접비트 I는 DR의 15번째 비트에, S는 AC의 부호 비트에 따라 그 값이 정해지는 상태 비트
- Z는 AC가 0일 때 참이 되는 상태 비트
- 2비트로 구성
- 주소 필드 AD와 연관되어 쓰일 때 바로 다음 마이크로 명령어의 주소를 선택
- BR = 00 이면 점프(JMP) 동작, BR = 01 이면 서브루틴 CALL 동작을 한다.
- JMP와 CALL은 CD 필드의 영향을 받는다.
- CD 필드에서 선택된 조건이 1이면 AD에 있는 주소로 분기, 0이면 바로 다음 명령을 실행
- SBR의 값이 CAR로 옮겨지는 것으로 BR = 10일 때이다.
- BR = 11 이면 매크로 연산 비트로부터 CAR로의 매핑은 7.2의 2번째 그림과 같다.
- 매크로 연산은 명령어의 Op-코드 부분을 말하는 것인데, DR(11-14)로써 나타낸다.
- BR 필드의 마지막 2조건은 CD와 AD 필드의 값과 무관함에 유의
기호로 표시된 마이크로 명령어
위의 표에 정의된 기호는 마이크로 명령어를 기호형태로 나타내는 데 사용
기호로 표시된 마이크로 명령어는 어셈블러를 통해 이진 코드로 바꿀 수 있다.
각 기호로 된 마이크로 명령어는 라벨(label), 마이크로 연산, CD, BR, AD등 다섯 개의 필드로 나뉜다. 각 필드는 다음과 같은 정보를 갖게 된다.
- Label 필드
- 공백일 수도 있으며, 기호 주소를 표시할 수도 있다.
- 라벨 뒤에는 콜론(:)이 붙어야 한다.
- 위 표에서 정의된 한 개나 두 개 또는 세 개의 기호로 구성
- 각 기호는 콤마(,)로 분리
- U, I, S, Z 중 하나의 문자를 갖는다.
- 위 표에서 정의된 4개의 기호들 중 하나를 갖는다.
- 3가지의 기호들 중 하나를 갖는다. 이는 다음 주소를 결정하는 방법을 표시한다.
- 기호 주소(이는 라벨로 프로그램상에 나타나야 한다)
- NEXT(이는 연속된 다음 주소를 뜻한다)
- BR이 RET이나 MAP이면 AD는 공란으로 둔다.
- 마이크로 프로그램 루틴의 처음 시작 위치를 표시
- ORG 64는 제어 메모리의 64번지에 다음 마이크로 명령어를 기억시키라는 뜻
- 128개의 워드를 가지며, 각각의 워드는 20비트로 구성
- 0~63번지는 16개의 매크로 연산을 위한 루틴으로 사용
- 64~127번지는 fetch 루틴이나 indirect 루틴이나 그외의 다른 용도로 사용
- fetch 루틴에 필요한 마이크로 명령어
- 명령어의 주소가 PC에서 AR로 전송
- 명령어 중 명령코드는 DR로 읽혀지고 주소 부분은 AR로 전송된다.
- DR의 연산 코드 부분을 CAR로 매핑시킴으로써 16개의 루틴 중 하나로 제어를 옮긴다.
- fetch 루틴의 이진 코드
어셈블러는 다음과 같은 기호로 된 프로그램에 대응하는 이진 코드를 만들어낸다. 제어 메모리에 이와 같은 이진 코드가 기억된다.
일반적으로 기호 형태로 마이크로 프로그램을 작성, 어셈블러를 이용해서 그에 대응하는 이진 코드를 만든다.
Binary address |
F1 |
F2 |
F3 |
CD |
BR |
AD |
1000000 |
110 |
000 |
000 |
00 |
00 |
1000001 |
1000001 |
000 |
100 |
101 |
00 |
00 |
1000010 |
1000010 |
101 |
000 |
000 |
00 |
11 |
0000000 |
기호로 표시된 마이크로 프로그램
fetch 사이클의 마지막 동작은 fetch 된 매크로 연산의 루틴으로의 분기 동작이다.
- 예) Op-코드가 0000인 ADD 명령어
- CAR에 0000000을 갖다 놓게 되어 ADD루틴을 수행, BRANCH는 0000100으로 매핑되어 4번지의 BRANCH 명령의 루틴을 수행, STORE는 0001000가 그 루틴의 시작 위치가 된다.
- 각 루틴은 네 개의 마이크로 명령어를 가질 수 있다.
- 각 루틴에서는 유효 주소를 계산하는 동작이 공통적으로 필요. 이것을 서브루틴화하면 제어 메모리를 효율적으로 사용가능
- 이 서브루틴을 INDRCT 서브루틴이라 하고 fetch루틴 다음에 저장하기로 한다.
기호로 표시된 마이크로 프로그램
- fetch cycle 루틴
- 간접 서브루틴
- ADD 루틴
- BRANCH 루틴
- STORE 루틴
- 간접 루틴의 실행
fetch 사이클의 맨 끝에 있는 매핑동작에 의해 이 루틴으로 분기
명령의 각 루틴의 첫번째 명령에서 I=1이면 간접 서브루틴을 호출하고 리턴주소는 SBR에 저장
간접 서브루틴의 마이크로 명령
- 이 서브루틴으로부터 리턴(RET)할 때에는 SBR의 내용을 CAR로 옮김으로써 ADD루틴의 두번째 마이크로 명령어부터 수행하게 된다.
- 메모리에서 DR을 통해 피연산자를 읽고 이를 AC와 더한다.
- 이 동작의 실행이 끝난 후에 fetch루틴의 처음으로 점프(jump)한다.
- AC가 음수일 때만 유효주소로 분기
- AC가 음수이면 S=1이 되어 이 상태를 인식
- 표 7-2의 분기 루틴 S의 값을 조사하여 S=0이면 PC의 값을 변경시키지 않아 분기가 일어나지 않게 되고, 다음 마이크로 명령어는 fetch루틴으로 분기
- S=1이면 JMP마이크로 명령어는 OVER의 위치로 분기하게 하고, 이 위치에서 I=1이면 간접 서브루틴을 호출하고 다시 유효주소가 PC로 전송되고 fetch루틴으로 넘어간다.
- I=1이면 간접 서브루틴을 호출
- AC의 내용이 DR로 전송, DR의 내용이 유효 주소에 저장
- 유효 주소로부터 DR로 피연산자를 읽어온다.
- 모서리-트리거형 레지스터의 성질을 이용하여 3번째 마이크로 명령어에서 AC와 DR의 값이 교환된다.
- DR에 저장된 원래 AC의 값은 메모리로 다시 저장된다.
이진 마이크로 프로그램
제어 메모리를 위한 이진 마이크로 프로그램
- 기호로 표시된 마이크로 프로그램은 읽거나 이해하기에 쉽게 쓰여 있지만, 실제 메모리에 저장되는 형태가 아니다. 따라서 어셈블러나 또는 사람이 직접 이진 코드로 바꾸어야 한다.
- 표 7-2는 어셈블러에 의해 표 7-3의 이진 마이크로 프로그램으로 변환
- 이진 마이크로 프로그램은 제어 메모리 즉, ROM에 저장되어 있다.
- 이런 방식의 제어논리를 마이크로 프로그램 제어라 한다.
'COMPUTER SYSTEM ARCHITECTURE' 카테고리의 다른 글
제어 장치의 설계 (0) | 2014.10.11 |
---|---|
fetch (0) | 2014.10.11 |
주소 시퀀싱 (0) | 2014.10.11 |
제어 메모리(Control Memory) (0) | 2014.10.07 |
부울 대수 (0) | 2014.09.28 |