[솔다/실무익히기] BCD코드를 FND에 표시하기 위한 디코더 설계하기


안녕하세요
디바이스마트의 얄개 솔다입니다

오늘은 고-급 스킬인 논리식 간소화를 통해
디코더를 설계하는 과정을 설명해드리겠습니다


설계 과정은

입출력 진리표 작성 => 논리식 간소화 => 회로 설계
순서로 진행됩니다

-

binary code binary binary system byte bits administrator virus trojan computer digital 1 software code developer software development program hacker blue green text neon font album cover technology organism computer wallpaper graphic design graphics electric blue human behavior

우선 BCD코드에 대해 알고 계셔야하는데요
자세한 내용은 위키를 참조해주시면 되시겠습니다

쉽게 말하면 0부터 9까지 4자리의 2진수로 표현한건데요
숫자의 가짓수만 10가지일 뿐(0부터 9까지니까)
우리가 알고있는 그 2진수 변환과 동일합니다

10진수
BCD코드
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001


위 표는 BCD코드 변환표 입니다

10진수에 1:1 대응되기 때문에 외우지 않아도

무슨 숫자인지 알 수 있습니다

-


출처 - https://en.wikipedia.org/wiki/Seven-segment_display

FND는 전자시계등에 사용되는 표시장치인데요
점을 제외하면 7개의 LED만으로 아라비아숫자와 유사하게
표시 할 수 있기 때문에 7-segment display라고도 부릅니다
···
여기까진 다 아시는 내용이실텐데요

숫자 표시를 위한 2진 코드를 보시겠습니다



표시
숫자
애노드 공통

표시
숫자
캐소드 공통
a
b
c
d
e
f
g

a
b
c
d
e
f
g
0






1

0
1
1
1
1
1
1

1
1


1
1
1
1

1

1
1




2


1


1


2
1
1

1
1

1
3




1
1


3
1
1
1
1


1
4
1


1
1



4

1
1


1
1
5

1


1



5
1

1
1

1
1
6

1






6
1

1
1
1
1
1
7



1
1
1
1

7
1
1
1




8








8
1
1
1
1
1
1
1
9




1



9
1
1
1
1

1
1

애노드와 캐소드는 입력이 반전한 것을 알 수 있습니다

표의 결과가 많은 캐노드 공통(CC)타입 기준으로 설명드리겠습니다

-

1. 입출력 진리표 작성

우선 입출력을 진리표로 정리합니다

표시
숫자
입력
출력
A
B
C
D
a
b
c
d
e
f
g
0




1
1
1
1
1
1

1



1

1
1




2


1

1
1

1
1

1
3


1
1
1
1
1
1


1
4

1



1
1


1
1
5

1

1
1

1
1

1
1
6

1
1

1

1
1
1
1
1
7

1
1
1
1
1
1




8
1



1
1
1
1
1
1
1
9
1


1
1
1
1
1

1
1

입력은 대문자 ABCD, 출력은 소문자 abcdefg입니다

이제 각 출력에 해당하는 논리식을 만들어야 하는데요
익숙하신 분들은 바로 논리식으로 표현이 가능기도 하지만
카르노맵(Karnaugh map)을 이용해서 각각의 출력을
순서대로 논리식으로 표현해볼건데요

우선 각 출력의 카르노맵을 만들어보겠습니다
카르노맵이 익숙치 않으시다면 위키를 참고해주세요

구분
CD

구분
CD
00
01
11
10

00
01
11
10
AB
00
1
0
1
1

AB
00
1
1
1
1
01
0
1
1
1

01
1
0
1
0
11
x
x
x
x

11
x
x
x
x
10
1
1
x
x

10
1
1
x
x
출력 a

출력 b


구분
CD

구분
CD
00
01
11
10

00
01
11
10
AB
00
1
1
1
0

AB
00
1
0
1
1
01
1
1
1
1

01
0
1
0
1
11
x
x
x
x

11
x
x
x
x
10
1
1
x
x

10
1
1
x
x
출력 c

출력 d


구분
CD

구분
CD
00
01
11
10

00
01
11
10
AB
00
1
0
0
1

AB
00
1
0
0
0
01
0
0
0
1

01
1
1
0
1
11
x
x
x
x

11
x
x
x
x
10
1
0
x
x

10
1
1
x
x
출력 e

출력 f


구분
CD
00
01
11
10
AB
00
0
0
1
1
01
1
1
0
1
11
x
x
x
x
10
1
1
x
x
출력 g
각 7개의 출력에 대응하는 7개의 카르노맵이 완성되었습니다
중간에 x가 보이는데 BCD코드에서는 사용하지 않는
십진수 10~15에 대응되는 ABCD 입력값이기 때문에
0이나 1 어느쪽으로도 상관 없기 때문에 x로 표현되었습니다

x는 카르노맵의 조커카드라고 보시면 되시겠습니다

joker the dark knight에 대한 이미지 검색결과

-

카르노맵이 완성되었으니 본격적으로 간소화를 해보겠습니다

출력이 0인 경우를 제외하고 출력 1이나 x끼리
가로세로가 짝수칸이 되도록
정사각형이나 직사각형으로 몽땅 묶어주시면 됩니다

이때 중요한점은 사각형은 크면 클수록
논리식이 더 간단해진다는 점 입니다

또 카르노맵 특성상 경계선(?)밖이 이어져 있어서
서로 떨어져 있어도 묶을 수 있습니다

이부분은 글로는 설명이 어려우니
첫번째 희생양인 출력 a를 기준으로 설명드리겠습니다

-


빨강, 노랑, 초록, 파랑 총 4개의 사각형이 있는데요
순서대로 논리식으로 정리해보겠습니다

1. 빨강부터 논리식으로 표현해보겠습니다

CDB의 변화와 상관없이 입력 A가 1일 때
출력이 모두 1(x도 1로 취급합니다)이 됩니다

그럼 일단
a = A+?+?+?
으로 논리식의 첫번째 항이 밝혀졌습니다


2. 이번에는 노랑색을 확인해보겠습니다

빨강과 비슷한데요
ABD의 변화와 상관 없이 입력 C가 1일 때
출력이 모두 1이 됩니다

a = A+C+?+?
벌써 절반이나 밝혀졌습니다

3. 초록색 네모입니다
처음 만나는 정사각형인데요

자세히 보시면 금방 알아 채시겠지만
B와 D가 동시에 1일 때 출력이 모두 1이 됩니다
동시에 1일 때는 논리식에서는 AND입니다

따라서
a = A+C+BD+?
으로 표현할 수 있습니다

4. 마지막 파랑 네모입니다
경계선 반대편에 연결할 수 있는 값이 있다면
네모로 묶을 수 있다고 했었는데요
네 귀퉁이를 모두 묶어 정사각형을 만든 모습입니다

이번에는 B와 D가 동시에 0인 경우에 1을 출력합니다
이를 논리식으로 옮기면

a = A+C+BD+B'D'
위와같이 표현할 수 있습니다

-

2. 논리식 간소화

같은 요령으로 모든 카르노맵을 간소화 하여 논리식으로 정리합니다



입력
논리식
a
A+C+BD+B’D’
b
B’+C’D’+CD
c
B+C’+D
d
A+B’C+B’D’+BC’D+CD’
e
B’D’+CD’
f
A+BC’+BD’+C’D’
g
A+BC’+B’C+CD’

카르노맵에 따라 위와 같이 논리식을 도출할 수 있습니다

-

3. 회로설계

논리식을 도출했다면 드디어 회로설계 단계입니다

우선 입력을 정입력과 부정입력을 모두 배치합니다



그 후 출력 A 부터 논리식대로 연결합니다

A+C+BD+B’D’

A와 C는 그냥 연결하고 BD와 B'D'는 AND게이트를 이용해 연결합니다

최종적으로 OR 게이트를 통해 출력된 값이 a입니다



같은 요령으로 7개의 출력을 모두 논리게이트로 표현합니다

게이트 절약을 위해 동일한 AND표현식이 있다면 활용해줍니다



논리회로를 전부 구성하면 위와같이 됩니다

알아보기 쉽도록 AND게이트에 논리식을 표현했습니다

간소화 하고 나면 3개의 NOT 게이트
(A'은 사용하지 않습니다)
9개의 2입력 AND 게이트
18개의 2입력 OR 게이트

만으로 표현이 가능하게 간소화 되었습니다

-

지금까지 디코더 설계 방법에 대해 알아보았는 데요

위 설계 방식을 응용하면 FND를 이용해 알파벳이나
한글도 구현해볼 수 있습니다



긴 글 읽으시느라 수고 많으셨습니다

감사합니다



댓글 쓰기

1 댓글

  1. 와 이거 궁금 했었는데 와 이
    멍도면 별 99999999999999999999999999999999
    개다

    답글삭제