2024. 4. 24. 04:30ㆍ카테고리 없음
목차
4.1 제어 유니트의 기능
4.2 제어 유니트의 구조
4.3 마이크로 명령어의 형식
4.4 마이크로프로그래밍
4.5 마이크로프로그램의 순서 제어
< 4.1 제어 유니트의 기능 >
- 제어 유니트의 기능
> 명령어 코드의 해독
> 명령어 실행에 필요한 제어 신호들의 발생
- 마이크로명령어(micro-instruction)
: 명령어 사이클의 각 주기에서 실행되는 각 마이크로-연산을 지정해주는 2진 비트들로서, 제어 단어(control word)라고도 함
- 마이크로프로그램(microprogram)
: 마이크로명령어들의 집합
- 루틴(routine)
: CPU의 특정 기능을 수행하기 위한 마이크로명령어들의 그룹
[예] 인출 사이클 루틴, 실행 사이클 루틴, 인터럽트 사이클 루틴
< 4.2 제어 유니트의 구조 >
1. 구성 요소들
- 명령어 해독기(instruction decoder)
: 명령어 레지스터(IR)로부터 들어오는 명령어의 연산코드를 해독하여 해당 연산을 수행하기 위한 루틴의 시작 주소를 결정
- 제어 주소 레지스터(control address register: CAR)
: 다음에 실행할 마이크로명령어의 주소를 지정하는 레지스터
> 이 주소는 제어 기억장치의 특정 위치를 지칭
- 제어 기억장치(control memory)
: 마이크로명령어들로 이루어진 마이크로프로그램을 저장하는 내부 기억장치
- 제어 버퍼 레지스터(control buffer register: CBR)
: 제어 기억장치로부터 읽혀진 마이크로명령어 비트들을 일시적으로 저장하는 레지스터
- 서브루틴 레지스터(subroutine register: SBR)
: 마이크로프로그램에서 서브루틴이 호출되는 경우에 현재의 CAR 내용을 일시적으로 저장하는 레지스터
- 순서제어 모듈(sequencing module)
: 마이크로명령어의 실행 순서를 결정하는 회로들의 집합
- 제어 유니트의 내부 구성도

2. CPU의 명령어 세트 설계 및 구현 과정
1) 명령어들의 종류 및 비트 패턴 정의
2) 명령어들의 실행에 필요한 하드웨어 설계
3) 각 명령어를 위한 실행 사이클 루틴 작성(마이크로프로그래밍)
4) 마이크로프로그램 코드들을 제어 기억장치에 저장
3. 제어 기억장치의 내부 구성
- 마이크로프로그램 루틴들을 제어 기억장치에 저장한 예
> 제어 기억장치 용량 = 128단어
> 전반부(0 ~ 63번지): 공통 루틴들 저장
> 후반부(64 ~ 127번지): 각 명령어의 실행 사이클 루틴들 저장

4. 명령어 해독 과정(시험 출제 of 사상함수)
- 명령어 해독
: 명령어의 연산 코드가 지정하는 연산을 위한 실행 사이클 루틴의 시작 주소를 결정하는 동작
* 명령어: 명령어 레지스터(IR)에 들어있다.
- 사상(mapping)을 이용한 해독 방법(주소번지를 mapping하는 방법)
> 명령어의 연산 코드를 특정 비트 패턴과 조합
[예] 16-비트 길이의 명령어가 4비트의 연산코드, 1비트의 간접 주소지정(I) 비트 및 11비트의 주소로 구성된 경우

~> 사상 함수: 1 XXXX 00
*사상함수는 제어기억장치의 주소번지가 된다.
*하나의 op code(XXXX)에 대하여 최대 4줄의 명령어 쓸 수 있다 ~> 명령어 4개 이후 서브 루틴
> 연산코드 = 0001 ~> 실행 사이클 루틴의 시작 주소 = 1000100 (68)
> 연산코드 = 0110 ~> 실행 사이클 루틴의 시작 주소 = 1011000 (88)
< 4.3 마이크로명령어의 형식 >
1. 마이크로명령어의 형식
- 연산필드가 두 개이면, 두 개의 마이크로-연산들을 동시에 수행 가
- 조건(CD) 필드는 분기에 사용될 조건 플래그를 지정
- 분기(BR) 필드는 분기의 종류와 다음에 실행할 마이크로명령어의 주소를 결정하는 방법을 명시
- 주소 필드(ADF)의 내용은 분기가 발생하는 경우에 목적지 마이크로명령어의 주소로 사용

2. 마이크로연산들에 대한 2진 코드 및 기호 [예]
- '연산필드1'에 위치할 마이크로-연산들
| 코드 | 마이크로-연산 | 기호 |
| 000 | None | NOP |
| 001 | MAR <- PC | PCTAR |
| 010 | MAR <- IR(addr) | IRTAR |
| 011 | AC <- AC + MBR | ADD |
| 100 | MBR <- M[MAR] | READ |
| 101 | AC <- MBR | BRTAC |
| 110 | IR <- MBR | BRTIR |
| 111 | M[MAR] <- MBR | WRITE |
- '연산필드2'에 위치할 마이크로-연산들
| 코드 | 마이크로-연산 | 기호 |
| 000 | None | NOP |
| 001 | PC <- PC + 1 | INCPC |
| 010 | MBR <- AC | ACTBR |
| 011 | MBR <- PC | PCTBR |
| 100 | PC <- MBR | BRTPC |
| 101 | MAR <- SP | SPTAR |
| 110 | AC <- AC - MBR | SUB |
| 111 | PC <- IR(addr) | IRTPC |
3. 조건 필드의 코드 지정
- 조건 필드: 두 비트로 구성되며, 분기의 조건으로 사용
U: 무조건 분기
I : 만약 I=1이면, 간접 사이클 루틴을 호출
S: 누산기에 저장된 데이터의 부호가 1이면, 분기
Z: 누산기에 저장된 데이터가 0(Z=1)이면, 분기
| 코드 | 조건 | 기호 | 설명 |
| 00 | 1 | U | 무조건 분기 |
| 01 | I 비트 | I | 간점 주소지정 |
| 10 | AC(S) | S | 누산기(AC)에 저장된 데이터의 부호 |
| 11 | AC=0 | Z | AC에 저장된 데이터 = 0 |
4. 분기 필드의 코드 지정
- 분기 필드: 두 비트로 구성되며, 분기의 유형을 지정
> 조건 필드의 조건이 만족되면, ADF 필드의 내용을 CAR로 적재
~> 그 주소로 분기(JUMP 혹은 CALL)
> RET: 서브루틴으로부터 복귀(SBR에 저장된 내용을 CAR로 적재)
> MAP: 사상 방식에 의하여 분기 목적지 주소 결정
