909 Devlog

[컴퓨터 구조] - 제어 유니트 본문

Computer Science/컴퓨터 구조

[컴퓨터 구조] - 제어 유니트

구공구 2023. 10. 30. 16:50
728x90

👋 본 글은 "컴퓨터 구조론" 책을 읽고 요약, 정리한 글입니다.


책 구매 링크에서 책을 확인하실 수 있습니다.

 

4장에서는 제어 유니트의 기능과 내부 구조 및 동작 원리에 대하여 설명한다.

 

🎯 1. 제어 유니트의 기능


제어 유니트가 수행하는 주요 기능들은 아래와 같다.

  • 명령어 코드의 해독
  • 명령어 실행에 필요한 제어 신호들의 발생

즉, 명령어 사이클이 적절히 수행되도록 모든 동작들을 제어하는 장치이다.

 

예를 들어 2장에서 봤던 사이클들 중에 인출 사이클은 다음과 같다.

t (CPU 클록의 주기) 마이크로-연산 마이크로명령어
t0 MAR <- PC PCTAR U JMP NEXT
t1 MBR <- M[MAR], PC <- PC + 1 READ, INCPC U JMP NEXT
t2 IR <- MBR BRTIR U MAP

 

각 사이클에서는 여러 개의 마이크로-연산들이 수행되는데, 이런 마이크로-연산이 실제 수행되기 위해서는 2진 비트들로 표현되어야 한다, 그와 같이 비트들로 이루어진 각 단어를 마이크로명령어라고 하고, 마이크로명령어는 명령어 사이클의 각 주기에서 실행되는 마이크로-연산들에 대응되는 비트들로 이루어진 단어로서, 제어 단어라고도 한다.

 

마이크로프로그램 : 마이크로명령어들의 집합

 

루틴 : CPU의 특정 기능을 수행하기 위한 마이크로명령어들의 그룹

 

결과적으로, 명령어 사이클을 위한 마이크로프로그램은 인출 사이클 루틴, 간접 사이클 루틴 그리고 실행 사이클 루틴들로 구성된다.

 

🎯 2. 제어 유니트의 구조


아래 그림은 제어 유니트의 내부 구조를 간략하게 보여주고 있다.

 

주요 구성 요소들과 각 기능을 보면 다음과 같다.

  • 명령어 해독기(instruction decoder) : 명령어 레지스터(IR)로부터 들어오는 명령어의 연산 코드를 해독하여 해당 연산을 수행하기 위한 루틴의 시작 주소를 결정
  • 제어 주소 레지스터(control address register : CAR) : 다음에 실행할 마이크로명령어의 주소를 저장하는 레지스터 이 주소는 제어 기억장치의 특정 위치를 가리킴
  • 제어 기억장치(control memory) : 마이크로명령어들로 이루어진 마이크로프로그램을 저장하는 내부 기억장치
  • 제어 버퍼 레지스터(control buffer register : CBR) : 제어 기억장치로부터 읽힌 마이크로명령어를 일시적으로 저장하는 레지스터 (책에서는 17비트로 가정)
  • 서브루틴 레지스터(subroutine register : SBR) : 마이크로프로그램에서 서브 루틴이 호출되는 경우에, 현재의 CAR 내용을 일시적으로 저장하는 레지스터
  • 순서제어 모듈(sequencing module) : 마이크로명령어의 실행 순서를 결정하는 회로들의 집합

CPU의 명령어 세트 설계 과정

  • 명령어들의 종류 및 비트 패턴 정의
  • 명령어들의 실행에 필요한 하드웨어 설계
  • 각 명령어를 위한 실행 사이클 루틴 작성 (마이크로프로그래밍)
  • 마이크로프로그램 코드들을 제어 기억장치에 저장 (ROM으로 만들어져 CPU칩 내에 포함)

 

명령어 해독이란, 명령어의 연산 코드가 지정하는 연산을 위한 실행 사이클 루틴의 시작 주소를 결정하는 동작이다.

따라서 명령어 해독기는 연산 코드를 이용하여 제어 기억장치 내 해당 실행 사이클 루틴의 시작 주소를 찾아야 함. 그 방법에는 몇 가지가 있으나 여기서는 사상(mapping)을 이용하는 방식에 대하여 설명한다.

 

사상 방식에서는 명령어의 연산 코드를 특정 비트 패턴과 혼합시킴으로써 그 연산의 수행에 필요한 실행 사이클 루틴의 시작 주소를 찾아낸다.

 

아래 그림과 같이 실행 사이클 루틴들이 제어 기억장치의 64번지부터 저장되어 있고, 각 루틴은 최대 4 개씩의 마이크로명령어들로 구성된다고 가정하자

(제어 기억장치 용량 = 128 단어, 전반부 (0 ~ 63번지) : 공통 루틴들 저장, 후반부 (64 ~ 127번지) : 각 명령어의 실행 사이클 루틴들 저장 (63번지에는 아래 마이크로-연산 예시의 NOP 저장))

만약 16-비트 길이의 명령어가 4비트의 연산 코드, 1비트의 간접 주소지정 비트 및 11비트의 주소로 구성되어 있다면, 사상 과정은 다음 그림과 같다.

 

사상 함수의 최상위 비트가 1이므로, 사상에 의해 결정되는 주소가 64번지부터 시작할 수 있게 된다.

예를 들어 LOAD 명령어의 연산 코드가 0001이라면, 실행 사이클 루틴의 시작 주소는 1000100 즉, 64 + 4 = 68 번지로 결정된다.

(연산 코드 = 0101 ➡️ 실행 사이클 루틴의 시작 주소 = 1010100)

따라서 그 주소가 CAR로 입력되며, 명령어 실행 사이클이 시작되면 마이크로명령어들을 순차적으로 인출하여 수행하게 된다.

 

🎯 3. 마이크로 명령어의 형식


위 그림과 같은 예에서 마이크로명령어는 길이가 17비트이고, 상단에 표시된 수만큼의 비트들로 이루어지는 다섯 개의 필드들로 구성된다.

  • 이 경우에는 연산 필드가 두 개이므로, 두 개의 마이크로-연산들이 동시에 수행될 수 있다. (만약 연산 필드를 하나만 사용하는 명령어라면, 연산 필드 2를 NOP로 채움)
  • 조건 필드(CD)는 분기에 사용될 조건 플래그를 지정
  • 분기 필드(BR)는 분기의 종류와 다음에 실행할 마이크로명령어의 주소를 결정하는 방법을 명시
  • 주소 필드(ADF)의 내용은 분기가 발생하는 경우, 목적지 마이크로명령어의 주소로 사용

아래 표는 연산 필드 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 BRRIT
111 M[MAR] <- MBR WRITE

 

아래 표는 연산 필드 2에 위치할 마이크로-연산들의 예시이다.

코드 마이크로-연산 기호
000 None NOP
001 PC <- CP + 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

 

아래 표는 조건 필드의 코드 지정 예시이다.

코드 조건 기호 설명
00 1 U 부조건 분기
01 I 비트 I 간접 주소지정
10 AC(S) S 누산기(AC)에 저장된 데이터의 부호
11 AC=0 Z AC에 저장된 데이터 = 0

 

아래 표는 분기 필드의 코드 지정 예시이다.

코드 기호 설명
00 JMP 만약 조건 = 1이면, CAR <- ADF
만약 조건 = 0이면, CAR <- CAR + 1
01 CALL 만약 조건 = 1이면, SBR <- CAR + 1, CAR <- ADF
만약 조건 = 0이면, CAR <- CAR + 1
10 RET CAR <- SBR (서브루틴으로의 복귀)
11 MAP CAR(1) <- 1, CAR(2 - 5) <- IR(op), CAR(6, 7) <- 0

 

 

🎯 4. 마이크로프로그래밍


앞에서 설명한 마이크로명령어 형식을 이용하여 몇 가지 루틴들을 작성해보자.'

 

📌 4 - 1. 인출 사이클 루틴

인출 사이클의 마이크로명령어 루틴은 아래와 같다.

단, 위에서 봤던 제어 기억장치에서 이 루틴이 0번지부터 저장된다고 가정했으므로, ORG 0으로 그 위치를 표기하였다.

  ORG 0  
FETCH PCTAR U JMP NEXT MAR <- PC
다음 마이크로명령어 실행
  READ, INCPC U JMP NEXT MBR <- M[MAR]
PC = PC + 1
다음 마이크로명령어 실행
  BRTIR U MAP IR <- MBR
해당 실행
사이클 루틴으로 분기

즉, 이 루틴은 세 개의 마이크로명령어들로 구성되고, 마지막 단계에서는 사상을 이용하여 CAR에 실행 사이클 루틴의 시작 주소를 적재함으로써 다음 사이클에서 해당 실행 루틴으로 분기가 일어나게 한다.

 

이러한 루틴의 각 마이크로 명령어를 2진 비트 패턴으로 변환하면 아래와 같다.

(u-ops : 두 개의 마이크로-연산들, CD : 조건 필드, BR : 분기 필드, ADF : 주소 필드)

 

 

📌 4 - 2. 간접 사이클 루틴

일반적으로 간접 사이클 루틴은 인출 사이클 루틴의 다음 위치인 4번지부터 저장된다 (ORG 4)

  ORG 4  
(CALL) INDRT IRTAR U JMP NEXT MAR <- IR(addr)
다음 마이크로 명령어 실행
  READ U JMP NEXT MBR <- M[MAR]
다음 마이크로 명령어 실행
  BRTIR U RET IR(addr) <- MBR
실행 사이클 루틴으로 복귀

IR에 저장되어 있는 명령어의 주소 필드가 가리키는 기억장치 위치로부터 실제 주소를 인출하여 다시 IR의 주소 필드에 적재하는 것이다. 이 루틴의 마지막 마아크로 명령어가 실행된 다음에는 이 간접 사이클을 호출하였던 실행 사이클 루틴으로 복귀해야 한다. 이 복귀(RET)는 SBR에 저장되어 있던 원래의 제어 기억장치 주소를 CAR로 적재함으로써 수행된다.

 

이러한 루틴의 각 마이크로 명령어를 2진 비트 패턴으로 변환하면 아래와 같다.

 

 

📌 4 - 3. 실행 사이클 루틴

명령어 해독(사상)을 이용하여 각 명령어에 대한 실행 사이클 루틴의 시작 주소를 결정, 각 명령어 실행을 위한 루틴을 작성

아래는 각 연산 코드에 대한 사상의 결과이다.

 

각 루틴의 시작 주소는 아래와 같은 형식으로 구성되어있다.

제어 기억 장치의 용량이 128 단어일 때 실행 사이클 루틴들은 63 번지 부터 저장되어 있기 때문에 첫 비트가 1이고, 연산 코드가 들어가며 마지막 00 두 비트는 각 실행 사이클들이 4 단어 크기로 구성되어있기 때문에 다음 사이클의 주소를 나타내기 위해 00을 넣는다.

 

제어 기억 장치의 용량이 256 단어로 늘어나게 되면, 뒤에 0이 하나 더 붙어서 000이 된다.

1 연산 코드 00

 

아래는 각 명령어의 실행 사이클 루틴들이다.

 

🎯 5. 마이크로프로그램의 순서제어


 

 

제어 유니트가 명령어의 실행을 제어한다는 것은 제어 기억장치에 저장된 해당 마이크로명령어들을 순서대로 인출하는 동작이라고 할 수 있다.

따라서 아래 그림에서 제어 기억장치를 제외한 상단의 모듈들은 다음에 실행할 마이크로명령어의 주소를 결정하는 회로들이며, 그 기능을 순서제어라고 부른다.

 

순서제어 : 다음에 실행할 마이크로명령어의 주소 결정

 

CAR의 초기값 = 0

  • 인출 사이클 루틴의 첫 번째 마이크로명령어의 주소

MUX 1 : 다음에 실행할 마이크로명령어의 주소 선택

MUX 2 : 조건 플래그를 선택하여 주소선택 회로로 전송

  • MUX : 여러 개의 신호를 받아 단일 회선으로 보내거나, 단일 회선의 신호를 다시 본래의 신호로 분리하는 기능을 수행

 

아래 그림은 주소 선택 회로의 입력 및 출력 신호들이다.

 

  • BR = 00 (JUMP) 혹은 01 (CALL)일 때
    • C = 0, 다음 위치의 마이크로명령어 선택
    • C = 1, 주소 필드(ADF)가 지정하는 위치로 점프(JUMP) 혹은 호출(CALL) (단, 호출시에는 CAR 내용을 SBR에 저장)
  • BR = 10 (RET)일 때,
    • SBR의 내용을 CAR로 적재 : 복귀
  • BR = 11 (MAP)일 때,
    • 사상 결과를 CAR에 적재

제어 신호 생성

마이크로명령어 내 연산 필드의 비트들

  • 제어 유니트의 외부로 출력
  • 각각 제어 신호로 사용

수직적 마이크로프로그래밍

  • 마이크로명령어의 연산 필드에 적은 수의 코드화된 비트들을 포함시키고, 해독기를 이용하여 그 비트들을 필요한 수 만큼의 제어 신호들로 확장하는 방식
  • 장점 : 마이크로명령어의 길이(비트 수) 최소화 -> 제어 기억장치 용량 감소
  • 단점 : 해독 동작에 걸리는 만큼의 지연 시간 발생

아래 그림은 수직적 마이크로프로그래밍에서의 제어 신호 발생 방법을 나타내는 그림이다.

 

수평적 마이크로 프로그래밍

  • 연산 필드의 각 비트와 제어 신호를 1 : 1로 대응시키는 방식
  • 필요한 제어 신호 수만큼의 비트들로 이루어진 연산 필드 비트들이 마이크로명령어에 포함되어야 함
  • 장점 : 하드웨어가 간단하고, 해독에 따른 지연 시간이 없음
  • 단점 : 마이크로명령어의 비트 수가 길어지기 때문에 제어 기억 장치의 용량이 증가
728x90