본문 바로가기
컴퓨터구성

조합 회로, 순서 회로

by LaTale 2020. 4. 6.

컴퓨터의 논리 회로는 조합 회로와 순서 회로로 구분할 수 있다.


종류와 함께 하나씩 살펴보도록 하겠다.


1. 조합 회로(Combinational Circuits)

 - input에 따라 output이 정해진다.

 - 시간이 아무리 가도 값의 변화가 없다.

 - 진리표로 설명 가능하다.

 즉, 여태까지 한 회로들이 모두 조합 회로임을 알 수 있다.


 조합 회로의 설계 절차는 다음과 같다.

  1) 문제 제시

  2) input과 output을 따져본다.

  3) 진리표를 세운다.

  4) 식을 간소화시킨다.

  5) 회로를 그린다.


 반가산기(Half Adder)

  두 비트의 산술적인 덧셈을 수행하는 회로이다. 위 절차에 따라서 설계해보면 다음과 같다.


  1) 반가산기 설계

  2) input : x, y output : c(carry), s(sum)

  3) 

  4) C = xy , S = x xor y

  5) (input값을 실수로 a, b로 줬는데 이름만 바꾸면 된다..)


 전가산기(Full Adder)

  세 비트의 산술적인 덧셈을 수행하는 회로이다. 절차에 따라서 하기는 귀찮으니 직접 해보고 결과만 보면 다음과 같다.

  C = xy + xz + yz , S = x'y'z + x'yz' + xy'z' + xyz (=x xor y xor z)

  회로도를 보면 알 수 있지만 2개의 Half Adder을 합친 모습이다.


  전가산기의 사용 예는 input값이 많은(즉, 긴 식의 계산)도 할 수 있게 된다.

  예를 들어 1011 + 0110과 같은 값은 위 사진과 같이 Full Adder을 4개 사용해서 구할 수 있다.



2. 순서 회로(Sequential Circuits)

 - 이전 출력 상태와 현재 값에 따라 출력이 결정된다.

 - output이 다시 input으로 들어간다. (feedback이라 한다.)


 플립 플롭(flip-flops)

  - 1비트의 바이너리 데이터를 저장한다.

  - 두 개의 안정된 상태를 가진다.

  - 불연속 순간에만 영향을 받는 동기식 저장 요소이다. (이 문장은 아래에서 다시 한번 보도록 한다.)


 플립 플롭은 여러 종류가 있는데 가장 기본적인 SR 플립플롭부터 보겠다.

 SR 플립플롭의 회로도는 위 그림과 같다. (물론 엄밀히 말하자면 위 그림은 SR Latch이다. 이에 관해선 아래에서 설명하도록 하겠다.)

회로상의 symbol은 왼쪽과 같고, 진리표는 오른쪽 사진과 같다.

진리표를 보면 알겠지만 SR이 0,0 이라면 이전 값을 그대로, 0,1이라면 0(reset) 1,0이라면 1(set)을 출력함을 알 수 있다.


회로상에서 Q와 Q'는 항상 반대 값이어야만 하기 때문에 SR의 값이 1,1의 경우 회로 불능 상태가 되어 ?가 나오게 된다.


SR의 값이 1,1이 input으로 넣을 수 없기에 살짝 변형을 시켜주었다.

우선 D라는 사전 입력값을 만들어 한 번은 직접 입력, 한 번은 인버터(NOT)를 거친 후 입력을 시킨다. 따라서 SR은 같은 값이 나올수가 없게 된다. 이를 D 플립플롭이라 한다.

회로까지 그리기엔 너무 졸리다. 설명을 보고 그리면 충분히 그릴 수 있으니 패스하겠다.

회로상의 symbol은 왼쪽과 같고, 진리표는 오른쪽 사진과 같다. 즉, 잠깐 지연(delay)시키는 목적임을 알 수 있다.


D 플립플롭을 사용함으로써 1,1의 입력값에 대한 회로 불능은 해결했지만 우리가 원하는 것은 이런 게 아닐 것이다. Q(t+1) = Q(t) 와 같이 이전 값이 불변하거나 / 또는 변하는 걸 원한다.


이번에도 사전 입력을 한다. 조금 복잡한데 J와 K 2 값을 필요로 한다.

J값과 Q'의 출력값을 feedback해서 AND연산 시킨 후 S에 넣고, K값과 Q의 출력값을 feedback해서 AND연산 시킨 후 R에 넣는다.

하.. 말로 설명하려니 너무 어렵다.. 어쩔 수 없이 회로를 그려왔다.. 어쨌거나 위와 같은 회로를 JK 플립플롭이라 한다. (마찬가지로 엄밀히 말하면 JK 플립플롭이 아니긴하다..)

회로상의 symbol은 왼쪽과 같고, 진리표는 오른쪽 사진과 같다. RS와 똑같지만 1,1의 입력값의 경우 Q'(t)가 됨을 알 수 있다.


JK플립플롭을 하나로 묶은 것을 T 플립플롭이라 한다.

위와 같이 0일땐 그대로, 1일땐 반대값이 나옴을 알 수 있다.



컴퓨터에서라면 입력 값은 계속 변화할 것이다. 

뿐만 아니라 다양한 곳에서 받아오기 때문에 속도의 차이도 생길 수 밖에 없을 것이다.


그렇다면 내가 하고자 했던 연산을 제대로 할 수가 없을 것이다. (1,1을 넣고 싶었는데 속도의 차이로 1,0이 들어온다던지.. feedback 과정에서 돌아온 값이 플립플롭 연산 시간보다 길게 남아있다던지 ..)


이러한 문제를 race problem이라 하며 보통 clock 등의 counter로 동기화시켜서 해결한다.


여기서 래치와 플립플롭의 차이점을 알 수 있다. (위 회로에서 플립플롭이 아니라 했던 이유다.)


래치는 비동기화 즉, clock이 없거나 짧게 해서 레벨을 감지하는 식(level-triggering)으로 반응하고,

플립플롭은 clock의 가장자리(edge)에서 트리거되어 작동한다.

이러한 방식을 edge-triggering이라 부른다.


clock이 1로 바뀌는(즉, 올라가는) 타이밍에 작동하는 방식을 positive,

0으로 바뀌는(즉, 내려가는) 타이밍에 작동하는 방식을 negative라 한다.


위 사진들의 symbol에서 C는 Clock을 뜻하고 삼각형은 positive방식이란 뜻이다.

(negative방식은 not을 뜻하는 동그라미가 붙어있다.)


나눠서 쓸껄 그랬다. 너무 길다. ㅠ

'컴퓨터구성' 카테고리의 다른 글

집적 회로(IC) - register, counter  (1) 2020.04.20
집적 회로(IC) - MUX  (0) 2020.04.20
순서 회로 설계, 디코더  (0) 2020.04.10
식의 간소화 - 카르노맵  (2) 2020.04.01
기본적인 Logic gates  (1) 2020.03.31