아래 사진은 x, y, z 를 입력으로 받는 불 함수의 진리표이다. 이 테이블은 x, y, z의 값에 따라 나올 수 있는 결과의 모든 경우의 수를 작성한 것이다. 그리고 이 진리표를 통해 입력을 3개 받고 하나의 출력값을 반환하는 회로를 만들려면 먼저 불 표현식으로 나타낼 수 있어야 한다.
"Bool Function 만들기"
저 모든 경우를 담는 식을 한 번에 기술하기는 어렵다. 그러므로 한 행씩 식을 도출한다.
그리고 이때 자신의 행에는 true고, 다른 행은 모두 false인 식을 찾아야 한다.
세번째 행은 not(X) and Y and not(Z)
다섯번째 행은 X and not(Y) and not(Z)
일곱번째 행은 X and Y and not(Z)
그리고 식을 간단하게 하려면, 각 식을 합하면(or) 된다.
(not(X) and Y and not(Z)) or (X and not(Y) and not(Z)) or (X and Y and not(Z) )
= (not(X) and Y) or (X and not(Y)) or (X and Y) # 각 식에 not(Z)는 아무 영향이 없어서 제거
이게 f(x, y, z)라고 했을 때, and, or, not 으로 모든 논리식을 표현할 수 있다. 사실 컴퓨터가 덧셈으로만 모든 사칙연산을 할 수 있는 것처럼 or도 필요 없다. not과 and만 사용해서 표현 가능하다. not(not(X) and not(Y)) 에 드모르간 법칙을 사용하면 not(not(X or Y))이고 이중 부정이므로 (X or Y)이다.
"로직 게이트"
로직 게이트는 Bool function을 물리적으로 구현한 것이다. and, or, not 세 가지의 기초적인 로직 게이트가 있다. 그리고 이 로직 게이트를 통해서 Xor, Nand, Nor 등 더 복잡한 로직 게이트를 구현할 수 있다. 또한, 위와 같은 f(x, y, z) 등 원하는 함수도 구현할 수 있다.
interface는 우리가 구현하고자 하는 것(what)이고, 이를 구현하는 방법(how)은 많다. 3개의 입력 값을 받아서 하나의 출력값을 반환하는 2andWay 게이트를 생각해보자. (실제 있는 로직 게이트는 아니고 내가 이름 붙였다.) 이것은 2개의 and 게이트로 만들 수 있다. 그리고 이 2개의 and 게이트를 하나의 그룹으로 묶어서 2andWay 게이트라고 부를 수 있다. 인터페이스는 구현이 추상화된 결과물이며 이를 받아들이는 사람은 그 안이 어떻게 생겼는지는 몰라도 된다.
위와 같은 방법으로 원하는 로직을 구현할 수 있으며 하나의 게이트 안에는 여러 개의 또 다른 게이트로 이루어질 수 있다.
'개발 이야기 > computer science' 카테고리의 다른 글
CPU 클럭 싸이클(clock cycle) 높이기 (0) | 2021.02.01 |
---|---|
multi bit buses / 로직 게이트에 여러 비트 정보 전달하기 (0) | 2021.01.31 |
로직 게이트 / Xor, Nand, Nor, Mux, DMux (0) | 2021.01.31 |
[Bool Algebra] 논리 연산 (0) | 2021.01.30 |
컴퓨터 과학, 왜 공부해야 하는가 (0) | 2021.01.29 |