본문으로 건너뛰기
code0.HDL

논리와 진리표

입력 비트에서 출력 비트를 정하는 규칙인 NOT·AND·OR·XOR, 그 규칙을 빠짐없이 적는 진리표, 말로 된 조건을 논리식으로 바꾸는 방법을 다룹니다.

이 장에서 배울 내용

  • NOT·AND·OR·XOR를 완전한 진리표로 나타낼 수 있습니다
  • 말로 된 조건을 논리식으로 옮기고 진리표로 확인할 수 있습니다
  • 다수결 같은 3입력 함수를 게이트로 구성할 수 있습니다
이 장에서 배우는 개념
  • NOT·AND·OR·XOR
  • 진리표
  • 조건을 논리식으로 쓰기
먼저 알아야 할 개념

1. 게이트는 입력 비트로 출력 비트를 정하는 규칙입니다

논리 게이트는 입력으로부터 출력 비트를 계산하는 기본 조합 회로 요소입니다. 여기서 다룰 게이트는 입력이 한두 개이고 저장된 상태가 없습니다. 이상적인 모델에서는 현재 입력에 따라 출력이 정해지며, 실제 게이트에서는 입력이 바뀐 뒤 전파 지연을 거쳐 출력이 바뀝니다.

먼저 네 가지 게이트의 논리 기능을 익힙니다.

게이트출력이 1이 되는 조건읽는 법
NOT입력이 0일 때반전
AND두 입력이 모두 1일 때둘 다
OR두 입력 가운데 하나라도 1일 때하나라도
XOR두 입력이 서로 다를 때다르면

아래 실험에서 a와 b를 눌러 0과 1을 바꾸고, 출력 y가 1이 되는 조합을 찾아 보세요. 표에서 현재 입력에 해당하는 행이 함께 표시됩니다.

개념 실험 · and

컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.

입력

출력

y
0
진리표
aby현재 입력
000◂ 현재 입력
010
100
111

2. 진리표는 규칙을 빠짐없이 적은 표입니다

진리표는 가능한 입력 조합을 모두 한 행씩 나열하고, 각 행에 출력을 적은 표입니다. 입력이 n개이면 행은 2^n개입니다. 입력 두 개는 네 행, 입력 세 개는 여덟 행입니다.

진리표는 조합 회로에서 각 이진 입력 조합에 대한 안정된 출력값을 서술합니다. 같은 진리표를 가진 두 회로는 같은 입력에 같은 논리값을 출력하지만, 지연 시간·면적·소비 전력까지 같은 것은 아닙니다.

XOR의 진리표를 직접 만들어 보세요. 네 조합을 모두 눌러 y를 확인하고, 1이 나오는 행이 두 개라는 사실을 표에서 확인합니다.

개념 실험 · xor

컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.

입력

출력

y
0
진리표
aby현재 입력
000◂ 현재 입력
011
101
110

확인 문제

a = 1, b = 0일 때 a XOR b의 값은 무엇입니까?

확인 문제

입력이 세 개인 회로의 진리표는 몇 행입니까?

3. 조건을 논리식으로 씁니다

회로의 요구사항은 보통 말로 주어집니다. 말로 된 조건에서 어느 게이트를 쓸지 고르는 기준은 다음과 같습니다.

조건의 표현게이트
~이고 ~일 때AND
~이거나 ~일 때OR
~가 아닐 때NOT
둘이 서로 다를 때XOR
둘이 같을 때XNOR (XOR의 반전)
둘 다 0일 때NOR (OR의 반전)

예를 들어 경보 회로의 요구사항이 "문이 열려 있고(door = 1) 경비가 켜져 있으면(armed = 1) 경보를 울린다"라면 식은 alarm = door AND armed입니다. 두 조건이 모두 1이어야 하므로 AND를 고릅니다. "문이 열려 있거나 창문이 열려 있으면"이라면 OR입니다.

주의. 식을 세운 뒤에는 진리표의 네 행을 모두 확인합니다. 요구사항이 말하지 않은 조합, 예를 들어 "문은 닫혔는데 경비만 켜진 경우"에도 식이 의도한 값을 내는지 보아야 합니다.

확인 문제

두 입력이 같을 때만 1을 내야 합니다. 어느 연산을 고르겠습니까?

답

확인 문제

NAND는 AND의 출력을 반전한 게이트입니다. a = 1, b = 1일 때 a NAND b는 무엇입니까?

4. 변형: 입력이 세 개인 다수결

입력이 세 개인 회로도 같은 방법으로 읽습니다. 아래 전가산기의 cout는 세 입력 a, b, cin 가운데 둘 이상이 1일 때 1이 되는 다수결 출력입니다. 여덟 행을 모두 눌러 cout가 1인 행을 세어 보세요. sum은 다음 단원에서 다룹니다.

개념 실험 · full-adder

컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.

입력

출력

sum
0
cout
0
진리표
abcinsumcout현재 입력
00000◂ 현재 입력
00110
01010
01101
10010
10101
11001
11111

확인 문제

세 입력 가운데 둘 이상이 1인 조합은 모두 몇 가지입니까?

5. 각 언어에서 쓰는 기호

세 언어는 같은 게이트를 다른 기호로 씁니다. 지금 외울 필요는 없고, 각 언어 과정에서 다시 설명합니다.

게이트VerilogBSVChisel
NOT~a (비트), !a (논리)~a (Bit), !a (Bool)~a (UInt), !a (Bool)
ANDa & b, a && ba & b, a && ba & b, a && b
ORa | b, a || ba | b, a || ba | b, a || b
XORa ^ ba ^ ba ^ b

참고. 비트 연산자와 논리 연산자의 차이는 뒤의 장에서 설명합니다. 값이 확정된 한 비트에 대해서는 대응하는 연산의 논리값이 같지만, 사용할 수 있는 피연산자 타입과 결과 타입은 언어마다 다릅니다.

6. 정리

  • 게이트는 기억하지 않습니다. 출력은 현재 입력만으로 정해집니다.
  • 진리표는 이진 입력 조합마다 한 행을 두며, 안정된 논리값의 관계를 서술합니다. 물리적 지연까지 나타내지는 않습니다.
  • 말로 된 조건은 "이고"는 AND, "이거나"는 OR, "~가 아닐 때"는 NOT, "다르면"은 XOR로 옮깁니다.
  • 식을 세운 뒤 진리표의 모든 행을 확인합니다.

다음 장에서는 게이트를 여러 개 이어 비트를 고르고 더하는 조합 회로를 만듭니다.

확인 지점

이 장의 확인 문제에 답하세요