조합논리·순서논리, MSI, FF/레지스터/카운터
학습목표
- 조합논리회로 vs 순서논리회로의 차이를 이해한다.
- 기본 연산회로(가산·감산)와 인코더/디코더, 멀티플렉서/디멀티플렉서의 동작을 이해한다.
- 플립플롭(FF)의 개념과 레지스터, 카운터의 동작특성을 이해한다.
1) 조합논리회로 vs 순서논리회로
- 조합논리회로: 출력이 현재 입력만으로 결정
예: 가산기, 디코더, 멀티플렉서(MUX), 인코더, 비교기 등 - 순서논리회로: 출력이 현재 입력 + 내부(이전입력)상태(저장요소)로 결정
예: 플립플롭, 레지스터, 카운터, 상태기계(FSM)
블록도
[조합논리] 입력 ──> [Logic] ──> 출력
[순서논리] 입력 ──> [Logic] ──> 출력
↑ │
[상태저장(FF/레지스터)]
2) 기본 연산회로
대부분의 컴퓨터에서 산술회로는 가산기를 중심으로 구성
2.1 반가산기(HA: Half Adder)
- 입력: x, y
- 출력: s(합), c(자리올림)
- 두 비트의 덧셈
s = x ⊕ y (⊕는 XOR, 일반기호로는 x'y + xy')
c = x · y
2.2 전가산기(FA: Full Adder)
- 입력: x, y, cin(carry-in, 다음 자리로 넘어온 1)
- 출력: s, cout(carry-out)
- 세 비트의 덧셈
s = x ⊕ y ⊕ cin (일반기호: x'y'cin + x'ycin' + xy'cin' + xycin)
cout = x·y + cin·(x ⊕ y)
= x·y + x·cin + y·cin
2.3 반감산기(HS: Half Subtractor)
- 입력: x(피감수), y(감수)
- 출력: d(차), b(빌림)
- 두 비트의 뺄셈, 가산기의 입력값 반전(not 게이트 추가)
d = x ⊕ y (일반기호: x'y + xy')
b = x' · y
2.4 전감산기(FS: Full Subtractor)
- 입력: x, y, bin(빌림 입력)
- 출력: d, bout
- 전가산기에 not 게이트 추가된 형태로 구성
d = x ⊕ y ⊕ bin
bout = x'·y + bin·(x' ⊕ y)
= x'·y + x'·bin + y·bin
2.5 가·감산기(Adder-Subtractor)
- 아이디어: 뺄셈 x - y = x + (y의 2의 보수)
- 구현 요령: y ⊕ s 를 가산기에 넣고 cin = s 로 하면,
- s 값에 따라 가산 또는 감산
- s=0 → x + y (덧셈)
- s=1 → x + (y' + 1) (뺄셈)
입력 y_i' = y_i ⊕ s
cin = s
3) MSI를 이용한 조합논리 (인코더/디코더/MUX/DEMUX)
이미 만들어진 CI(직접회로)를 활용하여 구성, 논리블럭 형태로 사용되어 직접 구성할 필요가 없음.
3.1 인코더(Encoder)
- 부호화되지 않은 입력을 받아서 부호화된 출력:비부호화(원천) 입력 → 부호화된 2진 출력
- 예) 8→3 우선순위 없는 인코더: 하나의 1-hot 입력을 3비트 코드로
- 입력 D7..D0 중 Dk=1이면 출력 Q = k(2진)
3.2 디코더(Decoder)
- 부호화된 입력을 받아서 부호화되지 않은 출력: n비트 2진 입력 → 2^n 개의 출력 중 하나를 1로 활성화(1-hot)
- 예) 2→4 디코더(입력 A,B; 출력 Y0..Y3)
Y0 = A'·B'
Y1 = A'·B
Y2 = A ·B'
Y3 = A ·B
(활성-하이 기준)
3.3 멀티플렉서(MUX: Multiplexer)
- 데이터 선택기
- 여러 입력 중 하나를 선택해 단일 출력으로 전달(선택 변수를 사용하여 입력신호 중 특정 입력 신호를 선택)
- 예) 4→1 MUX (입력 I0..I3, 선택 S1 S0, 출력 F)
F = I0·S1'·S0' + I1·S1'·S0 + I2·S1·S0' + I3·S1·S0
- 구현 팁: 디코더 + AND + OR로 쉽게 합성 가능
3.4 디멀티플렉서(DEMUX: Demultiplexer)
- 데이터 분배기, 출력선의 제어
- 하나의 입력을 선택신호에 따라 여러 출력 중 하나로 보냄
- 예) 1→4 DEMUX (입력 E, 선택 S1 S0, 출력 D0..D3)
D0 = E·S1'·S0'
D1 = E·S1'·S0
D2 = E·S1 ·S0'
D3 = E·S1 ·S0
- 동작특성은 디코더와 유사(입력 E를 선택선이 가리키는 한 선으로 분배)
4) 순서논리(비동기/동기), 플립플롭(FF)
저장요소의 유무로 조합논리(무)와 순서논리(유)를 구분
4.1 비동기 vs 동기
- 비동기: 구성요소간 공통 클럭 없이 지연/피드백으로 상태 유지·변화
- 장점: 간단, 빠른 반응
- 단점: 경쟁·글리치 위험, 타이밍 검증 어려움
- 이론적으로는 좋으나 타이밍 검증과 안전한 구현이 어려워 많이 사용되지 않음.
- 동기: 클럭 에지에서만 상태전이(구성요소간 특정 순간에만 저장요소를 변경할 수 있는 신호인 클럭 펄스를 공유)
- 장점: 타이밍 예측 용이, 설계 안정
- 클럭 펄스에 의한 대기시간이 증가할 수 있다. (실제로는 매우 짧음.)
- 실무 표준: 대부분 동기식으로 구현
4.2 플립플롭(F/F: Flip Flop) 종류와 핵심 동작
- 1비트의 2진 정보를 저장할 수 있는 기억 소자
- 상태 변경 신호가 있기 전까지 현재의 2진 상태를 유지, 클럭 신호에 의해 출력 상태를 바꿈.
- RS 래치(비동기 기본 래치): S=1 설정상태, R=1 리셋상태, S=R=1은 미정 상태가 되어 금지. // 래치는 엄격히 구분하면 플리플롭은 아님.
- RS FF(클럭형): 클럭이 허용 구간일 때만 S/R 반영
- D FF: 가장 흔한 데이터 FF, D(입력 변수)에 따라 상태 결정 (D=0 리셋상태, D=1 세트상테), 클럭 에지에서 Q ← D
- JK FF: J=1,K=0 → Set, J=0,K=1 → Reset, J=K=1 → Toggle
- T FF: T=1일 때 Toggle, T=0 유지(보통 JK의 특수 구성), 값을 반전함.
간단 특성(클럭 상승에지 기준, ‘→’는 전이):
D FF: Q(next) = D
T FF: T=0 → 유지, T=1 → Q(next) = Q'
JK FF: J K
0 0 → 유지
0 1 → 0
1 0 → 1
1 1 → 토글
5) 레지스터
5.1 개념
- 여러 플리플롭을를 연결하여 n비트 데이터 저장
- 적재(load)와 유지(hold) 가 핵심 동작
- 데이터를 일시 저장하거나 전송하는 장치
5.2 적재 방식
- 직렬 적재(Shift-in): 비트를 한 비트씩 순차 입력
- 병렬 적재(Parallel load): n비트를 한 번에 입력(클럭 에지에서 동시 적재)
5.3 형태 분류(입출력 관점)
- SISO: Serial-In Serial-Out
- SIPO: Serial-In Parallel-Out
- PISO: Parallel-In Serial-Out
- PIPO: Parallel-In Parallel-Out
5.4 시프트 레지스터
- 클럭마다 저장값을 좌/우로 한 비트씩 이동(전송하는 역할)
- 직렬-병렬 변환·시퀀싱·타이밍 조절에 활용
6) 카운터
6.1 개념
- FF들을 결합해 클럭 펄스마다 정해진 순서로 상태가 변하는 회로
- 외부 데이터 입출력 없이 상태 전이로만 동작(계수)
- T나 JK 플리 플롭을 많이 사용
6.2 분류
- 비동기(리플) 카운터: 한 FF의 출력이 다음 FF 클럭으로 전파
- 구현 간단, 비트 수 증가 시 전파지연 누적
- 동기 카운터: 모든 FF가 같은 클럭을 공유
- 빠르고 예측 가능, 조합 논리로 다음상태를 생성
- 2^n 카운터(바이너리), 모듈로-N 카운터, 링 카운터, 존슨 카운터
6.3 대표 예시: 4비트 동기 2진(모듈로 16) 카운터(개념)
- 입력: clk
- 출력: Q3 Q2 Q1 Q0 (0→1→…→15→0 반복)
- 구현 힌트: T FF 사용 시 모든 T=1 로 두면 매 클럭 토글
- 바이너리 증가를 만들려면 상위 비트 T에는 하위 비트들의 AND를 연결
T0 = 1
T1 = Q0
T2 = Q0 · Q1
T3 = Q0 · Q1 · Q2
# 열 설명
# k : 10진 현재 값
# Q3 Q2 Q1 Q0 : 현재 상태
# Q3+ Q2+ Q1+ Q0+ : 다음 상태(클럭 에지 후)
k Q3 Q2 Q1 Q0 -> Q3+ Q2+ Q1+ Q0+
0 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 1 0
2 0 0 1 0 0 0 1 1
3 0 0 1 1 0 1 0 0
4 0 1 0 0 0 1 0 1
5 0 1 0 1 0 1 1 0
6 0 1 1 0 0 1 1 1
7 0 1 1 1 1 0 0 0
8 1 0 0 0 1 0 0 1
9 1 0 0 1 1 0 1 0
10 1 0 1 0 1 0 1 1
11 1 0 1 1 1 1 0 0
12 1 1 0 0 1 1 0 1
13 1 1 0 1 1 1 1 0
14 1 1 1 0 1 1 1 1
15 1 1 1 1 0 0 0 0
- JK FF로도 동일 원리로 구성 가능(J=K=T)
약어 간단 풀이
- HA: Half Adder(반가산기)
- FA: Full Adder(전가산기)
- HS: Half Subtractor(반감산기)
- FS: Full Subtractor(전감산기)
- MUX: Multiplexer(멀티플렉서)
- DEMUX: Demultiplexer(디멀티플렉서)
- MSI: Medium Scale Integration(중규모 집적회로)
- FF: Flip-Flop(플립플롭)
'Computer > Computer Architecture' 카테고리의 다른 글
| 처리장치(II) (0) | 2025.10.13 |
|---|---|
| 처리장치(I) (0) | 2025.10.13 |
| 컴퓨터 명령어(II) (0) | 2025.10.13 |
| 컴퓨터 구조의 개요 및 디지털논리회로(I) (0) | 2025.10.13 |