순차 논리와 플립플롭

한 줄 요약 — 상태를 기억하는 소자. 어레이 스캔, 카운터, 동기화의 기본 블록입니다.


조합 논리 vs 순차 논리

조합순차
출력현재 입력만으로 결정현재 입력 + 과거 상태
기억없음있음
예게이트, 디코더, 멀티플렉서(multiplexer)래치, 플립플롭, 카운터, 레지스터

래치 vs 플립플롭

래치 (level-sensitive)플립플롭 (edge-triggered)
반응인에이블이 High인 동안 투명클럭 에지에서만
타이밍관리 어려움관리 쉬움
면적·전력작음큼
권장특별한 경우만대부분의 설계

동기 설계에서는 플립플롭(flip-flop)을 쓰세요. 래치는 타이밍 해석이 어렵고 글리치에 취약합니다.


D 플립플롭

가장 많이 쓰는 소자입니다.

클럭동작
상승 에지Q←DQ \leftarrow D
그 외QQ 유지

응용:

  • 레지스터 (데이터 저장)
  • 시프트 레지스터(shift register)
  • 카운터
  • 동기화기 (synchronizer)

★ 셋업 타임과 홀드 타임

항목의미
tsut_{su} (셋업(setup)셋업·홀드 시간 setup / hold time클럭 가장자리 앞뒤로 데이터가 흔들리지 않고 서 있어야 하는 시간으로, 어기면 값이 깨집니다.자세히 보기 →)클럭 에지 전에 데이터가 안정되어야 하는 시간
tht_h (홀드)클럭 에지 후에 데이터가 유지되어야 하는 시간
tcot_{co} (clock-to-out)클럭 후 출력이 나오는 시간

타이밍 조건

최대 주파수:

Tclk>tco+tlogic+tsuT_{clk} > t_{co} + t_{logic} + t_{su}
기호
T_clk온도 또는 주기 (clk)temperature or period (clk)
t_co시간 (co)time (co)s
t_logic시간 (logic)time (logic)s
t_su시간 (su)time (su)s

홀드 위반 방지:

tco,min+tlogic,min>tht_{co,min} + t_{logic,min} > t_h
기호
t_co,min시간 (co, 최소)time (co, minimum)s
t_logic,min시간 (logic, 최소)time (logic, minimum)s
t_h시간 (h)time (h)s

⚠️ 홀드 위반은 클럭을 느리게 해도 고쳐지지 않습니다. 경로에 지연을 추가해야 합니다. 셋업 위반은 클럭을 느리게 하면 해결됩니다.


★ 메타스테이빌리티 (metastability)

셋업/홀드를 위반하면 플립플롭 출력이 중간 전압에서 불확정 시간 동안 머뭅니다.

언제 발생하나: 비동기 신호(외부 트리거, 버튼, 다른 클럭 도메인)를 클럭에 동기화할 때

해결: 2단(또는 3단) 동기화기

비동기 입력클럭과 무관한 타이밍에 도착FF1 (clk)여기서 메타스테이블에 빠질 수 있다FF2 (clk)한 주기 동안 해소된 값을 받는다동기화된 출력

두 FF는 같은 클럭을 씁니다. FF1의 출력이 FF2로만 가고 다른 곳으로는 안 가는 것이 핵심입니다 — 불확정 값을 보는 소자를 FF2 하나로 제한하는 것입니다.

FF1이 메타스테이블에 빠져도 한 클럭 주기 동안 해소될 확률이 매우 높아, FF2는 안정된 값을 받습니다.

MTBF (평균 고장 간격):

MTBF=etres/τT0⋅fclk⋅fdata\text{MTBF} = \frac{e^{t_{res}/\tau}}{T_0\cdot f_{clk}\cdot f_{data}}
기호
tau시정수time constants
e잡음 전압 밀도noise voltage densityV/√Hz
f_clk주파수 (clk)frequency (clk)Hz
f_data주파수 (data)frequency (data)Hz
t_res시간 (res)time (res)s
T_00번 온도 또는 주기temperature or period 0

trest_{res}(해소 시간)가 늘어나면 MTBF가 지수적으로 개선됩니다. 그래서 단을 하나 더 추가하는 것이 매우 효과적입니다.

측정 시스템에서 외부 트리거를 받을 때 반드시 동기화기를 넣으세요. 안 그러면 드물게(하루에 한 번, 일주일에 한 번) 원인 불명의 오동작이 발생합니다.


시프트 레지스터

D 플립플롭을 직렬로 연결한 것. 어레이 스캔의 핵심 부품입니다.

데이터 입력FF (clk)1 클럭 지연FF (clk)2 클럭 지연FF (clk)3 클럭 지연FF (clk)4 클럭 지연 …

모든 FF가 같은 클럭을 공유하고, 각 FF의 출력이 다음 FF의 D 입력으로 들어갑니다. 클럭이 한 번 올 때마다 값이 한 칸씩 옆으로 밀립니다.

용도설명
행 선택 스캔‘1’ 하나를 넣고 시프트하면 순차적으로 각 행이 선택됨
직렬↔병렬 변환SPI, 데이터 확장
지연선N 클럭 지연

💡 02 문제 3에서 본 “2선으로 50행 스캔”이 바로 이것입니다. 클럭과 데이터만으로 어레이 전체를 순차 주사할 수 있어, 이식형 소자처럼 배선(trace)이 극도로 제한된 환경에서 필수적입니다.


카운터

종류특징
비동기(리플(ripple)리플 ripple직류가 되다 만 나머지 교류분으로, 평활 커패시터가 얼마나 큰지로 정해집니다.Vr=If CV_r = \frac{I}{f\,C}자세히 보기 →)간단, 부품 적음. 각 단의 지연이 누적되어 글리치
동기모든 FF이 같은 클럭. 빠르고 깨끗

측정 시스템에서는 동기 카운터를 쓰세요. 리플 카운터의 글리치가 아날로그로 결합됩니다.


시뮬레이션으로 확인

디지털 로직은 SPICE보다 논리 시뮬레이터가 적합하지만, 타이밍과 신호 무결성(signal integrity)은 SPICE로 볼 수 있습니다.

클럭 배선의 링잉과 직렬 종단 회로도RS22Ω직렬 종단LT50nH배선 인덕턴스VGCL15pF입력 용량SRCMIDINGND
클럭 배선의 링잉과 직렬 종단워크벤치에서 열기 →
# 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}

RS=0R_S = 0이면 심한 링잉(ringing)이, 22 Ω이면 크게 완화되는 것을 볼 수 있습니다.

fring=12πLC=12π50n×15p≈184 MHzf_{ring} = \frac{1}{2\pi\sqrt{LC}} = \frac{1}{2\pi\sqrt{50\text{n}\times15\text{p}}} \approx 184\ \text{MHz}
기호
C정전용량capacitanceF
f_ring주파수 (ring)frequency (ring)Hz
L인덕턴스inductanceH

⚖️ 부품 트레이드오프

선택✅ 좋아지는 것⚠️ 나빠지는 것
동기 설계타이밍 해석 가능, 안정클럭 배선 필요, 전력
비동기 설계저전력, 클럭 없음타이밍 위험, 글리치
동기화기 2단메타스테이빌리티메타스테이빌리티 metastability셋업·홀드를 어긴 플립플롭이 0도 1도 아닌 중간에 머무는 현상으로, 두 단 동기화기로 확률을 낮춥니다.자세히 보기 → 방지2클럭 지연
동기화기 3단MTBF 크게 개선3클럭 지연
낮은 클럭 주파수EMI↓, 전력↓, 타이밍 여유↑처리량↓
직렬 종단(termination) 저항링잉·EMI↓지연↑

💡 측정 시스템에서는 클럭 주파수를 필요한 최소로 낮추세요. EMI와 전력이 모두 줄어듭니다. 특히 아날로그 프론트엔드와 같은 보드라면 결정적입니다.


🔌 실제 쓰임새

용도소자
어레이 행 스캔시프트 레지스터 (16-01)
외부 트리거 동기화2단 D 플립플롭
샘플링 타이밍 생성카운터 + 디코더
데이터 래치레지스터
디바운싱디바운싱 debouncing기계 접점이 붙을 때 수 ms 동안 튀는 것을 걸러 한 번의 눌림으로 읽는 처리입니다.자세히 보기 → (디지털)시프트 레지스터 + 판정 (10-02)
클럭 분주카운터

⚠️ 이상과 실제의 차이

이상실제
즉시 상태 전환tcot_{co} 지연
셋업/홀드만 지키면 안전클럭 스큐(skew)로 실제 여유가 다름
메타스테이블 없음비동기 입력에서 반드시 발생 가능
클럭이 동시에 도달배선 지연으로 스큐 발생
출력이 깨끗링잉, 크로스토크(crosstalk)크로스토크 crosstalk옆 배선의 신호가 용량이나 자기장을 타고 내 신호에 섞여 들어오는 것입니다.자세히 보기 →

연습문제

문제 1. tcot_{co} = 5 ns, 조합 논리 지연 10 ns, tsut_{su} = 3 ns. 최대 클럭 주파수는?

연습 9-03-1 — 타이밍 예산이 최대 클럭을 정한다 회로도R11kΩ논리의 구동 저항VQ플립플롭 출력 (t_co 5 ns 뒤)C114.4pF다음 단 입력 용량QDGND
연습 9-03-1 — 타이밍 예산이 최대 클럭을 정한다워크벤치에서 열기 →
풀이 Tmin=5+10+3=18 nsT_{min} = 5+10+3 = 18\ \text{ns}
기호
T_min최소 온도 또는 주기minimum temperature or period
fmax=118 ns≈55.6 MHzf_{max} = \frac{1}{18\ \text{ns}} \approx 55.6\ \text{MHz}
기호
f_max최대 주파수maximum frequencyHz

실무에서는 여유를 20~30% 두어 40 MHz 정도로 운용합니다.

문제 2. 외부 장비의 트리거 신호를 MCU 클럭에 동기화해야 합니다. 왜 필요하고 어떻게 합니까?

exercises/09-03-sync-trigger.yaml
풀이

왜: 외부 트리거는 MCU 클럭과 무관한 타이밍에 도착하므로, 하필 셋업/홀드 구간에 에지가 오면 메타스테이블 상태가 됩니다. 그러면 그 값을 읽는 로직마다 다른 값을 볼 수 있어(fan-out에 따라) 시스템이 불일치 상태에 빠집니다.

어떻게:

외부 트리거비동기FF1 (clk)FF2 (clk)FF3 (clk)신뢰성이 중요하면 한 단 더내부 로직

2단이 표준이고, 클럭이 매우 빠르거나 신뢰성이 중요하면 3단을 씁니다.

추가 고려:

  • 입력에 슈미트 트리거(Schmitt trigger) — 느린 에지로 인한 발진 방지
  • RC 필터 — 노이즈로 인한 가짜 트리거 방지
  • 트리거 정확도가 중요하면 타임스탬프 카운터로 도착 시각을 기록 (동기화 지연을 보정)

⚠️ 동기화기는 2~3 클럭의 지연을 추가합니다. 트리거 타이밍 정밀도가 중요한 측정에서는 이 지연을 보정하거나, 별도의 고속 타임스탬프 회로를 써야 합니다.


이전 ← 02 논리 게이트와 부울대수 | 다음 → 04 클럭과 타이밍