1. 논리회로 설계에 대해
앞서 논리연산과 논리 게이트를 알아봤으므로 원하는
목표를 설정해두고 그에 맞는 논리회로(Logic circuit)를 설계하고자 한다. 여기서는 입력과 출력 사이의 관계를 진리표로 나열해 두어 이에 따라 논리식으로 변환 후 논리식의 간소화(Simplification)과정을 거친다. 그 정리된 최종 논리식을
바탕으로 논리회로를 설계한다.
이러한 과정을 완성된 진리표를 기반으로 한 문제와 논리 해석이 필요한 서술형 문제로 나누어 따라해본다.
2. 진리표 기반 논리회로 설계
입력 |
출력 |
||||
일련번호 |
B |
C |
D |
Q |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
2 |
0 |
0 |
1 |
0 |
0 |
3 |
0 |
0 |
1 |
1 |
1 |
4 |
0 |
1 |
0 |
0 |
0 |
5 |
0 |
1 |
0 |
1 |
1 |
6 |
0 |
1 |
1 |
0 |
0 |
7 |
0 |
1 |
1 |
1 |
1 |
8 |
1 |
0 |
0 |
0 |
0 |
9 |
1 |
0 |
0 |
1 |
0 |
10 |
1 |
0 |
1 |
0 |
0 |
11 |
1 |
0 |
1 |
1 |
1 |
12 |
1 |
1 |
0 |
0 |
1 |
13 |
1 |
1 |
0 |
1 |
1 |
14 |
1 |
1 |
1 |
0 |
1 |
15 |
1 |
1 |
1 |
1 |
1 |
위와 같이 입력의 모든 경우에 대해 진리표로 정리할 수 있다면 논리회로의 설계는 쉽다. 먼저 출력이 발생하는 경우의 입력에 대해, 각 입력들이 서로가 반드시 필요하므로 논리곱으로 나열한다. 그리고 출력이 발생되는 논리항에 대해, 각 논리항들 중 하나만 있어도 출력이 생기므로 논리합으로 나열한다. 논리표를 바탕으로 이상의 내용을 따라하면 아래와 같다.
Q(A,B,C,D)=∑m(3,5,7,11,12,13,14,15)=m(3)+m(5)+m(7)+m(11)+m(12)+m(13)+m(14)+m(15)
Q=(A’·B’·C·D)+(A’·B·C’·D)+(A’·B·C·D)+(A·B’·C·D)+(A·B·C’·D’)+(A·B·C’·D)+(A·B·C·D’)+(A·B·C·D)
(여기서 ‘m(일련번호)’은 최소항(minterm)의 머리글자를 따온 것으로 모든 변수가 한 번씩 사용되어 곱의 형태를 이루는 항을 말한다. m(0)라면 A’·B’·C’·D’, m(15)이라면 A·B·C·D가 된다.)
위와 같이 논리식이 길게 표현되거나 많은 수의
게이트로 표현되는데 이것들은 논리연산의 법칙에 따라서 짧은 논리식과 적은 수의 게이트를 갖는 논리회로로 정리할 수 있다. 이것을 논리식의 간소화 또는 논리회로의 간소화라고 한다.
상기한 논리식을 정리하면 아래와 같다.
Q=(A’·B’·C·D)+(A’·B·C’·D)+(A’·B·C·D)+(A·B’·C·D)+((A·B)·((C’·D’)+(C’·D)+(C·D’)+(C·D))) (분배)
=(A’·B’·C·D)+(A’·B·C’·D)+(A’·B·C·D)+(A·B’·C·D)+(A·B·(1))) (상보)
=(A’·B’·C·D)+(A’·B·C’·D)+(A’·B·C·D)+(A·B’·C·D)+(A·B) (항등)
=(A’·B’·C·D)+(A’·B·C’·D)+(A’·B·C·D)+(A·B’·C·D)+(A·B)+(A·B·C·D) (흡수)
=(((A’·B’)+(A’·B)+(A·B’)+(A·B))·(C·D))+(A’·B·C’·D)+(A·B) (분배)
=((1)·(C·D))+(A’·B·C’·D)+(A·B) (상보)
=(C·D)+(A’·B·C’·D)+(A·B) (항등)
=((C·D)+(A’·B·C·D))+(A’·B·C’·D)+(A·B) (흡수)
=(C·D)+((A’·B·C)+(A’·B·C’))·D)+(A·B) (분배)
=(C·D)+((A’·B)·D)+(A·B) (단일)
=(C·D)+(A’·B·D)+((A·B)+(A·B·D)) (흡수)
=(C·D)+(A·B)+(((A’)+(A))·B·D) (분배)
=(C·D)+(A·B)+((1)·B·D) (상보)
=(C·D)+(A·B)+(B·D) (항등)
진리표의 입력을 정리된 논리식이나 입력에 대입하는 것으로 출력이 일치함을 확인할 수 있다. 논리회로 또한 10개의 NOT 게이트+8개의 4입력 AND 게이트 회로에서 3개의 2입력 AND 게이트 회로로 규모가 대폭 줄었으며 입력과 출력관계는 동일함을 확인할 수 있다.
3. 서술 기반 논리회로 설계
논리에서 출력에 대한 모든 경우의 수를 알 수 있는 경우가 있지만 일부는 알 수 없는 경우도 있다. 특히 말이나 글로 표현된 경우 언급이 빠지거나 애매하게 표현되어 참과 거짓을 구분할 수 없는 경우가 발생한다. 예시로 아래의 서술에 따라 논리를 정리해본다.
“소규모의 체육관이 있고 예약된 A팀, B팀, C팀, D팀이 사용할 일정에 맞추어 개관하려고 한다. 먼저, A팀과 B팀은 규모가 커서 동일에 예약할 수 없다. C팀은 A팀, B팀 중 하나가 있다면 반드시 따라가고 단독으로 예약하지 않는다. D팀은 다른 팀과 관계없이 가능한 예약한다.”
경우의 수를 따지는 점에서 수학의 통계학과 비슷하지만
논리는 참과 거짓으로만 표현이 가능하다. 해당 서술에서 빠진 내용은 참과 거짓으로 표현할 수 없는데
이를 무관항(Don’t care)라고 칭하고 진리표에서 ‘X’로
표시한다. 즉, 해당 항이 있거나 없거나 최초의 서술에 영향을
주지 않으므로 논리적으로 성립된다는 것이다.
제시된 문제를 하나씩 살펴보면 A팀과 B팀이
같이 있는 경우가 없으므로 A·B를 갖는 m(12), m(13), m(14), m(15)는
모두 ‘0’이 된다. C팀은 단독으로 가지 않으므로 A’·B’·C·D’인 m(2)가 ‘0’이 되고 A팀 또는 B팀에
반드시 따라가므로 A·C’와
B·C’를
갖는 m(4), m(5), m(8), m(9)는 모두 ‘0’이
된다. 반대로 A·B’·C 또는 A’·B·C를 포함하는 m(6), m(7), m(10), m(11)은
모두 ‘1’이 된다. D팀은 가능한 모두 가므로 나머지 중
D가 들어간 모든 항이 ‘1’이 된다. A, B, C, D 네 팀에 대해 모두 예약이 없을 경우에 대한 서술이 없으므로 A’·B’·C’·D’인 m(0)은
무관항 ‘X’가 된다. 이것을 진리표로 정리하면 아래와 같다.
입력 |
출력 |
||||
일련번호 |
A |
B |
C |
D |
Q |
0 |
0 |
0 |
0 |
0 |
X |
1 |
0 |
0 |
0 |
1 |
1 |
2 |
0 |
0 |
1 |
0 |
0 |
3 |
0 |
0 |
1 |
1 |
1 |
4 |
0 |
1 |
0 |
0 |
0 |
5 |
0 |
1 |
0 |
1 |
0 |
6 |
0 |
1 |
1 |
0 |
1 |
7 |
0 |
1 |
1 |
1 |
1 |
8 |
1 |
0 |
0 |
0 |
0 |
9 |
1 |
0 |
0 |
1 |
0 |
10 |
1 |
0 |
1 |
0 |
1 |
11 |
1 |
0 |
1 |
1 |
1 |
12 |
1 |
1 |
0 |
0 |
0 |
13 |
1 |
1 |
0 |
1 |
0 |
14 |
1 |
1 |
1 |
0 |
0 |
15 |
1 |
1 |
1 |
1 |
0 |
서술에서도 알 수 있지만 A팀이나 B팀만 있으면 D팀의 예약 여부와 관계없게 되는데 이것 또한 결과에 영향을 미치지 않으므로 무관항으로 표현이 가능하다. 마찬가지로 A팀과 B팀 모두 있는 경우 C팀과 D팀에 관계없이 제외되므로 무관항으로 표현할 수 있다. 이 내용을 넣어 진리표에서 아래와 같이 요약할 수도 있다.
입력 |
출력 |
||||
일련번호 |
A |
B |
C |
D |
Q |
0 |
0 |
0 |
0 |
0 |
X |
1 |
0 |
0 |
0 |
1 |
1 |
2 |
0 |
0 |
1 |
0 |
0 |
3 |
0 |
0 |
1 |
1 |
1 |
4~5 |
0 |
1 |
0 |
X |
0 |
6~7 |
0 |
1 |
1 |
X |
1 |
8~9 |
1 |
0 |
0 |
X |
0 |
10~11 |
1 |
0 |
1 |
X |
1 |
12~15 |
1 |
1 |
X |
X |
0 |
이 논리표를 바탕으로 논리식은 아래와 같이 된다. 이 때, 출력이 무관항인 항은 우선 제외한다. m(6), m(7), m(10), m(11)과 같이 입력이 무관항인 출력은 두 개가 하나로 합쳐져 입력이 3개로 변한다. (풀어놓아도 간소화과정에서 상보법칙으로 항이 합쳐진다.)
Q(A,B,C,D)=∑m(1,3,6,7,10,11)=m(1)+m(3)+m(6,7)+m(10,11)
Q=(A’·B’·C’·D)+(A’·B’·C·D)+(A’·B·C)+(A·B’·C)=(A’·B’·D)+(A’·B·C)+(A·B’·C)
위와 같이 수식의 간소화가 끝난 첫 번째 간소화에서 출력이 무관항인 m(0)을 더하여 간소화가 기존보다 더 많이 되는지 확인한다.
Q=m(0)+∑m(1,3,6,7,10,11)=(A’·B’·C’·D’)+((A’·B’·D)+(A’·B·C)+(A·B’·C))
=(A’·B’·C’·D’)+((A’·B’·D)+(A’·B·C)+(A·B’·C))=(A’·B’·C’·D’)+(A’·B’·D)+(A’·B’·C’·D)+(A’·B·C)+(A·B’·C)
=((A’·B’·C’)+(D+D’))+(A’·B’·D)+(A’·B·C)+(A·B’·C)=((A’·B’·C’)+(1))+(A’·B’·D)+(A’·B·C)+(A·B’·C)
=(A’·B’·C’)+(A’·B’·D)+(A’·B·C)+(A·B’·C)
이러한 형태로 두 번째 간소화가 오히려 항이 늘었으므로 무관항을 제외하는 첫 번째 간소화 결과를 최종 결과로 채택한다.
위의 문항에서 만약, “C팀이 단독으로 예약한다”라고 바뀐다면 최종 결과는 바뀔 수 있는데, 이 경우 무관항을 제외한 첫 번째 간소화는 아래와 같다.
Q=∑m(1,2,3,6,7,10,11)= m(1)+m(2,3)+m(6,7)+m(10,11)
Q=(A’·B’·C’·D)+(A’·B’·C)+(A’·B·C)+(A·B’·C)=(A’·B’·C’·D)+((A’·B’·C)+(A’·B’·C))+(A’·B·C)+(A·B’·C)
=(A’·B’·C’·D)+((A’·C)·(B+B’))+((A’+A)·(B’·C))=(A’·B’·C’·D)+((A’·C)·(1))+((1)·(B’·C))
=(A’·B’·C’·D)+(A’·C)+(B’·C)=(A’·B’·C’·D)+((A’·B’·C·D)+(A’·C))+(B’·C)
=((A’·B’·D)·(C’+C))+(A’·C)+(B’·C)=((A’·B’·D)·(1))+(A’·C)+(B’·C)
=(A’·B’·D)+(A’·C)+(B’·C)
<
이 결과에 무관항을 더해서 두 번째 간소화를 진행한다.
Q=m(0)+∑m(1,2,3,6,7,10,11)=(A’·B’·C’·D’)+(A’·B’·D)+(A’·C)+(B’·C)
=(A’·B’·C’·D’)+((A’·B’·C·D)+(A’·B’·C’·D))+((A’·B’·C·D’)+(A’·C))+(B’·C)
=((A’·B’)·((C’·D’)+(C·D)+(C’·D)+(C·D’)))+(A’·C)+(B’·C)=((A’·B’)·(1))+(A’·C)+(B’·C)
=(A’·B’)+(A’·C)+(B’·C)
이렇게 무관항을 더한 간소화 결과가 더 축소되었으므로 두 번째 간소화를 채택한다. 논리식에 따라 설계한 논리회로에서도 무관항의 추가로 입력회선이 없어지는 것을 알아볼 수 있다.
이처럼 무관항의 유무로 결과가 바뀌는 경우가 생기므로 무관항의 개수에 따라 간소화 연산을 반복하여 최적의 설계를 찾는다.
4. 결론
논리회로를 설계하는 과정으로 문제로부터 입력과 출력 설정, 진리표 작성, 불 대수 변환, 논리식 간소화, 논리회로 변환의 순서를 거쳐 진행하였다. 설계한 논리회로와 문제의 설정과 일치하는지 꼭 확인을 하고 넘어가도록 한다. 그리고 논리식으로의 변환 과정에서 모든 변수가 한 번씩 사용되어 덧셈 형태로 표현된 최대항(Maxterm)이라는 것도 있지만 상대적으로 잘 쓰이지 않아 여기서는 생략한다.
댓글 없음:
댓글 쓰기