7. 마이크로 프로그램된 제어
7.2 주소 시퀀싱
- 마이크로 명령어
- 하나의 루틴내에서 연속적인 마이크로 명령을 수행하도록 한다.
- 다른 루틴으로 분기할 수도 있다.
- 초기 동작
- 전원이 켜지면 초기 주소가 제어 주소 레지스터에 저장
- 이 초기주소는 fetch루틴의 처음을 수행하는 마이크로 명령어가 기억된 제어 메모리의 주소이다.
- 제어주소 레지스터의 값을 하나씩 증가시켜 fetch루틴을 끝내고난 다음에 명령어는 명령어 레지스터에 저장된다.
- 유효 주소를 계산하는 루틴(진짜 주소 찾기)
- fetch된 명령어(opcode)을 수행하는 일련의 마이크로 연산 수행
- 제어 주소 레지스터를 하나 증가시킴 (CAR + 1, 순차적인 시퀀싱)
- 무조건 분기와 상태 비트 조건에 따른 조건부 분기
- 명령어의 비트들로부터 제어 메모리의 주소를 매핑하는 처리
- 서브루틴을 호출하고(call), 복귀하는(return) 기능
- 주소 시퀀싱을 위한 구성도
제어 메모리에 대한 주소의 선택
- 여기서는 제어주소 레지스터에 주소가 입력되는 4가지 방법을 설명
- 인크리먼트는 제어주소 레지스터의 값을 하나씩 증가시켜 순차적 수행이 이루어지도록 한다.
- 분기는 마이크로 명령어의 한 필드에서 지정된 분기주소에 의해 이루어진다.
- 조건부 분기는 마이크로 명령어의 일부를 참조하여 분기조건을 결정하기 위한 상태비트를 선택한다.
- 외부주소는 매핑 논리회로를 통하여 제어메모리로 전송한다.
- 서브루틴의 복귀주소는 서브루틴 레지스터에 저장한다.
조건부 분기
- <제어 메모리에 대한 주소의 선택>의 분기논리
- 상태비트가 가지는 정보에 따라 선택적인 분기 동작을 하게 되어 제어장치는 판단능력을 가지게 된다.
- 특정 상태를 테스트하고 조건에 맞다면 주어진 주소로 분기, 그렇지 않다면 바로 다음의 마이크로 명령어 수행
- 멀티플렉서를 이용하여 설계
- 8개의 상태비트가 있다고 가정, 마이크로 명령어 중 3비트가 이 8개의 상태 비트 중 하나를 선태
- 선택된 상태비트가 1이면 멀티플렉서의 출력이 1이 되어 지정된 주소를 CAR로 로드
- 0이면 멀티플렉서의 출력이 0이 되어 CAR을 인크리먼트
- 이 경우 마이크로 프로그램은 상태비트 값에 따라 둘 중 하나의 경로를 따라 진행
- 분기하는 주소를 결정하기 위해서는 명령어의 Op-코드 부분(명령어의 연산부, 마이크로 명령어)이 사용된다.
명령어 코드로부터 제어 메모리 주소로의 매핑
위 그림과 같이 4비트의 Op-코드를 가진 명령어가 있고, 또 워드의 제어 메모리가 있다고 가정.
- 4비트의 Op-코드를 이용하여 매핑
- 각 매리크로 연산을 위한 루틴으로 분기하려면 7개의 주소를 나타내는 주소비트가 필요
- 4비트의 Op-코드를 7비트의 주소로 매핑하는 작업(위 그림)
- 가장 오른쪽 2비트와 가장 왼쪽 1비트를 0으로 하여 7비트의 주소비트 구성
- 한 개의 매크로 연산은 4개의 마이크로 명령어를 가질 수 있게 된다.
- 루틴이 4개 이상의 마이크로 명령어를 필요로 하면 1000000에서 1111111 까지의 주소를 이용할 수 있다.
- 메모리 매핑은 programmable logic device(PLD)라 불리는 직접 회로 방식으로 흔히 실현
서브루틴
- 마이크로 프로그램이 동일한 코드 모임을 가질 때 이 부분을 서브루틴화함으로써 제어 메모리를 절약
- 예를 들어 피연산자의 유효 주소를 계산하는 것은 메모리 참조 명령어 모두가 가지는 것이므로 서브루틴으로 만드는 것이 편리하다.
- 리턴 주소는 SBR에 기억시켜 두고 서브루틴으로 분기
- 컴퓨터 프로그램에서 어떤 일을 담당하는 하나의 정리된 일. http://terms.naver.com/entry.nhn?docId=835962&cid=42344&categoryId=42344 [본문으로]
- 명령어가 간접 주소나 인덱스 주소 등 다양한 주소 지정 모드를 구별하기 위해 가지는 비트 [본문으로]
- 반복적으로 수행되어지는 연산 [본문으로]
- 루틴은 메인 루틴(main routine)과 서브루틴(subroutine)으로 구분하고 있다. 메인 루틴이란 프로그램의 주요한 부분이며, 전체의 개략적인 동작 절차를 표시하도록 만들어진다. 이 대강의 정도는 서브루틴의 작업 정도에 의해 정해진다. 결국, 메인 루틴에서는 몇 가지의 서브루틴을 호출하고, 서브루틴에 의해서 프로그램의 세세한 실행을 행한다. 서브루틴이란 프로그램의 일부를 담당하는 부분 프로그램이며, 메인 프로그램으로부터 호출되어 실행된다. [네이버 지식백과] 루틴 [routine] (컴퓨터인터넷IT용어대사전, 2011.1.20, 일진사) [본문으로]
- 프로그램의 그때까지의 조건과 상태에 무관하게 그 제어를 다른 부분으로 옮기는 명령. [본문으로]
'COMPUTER SYSTEM ARCHITECTURE' 카테고리의 다른 글
fetch (0) | 2014.10.11 |
---|---|
마이크로 프로그램의 예 (0) | 2014.10.11 |
제어 메모리(Control Memory) (0) | 2014.10.07 |
부울 대수 (0) | 2014.09.28 |
논리 게이트 (0) | 2014.09.28 |