1ビットの情報を記憶できる順序回路。レジスタやカウンタの構成要素として、コンピュータの記憶装置の基盤になる回路です。
CLK(Clock)は、回路全体に共通するタイミング信号です。 フリップフロップは入力(S/R、D、J/K、T)を変えただけでは値を更新せず、CLK の立ち上がり(0 → 1 の瞬間)が来たときに、そのときの入力に応じて Q を書き換えます。
例えば D-FF で D=1 にしても、CLK ボタンを押すまで Q は前の値のままです。押した瞬間に Q ← D(= 1)が反映されます。 これによって「いつ値が変わるか」を回路全体で揃えられるのが、組み合わせ回路にはない順序回路の強みです。
身近な例えならメトロノームです。 カチッという音(=CLK)が鳴るたびに、楽団員(=個々の FF)が一斉に次の音符に進みます。 CPU のクロック周波数(3 GHz など)はまさにこの「拍」の速さで、1 秒間に 30 億回 FF が更新できることを意味します。
上のツールでは「CLK ボタン」を押すたびに 1 回分のクロックパルスが発生します。 入力を変えてから CLK を押すと Q がどう変わるか、タイミングチャートで確認してみてください。
フリップフロップ(FF)は、1ビット(0か1)の情報を記憶できるデジタル回路です。 論理ゲートだけの回路(組み合わせ回路)は入力が変わると出力もすぐ変わりますが、FFはクロック信号が来るまで前の状態を保持します。 この「記憶」能力が、レジスタやメモリの基盤になっています。
日常の例えでいえば、FFは「ベルが鳴ったら黒板の内容を更新するメモ帳」のようなものです。 ベル(=クロック)が鳴るまでは前のメモの内容を保持し、ベルが鳴った瞬間に新しい内容に書き換えます。
上のツールでFFタイプを選び、入力を切り替えてから「CLK」ボタンを押すと、状態が変化する様子とタイミングチャートを確認できます。 クロックを押さない限り出力は変わらないことに注目してください。
SR-FF(Set-Reset フリップフロップ)は最も基本的なFFで、S入力で「Qを1にセット」、R入力で「Qを0にリセット」します。 内部はNORゲート2つを交差接続(クロスカップリング)した構造です。
SR-FFの重要な注意点は、S=1かつR=1の入力は禁止されていることです。 「1にセットしろ」と「0にリセットしろ」を同時に指示すると矛盾が生じ、出力が不定(どちらになるかわからない)になります。 この禁止状態を解消したのがJK-FFです。
上のツールでSR-FFを選び、S=1,R=1にしてCLKを押すと「禁止状態」の表示を確認できます。
D-FF(Data フリップフロップ)は入力が1つだけ(D)で、クロックの立ち上がりでD入力の値がそのままQにコピーされます。 D=1ならQ=1に、D=0ならQ=0になる、最もシンプルで実用的なFFです。
SR-FFのような禁止状態がなく、入力も1つだけなので回路が簡単です。 実際のCPUのレジスタは、D-FFを何個も並べたものです。 たとえば8ビットレジスタはD-FFが8個で構成されています。
上のツールでD-FFを選び、Dの値を切り替えてCLKを押してみてください。 Dの値がそのままQに反映されることがわかります。最も直感的なFFです。
JK-FFはSR-FFの禁止状態を解消した改良版です。 J=1,K=1のときは禁止ではなく、出力Qが反転(トグル)します。 セット・リセット・保持・トグルの4つの動作をすべて実現できるため「万能FF」と呼ばれます。
JK-FFの動作をまとめると以下の通りです。
・J=0, K=0:前の状態を保持
・J=1, K=0:Q=1にセット
・J=0, K=1:Q=0にリセット
・J=1, K=1:Qを反転(トグル)
SR-FFとJK-FFの違いは、J=1,K=1のときの動作にあらわれます。 上のツールでJK-FFを選び、J=1,K=1の状態でCLKを何度か押すと、Q が 0→1→0→1 と反転を繰り返す様子を確認できます。
T-FF(Toggle フリップフロップ)は入力Tが1のとき、クロックのたびに出力Qが反転します。 T=0のときは前の状態を保持します。JK-FFのJ=K=Tとしたものと同等です。
T-FFの最も重要な用途はカウンタ(計数回路)です。 T=1に固定したT-FFを複数つなげると、クロック信号を1/2、1/4、1/8...と分周できます。 4つのT-FFを接続すれば0〜15を数える4ビットカウンタが作れます。
上のツールでT-FFを選び、T=1にしてCLKを連続で押すと、Qが0→1→0→1と交互に変わります。 タイミングチャートに綺麗な矩形波が描かれるのを確認してみてください。
D-FFを複数個並べるとレジスタになります。 8個のD-FFを並べれば8ビット(1バイト)を記憶でき、32個なら32ビット、64個なら64ビットのレジスタです。 CPUの内部にはこのようなレジスタが多数あり、演算の途中結果を一時的に保存しています。
レジスタの種類には以下があります。
・汎用レジスタ:計算結果の一時保存
・プログラムカウンタ(PC):次に実行する命令のアドレスを保持
・フラグレジスタ:演算結果の状態(ゼロ、オーバーフロー等)を保持
フリップフロップ→レジスタ→メモリという階層で、コンピュータの記憶の仕組みが構成されています。 FFの動作原理を理解することは、コンピュータアーキテクチャ全体の理解につながります。
タイミングチャートは、時間の経過とともに各信号(CLK、入力、出力)がどう変化するかを示す図です。 横軸が時間、縦軸が信号の高低(1/0)を表します。
読み方のポイントは以下の通りです。
・CLKの立ち上がり(LOW→HIGH)の瞬間に注目する
・立ち上がりの瞬間の入力値を確認する
・その入力に応じたFFの動作で出力Qがどう変わるかを追う
上のツールでCLKボタンを何度か押すと、タイミングチャートが自動的に描画されます。 入力を変えてからCLKを押し、出力Qの変化パターンを読み取る練習をしてみてください。