· 목차
- 반가산기와 전가산기
- 병렬 2진 가산기
- 리플 캐리와 룩-어헤드 캐리 가산기
- 비교기
- 디코더
- 인코더
- 코드 변환기
- 멀티플렉서
- 디멀티플렉서
- 패리티 발생기/검사기
이번에는 목차에서 보는것과 같이 가산기, 비교기, 디코더, 인코더, 코드 변환기, 멀티플렉서, 디멀티플렉서
그리고 패리티 발생기/검사기 등과 같은 조합논리회로에 대해서 배워보겠습니다.
그리고 고정기능 IC 소자에 대해서 배워보도록 하겠습니다.
가산기(Adder)
덧셈기는 비트의 연산을 떠올려 보시면 간단할 것 같습니다.
예를 들어서 0111과 0011의 덧셈 연산을 한다고 가정해보면,
가장 오른쪽에 있는 weight가 가장 낮은자리에 있는LSB(Least Significant Bit)부터
차례대로 오른쪽으로 그 전 단에서 넘어온 carry bit까지 포함해서 더하게 됩니다.
또한 weight가 가장 높은 자리에 있는 숫자MSB(Most Significant Bit)들의 연산 결과에서
carry가 발생하게 됩니다.
위의 연산에서 LSB의 연산은 이전 연산에서 넘어오는 carry bit가 필요 없으니 2bit 덧셈만
생각하면 됩니다. 즉, 간단한 바이너리 덧셈만 고려하면 됩니다.
여기서 carry in을 고려할 필요가 없는 adder을 Half Adder(HA)라고 부릅니다.
반대로 LSB는 모든 이전 덧셈 연산에서 넘어온 carry in을 고려해야 합니다.
실제로 3개의 bit를 더하게 되는 것 입니다. 이 경우 2개의 binary adder를 연결하면
됩니다. 이런 adder을 Full adder(FA)라고 부릅니다.
이제 본격적으로 Adder에 대해서 배워보도록 하겠습니다.
- 반가산기 (Half-Adder)
위에서 보신 것과 같이 2bit 덧셈만 생각하면 됩니다.
왼쪽 자료를 보면 Carry가 발생하는 경우는 A와 B가 '1'일 때만 발생합니다.
그러므로 입력 변수들의 AND로 나타낼 수 있다는 것을 알 수 있습니다.
왼쪽 자료에서 $C_{out} \;=\; AB$이며 합의 출력에서 A와 B가 같지 않을 때만
1인 것을 알 수 있습니다. 결국 합의 입력을 Exculsive-OR으로 나타낸다는 것을
알 수 있습니다. $\Sigma = A \oplus B = A\overline{B} + \overline{A}B$
진리표로 인풋과 그에 따른 결과들을 간단하게 보자면 위와 같습니다.
- 전가산기(Full Adder)
전가산기는 carry in을 고려한다는 것을 기억하실 것 입니다.
carry in을 받아서 덧셈을 연산하고 carry out을 필요에
따라서 내보낼 수 있어야 합니다.
이제 구조와 함께 부울식와 진리표를 살펴보도록 하겠습니다.
첫 번째 자료를 보시면 반가산기와 다르게 'Input carry'가 생긴 것을 아실 수 있으실 겁니다.
두 번째 자료에서 왼쪽 회로는 3비트 합을 위한 논리회로이며,
오른쪽은 완성된 전가산기의 논리회로를 나타낸 것 입니다.
여기서 전 가산기를 블록도로 나타낸 2개의 반가산기가 연결된 형태로 나타낼 수 있습니다.
- 병렬 2진 가산기(Parallel Binary Adders)
'병렬 2진 가산기'는 2개 또는 그 이상의 전가산기로 구성됩니다.
병렬 2진 가산기는 1비트 이상의 2진수 덧셈은 여러 개의 전가산기가 필요합니다.
3비트의 경우 3개의 전가산기 그리고 4비트의 경우 4개의 전가산기가 필요합니다.
이 회로가 병렬 2비트 가산기 입니다. 3비트 병렬 가산기와 4비트 병렬가산기 또한 아래의
자료를 통해서 살펴보도록 하겠습니다.
위 자료에서 왼쪽이 병렬 3비트 가산기이며, 오른쪽이 병렬 4비트 가산기입니다.
왼쪽 병렬 3비트 가산기인 경우 2진수 101과 011이 더해지는 과정을 보여주는 것 입니다.
오른쪽 병렬 4비트 가산기의 경우 output carry인 $C_{4}$는 입력 캐리가 입력되기 전에는 각각의
전 가산기 출력과 출력 캐리가 발생되지 않으므로 덧셈이 완료되기까지 시간 지연이 발생합니다.
이때까지 소요되는 시간이 캐리 전달지연 입니다.
위의 자료는 TI에서 제공하는 74LS283에 대한 고정기능IC소자와 data sheet입니다.
여기에서 병렬 4비트 가산기의 경우 maximum delay to output이 17ns 라는 것을 알 수 있습니다.
- 리플 캐리 가산기(Ripple Carry Adder)
위의 자료에서 리플캐리가 발생하는 지연시간에 대한 자료입니다.
출력 캐리가 발생되기 까지 발생하는 소요시간이 캐리 전달지연 입니다.
그렇기 때문에 캐리 전달지연은 이 가산기의 속도를 제한합니다.
이 캐리 전달지연을 줄이는 방법으로 룩-어헤드 캐리(look-ahead carry)가 있습니다.
이 방법은 입력을 근거로 각 단의 출력 캐리를 예상하고, 캐리 발생 또는 캐리 전달에 의해
출력 캐리 발생 또는 캐리 전달에 의해 출력 캐리를 발생합니다.
'look-ahead carry'에 대해서 배워보기 전에 필요한 개념을 먼저 설명하도록 하겠습니다.
- Critical Path
이제까지 배운 logic gate들은 실제로 semi-conductor, 즉 반도체 소자로 구현됩니다.
그리고 반도체 소자가 동작하기 위해서는 Charge의 이동, 축적 과정을 수행해야 합니다.
이 일련의 과정은 당연히 시간이 소요되므로 AND 또는 OR Gate 모두 입력 시간이 변한 후
일정 시간 후에 출력이 변화합니다.
그렇기 때문에 입력 신호와 출력 신호 사이에 몇개의 logic gate가 연결되어 있는지에 따라
출력을 얻기 까지의 시간이 달라진다는 것을 예상하셨을 것이라고 생각합니다.
결론적으로 Ripple Adder의 입력이 변할 때 출력을 얻기 까지의 시간 즉,
4bit Adding을 하는데 걸리는 시간을 회로에서 가장 늦게 나오는 출력에 의해서
결정된다는 것을 알 수 있기 때문에 임의의 두신호 사이에 연결된 게이트들의
수를 세어보면 예측할 수 있습니다.
여기서 가장 많은 게이트들이 연결된 두 신호간의 경로를 'critical path'라고 부릅니다.
- 가산기의 확장 (Adder Expansion)
이번 가산기의 확장은 말 그대로 가산기를 확장하는 것이라고 이해하시면 됩니다.
지금까지 몇 개의 가산기를 병렬로 연결하는지에 따라서 몇 비트 가산기인지 알 수 있었던 만큼
가산기를 이어 붙혀서 가산기를 확장하는 것 입니다.
- Carry Look Ahead Adder
이제 다시 본론으로 돌아와서 'look-ahead-adder'에 대해서 배워보도록 하겠습니다.
앞에서 배운 Ripple Carry Adder가 단순한 구조라 이해하기 쉽지만 critical path가
길기 때문에 회로의 동작이 늦어진다는 것을 알았으며, 지연시간을 줄이는 방법으로
look-ahead-adder를 통해서 해결할 수 있다고 잠깐 언급했었습니다.
지연시간을 줄이기 위해서는 critical path를 줄인 덧셈기를 설계해야 하며,
가장 대표적인 것이 Carry Look Ahead Adder입니다.
캐리 발생은 출력 캐리가 전가산기에서 내부적으로 발생할 때 일어난다. 즉, 두 입력 비트가
모두 1일 때만 캐리가 발생한다. $C_{g} = AB$
캐리 전달은 입력 캐리가 그대로 출력 캐리로 전달될 때 일어난다. 입력 비트가 모두 또는
하나만 1일 때 입력 캐리는 전가산기를 통해 출력 캐리로 전달된다. $C_{P} = A + B$
위의 캐리 발생과 캐리 전달은 아래 그림과 같습니다.
결국 각각의 전가산기에서 출력캐리는 캐리발생($C_{g})$, 캐리전달$(C_{p})$ 그리고 캐리입력$(C_{in})$에 의해서 결정됩니다.
즉, 각 단에서 위의 세 가지가 함수는 입력비트 A와 B그리고 LSB가산기의 캐리입력 비트가
인가되는 순간 즉시 발생한다. 여기서 캐리입력은 이전 단에서 발생한 캐리전달입니다.
$$ C_{out} = C_{g} + C_{P}C_{in} $$
위의 식에서 전가산기 단의 $C_{g}$와 $C_{p}$함수와 그 이전 단의 $C_{g}$와 $C_{p}$함수로만
결정된다는 것을 아실 수 있습니다.
각 단의 $C_{g}$와 $C_{p}$ 함수는 전가산기 입력 비트 A와B로 나타낼 수 있으며 모든 출력 캐리는
즉시 동작 가능(게이트 지연은 제외)합니다. 즉, 최종결과의 출력까지 캐리가 모든 전가산기 단으로
전달되도록 기다릴 필요가 없어지는 것 입니다. 결국 look-ahead carry 기법은
덧셈 연산처리 속도를 높일 수 있게 된 것 입니다.
이해하기가 많이 어렵지만 입력에 대한 예측 회로를 추가하는 것을 통해서 캐리가 발생하느냐
하지 않느냐를 판단하여 전체 연산을 기다릴 필요가 없어지게 된 것 입니다.
아래 회로도를 참고해서 자세히 보시면 예측 회로에 대해서 아실 수 있습니다.
조금 더 상세히 보고싶다면 하단에 참조란에 자세히 설명되어 있으니 확인해보시기 바랍니다.
- 감산기
비교기 (Comparator)
비교기(comparator)는 두 2진수의 크고 작음을 결정하기 위해 그 두 수의 크기를 비교합니다.
- 일치(equal)
'일치'는 Exclusive-NOR게이트를 이용하여 나타낼 수 있습니다.
Exclusive-NOR 두 입력 비트가 다를 때 '0'을 출력하고, 같을 때 '1'을 출력합니다.
하지만 2비트 2진수를 비교하려면 Exclusive-NOR 게이트가 하나 더 필요합니다.
그렇다면 4비트 크기 비교기를 어떻게 표현할 수 있을까요?
처리해야 하는 비트의 크기가 커질수록 Exclusive-NOR이 추가된다고 보면 될 것 같습니다.
- 불일치(Ineqaul)
함수 비교기는 일치 출력 뿐만 아니라 2진수 중에 어느것이 더 큰지를 나타내는 출력기능을 가지고 있습니다.
위의 자료에서 왼쪽는 4비트 비교기를 표현한 것 입니다. 오른쪽은 인풋값에 따른 결과값의 예시입니다.
동작원리는 아래의 단계를 거치게 됩니다.
1. $A_{3} = 1$이고 $B_{3} = 0$ 이면 A는 B보다 더 크다.
2. $A_{3} = 0$이고 $B_{3} = 1$이면 A는 B보다 더 작다.
3. $A_{3} = B_{3}$이면 다음 아래 자릿수의 비트를 검사해야 한다.
3번의 경우 최상위 비트에서 순차적으로 하위 비트로 넘어가며 불일치를 판정하면 됩니다.
하지만 만약 1번과 2번에서 비교기가 끝나는 경우 3번으로 넘어가실 필요는 없습니다.
여기서 실제로 컴퓨터 내부에서는 비교기를 이제까지 설계된 방식으로 설계하지는
않습니다. 대신 ALU라는 연산 unit을 이용한다고 합니다.
아직은 모든 조합 논리의 기능을 배우지는 않았기 때문에 나중에
추가적으로 배워보도록 하겠습니다.
디코더(Decoder)
'디코더(decoder)'는 지정된 비트 조합(코드)이 입력되는지를 검출하고
지정된 출력 레벨로 표현하는 디지털 회로를 말합니다.
- 기본적인 2진 디코더
기본적인 2진 디코더는 위의 자료와 같습니다.
Active-HIGH와 Active-LOW라는 동작에 관한 이론이 있습니다.
Active-HIGH는 신호가 높은 상태일때 동작하는 것을 의미합니다.
이 동작의 경우 논리회로에서 흔히 볼 수 있는 동작 방식입니다.
Active-LOW의 경우 신호가 낮은 상태일때 동작하는 것을 의미합니다.
특정 IC 또는 장치에서는 0V에 가까울때 활성화 됩니다.
Active-HIGH와 Active-LOW에 대해서 알아본 이유는 디코더의
Active LOW형태에 대해서 어떻게 회로를 구성할 수 있는지 보기 위함입니다.
위와 같이 NAND 게이트를 통해서 Active-LOW로 작동하는 회로를
구성할 수 있습니다.
- 4비트 디코더
4비트로 이루어진 모든 코드를 디코딩 하기 위해서는 디코딩 게이트 16개가 필요합니다.
이는 $2^{4} = 16$을 통해서 알 수 있습니다.
주로 4-line-to-16-line decoder 또는
1-of-16 decoder이라고 부릅니다.
위의 자료는 4비트 디코더 Active-LOW로 동작하는 논리기호이며 진리표입니다.
현재 디코더까지 배워봤습니다.
이번 챕터는 회로가 많고 여러가지 개념에 대해서 알아야 하기 때문에
호흡이 꽤 긴 것 같습니다.
저 또한 글을 볼 때 호흡이 너무 길면 집중이 안될때도 있기 때문에
오늘은 여기까지 하고 난 이후에 다음 시간에 다음 목차부터
배워보도록 하겠습니다.
감사합니다.
· 참조
'전자전기공학 > 디지털논리회로' 카테고리의 다른 글
[Digital Logic #8][Latch/Flip-Flop/래치,플립플롭] (0) | 2024.06.24 |
---|---|
[Digital Logic #7-1][Function of Combinational Logic/조합논리의 기능] (0) | 2024.03.03 |
[Digital Logic #6][Combinational Logic Analysis/조합 논리의 해석] (3) | 2024.02.29 |
[Digital Logic #5][SOP/POS/Karnaugh Map] (2) | 2024.02.28 |
[Digital Logic #4][부울대수(불대수)] (2) | 2024.02.27 |