본문 바로가기
2학년 2학기/컴퓨터 구조

1.5 Combinational circuits

by kkkkk1023 2024. 9. 21.

Combinational circuits(조합 회로)란?

: gate들이 조합되어 이루어진 회로이다. 

: 다시 말해 입력에 따라 즉시 출력이 결정되는 논리 회로를 말한다. 즉, 입력 값이 주어지면 그에 대응하는 출력이 바로 생성된다. 조합회로는 기억 기능이 없기 때문에 과거의 입력과는 상관없이 현재 입력만을 바탕으로 출력을 결정한다.

 

Half adder(반 가산기)

: 1비트의 두 입력을 더하여 합(Sum)자리 올림(Carry)을 계산하는 회로이다.

 

한번 1bit끼리의 더하기를 해보자. 즉, 1과 0의 덧셈을 해보자.

     0           0           1           1
+   0      +   1      +   0     +   1
-----     -----     -----    -----
0   0      0   1      0   1      1   0  
C   S     C   S      C   S    C   S

 

이 연산을 통해서 진리표를 작성해보자.

 

이렇게 진리표를 작성할 수 있다. C(캐리)는 AND연산자의 진리표와 같고, S(썸)은 XOR과 같다. 따라서 이 점을 이용하면 아래의 논리 다이어그램을 그려볼 수 있다. 

 

 

 

 

Full adder(전 가산기)

: 전 가산기는 1비트의 두 입력이전 자리에서 올라온 캐리(Carry-In)까지 고려하여 합(Sum)자리 올림(Carry-Out)을 계산하는 회로이다.

: 즉, N비트 연산에 사용된다.

 

예를 들어 4bit끼리의 연산을 해보자.

 

    1     1  (Carry)
    0    0      1
+  0    1      0
--------------------
    1    0      1

 

위의 연산으로 Carry-In, CarryOut을 알 수 있게 되었다.

  • Carry-In
    • 회색 부분의 연산을 통해서 나온 1을 바로 앞 bit 0 + 1에서 추가해서 더해줘야하는 것
  • Carry-out
    • 회색 부분의 연산을 통해서 나온 1

 

 

 

 

따라서 진리표를 작성할 때는 총 3개의 변수가 필요하다. 

1. Sum의 값

2. Carry-in의 값

3. Carry-out의 값

 

 

 

 

 

 

 

이제 C를 최소화 해보자. 진리표가 복잡하기 때문에 카르노맵을 사용해보자.

 

 

원래는 1을 최대로 많이 묶는게 좋지만 이번에는 이렇게 하나씩만 한 이유가 있다. HA + HA = FA를 나타내기 위해서다. 이제 식을 작성해보자.

 

xy + xy'z + x'yz
= xy + z(xy' + x'y)
= xy + z(x ⊕ y) = C

 

 

이렇게 식이 나오게된다.

 

 


 

이제 S를 최소화해보자. 이번에도 카르노맵을 사용해보자.

 

이번에는 묶을게 없기 때문에 그냥 각각 AND를 해주어야한다. 식을 작성해보자.

 

x'y'z + x'yz' + xy'z' + xyz
= x'(y'z + yz')+x(y'z' + yz)
= x'(y ⊕ z) + x(y ⊕ z)'
(y ⊕ z)를 w라고 가정해보자
= x'w + xw'
= x ⊕ w
= x ⊕ (y ⊕ z)
= x ⊕ y ⊕ z = S

 

다소 복잡하지만 XOR로 연산된 결과가 나온다.

 

 

 

이제 xy + z(x ⊕ y) = C, x ⊕ y ⊕ z = S를 기반으로 논리 다이어그램을 만들어보자.

 

 

 

이렇게 Full adder가 나오게 된다. 

 

아까 HA + HA = FA를 만들기 위해서 S를 복잡하게 만들었는데 이제 논리 다이어그램을 보면 HA + HA + OR = FA인 것을 확인할 수 있다. 

 

 

 

 

전가산기와 반가산기의 차이

 

전가산기(full adder)는 carry가 나오면 다음 비트로 넘겨서 다음 비트에서는 전 비트에서 넘어온 carry와 함께 계산하고, 반가산기(half adder)는 carry가 나와도 넘기지 않고 출력으로 끝낸다.