しなぷすのハード製作記

「Dフリップフロップ」の解説

ツイート
シェア
このエントリーをはてなブックマークに追加
フォロー
2018年12月11日 更新。
用語:Dフリップフロップ
読み:でぃーふりっぷふろっぷ
同義語・似た意味の言葉:DFFD-FFD-F/F
このページで解説している他の用語:ポジティブエッジポジティブエッジトリガネガティブエッジネガティブエッジトリガ双安定リング発振器リングオシレータリングオシレーター非同期クリア非同期リセット非同期セット非同期プリセット

概要

Dフリップフロップは、1ビットの情報を記憶する事のできる論理回路で、同期回路を設計する場合に中心的な役割を果たす回路要素です。

図1、最も基本的なDフリップフロップ
↑ 画像をクリックすると拡大
図1、最も基本的なDフリップフロップ

DフリップフロップにはD端子およびCLK端子の2つの入力端子と、Q端子の1つの出力端子を必ず備えています。また、さらに多くの端子を備えたDフリップフロップもあります。

D端子に記憶させたい論理値を入力した状態で、CLK信号を立ち上げる(LからHに遷移させる)と、D端子の論理値をDフリップフロップが記憶し、それをQ端子に出力します。Q端子の出力は、次にCLK信号が立ち上がり、記憶内容が更新されるまでは変化しません。

注:後述する様に、CLK信号の立ち下がりのタイミングでD信号を取り込むDフリップフロップも存在します。

大規模な論理回路を設計する場合、組み合わせ回路のみで構成される非同期回路の形で設計すると、信号の変化のタイミングの管理が大変になり、それがうまく管理できないと、波形にハザード(波形割れ)が生じるなどして、回路が誤作動してしまいます。

参考:例えばAND回路やOR回路など、その時の入力信号の論理値のみで出力信号の論理値が決まる回路を組み合わせ回路といいます。Dフリップフロップは、出力信号の論理値が、その時の入力信号の論理値だけではなく、過去の入力信号の影響を受けますので、組み合わせ回路ではありません。Dフリップフロップの様に、出力信号の状態が、現在だけではなく過去の入力信号の影響を受ける論理回路を順序回路といいます。

複数のDフリップフロップの間に小規模の組み合わせ回路を挟んだ回路構成で、全てのDフリップフロップに共通のクロック信号(CLK信号)を入力する論理回路をクロック同期回路(あるいは単に同期回路)といいます。同期回路の場合、たとえ組み合わせ回路でハザードが発生しても、ハザードが終わった後の論理値をDフリップフロップに取り込む事により、ハザードの弊害を表面化させない事ができるため、回路設計が簡略化し、大規模の論理回路を設計した場合でも、誤作動の発生しない、信頼性の高い回路を作る事ができます。この利点から、現在設計される大規模の論理回路は、ほとんどが同期回路として設計されています。

この様に、大規模の論理回路にはDフリップフロップが数多く使われているため、その動作の理解は、論理回路を理解する上で必要不可欠といえます。

なお、Dフリップフロップの表記は、DFFD-FF、あるいはD-F/Fなどと省略される場合があります。

広告

最も基本的なDフリップフロップ

Dフリップフロップと呼ばれる回路にはいくつかのバリエーションがありますが、図1に示す様に、D端子とCLK端子の2つの入力端子と、Q端子の1つの出力端子を備えるDフリップフロップが最小構成で、最も基本的なDフリップフロップといえます。

図1(再掲)、最も基本的なDフリップフロップ
↑ 画像をクリックすると拡大
図1(再掲)、最も基本的なDフリップフロップ

D信号とQ信号はその時の論理値に意味がある、普通の信号ですが、CLK信号は、立ち上がりのタイミングに意味がある、少し特殊な信号です。この様な、立ち上がり(あるいは立ち下がり)のタイミングのみに意味がある信号を、普通クロック信号(あるいは単にクロック)とかストローブ信号と呼びます。クロック信号の名称は、常時同じ周波数で信号が出ている場合に使う事が多く、ストローブ信号の名称は、必要な時のみにパルスが出る場合に使う事が多いですが、必ずその様に名称が使い分けられる訳ではありません。このページでは、CLK信号の事をクロック信号と呼びます。

注1:CLK端子は、教科書によりCK端子、C端子、ST端子等と書いてある場合があります。

注2:CLK端子についている三角印は、クロック信号である事を示します。教科書によっては、図2に示す様に三角印の右に"CLK"と信号名が書いてある事があります。このページでは、わざわざ"CLK"と書かなくても三角印だけでクロック信号であると判断できるとの立場から、回路記号には"CLK"とは書かない事にします。

図2、回路記号中に"CLK"と明記する例
↑ 画像をクリックすると拡大
図2、回路記号中に"CLK"と明記する例
この図の様に回路記号中に"CLK"と明記する方が、より信号の意味が明瞭になります。しかしDフリップフロップの場合は受け取るクロック信号が1つですので、三角印があれば、その右に"CLK"と書かなくても、それがCLK信号である事は理解できます。大規模な回路で、受け取るクロック信号が複数ある場合は、三角印だけではなく、必ず信号名を書く必要があります。

注3:クロック端子に三角印を付けるのは、単に、比較的に普及している習慣に過ぎません。よって、教科書により、図3の様にクロック端子に三角印を書いていない回路記号を使っている場合もあります。

図3、CLK端子に三角印を書かないDフリップフリップの回路記号
↑ 画像をクリックすると拡大
図3、CLK端子に三角印を書かないDフリップフリップの回路記号

Dフリップフロップの各端子の名称と意味は、表1の様になります。

表1、Dフリップフロップの各信号線の名称と働き
名称 働き
CLK クロックの入力信号です。この信号の立ち上がる瞬間のD端子への入力を、Dフリップフロップが記憶します。
D 入力信号です。CLK信号が立ち上がる瞬間に、この信号をフリップフロップが取り込んで記憶します。
Q 出力信号です。Dフリップフロップが記憶している論理値を出力します。

Dフリップフロップの真理値表は、表2の様になります。

表2、Dフリップフロップの真理値表
入力信号 出力信号 動作
CLK D Q
L X q 保持
H X q
X q
L L 読み取り
H H

ただし、表2には次の記号を使っています。

この表から分かるように、CLK信号がL、H、または立ち下がりの3つの状態のいずれかにある時は、D信号の状態にかかわらず、Q信号には直前のQ信号の値が出ます。つまり、Q信号の論理値が保持されます。

またCLK信号が立ち上がる瞬間には、Q信号には、その時のD信号と同じ値が出ます。つまり、CLK信号の立ち上がりのタイミングでフリップフロップはD信号を読み取る事になります。

この動作をタイミングチャートで確認してみましょう。図4にDフリップフロップのタイミングチャートの例を示します。

図4、ポジティブエッジトリガのDフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図4、ポジティブエッジトリガのDフリップフロップのタイミングチャートの例

ポジティブエッジトリガという用語は、回路がクロック信号の立ち上がりに同期して動作する事を意味します。詳しくは後述します。

電源投入直後のDフリップフロップが記憶する論理値は不定です。図の中のXは、不定(LかHか分からない状態)を表します。

このタイミングチャートで特徴的なのは、最初のCLK信号の立ち上がりまで、Q信号が"X"になっている事です。このXは「不定」(LかHか分からない状態)を表します。

表2の真理値表を見ると、CLKが立ち上がる瞬間にD信号の論理値がQ信号に反映され、CLKが立ち上がるタイミング以外では、Q信号の論理値が保持される事が分かります。

しかし、電源が入っていない時間にはCLK信号の論理値というのが定義できないので、たとえ電源投入のタイミングでCLK信号がHになる場合でも、立ち上がった(LからHに遷移した)とは言えないのです。(逆にCLK信号が立ち上がらなかったとも言えません) 仮に電源投入時にCLK信号が立ち上がらないと考えると、Q信号は直前の値を保持するはずですが、電源投入直前のQ信号の論理値は、やはり定義できません。

実際にDフリップフロップに電源を投入するとどうなるかというと、個体によっては電源投入直後に必ずQ信号がLになり、また別の個体では電源投入直後に必ずQ信号がLになり、さらに別の個体では電源を投入するたびに、Q信号がLになったりHになったりします。この様に、最初にCLK信号を立ち上げるまでは、フリップフロップが記憶している論理値(Q信号に出てくる論理値)は予測不能なのです。

最初にCLK信号が立ち上がった瞬間にフリップフロップはD信号を読み込み、フリップフロップの記憶する論理値が確定します。

それ以降は、CLK信号の立ち上がりの瞬間にD信号を読み込んでQ信号に反映し、次のCLK信号の立ち上がりの瞬間までQ信号の値を保持するという動作を繰り返します。

真理値表やタイミングチャートから分かるように、Dフリップフロップの出力信号(Q信号)は、CLK信号の立ちあがりのタイミングにのみ変化します。この様にクロック信号の立ち上がり(あるいは立ち下がり)のタイミングに合わせて出力信号の状態が変わる回路動作の事をクロック同期といいます。

クロック同期する回路の事をクロック同期回路(あるいは単に同期回路)といいますが、同期回路には必ず、Dフリップフロップや、それに類する回路が内蔵されています。「それに類する回路」は、必ずDフリップフロップと、AND、OR、NOTなどの基本的なゲート素子の組み合わせで同じ機能を実現できますから、全ての同期回路には、「等価的に」Dフリップフロップを内蔵しているという表現もできます。

参考:「それに類する回路」というのは、具体的にはTフリップフロップやJKフリップフロップなどの事を指します

ポジティブエッジトリガとネガティブエッジトリガ

同期回路を、クロック信号の立ち上がりあるいは立ち下がりのタイミングに合わせて出力状態が変わる回路だと説明しましたが、Dフリップフロップの中にも、クロック信号の立ち下がりのタイミングに合わせてQ信号の値が変化するものもあります。この様なDフリップフロップを、ネガティブエッジトリガのDフリップフロップといいます。

それに対し、前節で紹介した様に、クロック信号の立ち上がりのタイミングに合わせてQ信号の値が変化するDフリップフロップを、ポジティブエッジトリガのDフリップフロップといいます。

参考:波形の立ち上がりの事をポジティブエッジ、波形の立ち下がりの事をネガティブエッジといいます。トリガとは元々銃の引き金の事ですが、電子回路においては、何かの信号の変化を合図に回路が動作する事を意味します。

ネガティブエッジトリガのDフリップフロップの回路記号を図5に、真理値表を表3に示します。

図5、ネガティブエッジトリガのDフリップフロップの回路記号
↑ 画像をクリックすると拡大
図5、ネガティブエッジトリガのDフリップフロップの回路記号
表3、ネガティブエッジトリガのDフリップフロップの真理値表
入力信号 出力信号 動作
CLK D Q
L X q 保持
H X q
X q
L L 読み取り
H H

注:表3における"X"、"↑"、"↓"および"q"の記号の意味は、表2と同様です。

図5に示す様に、ネガティブエッジトリガのDフリップフロップの回路図記号の入力端子の部分には、通常、負論理を表す〇印を付けます。信号名は、CLKと、負論理を表す上線を付ける事が多いですが、上線を付けない場合もあります。

表2の真理値表を元に作成した、ネガティブエッジトリガのDフリップフロップのタイミングチャートの例を図6に示します。比較のために、図4(ポジティブエッジトリガのDフリップフロップのタイミングチャート)を再掲します。

図6、ネガティブエッジトリガのDフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図6、ネガティブエッジトリガのDフリップフロップのタイミングチャートの例

図の中のXは、不定(LかHか分からない状態)を表します。

図4(再掲)、ポジティブエッジトリガのDフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図4(再掲)、ポジティブエッジトリガのDフリップフロップのタイミングチャートの例

図の中のXは、不定(LかHか分からない状態)を表します。

反転出力のあるDフリップフロップ

DフリップフロップがQ信号を生成する際には、回路構成上の問題で、必ずQ信号を論理反転したQ信号も生成します。(理由は後述) Q信号と同時にQ信号も出力するDフリップフロップの回路記号を図7に示します。

図7、反転出力端子のあるポジティブエッジトリガのDフリップフリップの回路記号
↑ 画像をクリックすると拡大
図7、反転出力端子のあるポジティブエッジトリガのDフリップフリップの回路記号

Dフリップフロップ内部では、Q信号と同時にQ信号も生成しているので、この図7のDフリップフロップが、図1に示したQ信号だけを出力するDフリップフロップよりも基本的なDフリップフロップだと考える場合もあります。

ただ、Q信号のない方が信号線が少なくて理解しやすいですし、74HC174など、Q端子を省略したDフリップフロップのICも製品化されているため、このページでは図1のDフリップフロップが基本形で、図4はQ信号を追加した発展形だと紹介しておきます。

図7のDフリップフロップの真理値表を表4に、タイミングチャートの例を図8に示します。

表4、反転出力のあるポジティブエッジトリガのDフリップフロップの真理値表
入力信号 出力信号 動作
CLK D Q Q
L X q q 保持
H X q q
X q q
L L H 読み取り
H H L

注:表4における"X"、"↑"、"↓"および"q"の記号の意味は、表2と同様です。"q"は、直前のQ信号の値の否定(NOT)を表します。

図8、反転出力のあるポジティブエッジトリガのDフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図8、反転出力のあるポジティブエッジトリガのDフリップフロップのタイミングチャートの例

図の中のXは、不定(LかHか分からない状態)を表します。

このタイミングチャートから、Q信号とQ信号の論理値が互いに反転している事が分かります。

最初のCLK信号の立ち上がりまでは、Q信号がHになるかLになるかは予測できませんが、起動直後の短時間の不安定な時間(ns~μsオーダーか?)を除いて、Q信号、Q信号の論理値は互いに反転しています。(言い換えると、Xと書いてある領域でも、Q信号とQ信号が同じ論理値のまま安定状態になる事はありません)

【コラム】負論理の信号の信号名と回路上の表記について

「ボタンが押された」、「起動後一定の時間が経過した」、「センサが異常を検出した」など、何かが起こった時や、何かをこれからしなければならない等の状況でHになり、それらの条件が成立しない時にはLになる信号を、正論理の信号といいます。逆に、何かが起こった時や、何かをこれからしなければならない等の状況でLになり、それらの条件が成立しない時にはHになる信号を、負論理の信号といいます。

負論理の信号には、信号名に上線を付けて、負論理である事を示す習慣になっています。

例えば、平時にはLになっていて、温度センサが異常に高い温度を検出した際にHとなって警告する正論理の信号には、HOTの様な信号名を付けるでしょう。逆に、平時にはHになっていて、異常に高い温度になったらLとなって警告する負論理の信号は、HOTと、上線を付けて表示する習慣になっています。(あくまで習慣ですので、上線を付けずにHOTという信号にして、それが負論理である事は、真理値表やタイミングチャートなどで説明するという考え方もあります)

回路図上の表記に関して言えば、負論理の端子には〇印を付ける習慣があります。

例えば、AND回路の出力端子が負論理になったNAND回路は、図9の様にAND回路の出力端子に〇印を付けて表記するのはご存知でしょう。

図9、NAND回路の回路記号(MIL記号)
↑ 画像をクリックすると拡大
図9、NAND回路の回路記号(MIL記号)

AND回路の先端(出力端子)に〇印が付いています。

図9のNAND記号の〇印は、図10の様にNOT回路が省略表記されたものと考える事もできます。(おそらくそう解釈できるように〇印の記号を考えたのでしょう)

図10、NAND回路の等価回路
↑ 画像をクリックすると拡大
図10、NAND回路の等価回路
NAND回路の先端の〇印を取ってAND回路にし、その代わりにNOT回路を挿入すると、NAND回路と同じ働きをする回路になります。つまり、AND回路の外部につながったNOT回路を省略表記したのが、NAND回路の〇印だという解釈もできます。

NANDやNORなどの基本ゲート以外の論理回路でも、負論理の信号には端子に〇印を付ける習慣があります。これは習慣なので、〇印を付けないと間違いという訳ではありません。

注:NAND回路の記号の先端の〇をつけるかどうかは、任意という訳ではありません。必ず〇印を付ける必要があります。NAND回路の記号から〇を取ると、AND回路と区別できなくなります。また、図9に示したNAND回路の回路記号は、俗に"MIL記号"と呼ばれていて、MIL規格(アメリカ軍の物資の調達に使われる規格)のMIL-STD-806で規定さていた記号です。(MIL-STD-806は、現在では廃止されています) MIL-STD-806ではAND回路の記号の先端部に〇を書くのがNAND回路の回路記号だと決められていました。それだけではなく、AND回路の記号の直線部と半円の寸法の比やNAND回路記号の本体側(AND回路側)と先端の円の大きさの比など、寸法が細かく決まっていました。(このサイトの基本ゲートの記号は、細かい寸法比までMIL記号通りに書いている訳ではありません) 日本では、JIS規格に従った回路記号を使う事を推奨されているのですが、全ての論理ゲートを長方形で書き、長方形の中の文字で機能を区別するJIS記号は使い勝手が悪く、電子回路設計の実務の現場で使う人は、まずいません。MIL記号がデファクトスタンダードになっています。

先に、負論理の信号には上線の付いた信号名を付ける事と、負論理の信号線には端子部分に〇をつける事を説明しましたが、これらを組み合わせると、少し問題が生じます。

図7の回路記号は、次に示す図11や図12の書き方でも書けてしまいます。

図7(再掲)、反転出力端子のあるポジティブエッジトリガのDフリップフリップの回路記号
↑ 画像をクリックすると拡大
図7(再掲)、反転出力端子のあるポジティブエッジトリガのDフリップフリップの回路記号
図11、長方形の中の下側のQに上線が付かない表記法
↑ 画像をクリックすると拡大
図11、長方形の中の下側のQに上線が付かない表記法
図12、Q端子から〇印を取り除いた表記法
↑ 画像をクリックすると拡大
図12、Q端子から〇印を取り除いた表記法

図7、図11、および図12の表記法には、見る人の立場によって、それぞれ図13~図15の様な批判が出ます。

図13、図7の様にQの上線と〇印の両方で負論理である事を示す表記法への批判
↑ 画像をクリックすると拡大
図13、図7の様にQの上線と〇印の両方で負論理である事を示す表記法への批判
図14、図11の様に〇印だけで負論理である事を示す表記法への批判
↑ 画像をクリックすると拡大
図14、図11の様に〇印だけで負論理である事を示す表記法への批判
図15、図12の様にQの上線だけで負論理である事を示す表記法への批判
↑ 画像をクリックすると拡大
図15、図12の様にQの上線だけで負論理である事を示す表記法への批判

図7、図11、および図12の回路記号は、いずれも実際に使われているのですが、一番よく使われているのは図12の回路記号の様です。しかし、このページでは図7の表記法で書く事にします。これは、筆者の好みによります。(図11の様に回路記号内部に書く信号名と実際の信号名が違うと、回路図CADを扱う場合に不便ですし、負論理の〇が付いていないと、一見して負論理だとわかりにくいからです)

なお、信号名を回路記号の中に書かない図9のNAND回路の様な場合は、負論理を示す方法が〇印を端子に付加する方法しかなく、信号名に上線を付ける事はできないため、図13~図15の様な問題は発生しません。

【コラム】フリップフロップでは、なぜQ信号と共にQ信号も発生するのか?

フリップフロップと呼ばれる回路は、Dフリップフロップ以外にも何種類かありますが、いずれも1ビットの情報を記憶する作用を持っています。そして、フリップフロップは、図16に示す様な、2つのNOT回路が環状に接続された回路の構造を1つ以上持っています。

図16、色々なタイプのフリップフロップに共通してみられる2つのNOT回路が環状に接続された回路構造
↑ 画像をクリックすると拡大
図16、色々なタイプのフリップフロップに共通してみられる2つのNOT回路が環状に接続された回路構造
この回路図にはINV1とINV2の2つのNOT回路があります。2つのNOT回路の回路記号が異なりますが、表記法が違うだけで、論理反転を行うという動作に差はありません。INV1の様に入力端子に〇印を付ける形式のNOT回路の記号は、負論理の信号を正論理の信号に変換するためのNOT回路の記号です。INV2の様に出力端子に〇印を付ける形式のNOT回路の記号は、正論理の信号を負論理の信号に変換するためのNOT回路の記号です。

図16では、INV1とINV2の2つのNOT回路が環状に接続されています。そしてINV1の出力をQ信号として、またINV2の出力をQ信号として外部に取り出して、状態を観察できるようにしてあります。

図16の回路には、図17と図18に示す2つの安定状態があります。

図17、図16の回路の安定状態(1)
↑ 画像をクリックすると拡大
図17、図16の回路の安定状態(1)
この安定状態の時、図16の回路はHを記憶しています。
図18、図17の回路の安定状態(2)
↑ 画像をクリックすると拡大
図18、図17の回路の安定状態(2)
この安定状態の時、図16の回路はLを記憶しています。

まず図17を見てください。この図ではQ信号がHになっています。INV2はこのHが入力されるとLを出力しますから、Q信号はLになります。今度はINV1にこのLが入力されてHが出力されますから、Q信号がHになります。

この様に、図17では、Q信号がHになる事を仮定したら、信号がINV2、INV1の順に通って、結果的にQ信号がまたHになりました。このため、電源が入っている限り、Q信号がHでQ信号がLの状態を維持するでしょう。よって、この状態は安定(時間的に信号が変化しない)といえます。

次に図18を見てください。この図ではQ信号がLになっています。INV2はこのLが入力されるとHを出力しますから、Q信号はHになります。今度はINV1にこのHが入力されてLが出力されますから、Q信号がLになります。

この様に、図18の状態も安定である事が分かりました。

図16の回路の様に、回路に安定な電圧分布が2つある状態の事を、双安定といいます。双安定な回路構成を組むことは、記憶素子を作る際に、基本的な事項となります。

参考:NOT回路を奇数個環状につなげた回路では、安定な状態にはなりません。例えば3個のNOT回路をつないだ図19(a)の様な回路を考えます。

図19、3つのNOT回路を環状につないでできるリング発振器
↑ 画像をクリックすると拡大
図19、3つのNOT回路を環状につないでできるリング発振器

この回路で、ある瞬間、(1)A信号がHだと仮定します。そうすると、A信号が入力されるNOT回路の働きにより、(2)B信号がLになります。さらにB信号が入力されるNOT回路の働きにより、(3)C信号がHになります。さらにC信号が入力されるNOT回路の働きにより、初期状態とは反対に、(4)A信号がLになります。初期状態が維持できませんから、この回路は不安定です。

この様に順に各所の論理値を計算していくと、タイミングチャートが図19(b)の様になる事が分かります。この様に、安定状態を持たない論理回路は発振するのです。

図19(a)の様に、NOT回路を奇数個、環状に接続して作った発振器は、リング発振器(リングオシレータ)と呼ばれます。リング発振器は、NOT回路が高速に動作するほど高い周波数で発振する性質を持っているので、新種のロジックデバイスを開発した時に、そのデバイスの速度の評価に使われます。

図16の回路は、Q信号がHの安定状態と、Q信号がLの定状態を持ちます。ここで、Q信号がHの安定状態になっている事を、「フリップフロップがHを記憶している」と呼ぶことにします。同様に、Q信号がLの安定状態になっている事を、「フリップフロップがLを記憶している」と呼ぶ事ににします。

フリップフロップの記憶の仕組みは、図16の回路が基礎になっているので、Q信号と同時にQ信号も発生するのです。

ところで、図16の回路は双安定なので、確かに1ビットの情報を記憶しますが、好きな情報を記憶できるわけではありません。図16の回路の電源投入時の状態は不定です。2つのNOT回路の入力電圧の閾値のわずかな差や、たまたまその時に発生したノイズなどの微妙な要素で初期状態が決まってっしまいます。

自分(回路の使用者)の好きな情報を記憶しようと思うと、双安定な回路構成にするだけでは不十分で、一方の安定状態から、もう一方の安定状態に遷移させる(移す)仕組みを組み込む必要があります。

この安定状態を遷移させる仕組みの回路構成により、RSフリップフロップ、JKフリップフロップ、Tフリップフロップ、Dフリップフロップなどのバリエーションが発生します。

安定状態を遷移させる仕組みについて説明すると、話が長くなるため、最も簡単な例のみをここで紹介しておきます。

図16の回路に抵抗を2個、押しボタンスイッチを2個付けて作ったのが図20の回路です。

図20、セット用スイッチとリセット用スイッチを設けた双安定回路(非同期RSフリップフロップの一種)
↑ 画像をクリックすると拡大
図20、セット用スイッチとリセット用スイッチを設けた双安定回路(非同期RSフリップフロップの一種)

S1とS2の2つのスイッチがOFFの状態では、図20の回路は図16の回路と同じ動作をします。つまり、Q信号がHでQ信号がLの安定状態(Hを記憶した状態)と、Q信号がLでQ信号がHの安定状態(Lを記憶した状態)のいずれかの状態を保持します。

注:S1とS2の2つのスイッチがOFFでも、回路の中にR1とR2の2つの抵抗が残りますが、これらの抵抗には電流が流れないので、電圧降下は発生しません。

スイッチS1のみをONにした場合は、INV1の出力がHかLかにかかわらず、Q信号がLになります。INV1の出力がHの場合は、Q信号の電圧を押し上げる方向にINV1の出力端子が電流を供給するものの、INV1の出力は抵抗R1を介してQ信号につながっており、一方でスイッチS1を介してQ信号がGNDにショートしているので、Q信号はLになります。Q信号がLになると、INV2の働きによりQ信号はHになります。

この様に、スイッチS1のみをONにすると、Q信号がLでQ信号がHになりますが、その後スイッチS1をOFFに戻しても、Q信号がLでQ信号がHの安定状態(Lを記憶した状態)を保持します。つまり、スイッチS1のボタンを押すと、フリップフロップに強制的にLを記憶させる事ができるのです。

この例の様に、外部からの操作で、フリップフロップに強制的にLを記憶させることを、リセットあるいはクリアといいます。

今度は、スイッチS2のみをONにする事を考えます。この場合は、INV2の出力値にかかわらず、Q信号がLになります。Q信号がLになると、INV1の働きにより、Q信号がHになります。つまりHを記憶した状態になります。この状態は、スイッチS2をOFFにしても維持されます。つまり、スイッチS2のボタンを押すと、フリップフロップに強制的にHを記憶させる事ができるのです。

この例の様に、外部からの操作で、フリップフロップに強制的にHを記憶させる事を、セットあるいはプリセットといいます。

S1とS2の2つのスイッチを共にONにした場合は、Q信号とQ信号が共にLになります。この状態は、2つの安定状態のいずれでもないので、S1とS2の2つのスイッチを共にOFFに戻した時に、Q信号がHでQ信号がLの安定状態(Hを記憶した状態)か、Q信号がLでQ信号がHの安定状態(Lを記憶した状態)かのいずれかに戻ります。どちらの安定状態に戻るかは、S1とS2のいずれのスイッチを先にOFFにするかで決まります。ただし、S1とS2を同時にONにした状態は、Q信号とQ信号の論理値が互いに反転していないという、例外的な状態になるため、2つのスイッチを同時にONにする操作は禁止するのが一般的です。

以上の様に、図20の回路は、スイッチ操作により、フリップフロップをリセットしたりセットしたりする事ができます。この様なフリップフロップをRSフリップフロップといいます。(RSは、リセット・セットの略) ただし、図20のRSフリップフロップは、Q信号あるいはQ信号を、スイッチでGNDにショートする事により操作する、やや特殊なRSフリップフロップです。外部からHまたはLの論理値を入力する事により動作する、普通のRSフリップフロップの回路構成や動作原理については、Wikipediaのフリップフロップのページを参照してください。

2つのDフリップフロップを従属に接続して共通のクロック信号を与えた時の動作

図21に示す様に、2つのDフリップフロップを従属に接続(一方の出力をもう一方の入力に接続)して、両方のDフリップフロップに共通のクロック信号を与えた場合を考えます。

図21、2つのDフリップフロップを従属に接続して両方のDフリップフロップに共通のクロック信号を与えた回路
↑ 画像をクリックすると拡大
図21、2つのDフリップフロップを従属に接続して両方のDフリップフロップに共通のクロック信号を与えた回路

この回路では、D端子に信号を加えると、一つ目のDフリップフロップであるFF1がD信号をCLK信号の立ち上がりで読み取ります。そうして得られたQ1信号を2つ目のフリップフロップであるFF2がCLK信号の立ち上がりで取り込むと、得られるQ2信号は、Q1信号より1クロック遅れた信号になります。

図21の回路のタイミングチャートの例を図22に示します。

図22、図21の回路のタイミングチャートの例
↑ 画像をクリックすると拡大
図22、図21の回路のタイミングチャートの例
Xは不定(LかHか分からない状態)を表します。

このタイミングチャートの赤い楕円で囲んだ部分を見ると、CLK信号がLからHに立ち上がると同時に、Q1信号がHからLに立ち下がっている様に見えます。これでは、CLK信号が立ち上がった瞬間のQ1信号の論理が決まらず、FF2の動作が不確定になりそうな気がします。

しかし、図23に示す様に、赤い楕円で囲んだ部分を時間軸方向に拡大してみると、様子が変わってきます。

図23、図22のタイミングチャートの赤い楕円で囲まれた部分を時間軸方向に拡大した図
図23、図22のタイミングチャートの赤い楕円で囲まれた部分を時間軸方向に拡大した図

フリップフロップFF1は、CLK信号の立ち上がり時のD信号の論理を読み取り、それをQ1信号として出力しますが、実際にD信号を読み取ってから、Q1信号にそれが反映されるまでには、わずかですが時間がかかります。(その時間は、使うDフリップフロップによって変わりますが、高速CMOSデバイスを用いる場合はおおむね数nsです) そのため、CLK信号の立ち上がりの瞬間にD信号がLであるのを読み取ってから、数ns経過して、Q1信号がHからLに立ち下がります。

この結果、CLK信号が立ち上がる瞬間のQ1信号はHとなります。そのため、CLK信号が立ち上がった後のQ2信号もHとなります。

この様に、DフリップフロップのD信号として、CLK信号の立ち上がりに同期して変化する信号を入力した場合、D信号がCLK信号に対してわずかな時間遅れて変化するため、Dフリップフロップは、D信号の変化前の状態を読み取ります。

注:この議論を厳密に行うためには、伝搬遅延時間、セットアップ時間、ホールド時間などについて説明する必要があるのですが、ここでは概念的な説明にとどめておきます。

この、Dフリップフロップを通るとクロック同期した信号を1クロック分遅らせる事の出来る性質を、積極的に応用した回路としては、シフトレジスタを用いた遅延回路シリアル-パラレル変換回路が挙げられます。

Dフリップフロップを4つ従属に接続して作った4ビットのシリアル-パラレル変換用シフトレジスタの回路図を図24に、またそのタイミングチャートの例を図25に示します。これらの図の詳しい説明は、この用語集のシリアル-パラレル変換回路の項目をご覧ください。

図24、Dフリップフロップを4つ従属に接続して作った4ビットのシリアルパラレル変換用シフトレジスタ
↑ 画像をクリックすると拡大
図24、Dフリップフロップを4つ従属に接続して作った4ビットのシリアルパラレル変換用シフトレジスタ
図25、図24の回路のタイミングチャートの例
↑ 画像をクリックすると拡大
図25、図24の回路のタイミングチャートの例

非同期クリア端子や非同期プリセット端子を持つDフリップフロップ

先に説明した様に、Dフリップフロップの電源投入直後の記憶内容(Q信号)は不定です。よって、下手に同期回路(Dフリップフロップをたくさん含む回路)を設計すると、その動作が、各Dフリップフロップの初期値に影響を受け、電源を投入するたびに振る舞いが変わる恐れがあります。

もし、電源投入直後の各Dフリップフロップの状態を、それぞれにLあるいはHの好きな方に固定できれば、設計によらず毎回同じ動作をする事が保証できて、安心です。

こういう時は、電源投入直後のDフリップフロップの状態を指定するための、非同期クリア端子や非同期プリセット端子が付いたDフリップフロップを使うのが便利です。

非同期クリア端子のあるDフリップフロップ回路

他の入力端子の論理値や、Dフリップフロップが記憶していた論理値にかかわらず、Dフリップフロップに強制的にLを記憶させるための入力端子を、非同期クリア端子と呼びます。

図26に、非同期クリア端子のあるDフリップフロップの回路記号を示します。また比較のために、非同期クリア端子のないフリップフロップの回路記号(図7)を再掲します。

図26、非同期クリア端子付きのDフリップフロップの回路記号
↑ 画像をクリックすると拡大
図26、非同期クリア端子付きのDフリップフロップの回路記号
図7(再掲)、反転出力端子のあるポジティブエッジトリガのDフリップフリップの回路記号
↑ 画像をクリックすると拡大
図7(再掲)、反転出力端子のあるポジティブエッジトリガのDフリップフリップの回路記号

図26の記号では、図7の記号にCLR端子が追加されています。CLR端子は下に書くことが多い様です。

このCLR端子にHが入力されると、他の端子の状態にかかわらず、Q信号はLになります。そして、CLR端子にHが入力され続けている間はQ信号はLを維持します。CLR端子にLが入力されると、図7のフリップフロップと同様の動作をします。

注:非同期クリア端子は、非同期リセット端子と呼ばれることもあります。またCLR端子は、教科書によってはCLEAR端子、C端子、R端子、RES端子、RESET端子等と書いてある場合もあります。

この動作を真理値表で表すと、表5の様になります。

表5、非同期クリア端子付きのDフリップフロップの真理値表
入力信号 出力信号 動作
CLR CLK D Q Q
H X X L H 非同期クリア
L L X q q 保持
L H X q q
L X q q
L L L H 読み取り
L H H L

注:表5における"X"、"↑"、"↓"、"q"、"q"の記号の意味は、表4と同様です。

非同期クリア端子付きのDフリップフロップのタイミングチャートの例を図27に示します。

図27、非同期クリア端子付きのDフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図27、非同期クリア端子付きのDフリップフロップのタイミングチャートの例
図の中のXは、不定(LかHか分からない状態)を表します。

このタイミングチャートから、CLR端子がHの期間に、CLK信号の立ち上がりのタイミングに関係なく、Q信号がLになる様子が分かります。

なお、非同期クリア端子を非同期リセット端子とも呼ぶ事は先に説明しましたが、電源投入時のフリップフロップの不定状態を解消するために非同期クリア端子を使う場合、あるいは(基板上のリセットボタンを押すなどして)回路全体を初期状態に戻すために非同期クリア端子を使う場合に「フリップフロップをリセットする」という表現をし、逆に、通常の回路の動作の一環として、(全てのフリップフロップではなく特定のフリップフロップの)非同期クリア端子でQ信号をLにする場合を「フリップフロップをクリアする」と表現して、区別する場合があります。

参考:同期回路を設計する場合は、回路の初期化(電源投入時の不定状態の解消および回路動作中に回路全体を初期状態に戻す処理)にのみ非同期クリア端子を使い、通常の回路の動作の一環としては非同期クリア端子を使う事を禁止する場合が多いです。これは、通常の回路動作の一環として、不用意に非同期クリア端子を使うと、非同期クリア信号にハザードが発生し、予期せぬタイミングでフリップフロップがクリアされる危険があるためです。

非同期プリセット端子のあるDフリップフロップ

他の入力端子の論理値や、Dフリップフロップが記憶していた論理値にかかわらず、Dフリップフロップに強制的にHを記憶させるための入力端子を、非同期プリセット端子と呼びます。非同期クリア端子はDフリップフロップに強制的にLを記憶させる端子でしたので、非同期プリセット端子は、非同期クリア端子と逆の働きをする端子という事になります。

非同期プリセット端子付きのDフリップフロップの回路記号を図28に示します。

図28、非同期プリセット端子付きのDフリップフロップの回路記号
↑ 画像をクリックすると拡大
図28、非同期プリセット端子付きのDフリップフロップの回路記号

この図のPREと書いてある端子が非同期プリセット端子です。非同期プリセット端子は、上側に書く場合が多い様です。

注:非同期プリセット端子は、非同期セット端子と呼ばれる場合もあります。教科書によっては、PRE端子はPRESET端子、P端子、SET端子、S端子等と書いてある場合もあります。

非同期プリセット端子付きのDフリップフロップの真理値表を表6に示します。

表6、非同期プリセット端子付きのDフリップフロップの真理値表
入力信号 出力信号 動作
PRE CLK D Q Q
H X X H L 非同期プリセット
L L X q q 保持
L H X q q
L X q q
L L L H 読み取り
L H H L

注:表6における"X"、"↑"、"↓"、"q"、"q"の記号の意味は、表4と同様です。

非同期プリセット端子付きのフリップフロップのタイミングチャートの例を図29に示します。

図29、非同期プリセット端子付きのフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図29、非同期プリセット端子付きのフリップフロップのタイミングチャートの例

非同期プリセット端子を非同期セット端子と呼ぶ場合もある事は先に説明しましたが、回路の初期化のために非同期プリセット端子でHを書き込む場合を「フリップフロップをプリセット」すると呼び、回路の通常の動作の一環として非同期プリセット端子でHを書き込む場合を「フリップフロップをセットする」と呼んで、区別する場合もあります。

参考:プリセットは、「あらかじめセットしておく」という意味の言葉です。

非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップ

非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップも存在します。その回路記号を図30に、真理値表を表7に示します。

図30、非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップの回路記号
↑ 画像をクリックすると拡大
図30、非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップの回路記号
表7、非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップの真理値表
入力信号 出力信号 動作
CLR PRE CLK D Q Q
H L X X L H 非同期クリア
L H X X H L 非同期プリセット
H H X X U U 禁止
L L L X q q 保持
L L H X q q
L L X q q
L L L L H 読み取り
L L H H L

注:表6における"X"、"↑"、"↓"、"q"、"q"の記号の意味は、表4と同様です。"U"は未定義を表します。

表7の真理値表から分かるように、CLR信号がHでPRE信号がLなら、Q信号はLでQ信号はHになります。(非同期クリア)

また、CLR信号がLでPRE信号がLなら、Q信号はHでQ信号はLになります。(非同期プリセット)

また、CLR信号とPRE信号が両方Lなら、非同期クリア端子や非同期プリセット端子がないDフリップフロップ(図7)と同様の動作になります。

注意しなければならないのは、CLR信号とPRE信号が両方ともHの場合です。CLR信号はDフリップフロップに強制的にLを記憶させる信号で、PRE信号はDフリップフロップに強制的にHを記憶させる信号なので、両方を同時にHにすると、矛盾が発生します。そのため、この時のQ信号およびQ信号は未定義になります。

未定義というのは、Lになるか、Hになるかが決まっていないという事です。実際にはLまたはHのいずれかが出力されるのですが、Lが出力される事、あるいはHが出力される事を期待して回路設計を行ってはいけません。

参考1:FPGAやASICの設計において非同期クリア端子と非同期プリセット端子のあるDフリップフロップを使用する場合、HDL(ハードウェア記述言語)でDフリップフロップをどう記述するかで、CLR信号とPRE信号の両方がHの時の挙動が決まります。CLR信号とPRE信号の両方がHの時に出力が未定義になるような記述法もありますが、その場合は、HDLのコンパイラが、回路規模が最小になるようにCLR信号とPRE信号の両方がHの時の出力状態を定めます。

参考2:74HCシリーズなどの汎用ロジックICで非同期クリア端子と非同期プリセット端子のあるDフリップフロップを使用する場合、使用するICのデータシートで、CLR信号とPRE信号の両方がHの時の出力状態が定義されています。例えば74HC74は、負論理の非同期クリア端子と負論理の非同期プリセット端子の両方があるDフリップフロップが2個、1つのパッケージに収められたICです。74HC74の場合、CLR信号とPRE信号の両方がLになる場合は、Q信号とQ信号の両方がHになると定義されています。

通常、出力が未定義になるCLR信号とPRE信号の両方がHになる状態にする事は禁止されています。

非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップタイミングチャートの例を、図31に示します。

図31、非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図31、非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップのタイミングチャートの例
CLR信号とPRE信号を同時にHにする事は禁止されているので、そうならないような信号を入力した例を示しています。

負論理の非同期クリア端子や非同期プリセット端子

市販されている汎用ロジックICでは、非同期クリア端子や非同期プリセット端子が負論理になっている場合が多くあります。

負論理の非同期クリア端子と負論理の非同期プリセット端子のあるフリップフロップ回路の回路記号を図32に、真理値表を表8に、タイミングチャートの例を図33に示します。

図32、負論理の非同期クリア端子と負論理の非同期プリセット端子の両方があるDフリップフロップの回路記号
↑ 画像をクリックすると拡大
図32、負論理の非同期クリア端子と負論理の非同期プリセット端子の両方があるDフリップフロップの回路記号
表8、負論理の非同期クリア端子と負論理の非同期プリセット端子の両方があるDフリップフロップの真理値表
入力信号 出力信号 動作
CLR PRE CLK D Q Q
L H X X L H 非同期クリア
H L X X H L 非同期プリセット
L L X X U U 禁止
H H L X q q 保持
H H H X q q
H H X q q
H H L L H 読み取り
H H H H L

注:表6における"X"、"↑"、"↓"、"q"、"q"、"U"の記号の意味は、表7と同様です。

図33、非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図33、非同期クリア端子と非同期プリセット端子の両方があるDフリップフロップのタイミングチャートの例
CLR信号とPRE信号を同時にLにする事は禁止されているので、そうならないような信号を入力した例を示しています。
広告
ツイート
シェア
このエントリーをはてなブックマークに追加
フォロー

関連用語

関連ページ

このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。
こちらのページもおすすめです。
サイトマッププライバシーポリシーお問い合わせ用語集
しなぷすのハード製作記