클럭
클럭은 CPU가 1초마다 발생되는 클럭 주파수의 양을 의미한다. 주파수이므로 헤르츠(Hz) 단위로 표현한다.
우리집 컴퓨터는 3.6GHz인데, 이는 1초에 클럭 신호가 36억번 발생한다는 것을 뜻한다. 간단하게 말해서, 클럭 신호가 발생할 때마다 전류가 흐르고, 그것을 통해 위의 가산기 같은 것들이 작동한다고 생각하면 된다.
Oscillator (오실레이터, 발진기)
발진기는 클럭 신호를 발생시키는 데 사용되는 전류 회로다.
플립플롭 (Flip-Flop)
플립플롭은 데이터를 기억시키는데 유용한 논리 회로다. 회로에 전류가 흐르는지를 감지함으로써, 특정 스위치가 켜졌는지 꺼졌는지를 알 수 있게 된다.
R-S 플립플롭
입력값으로 Reset과 Set을, 출력 값으로 Q와 !Q를 가지는 플립플롭이다. S에 전원을 한 번 넣으면 Q를 영구히 켤 수 있고, R에 전원을 한 번 넣으면 Q가 영구히 꺼지므로 이전에 S에 해당하는 작업을 실행했었는지 기억하는 것이 가능하다.
다만 R과 S를 동시에 입력해버리는 상황이 오면 회로에 오류가 발생하기 때문에 이것만으로는 사용할 수 없다. 좀 더 뒤에서 회로를 관리할 추가적인 요소가 필요하다. 그것이 데이터 자체를 뜻하는 D와 위에서 말한 클럭이다.
D에서 신호가 들어와도 클럭 신호가 오지 않으면 Q는 활성화되지 않는다. 또한 NOT 게이트가 붙기 때문에 어느 한 쪽은 항상 0인 상태를 유지할 수 있게 된다!
이렇게 구성된 플립플롭을 Level-triggered D-type Flip-Flop이라고 하며, 줄여서 1 bit latch라고도 한다. 그리고... 가산기 때처럼... 이것도 쭉 늘어놓는 것으로 8 bit latch를 구성할 수 있다.
8-to-1 Selector (8:1 MUX)
위의 8 bit latch에서, 특정 부분에 있는 비트만 알고 싶은 경우가 있다. 이럴 때 8-to-1 Selector를 사용한다. 해당 셀렉터는 세 개의 입력값만 사용해 여덟 개의 저장 장소 중 한 자리를 특정해 값을 취득할 수가 있다. (2^3 == 8)
입력값이 늘어나니 회로도도 머리가 아파진다... 아무튼, 이렇게 적은 입력으로 다양한 출력을 얻는 특징이 있어, 8:1 멀티플렉서(MUX)라고도 부른다.
3-to-8 Decoder
8-to-1 Selector가 비트를 알아내는 회로라면, 3-to-8 Decoder는 비트를 저장하는 데 쓰는 회로이다. 이것도 세 개의 입력값만으로 여덟 개의 저장 장소 중 한 자리를 특정해 값을 저장할 수 있게 된다.
두 회로 모두 세 개의 입력값으로 8개의 latch에 접근할 수 있다. 즉, 두 회로는 입력값을 공유하는데... 이 세 개의 입력값이 바로 주소(Address)다. 입력값의 조합인 주소가 있기 때문에 n번 자리의 데이터를 읽고 쓸 수 있는 것이다. C 언어의 포인터도 내부적으로는 다르겠지만 개념적으로는 이 역할을 수행한다.
RAM
...하여 위의 8-to-1 Selector와 3-to-8 Decoder를 이미 만들어진 8 bit latch에 부착하면 다음과 같은 그림이 나온다.
이렇게 만들어진 회로도가 바로 RAM(Random Access Memory)이다. 지금 같은 경우 8개의 비트 중에 하나의 비트를 읽고 쓸 수 있으므로, 8x1 RAM 이라고 표현한다. Random인 이유는 3bit의 주소만 가지고 있다면 임의의 latch에 바로 접근할 수 있기 때문이다.
주소값은 3bit로 동일하면서, 8x1 RAM만 두 개로 늘리게 된다면, 각 RAM의 n번째 자리에 데이터가 입/출력 될 것이다. 이렇게 늘어서는 식으로 만들면 8x2 RAM이라고 표현한다. 8개의 장소에 2bit를 작성할 수 있는 것.
반대로 접근할 수 있는 장소를 16개로 늘리고 싶다면, 8 bit latch를 완성시킬 때 사용했던 셀렉터와 디코더를 또 써야한다. 그것이 바로 1-to-2 Decoder와 2-to-1 Selector로, 3bit의 주소값 외에 Select라는 bit를 하나 더 추가해 총 4bit로 16개의 장소에 접근할 수 있게 된다.
디코더의 디코더... 셀렉터의 셀렉터... 이러면 또 복잡하므로, 박스로는 다음과 같이 축약한다.
select를 담당하는 bit도 그냥 주소에 포함시키는 것.
이렇게 숫자 늘리는 법을 알았으므로, 1024x8 RAM, 65536x8 RAM의 회로를 만드는 것도 가능해진다. 다만 이것은 여백이 부족하므로...
'프로그래밍 > 개념원리' 카테고리의 다른 글
커널(임시) (0) | 2024.03.23 |
---|---|
레지스터, 파이프라인(임시) (0) | 2024.03.23 |
비트(Bit) (0) | 2024.03.17 |
컴퓨터의 3요소 (0) | 2024.03.17 |
그래프 - 다익스트라 알고리즘 (0) | 2024.03.13 |