2. 순서
1.프로젝트 전체일정
2.업무분담
3.프로그램에 대한 내용
4.알고리즘
5.프로그램소스
6.결과분석
3. 1.프로그램일정
첫 주(6월 4일~9일)
알아야 할 개념에 대하여 공부하고 토의
모르는 내용에 대하여 질문
알고리즘 짜기
프로그램 코딩
2.업무분담
김무경 회의진행. 보고서 작성
조부관 boolean expression disjunction of minterms 조사
홍진욱 프로그램 코딩
김도형 조사프로그램에 대한 알고리즘
송하윤 complete set of operations , Karnaugh maps 조사
장진승 binary device , logic gates 조사
4. 3.프로그램 내용
프로젝트를 하기 위해 공부해야 할 내용
boolean expression
1. 부울 대수의 개념
① 하나의 명제가 참 또는 거짓인가를 판단하는데 이용되는 수학적인 방법
② 이진변수와 논리 동작을 취급하는 대수
③ 부울 대수를 이용하여 기본적인 연산은 NOT연산, AND연산, OR연산 등이 있음
2. 부울 대수의 목적
① 변수 사이의 진리표 관계를 대수 형식으로 표시
② 논리도의 입출력 관계를 대수 형식으로 표시
③ 같은 기능을 가진 더 간단한 회로를 발견할 수 있음
3. 부울 대수의 기본 법칙
⑴ 교환법칙 ⑵ 결합법칙
① A + B = B + A ① (A + B) + C = A + (B + C)
② A · B = B · A ② (A · B) · C = A · (B · C)
⑶ 배분법칙 ⑷ 부정의 법칙
① A · (B + C) = A · B + A · C ① (A')' = A
② A + (B · C) = (A + B) · (A + C)
⑸ 누승법칙 ⑹ 흡수법칙
① A + A = A ① A + A · B = (A + A) · (1 + B) = A · 1 = A
② A · A = A ② A · (A + B) = (A · A) + (A · B) = A + (A ·
5. B)= (A + A) · (1 + B) = A · 1 = A
⑺ 항등법칙 ⑻ 보간법칙
① A + 0 = A ② A + 1 = 1 ① A' + A = 1
③ A · 1 = A ④ A · 0 = 0 ② A' · A = 0
⑼ 드모르간(De-Morgan)법칙
① (A + B)' = A' · B'
② (A · B)' = A' + B'
Karnaugh maps
카르노 맵또는 카르노 도표는 복잡한 논리식을 간단히 하기 위해 사용되는 진리표의
2차원적인 표현이며, 일반적으로 2변수 카르노맵, 3변수 카르노맵, 4변수 카르노맵이 사용된다.
카르노 맵은 앞서말한 복잡한 논리식을 간단히하는(간소화하는) 불 대수와 같은 목적으로
이 역시 간소화 하는 작업을 한다는 것이다.
(↑그림 1-1)
위에 있는 그림은 2변수 카르노맵을 그린 것이다.
이것을 읽는 방법은
일단 변수는 X하고 Y 가 있다. ( 변수 2개 )
그리고 각각의 칸을 읽어보면
빨갛게 X'Y'라고 적힌 칸에는 X가 0이고 Y가 0일때는 X'Y' 이다.
6. 또 X'Y라고 적힌 칸에는 X가 0이고 Y가 1일때는 X'Y 이다.
또 XY' 라고 적힌 칸에는 X가 1이고 Y가 0일때는 XY' 이다.
또 XY 라고 적힌 칸에는 X 가 1이고 Y가 1일때는 XY 이다.
참고로 X라는 변수가 1이면 X' 는 0이 된다. 이것은 당연하다. X'는 X의 NOT이기 때문에 X
의 반대이다.
logic gates
1.OR Gate
OR Gate는 일반적으로 더하기 라고 생각 하시면 간단하게 이해 하실수 잇습니다.
그러나 우리가 일반적으로 아는 더하기는 1+1=2 라는 답을 얻을수 있습니다. 하지만 논리식에서의 더하기는…
1+1=1 이라는 결과 값이 나오게 됨니다. 이것만 생각한다면 그리 어렵지 않습니다.
출
입력
력
A B Y
0 0 0
0 1 1
1 0 1
1 1 1
<진리표>
논리 기호
논리식 : A+B
2.AND Gate
AND Gate 는 일반적으로 곱하기 라고 생각하시면 됨니다.
1*1=1,1*0=0 이러한 결과값이 나오게 됨니다.
출
입력
력
A B Y
0 0 0
0 1 0
1 0 0
1 1 1
논리식 : A*B
7. 3.NOT Gate
낫게이트. 즉 부정게이트 입니다. 이걸통과한 값은 반전이 되게 되어있습니다.
여기서 반전이란.. 컴퓨터는 참을 0이 아닌 모든수. 거짓을 0이라고합니다. 이때 이 게이트를 통과하게 되면 값
이 1은 0으로 0은 1로 반전되어 나오게 됨니다.
입 출
력 력
A Y
0 1
1 0
<진리표>
논리 기호
논리식 :
4.NAND Gate 5.NOR Gate
AND+NOT. OR+NOT.
출
입력 출
력 입력
력
A B Y A B Y
0 0 1 0 0 1
0 1 1 0 1 0
1 0 0
1 0 1
1 1 0
1 1 0
6.EX - OR Gate (배타적 논리 게이트)
서로 같지 않으면 1이 출력됩니다.
출
입력
력
A B Y
0 0 0
0 1 1
1 0 1
1 1 0
8. 7.EX - NOR Gate (일치 논리 회로)
서로 같으면 1출력.
출
입력
력
A B Y
0 0 1
0 1 0
1 0 0
1 1 1
출처: 네이버 블로그
논리설계 참고서
4.알고리즘
5.프로그램소스
#include <stdio.h>
typedef struct{
int u;
int v;
}HalfAdder;
int HalfAdder_u(int x, int y);
int HalfAdder_v(int x, int y);
void HalfAdder_f(HalfAdder *ad, int x, int y);
int main(){
HalfAdder ad[3]; /// 이쪽 부분을 실행 ->
int a,b,c,d;
int e,f,g;
9. scanf("%d %d %d %d",&a,&b,&c,&d);
/*합치면 2-bit Adder*/
/*#region 2-bit Adder Region*/
/*First half adder*/
HalfAdder_f(ad[0], a, c);
/*Second half adder*/
HalfAdder_f(ad[1], b, d);
/*Third half adder*/
HalfAdder_f(ad[2], ad[0].v, ad[1].u);
/*F*/
f = ad[2].v;
/*E*/
if(ad[0].u == 0 && ad[2].u == 0){
e = 0;
}else{
e = 1;
}
/*G*/
g = ad[1].v;
printf("e = %d, f = %d, g = %dn",e,f,g); //// 여기까지 동그라미 안쪽부분 구현
/*#endregion 2-bit Adder Region*/
}
/*두개 합치면 하프 애더*/
/*HalfAdder part u*/
int HalfAdder_u(int x, int y){
if(x == 1 && y == 1)
return 1;
10. else
return 0;
}
/*HalfAdder part v*/
int HalfAdder_v(int x, int y){
if(x != y)
return 1;
else
return 0;
}
/*합쳐서 HalfAdder*/
void HalfAdder_f(HalfAdder ad, int x, int y){
ad.u = HalfAdder_u(x,y);
ad.v = HalfAdder_v(x,y);
}