7-segment display 이용 가감산기 (4bit)

학교에서 디지털 공학이란 과목을 듣는다고 만든 삽질작품.8bit으로 하려다가 사다놓은 GAL이 하나 모잘라서 그냥 4bit으로…

wincupl 로 GAL을 굽기위해 7-segment로 진리표(Truth Table)을 만들어봤는데

그중에 A자리에 불이 들어가게 하는 진리표는 다음과 같다.

수       값

0000       1
0001       0
0010       1
0011       1
0100       0
0101       1
0110       1
0111       1
1000       1
1001       1
1010       1
1011       0
1100       1
1101       0
1110       1
1111       1

음… 이것을 Boolean Function으로 만드는데 축약식으로 만들때

1에 관한 식으로 만들어도 좋지만 0에 관한 식으로 만들어서 반전시키면 식이 적게 나온다.

아무튼 위 식을 카노맵으로 만들어서 축약시키면 된다.

손으로 무식하게 하는편도 좋지만 Karnaugh Minimizer를 쓰면 편하다.

축약 시킨 식과 원래 식과 같은지 비교하기 위해서 만든 프로그램.

// Equivalent Discriminator for Boolean Function by Xeriars

#include <stdio.h>
#include <stdlib.h>

int main () {

int a_,b_,i,fcount=0;
system(“cls”);
printf(”   Truth Tablenn”);
for(i=0;i<16;i++) {
int A=!!(i&8), B=!!(i&4), C=!!(i&2), D=!!(i&1);
a_ = (!A & !B & !C & !D) + (!A & !B & !C & D) + (!A & B & C & D) + (A & B & !C & !D);
b_ = (!A & !B & !C) + (B & (!A & C & D) + (A & !C & !D));
if (a_ != b_) { printf(“%X : t1 = %d, t2 = %d ——– Xn”, i,a_,b_); ++fcount; }
else { printf(“%X : t1 = %d, t2 = %dn”, i,a_,b_); }
}
if (fcount > 0) { printf(“nFalse Count : %d”, fcount); }
getch();
return 0;
}

a_랑 b_ 부분을 수정해서 컴파일해보면 알 수 있다.

아무튼 이런 과정을 거쳐서 wincupl에 맞는 언어(?)로 7-segment를 구현한것이다.

Name     7segment;
PartNo   g22v10;
Date     2007-05-18 ;
Revision 01;
Designer Xeriars;
Company  The X.D.C.;
Assembly 000;
Location In_the_Hell;
Device   g22v10;

/* *************** INPUT PINS *********************/
PIN 02 = A;
PIN 03 = B;
PIN 04 = C;
PIN 05 = D;

/* *************** OUTPUT PINS *********************/
PIN 17 = OUTA;
PIN 18 = OUTB;
PIN 19 = OUTC;
PIN 20 = OUTD;
PIN 21 = OUTE;
PIN 22 = OUTF;
PIN 23 = OUTG;

/* *************** EQUATIONS *********************/

!OUTA = (B & C) # (!A & C) # (A & !D) # (!B & !D) # (!A & B & D) # (A & !B & !C);
!OUTB = (!B & !D) # (!B & !C) # (!A & C & D) # (A & !C & D) # (!A & !C & !D);
!OUTC = (!C & D) # (!A & D) # (A & !B) # (!A & B) # (!B & !C);
!OUTD = (!A & C & !D) # (!B & C & D) # (B & !C & D) # (A & B & !D) # (!B & !C & !D);
!OUTE = (C & !D) # (A & C) # (A & B) # (!B & !D);
!OUTF = (A & C) # (A & !B) # (B & !D) # (!C & !D) # (!A & B & !C);
!OUTG = (A & C) # (!B & C) # (A & !B) # (B & !C & D) # (!A & B & !D);

이것을 복사해서 붙인후 .pld 파일로 저장하면 된다.

이제 회로를 꾸민다.

준비물은 7-segment (에노드 타입) 3개, GAL(22V10) 3개, Bread Board, 전선, Wire Striper(option), TTL 7483(전가산기), 330k 저항소자 21개정도,Deep Switch, Toggle Switch, 5V 전원 공급기 (없으면 만들어도 좋다.), Jumper (Option)

아래는 완성한 스샷. (토글이 없어서 수동으로..-_-;;)



덧셈. 7 + 7 = E(Decimal : 14)

뺄셈. F(Decimal : 15) – B(Decimal : 11) = 4

Flash를 안터트렸더니 화질이 구리게 나왔다.

흠.. 목요일날 시험보는데 그때까지 Counter 제작해오라네..-_-;;

언제 다 만든담…

댓글 남기기