컴퓨터 내부에서 수행되는 "기계어"는 2진수 형태입니다. 그러나 프로그래머가 기계어를 직접 다루는 것은 너무 어렵고 힘들기에 "고급 프로그래밍 언어(High-Level)"를 사용합니다. 즉, 고급 프로그래밍 언어는 사람에게 적합한 언어이고 기계어는 컴퓨터에게 적합한 언어입니다. 그렇다면 여기서 궁금증이 하나 생길 수 있습니다. "기계어가 컴퓨터에게 적합한 언어라면 기계어의 밑에는 무엇이 있을까" 이 질문은 논리 회로를 공부하기 위해 반드시 던져봐야 하는 질문입니다. 지금부터 이 질문에 대해 답을 구해보며 논리 회로에 대해 본격적으로 공부해보도록 하겠습니다.
논리 회로 기초
기계어 밑에는 무엇이 있을까? 이 질문에 대한 답은 간단합니다. 바로 "하드웨어"가 있습니다. 하드웨어 위에서 기계어가 수행되는 것입니다. 기계어가 어떻게 하드웨어에 의해서 수행되는 지를 알아보겠습니다.
기계어 레벨 밑에는 논리 회로 레벨이 있고, 논리 회로 레벨 아래에 전자 소자 레벨과 소재 레벨이 있습니다. 전자 소자 레벨과 소재 레벨은 물리학과 전자 공학에서 다루는 컴퓨터 소자 제작에 해당합니다. 전자 소자들을 통해 0과 1을 이용하여 연산을 수행하는 방법은 다음과 같습니다.
기본적으로, 전기 신호의 전압을 이용해 전압이 5V이면 1, 전압이 0V이면 0으로 표현하면, 전기 신호로 0과 1이 표현 가능합니다. 컴퓨터에서 전기 신호에 따라 가장 기본적인 연산을 하는 전자 소자를 "게이트"라고 합니다. 게이트는 하나 이상의 입력을 받아 하나 이상의 출력 신호를 생성합니다. 게이트가 모여 회로를 이루며, 회로가 모여 컴퓨터가 완성됩니다.
기본 게이트
논리 회로를 만드는데 사용되는 기본 소자가 바로 "게이트"이며, 아래 표에 있는 것이 게이트들입니다.
게이트의 논리연산자는 다음과 같습니다.
- AND 연산자: 조건이 모두 참이어야 참을 반환한다.
- OR 연산자: 조건 중에서 하나라도 참이면 참을 반환한다.
- NOT 연산자: 조건의 결과가 참이면 거짓을, 거짓이면 참을 반환한다.
- XOR 연산자: 두 조건이 서로 다르면 참을 반환한다.
- NAND 연산자: AND 연산자와 NOT 연산자를 결합한 것으로, AND 연산자의 연산 결과를 부정한다.
- MOR 연산자: OR 연산자와 NOT 연산자를 결합한 것으로, OR 연산자의 연산 결과를 부정한다.
논리 회로 표현 방식
논리 회로의 동작 원리를 설명하기 위한 논리 회로 동작, 기능을 기술하는 방식은 "논리식", "논리도", "진리표" 이렇게 3가지가 있습니다.
논리식 (Logic Expression)
논리 연산자로 구성된 식별자들의 나열로써 표현되는 식입니다.
논리도 (Logic Diagram)
논리 게이트들을 이용해서 그림으로 표현하는 방법입니다.
진리표 (Truth Table)
논리 회로에 입력 가능한 모든 경우의 수에 대응하는 회로의 출력값을 정의한 표입니다.
표현 방식의 관계 (Relationship of Expression)
💡 이 3가지 표현 방법은 밀접한 관계를 가지고 있습니다. 논리식이 주어지면 1대 1로 대응되는 논리도를 그릴 수 있습니다. 반대로 논리도가 주어지면 1대 1로 대응되는 논리식을 그릴 수 있습니다. 이때, 중요한 것은 하나의 진리표를 구현하는 다수의 방법이 있을 수 있다는 것입니다. 그렇기에 여러 구현 방법 중 최적의 방법을 찾는 것이 최종 목표입니다.
논리 회로 2가지 종류 (조합 논리 회로, 순서 논리 회로)
논리 회로에서는 게이트를 아주 많이 연결하여 컴퓨터의 회로를 만들게 되는데, 이때 게이트를 이용하여 회로를 만드는 방법은 크게 2가지로 나눌 수 있습니다.
- 조합 논리 회로(Combinational Logic Circuit): 입력값만으로 출력값이 결정되는 회로입니다.
- 순서 논리 회로(Sequential Logic Circuit): 입력값과 회로 내부의 상태가 출력값을 결정하는 회로입니다.
조합 논리 회로의 출력은 언제나 입력 결과에만 의존합니다. 즉, 입력이 동일하다면 언제나 같은 값을 출력한다는 뜻입니다. 그러나 순서 논리 회로는 회로 내부의 상태가 출력값에 영향을 끼치기에 입력이 동일해도 출력값이 다를 수 있습니다.