불 논리 정리

Lee Seung Jae·2022년 2월 21일
0

모든 코드는 여기

불 논리

NAND 게이트

Nand 게이트는 유니버셜 로직 게이트라고도 부르는데

이 게이트 하나만으로 모든 바이너리 동작을 제어할 수가 있다.

Nand게이트는 다음과 같은 불 함수를 계산한다.

abNand(a, b)
010
011
101
110

기본 논리 게이트

Not

단일 입력 Not게이트 Converter라고 불리며 input값의

반대값으로 Output을 내준다.

inout
01
10

And

And는 곱연산으로서, 입력 값이 둘다 1일 경우에만 1을 출력해준다.

abAnd(a, b)
000
010
100
111

Or

Or는 합연산으로, 입력값 2개중 1개가 1이라면 1을 출력해준다.

abOr(a, b)
000
011
101
111

Xor

배타적 논리합 이라고 불리며, 두 입력값이 서로 다를 경우 1

그렇지 않으면 0을 출력한다.

abXor(a, b)
000
011
101
110

멀티플렉서(Multiplexer)

멀티플렉서는 3입력 게이트로 selector 비트를 이용하여

나머지 두개 데이터 비트 입력중 하나를 선택.

abselMux(a, b)
0000
0100
1001
1101
0010
0111
1010
1111

image

디멀티플렉서

이름만봐도 멀티플렉서의 정반대 기능을 수행한다고 알 수 있다.

디멀티플렉서는 선택한 비트에 따라 출력선 중 하나를 선택해 입력 신호를 보낸다.

selab
0in0
10in

image (1)

멀티비트

멀티비트는 버스라는 멀티배열에 대한 연산을 수행하게 되어있다.

이 연산들은 쭉 같은 논리연산을 나열하여 비트의 쌍마다 연산을 수행해주는 것이다.

여기서는 16비트에 대한 연산을 진행했다.

AND 연산으로 예를 들어보겠다.

원래 하나의 비트 XY에 대하여 결과값을 AND(X,Y) 했던것을 16개를 동시에 진행한다고

생각하면 된다.

아래의 모든 예시는 전부 16비트 연산으로 이루어져있다.

AND16

X0 ~ X15Y0 ~ Y15AND16(X,Y)
000000000000000000000000000000000000000000000000
000000000000000011111111111111110000000000000000
111111111111111100000000000000000000000000000000
111111111111111111111111111111111111111111111111

기본 게이트의 연산과 같은데 갯수만 늘어난 것이므로 설명은 생략하도록 하겠다.

OR16

X0 ~ X15Y0 ~ Y15OR16(X,Y)
000000000000000000000000000000000000000000000000
000000000000000011111111111111111111111111111111
111111111111111100000000000000001111111111111111
111111111111111111111111111111111111111111111111

NOT16

INNOT16(X,Y)
00000000000000001111111111111111
11111111111111110000000000000000

MUX16 멀티플렉서

XYSELMUX16(X,Y,SEL)
0000000000000000000000000000000000000000000000000
0000000000000000000000000000000010000000000000000
0000000000000000111111111111111100000000000000000
0000000000000000111111111111111111111111111111111
1111111111111111000000000000000001111111111111111
1111111111111111000000000000000010000000000000000
1111111111111111111111111111111101111111111111111
1111111111111111111111111111111111111111111111111

다입력

입력이 여러개인 다입력 게이트이다.

다입력에는 다입력/멀티비트 도 같이 묶어서 정리하겠다.

Or8Way

image

Or8Way의 논리게이트 인터페이스는 다음과 같다.

Mux4Way

image

이것의 멀티비트라고 한다면

이 같은 그림이 16개가 같이 수행된다고 생각하면 된다.

셀렉터가 2개이기 때문에

ABCDSEL[2]MUX16(X,Y,SEL)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000010000000000000000
0000000000000000000000000000000000000000000000000000000000000000100000000000000000
0000000000000000000000000000000000000000000000000000000000000000110000000000000000
0001001000110100100110000111011010101010101010100101010101010101000001001000110100
0001001000110100100110000111011010101010101010100101010101010101011001100001110110
0001001000110100100110000111011010101010101010100101010101010101101010101010101010
0001001000110100100110000111011010101010101010100101010101010101110101010101010101

sel 0번째로 a,b 그리고 c,d 를 연산 한후에
나온 결과값 o1, o2를 sel 1번째로 연산하여 결과값을 출력해주는 구조이다.

Mux8Way

image

4Way의 구조를 2개로 만들어서 결과값을 도출해주는 8입력 멀티플렉서이다.

abcdefghselout
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000
000100100011010000100011010001010011010001010110010001010110011101010110011110000110011110001001011110001001101010001001101010110000001001000110100
000100100011010000100011010001010011010001010110010001010110011101010110011110000110011110001001011110001001101010001001101010110010010001101000101
000100100011010000100011010001010011010001010110010001010110011101010110011110000110011110001001011110001001101010001001101010110100011010001010110
000100100011010000100011010001010011010001010110010001010110011101010110011110000110011110001001011110001001101010001001101010110110100010101100111
000100100011010000100011010001010011010001010110010001010110011101010110011110000110011110001001011110001001101010001001101010111000101011001111000
000100100011010000100011010001010011010001010110010001010110011101010110011110000110011110001001011110001001101010001001101010111010110011110001001
000100100011010000100011010001010011010001010110010001010110011101010110011110000110011110001001011110001001101010001001101010111100111100010011010
000100100011010000100011010001010011010001010110010001010110011101010110011110000110011110001001011110001001101010001001101010111111000100110101011

DMux4Way

반대인 디 멀티플렉서이다.

여기부터는 실습에서도 멀티비트는 하지 않았기에 하나만 쓰도록 하겠다.

이건 입력을 1개를 받아서 4개의 결과값을 도출해주는 정반대 플렉서이다.

image

inselabcd
0000000
0010000
0100000
0110000
1001000
1010100
1100010
1110001

DMux8Way

image

이것도 Mux8Way와 반대의 특성을 가지고 있으며 4Way 2개가 붙어진 것이다.

inselabcdefgh
000000000000
000100000000
001000000000
001100000000
010000000000
010100000000
011000000000
011100000000
100010000000
100101000000
101000100000
101100010000
110000001000
110100000100
111000000010
111100000001

정리

이렇게 1장 불 논리가 끝이났다.

처음 구현을 시작했을 때에는 NAND 게이트로 쭉쭉 구현을 진행했는데

특징이라고 한다면 컴파일 자체가 가령 Or를 구현해야 한다고 치면

Or만 써서 바로 구현할 수가 없게 해놨다.

이런 함수를 하나씩 쓰려면 그 전의 동작을 알게끔 한것인가?

하는 생각이 들었다.

그리고 마지막으로는 결국 구현이 다 되어서 BUILTIN이라는 기능으로

tools - builtInChips 안의 자바 클래스파일들 이 있으면

해당 기능을 사용할 수 있었다.

마지막으로는 그것으로 구현해두고 나머지는 주석처리를 진행했다.

이진수를 다루면서 완전 밑바닥을 체험하니 재밌기도 하고 어렵기도 했다.

profile
💻 많이 짜보고 많이 경험해보자 https://lsj8367.tistory.com/ 블로그 주소 옮김

0개의 댓글