반응형

7. 조합논리함수(1: 가산기, 감산기, 곱셈기, 비교기)



조합논리회로는 다음의 순서대로 설계한다.

1. 해결하고자 하는 문제를 기술하고 입력, 출력 변수의 개수를 결정한다.

2. 입력 출력 변수에 문자심볼을 할당하고 진리표를 작성하는데 이때 무정의 조건(don't care)을 사용할 수 있다.

3. 각 출력에 대해 불 대수의 성질들을 이용하여 간략화해서 출력함수를 유도하고 출력에 따른 논리회로를 작성한다.

이때 조합논리회로를 설계할 때 다음의 제약조건을 고려해야 한다.

1. 최소 개수의 논리 게이트 및 연결선 수

2. 게이트 당 최소의 입력수

3. 최소의 전달 지연시간

4. 각 논리 게이트의 구동한계(fan-out)


가산기/감산기


반 가산기(half adder, HA)는 한자리의 2진수를 더하는 가산기이다.

왼쪽은 반 가산기의 논리표, 오른쪽 위의 그림은 기호, 아래의 그림은 등가 논리회로이다.


전 가산기(full adder, FA)는 캐리 입력을 받고 두자리의 2진수를 더하는 가산기이다. 

(전 가산기의 논리표, 기호, 등가 논리회로)

전 가산기의 설계과정.$$\begin{align*}C_{\text{out}}&=AB+AC_{\text{in}}+BC_{\text{in}}\\&=C_{\text{in}}(\overline{A}B+A\overline{B})+AB\\&=C_{\text{in}}(A\oplus B)+AB\\ \sum&=\overline{AB}C_{\text{in}}+\overline{A}B\overline{C_{\text{in}}}+A\overline{BC_{\text{in}}}+ABC_{\text{in}}\\&=\overline{A}(\overline{B}C_{\text{in}}+B\overline{C_{\text{in}}})+A(\overline{BC_{\text{in}}}+BC_{\text{in}})\\&=\overline{A}(B\oplus C_{\text{in}})+A\overline{(B\oplus C_{\text{in}})}\\&=(A\oplus B)\oplus C_{\text{in}}\end{align*}$$    

위 그림은 반 가산기를 이용하여 나타낸 전 가산기로 왼쪽그림은 논리 게이트, 가운데 그림은 반 가산기를 연결하여 나타낸 전 가산기, 오른쪽 그림은 전가산기의 기호이다.


반 감산기(half subtractor)는 두 자리의 이진수를 빼는 감산기이다.

(반 감산기의 진리표와 기호, 논리회로도)


전 감산기(full subtractor)

(전 감산기의 진리표, 기호, 논리회로, 설계과정)


병렬 2진 가산기


다음은 2비트 2진수 가산기이다.

(왼쪽: 2진수의 덧셈, 오른쪽: 병렬 2진 가산기)


다음은 4비트 2진수 가산기로 4개의 전가산기로 구현할 수 있다.

일반적으로 \(n\)비트 덧셈의 경우, 직렬로 가산하면 출력 캐리를 저장하는 장치와 전 가산기 1가 필요하고 1비트씩 계산하며 중간 캐리 결과를 임시로 저장해서 사용한다. 병렬로 가산하면 \(n\)개의 전 가산기가 필요하고 \(n\)비트를 한꺼번에 계산한다. 그러나 전체 계산결과를 순차적으로 계산하기 때문에 속도가 느려지게 된다.

(74LS283 4비트 병렬 가산기, 왼쪽은 핀 배치도, 오른쪽은 논리기호이다)

위의 그림은 4비트 병렬 가산기 2개를 종속(cascade)연결하여 나타낸 8비트 병렬 가산기이다.

(74HC283 가산기를 이용한 8비트 병렬 가산기)


가산기는 1의 보수, 2의 보수(1의 보수+1) 발생기, 정 입력/반전 입력 발생기로 사용할 수 있다.


4비트 가산/감산기


다음의 그림은 4비트 가산/감산기이다.

\(M=0\)일 때 덧셈(\(A_{0}A_{1}A_{2}A_{3}+B_{0}B_{1}B_{2}B_{3}\))을 수행하고 \(M=1\)일 때 뺄셈(\(A_{0}A_{1}A_{2}A_{3}-B_{0}B_{1}B_{2}B_{3}\))을 수행한다. 이때 뺄셈은 2의 보수를 이용한 뺄셈인데 먼저 1의 보수를 구하고 \(C_{1}=1\)을 더하기 때문이다.(단 제수(\(B_{0}B_{1}B_{2}B_{3}\))<피제수(\(A_{0}A_{1}A_{2}A_{3}\))인 경우에만 적용가능)

\(V\)는 오버플로우(overflow)를 점검하기 위한 출력이다.


10진 가산기는 한 자리의 BCD 덧셈을 수행하는 가산기이다(BCD 가산기라고도 한다). BCD 가산기의 덧셈은 

"BCD값+BCD값+아랫 단으로부터의 캐리"로 진행되며 한자리 BCD 합의 최솟값은 0, 최댓값은 9+9+1=19이다.

(2진수 합과 BCD 합)


BCD입력을 받아서 2진수 덧셈 방법대로 더한 후 덧셈의 결과로부터 합이 10 미만인 경우, 2진수의 합이 곧 BCD 합이고 별도의 변환이 필요없으나 합이 10 이상(10~19)인 경우, 2진수의 합과 2진수 0110의 합이 BCD 합이고 이 때 변환(2진수 합에 2진수 0110을 더한다)이 필요하다.

위의 그림은 4비트 병렬 2진 가산기를 이용하여 나타낸 BCD 가산기이고, 2진수 합이 10~19일 때, \(C=1\)일 때 이므로 \(K=1\)(16~19), \(Z_{8}Z_{4}=11\)(12~15), \(Z_{8}Z_{2}=11\)(10~11)인 경우와 같고. \(K+Z_{8}Z_{4}+Z_{8}Z_{2}\)에 2진수 0110을 더해서 BCD 합에서 캐리가 발생하고 그 캐리는 \(C=K+Z_{8}Z_{4}+Z_{8}Z_{2}\)이다.


2진 곱셈기


다음은 두 자리 2진수의 곱셈기와 논리회로이다.

이 곱셈기의 각 부분곱은 AND 게이트를 이용하고, 부분곱의 합은 반 가산기(부분곱의 개수가 많으면 전 가산기)를 이용하여 더한다.

위의 논리회로는 2진수 곱셈 \(B_{3}B_{2}B_{1}B_{0}\times A_{2}A_{1}A_{0}\)의 계산을 수행하는 곱셈기이다.


일반적으로 K비트의 2진수와 J비트의 2진수를 곱하는 경우, K×J개의 AND 게이트와 J-1개의 K비트 가산기가 필요하고, K+J비트의 결과가 출력된다.


비교기


비교기(comparator)는 두 2진수의 대소비교를 결정하는 논리회로이다.

(기본적인 비교기(XOR 게이트)의 동작)


4비트 2진수 \(A=A_{3}A_{2}A_{1}A_{0},\,B=B_{3}B_{2}B_{1}B_{0}\)의 크기를 비교하게 되면 그 결과는 \(A>B,\,A=B,\,A<B\)중 하나가 된다. \(x_{i}=A_{i}\odot B_{i}=\overline{A_{i}B_{i}}+A_{i}B_{i}\,(i=0,\,1,\,2,\,3)\)라고 하면 출력이

\(A=B\)일 때 1이 되려면 \(x_{3}x_{2}x_{1}x_{0}\)이어야 하고,

\(A>B\)일 때 1이 되려면 \(A_{3}\overline{B_{3}}+x_{3}A_{2}\overline{B_{2}}+x_{3}x_{2}A_{1}\overline{B_{1}}+x_{3}x_{2}x_{1}A_{0}\overline{B_{0}}\),

\(A<B\)일 때 1이 되려면 \(\overline{A_{3}B_{3}}+x_{3}\overline{A_{2}}B_{2}+x_{3}x_{2}\overline{A_{1}}B_{1}+x_{3}x_{2}x_{1}\overline{A_{0}}B_{1}\)이어야 한다.

위의 왼쪽 그림은 4비트 크기 비교기 논리회로이고, 오른쪽 그림은 4비트 크기 비교기 기호이다. 

(74LS85 4비트 크기 비교기. 왼쪽은 핀 배치도, 오른쪽은 논리기호이다.)


참고자료:

Digital Fundamentals 11th edition, Floyd, Pearson

Digital Design 5th edtion, Mano, Ciletti, Pearson

https://www.electronics-tutorial.net/combinational-logic-circuits/full-adder/

https://www.electronics-tutorial.net/combinational-logic-circuits/half-subtractor/

https://www.electronics-tutorial.net/combinational-logic-circuits/full-subtractor/       

반응형
Posted by skywalker222