포스트

플립플롭

플립플롭

도입

마인크래프트의 버튼은 한 번 누르면 짧은 시간동안 레드스톤 신호를 활성화시키는 아이템이다. 푸시 버튼과 동일하게 작동하는 것이다. 하지만 어릴적에는 푸시버튼보다는 누르는 스위치에 더욱 익숙했기 때문에, 스위치를 버튼으로 생각한 나는 이 동작이 자연스럽다고 생각하지 않았다.

많은 모험 맵을 플레이하면서 새롭게 알게 된 것으로는, 이러한 맵에서는 버튼을 스위치(마인크래프트에서는 동일한 동작을 하는 아이템으로 레버가 있다.)처럼 구현해 사용하는 경우가 많았다. 나는 그 원리를 알기 위해 인터넷을 뒤졌고, 플립플롭이라는 것을 처음 알게 되었다.


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 플립플롭을 구성할 수 있다.

* 일반적으로 클록은 주기적인 신호로 고려되지만, 클록이 항상 주기적일 필요는 없다. 입력을 갱신할 시점을 제어하기 위해 클록 신호가 고려된 것이므로, 입력을 갱신할 시점에만 클록 신호를 활성화하여 사용할 수 있다.