ラッチ | ディー・クル―・テクノロジーズ ブログ

bookmark_borderフリップフロップ(FF)⑥

前回はDFFには、セットアップ・ホールドタイムがあり、このタイミングでデータとクロックを入力すると、正しく出力されず、メタステーブルと言った現象が発生することを紹介しました。

【前回の記事】

今回は、セットアップ・ホールドタイムの特徴とメタステーブル対策を紹介したいと思います。

シミュレーションに使ったDFFの回路は、DFF(その4)で使った下記の回路です。

図1

セットアップ・ホールドタイムへの影響

DFFの入力信号の条件として以下の4種類が考えられます。

  • CLKの振幅
  • CLKのTR/TF
  • DATAの振幅
  • DATAのTR/TF

これらのセットアップ・ホールドタイムに対する影響を見てみると次のようになります。

DATA入力振幅を変えた場合

図2

CLK入力振幅を変えた場合

図3

DATA入力波形のTR/TFを変えた場合

図4

CLK入力波形のTR/TFを変えた場合

図5

結果

以上の結果から、

  • DATA入力振幅が小さくなると、セットアップ・ホールド時間が長くなる
  • CLK入力振幅と波形のTr/Tf時間はセットアップ・ホールド時間への影響は少ない
  • DATA入力波形のTr/Tf時間が長くなると、セットアップ・ホールド時間が長くなる

事が分かります。要するに、いかに“DATAをきれいにしてDFFに入力する”かが大事と言えます。

シミュレーションでは発生しにくいメタステーブル

ちなみに、セットアップ時間を調べたのは、メタステーブルをシミュレーション発生させるためでした。ところが、実際はメタステーブルはなかなか発生しません。

メタステーブルの発生メカニズム

メタステーブルは、マスターラッチがラッチ出来ず中間電位でウロウロする。また、入力データとは無関係なデータを出力したりする。こうしたことで発生します。(図 7参照)しかし、普通のDFFではなかなか再現できません。

図6

普通のラッチは上図のように正帰還ループを使うため、簡単に中途半端な電圧にとめる事ができません。例えば、インバータI2の入力電圧D1と帰還出力D1XXがピッタリ同じ中間電圧にあったとしても、CLK3が‘H’になってSWが切り替った影響で’H’か‘L’のどちらかに飛んでしまいます。つまり、メタステーブルはめったに発生しない現象なのです。

また、メタステーブルに入って中間電位が出ていたとしても、それは非常に不安定な状態なので何らかの外乱(CLKの立下りなど)で中間電位から脱し、次のCLKでは正常に戻ることがほとんどです。

図7

メタステーブルが問題視される理由と非同期信号への対応策

それでもメタステーブルが問題とされているのは、次の理由からです。

  • 予期しない出力が出るので、後段のデジタル回路が誤動作する。
  • 中間電位が出力されると、後段のデジタル回路にも貫通電流が流れる。
  • シミュレーションで再現できないので、設計で気がつかないことがある。

メタステーブルを防止するには、セットアップ・ホールド時間をきちんと確保した同期設計をする事が一番確実なのです。しかし、リセット回路など非同期の信号を扱う場合は、セットアップ・ホールドなどと言えません。このような非同期の場合は、下記のように対策します。

図8

このように、DFFを一段追加する事で、メタステーブルの影響を後段に伝える事を防止しています。

さすがに2段連続してメタステーブルに入る事は無いだろうという事ですが、確率の問題で絶対無いとはいえません。そこで、回路規模や消費電流に余裕がある場合は更にDFFを追加してより確実にするのが一般的です。

次回は、時間軸と周波数軸を行ったり来たりする”フーリエ変換”について触れたいと思います。

bookmark_borderフリップフロップ(FF)⑤

今回は、セットアップ・ホールドタイムについて触れたいと思います。

前回の記事はこちらです。

DFFの役目

DFFの役目は、「入力されたデータを意図したタイミングで‘1’or‘0’に判別する」です。(1ビットのA/Dコンバータとも言えます)では、どのタイミングで判別するか?と言うと、“マスターラッチが入力されたデータをラッチするタイミング”で判別が行われます。

CLKの“立上り”や“立下り”と表現することが多いのですが、動作原理からは“マスターラッチ回路がデータをラッチする時に、‘1’、‘0’に判別しています。

‘1’、‘0’に判別することも重要な役目なのですが、DFFの出力データは“意図したタイミング”で出力されることも重要な役目です。

つまり、判別するCLKのエッジを変化させることで、データが変化するのタイミングを変えることができます。

図1

図 1の様にDFFに入力するCLKの位相(エッジのタイミング)を変えることで、出力Qのデータが変化するタイミングを変えることができます。

データ変化のタイミング変化には、制限がある

この仕組みは、入力されたデータの変化するタイミングを、自分の都合の良いタイミングに変更する事に使われ、デジタル電子回路のあらゆるところに使われています。

ではこの機能に制限はないかというと、残念ながら制限があって、それが“セットアップ・ホールドタイム” です。

図2

図 2は、DATA(10交番)とCLKの周波数をわずかにずらしてシミュレーションした結果です。(回路は前回の図4です)

出力Qの様子がおかしい(10交番が出ていない)箇所があります。

この部分を拡大してみると、

図3
図4

ホールドタイムとは何か

上の図は、DATAが変化する直前にCLKのエッジが来るようになった場合を示しています。①と②では正しく動作していますが、③では正常な動作ができていません。

データの変化に対してどのくらい前にCLKエッジがいるかをホールドタイムと言います。

CLKエッジが入力されマスターラッチ回路がデータをラッチする、つまりホールド(つかむ)のに必要な時間です。この時間を確保した後に入力変化させないと、ラッチができずに正しい動作ができなくなってしまいます。

図5

逆に上の図は、DATAの変化直後にCLKのエッジが来るようになった場合を示しています。⑥以降では正しく動作していますが、④では正常な動作ができていません。

セットアップタイムとは何か

データの変化のどのくらい後にCLKエッジがいるかをセットアップタイムと言います。データが変化した後、ラッチの準備が整うまでの時間、つまりセットアップ(準備)の時間です。この時間を待ってやらないと、マスターラッチ回路が十分な準備ができず正しく動作できなくなってしまいます。

セットアップ・ホールドタイムを確保しないとDFFが正しく動作しないので、DFFの出力Qはどうなるか分かりません。上のシミュレーションの様に‘1’や‘0’になってくれれば良いのですが、場合に依っては‘1’‘0’の繰り返しが出力されたり、最悪の場合は、中間電位でとまってしまう場合があります。

厄介な現象「メタステーブル」とは何か

DFF出力に余計な10交番が混じったり、中間電位で止まってしまうと後段に及ぼす影響は計り知れません。特に中間電位で止まってしまうと後段のデジタル回路に貫通電流が流れ、デバイス自体にダメージを与えかねません。

こう言った現象を“メタステーブル”と言います。

メタステーブルの一番厄介な所は、必ず発生するとは限らないからです。

また、電源電圧や温度、トランジスタのバラツキや入力データ/クロックの波形などにも依存し、回路設計で「メタステーブルの発生を100%防止することは非常に困難」です。

この厄介な現象を確実に防止するには、セットアップ・ホールドタイムをきちんと確保することです。その為には、入力データの変化タイミングとクロックエッジの関係が確定していなくてはなりません。つまり、同期式の回路でなくてはいけない事になります。

しかし、実際には全ての回路を同期式に設計することが出来ず、外部との接続で必ず非同期の部分(例えばリセット回路など)が出てきます。

次回は、このメタステーブルが発生しても、その波及度を最小限にとどめるための回路を紹介したいと思います。

bookmark_borderフリップフロップ(FF)④

前回は、“入力CLKのTr/Tfが遅くなるとDFFは誤動作を起こしてしまうので、Tr/Tfに制限をつける必要がある”ことを紹介しました。今回はもうちょっとこの辺りを掘り下げてみたいと思います。

前回の記事↓

DFFを安定に動作させるには、“前の状態をラッチした後、D1Xが変化する”ようにすれば良いことを前回は説明しました。

  • スレーブがデータをラッチするのは、CLK2の立下りが決めています。
  • マスターが新しいデータを取り込むのは、CLK3の立下がりが決めています。

つまり、前の状態をラッチした後に、D1Xが変化するようにするには、CLK2の立下りの後にCLK3の立下りが来れば良いことになります。

図1

CLK2/3の立上がりを遅らせてもよいのか

ここで気になるのは、“立下りを遅らせると立上りも遅れるが・・・良いのか?”ということです。

  • スレーブラッチが新しいデータを取り込むのは、CLK2の立上がりが決めています。
  • マスターラッチがデータをラッチするのは、CLK3の立上がりが決めています。

なので、スレーブが新しいデータを取り込んだ後に、マスターがラッチする事になります。

前回の回路に思いっきり遅延回路を追加して確認してみたいと思います。

入力データは雑音の影響を分かりやすくするために小さくし、雑音を入れました。

図 3の結果を見ると、CLK2の立上り~CLK3の立上り間、出力Qに入力Dの雑音がそのまま出力されてしまっています。

これは、スレーブが取り込む新しいデータにラッチがかかっていないために、

ことになります。これではDFFとしての役目を果たしていません。

スレーブがデータを取り込めるように、Dutyの幅を調節する

ではどうすれば良いかというと、マスターがラッチしたデータをスレーブが取り込む。つまり、CLK3の立ち上がりの後、CLK2の立ち上がりが来る必要があります

簡単にいうと、CLK2はDutyを細く、CLK3はDutyを広くすると良いのです。

処理の順番は、

  • CLK3の立上り:マスターラッチがデータをラッチ。
  • CLK2の立上り:マスターラッチの出力をスレーブが取り込み、Qに出力
  • CLK2の立下り:スレーブラッチが出力したデータをラッチ
  • CLK3の立下り:マスターラッチが新しい入力データを取り込む

このようにDutyを意図的ずらすクロックはSCF(Switched Capacitor Filter)などで、スイッチを同時にONさせたくない場合などに、よく使います。

CLK回路にNANDと遅延回路を使った図 4の回路で実現できます。(上記は一例であって、他にもDutyを意図的にずらす回路はあります)

CLKのDutyを適切に調整することで、入力雑音が出力に出てこなくなりました。

実際のDFFで図 4の様にNANDを使うことは消費電力やサイズの面で不利なので、Pch/NchのL/W長を調整して閾値を意図的に変えて、Dutyの調整をすることが多い様に思います。

次回は、セットアップ・ホールドタイムについて触れたいと思います。