안녕하세요. IT 엘도라도 에 오신 것을 환영합니다.
글을 쓰는 것은 귀찮지만 다시 찾아보는 것은 더 귀찮습니다.
완전한 나만의 것으로 만들기 위해 지식을 차곡차곡 저장해 보아요.   포스팅 둘러보기 ▼

컴퓨터 구조 (Architecture)/컴퓨터의 개념 및 실습

[Chapter 3] Digital Logic Structures - CPU를 구성하는 기본 부품들

피그브라더 2020. 1. 24. 00:46

[Chapter 0] Introduction 게시물에서 이미 언급했지만, 우리가 사용하는 컴퓨터의 CPU는 작은 부품들이 조립되고 또 조립된 결과로 만들어진다. 이러한 맥락에서 조립을 위한 가장 작은 단위의 부품으로 MOS 트랜지스터를 소개하였고, 더 나아가 이를 조립하여 만들어낸 게이트들까지 한 차례 설명을 마친 바 있다. 여기서는 앞서 설명했던 트랜지스터와 게이트에 대해 다시 한번 간략하게 정리를 한 뒤, 이어서 그것들을 조립하여 만들어낼 수 있는 두 종류의 논리 회로를 설명할 것이다. 하나는 Combinational Logic Circuit이고, 나머지 하나는 Sequential Logic Circuit이다.

 

※ 최초의 PC와 ISA와 관련한 썰. 관심 있는 분만 클릭하여 읽어보시기를.

더보기

IBM PC가 MS-DOS 운영체제를 만들기 위한 ISA로서 인텔의 ISA를 처음 채택하게 되면서, 인텔의 CPU가 지금과 같이 가장 유명해지게 되었다. 성능 면에서는 인텔의 ISA보다 훨씬 좋은 ISA가 있었지만(가령 에너지 효율은 ARM의 ISA가 인텔의 x86 ISA보다 좋다고 알려져 있음), 이제 와서 갑자기 ISA를 바꿔버리면 여태까지 사용해 오던 모든 프로그램들을 새로 짜야 한다는 문제가 있었기 때문에 인텔의 ISA가 지금까지도 많이 사용되었다고 한다.

 

1. MOS 트랜지스터와 게이트

N 타입 반도체와 P 타입 반도체로 이뤄진 MOS 트랜지스터는 여러 종류의 게이트를 만들어 내고, 여러 종류의 게이트들은 다시 특정 기능을 수행하는 논리 회로(Adder, Multiplexer, Decoder, Register 등)들을 만들어 낼 수 있다. 마지막으로, 이러한 여러 종류의 논리 회로들은 0과 1로 이루어진 기계어를 읽고 특정 명령을 수행할 수 있는 마이크로프로세서(CPU)를 만들어 내는 데 사용된다. 따라서 마이크로프로세서의 구성과 동작 원리를 이해하기 위해서는 밑바닥을 이루는 MOS 트랜지스터와 게이트에 대한 기본적인 이해가 선행되어야 할 것이다. 


1-1. MOS 트랜지스터의 동작 원리

[Chapter 0] 게시물에서 간단히 설명했듯이, MOS 트랜지스터는 스위치처럼 동작한다. 즉 Gate에 어떤 신호의 전압이 공급되냐에 따라서 전류가 흐르는지 여부가 결정되고 그것에 따라 출력 결과도 달라진다. N 타입 MOS 트랜지스터를 기준으로 설명하자면, Gate에 1의 신호에 해당하는 전압이 공급되면 Source와 Drain이 연결되어(Short Circuit) 전류가 흐르고 0의 신호가 출력된다. 반대로 Gate에 0의 신호에 해당하는 전압이 공급되면 Source와 Drain의 연결이 끊어지게 되어(Open Curcuit) 전류가 흐르지 못하는 상태가 된다. 단, 이러한 동작을 보장하기 위해서는 N 타입 MOS 트랜지스터가 그라운드(GND, 0V)에 연결되어 있어야 할 것이다(그 이유는 트랜지스터 자체의 물질적인 특성에 기인함). 반면 완전히 반대로 동작하는 P 타입 MOS 트랜지스터의 경우에는 2.9V(1의 신호에 해당하는 전압)에 연결되어 있어야 할 것이다. 정리하자면, N 타입 MOS 트랜지스터는 그라운드와 연결되어 있어 Gate에 1의 신호가 들어올 때 0의 신호를 출력하고, P 타입 MOS 트랜지스터는 2.9V와 연결되어 있어 Gate에 0의 신호가 들어올 때 1의 신호를 출력하는 스위치 역할을 수행한다.


1-2. 게이트

NOT, NOR, OR, NAND, AND는 특정 기능을 수행하는 논리 회로들을 만들어 내기 위해 꼭 필요한 기본적인 논리 함수(Logic Function)에 해당하는 게이트들이다. 이러한 논리 함수들을 MOS 트랜지스터를 이용하여 게이트로 구현하는 방법은 [Chapter 0] 게시물에서 이미 소개했기 때문에 여기서는 생략하도록 하겠다. 대신에 여기서는 그러한 게이트들을 각각 어떤 심볼로 표시하는지, 드모르간의 법칙이 게이트와 어떠한 연관을 맺고 있는지를 한 번 알아보도록 하자.

 

NOT, NOR, OR, NAND, AND 게이트는 아래 그림과 같이 표시한다. 참고로 입력은 2개가 아니라 3개 혹은 그 이상일 수도 있으며, 그러한 경우에는 입력이 2개짜리인 게이트들을 조립하여 구현하거나 조금 더 복잡한 하나의 트랜지스터 회로로 구현하게 된다.

 

 

한편 드모르간의 법칙은 게이트의 관점에서 볼 때 AND를 OR로, 또는 OR을 AND로 바꿀 수 있는 도구가 된다. 그림으로 한 번 이해해보자. 아래 그림은 (A'B')'를 나타내는 게이트이기 때문에 드모르간의 법칙에 따르면 A+B를 나타내는 게이트와 완전히 동일하다. 즉, 입력과 출력을 전부 반전시키고(NOT이 있으면 NOT을 제거해주고, NOT이 없으면 NOT을 붙여줌) 게이트 모양을 AND에서 OR로(또는 OR에서 AND로) 바꾸는 것이 곧 드모르간의 법칙인 것이다. 이러한 원리를 활용하여 AND와 OR을 서로 바꿀 수 있음을 기억해 두도록 하자.

 

 

2. 꼭 기억해야 할 두 종류의 논리 회로

서론에서 말했듯, MOS 트랜지스터로 만들어진 여러 종류의 게이트들은 다시 여러 종류의 논리 회로를 만드는 데 사용되며 그렇게 만들어지는 논리 회로들은 크게 Combinational Logic Circuit과 Sequential Logic Circuit으로 나뉜다. 각 회로에 대해 자세히 알아보기 전에, 먼저 각 회로가 어떠한 회로를 의미하는지부터 알아보도록 하자. 


2-1. Combinational Logic Circuit

논리 회로의 출력이 현재의 입력에만 의존하는 회로를 말한다. 즉 과거에 어떤 입력이 들어왔든지 간에, 오로지 현재 들어오는 입력에 의해서만 출력이 결정된다. 이러한 맥락에서 '상태'가 존재하지 않는다고 말하며, 현재 입력이 동일하다면 출력은 언제나 동일하게 된다. 가령 덧셈을 수행하는 논리 회로가 여기에 속한다.


2-2. Sequential Logic Circuit

논리 회로의 출력이 현재의 입력뿐만 아니라 과거의 입력에도 의존하는 회로를 말한다. 즉 과거에 들어온 입력을 기억할 수 있다. 이러한 맥락에서 '상태'가 존재한다고 말하며, 현재 입력이 동일하더라도 과거에 들어온 입력(상태)이 무엇이냐에 따라서 출력은 달라지게 된다. 가령 은행에서 대기표를 뽑는 기계는 앞에 몇 명이 대기표를 뽑았는지에 따라 현재 뽑는 대기표의 번호가 달라지기 때문에 여기에 속한다고 볼 수 있다. 가장 중요하고도 대표적인 SLC는 메모리와 같은 정보 저장 장치, 그리고 이후에 설명할 유한 상태 기계이다.

 

3. Combinational Logic Circuit (이하 CLC)

출력 값이 오직 현재의 입력에만 의존하는 CLC의 몇 가지 사례를 한 번 알아보고, 마지막에는 임의의 CLC를 짜기 위한 아주 기본적이면서 중요한 아이디어를 익혀보도록 하자.


3-1. Decoder

Decoder는 N개의 입력과 2^N개의 출력이 존재하는 회로로서, N개의 입력이 결정되면 2^N개의 출력 중에 단 하나만 1이 되고 나머지는 전부 0이 되는 회로이다. N개의 입력은 총 2^N개의 상태를 표현할 수 있다는 점을 기억하길 바란다.

 


3-2. Multiplexer(=Mux), Demultiplexer(=Demux)

Mux는 N개의 Selector, 2^N개의 입력, 그리고 1개의 출력이 존재하는 회로로서, N개의 Selector가 결정되면 2^N개의 입력 중 출력으로 나갈 입력이 결정되는 회로이다. 아래 그림이 나타내는 회로가 바로 Mux이다. 반면에 Demux는 N개의 Selector, 1개의 입력, 그리고 2^N개의 출력이 존재하는 회로로서, N개의 Selector가 결정되면 2^N개의 출력 중 입력이 나갈 출력이 결정된다. 결국 Mux는 입력을 선택하는 회로, Demux는 출력을 선택하는 회로인 것이다.

 

 

여기서 눈여겨볼 점이 있다. 바로 Demux와 Decoder가 아주 유사하게 생겼다는 것이다. 실제로 어떤 Decoder는 각 AND 게이트에 하나의 입력이 연결되어 있고 이를 Enable 신호라고 부르는데, Enable 신호를 1개의 입력으로 간주하고 N개의 입력을 N개의 Selector로 간주하면 Demux와 완전히 동일해진다. 즉 Enable 신호가 존재하는 Decoder는 곧 Demux인 것이다.


3-3. Full(Half) Adder → n-bit Adder

아래 그림은 1-bit 덧셈을 수행하는 Full Adder를 나타낸다. A와 B는 덧셈을 수행할 피연산자, Cin은 A와 B의 이전 자릿수에서 넘어온 값, Cout은 다음 자리로 넘어가는 숫자를 의미한다. 예를 들어 01과 11을 더하면 맨 오른쪽 자리의 값인 1과 1을 더함으로써 바로 왼쪽 자리에 1이라는 값이 넘어가게 된다. 이때 넘어가는 값 1이 오른쪽 자리에서는 Cout이 되고 왼쪽 자리에서는 Cin이 된다. 참고로 Half Adder는 Cin의 존재를 고려하지 않고(즉 입력으로 A와 B만 존재하고 Cin이 없는) 만든 1-bit 덧셈 회로를 일컫는다. 한편 그림 오른쪽에는 Full Adder를 나타내는 진리표(Truth Table)가 나타나 있는데, 잠시 뒤에 설명할 Logical Completeness의 아이디어를 익히면 해당 진리표만 보고도 왼쪽의 회로를 그릴 수 있다. 이에 대한 내용은 아래에서 자세히 설명하겠다.

 

 

1-bit Full Adder를 다음과 같이 연속적으로 연결하면 n-bit Adder를 구현할 수 있다. n-bit 덧셈 회로를 구현하는 여러 방법 중 가장 기초적인 구현 방법이다.

 


3-4. Logical Completeness (임의의 CLC 구현 방법)

Full Adder에서 잠깐 언급했듯이, 임의의 CLC를 구현하는 데 있어 가장 기초가 되는 핵심 아이디어이다. 모든 입력의 경우의 수에 대해 출력이 어떠한지를 나타내는 진리표(Truth Table)만 주어지면 그것을 나타내는 논리 회로를 NOT, AND, OR 게이트만으로 구현할 수 있다는 것이다. 방법은 간단하다. 우선 진리표를 작성하고, 출력이 1이 되게끔 하는 입력의 경우들을 찾고, 각 경우들을 AND 게이트로 표현한 뒤 그것들을 하나의 OR 게이트로 묶으면 된다.

 

아래 그림으로 이해해 보자. 출력(D)이 1이 되는 경우의 수는 010, 101 이렇게 두 가지이다. 그 경우의 수를 AND 게이트로 표현하면 아래 그림에 존재하는 두 개의 AND 게이트와 같이 된다. 왼쪽 AND 게이트가 010, 오른쪽 AND 게이트가 101에 대응한다. 이렇게 표현하면 왼쪽 AND 게이트는 입력이 010일 때만 1을 출력하게 되고, 오른쪽 AND 게이트는 입력이 101일 때만 1을 출력하게 된다. 이제 마지막으로 그 두 AND 게이트를 OR 게이트로 묶는다. 그러면 두 AND 게이트 중 최소 하나가 출력이 1이어야 OR 게이트의 출력이 1이 된다. 즉 입력이 010 또는 101일 때만 최종 출력이 1이 된다는 말이므로, 왼쪽 진리표를 올바르게 논리 회로로 구현했다고 볼 수 있다.

 

 

4. Sequential Logic Circuit (이하 SLC)

이번에는 출력 값이 현재의 입력뿐 아니라 과거의 입력에도 의존하는 SLC에 대해 알아보도록 하자. 반드시 기억하고 있어야 하는 두 가지 SLC가 있는데, 바로 메모리와 같은 정보 저장 장치(Storage)와 유한 상태 기계(Finite State Machine)이다. 우선 정보 저장 장치에 대해 알아본 다음, 이어서 유한 상태 기계가 어떻게 만들어지는지 공부해보도록 하자.


4-1. R-S Latch

1-bit를 저장하는 가장 간단한 형태의 정보 저장 장치이다. R은 Reset 신호를 나타내며, S는 Set 신호를 나타낸다. R=S=1이면 저장된 데이터가 그대로 유지되며, 이때를 quiescent 상태라고 부른다. quiescent 상태에서 R을 0으로 바꾸면 저장된 데이터가 0으로 Reset 되며, S를 0으로 바꾸면 저장된 데이터가 1로 Set 된다. 그렇게 값을 바꾼 뒤에는 다시 R=S=1로 설정해서 안정적인 quiescent 상태로 돌아간다. 참고로 R과 S를 둘 다 0으로 바꾸는 건 굉장히 위험하다. R=S=0이 된 상태에서 동시에 R=S=1로 다시 설정하면, 저장된 데이터가 1과 0 사이에서 계속 진동(Oscillate)하며 불안정한 상태에 돌입하기 때문이다.

 


4-2. Gated D Latch

사실 R과 S의 신호를 조작하여 데이터를 저장하는 것보다, 신호 하나(D)를 조작하여 데이터를 저장하는 것이 조금 더 직관적인 정보 저장 장치이다. 이를 위해 R-S Latch에 몇 개의 게이트를 더 붙여서 입력 신호를 하나로 줄인 정보 저장 장치가 바로 Gated D Latch이다. 또한 Gated D Latch는 아래 그림의 구조를 보면 알 수 있듯이 R과 S가 동시에 0이 될 수 없다. 결론적으로 Gated D Latch는 R-S Latch보다 직관적이면서 안정적인 한 단계 진보한 정보 저장 장치라고 볼 수 있다.

 

D는 저장하고자 하는 데이터를 입력하는 신호이며, WE는 Write Enable의 줄임말로서 WE=0이면 D의 값이 무엇이든 R과 S에 1이 입력되게 함으로써 현재의 데이터가 안정적으로 유지되도록 한다. 반면에 WE=1로 설정을 하면 D에 입력된 값이 out에 저장된다(쓰인다).

 


4-3. Register

Register는 CPU가 여러 종류의 연산을 수행하는 와중에 연산 중간 결과물을 임시로 저장해두는 CPU 내 정보 저장 장치이다. 실제로 연산 중간 결과물을 매번 메모리에 저장하고 읽어오면 연산 속도가 굉장히 느릴 수밖에 없다. 따라서 연산 중간 결과물을 메모리가 아닌 CPU 내 정보 저장 장치에 저장함으로써 연산 속도를 크게 향상시킬 수 있다. 바로 위에서 설명한 Gated D Latch를 n개 결합하면 다음과 같이 n-bit Register를 만들 수 있다. WE=1일 때만 D에 입력된 값들이 Q에 저장될 수 있음을 기억하자.

 


4-4. Memory

많은 사람들에게 익숙한 컴퓨터의 핵심 장치로, 흔히 RAM(Random Access Memory)이라고 부르는 정보 저장 장치이다. 메모리의 구조를 알아보기 전에, 메모리와 관련한 용어를 먼저 익혀두도록 하자. 다음과 같이 메모리가 생겼다고 할 때, 한 location은 한 줄의 데이터를 의미하는 것이며 그 한 줄의 비트 수를 Addressability라고 부른다. 그리고 location의 총개수를 Address Space라고 부른다. 만약 Addressability가 8비트인 메모리의 용량이 1GB라고 한다면, Address Space는 2^30이 되고 8비트(1바이트)로 구성된 location이 2^30개만큼 존재한다는 것이므로 총 2^33비트를 저장할 수 있는 메모리가 된다.

 

 

그러면 메모리의 구조는 어떠한지 한 번 알아보자. 참고로 여기서 설명하는 메모리의 구조는 '논리적' 구조이다. 즉 실제 메모리는 이것보다 적은 트랜지스터만을 사용하여 더욱 조밀하게 구현되지만, address decoder, word select, word WE 등을 사용하는 논리는 그대로 사용된다는 것을 의미한다. 그러면 이제 동작 원리를 한 번 살펴보자.

 

먼저 Addressability가 3비트이고 Address Space가 4이므로 총 12비트를 저장할 수 있는 메모리이며, Address Space만큼의 location을 표현하기 위해 주소 신호로 2비트가 입력된다는 것을 파악할 수 있다. address decoder는 주소 신호를 입력받아서 4개의 location 중 하나의 location만 선택하게 된다. 그렇게 선택된 location의 word select 신호는 1이 되고 나머지 location의 word select 신호는 0이 되므로 선택된 location에 저장된 데이터만 Q를 통해 읽히게 된다. 데이터를 쓰고 싶을 때는 데이터를 쓰고자 하는 location만 선택하도록 주소 신호를 입력해 주고 WE 신호도 1로 설정해줘야 한다. 그러면 해당 location의 word WE 신호가 1이 되어 D에 입력된 값이 해당 location에만 저장되게 된다.

 

 

데이터를 읽고 쓸 때 필요한 입력 신호는 다음과 같이 요약할 수 있다.

 

  데이터를 읽을 때 (READ) 데이터를 쓸 때 (WRITE)
필요 입력 신호 location 주소 location 주소 + WE + 데이터 값

4-5. 유한 상태 기계 (Finite State Machine, FSM)

4-5-1. 의미 및 구성

앞서 살펴본 것들은 특정 정보(상태)를 저장하기 위한 정보 저장 장치로서의 SLC이다. 그러면 이제 그러한 정보 저장 장치로서의 SLC에 CLC를 더해서 만든 또 다른 종류의 SLC를 알아보자. 바로 유한 상태 기계이다. 유한 상태 기계란 현재 입력과 현재 상태에 의해 출력과 다음 상태가 결정되는 회로로, 이름이 의미하듯 유한한 상태 범위 내에서 상태 전이를 하며 동작하는 회로를 일컫는다.

 

유한 상태 기계는 다음과 같은 구조를 가지고 있다. 현재 들어오는 입력과 정보 저장 장치에 저장되어 있는 현재 상태가 CLC에 입력되어 출력과 다음 상태를 결정짓는다. 다음 상태는 다시 정보 저장 장치에 저장이 됨으로써 현재 상태가 바뀌게 된다. 이런 방식으로 상태가 바뀌어 가면서(= 상태 전이가 발생하면서) 동작하는 회로가 바로 유한 상태 기계이다. 동일한 입력이 들어오더라도 현재 저장되어 있는 상태가 무엇이냐에 따라 출력이 달라지기 때문에 유한 상태 기계 또한 SLC로 분류된다.

 

 

그런데 여기서 한 가지 의문이 생길 수 있다. 위 그림의 구조대로라면 현재 입력과 현재 저장된 상태가 CLC에 입력되어 출력과 다음 상태가 결정되자마자, 곧바로 현재 상태가 바뀌어 다시 똑같은 과정이 반복될 것이다. 뭔가 이상하지 않은가? 거의 모든 과정이 동시에 일어나기 때문에 회로 내부적으로 꼬이기도 쉬울 것 같다. 만약 상태 전이가 일정한 시간 간격을 두고 발생하도록 할 수 있다면 회로가 훨씬 안정적이지 않을까? 이때 등장하는 것이 바로 '클락(Clock)'이라는 장치이다. 한 번 알아보도록 하자.

 

4-5-2. 클락 (Clock)

한국말로는 시계인데, 시계는 일정한 시간 간격을 두고 시침과 분침이 움직인다. 이와 같이, 장치가 일정한 시간 간격을 두고 상태 전이를 발생시키며 동작할 수 있게 도와주는 장치가 바로 클락이다. 클락의 동작은 아주 단순하다. 0의 신호와 1의 신호를 일정한 시간 간격을 두고 번갈아 발생시키는 장치이다. 이는 유한 상태 기계가 일정한 시간 간격을 두고 안정적으로 상태 전이를 할 수 있도록 도와준다. 이것이 어떻게 가능지는 바로 다음에 이어서 설명할 '마스터-슬레이브 플립플롭' 부분을 읽어보도록 하자. 당연히 그 시간 간격이 짧을수록(진동수가 클수록) 상태 전이가 빠르게 일어나므로 기계의 처리 속도가 빨라진다. 흔히들 말하는 CPU 클락 속도가 바로 이것을 가리킨다. 만약 어떤 CPU의 클락 속도(정확히는 진동수)가 2.9GHz라면, 1초에 2.9x10^9번을 진동하는 클락이 사용되는 CPU라는 걸 의미한다.

 

 

4-5-3. 마스터-슬레이브 플립플롭 (Mater-Slave Flipflop)

일정 시간 간격을 두고 0과 1의 신호를 발생시키는 클락을 사용하면 일정 시간 간격으로 상태 전이를 일으키는 게 가능하다고 하였다. 이는 '마스터-슬레이브 플립플롭'이라는 특별한 종류의 정보 저장 장치를 사용하기 때문에 가능한 것이다. 마스터-슬레이브 플립플롭은 다음과 같은 구조를 지니고 있다. 앞서 배운 Gated D Latch를 두 개 연결하고, 클락 신호를 두 Latch의 WE 신호로 사용한다. 빨간색으로 테두리 쳐진 부분이 1-bit를 저장하는 정보 저장 장치 하나에 해당하며, 유한 상태 기계에서 현재 상태를 저장하기 위해 사용하는 정보 저장 장치가 된다. 만약 8개의 상태를 가지고 있는 유한 상태 기계라서 상태를 표현하는 데 총 3비트를 사용한다면 다음과 같은 마스터-슬레이브 플립플롭을 3개 사용해야 할 것이다.

 

 

동작 원리는 다음과 같다. 현재 클락의 신호가 0인 상황이라면 첫 번째 Latch의 WE에는 1이 들어가므로 CLC에 의해 결정된 다음 상태가 첫 번째 Latch에 잠시 저장된다. 그러다가 클락의 신호가 1로 바뀌면 두 번째 Latch의 WE에 1이 들어가므로 첫 번째 Latch에 저장되어 있던 상태가 두 번째 Latch에 저장되면서 현재 상태가 바뀐다. 그리고 그 현재 상태는 다시 CLC에 입력으로 들어간다. 즉 요약하자면, CLC에 의해 결정된 다음 상태는 첫 번째 Latch에 잠시 저장되어 있다가 클락의 신호가 1로 바뀌면 두 번째 Latch로 옮겨가면서 상태 전이가 발생한다. 이러한 원리로 클락 한 주기 당 한 번의 상태 전이가 발생하는 안정적인 유한 상태 기계를 구현할 수 있는 것이다.

 

4-5-4. 유한 상태 기계 구현 방법

그러면 이제 유한 상태 기계를 구현하는 방법을 알아보자. 앞서 임의의 CLC를 구현하는 방법으로 Logical Completeness를 소개했는데, 이는 모든 경우의 입력에 대해 출력이 어떻게 결정되는지만 명확하게 진리표로 표현할 수 있으면 어떤 CLC든 구현할 수 있다는 것이었다. 유한 상태 기계도 마찬가지이다. 모든 경우의 현재 입력과 현재 상태에 대해 출력과 다음 상태가 어떻게 결정되는지만 명확히 표현할 수 있으면 어떤 유한 상태 기계든 구현할 수 있다.  

 

다만 CLC에서는 진리표만 가지고도 쉽게 구현이 가능하지만, SLC의 경우 CLC보다 복잡하기 때문에 보통 진리표 작성 전에 ① 상태 다이어그램이라는 것을 먼저 그려보게 된다. 상태 다이어그램은 각각의 상태를 노드로 표현하고, 무슨 입력에 의해 어떤 상태에서 어떤 상태로 전이하는지를 화살표로 표현하여 상태 전이 방식을 한눈에 파악할 수 있도록 그린 다이어그램을 의미한다. 그렇게 상태 다이어그램을 그리고 나면 이를 바탕으로 출력과 다음 상태에 해당하는 ② 진리표를 작성함으로써 구현을 완성할 수 있다.

 

이해를 돕기 위해 하나의 예를 들자. 다음과 같은 교통 표지판을 구현해 보자. 불빛이 꺼져 있다가, 1번 2번 불빛이 켜졌다가, 3번 4번 불빛이 추가로 켜졌다가, 마지막으로 5번 불빛까지 켜지고 다시 모든 불빛이 꺼지는 과정을 반복하는 표지판이다. 즉 상태는 다음과 같이 4개로 표현할 수 있다. 상태가 4개이므로 상태는 2개의 비트로 표현해 보도록 하자.

① 모든 불빛이 꺼져 있음 (00으로 표현)

② 1번, 2번 불빛이 켜져 있음 (01로 표현)

③ 1번, 2번, 3번, 4번 불빛이 켜져 있음 (10으로 표현)

④ 모든 불빛이 켜져 있음 (11로 표현)

 

 

이를 상태 다이어그램으로 그린 것과 이를 바탕으로 작성한 진리표는 다음과 같다. S1, S0은 현재 상태를 나타내며 Z, Y, X는 출력, S1', S0'은 다음 상태를 의미한다. 그리고 전원(Power)에 해당하는 In 신호가 하나의 입력 신호라고 보면 된다. 마지막으로는 진리표를 보고 게이트로 회로를 그려보면 되는데, 이는 앞서 설명한 Logical Completeness의 원리를 사용하면 충분히 할 수 있으므로 여기선 생략한다.

 

 

5. LC-3 CPU의 구조 (LC-3 Data Path)

우리가 여태까지 배운 여러 종류의 회로들(CLC, SLC)이 실제로 CPU에서 어떤 용도로 사용되는지 간단하게만 한 번 알아보자. 당연히 당장 모든 걸 이해하는 건 불가능하다. 자세한 내용은 이후 포스팅을 보면서 차근차근 이해해 나가도록 하자. 참고로 본 주제의 포스팅에서 다루는 CPU는 기본적으로 LC-3라는 가상 ISA를 읽고 해석하는 CPU를 기준으로 한다는 것을 전제로 한다.


5-1. LC-3 CPU 내 Combinational Logic Circuit

회로  쓰임새
Decoder 명령어의 종류에 따라 필요한 컨트롤 신호만 1로 설정할 때 사용
Multiplexer 특정 장치로 들어가는 입력을 상황에 맞게 선택해줄 때 사용
ALU (Arithmetic and Logic Unit) 덧셈, 뺄셈 등의 연산을 수행할 수 있는 계산 장치

5-2. LC-3 CPU 내 Sequential Logic Circuit

회로 쓰임새
유한 상태 기계 특정 명령어를 읽고 해석하는 데 필요한 단계들 각각을 상태로 표현하고, 매 상태마다 필요한 컨트롤 신호를 정의한다. 이러한 규칙에 따라 상태 전이를 발생시키면서 명령어가 요구하는 동작을 단계적으로 처리할 수 있다.
Register, Latch 연산 중간 결과물을 임시로 저장하는 정보 저장 장치

5-3. LC-3 CPU의 구조 (LC-3 Data Path)