フリップフロップ(1)

フリップフロップ(1)

 いよいよフリップフロップです。デジタル回路の最重要素子です。しかし、このフリップフロップで挫折する人が多いのも事実です。原因ははっきりしています。種類が多いし、微妙な動きの違いが理解しにくいからです。

 なので、このブログではDフリップフロップ以外は扱わない事にします。それ以外は知らなくて良いです。なにより、Dフリップフロップは一番単純です。HDLでデジタル回路設計を始める方はDフリップフロップだけを扱っていれば、自然に他のフリップフロップの必要性を感じるようになって、自分で他のフリップフロップをいつに間にか作っていることでしょう。自分で作ったフリップフロップがJKフリップフロップだった。なんて、知らなくても良いのです。

 さて、フリップフロップという名前は言いにくいし、書きにくい。業界では”FF”と省略して記載することもあります。Dフリップフロップしか知らなくて良いので、”DFF”ですね。

 フリップフロップの動きを学ぶ前に、エレベーターの上下スイッチや各階のスイッチを思い出してください。あのスイッチは押せば光りませんか? そして、押していた指を離しても光ってませんか?

 この動きがフリップフロップです。この動きは人が押したボタンを覚えている。ということです。フリップフロップは記憶なんです。ソフトウェアのプログラムを経験した方は「メモリー」という言葉の方がわかるのではないでしょうか? あのメモリーはCPUのバス幅分のフリップフロップを意味しています。逆にいえば、1bit分のメモリがフリップフロップです。

 Dフリップフロップの図記号を次に示します。左の図記号はすべての機能を図示しているもので、右の図記号は省略した図記号です。普通は右の省略した方を使います。

 図記号の意味がわかると理解が早いと思います。

  • 信号入力 DはDataの「D」だと覚えてください。1bitデータの入力端子です。
  • クロック入力は>で示しています。稀にCLKと記している場合もあります。この立ち上がりエッジでDの値を記憶します。「立ち上がりエッジ」という聞きなれない言葉が出ましたが、後ほど説明します。
  • セット入力 Sは一般的に「初期値」設定としての働きを持たせます。例えば、電源を入れた時の最初の値という使い方です。
  • リセット入力 Rも「初期値」で使います。したがって、リセット入力のピンは覚える必要がありません。先のセット入力で代用できます。
  • 信号出力 Qはフリップフロップの記憶結果を示しています。

 このようにD、クロック、セット、出力の4つの信号を覚えましょう。その機能を次に示しますが、いきなりグラフが出てきます。

 このグラフは論理状態を時間軸で示したもので、タイミングチャートとかタイミング図といいます。デジタル回路設計を行う者はこの図を頭に思い浮かべて設計します。

 縦軸が”0″か”1″かの論理状態を示し、横軸が時間を示しています。テレビドラマや映画で心電図が画面に表示されている様子を見たことがあると思います。あれと同じです。左端の時間を起点として、右に時間が進みます。セットの機能は別の機会に解説いたします。まずは、D、クロック、出力の関係を示します。

 まず、①で示した部分に着目してください。上矢印になっています。これはクロック信号が”0″から”1″になる瞬間を意味しています。タイミングチャートでは、「瞬間」を示すために、上矢印や下矢印を信号に重ねて表記します。そして、この上矢印のように、“0”から”1″になる瞬間のことを「立ち上がりエッジ」といいます。逆に”1″から”0″に下がる瞬間のことを「立ち下がりエッジ」といいますが、立ち下がりエッジはなるべく使わないようにしましょう。

 ①の立ち上がりエッジで、フリップフロップはDの信号を記憶します。その瞬間です。シャッターを切った瞬間とか動画再生のポーズボタンを押した瞬間。というような感じで、Dの状態が”0″か”1″かを記憶します。そして、その記憶した値をQに出力するのがフリップフロップです。

 Qの信号はクロックの立ち上がりエッジ毎に記憶したデータを保持しています。写真を立ち上がりエッジの度に撮るような感覚ですね。なので、Qの値は次の立ち上がりエッジがくるまで、変化しません。

 その様子が①と②の間で見ることができます。①と②の間でDの値は0→1→0に変化していませんか? でも、Qの値は変化しません。とにかく、クロックの立ち上がりエッジであるD信号の赤丸の部分を記憶するので、それ以外の時間でDの信号が変化してもQの信号に影響はないのです。

 ③の立ち上がりエッジで、Dの値が1の状態を保持しましたので、Qの値も変化しています。

 以降、④と⑤においてもDの値を保持してQに出力します。

 どうですか? フリップフロップの動きが理解できましたか? とにかく、クロックが0から1になる瞬間のDの値をQに出力します。

 さて、Dフリップフロップの動作の図を見ると気がつくのですが、立ち上がりエッジからQの信号が変化するまで、ちょっと時間がかかってます。この「ちょっと時間がかかる」というのはとても重要な事です。今は、クロックのエッジでDの値を記憶して、「ちょっと時間がかかってから」Qに出力する。と覚えてください。