비트와 자장가

논리회로logic gate와 비트 본문

개발/자료

논리회로logic gate와 비트

eastriver 2021. 1. 28. 15:38
728x90

논리회로란 입력이 출력을 결정하는 회로이다.

논리회로는 기호로 추상화되지만, 부품이라기보단 실제로는 베이스에 전류가 들어오는지의 여부에 따라 전류의 흐름을 바꿔주는 부품인 트랜지스터와 저항만으로 만들어진 간단한 회로 구성이다.
(TTL 7400/7402 같이 네 개의 낸드/노어 게이트를 하나의 칩으로 묶은 부품을 흔하게 구할 수 있고, 대개는 칩 안의 나노미터 단위의 로직 셀로서 접하게 된다)

여기서 버퍼는 전류를 증폭하는 용도의 회로이다


만드는 방법은 다음과 같다. 영상에서 LED는 전류가 흐르는지(출력이 1인지)를 보여주기 위해 추가된 것이라는 점을 참고하자.

 

논리 게이트 중 낸드nand 게이트와 노어nor 게이트는 유니버셜 게이트이다.

그 말인즉슨, 낸드나 노어만 있으면 어떤 논리게이트든 만들 수 있다는 것이다.

낸드로 만든 기본 논리회로

더보기
노어로 만든 기본 논리회로

실제로, 우리가 사용하는 대다수의 컴퓨터 칩은 위의 영상에서처럼 회로가 이상적으로 구성되어 있지 않고, 위의 사진처럼 하나의 유니버셜 게이트만으로 모두 구성되어 있다. 이렇게 구성했을 때 더 많은 트랜지스터를 사용하게 됨에도 불구하고 유니버셜 게이트를 사용하는 이유는 단순하게는 생산공정을 단순화하여 비용을 절감하는 데 유리하기 때문이며, 좀 더 들어가면 로직 셀을 생산 단위로서 사용하기 때문이라 한다.


낸드의 기호는 앤드 기호에 인버터 기호가 붙은 형태이지만, 실제로 앤드 게이트는 대개 낸드 게이트 두 개로(낸드에 인버터가 붙은 형태로) 구현된다.

 

이렇게 만들어진 기본 논리회로를 조합하여 응용회로를 만들 수 있다.

멀티플렉서는 셀렉터 입력에 따라 입력 a나 입력 b를 출력으로 보내주는 회로이고,

깨끗한 이미지가 없어 인터넷에 올라온 다이어그램을 참고해 그린 멀티플렉서

selector a b output
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 1

디멀티플렉서는 반대로 셀렉터 입력에 따라 입력을 출력 a나 b로 보내주는 회로이다.

아예 마땅한 이미지가 없어 직접 그릴 수밖에 없었던 디멀티플렉서 다이어그램

selector input a b
0 0 0 0
0 1 0 1
1 0 0 0
1 1 1 0

일련의 0과 1을 통해 여러가지의 일을 처리하도록 하는 것, 컴퓨터는 멀티플렉서와 디멀티플렉서의 조합으로 느슨히 정의될 수도 있겠다.

USB 하나의 포트에서 여러 개의 기기에서 오는 일련의 인풋을 모두 처리할 수 있는 것도 같은 원리이다.

 

컴퓨터와 친한 편이라면, "모든 것은 숫자다"라는 말을 들어봤을 것이다.

(이진)컴퓨터에서 모든 것은 0과 1이며, 모든 것은 숫자며, 모든 연산은 덧셈이라는 사실을 기억해야 한다.
덧셈도 이진 연산이기 때문에 더 큰 수도 없이 결국 딱 1만 더할 수 있다면 컴퓨터의 모든 것이 끝난다.

 

우선 컴퓨터의 가장 작은 정보단위인 비트는 래치latch 혹은 플립플롭flip-flop(래치에 클락이 추가된 형태)으로 불리는 회로를 통해서 저장되고 있음을 알아야 한다.

가장 단순하게는 오어or 게이트를 되먹임하여 비트를 저장할 수 있지만, 이는 한번 셋set된 후에 기존의 상태(0)으로 리셋reset이 불가능하다. 0과 1의 상태를 자유로이 오갈 수 있는 SRset-reset 래치의 회로와 작동원리는 아래의 영상을 참고하자.

 

기본적으로 래치의 정보는 전원이 없으면 사라지는 휘발성을 띤다. 램과 CPU의 레지스터가 휘발성인 것은 그것들이 이런 플립플롭으로 구성되어 있기 때문이다.

(전원 없이도 반영구적으로 정보를 저장하기 위해선 하드디스크에 자기적으로 기록하거나, SSD같은 플래시 메모리처럼 절연체로 둘러싼 플로팅게이트에 전자를 가두는 방식이 사용될 수 있다)

이왕 그리는 김에 같이 그린 하프 애더half adder

 

a b carry sum
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

조어xor 게이트와 앤드and 게이트 두 개만 있으면 하프 애더를 만들 수 있고, 하프 애더 두 개에 오어 게이트 하나로 이전 자리의 올림 비트carry bit까지 받는  풀 애더full adder를 만들 수 있고, 풀 애더 n-1개와 하프 애더 한 개로 n비트 덧셈을 수행할 수 있게 된다.
여태까지 만든 것들을 이리저리 잘 조합하면 아래처럼 CPU의 기본 연산 유닛인 ALUarithmatic logic unit가 만들어진다.

 

컴퓨터의 하드웨어란 건 사실 놀라울 정도로 단순하지 않나.

(아쉽게도 양자 컴퓨터는 이리 단순하지 못하다. 언젠간 양자 컴퓨터의 논리회로까지 정리할 수 있기를)

프로그래밍과 같은 방식으로 점점 추상화하며 복잡도를 높여가는 설계를 이해하면, 하드웨어와 소프트웨어는 그리 멀지 않다는 점을 알 수 있다.

728x90
반응형
Comments