Altifigence Academy

9 / 63 · 개념

카르노 맵과 don’t-care의 조건

그레이 코드로 배열한 셀을 묶어 논리식을 줄이고, 사용하지 않는 입력에 어떤 가정을 두었는지 밝힙니다.

진리표에서 구현 방법 찾기

진리표진리표 가능한 입력 조합을 빠짐없이 나열하고 각 조합의 출력을 적은 표입니다. 시간에 따른 변화는 파형으로 따로 확인합니다. 자세히 보기가 기능을 정의한다면 논리 최소화는 그 기능을 어떤 식으로 구현할지 결정하는 단계입니다. 입력이 세 개일 때 minterm 번호는 A를 최상위 비트로 놓은 이진수 ABC로 정의하겠습니다.

F(A,B,C)=Σm(1,3,4,5,7)F(A,B,C)=\Sigma m(1,3,4,5,7)

예를 들어 minterm 4는 ABC=100입니다. 나열되지 않은 0, 2, 6에서는 출력이 0입니다. 다섯 개의 곱 항을 모두 사용하는 대신, 한 비트만 다른 항들을 묶어 그 비트를 식에서 없앨 수 있습니다.

카르노 맵은 순서가 다른 진리표입니다

열을 BC=00, 01, 11, 10 순서로 배치합니다. 이 순서는 인접한 열 사이에서 한 비트만 바뀌는 그레이 코드 순서입니다. 맨 왼쪽과 맨 오른쪽도 인접합니다.

A / BC00011110
00110
11110

묶음은 직사각형으로 만들고 셀 수는 1,2,4,8,…1,2,4,8,\ldots이어야 합니다. 0인 셀을 포함하면 기능이 달라집니다. 같은 1을 여러 묶음에 포함하는 것은 허용됩니다.

  1. C=1인 두 열의 네 셀을 묶으면 A와 B가 변해도 출력이 1입니다. 남는 항은 C입니다.
  2. A=1인 행의 BC=00과 01을 묶으면 C만 변합니다. 남는 항은 AB‾A\overline B입니다.
  3. 두 묶음을 OR로 합치면 모든 1을 덮고 모든 0을 피합니다.
F=C+AB‾F=C+A\overline B

8개 입력 조합에서 원래 정의와 최소화한 식의 출력이 같은지 확인하세요. 식이 짧아졌다는 사실과 기능이 같다는 사실을 별도로 확인하는 습관이 중요합니다.

아래 그림은 위 카르노 맵의 두 묶음을 식으로 옮기는 과정을 보여 줍니다. C 묶음에서는 A와 B가, 두 셀 묶음에서는 C가 변하므로 그 변수를 항에서 제거합니다.

묶음에서 사라지는 변수
  1. m1,3,5,7: A와 B가 변해도 C=1
  2. m4,5: A=1, B=0에서 C만 변함
  3. 두 묶음의 합: F = C + A · NOT B

don’t-care로 최적화할 때는 입력 조건이 필요합니다

시스템에서 ABC=000이 절대 들어오지 않는다고 가정해 봅시다. 그 한 셀을 X로 놓으면 필요에 따라 0 또는 1로 사용할 수 있습니다. B=0인 네 셀을 묶어 더 단순한 식을 얻습니다.

Fdc=C+B‾F_{\mathrm{dc}}=C+\overline B

새 식은 ABC=000에서 1입니다. 기존의 완전한 진리표와는 다릅니다. 따라서 ‘같은 회로’라고 말하려면 입력이 000이 아니라는 조건을 포함해야 합니다. 초기화 중이나 오류 복구 중에 000이 나타날 수 있다면 이 최적화는 시스템 요구사항을 충족하지 못할 수 있습니다.

식의 최소화와 칩의 최소화는 다릅니다

리터럴 수가 적은 식이 특정 표준 셀 라이브러리에서 면적·지연·전력까지 항상 최적인 것은 아닙니다. 부하, fan-out, 사용 가능한 복합 게이트, 배선, glitch가 결과에 영향을 줍니다. 이번 단계에서는 두 식의 기능이 같은지, 어떤 입력 조건을 가정했는지 확인하고, 물리적 비용은 합성·타이밍 결과로 판단합니다.

추가 읽기: MIT OpenCourseWare — Combinational Logic

실습 · 묶음의 겹침과 don’t-care의 조건 확인하기

C와 A·NOT B에서 더 큰 묶음으로

F = C + A · ¬B

3입력 진리표 · X는 명세상 무관한 출력
ABCF
0000
0011
0100
0111
1001
1011
1100
1111
  1. C 묶음을 누릅니다. 네 셀 안에서 A와 B가 모두 변하므로 C만 남습니다.
  2. A·¬B 묶음을 누릅니다. m4와 m5를 덮고, m5는 C 묶음과 겹칩니다. 겹침은 허용되지만 0인 셀을 포함하는 것은 허용되지 않습니다.
  3. m0을 두 번 눌러 0 → 1 → X로 바꿉니다. X로 바꾸면 d(0)을 포함한 불완전 명세가 됩니다. B=0인 셀을 더 큰 묶음으로 합칠 수 있어 식은 C+B‾C+\overline B가 됩니다.
  4. m0을 한 번 더 눌러 0으로 되돌립니다. m0의 출력을 다시 0으로 지정했으므로 더 큰 묶음은 사라져야 합니다.

묶음을 선택해도 셀의 값은 바뀌지 않습니다. 모든 1을 덮는 전체 식은 유지되고 지금 살펴보는 항 하나만 테두리로 강조됩니다. 여기서는 곱 항 수가 가장 적은 식을 찾고, 그 수가 같으면 리터럴 수가 가장 적은 식을 찾습니다. 이런 식이 여러 개면 한 가지만 보여 줍니다.

직접 생각해 보기

m0을 X로 바꾸어 F=C+NOT B로 구현했습니다. 리셋 중 ABC=000이 들어올 수 있고 그때 F=0이 필요하다는 요구가 추가되면 이 최적화를 유지할 수 있나요?

해설 보기

유지할 수 없습니다. 추가된 요구사항에 따르면 m0의 출력은 다시 0이어야 합니다. 최적화한 식은 000에서 1이므로 요구를 위반하며, 원래 식인 C+A·NOT B처럼 출력이 지정된 모든 행을 만족하는 식으로 돌아가야 합니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.