티스토리 뷰

* 부울 대수

X와 Y의 수치가 아닌 논리적 상관관계를 다루는 것

 

* 논리 게이트의 종류

- AND: 곱하기로 표현 (A · B 또는 AB)

- OR: 더하기로 표현 (A+B)

- NOT: 위에 바 (bar)

위의 3가지가 가장 기본적인 게이트이며 이 3가지를 조합해서 나머지도 만들 수 있다.

 

- XOR: 동그라미 안에 더하기 들어가 있는 거... 두 데이터를 비교할 때 쓸 수 있다. X와 Y가 달라야 결과가 1

- NAND: AND의 부정. NAND만으로 모든 조합논리회로를 구현

- NOR: OR의 부정

- XNOR: XOR의 부정

 

* 논리식 간소화

- AND, OR에 대해 교환법칙, 결합법칙, 분배법칙 성립

- 멱등 법칙: A+A=A, A*A=A

- 보수 법칙: A+~A=1, A*~A=0

- 항등 법칙: A+0=A, A+1=1, A*0=0, A*1=A

- 드 모르간의 법칙: ~(A+B) = ~A*~B, ~(A*B) = ~A+~B

(풀어쓰면 NOT이 분배되면서 +랑 *가 서로 바뀌는 것)

- 복원 법칙: NOT을 두번 적용하면 원래 값이랑 같음

- 흡수 법칙: A+A*B = A, A*(A+B) = A

(편의상 AND를 *로, NOT을 ~로 표현했음)

 

이러한 법칙들을 이용해서 논리식을 간소화할 수 있다.

 

ex)

A+A*B = A*(1+B) = A*1 = A

A*(~A+B) = A*~A + A*B = 0 + A*B = A*B

 

* 카르노 맵

진리표를 약간 다르게 그린 다음 1끼리 묶어서 논리식을 간소화하는 방법. 예시를 보면서 이해하는게 낫다.

카르노맵의 왼쪽, 오른쪽에는 벽이 있는 것이 아니기 때문에 왼쪽 끝이랑 오른쪽 끝에 모두 1이 있는 경우 지령전 레이무A마냥 벽을 뚫고 넘어가서 사각형을 만들 수 있다.

또한 간소화 식은 항상 Unique하지는 않다. 묶을 수 있는 경우의 수가 여러가지인 경우도 있음.

 

 

* 조합 논리회로

- 반가산기 / 전가산기

덧셈을 하기 위한 회로. Half Adder는 왼쪽 그림처럼 XOR 한개, AND 한개로 이루어져 있다.

XOR의 결과가 SUM, AND의 결과가 CARRY로 간다 (둘 다 1이어야 자릿수가 올라가니까).

 

Full Adder는 Half Adder 두개 + OR로 구성. 뒷자리에서 올라온 Carry까지 입력으로 받아서 처리할 수 있게 했다.

 

Full Adder를 n개 붙이면 n비트 가산기 (병렬가산기, Parallel Adder) 가 된다.

 

 

- 인코더 / 디코더

인코더 (Encoder) 는 code로 만들어준다는 의미. 2^n비트를 넣으면 n비트로 압축해준다.

1000을 넣으면 00, 0100을 넣으면 01, 0010을 넣으면 10, 0001을 넣으면 11 이런 식.

디코더는 그의 반대.

 

그림에서 왼쪽이 인코더이며 AND, OR 하나씩과 NOT 두개로 구성.

디코더는 AND 4개랑 NOT 두개로 구성되어 있다 (4->2비트, 2->4비트 기준으로)

 

 

- 멀티플렉서 / 디멀티플렉서

일반 input 이외에 select input이라는게 있어서, select input의 값에 따라서 일반 input 중에 특정한 자리값을 그대로 선택해서 출력해주는 회로. 

일반 input이 2^n비트면 select input은 n비트 필요.

디멀티플렉서 (DeMUX) 는 물론 반대로 1비트의 일반 input이랑 n비트의 select input을 받아서 2^n비트로 내보내주는 것이다.

 

 

* 순차 논리회로

입력값 뿐 아니라 '현재 상태' 에 따라 출력이 결정됨. 기억 능력이 있음. 플립플롭 (FF) 이 대표적

 

- RS 플립플롭

R은 Reset, S는 Set. 

S=1, R=0이면 출력 Q=1 / S=0, R=1이면 출력 Q=0.

둘 다 0이면 현재 상태 Q를 유지하며, 둘 다 1인 경우는 정의하지 않는다 (무한루프가 발생함).

위 그림이 RS FF (정확히는 저기에 Clock까지 들어가야 FF고 저건 래치) 의 원리를 설명한 것. 출력인 Q값이 게이트 입력으로 다시 들어간다.

 

- JK 플립플롭

RS FF의 개량판으로 S -> J, R -> K로 이름을 바꿨다.

다른 동작은 RS랑 똑같고 J, K가 둘 다 1인 경우 Q에 NOT을 취하게 됨.

다른 모든 FF를 대체가능하며 가장 널리 쓰이는 FF 

 

- D 플립플롭

입력값 D=0이면 출력 Q=0, D=1이면 Q=1. 입력값을 그대로 저장한다.

 

- T 플립플롭

JK FF의 두 입력선을 하나로 묶은 것으로 T=0이면 변화없음, T=1이면 현재 상태 Q를 NOT시킴.

 

- Master-Slave 플립플롭

D FF 두개를 붙이고 인버터 (NOT) 를 단 것. '레이스 현상' 이란걸 없애려고 만들었단다.

 

+ 기사 책에는 나오지 않지만 플립플롭은 Latch라는 회로를 기초로 하고 있음.

Latch는 위와 같되 Enable 된 동안에는 언제든 상태가 변할 수 있는 것이고,

FF에는 위에서 설명한 것 뿐 아니라 C (Clock Pulse) 라는 입력이 하나 더 있어서 C값이 변할 때만 출력이 변할 수 있다. C가 1->0이 될 때 출력이 변하는 걸 Falling Edge, 반대를 Rising Edge라고 함.

FF를 이용하면 Clock을 이용한 속도 조절이 가능하기 때문에 더 안정적이다. 그래서 대부분 FF를 사용.

 

* 레지스터와 카운터

- 레지스터: n비트 레지스터 = n비트 플립플롭. CPU 내부에서 명령어나 연산 중간값 등을 임시저장하는 기억장치.

- 카운터 (Counter): 이름대로 숫자를 순서대로 세는 회로. n개의 플립플롭으로 2^n-1까지 카운트 가능하다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함