1. 논리회로
1.1 불대수
(1) 논리함수
1) 논리곱 AND
: 교집합, 곱, 직렬로 표현. 모두 1인 경우에만 1
2) 논리합 OR
: 합집합, 덧셈, 병렬로 표현. 하나라도 1이면 1
3) 부정 NOT
: 여집합. 입력변수의 반대값. ex) 1->0 , 0->1
(2) 불 대수의 기본 공식
- 교환법칙, 결합법칙, 분배법칙, 멱등법칙, 보수법칙, 드모르간의 법칙
※ 수학의 합과 곱이 아니라 집합의 합집합과 교집합 개념이라는 것을 명심해야 한다.
3) 분배법칙
: A(B+C) = AB + AC
: A +BC = (A+B)(A+C)
4) 멱등법칙
: A+ A = A , AA = A
5) 드모르간의 법칙
(3) 카르노 맵
기출) 논리함수식 F(A, B, C) = Σ(1, 3, 4, 6)을 간략화 하였을 때 결과식으로 옳은 것은?
1, 3, 4, 6을 A,B,C 3자리의 2진수로 표현하면 001, 011, 100, 110이다.
1.2 논리게이트
1) AND, Mask 연산(삭제)에 사용
Y = AB 논리곱
2) OR, Selective Set 연산(반전)에 사용
Y = A + B 논리합
3) NOT, Complement 연산(보수)에 사용
_
Y = A 부정
4) XOR, Compare 연산(비교)에 사용
Y = A ⊕ B
__ __
Y = A ⊕ B , AB + AB
: 입력정보가 모두 같으면 0, 한개라도 다르면 1
논리회로의 종류 : 조합 논리회로, 순차 논리회로
1) 조합 논리회로 : 기억 기능 없음, 이전 입력 상관없이 결정
- 반가산기, 전가산기, 디코더/인코더, 멀티플렉서, 연산기 등
2) 순차 논리회로 : 기억 기능 있음, 현재 상태에 따라 출력 결정
- 플립플롭, 카운터, 레지스터. SRAM, CPU 등
1.3 조합 논리회로
기억 기능 없음, 이전 입력 상관없이 결정
- 반가산기, 전가산기, 디코더/인코더, 멀티플렉서, 연산기 등
(1) 반가산기(Half Adder) ( 입력값 2 => 출력값 2 )
- XOR 회로(합)와 AND 회로(자리올림수)를 조합한 회로
합(S) / 자리올림수 캐리(C)
(2) 전가산기(Full Adder) ( 입력값 3 => 출력값 2 )
- 반가산기 2개와 OR 회로를 조합한 회로
기출) 전가산기의 입력이 A=1, B=0, C=1일 때 출력 S와 C의 값은?
가산기이므로 셋을 더한 값과 자리올림수를 구하면 된다.
S = 1+0+1 = 0 자리올림수 발생하여 C = 1
(3) 디코더(decoder) <=> 인코더
입력값이 N이면 출력은 2^n , NOT과 AND 게이트로 이루어져있고 주로 AND게이트로 구성.
(4) 멀티플렉서 <=> 디멀티플렉서
2^n 개의 입력 데이터 중에서 1개만을 출력. 버스를 구성하는 논리 회로.
1.4 순차 논리회로
기억 기능 있음, 현재 상태에 따라 출력 결정
- 플립플롭, 카운터, 레지스터. SRAM, CPU 등
(1) 플립플롭 (FF, Flip-Flop)
- 1bit를 기억하는 메모리 소자 (0이나 1만 기억)
- CPU 안의 기억장치인 레지스터를 구성하는 순차논리회로(기억 기능)
종류 : RS 플립플롭, JK 플립플롭, T 플립플롭 등
JK는 RS의 단점인 R : 1 , S : 1 일때 동작안되는 문제를 반전시켜 해결
1) RS 플립플롭 / JK 플립플롭
- R(Reset: 0으로 만들어줌)값과 S(Set: 1로 만들어줌)값의 입력으로 0이나 1을 기억함.
- 기본값 Q가 0, 1일 경우 0,0으로 리셋도 셋도 하지 않으면 결과는 현상태 유지로 0, 1 => 0, 1 (불변)
- 위의 기본값에 0,1로 셋을 해주면 1,1 => 1
- 위의 기본값에 1,0로 리셋을 해주면 0,0 => 0
- 위의 기본값에 1,1로 리셋과 셋을 둘 다 해주면 RS의 경우 불능, JK의 경우 반전시켜 기본값 0,1이 1,0이 된다.
위의 특성으로 특성표를 그리면 다음과 같다.
특성표
S R Q
0 0 불변
0 1 1
1 0 0
--------------- <-- 여기 위로는 RS와 JK가 똑같다.
1 1 부정 <-- RS는 불능, JK는 반전.
JK는 Jack과 Kilby가 발명하여 이름의 앞자리를 따서 JK 플립플롭이라 부른다.
2) D 플립플롭
딜레이(Delay) 플립플롭은 입력값을 그대로 저장
3) T 플립플롭
- T는 한 개의 입력선으로 구성한 FF(Flip-Flop)
- JK입력선 2개를 묶어 하나의 입력선으로 구성
특성표
Q(t) Q(t+1) T
0 0 0
0 1 1
1 0 1
1 1 0
입력 단자가 하나이며 1이 입력될 때 출력 단자의 상태가 바뀜.
4) M/S(마스터/슬레이브) 플립플롭
- 출력측 일부가 입력측에 궤환되어 유발되는 레이스 현상을 없애기 위해 고안된 플립플롭
자료의 표현
2.1 정보의 단위
비트 : 정보의 최소 단위 Binary Digit
니블 : 4bit
바이트 : 8bit, 문자의 최소단위
워드 : 4바이트. CPU가 한 번에 처리할 수 있는 단위. (쉽게 몇비트 컴퓨터)
[ Half-word : 2byte ] 1byte는 8비트. 2byte이므로 반워드는 16비트 컴퓨터의 단위
레코드 : 하나 이상의 관련된 필드가 모여서 구성
블록 : 하나 이상의 논리 레코드가 모여서 구성
파일 : 프로그램 구성의 기본 단위
데이터 베이스 : 여러 개의 관련된 파일의 집합
2.2 진법 계산
2.3 보수: 컴퓨터의 뺄셈 계산
보수(NOT회로: Complement): 뺄셈을 덧셈 회로로 처리 가능하게 한다.
n의 보수 : 각 자리 숫자에 대해
a + a' = n : a'는 a에 대한 n의 보수
ex) 4 + 3 = 7 : 3는 4에 대한 7의 보수
보통 1의 보수와 2의 보수가 많이 사용되며
1의 보수 : NOT 한 후에 더하고 자리올림수를 더함
2의 보수 : NOT 한 후에 1을 더하고 자리올림수는 무시한다.
1의 보수보다 2의 보수의 장점
- 표현할 수 있는 수의 개수가 하나 더 많다. 1의 보수보다 연산속도가 더 빠르다.
보수를 더해 뺄셈을 계산하는 방법
ex) 8 - 3 = 5
8: 1000
3: 0011
5: 0101
1) 1의 보수로 계산하는 방법
먼저 피젯수(빼는 수)를 1의 보수(NOT회로=complement)로 바꾼 뒤 더한다.
1000 - 0011 => 1000 + 1100(1의 보수) = 10100
4자리끼리 더했는데 5자리가 되어 맨 왼쪽에 자리올림수 1이 발생한다. 이 자리올림수를 빼서 4자리에 다시 더한다.
0100 + 1 = 0101
연산이 2번 수행됨.
2) 2의 보수로 계산하는 방법
피젯수를 1의 보수를 만든 뒤 여기에 +1을 하면 2의 보수가 된다. 이를 더한다.
1000 - 0011 => 1000 + (1100+1) = 1000 + 1101 = 10101
4자리끼리 더했는데 5자리가 되어 맨 왼쪽에 자리올림수 1이 발생한다. 이 자리올림수를 탈락시킨다.
10100 에서 맨 왼쪽 자리올림수 1을 탈락시키면 0101
연산이 1번만 수행되므로 더 빠르다.
3) 2의 보수로 계산하는 방법 쉽게 하기
2의 보수는 1의 보수에다가 1을 더한 것이지만 더 쉽게 만들 수 있다.
피젯수에서 오른쪽에서 첫번째 1까지는 가만 놔두고 그 이후 왼쪽 끝까지는 보수로 만들면 이것이 2의 보수다.
0011 => 001, 1 => 001은 보수로, 오른쪽에서 첫번째 1은 그대로 하면 110, 1 => 1101
1000 + 1101(2의보수) = 10101
10100 에서 맨 왼쪽 자리올림수 1을 탈락시키면 0101
ex) 459의 9의 보수는 각 자리에 얼마 더해야 9가 될까?
459 + ??? = 999
답은 540
ex) 10진법 274 9의 보수는 ?
274 + ??? = 999
답은 725
기출) (-17) + (-4)를 2의 보수로 계산했을 때의 결과는?
17 - 4 = 10001 - 00100 = 10001 + 11100(2의보수) = 101101 = 1101
2.4 자료의 내부적 표현
고정소수점(정수): 10진연산(unpack, pack), 2진연산(부호와절대치, 1의보수, 2의보수)
부동소수점(실수): 단정도(32bit), 배정도(64bit)
(1) 고정소수점(정수)
1) 10진연산: 레지스터를 사용하지 않고 연산 수행. 입출력엔 언팩, 연산엔 팩 사용
언팩: 10진수 입출력형식(연산 불가).
+1234, -1234를 언팩으로 표현하면 F1F2F3C4, F1F2F3D4
zone(1111=F)과 digit을 번갈아가며 쓴 뒤 맨 끝 digit 앞에는 sign(양수C/음수D)을 붙여만듬
팩 : 10진수 연산(입출력 불가)
+1234, -1234를 언팩으로 표현하면 01234C, 01234D
EBCDIC(엡시딕) 코드에 의한 -123(10)의 팩 형식은 123D
2) 2진연산: 부호와 절대치, 부호와 1의 보수, 부호와 2의 보수
양수/음수 5, 6, 7, 8, 0을 4bit로 각각 표현한 경우
|
5 |
6 |
7 |
8 |
0 |
양수 (Sign 0) |
0101 |
0110 |
0111 |
1000 |
0000 |
음수 (Sign 1) |
|
|
|
|
|
부호화 절대치 |
1101 |
1110 |
1111 |
표현 불가 |
1000 (-0) |
부호화 1의 보수 |
1010 |
1001 |
1000 |
표현 불가 |
1111 (-0) |
부호화 2의 보수 |
1011 |
1010 |
1001 |
1000 |
0000 |
부호와 절대치: n비트 크기의 워드가 있을 때 맨왼쪽 sign비트(양수0, 음수1), 나머지 n-1비트는 오른쪽부터 2진수를 채워넣고 남는곳은 0으로 채움
표현범위는 -(2^n-1 - 1) ~ +(2^n-1 - 1). -25(00011001)의 부호와 절대치는 10011001
부호와 1의 보수: 표현범위는 -(2^n-1 - 1) ~ +(2^n-1 - 1) -25의 부호와 1의 보수는 11100110
부호와 2의 보수: 표현범위는 -(2^n - 1) ~ +(2^n-1 - 1) 0이 1가지 형태만 존재한다. -25의 부호와 2의 보수는 11100111
장점: 1의 보수보다 표현수가 하나 더 많아 널리 사용. Carry가 발생하면 무시 가능. 0의 판단이 쉽다
기출) 2의 보수 표현으로 8비트 기억 공간에 정수를 표현할 때 표현 가능 범위는?
-(2^8-1) ~ +(2^8-1 - 1) = -(2^7) ~ +(2^7 - 1)
(2) 부동소수점(실수)
부호(양수0/음수1) + 지수부 + 가수부로 구성.
(0.27 x 10^5) x (0.18 x 10^3) = (0.27 x 0.18) x 10^(5+3) = 0.0486 x 10^8 = 0.486 x 10^7
기출) 10진수 46을 2진화 10진수로 표현하면?
4 = 100(2), 6 = 110(2) => 100110
기출) 부동 소수점(Floating Point) 숫자 연산에서 정규화(Normalize)를 하는 주된 이유는?
다) 유효 숫자를 늘리기 위해서이다. // 정규화 = 지수부와 가수부를 분리. 유효자릿수를 최대로 하여 수의 정밀도를 높임.
2.5 자료의 외부적 표현
ASCII 코드 : 자료 외부적 표현방식으로 가장 흔히 사용. 영문자 코드, IBM개발/데이터통신.마이크로컴퓨터,
1Bit 패리티비트 추가하여 통신. 6Bit(Zone Bit 2개 + Digit Bit 4개),
2^7(128)개 문자 표현 : 영문 대소문자, 아라비아 숫자, 제어문자, 특수문자
BCD(8421) 코드 : 대표적 가중치 코드. 10진수 입출력 간편. 자체보수화 불가, 4비트 2진수 2^3 2^2 2^1 2^0 순이라 8 4 2 1 . 7Bit(Zone Bit 3개 + Digit Bit 4개)
기출) 10진수 956에 대한 BCD 코드는? 1001 0101 0110
9 = 1001, 5 = 0101, 6 = 0110
EBCDIC 코드 : 각각의 문자에 대해 8개의 비트(4개의 zone bit+4개의 확장 Digit Bit) + 패리티 비트 1개
zone비트 : 00여분, 01특수문자, 10소문자, 11대문자 + 00 A~I, 01 J~R, 10 S~Z, 11 숫자
EBCDIC로 10진 숫자 5는? 11110101 (숫자 11 + 5는 101)
(EBCDIC: 엡시딕이라고 읽음.)
3초과 코드 (Excess-3 코드) : BCD 코드+3, 대표적인 자기보수 코드/비가중치 코드
기출) 10진수 8을 Excess-3 코드로 표시하면? : 8 + 3 = 1000 + 0011 = 1011(e)
기출) 10진수 9을 Excess-3 코드로 표시하면? : 9 + 3 = 1001 + 0011 = 1100(e)
그레이코드 (Gray Code)
BCD 코드의 인접 비트를 XOR 연산으로 만든 코드, A/D변환, 입/출력 장치에 사용
하드웨어 에러를 최소화 하는데 적합한 코드.
변환반법
기출) 2진수 1010(2)를 그레이코드로 표시하면? 1111(G)
기출) 그레이코드 011011(G)를 binary number로 변환하면? 010010(2)
기출) 2진수 11011을 그레이 코드로 변환한 것은? 10110(G)
패리티 검사 (Parity Check)
: 코드의 오류를 검사하는 코드, 단점 2bit 오류 검출 불가, 정정 불가
Odd Parity (홀수, 우수) 1의 갯수가 홀수가 되도록 0이나 1추가
Even Parity (짝수, 기수) 1의 갯수가 짝수가 되도록 0이나 1추가
해밍 코드 (Hamming Code)
: 패리티 검사의 단점을 극복하는 코드. 2bit 오류 검출 가능, 정정 가능
기출) 해밍 코드 방식에 의해 구성된 코드가 16비트인 경우 데이터 비트의 수 및 패리티 비트의 수는 각각 몇 개씩인가?
데이터 비트 : 11비트, 패리티 비트 : 5비트
해밍 코드에서 패리티 비트 위치는 1, 2, 4, 8, 16...순에 위치함.
해밍 코드가 16비트이면 패리티 비트는 1, 2, 4, 8, 16 5개에 위치하므로 나머지 11개가 데이터 비트.
기출) 짝수 패리티를 이용하여 BCD 코드 1001에 대한 해밍 코드를 구하면? 0011001
해밍 코드에서 패리티 비트는 1, 2, 4, 8...위치이므로 1001과 합하면
C1 C2 1 C3 0 0 1 C4 가 된다.
C1 C2 1 C3 0 0 1 C4 에서 1의 개수가 짝수가 되려면 C1 = 0
C1 C2 1 C3 0 0 1 C4 에서 1의 개수가 짝수가 되려면 C2 = 0
C1 C2 1 C3 0 0 1 C4 에서1의 개수가 짝수가 되려면 C3 = 1
기출) 짝수 패리티 비트의 해밍 코드로 0011011을 받았을 때 오류가 수정된 정확한 코드는? 0011001
0 0 1 1 0 0 1 ..... 1, 2, 4 위치가 패리티 비트. 각각 1이 짝수가 되나 계산하면 된다.
계산 결과 C1 = 0, C2 = 1, C3 = 1. 두 군데에서 에러 발생.
패리티 비트 결과 011을 역으로 나열해 110 = 6, 6번째 비트가 에러이므로 6번째 비트 1을 0으로 바꾸면 된다.
코드의 분류
가중치 코드 : BCD(8421)코드, 2421코드
비가중치 코드 : Excess-3 코드 , Gray 코드
자기보수 코드 : Excess-3 코드, 2421 코드, 5111 코드
오류 검출용 코드 : Hamming 코드 , 패리티 코드
'정보처리기사' 카테고리의 다른 글
| 데이터베이스: 데이터 모델, 관계형 데이터 베이스, 관계대수/관계해석, 정규화 (0) | 2016.02.16 |
|---|---|
| 전자계산기: 입출력장치, 병렬 컴퓨터 구조 (0) | 2016.02.13 |
| 전자계산기: 기억장치 (1) | 2016.02.12 |
| 전자계산기: 마이크로 오퍼레이션, 메이저 스테이트, 마이크로 프로그램 (0) | 2016.02.11 |
| 전자계산기: 중앙처리장치, 명령어, 주소지정 방식, 연산 (0) | 2016.02.08 |


