← 블로그로 돌아가기순차 논리

SR과 JK 플립플롭 비교: 순차 논리의 기초

JK 플립플롭은 J=K=1을 토글로 다시 정의하여 SR 래치의 금지 상태를 해결합니다. 두 소자를 비교하고 excitation table을 유도하여 카운터를 만들어 봅니다.

DennyDenny
약 9분 소요
Chalkboard feature illustration for “SR과 JK 플립플롭 비교: 순차 논리의 기초”

요약: SR 래치는 가장 단순한 메모리 소자지만 두 입력이 모두 1일 때 금지 상태가 됩니다. JK 플립플롭은 내부 피드백(S=J⋅Q‾S = J\cdot\overline{Q}, R=K⋅QR = K\cdot Q)과 race-around 진동을 막는 master-slave 클록을 사용하여 J=K=1을 토글로 다시 정의하고 이 문제를 해결합니다.

가산기와 멀티플렉서 같은 조합 회로는 현재 입력만으로 출력을 만듭니다. 순차 논리는 메모리를 추가합니다. 플립플롭은 클록 사이클을 지나도 상태를 유지합니다. 이 가이드에서는 순차 논리의 두 기본 부품인 SR 래치와 JK 플립플롭을 비교하고, JK 설계가 SR의 결정적인 결함을 어떻게 없애는지 보여 줍니다.

조합 논리와 순차 논리

가산기와 멀티플렉서 같은 조합 회로는 전파 지연이 지난 뒤 현재 입력 값으로 결정되는 출력을 냅니다. 실제 입력은 항상 유효한 레벨로 구동해야 합니다. “입력이 없음”은 특별한 연산이 아니며 떠 있는 입력은 전기적으로 정의되지 않습니다.

순차 회로는 결정적인 속성인 상태를 더합니다. 출력은 현재 입력뿐 아니라 입력 이력에도 의존하므로 메모리를 가집니다. 플립플롭은 Q=0 또는 Q=1 상태에 있을 수 있고 명시적으로 바꾸라는 지시가 올 때까지 유지합니다. 이 속성이 계산을 가능하게 합니다. 상태가 없으면 레지스터, 카운터, 프로그램 카운터, CPU도 없습니다.

SR 래치: 메모리가 시작되는 곳

SR 래치(Set-Reset Latch)는 교차 결합된 NOR 게이트 또는 NAND 게이트 두 개로 만드는 가장 단순한 메모리 소자입니다. S(Set), R(Reset) 두 입력과 서로 보수인 Q, Q‾\overline{Q} 두 출력이 있습니다.

교차 결합 게이트와 진리표를 보여 주는 NOR 기반 SR 래치

SR 래치 진리표

SRQ(다음)동작
00Q(변화 없음)유지(메모리)
010Reset(Clear)
101Set(1 저장)
11?INVALID(금지)

SR 래치 특성식

동작은 다음 식으로 정식화할 수 있습니다.

Qnext=S+R‾⋅Q(constraint: S⋅R=0)Q_{next} = S + \overline{R} \cdot Q \quad \text{(constraint: } S \cdot R = 0\text{)}

제약 S⋅R=0S \cdot R = 0은 SR 래치의 근본적인 약점입니다. 식은 S와 R이 동시에 ‘1’이 아닐 때만 유효합니다. 이 제약을 위반하면 금지 상태가 되어 두 출력이 모두 ‘0’으로 내려가고, 입력을 놓았을 때 최종 상태는 비결정적인 경쟁으로 정해집니다.

SR 래치 시연 템플릿

금지 상태가 위험한 이유

S=R=1이면 두 NOR 게이트가 모두 ‘0’을 출력하도록 강제되어 Q = Q‾\overline{Q} = 0이라는 논리적 모순이 생깁니다. 두 입력이 동시에 ‘0’으로 돌아오면 두 게이트 모두 ‘1’을 출력하려고 경쟁합니다. 승자는 전파 지연, 온도, 제조 공정 오차의 나노초 수준 차이에 달려 있습니다. 결과는 예측할 수 없고, 최악에는 출력이 유효한 ‘0’도 ‘1’도 아닌 중간 전압인 준안정 상태에 빠질 수 있습니다.

JK 플립플롭: 완전한 해법

JK 플립플롭은 SR 래치의 금지 상태를 정면으로 해결합니다. J=K=1J=K=1 조건을 미정으로 남기지 않고 각 클록 에지에서 출력이 반전되는 토글로 다시 정의합니다. 이 한 가지 혁신이 결함 있는 메모리 소자를 디지털 설계에서 가장 다재다능한 플립플롭으로 바꿉니다.

오실로스코프를 포함한 master-slave JK 플립플롭

JK 플립플롭 진리표

JKQ(다음)동작
00Q(변화 없음)유지
010Reset
101Set
11Q‾\overline{Q}(반전)토글

JK 플립플롭 특성식

Qnext=(J⋅Q‾)+(K‾⋅Q)Q_{next} = (J \cdot \overline{Q}) + (\overline{K} \cdot Q)

현재 상태에서 피드백은 set과 reset 요청을 서로 배타적으로 만듭니다. Q‾\overline{Q}가 J 항을 게이트하고 QQ가 K 항을 게이트하므로 SR의 금지 입력 조합이 사라집니다. 그러나 피드백만으로는 레벨 민감형 JK 설계의 race-around를 막지 못합니다. master–slave 또는 edge-triggered 타이밍이 장치를 한 sampling event당 외부에서 보이는 전이 하나로 제한합니다.

JK 플립플롭 레슨

Master-Slave 아키텍처

초기 JK 설계는 레벨 트리거 방식이어서 race-around condition이 생겼습니다. 클록 펄스가 충분히 오래 High이면 토글된 출력이 피드백되어 같은 펄스 안에서 다시 토글되고, 제어할 수 없는 진동이 일어났습니다.

해법은 SR 래치 두 개를 직렬로 사용하는 master-slave 아키텍처입니다.

  1. Master 래치: 클록이 HIGH인 동안 입력을 캡처합니다. 출력은 slave와 격리됩니다.
  2. Slave 래치: 클록이 LOW로 전이될 때 master 출력을 캡처합니다. 이때 외부 Q 출력이 실제로 바뀝니다.

master와 slave가 동시에 투명해지는 일이 없으므로 출력은 클록 사이클당 한 번만 바뀔 수 있습니다. 현대 구현은 edge-triggering으로 같은 효과를 더 효율적으로 얻지만, master-slave 개념을 이해하면 JK 플립플롭에 클록이 필요한 이유와 race-around 문제를 피하는 원리를 알 수 있습니다.

Race-Around Condition 자세히 보기

race-around condition은 클로킹 전략의 중요성을 잘 보여 주므로 자세히 살펴볼 가치가 있습니다.

J=K=1인 단순한 레벨 트리거 JK 래치의 토글 순서는 다음과 같습니다.

  1. 클록이 HIGH가 되면 출력이 0에서 1로 토글됩니다.
  2. 새 출력 Q=1이 입력 게이트로 피드백됩니다.
  3. 클록은 아직 HIGH입니다. 게이트 논리가 새 상태를 보고 다시 토글하여 Q가 1에서 0으로 바뀝니다.
  4. 클록이 HIGH인 동안 이 주기가 반복됩니다.

출력은 게이트의 전파 지연 주파수로 진동하여 사실상 링 발진기가 됩니다. 클록이 내려갈 때의 최종 상태는 정확한 펄스 폭과 게이트 지연의 관계에 달려 있어 비결정적입니다.

digisim.io에서 사용하는 edge-triggered JK 플립플롭은 이 문제를 완전히 없앱니다. 플립플롭은 클록 전이 순간에만 J와 K를 샘플링합니다. 출력이 바뀌어 피드백될 때는 이미 샘플링 창이 닫혀 있습니다.

Excitation Table: 플립플롭으로 설계하기

카운터나 상태 머신 같은 순차 회로를 설계할 때는 원하는 상태 전이에서 거꾸로 필요한 입력을 구합니다. 이때 excitation table이 필수입니다.

SR 래치 Excitation Table

QQ(현재)QnextQ_{next}(목표)SR
000X
0110
1001
11X0

(X = 무관 조건)

JK 플립플롭 Excitation Table

QQ(현재)QnextQ_{next}(목표)JK
000X
011X
10X1
11X0

JK excitation table에는 무관 조건이 많습니다. 각 전이에 무관 조건 하나가 있습니다. SR 표는 무관 조건이 더 적고 S⋅R=0S \cdot R = 0 제약도 계속 지켜야 합니다. 추가 무관 조건 덕분에 플립플롭을 구동하는 조합 논리를 설계할 때 불 식을 훨씬 더 많이 단순화할 수 있습니다. 실제 설계에서 게이트 수를 줄일 때 분명한 장점입니다.

종합 비교

특징SR 래치JK 플립플롭
입력S(Set), R(Reset)J, K, Clock
S=R=1 / J=K=1Invalid(경쟁 상태)토글(명확히 정의됨)
트리거 방식레벨 민감형(비동기)에지 트리거(동기)
클록 필요?아니요(기본 SR 래치)예
특성식Qnext=S+R‾⋅QQ_{next} = S + \overline{R} \cdot QQnext=JQ‾+K‾QQ_{next} = J\overline{Q} + \overline{K}Q
금지 상태있음(S=R=1)제거됨
Excitation table의 무관 조건더 적음더 많음(최적화에 유리)
Race-around 위험해당 없음(클록 없음)edge-triggering으로 제거
구현 크기핵심 래치에 교차 결합 게이트 두 개구현에 따라 다름. master–slave와 edge-triggered 형태는 추가 저장 및 게이팅 필요
주요 용도제어 상태 유지, 스위치 디바운싱카운터와 교육용 상태 머신 설계
다른 플립플롭 형식을 만들 수 있나?제한적가능(범용)

Edge Triggering: 클록의 역할

현대 플립플롭은 edge-triggered 방식으로 클록 전이의 정확한 순간에만 상태를 바꿉니다. 언제든 입력에 반응하는 레벨 민감형 SR 래치와 근본적으로 다릅니다.

오실로스코프를 포함한 edge-triggered D 플립플롭

edge triggering은 세 가지 중요한 보장을 제공합니다.

  1. 정의된 샘플링 이벤트: setup과 hold 제약이 충족되면 지정된 에지에서 입력을 캡처합니다.
  2. 시간 필터링: 샘플링 창과 겹치지 않는 데이터 글리치는 캡처되지 않습니다. 클록 글리치와 에지 근처의 데이터 변화는 여전히 위험합니다.
  3. 조합 가능성: 여러 플립플롭이 클록을 공유하고 각자의 clock-to-Q 지연 뒤에 갱신되어 다중 비트 상태를 조정할 수 있습니다.

SR과 JK 사이 변환

JK 플립플롭은 “범용”으로 여겨지므로 다른 플립플롭 형식을 흉내 낼 수 있습니다. 변환 방식을 이해하면 두 부품을 더 깊이 알 수 있습니다.

SR에서 JK로 변환: Q와 Q‾\overline{Q}를 피드백하는 AND 게이트를 추가합니다.

  • S=J⋅Q‾S = J \cdot \overline{Q}
  • R=K⋅QR = K \cdot Q

피드백은 J=K=1일 때 현재 상태에 따라 S와 R 중 하나만 활성화되도록 합니다. 그 결과 금지된 SR 상태를 구조적으로 막으면서 토글 동작을 만듭니다.

JK에서 D로 변환: D를 J에, D‾\overline{D}를 K에 연결합니다.

JK에서 T로 변환: J와 K를 묶어 하나의 T 입력으로 사용합니다.

카운터 만들기: JK 플립플롭의 대표 응용

J=K=1이면 JK 플립플롭은 모든 클록 에지에서 토글되므로 이진 카운터의 자연스러운 구성 요소입니다. JK 플립플롭 네 개를 Q 출력이 다음 단계의 클록을 구동하도록 연결하면 0000부터 1111까지 진행하는 4비트 리플 카운터가 됩니다.

리플 카운터(비동기)

리플 카운터에서는 각 플립플롭의 Q 출력이 다음 플립플롭의 클록 입력을 구동합니다. 각 단계가 다음 단계를 트리거하면서 count가 체인을 따라 “물결칩니다.”

  • FF0은 모든 시스템 클록 에지에서 토글됩니다(주파수 = f/2f/2).
  • FF1은 모든 FF0 전이에서 토글됩니다(주파수 = f/4f/4).
  • FF2는 모든 FF1 전이에서 토글됩니다(주파수 = f/8f/8).
  • FF3은 모든 FF2 전이에서 토글됩니다(주파수 = f/16f/16).

출력 Q3 Q2 Q1 Q0는 클록 사이클마다 1씩 증가하는 4비트 이진수를 나타냅니다. 각 단계가 전파 지연을 더하므로 상위 비트가 하위 비트보다 늦게 안정된다는 대가가 있습니다. 각 클록 에지 직후 아주 짧은 동안 카운터 출력이 잘못된 과도 값을 보일 수 있습니다. 고속 응용에서는 이 리플 지연이 문제가 되므로 모든 플립플롭이 같은 클록을 공유하는 동기 카운터가 선호됩니다.

동기 카운터

동기 카운터에서는 모든 플립플롭이 시스템 클록을 공유합니다. 각 플립플롭의 J와 K 입력은 현재 상태에서 유도한 조합 논리가 구동합니다. 3비트 동기 up-counter는 다음과 같습니다.

  • FF0: J0=K0=1(항상 토글)
  • FF1: J1=K1=Q0(Q0=1일 때만 토글)
  • FF2: J2=K2=Q0 ⋅\cdot Q1(Q0와 Q1이 모두 1일 때만 토글)

모든 단계가 같은 클록 에지를 샘플링하므로 단계별로 클록이 통과하는 리플 의존성이 사라집니다. 그래도 출력에는 clock-to-Q 지연이 있고 조합 enable 논리에도 지연이 있으며, 서로 다른 비트가 물리적으로 정확히 같은 순간에 바뀔 필요는 없습니다.

T 플립플롭 주파수 분주기

비동기 카운터 레슨

Edge Triggered D 플립플롭 템플릿

설계 예제: Excitation Table 사용하기

excitation table의 실용적 가치를 보이기 위해 JK 플립플롭으로 0, 1, 2, 3, 0, 1, … 순서로 세는 단순한 2비트 카운터를 설계해 봅시다.

1단계: 상태표. 각 조합에 대한 현재 상태와 목표 다음 상태를 나열합니다.

현재 Q1현재 Q0다음 Q1다음 Q0
0001
0110
1011
1100

2단계: excitation table 적용. 각 플립플롭에 필요한 J와 K 입력을 구합니다.

FF0(Q0)의 전이는 0->1, 1->0, 0->1, 1->0입니다. JK excitation table에서 모든 경우 J0=1, K0=1입니다. 따라서 J0=K0=1이고 FF0은 항상 토글됩니다.

FF1(Q1)의 전이는 0->0, 0->1, 1->1, 1->0입니다. excitation table을 적용하면 J1=0/K1=X, J1=1/K1=X, J1=X/K1=0, J1=X/K1=1입니다. 카르노 맵으로 J1=Q0, K1=Q0를 얻습니다.

결과: 2비트 동기 카운터에는 J0=K0=1과 J1=K1=Q0가 필요합니다. 플립플롭과 Q0에서 FF1의 J, K 입력으로 가는 전선 하나 외에는 추가 게이트가 필요하지 않습니다. 무관 조건이 많아 최소화가 쉬웠으며, SR 대신 JK를 선택한 직접적인 이점입니다.

응용 요약

응용부품이유
스위치 디바운싱SR 래치단순하고 클록이 필요 없으며 첫 접촉이 상태를 설정함
SRAM 개념교차 결합 쌍안정 피드백고밀도 SRAM은 보통 패키지형 SR 래치가 아니라 교차 결합 인버터와 access transistor를 사용함
이진 카운터JK 플립플롭토글 모드가 자연스럽게 count함
주파수 분주기JK 또는 T 플립플롭각 단계가 클록을 2로 나눔
상태 머신(FSM)JK 플립플롭무관 조건이 논리를 단순화함
CPU 레지스터D 플립플롭가장 단순한 데이터 캡처, 금지 상태 없음
시프트 레지스터D 플립플롭단계 사이에서 직렬 데이터 이동

직접 해 보기

digisim.io에서 다음 회로를 실험하세요.

  1. SR 래치: NOR 게이트 두 개로 만들고 네 입력 조합을 모두 시험합니다. 금지 상태를 주의 깊게 관찰하세요.
  2. JK 토글 모드: J=K=1로 클록에 연결하고 오실로스코프로 각 에지에서 Q가 토글되는 모습을 봅니다.
  3. 3비트 리플 카운터: 토글 모드의 JK 플립플롭 세 개를 연결합니다. Q 출력을 오실로스코프에 연결하여 이진 count 패턴을 관찰합니다.
  4. SR-to-JK 변환: SR 래치, AND 게이트 두 개, 클록으로 JK 플립플롭을 만듭니다. J=K=1이 금지 상태 대신 깔끔한 토글을 만드는지 확인합니다.
  5. Excitation table 연습: JK 플립플롭으로 mod-6 카운터를 설계합니다. excitation table로 각 플립플롭의 J, K 입력 논리를 유도하세요.

이 원시 소자들로 완전한 FSM을 만들려면 카운터와 상태 머신을 이어서 읽고, 레지스터에서 흔히 쓰는 동기 저장 소자는 D 플립플롭 문서에서 확인하세요.

아이디어를 실제로 작동하는 회로로 만들어 보세요.