배우기 › 주제 9
래치와 플립플롭: SR, D, JK, T 단계별 이해
읽는 시간 7분 · bitGateLab 팀
지금까지는 회로의 출력이 그 순간의 입력에만 의존했습니다. 수를 세거나, 데이터를 저장하거나, 어떤 과정이 몇 번째 단계에 있는지 기억하려면 메모리가 필요하며, 가장 작은 메모리 셀이 래치입니다. 여기서는 게이트 두 개로 래치를 만들고, 이를 에지 트리거 플립플롭으로 바꾸고, 카운터와 상태 기계를 설계할 때 필요한 표들을 사용해 봅니다.
SR 래치
출력을 서로의 입력으로 교차 연결한 NOR 게이트 두 개가 SR 래치를 이룹니다. 이 피드백이 메모리를 만들어 냅니다. 출력이 한번 어떤 값을 가지면 스스로 그 값을 유지합니다.
| S | R | 다음 Q | 동작 |
|---|---|---|---|
| 0 | 0 | Q | 유지 |
| 0 | 1 | 0 | 리셋 |
| 1 | 0 | 1 | 셋 |
| 1 | 1 | — | 금지 |
S = R = 1이면 두 NOR가 모두 0을 내므로 Q와 Q는 더 이상 서로 보수가 아닙니다. 더 나쁜 것은, 그 뒤에 두 입력이 동시에 0으로 내려가면 최종 상태가 어느 게이트가 더 빠른지에 따라 결정된다는 점입니다. 그래서 이 조합은 금지됩니다. S·R = 0이라는 조건에서 성립하는 특성 방정식은 Q+ = S + R·Q입니다.
NAND 게이트로 만들면 입력이 Low 활성(액티브 로우)인 SR 래치가 됩니다. 11은 유지, 01은 Q = 1로 만들고, 10은 Q = 0으로 만들며, 00이 금지 조합입니다(두 출력 모두 1).
D 래치: 인에이블된 동안은 투명하다
금지 조합을 없애기 위해 인에이블 입력 EN을 추가하고 S = D·EN, R = D·EN을 만듭니다. S와 R이 동시에 1이 될 수 없으므로 문제가 사라집니다. 동작은 간단합니다.
- EN = 1: 래치는 투명하여 Q가 항상 D를 따라갑니다.
- EN = 0: Q는 D가 마지막으로 가졌던 값으로 고정됩니다.
이 투명성이 래치의 약점입니다. 래치의 출력을 논리 회로를 거쳐 자기 자신의 입력에 연결하면, EN = 1인 동안 신호가 여러 바퀴 돌 수 있어 결과를 예측할 수 없습니다. 동기 순차 회로에는 한순간에만 데이터를 포착하는 소자가 필요합니다.
에지 트리거 플립플롭
상승 에지 트리거 D 플립플롭은 클럭이 0에서 1로 바뀌는 순간에만 D를 Q로 복사합니다. 그 밖의 시간에는 D를 무시합니다. 인에이블이 서로 반대인 D 래치 두 개(마스터와 슬레이브)를 직렬로 연결해 만듭니다. 클럭이 0인 동안에는 마스터가 D를 따라가고 슬레이브는 닫혀 있습니다. 클럭이 올라가면 마스터가 닫히고 슬레이브가 포착된 값을 출력으로 내보냅니다. 식은 가장 간단합니다: Q+ = D.
기본 플립플롭으로부터 설계에 많이 쓰이는 두 가지 유형이 더 정의됩니다.
- JK: SR과 같지만 금지 조합이 없습니다. J = K = 1이면 Q가 에지마다 바뀝니다(토글). 식:
Q+ = J·Q + K·Q. - T(토글): T = 0이면 유지하고 T = 1이면 토글합니다. 식:
Q+ = T ⊕ Q. J = K = T인 JK 또는 D = T ⊕ Q인 D로 만들 수 있습니다.
| J | K | Q+ | 동작 |
|---|---|---|---|
| 0 | 0 | Q | 유지 |
| 0 | 1 | 0 | 리셋 |
| 1 | 0 | 1 | 셋 |
| 1 | 1 | Q | 토글 |
예제: JK 플립플롭이 Q = 0에서 시작해 (J, K) = (1,0), (0,0), (1,1), (0,1), (1,1)인 에지를 다섯 번 받습니다. 각 에지에서 Q+ = J·Q + K·Q를 적용합니다.
- (1,0), Q = 0: 1·1 + 1·0 = 1.
- (0,0), Q = 1: 0·0 + 1·1 = 1 (유지).
- (1,1), Q = 1: 1·0 + 0·1 = 0 (토글).
- (0,1), Q = 0: 0·1 + 0·0 = 0.
- (1,1), Q = 0: 1·1 + 0·0 = 1 (토글).
각 에지 뒤의 Q 값을 차례로 적으면 1, 1, 0, 0, 1입니다.
여기표
특성표는 "입력이 주어졌을 때 Q는 어디로 가는가?"에 답합니다. 설계할 때는 반대 질문이 필요합니다. "Q가 이 값에서 저 값으로 바뀌게 하려면 입력을 어떻게 주어야 하는가?" 이것이 여기표이며, 카운터와 상태 기계를 설계할 때마다 쓰게 됩니다.
| Q → Q+ | D | T | J K | S R |
|---|---|---|---|---|
| 0 → 0 | 0 | 0 | 0 X | 0 X |
| 0 → 1 | 1 | 1 | 1 X | 1 0 |
| 1 → 0 | 0 | 1 | X 1 | 0 1 |
| 1 → 1 | 1 | 0 | X 0 | X 0 |
JK의 X가 바로 이 플립플롭에서 식이 더 짧게 나오는 이유입니다. 0에서 1로 가려면 K가 0이든(셋) 1이든(토글) 상관없으며, 이 자유도를 카르노 맵에서 활용합니다.
셋업 시간, 홀드 시간, 최대 주파수
실제 플립플롭은 D가 에지 전에 일정 시간, 곧 셋업 시간(tsu) 동안 안정되어 있어야 하고, 에지 뒤에도 일정 시간, 곧 홀드 시간(th) 동안 안정되어 있어야 합니다. D가 이 구간 안에서 바뀌면 출력이 한동안 중간 레벨에 머물다가 값이 정해질 수 있는데, 이것이 준안정 상태입니다. 또한 출력은 에지 뒤 지연 시간 tCQ가 지나야 바뀝니다.
동기 회로에서 신호는 한 플립플롭에서 나와 조합 논리를 거쳐 다음 플립플롭에 도달합니다. 클럭의 최소 주기는 다음과 같습니다.
Tmin = tCQ + t논리 + tsu
예제: tCQ = 15 ns, 가장 긴 조합 경로의 지연이 20 ns, tsu = 5 ns입니다.
Tmin = 15 + 20 + 5 = 40 ns이므로 fmax = 1 / 40 ns = 25 MHz입니다.
홀드에는 가장 짧은 경로를 사용합니다. 최소 tCQ가 5 ns이고 두 플립플롭 사이에 논리가 없다면 새 데이터는 에지 5 ns 뒤에 도착합니다. th = 3 ns이면 5 ns ≥ 3 ns이므로 조건을 만족합니다.
흔한 실수
- 래치를 플립플롭이라고 부르는 것: 래치는 인에이블의 레벨에, 플립플롭은 클럭의 에지에 반응합니다.
- 설계에 여기표가 필요한데 특성표를 쓰는 것.
- NAND 래치의 입력이 Low 활성이고 금지 조합이 11이 아니라 00이라는 점을 잊는 것.
- 클럭 에지 바로 그 순간에 D를 바꾸고 확정된 결과를 기대하는 것.
- 실제 플립플롭의 비동기 프리셋과 클리어 입력을 연결하지 않고 두는 것: 비활성 레벨에 연결해야 합니다.
시뮬레이터에서 해 보기
래치와 플립플롭의 차이는 타이밍도에서 바로 드러납니다. 둘 다 만들어 같은 신호를 넣어 보세요.
- NOR 게이트 두 개를 놓고 각각의 출력을 상대편의 입력 하나에 연결합니다. 입력 S와 R, 표시등 두 개를 추가합니다.
- S와 R을 바꿔 가며 금지 조합을 포함한 표의 네 행을 확인하고, 금지 조합에서 Q와 Q가 동시에 0이 되는 것을 관찰합니다.
- D 래치와 D 플립플롭을 놓고, 둘에 같은 데이터 입력과 같은 클럭(또는 인에이블) 신호를 연결합니다.
- 타이밍도를 열고 클럭이 1인 동안 D를 여러 번 바꿉니다. 래치는 변화를 따라가고 플립플롭은 상승 에지의 값만 받아들입니다.
- J = K = 1인 JK 플립플롭으로 반복하고, 출력의 주파수가 클럭의 절반이 되는 것을 관찰합니다.
연습문제
- T 플립플롭이 Q = 1에서 시작해 네 번의 에지에서 T = 1, 1, 0, 1을 받습니다. Q는 어떤 값을 갖습니까?
정답
Q+ = T ⊕ Q: 1⊕1 = 0, 1⊕0 = 1, 0⊕1 = 1, 1⊕1 = 0. 순서대로 0, 1, 1, 0입니다.
- 플립플롭이 Q = 1에서 Q = 0으로 바뀌려면 J와 K의 값이 어떻게 되어야 합니까?
정답
J = X, K = 1. K = 1, J = 0이면 리셋되고, J = K = 1이면 토글합니다. 두 경우 모두 Q는 0이 됩니다.
- tCQ = 12 ns, tsu = 4 ns이고 원하는 주파수가 40 MHz일 때, 플립플롭 사이의 논리는 최대 얼마까지 지연될 수 있습니까?
정답
T = 1 / 40 MHz = 25 ns. t논리 ≤ 25 − 12 − 4 = 9 ns.
- D 플립플롭이 JK처럼 동작하도록 D의 식을 쓰세요.
정답
D = J·Q + K·Q이며, 이는 JK의 특성 방정식입니다.