[컴퓨터구조론] 마이크로-프로그램

2024. 5. 12. 22:46CS/Computer Architecture

1. 제어 유니트의 기능

 

명령어들을 인출하여 해독하고 실행하는 과정이 순차적으로 발생되도록 하기 위해서 그 순간마다 적절한 제어 신호들이 생성되어 해당 하드웨어 모듈로 보 내져야 한다.

 

Control Unit. (a.k.a CU)는 …

  • 컴퓨터 프로그램을 구성하고 있는 명령어들을 해독하고,
  • 그 결과에 따라 명령어 실행에 필요한 동작들을 수행시키기 위한 제어 신호들을 발생하는 장치이다.

 

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

 


가. 마이크로프로그램

 

각 사이클에서는 여러 개의 마이크로-연산들이 수행된다.

 

CPU 클록 주기마다 서로 다른 마이크로-연산이 수행된다.

 

각 마이크로-연산이 실제 수행되기 위해서는 2진 비트들로 표현되어야 한다.

 

비트들로 이루어진 각 단어를 마이크로명령어(microinstruction) 혹은 제어 단어(control word)라고 한다.

 

그리고 이런 마이크로명령어의 집합을 마이크로프로그램(microprogram)이라고 한다.

 

앞서 CU를 하드웨어로 구현하는 방식으로 HardWired Control을 배운 적 있다. mircoprogram은 CU를 소프트웨어로 구현하는 방식이라 할 수 있다.

 

마이크로명령어들은 명령어 인출과 같은 CPU의 특정 기능을 위하여 그룹 단위로 작성되는데, 이러한 각 그룹을 루틴(routine)이라고 부른다.

 

(마이크로명령어 → 루틴 → 마이크로프로그램)

사실상 컴퓨터 동작의 시작점.

 


2. 제어 유니트의 구조

 

 

구성 요소 설명
명령어 해독기 (Instruction Decoder) 명령어 레지스터(IR)로부터 들어오는 명령어의 Opcode를 해독하여 루틴의 시작 주소를 결정한다.
제어 주소 레지스터 (Control Address Register, CAR) 다음에 실행할 마이크로명령어의 주소를 저장하는 레지스터. 이 주소는 제어 기억장치의 특정 위치를 가리킨다.
제어 기억장치 (Control Memory) 마이크로명령어들로 이루어진 마이크로프로그램을 저장하는 내부 기억장치. 주로 ROM을 사용한다.
제어 버퍼 레지스터 (Control Buffer Register, CBR) 제어 기억장치로부터 읽은 마이크로명령어를 일시적으로 저장하는 레지스터.
서브루틴 레지스터(subroutine register, SBR) 마이크로프로그램에서 서브루틴이 호출되는 경우에 현재의 CAR 내용의 일시직으로 저장하는 레지스터.
순서제어 모듈(sequencing module) 마이크로명령어의 실행 순서를 결정하는 회로들의 집합.

 

CPU의 명령어 세트를 설계한다는 것은

  1. 필요한 명령어의 종류를 파악
  2. 명령어 비트 패턴을 정의
  3. 명령어들의 실행에 필요한 하드웨어를 설계
  4. 명령어를 위한 실행 사이클 루틴을 마이크로프로그래밍 한다는 것

 


가. 제어 기억장치의 내부 구성

 

해당 예시에서는 하나의 루틴은 4개의 마이크로 명령어로 구성되고, 하나의 마이크로 명령어는 2개의 마이크로 연산으로 구성된다.

 

예시로 용량이 128 단어인 제어 기억장치를 살펴보자.

  • 0 ~ 63 : 공통 루틴(인출, 인터럽트 사이클)을 위한 마이크로프로그램 루틴들을 저장.
  • 64 ~ 127 : 각 명령어를 위한 실행 사이클 루틴들 저장.

 

128는 2^7이고 이는 곧 제어 기억장치의 주소값을 표현하기 위해서 7bit를 사용한다.

 

제어 기억장치의 주소값으로 사용될 7 bit는 어디서 생성되는 걸까?

 

인출 사이클(0번째)의 결과로 IR에 명령어를 적재한다.

 

이후 실행 사이클의 주소값(7bit)을 결정하기 위해서 사상(= 매핑)을 이용한다.

  • 1 bit : 실행 사이클의 루틴은 64부터 시작한다.
  • 4 bit : Opcode 부분 4bit는 제어 유니트의 명령어 해독기로 들어온다.
  • 2 bit : 하나의 Opcode(= 명령어)(= 루틴) 당 4줄을 할당.

 

결국 컴퓨터에서 명령어를 처리한다는 것은 실행 사이클 동안에 제어 기억장치에 저장된 해당 루틴을 실행한다는 것.

 


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

길이가 17 bit인 마이크로명령어를 예시로 사용한다.

 

  • 연산 필드 : 해당 예시에선 연산 필드가 2개다. 같은 줄에 있는 연산 필드는 동시에 수행한다.
  • 조건 필드 : 분기에 사용될 조건 플래그를 지정.
  • 분기 필드 : 분기의 종류, 다음에 실행할 마이크로명령어의 주소를 결정하는 방식 결정.
  • 주소 필드 : 마이크로명령어의 주소를 저장

 

 

하나의 마이크로명령어에는 다수의 연산 필드가 존재할 수 있다.

 

그런 경우 각 필드에 올 수 있는 마이크로연산들은 정해져 있다.

 

같은 위치에 올 수 있는 마이크로연산 간에는 간섭이 발생하기 때문에 동시에 처리할 수 없다.

 

반면 다른 위치에 오는 마이크로연산 간에는 독립적이라 동시에 처리할 수 있다.

 

분기 코드

 

 

조건 필드는 다음에 위치한 분기 필드를 위한 조건을 나타낸다

  • 00
    • 현재의 마이크로명령어의 실행이 완료된 다음 무조건 분기(unconditional branch)한다는 것을 의미.
    • 분기될 목적 지 마이크로명령어 주소는 이 형식의 마지막에 있는 주소 필드의 값이 된다. 즉, 주소 필드의 내용이 CAR로 적재된다.
  • 01
    • I 비트(간접 주소지정 방식)의 값에 따라 분기 여부가 결정된다.
    • 만약 I 비트가 '1'이라면. 간접 사이클 루틴을 도출하여 기억장치로부터 오퍼랜드의 유효 주소를 인출한다.
  • 10 혹은 11
    • 각각 조건 플래그인 S(부호) 혹은 Z(영) 플래그의 값이 1이면 분기.
    • 이 과정을 위한 하드웨어는 뒤에서 설명.

 


4. 마이크로프로그래밍

 

가. 인출 사이클 루틴

 

인출 사이클 루틴이 0번지부터 저장된다고 가정한다.

 

 


나. 간접 사이클 루틴

 

어떤 명령어가 간접 주소지정 방식을 사용하는 경우 실행 사이클의 시작 부분에서 간접 사이클 루틴을 호출한다.

 

기억장치로부터 실제 오퍼랜드 주소를 읽어와야 한다.

 

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

 


다. 실행 사이클 루틴

 

  • 각 연산 코드에 대한 사상의 결과

 


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

 

 

  • MUX1은 S0과 S1 신호를 참고하여 0~3까지 4가지 주소 중 하나를 선택한다.
  • 주소 선택 회로의 동작:
  • BR = 00 (JUMP) 혹은 01 (CALL)일 때,
    • C = 0, 다음 위치의 마이크로명령어 선택
    • C = 1, 주소 필드(ADF)가 지정하는 위치로 점프(jump) 혹은 호출(call)
      (단, 호출 시에는 CAR 내용을 SBR에 저장)
  • BR = 10 (RET)일 때는 SBR 내용을 CAR로 적재 : 복귀
  • BR = 11 (MAP)일 때는 사상 결과를 CAR에 적재

 


가. 제어 신호의 생성

 

연산 필드의 비트들이 바로 제어 신호로 사용된다!

 

 

마이크로프로그래밍 종류 설명 장점 단점
수직적 마이크로프로그래밍(Vertical microprogramming) 마이크로명령어의 연산 필드에 적은 수의 코드화된 비트들(encoded bits)을 포함시키고, 해독기를 이용하여 그 비트들을 필요한 수 만큼의 제어 신호들로 확장하는 방식입니다. 마이크로명령어의 길이(비트 수)가 최소화되어 제어 기억장치 용량이 감소합니다. 해독 동작에 걸리는 만큼의 지연 시간이 발생합니다.
수평적 마이크로프로그래밍(Horizontal microprogramming) 연산 필드의 각 비트와 제어 신호를 1:1로 대응시키는 방식입니다. 필요한 제어 신호 수만큼의 비트들로 이루어진 연산필드 비트들이 마이크로명령어에 포함되어야 합니다. 하드웨어가 간단하고, 해독에 따른 지연 시간이 없습니다. 마이크로명령어의 비트 수가 길어져서 제어 기억장치의 용량이 증가합니다.

 

 

종류 수직적 마이크로프로그래밍(Vertical microprogramming)  수평적 마이크로프로그래밍(Horizontal microprogramming)
설명 마이크로명령어의 연산 필드에 적은 수의 코드화된 비트들(encoded bits)을 포함시키고, 해독기를 이용하여 그 비트들을 필요한 수 만큼의 제어 신호들로 확장하는 방식입니다. 연산 필드의 각 비트와 제어 신호를 1:1로 대응시키는 방식입니다. 필요한 제어 신호 수만큼의 비트들로 이루어진 연산필드 비트들이 마이크로명령어에 포함되어야 합니다.
장점 마이크로명령어의 길이(비트 수)가 최소화되어 제어 기억장치 용량이 감소합니다. 하드웨어가 간단하고, 해독에 따른 지연 시간이 없습니다.
단점 해독 동작에 걸리는 만큼의 지연 시간이 발생합니다. 마이크로명령어의 비트 수가 길어져서 제어 기억장치의 용량이 증가합니다.