04장 제어 유니트

Jun-hee Cho·2022년 12월 30일
0

Computer Architecture

목록 보기
5/9

4.1 제어 유니트의 기능

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

마이크로-연산 : 명령어 실행 사이클의 각 주기 동안 수행되는 기본적인 CPU 동작

마이크로명령어 : 각 마이크로-연산을 나타내는 2진 비트 표현으로서, 제어 단어라고도 함
마이크로 프로그램 : 마이크로명령어들의 집합
루틴 : CPU의 특정 기능을 수행하기 위한 마이크로프로그램

4.2 제어 유니트의 구조

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

CPU의 명령어 세트 설계
(1) 명령어들의 종류와 비트 패턴을 정의
(2) 그 명령어들의 실행에 필요한 하드웨어를 설계
(3) 각 명령어를 위한 실행 사이클 루틴을 마이크로프로그래밍

루틴들의 길이와 제어 기억장치에 저장되는 위치는 CPU마다 다름

인출 사이클 동안에 명령어 레지스터로 적재된 명령어 비트들 중에서 연산 코드 부분은 제어 유니트의 명령어 해독기로 들어옴. 이 연산 코드가 지정하는 연산은 실행 사이클 동안에 제어 기억장치에 저장된 해당 루틴을 실행함으로써 수행됨. 따라서 명령어 해독기는 연산 코드를 이용하여 제어 기억장치 내 해당 실행 사이클 루틴의 시작 주소를 찾아야 함(이 과정을 '명령어를 해독한다'라고 말함). 그 방법에는 몇 가지가 있으나, 여기서는 사상을 이용하는 방식에 대해 설명함.

사상 방식에서는 명령어의 연산 코드를 특정 비트 패턴과 혼합시킴으로써 그 연산의 수행에 필요한 실행 사이클 루틴의 시작 주소를 찾아냄. 그림과 같이, 실행 사이클 루틴들이 제어 기억장치의 64번지로부터 저장되어 있고, 각 루틴은 최대 네 개씩의 마이크로명령어들로 구성된다고 가정. 만약 16-비트 길이의 명령어가 4비트의 연산 코드, 1비트의 간접 주소 지정(I) 비트 및 11비트의 주소로 구성되어 있다면, 사상 과정은 아래의 그림과 같아짐.

사상 함수의 최상위 비트가 '1'이므로, 사상에 의해 결정되는 주소가 64번지부터 시작할 수 있게 됨. 예를 들어, LOAD 명령어의 연산 코드가 '0001'이라면, 그림의 사상 함수에 의하여 이 연산을 위한 실행 사이클 루틴의 시작 주소는 '1000100', 즉 64 + 4 = 68번지로 결정됨. 따라서 그 주소가 CAR로 입력되며, 명령어 실행 사이클이 시작되면 그 위치부터 마이크로명령어들을 순차적으로 인출하여 수행하게 됨.

4.3 마이크로명령어의 형식


마이크로명령어는 길이가 17비트이고, 상단에 표시된 수만큼의 비트들로 이루어지는 다섯 개의 필드들로 구성됨. 이 경우에는 연산 필드가 두 개이므로 두 개의 마이크로-연산들이 동시에 수행될 수 있음. 조건 필드는 분기에 사용될 조건 플래그들을 지정. 분기 필드는 분기의 종류와 다음에 실행할 마이크로명령어의 주소를 결정하는 방법을 명시. 마지막으로, 주소 필드는 분기가 발생하는 경우를 위하여 목적지 마이크로명령어의 주소를 가지고 있음.

(a) 연산 필드1에 위치할 마이크로-연산들

(b) 연산 필드2에 위치할 마이크로-연산들

조건 필드의 코드 지정

조건 필드 : 두 비트로 구성되며, 분기의 조건을 ㅗ사용
U : 무조건 분기
I : 만약 I = 1이면, 간접 사이클 루틴을 호출
S : 누산기에 저장된 데이터의 부호가 1이면, 분기
Z : 누산기에 저장된 데이터 0이라면, 분기

분기 필드의 코드 지정

분기 필드 : 두 비트로 구성되며, 분기의 유형을 지정
• 조건 필드의 조건이 만족되면, ADF 필드의 내용을 CAR로 적재
-> 그 주소로 분기 (JUMP 혹은 CALL)
• RET : 서브루틴으로부터 복귀(SBR에 저장된 내용을 CAR로 적재)
• MAP : 사상 방식에 의하여 분기 목적지 주소 결정

4.4 마이크로프로그래밍

4.4.1 인출 사이클 루팅


이 루틴은 세 개의 마이크로명령어들로 구성됨. 두 번째 마이크로명령어에서는 두 개의 마이크로-연산들이 동시에 수행되는 것에 유의해야함. 그리고 마지막 단계에서는 사상을 이용하여 CAR에 실행 사이클 루틴의 시작 주소를 적재함으로써 다음 사이클에서 해당 실행 루틴으로 분기가 일어나게 함. 이러한 루틴의 각 마이크로 명령어를 이용하여 2진 비트 패턴으로 변환하면 아래와 같아짐.

여기서 주소는 각 마이크로명령어가 저장될 제어 기억장치내의 주소를 가리킴. 그리고 μ-ops 부분은 두 개의 마이크로-연산들을 가리키고, CD는 조건 필드, BR은 분기 필드, 그리고 ADF는 주소 필드에 각각 대응됨. 마지막 마이크로명령어의 ADF는 사용되지 않으므로 모든 비트들을 0으로 세트함.

4.4.2 간접 사이클 루틴


IR에 저장되어 있는 명령어의 주소 필드가 가리키는 기억장치 위치로부터 실제 주소를 인출하여 다시 IR의 주소 필드에 적재하는 것임. 이 루틴의 마지막 마이크로명령어가 실행된 다음에는 이 간접 사이클을 호출하였던 실행 사이클 루틴으로 복귀해야 함. 이 복귀는 SBR에 저장되어 있던 원래의 제어 기억장치 주소를 CAR로 적재함으로써 수행됨. 이 루틴의 마이크로명령어들을 2진 비트 패턴으로 변환하면 다음과 같아짐.

4.4.3 실행 사이클 루틴

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

첫 번째 명령어인 NOP은 아무런 연산도 수행하지 않고 PC만 1을 증가시키는 명령어이지만, 특정 목적을 위하여 거의 모든 CPU들의 명령어 세트에 포함되어 있음. 위의 명령어들에 대한 실행 사이클 루틴들을 작성하면 밑의 그림과 같아짐. 단, 이 명령어들에 대한 마이크로-연산들은 2.2절에서 설명한 내용에 근거하고 있음. 이 루틴들의 마지막 마이크로명령어에서는 그 다음에 인출 사이클 루틴으로 점프되도록 지정함으로써, 각 실행 사이클 루틴의 수행이 종료된 다음에는 인출 사이클부터 다시 시작되도록 함.

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


제어 기억장치를 제외한 상단의 모듈들은 다음에 실행할 마이크로명령어의 주소를 결정하는 회로들이며, 그 기능을 순서제어라고 부름. 이 회로에서의 핵심 요소는 다음에 인출할 마이크로명령어의 제어 기억장치 주소를 가지고 있는 CAR임. CPU가 처음 동작을 시작하는 순간에는 CAR이 '0'으로 세트되어, 제어 기억장치 0번지에 있는 인출 사이클 루틴의 첫 번재 마이크로명령어를 인출하면서 마이크로프로그램의 실행이 시작됨.

제어 기억장치로부터 출력된 그 마이크로명령어의 비트들 중에 CD 필드의 두 비트들은 MUX2로 보내져서 네 개의 조건 비트들 중의 하나를 선택하게 됨. 결과적으로 네 가지 조건값들 중의 하나가 MUX2의 출력이 되는 것임. 그 출력은 상단의 주소 선택 회로의 한 입력(C)로 들어감. 주소 선택 회로의 다른 두 입력들로는 BR 필드의 두 비트들이 들어감. 그 세 입력들이 조합되면 MUX1의 선택 신호들과 SBR의 적재(L) 신호가 생성되며, 그에 따라 다음 주소들이 결정되어 CAR로 적재됨.

BR 필드가 '00' 혹은 '01'을 가리킬 때, 조건이 만족되지 않으면 CAR의 내용이 1 증가하여, 다음에 위치한 마이크로명령어를 실행하게 됨. 그러나 조건이 만족된 경우에는 목적지 주소인 주소 필드값이 CAR로 적재됨. 그리고 CALL의 경우에는 적재 동작이 수행되기 전에 현재의 CAR 내용을 SBR에 저장함. 이 동작은 제어 신호 L에 의해 이루어짐. BR 필드가 '10'을 가리키는 경우에는 SBR에 저장되어 있던 주소가 다시 CAR로 복구됨. 마지막으로, BR 필드가 '11'인 경우에는 사상 함수에 의하여 결정된 주소가 CAR로 적재되어 해당 실행 사이클 루틴으로 분기하게 됨.

제어 기억장치로부터 읽혀진 마이크로명령어의 최상위 비트들인 마이크로-연산 비트들은 제어 유니트의 외부로 나가서 제어 신호들이 됨. 그런데 이 비트들이 각각 하나의 제어 신호로 사용된다면, 이 예의 경우에는 연산 필드들이 각각 3비트씩이므로 모두 6개의 제어 신호들만 발생할 수 있음.

수직적 마이크로명령어로부터 제어 신호들을 발생하는 방법

만약 각 마이크로-연산을 수행하는데 더 많은 제어 신호들이 필요하다면, 그 비트들을 그림과 같이 해독기들을 통과시킴으로써 그 수를 확대 시킬 수 있음. 이 그림에서는 각 연산 필드의 세 비트를 3x8 해독기를 통과시켜 8비트로 변환함으로써 모두 16개의 제어 신호들을 발생시키고 있음.

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

수평적 마이크로프로그래밍 : 마이크로명령어의 연산 필드에 필요한 제어신호 수만큼의 비트들을 포함시키고, 각 비트를 제어신호로 직접 사용하는 마이크로프로그래밍 방식
장점 : 하드웨어가 간단하고, 해독에 따른 지연 시간이 없음
단점 : 마이크로명령어의 비트 수가 길어지기 때문에 제어 기억장치의 용량이 증가

profile
최고가 되기 위해 최선을...

0개의 댓글