이 장에서는 2진수 체계와 논리 소자를 설명한다.
1. 수와 코드
이 절에서는 부호 없는 수(0과 양수)만을 고려함
1.1. 수의 체계
- 기호: 각 자리의 크기를 표현하기 위하여 0-9까지 10개의 기호 사용
- 자리: 소수점을 기준으로 0보다 큰 정수는 0, 1, 2, 3...의 자리를 차지, 소수점 이하의 수는 -1, -2, -3...의 자리를 차지
- 무게: 각 숫자는 자리에 따라 다른 무게를 가짐, 10^n으로 표현, 이때 n은 자리
- 값
1234.56 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0 + 5 * 10^-1 + 6 * 10^-2
= 1000 + 200 + 30 + 4 + 0.5 + 0.06
= 1234.56
1.2. R진법의 수
- R진수의 각 자리에 올 수 있는 숫자는 0 ~ R-1
1.3. 진법 변환
- 정수 부분: 나누기 R 한 나머지를 거꾸로 적음
- 소수 부분: 곱하기 R 하여 정수 부분을 순서대로 적음
1.4. 2진수, 8진수, 16진수
- 8진수: 2진수의 세 자리
- 16진수: 2진수의 네 자리, 10 ~ 15를 A ~ F로 대체
- 소수점 기준으로 끊어 읽으며, 자리를 채우지 못하는 경우에 0으로 채움
1.5. 코드
- 코드: 유한 개의 원소로 구성된 어떤 집합에 대하여 각 원소를 서로 구분하기 위하여 부여한 숫자
- 컴퓨터에서 주로 사용되는 코드: 숫자 코드, 문자 코드, 명령어 코드
- 숫자 코드와 문자 코드는 표준화되어 있으나 명령어 코드는 중앙처리장치마다 다르게 정의함
1.6. 이진화 십진 코드
- 이진화 십진 코드: 10진수의 0부터 9까지 열 개의 기호에 2진수를 할당하여 서로 구별
(BCD: Binary Coded Decimal) - 열 개의 수를 표현하기 위해 4비트 사용
- 8421 BCD 코드: 가장 대표적임
각 자리에 일정한 무게가 부여된 무게 코드 - 3초과 BCD 코드: 8421 코드에 3(0011)을 더하여 만든 코드
1의 보수를 취하면 9의 보수가 되는 자보수 코드
10진수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
8421 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 |
3초과 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 |
1.7. 문자 코드
- 아스키코드(ASCII code): 영문자, 숫자, 편집 기호, 통신용 특수 기호들을 모아 만든 7비트 코드
- 유니코드(unicode): 국제적으로 통용되는 16비트 문자 코드 체계
2. 조합 논리회로
- 조합 논리회로
- 같은 입력 값에 대하여 항상 출력 값이 같은 회로
- 입력 값의 조합에 의해 출력이 결정
- 기본 요소인 논리 게이트로 구성
- 논리식, 진리표, 논리 회로도로 표현됨
- 순차 논리회로
- 같은 입력에 대하여 출력 값이 다르게 나타날 수 있는 회로
- 내부 기억소자의 값과 입력의 조합에 의해 출력이 결정
- 상태: 기억소자의 값
2.1. 논리 게이트
- 논리 게이트: 전기 신호를 논리 값으로 해석하는 가장 기본적인 논리 소자
- 입력: 0 또는 1을 논리값을 갖는 한 개 이상의 신호
- 출력: 0 또는 1의 값을 갖는 한 개의 신호
- 버퍼: 출력 = 입력
힘이 약한 신호를 입력으로 받아 논리값 변화 없이 힘이 센 신호로 변경하는 역할 - AND 게이트: 논리곱
- OR 게이트: 논리합
- XOR 게이트: 입력 신호의 값이 같으면 0, 다르면 1
세 개 이상일 때는 짝수 0, 홀수 1 - NOT 게이트: 반대
- NAND 게이트: AND 게이트의 출력 반전
- NOR 게이트: OR 게이트의 출력 반전
- XNOR 게이트: XOR 게이트의 출력 반전
2.2. 정논리와 부논리
디지털 회로의 신호는 다음과 같이 두 가지 방법으로 사용됨
- 수치 데이터: 여러 비트들이 모여 2진수 숫자를 형성
- 이진 신호: 일반적으로 한 비트 단위로 사용, 어떤 사건이 발생하였음을 나타냄
예를 들어 엘리베이터에 탑승했을 때 가야 할 층은 수치 데이터,
여닫는 버튼과 탑승 한도 초과 경보는 이진 신호임
- 정논리(positive logic): 신호의 전압 레벨 1(high)일 때 중요한 사건이 발생함을 나타냄
신호의 이름에 아무 표시를 하지 않음 (예: alarm) - 부논리(negative logic): 신호의 전압 레벨 0(low)일 때 중요한 사건이 발생함을 나타냄
신호의 이름 위에 바를 그리거나 이름 앞에 /, - 기호를 붙임 (예: /alarm, -alarm) - 두 개념은 입력 신호와 출력 신호에 별도로 적용될 수 있음
- 논리 회로도에 포함된 신호선이 부논리임을 표현하기 위하여 신호선에 작은 동그라미를 붙임
2.3. 조합 논리회로의 표현
- 궤환 경로: 한 게이트의 출력이 그 게이트를 포함하여 그 게이트보다 이전 단에 있는 게이트의 입력으로 사용되는 경로
- 궤환 경로가 존재하면 내부적으로 이진값을 저장하는 기억 기능이 만들어짐
- 조합 논리회로는 내부에 궤환 경로를 포함하지 않으므로 정보 기억 불가능
- 조합 논리회로는 n개의 입력에 대하여 2^n개의 출력 조합을 가짐
- 빌딩 블록: 규모가 큰 논리회로를 설계할 때 주로 사용하는 미리 만들어진 부품
- 예를 들어 디코더, 인코더, 멀티플렉서, 디멀티플렉서, 전가산기가 있음
2.4. 디코더
- 디코더: 코드를 푸는 장치, n비트의 코드화된 입력을 2^n비트의 단일 출력으로 변환하는 조합 논리회로
- n X m 디코더, n-to-m 디코더: 입력 n비트, 출력 m비트인 디코더
- 이때 m ≤ 2^n이어야 함, m < 2^n인 경우에는 사용하지 않는 출력을 포함
- 2^n 비트의 출력 중 한 비트만 다른 비트들과 다른 값을 가짐
위 2 X 4 디코더에서 입력 신호의 이진수 값(XY)에 해당하는 출력 신호만 값이 1이고
나머지는 0이라면 위 회로는 정논리임
- 특성표의 X: don't care, 신호가 H이든 L이든 상관없음
- 인에이블 신호: H일 때 디코더 동작하지 않고 L일 때 동작함 → 부논리
- 출력: 입력 이진수 값에 해당하는 출력만이 L을 가짐 → 부논리
2.5. 인코더
- 인코더: 코드를 만드는 장치, 2^n비트의 입력 신호를 코드로 만들어 n비트의 출력 신호를 생성하는 조합 논리회로
- 위 인코더는 입력이 8비트이므로 2^8개의 가능한 입력 조합이 있으나 여덟 개만 사용하고 있음
- 동시에 값이 1이 되는 경우가 없고 언제나 한 개의 입력 신호 값만 1이라는 전제가 있어야 함
- 즉, 입력 신호들 중 여러 개가 동시에 1이 되면 인코더의 기능을 상실한다는 문제점 가짐
- 우선순위 인코더: 위 문제점을 해결하기 위하여 인코더의 입력에 우선순위를 부여한 것
- 입력과 출력이 모두 부논리이므로 H를 0, L을 1로 해석해야 함
- 10개의 입력이 모두 H일 때 출력도 모두 H → 입력 신호 없음
- 큰 숫자에 해당하는 입력이 우선순위가 높음
우선순위가 가장 높은 9번 입력이 L → 다른 입력들과 무관하게 9 출력
2.6. 멀티플렉서와 디멀티플렉서
- 멀티플렉서: 여러 개의 입력선 중 하나를 선택하여 한 개의 출력선으로 전달하는 조합 논리회로
- 디멀티플렉서: 멀티플렉서의 반대 동작을 수행하는 빌딩 블록
- 멀티플렉서의 입력: 회로를 통과하려는 신호선 + 통과하는 신호를 선택하는 제어선
2^n 비트의 입력선을 제어하기 위해 n비트의 선택선이 필요 - 디멀티플렉서의 입력: 한 개의 입력선 + 출력을 제어하는 선택선 + 여러 비트의 출력선
2^n 비트의 출력선으로 연결하기 위해 n 비트의 선택선이 필요
하드웨어 회로의 관점에서 인에이블 신호가 있는 디코더와 같음
2.7. 가산기
- 산술 연산 회로: 이진 숫자에 대한 덧셈, 뺄셈, 곱셈, 나눗셈 등 산술 연산을 수행하는 조합 논리회로
- 반가산기(HA): 한 비트의 수 두 개를 더하여 합과 자리올림수를 구하는 조합 논리회로
X, Y: 입력 비트
S: 입력의 합, C: 자리올림수
- 전가산기(FA): 한 비트의 수 두 개와 그 자리보다 한 자리 아래 단에서 올라오는 자리올림수까지 세 비트의 값을 더하여 합과 자리올림수를 구하는 조합 논리회로
X, Y: 입력 비트
Z: 이전 단의 자리올림수
S: 입력의 합, C: 자리올림수
수식
S = X (+) Y (+) Z
C = XY + YZ + ZX
- 전가산기 여러 개를 사용하여 병렬 가산기 생성 가능
→ 병렬 가산기로 곱셈기 나눗셈기 생성 가능
3. 순차 논리회로
기억 소자의 값을 상태 또는 내부 상태라고 함
입력 신호에 의해 상태 변화 → 입력 신호 + 상태에 의해 출력 신호 결정
- 클럭: 주기적으로 0과 1이 계속 반복되는 신호
- 동기 순차 논리회로: 회로에 포함된 기억 소자들이 모두 같은 시작에 동작
동작 시간 맞추기 위해 클럭 펄스 사용
컴퓨터 또한 거대한 동기 순차 논리회로 - 비동기 순차 논리회로: 클럭 사용하지 않아서 기억 소자들이 동시에 동작하지 않음
3.1. 플립플롭
- 플립플롭: 한 비트의 정보를 저장하는 기억 소자
I: 입력 신호
CP: 클럭 펄스
Q: 출력 신호 - 클럭이 변하는 시간에 맞추어 입력 신호의 값에 따라 출력 신호가 변함
- 클럭의 한 주기 동안에 기억 소자의 동작과 조합 논리회로 부분의 동작이 완료되어야 함
- 플립플롭의 동작은 다음 두 가지 사항으로 구분
- 플립플롭이 동작하는 시기
- 입력 신호의 종류에 따른 플립플롭의 동작 특성
- 플립플롭과 래치의 차이: 둘 다 기억 소자에 해당하나 래치는 클럭을 고려하지 않음
하지만 플립플롭은 클럭이 변하지 않으면 입력의 변화와 상관없이 출력의 변화도 없음 - 현재상태: 플립플롭의 출력값
- 다음상태: 클럭 펄스가 인가된 후 변경될 출력값
- 래치 또는 레벨 트리거 플립플롭: 클럭이 HIGH일 때 동작
레벨 트리거는 아무 표시도 하지 않음 - 상승 에지 플립플롭: 클럭이 0에서 1로 변하는 시간에 동작
클럭 단자에 작은 삼각형을 그림 - 하강 에지 플립플롭: 클럭이 1에서 0으로 변하는 시간에 동작
클럭 단자에 작은 삼각형과 동그라미를 그림
- 나노초 단위로 보았을 때의 동작 타이밍
|
- 거시적으로는 오른쪽 그림처럼 상승 에지 직후 결정됨
- 입력 신호에 따른 플립플롭 종류 - 상승 에지의 경우
- D 플립플롭
- 입력선 D
- 클럭의 상승 에지 직전 입력 값에 따라 에지 직후에 출력의 다음상태가 결정됨
- 입력 값이 클럭이 인가된 후에 출력에 나타나므로 입력값이 지연되는 효과
- SR 플립플롭
- 입력선 S(set), R(reset)
- 클럭이 변할 때 입력 값이 S=0, R=0 → 유지
- 클럭이 변할 때 입력 값이 S=0, R=1 → 0(reset)
- 클럭이 변할 때 입력 값이 S=1, R=0 → 1(set)
- 클럭이 변할 때 입력 값이 S=1, R=1 → 사용할 수 없도록 규정함
즉, 두 입력 값이 동시에 1이 될 수 없음
- JK 플립플롭
- 입력선 J, K
- 클럭이 변할 때 입력 값 J=1, K=1 → Q'(현재상태의 반대값)
- 나머지는 전부 SR 플립플롭과 같음
- 토글: 출력 상태가 현재상태의 반대값으로 변하는 것
- T 플립플롭
- 입력선 T
- 클럭이 변할 때 입력 값 T=0 → 유지
- 클럭이 변할 때 입력 값 T=1 → 토글
3.2. 레지스터
- 레지스터: 여러 비트의 이진 정보를 저장하는 빌딩 블록
- 저장하고자 하는 비트 수만큼의 플립플롭 포함하고 있음
- 이때 연결된 플립플롭들은 한 개의 소자처럼 동작하여 출력이 모두 동시에 변함
- Enable 정논리, /Clear 부논리 제어 신호
- /Clear가 0일 때 클럭의 상태와 무관하게 출력은 즉시 0 (부논리이기 때문)
이처럼 클럭과 무관하게 아무 때나 동작하게 만드는 입력 신호를 비동기 입력이라고 함 - /Clear가 1이고 Enable 0이면 현재 상태 유지
- /Clear가 1이고 Enable 1이면 상승 에지에서 D의 값을 레지스터 출력 Q로 전달
3.3. 시프트 레지스터
- 시프트 레지스터: 레지스터에 저장된 데이터를 왼쪽 또는 오른쪽으로 자리 이동하는 레지스터
- <병렬 데이터 → 직렬 출력> 또는 <직렬 데이터 모음 → 병렬 데이터 변환> 시 사용
- 클럭이 인가될 때마다 각 출력이 오른편에 있는 플립플롭의 출력으로 나타나 자리 이동 효과
3.4. 카운터
- 카운터: 클럭 펄스가 인가됨에 따라 미리 정해진 순서로 상태를 계속 반복하는 레지스터의 일종
- 이진 카운터: 미리 정해진 순서의 상태가 2진수 순서로 증가
- n비트 이진 카운터는 0부터 2^n-1까지의 값을 순환적으로 반복 카운트
4. 레지스터 전송 언어
4.1. 마이크로오퍼레이션
- 컴퓨터에서 수행되는 최소 단위의 동작
- 한 개의 클럭 구간에서 수행되는 동작
- 타이밍 신호 발생기: 현재 몇 번째 클럭 구간을 진행하고 있는지 결정
카운터와 디코더로 구현
4.2. 레지스터 전송 언어의 표현
- 레지스터 전송 언어: 마이크로오퍼레이션을 표현하기 위한 표기법
- 콜론(:): 마이크로오퍼레이션이 수행될 조건 논리식 기술
- 문자와 숫자: 문자와 숫자의 조합으로 마이크로오퍼레이션에 관련되는 레지스터 표현
- 화살표: 데이터가 전달되는 방향 표시
- 콤마(,): 한 개의 클럭 구간에서 여러 개의 마이크로오퍼레이션 동시 수행
- 논리식과 산술식: 조건 오른쪽에 나타내며 아닌 경우도 있지만 주로 조합회로의 동작 나타냄
* 연습 문제
★ 파란색 문제 다시 한번 체크
1. 수와 코드
01. (2195.12)10를 (식 2-1)과 같은 방식으로 표현하라.
02. 문제에 주어진 진법의 수를 10진수로 변환하라.
(1) (421.3)5 111.6
(2) (726.4)8 470.5
03. 7진법의 수의 각 자리를 표현하기 위한 숫자를 모두 적어라.
0, 1, 2, 3, 4, 5, 6, 7
04. 10진수를 주어진 진법의 수로 변환하라.
(A) 381을 2진수로 101111101
(B) 381을 8진수로 575
(C) 381을 16진수로 17D
05. 2진수 1010100111011010.1010111에 대한 8진수와 16진수 표현을 구하라.
8진수: 124732.534
16진수: A9DA.AE
06. 집합 {♠, ◇, ♡, ♣}의 원소에 차례대로 {00, 01, 10, 11}의 코드를 부여한다. 질문에 답하라.
(A) ’♡◇◇♠‘을 인코드한 2진수를 16진수로 표현하라. 1001_0100 = 94h
(B) ’10111100‘을 디코드하여 기호로 표현하라. ♡♣♣♠
07. 다음 동물에 2진수 코드를 부여하고, 어떠한 점을 고려하였는지 설명하라.
소, 말, 닭, 오리, 개, 양, 도마뱀, 두꺼비, 원숭이, 치타, 뱀, 개구리, 거위, 학, 호랑이, 늑대 |
생략
08. 10진수에 대한 BCD 코드와 3초과 코드를 구하라.
(A) 301
BCD: 0011_0000_0001
3초과: 0110_0011_0100
(B) 408
BCD: 0100_0000_1000
3초과: 0111_0011_1011
(C) 516
BCD: 0101_0001_0110
3초과: 1000_0100_1001
(D) 1026
BCD: 0001_0000_0010_0110
3초과: 0100_0011_0101_1001
(E) 1225
BCD: 0001_0010_0010_0101
3초과: 0100_0101_0101_1000
(각 자리마다 3씩 다 더해 줘야 함. 주의)
09. “Computer Architecture”에 대한 ASCII 코드를 16진수로 적어라.
43 6F 6D 70 75 74 65 72 20 41 72 63 68 69 74 65 63 74 75 72 65
2. 조합 논리회로
01. 논리식에 대한 논리 회로도를 그려라.
(A)
(B)
02. 네 비트의 수를 더하여 두 비트의 합과 한 비트의 자리올림수를 출력하는 조합 논리회로의 진리표를 완성하라.
03. [그림 2-6] 2×4 디코더의 네 개의 출력에 대한 논리식을 입력신호의 조합으로 표현하라.
(바 대신 밑줄 사용)
Y0 = I0I1
Y1 = I0I1
Y2 = I0I1
Y3 = I0I1
책에서는 I1I2로 하는데.... 솔직히 그거나그거나임
04. [그림 2-7] 디코더의 신호가 정논리인지 부논리인지 밝혀라.
(A) Enable 신호: 부논리(H일 때 디코더 동작 X)
(B) Select 신호: 정논리
(C) Output 신호: 부논리(해당되는 출력에 L 사용)
05. <표 2-5>와 같이 움직이는 인코더의 문제점은 무엇인가?
입력 값이 8개로 총 256개의 입력 조합이 가능하지만 입력 신호들 중 1이 겹치지 않는 여덟 가지 경우만 사용함
이 경우 입력 신호 값 1이 겹치면 인코더로서의 기능을 상실하게 됨
06. <표 2-6>의 우선순위 인코더의 입력과 출력이 정논리인지 부논리인지 밝혀라.
입력이 모두 H일 때 인코더가 동작하지 않음
→ 입력: 부논리
부논리 입력 이진수 값에 해당하는 출력을 L로 표시함
→ 출력: 부논리
07. <표 2-6> 우선순위 인코더에서 다음과 같은 입력값에 대한 출력을 구하라.
입력 | 출력 | |||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | D | C | B | A |
H | L | H | H | L | L | H | L | H | L | H | H | H |
H | L | H | H | L | H | H | H | H | H | L | H | L |
입출력 모두 부논리이므로 L를 1로 해석해야 함 1. 높은 수부터 우선순위를 갖는 인코더이므로 입력 8만 받아들이고 나머지는 Don't Care 한다 → 8인 1000 출력, LHHH 2. 입력 5만 받아들이고 나머지는 Dont' Care 한다 → 5인 0101 출력, HLHL |
08. 멀티플렉서의 선택선 S1S0의 값이 01이고 디멀티플렉서의 선택선 S1S0의 값이 11일 때, 신호가 전달되는 과정을 아래 그림 위에 선으로 표시하라.
01 = 1 → I1 11 = 3 → O3 |
09. [그림 2-7]의 74139 디코더를 디멀티플렉서로 사용하려고 한다. 입력 신호가 다음과 같을 때, 회로도 위에 각 게이트의 출력값을 표시하라. 그리고 이때 회로가 어떻게 디멀티플렉서로 동작하는지 설명하라.
A, B가 선택선으로 사용되어 네 개의 출력 중 하나로 G1의 값을 인가한다.
ENABLE G1: 0
A1: 0
B1: 1
1Y0, 1Y1, 1Y3: 1
1Y2: 0
10. 그림의 전가산기 네 개를 선으로 연결하여 4비트 병렬 가산기 회로를 그려라.
3. 순차 논리회로
01. 입력 파형에 대한 하강 에지 D 플립플롭의 출력을 그려라. 출력 Q의 초깃값을 0으로 가정한다.
02. [그림 2-18]의 4비트 레지스터에 대하여 입력 파형이 다음과 같을 때 출력 파형을 그려라. 출력의 초깃값은 don’t care로 처리하라.
03. 전화기의 키 12개를 코드로 변환한 후 직렬로 한 비트씩 전송하려고 한다.
(A) 각 키에 할당하여야 할 비트의 최소 수는? 두 자리수를 표현할 수 있는 4비트
(B) 코드를 만드는 장치의 이름은? 인코더
(C) 코드를 저장하기에 적합한 장치의 이름은? 직렬로 변환해야 하므로 시프트 레지스터
04. 카운터는 시간을 측정하거나 숫자를 세는 데 사용한다. 일상생활에서 카운터가 사용되는 예를 세 가지 이상 제시하라.
시계, 신호등, 세탁기 등 시간을 측정하는 모든 기계
4. 레지스터 전송 언어
01. 마이크로오퍼레이션에 대한 설명으로 옳은 것을 모두 선택하라.
① 타이밍 신호 발생기가 수행하는 동작이다.
② 컴퓨터에서 수행되는 최소 단위의 동작이다.
③ 컴퓨터 회로에서 한 개의 논리 게이트를 통과하는 동작이다.
④ 컴퓨터가 한 개의 클럭 사이클 구간 동한 수행하는 동작이다.
02. 다음 설명을 레지스터 전송 언어로 표현하라.
① 제어 신호인 INT의 값이 1이면, 레지스터 PC에 8을 적재한다. INT:PC ← 8
② 레지스터 R1에서 R2를 뺀 값을 레지스터 R3에 적재한다. R3 ← R1 - R2
③ 제어 신호 A가 1이거나 B가 1일 때, 레지스터 R1의 비트 0을 1로 만든다. A + B: R1[0] ← 1
④ 타이밍 신호 발생기의 T2가 1일 때, 레지스터 IR에 레지스터 MBR의 값을 적재한다. T2: IR ← MBR
'色 > 공부' 카테고리의 다른 글
[Python][Django] 파이썬 - 구글 드라이브 API 연동 (3) | 2022.01.20 |
---|---|
[Python][Django][CSS] position: fixed 작동하지 않음 (0) | 2022.01.11 |
[한눈에 보이는 컴퓨터 구조] 1장 컴퓨터 구조 소개 (0) | 2021.11.03 |
[Google Colab][YOLO] no CUDA-capable device is detected (0) | 2021.06.28 |
[Android Studio][개발] 메모 사항 정리 (0) | 2021.06.06 |
色/공부