For Good FPGA Design

FPGAのフリップフロップとは?

今回は、FPGAを構成する重要な要素の1つである、フリップフロップ(Flip Flop: FF)について解説していきます。

目次

結論

  • フリップフロップにより順序回路をつくることができる
  • フリップフロップはクロックの立ち上がりで入力値を取り込み、次のクロックの立ち上がりまで保持する

順序回路

まずは、なぜフリップフロップが必要なのかから説明します。それは、順序回路(sequential circuit)を実現するためです。

順序回路は、記憶素子を含む回路です。一方、記憶素子を含まず、論理ゲートの組み合わせのみで作られた回路を組合わせ回路といいました。

関連記事

ではなぜ記憶素子が必要なのでしょうか。自動販売機を例に見てみましょう。

組み合わせ回路はその時点の入力のみにより、出力が決まります。したがって、組み合わせ回路だけで自動販売機をつくると図1のようになります。これでは、100円を入れるのと同時にボタンを押す必要があるので、かなりシビアです。

図1 組合せ回路による自動販売機

150円のジュースになると、もはや不可能ですね。

記憶素子がある場合は図2のようになります。これであれば、100円投入→ボタンを押す、と順番にやればジュースが手に入るわけです。

このように、記憶素子を含む回路順序回路といいます。

図2 記憶素子を持つ自動販売機

フリップフロップ

FPGAでは、記憶素子として、フリップフロップ(Flip Flop: FF)が使われています。フリップフロップは1ビットの記憶素子です。

FPGAの論理ブロックに組み込まれているDフリップフロップ(D-FF)のシンボルと真理値表を図3、図4に示します。DフリップフロップはクロックCLKの立ち上がりのとき、入力Dを取り込み、Qに出力します。クロックがそれ以外のときは、Qは変化せず値を保持します。動作例を図5に示します。

図3 Dフリップフロップ
図4 Dフリップフロップの真理値表
図5 フリップフロップの動作例

Dフリップフロップの構造と動作

Dフリップフロップの内部構造は図6のようになっています。トランスファゲートはCLKの状態によってONまたはOFFになるスイッチです。ループ回路が前段、後段と2段になった構成をしています。

図6 Dフリップフロップの構造

Dフリップフロップの動作を図7に示します。

CLK = 0のときは、前段に入力Dが入り、後段では前サイクルの値をループし保持します。このとき、前段と後段の間のトランスファゲートがOFFなので、入力Dは後段には伝わりません。

CLK = 1になったとき、入力Dが取り込まれて後段に伝わるとともに、前段でループし保持します。その後、CLK = 1の状態では入力直後のトランスファゲートがOFFとなるので、入力を変化させても伝わりません。

以上のようにして、クロックの立ち上がりエッジ(CLK = 0 → 1の変化時)に入力Dを取り込み、次のクロックの立ち上がりまで保持するという動作を実現します。

図7(a) CLK = 0のとき
図7(b) CLK = 1のとき

ここまでの説明で、たった1クロックサイクルの間しか保持できないに、そんなの使えるの?と思った方もいるかと思います。大丈夫です。例えば、図8のような回路にすれば、スイッチ入力Sが1である間は前に取り込んだ値を保持し続けます。スイッチの論理はLUTで実現されます。

図8(a) スイッチとフリップフロップの回路
図8(b) スイッチ部LUTの真理値表

まとめ

  • フリップフロップにより順序回路をつくることができる
  • フリップフロップはクロックの立ち上がりで入力値を取り込み、次のクロックの立ち上がりまで保持する
アバター画像
この記事を書いた人
ジーノ。大手電機メーカーで、基板設計の全般と、FPGAの設計に従事した経験を活かし、FPGAについて情報発信中。
RTL設計、シミュレーション、タイミング・クロージャ、FPGAまわりのハードウェア開発まで、幅広く取り扱っております。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA