# Flip-Flop
**A synchronous [[Level and Edge-Triggering#^8b1bab|edge-triggered]] storage element.**
A *flip-flop* is a storage element which has two stable states and stored one state indefinitely until it is triggered by a clock signal to change.
The input equations for a flip-flop are derived from [[State Table|state tables]]. [[Excitation Table|Excitation tables]] are used to derive the output combinational circuit.
> [!Input equation derivation]-
> For a [[Flip-Flop#T flip-flip|T flip-flop]] circuit, the extended state table derived from an excitation table is:
>
>| Present<br>state | | Inputs | | Next<br>state | | Flip-flop<br>inputs | |
|:--------------------:|:---:|:--------:|:--------:|:-----------------:|:--------:|:-----------------------:|:-----:|
| $A$ | $B$ | $S$ | $F$ | $A(t+1)$ | $B(t+1)$ | $T_A$ | $T_B$ |
| $0$ | $0$ | $0$ | $0$ | $0$ | $0$ | $0$ | $0$ |
| $0$ | $0$ | $\times$ | $1$ | $0$ | $1$ | $0$ | $1$ |
| $0$ | $0$ | $1$ | $\times$ | $1$ | $0$ | $1$ | $0$ |
| | | | | | | | |
| $0$ | $1$ | $0$ | $0$ | $0$ | $1$ | $0$ | $0$ |
| $0$ | $1$ | $\times$ | $1$ | $1$ | $0$ | $1$ | $1$ |
| $0$ | $1$ | $1$ | $\times$ | $1$ | $1$ | $1$ | $0$ |
| | | | | | | | |
| $1$ | $1$ | $0$ | $0$ | $1$ | $1$ | $0$ | $0$ |
| $1$ | $1$ | $\times$ | $1$ | $0$ | $0$ | $1$ | $1$ |
| $1$ | $1$ | $1$ | $\times$ | $0$ | $1$ | $1$ | $0$ |
| | | | | | | | |
| $1$ | $0$ | $0$ | $0$ | $1$ | $0$ | $0$ | $0$ |
| $1$ | $0$ | $\times$ | $1$ | $1$ | $1$ | $0$ | $1$ |
| $1$ | $0$ | $1$ | $\times$ | $0$ | $0$ | $1$ | $0$ |
>
> Note that for this particular circuit, $S=F=1$ is not a possible combination. To derive the flip-flop input equations, [[Karnaugh Map|K-maps]] can be used.
>
> ![[LightControllerTAKMap.svg|400]]
> ***
> ![[LightControllerTBKMap.svg|400]]
>
> Thus, the flip-flop input equations are
>$\begin{align*}
T_{A}&=BF+S \\
T_{B}&=F \\
\end{align*}$
## Types
### D flip-flop
A *data* or *delay* flip-flop is the most fundamental flip-flop and is the flip-flop that uses the *least* amount of gates. Other flip-flops can be constructed using D flip-flops and additional combinational logic.
![[DFlipFlop.svg|250]]
A D flip-flop is constructed from two [[Latch#D latch|D latches]] and inverters. A *positive-edge* triggered D flip-flop uses two inverters whereas a *negative-edge* triggered one uses one.
![[DFlipFlopConstruction.svg]]
In a *positive-edge* triggered D flip-flop:
- When *clock* is off, the master latch is enabled and the slave latch is disabled. Thus, $Y=D$.
- When *clock* is on, the opposite is true and thus $Q=D$.
In a *negative-edge* triggered D flip-flop:
- When *clock* is on, the master latch is enabled and the slave latch is disabled. Thus, $Y=D$.
- When *clock* is off, the opposite is true and thus $Q=D$.
The [[Characteristic Equation#Digital Electronics|characteristic equation]] of a D flip-flop is $Q_{\text{next}}=D$.
The [[excitation table]] is:
| $Q$ | $Q_{\text{next}}$ | $D$ |
|:---:|:-----------------:|:---:|
| $0$ | $0$ | $0$ |
| $0$ | $1$ | $1$ |
| $1$ | $0$ | $0$ |
| $1$ | $1$ | $1$ |
### JK flip-flop
A JK flip-flop behaves similarly to an [[Latch#SR latch|SR latch]] but it does permit an input of $J=K=1$, the equivalent to $S=R=1$.
![[JKFlipFlop.svg|250]]
The characteristic equation of a JK flip-flop is $Q_{\text{next}}=J\bar{Q}+\bar{K}Q$.
The characteristic and excitation tables are:
| Characteristic | | | |
| :------------: | :-: | :---------------: | :--------: |
| $J$ | $K$ | $Q_{\text{next}}$ | **Action** |
| $0$ | $0$ | $Q$ | Hold |
| $0$ | $1$ | $0$ | Reset |
| $1$ | $0$ | $1$ | Set |
| $1$ | $1$ | $\bar{Q}$ | Toggle |
| Excitation | | | | |
| :--------: | :---------------: | :------: | :------: | :--------: |
| $Q$ | $Q_{\text{next}}$ | $J$ | $K$ | **Action** |
| $0$ | $0$ | $0$ | $\times$ | Hold |
| $0$ | $1$ | $1$ | $\times$ | Set |
| $1$ | $0$ | $\times$ | $1$ | Reset |
| $1$ | $1$ | $\times$ | $0$ | Hold |
### T flip-flop
A *toggle* flip-flop toggles its output when triggered. It is the same as a JK flip-flop when $J=K$.
![[TFlipFlop.svg|250]]
The characteristic equation of a T flip-flop is $Q_{\text{next}}=T\bar{Q}+\bar{T}Q$.
The characteristic and excitation tables are:
| Characteristic | | |
|:--------------:|:-----------------:|:----------:|
| $T$ | $Q_{\text{next}}$ | **Action** |
| $0$ | $Q$ | Hold |
| $1$ | $\bar{Q}$ | Toggle |
| Excitation | | | |
|:----------:|:-----------------:|:---:|:----------:|
| $Q$ | $Q_{\text{next}}$ | $T$ | **Action** |
| $0$ | $0$ | $0$ | Hold |
| $0$ | $1$ | $1$ | Toggle |
| $1$ | $0$ | $1$ | Toggle |
| $1$ | $1$ | $0$ | Hold |