논리 회로

큰숲백과, 나무를 보지 말고 큰 숲을 보라.

논리회로(論理 回路)는 불대수를 물리적 회로에 구현해 일정한 출력 값이 나오게 한 것이다.

AND, OR, NOT이 가장 기본이다.

논리게이트[편집 | 원본 편집]

AND[편집 | 원본 편집]

둘 다 1이어야지 1이 나온다.

입력 결과
0,0 0
0,1 0
1,0 0
1,1 1

OR[편집 | 원본 편집]

둘중 하나만 1이면 1이 나온다.

입력 결과
0,0 0
0,1 1
1,0 1
1,1 1

NOT[편집 | 원본 편집]

입력 값에 반대로 출력한다. 값 1개만 입력 받는다.

입력 결과
0 1
1 0

buffer[편집 | 원본 편집]

입력 값 그대로 출력. 입력부터 출력까지 미묘한 지연이 있어서 회로 내 전기 신호 타이밍 동기화를 위해 사용한다.

입력 결과
0 0
1 1

NAND[편집 | 원본 편집]

Not +And이다.

입력 결과
0,0 1
0,1 1
1,0 1
1,1 0

NOR[편집 | 원본 편집]

Not +Or이다

입력 결과
0,0 1
0,1 0
1,0 0
1,1 0

XOR[편집 | 원본 편집]

입력이 같으면 0, 다르면 1이다. 짝수 패리티 비트 체계나 가산기의 합 출력 등에 쓰인다.

입력 결과
0,0 0
0,1 1
1,0 1
1,1 0

XNOR[편집 | 원본 편집]

Not +Xor이다. 홀수 패리티 비트 체계의 검증에 쓰인다.

입력 결과
0,0 1
0,1 0
1,0 0
1,1 1

조합논리 회로[편집 | 원본 편집]

이전 입력 관계없이 현재 입력으로만 출력이 결정되는 논리 회로.

반가산기(half adder)[편집 | 원본 편집]

1bit 2진수 2개의 합과 자리 올림수를 구한다.

And게이트와 XOR게이트 1개씩으로 이루어져있다.

전가산기(full adder)[편집 | 원본 편집]

전가산기

뒷자리에서 올라온 자리올림수와 1bit 크기 2진수 3자리를 더한 합과 자리올림수를 구한다.

반가산기 2개와 OR게이트 1개로 이루어졌다.

디코더(Decoder),인코더(Encoder)[편집 | 원본 편집]

디코더:n개 입력선 입력값을 2n개의 출력값으로 번역하는 회로.

인코더:2n개 입력선 입력값을 n개의 출력값으로 번역하는 회로.

멀티플렉서(multiplexer), 디멀티플렉서(Demultiplexer)[편집 | 원본 편집]

멀티플렉서:여러 개의 입력 중 하나를 선택해 출력으로 내보내는 회로

디멀티플렉서:한 개의 입력을 어느 곳에 내보낼지 선택 기능을 가진 회로

모든 멀티플렉서/디멀티플렉서는 각각 인코더/디코더이기도 하다(반대는 X)

순서 논리회로[편집 | 원본 편집]

외부로부터의 입력+ 현재상태로 출력이 결정된다. 고로 기억기능이 있다.

플립플롭[편집 | 원본 편집]

전원이 공급되는 한, 상태변화의 신호 전까지 상태를 유지하는 논리회로로, 1개당 1bit 저장이 되며, 2개의 NAND나 NOR을 쓴다.

종류로 기본형인 SR 플립플롭이 있으며 몇 가지 문제를 보완한 다른 플립플롭을 많이 쓴다.

원래 플립플롭과 래치라는 용어는 크게 구분하지 않지만 클럭에 동기화된 Edge-sensitive Device가 아닌 것만 래치라고 부르는 경향이 있다. 그리고 클럭 동기화된 플립플롭은 이상적인 상황에서는 엣지가 발생한 순간에만 반응한다고 정의하나 현실에서는 트랜지스터가 신호 정류를 결정하는 타이밍이 있어서 엣지가 미묘하게 등변사다리꼴 형태로 기울어져 있기에 엣지 변화 구간 동안 신호가 변한다.

SR 플립플롭[편집 | 원본 편집]

두 개의 NAND가 서로의 출력을 상대방에게 되먹이는 구조에 더해 S와 R 입력부에 NAND 게이트를 하나씩 추가로 붙여서 두 입력부가 클럭 신호와 함께 들어가도록 함
클럭 신호에 동기화되는 SR 플립플롭(출처: 위키백과)

SR 플립플롭은 가장 기본이 되는 플립플롭 구조로, S(Set)와 R(Reset)에 모두 0을 입력하는 이상 현 상태를 유지한다. 만일 S와 R이 다르다면 특정 신호를 저장하며(출력 Q가 0으로 나오면 입력이 1인 신호가 R이고 1로 Q가 나오면 S의 입력이 1임) 둘 다 1인 경우는 고려하지 않는다(신호가 요동치는 비정상 상태로 간주). Q와 그 반전 Q'을 둘 다 뽑아낼 수 있기 때문에 데이터의 저장 기능을 구현했다는 사실에만 존재 의의가 있으며 후술할 JK 플립플롭 등의 유용한 발전형에 의해 현재는 이런 게 있다 정도의 간단한 배경 지식으로 알아두는 것이 좋다.

SR 플립플롭 진리표
Set Reset Quit
0 0 값 고정
0 1 0으로 Clear
1 0 1로 Set
1 1 Undefined

JK 플립플롭[편집 | 원본 편집]

SR 신호에서 정의되지 않은 S=1 & R = 1 상태를 토글 기능으로 바꾼 버전으로 SR 플립플롭보다 출력 조작이 쉬워 더 유용하게 사용할 수 있다. NOR로 만든 S-R 플립플롭의 두 출력을 각각 J, K 입력과 AND 처리하여 만든다(여기에 클럭 신호까지 삼중 AND할 수도 있다).

JK 플립플롭 진리표
J K Quit
0 0 값 고정
0 1 0으로 Clear
1 0 1로 Set
1 1 출력 반전(Toggle)

D 플립플롭[편집 | 원본 편집]

두 개의 NAND가 서로의 입력을 되먹이며 D 입력에 클럭 신호를 NAND한 다음 그 출력을 다시 E와 NAND핸 다른 출력과 함께 되먹임 회로에 전달
NAND로 구현한 D 플립플롭

D 플립플롭(D 래치)는 활성화 E 신호가 들어올 때에만 D 신호의 값으로 저장된 데이터를 갱신하는 구조다. 반드시 특정 에지에만 반응하며 클럭 한 사이클 내에만 지정된 데이터를 가지고 있어야 하는 경우(예: CPU 파이프라인에서 다음 단계 유닛에 전달할 다양한 신호의 전달 타이밍을 동기화하는 데에 버퍼 메모리 형태로 사용) 사용을 고려할 수 있다. 단일 비트 입력 후 매 사이클마다 Bit Shift Out을 유도하는 Single In, Parallel Out Shifter도 이걸로 만들 수 있다(여러 유닛에게 번갈아가며 활성화 신호를 줄 때 사용). 기본적으로는 클럭의 상승 엣지에만 반응해 출력을 결정하나 마스터/슬레이브 관계로 두 D 플립플롭을 직결하면 상승 엣지에 입력한 신호를 하강 엣지 타이밍에 출력시킬 수 있다.

초기화는 SR 플립플롭과 동일하게 S/R 신호를 이용한다. 왜냐하면 초기 상태를 D 입력으로만 할 수 없기 때문이다.

T 플립플롭[편집 | 원본 편집]

T 신호를 1로 넣으면 출력 값이 뒤집히는(Toggle) 플립플롭이다.

응용 회로[편집 | 원본 편집]

가산기(Adder)[편집 | 원본 편집]

가산기는 단순히 두 개의 디지털 신호를 받아 그 합(Sum)과 받아올림(Carry)를 출력하는 반가산기(Half Adder), 그리고 이전 가산기의 받아올림까지 같이 입력받아 합과 받아올림 두 신호를 출력하는 전가산기(Full Adder)로 나뉜다.

반가산기는 두 입력에 대해 합을 XOR 게이트, 받아올림을 AND 게이트로 출력하는 구조이며, 전가산기는 반가산기 하나로 구한 합에 이전 가산기의 받아올림 출력을 또 다른 반가산기로 합쳐 출력 합을 구하고 전가산기 내 두 반가산기의 받아올림을 OR 게이트에 입력하여 Carry 출력을 만든다.

BCD 출력 회로[편집 | 원본 편집]

BCD(Binary-Coded Decimal)은 이진수를 십진수 형태로 출력하는 방법으로 8421 코드(이진수를 그대로 한 자리 수의 십진법 수로 매칭, 이진법으로 0000~1001까지 사용하고 1010부터는 사용하지 않는다)와 2421 코드(Aiken Code라고도 하며 십진법 기준 0~4까지는 8421 코드와 똑같고 5부터는 1의 보수를 취하는 방법. 5를 0101 대신 1011에 매칭하여 이진법 기준 0101~1010의 범위를 사용하지 않는다고 생각해도 된다), 3 초과 코드(8421코드에 십진법 수 3을 더한 형태. 십진법 0이 이진법 0011, 십진법 9가 이진법 1100이다. 비트 반전만으로 완벽하게 1의 보수로 0~9가 대칭을 이룬다) 등 다양한 표기가 있다. 이진법 체계를 그대로 따르는 8421 코드가 숫자 표기에 직관적이므로 BCD 하면 8421 코드를 가리키는 경우가 많다.


MOD 6 Counter[편집 | 원본 편집]

1개의 입력 신호, 3개의 비트 출력을 하며 신호를 바꿀 때마다 0~5까지 State 및 출력값을 올리다 마지막에 0으로 되돌아가 순환하는 카운터이다.