플립플롭
도입
마인크래프트의 버튼은 한 번 누르면 짧은 시간동안 레드스톤 신호를 활성화시키는 아이템이다. 푸시 버튼과 동일하게 작동하는 것이다. 하지만 어릴적에는 푸시버튼보다는 누르는 스위치에 더욱 익숙했기 때문에, 스위치를 버튼으로 생각한 나는 이 동작이 자연스럽다고 생각하지 않았다.
많은 모험 맵을 플레이하면서 새롭게 알게 된 것으로는, 이러한 맵에서는 버튼을 스위치(마인크래프트에서는 동일한 동작을 하는 아이템으로 레버가 있다.)처럼 구현해 사용하는 경우가 많았다. 나는 그 원리를 알기 위해 인터넷을 뒤졌고, 플립플롭이라는 것을 처음 알게 되었다.

T Flip-flop K 의 회로도 #
하지만 당시에는 회로에 관해서는 아무것도 알지 못했기 때문에, 플립플롭을 상황에 맞게 회로를 설계하지 못하고, 고정된 형태를 외우거나 보고 따라하며 사용했다. 그리고 내게 플립플롭은 “버튼을 레버처럼 사용할 수 있는 수단”에 불과했다.
플립플롭
플립플롭은 상태값을 갖는 바이너리 회로이다. 이전의 상태값을 기억하는 것으로, 도입에서의 “버튼을 레버처럼 사용할 수 있는” 것은, 이전에 버튼을 눌렀는지 여부를 상태값으로서 저장했기 때문이다.
플립플롭은 그 동작 방식에 따라 크게 네 가지, SR, D, T, JK 플립플롭을 고려할 수 있다. 하지만 항상 출력 Q를 획득하기 위해 사용하며, 기대하는 동작에 따라 적절한 플립플롭을 선택하여 사용할 수 있다.
- SR 플립플롭(Set-Reset Flip-Flop): Set과 Reset 입력으로 상태를 제어하는 플립플롭.
- 주로 상태 플래그, 시작-정지 제어에 사용한다. S로 상태를 Set하고 R로 Reset한다.
- D 플립플롭(Data Flip-Flop): 입력 데이터(D)를 클럭(CLK)에 맞춰 저장하는 플립플롭.
- 주로 레지스터, 카운터, 시프트 레지스터에 사용한다. D 입력을 CLK 신호에 맞춰 Q 출력으로 전달한다.
- CLK 신호에 따라 주기적으로 출력이 반환되므로, 연속적인 처리에 사용할 수 있다.
- JK 플립플롭(JK Flip-Flop): SR 플립플롭의 확장형, J(Set)와 K(Reset) 입력을 사용하여 상태를 제어하는 플립플롭.
- 주로 카운터, 주기적인 상태 전환, 토글 동작에 사용한다.
- 유지, 셋, 리셋, 반전을 모두 지원하는데, 이를 위해 입력선은 $2^2$ 개의 상태값을 수용할 수 있다.
- T 플립플롭(Toggle Flip-Flop): 입력이 들어올 때마다 상태를 반전시키는 플립플롭.
- 주로 이진 카운터, 토글 동작에 사용한다.
- $T = 1$ 로 플래그되면
CLK마다 상태가 반전된다.
| 플립플롭 | 입력 | 출력 | 클록 상승 에지CLK=1에서의 동작 |
|---|---|---|---|
| SR | $S$, $R$, $CLK$ | $Q$, $\overline{Q}$ | S=set, R=reset 0, 0 → 유지 0, 1 → 리셋(Q=0) 1, 0 → 세트(Q=1) 1, 1 → undefined |
| D | $D$, $CLK$ | $Q$, $\overline{Q}$ | D=Data D=0 → Q=0 저장 D=1 → Q=1 저장 |
| JK | $J$, $K$, $CLK$ | $Q$, $\overline{Q}$ | J=set, K=reset 0, 0 → 유지 0, 1 → 리셋(Q=0) 1, 0 → 세트(Q=1) 1, 1 → 반전 |
| T | $T$, $CLK$ | $Q$, $\overline{Q}$ | T=Toggle T=0 → 유지 T=1 → 반전 |
구현
실제의 플립플롭은 〈도입〉에서의 플립플롭과는 조금 다르다.(당연히 게임의 기믹을 사용한 것과 현실의 원리는 다를 수밖에 없다.) 플립플롭은 D 래치 기반으로 구현할 수 있다. D 래치는 입력을 저장하기 위해 사용된다.
D 래치는 입력 $D$ 를 플립플롭 회로 상의 클럭 $CLK$ 를 활성화 필드 $EN$ 으로 받아, $EN$ 이 활성 상태일 때, 입력 $D$ 를 출력 $Q$ 로 전달한다. $EN$ 이 비활성 상태일 때는 이전의 출력값을 유지한다. 이렇게 함으로서 입력 $D$ 가 출력 $Q$ 로 전달되는 시점을 제어할 수 있다.
- $EN$ 활성: 입력 D 를 출력 $Q$ 에 반영
- $EN$ 비활성: 저장한 값을 출력 $Q$ 로 유지
이러한 D 래치 두 개를 서로 반대인 클럭 $CLK$ 레벨에서 활성화되도록 연결하면, 클럭 에지에서 값을 갱신하는 마스터·슬레이브 D 플립플롭을 구성할 수 있다.
* 일반적으로 클록은 주기적인 신호로 고려되지만, 클록이 항상 주기적일 필요는 없다. 입력을 갱신할 시점을 제어하기 위해 클록 신호가 고려된 것이므로, 입력을 갱신할 시점에만 클록 신호를 활성화하여 사용할 수 있다.

