순차 논리와 플립플롭
한 줄 요약 — 상태를 기억하는 소자. 어레이 스캔, 카운터, 동기화의 기본 블록입니다.
조합 논리 vs 순차 논리
| 조합 | 순차 | |
|---|---|---|
| 출력 | 현재 입력만으로 결정 | 현재 입력 + 과거 상태 |
| 기억 | 없음 | 있음 |
| 예 | 게이트, 디코더, 멀티플렉서(multiplexer) | 래치, 플립플롭, 카운터, 레지스터 |
래치 vs 플립플롭
| 래치 (level-sensitive) | 플립플롭 (edge-triggered) | |
|---|---|---|
| 반응 | 인에이블이 High인 동안 투명 | 클럭 에지에서만 |
| 타이밍 | 관리 어려움 | 관리 쉬움 |
| 면적·전력 | 작음 | 큼 |
| 권장 | 특별한 경우만 | 대부분의 설계 |
동기 설계에서는 플립플롭(flip-flop)을 쓰세요. 래치는 타이밍 해석이 어렵고 글리치에 취약합니다.
D 플립플롭
가장 많이 쓰는 소자입니다.
| 클럭 | 동작 |
|---|---|
| 상승 에지 | |
| 그 외 | 유지 |
응용:
- 레지스터 (데이터 저장)
- 시프트 레지스터(shift register)
- 카운터
- 동기화기 (synchronizer)
★ 셋업 타임과 홀드 타임
| 항목 | 의미 |
|---|---|
| (셋업(setup)셋업·홀드 시간 setup / hold time클럭 가장자리 앞뒤로 데이터가 흔들리지 않고 서 있어야 하는 시간으로, 어기면 값이 깨집니다.자세히 보기 →) | 클럭 에지 전에 데이터가 안정되어야 하는 시간 |
| (홀드) | 클럭 에지 후에 데이터가 유지되어야 하는 시간 |
| (clock-to-out) | 클럭 후 출력이 나오는 시간 |
타이밍 조건
최대 주파수:
T_clk온도 또는 주기 (clk)temperature or period (clk)t_co시간 (co)time (co)st_logic시간 (logic)time (logic)st_su시간 (su)time (su)s홀드 위반 방지:
t_co,min시간 (co, 최소)time (co, minimum)st_logic,min시간 (logic, 최소)time (logic, minimum)st_h시간 (h)time (h)s⚠️ 홀드 위반은 클럭을 느리게 해도 고쳐지지 않습니다. 경로에 지연을 추가해야 합니다. 셋업 위반은 클럭을 느리게 하면 해결됩니다.
★ 메타스테이빌리티 (metastability)
셋업/홀드를 위반하면 플립플롭 출력이 중간 전압에서 불확정 시간 동안 머뭅니다.
언제 발생하나: 비동기 신호(외부 트리거, 버튼, 다른 클럭 도메인)를 클럭에 동기화할 때
해결: 2단(또는 3단) 동기화기
두 FF는 같은 클럭을 씁니다. FF1의 출력이 FF2로만 가고 다른 곳으로는 안 가는 것이 핵심입니다 — 불확정 값을 보는 소자를 FF2 하나로 제한하는 것입니다.
FF1이 메타스테이블에 빠져도 한 클럭 주기 동안 해소될 확률이 매우 높아, FF2는 안정된 값을 받습니다.
MTBF (평균 고장 간격):
tau시정수time constantse잡음 전압 밀도noise voltage densityV/√Hzf_clk주파수 (clk)frequency (clk)Hzf_data주파수 (data)frequency (data)Hzt_res시간 (res)time (res)sT_00번 온도 또는 주기temperature or period 0(해소 시간)가 늘어나면 MTBF가 지수적으로 개선됩니다. 그래서 단을 하나 더 추가하는 것이 매우 효과적입니다.
측정 시스템에서 외부 트리거를 받을 때 반드시 동기화기를 넣으세요. 안 그러면 드물게(하루에 한 번, 일주일에 한 번) 원인 불명의 오동작이 발생합니다.
시프트 레지스터
D 플립플롭을 직렬로 연결한 것. 어레이 스캔의 핵심 부품입니다.
모든 FF가 같은 클럭을 공유하고, 각 FF의 출력이 다음 FF의 D 입력으로 들어갑니다. 클럭이 한 번 올 때마다 값이 한 칸씩 옆으로 밀립니다.
| 용도 | 설명 |
|---|---|
| 행 선택 스캔 | ‘1’ 하나를 넣고 시프트하면 순차적으로 각 행이 선택됨 |
| 직렬↔병렬 변환 | SPI, 데이터 확장 |
| 지연선 | N 클럭 지연 |
💡 02 문제 3에서 본 “2선으로 50행 스캔”이 바로 이것입니다. 클럭과 데이터만으로 어레이 전체를 순차 주사할 수 있어, 이식형 소자처럼 배선(trace)이 극도로 제한된 환경에서 필수적입니다.
카운터
| 종류 | 특징 |
|---|---|
| 비동기(리플(ripple)리플 ripple직류가 되다 만 나머지 교류분으로, 평활 커패시터가 얼마나 큰지로 정해집니다.자세히 보기 →) | 간단, 부품 적음. 각 단의 지연이 누적되어 글리치 |
| 동기 | 모든 FF이 같은 클럭. 빠르고 깨끗 |
측정 시스템에서는 동기 카운터를 쓰세요. 리플 카운터의 글리치가 아날로그로 결합됩니다.
시뮬레이션으로 확인
디지털 로직은 SPICE보다 논리 시뮬레이터가 적합하지만, 타이밍과 신호 무결성(signal integrity)은 SPICE로 볼 수 있습니다.
# examples/09-digital/clock-ringing.yaml
meta:
name: 클럭 배선의 링잉과 직렬 종단
lesson: docs/09-digital/03-flipflops.md
note: RS를 0/22/47Ω으로 바꾸며 링잉을 비교
components:
- {ref: VG, type: vpulse, params: {v1: 0, v2: 3.3, td: 10n, tr: 1n, tf: 1n, pw: 50n, per: 100n}}
- {ref: RS, type: r, value: 22, label: 직렬 종단}
- {ref: LT, type: l, value: 50n, label: 배선 인덕턴스}
- {ref: CL, type: c, value: 15p, label: 입력 용량}
nets:
SRC: [VG.p, RS.1]
MID: [RS.2, LT.1]
IN: [LT.2, CL.1]
GND: [VG.n, CL.2]
analyses:
- {type: tran, tstep: 100p, tstop: 200n}이면 심한 링잉(ringing)이, 22 Ω이면 크게 완화되는 것을 볼 수 있습니다.
C정전용량capacitanceFf_ring주파수 (ring)frequency (ring)HzL인덕턴스inductanceH⚖️ 부품 트레이드오프
| 선택 | ✅ 좋아지는 것 | ⚠️ 나빠지는 것 |
|---|---|---|
| 동기 설계 | 타이밍 해석 가능, 안정 | 클럭 배선 필요, 전력 |
| 비동기 설계 | 저전력, 클럭 없음 | 타이밍 위험, 글리치 |
| 동기화기 2단 | 메타스테이빌리티메타스테이빌리티 metastability셋업·홀드를 어긴 플립플롭이 0도 1도 아닌 중간에 머무는 현상으로, 두 단 동기화기로 확률을 낮춥니다.자세히 보기 → 방지 | 2클럭 지연 |
| 동기화기 3단 | MTBF 크게 개선 | 3클럭 지연 |
| 낮은 클럭 주파수 | EMI↓, 전력↓, 타이밍 여유↑ | 처리량↓ |
| 직렬 종단(termination) 저항 | 링잉·EMI↓ | 지연↑ |
💡 측정 시스템에서는 클럭 주파수를 필요한 최소로 낮추세요. EMI와 전력이 모두 줄어듭니다. 특히 아날로그 프론트엔드와 같은 보드라면 결정적입니다.
🔌 실제 쓰임새
| 용도 | 소자 |
|---|---|
| 어레이 행 스캔 | 시프트 레지스터 (16-01) |
| 외부 트리거 동기화 | 2단 D 플립플롭 |
| 샘플링 타이밍 생성 | 카운터 + 디코더 |
| 데이터 래치 | 레지스터 |
| 디바운싱디바운싱 debouncing기계 접점이 붙을 때 수 ms 동안 튀는 것을 걸러 한 번의 눌림으로 읽는 처리입니다.자세히 보기 → (디지털) | 시프트 레지스터 + 판정 (10-02) |
| 클럭 분주 | 카운터 |
⚠️ 이상과 실제의 차이
| 이상 | 실제 |
|---|---|
| 즉시 상태 전환 | 지연 |
| 셋업/홀드만 지키면 안전 | 클럭 스큐(skew)로 실제 여유가 다름 |
| 메타스테이블 없음 | 비동기 입력에서 반드시 발생 가능 |
| 클럭이 동시에 도달 | 배선 지연으로 스큐 발생 |
| 출력이 깨끗 | 링잉, 크로스토크(crosstalk)크로스토크 crosstalk옆 배선의 신호가 용량이나 자기장을 타고 내 신호에 섞여 들어오는 것입니다.자세히 보기 → |
연습문제
문제 1. = 5 ns, 조합 논리 지연 10 ns, = 3 ns. 최대 클럭 주파수는?
풀이
T_min최소 온도 또는 주기minimum temperature or periodf_max최대 주파수maximum frequencyHz실무에서는 여유를 20~30% 두어 40 MHz 정도로 운용합니다.
문제 2. 외부 장비의 트리거 신호를 MCU 클럭에 동기화해야 합니다. 왜 필요하고 어떻게 합니까?
exercises/09-03-sync-trigger.yaml풀이
왜: 외부 트리거는 MCU 클럭과 무관한 타이밍에 도착하므로, 하필 셋업/홀드 구간에 에지가 오면 메타스테이블 상태가 됩니다. 그러면 그 값을 읽는 로직마다 다른 값을 볼 수 있어(fan-out에 따라) 시스템이 불일치 상태에 빠집니다.
어떻게:
2단이 표준이고, 클럭이 매우 빠르거나 신뢰성이 중요하면 3단을 씁니다.
추가 고려:
- 입력에 슈미트 트리거(Schmitt trigger) — 느린 에지로 인한 발진 방지
- RC 필터 — 노이즈로 인한 가짜 트리거 방지
- 트리거 정확도가 중요하면 타임스탬프 카운터로 도착 시각을 기록 (동기화 지연을 보정)
⚠️ 동기화기는 2~3 클럭의 지연을 추가합니다. 트리거 타이밍 정밀도가 중요한 측정에서는 이 지연을 보정하거나, 별도의 고속 타임스탬프 회로를 써야 합니다.
이전 ← 02 논리 게이트와 부울대수 | 다음 → 04 클럭과 타이밍