ブログ | 技術情報 | ディー・クル―・テクノロジーズ

bookmark_borderフリップフロップ(FF)④|DFFの誤作動を防ぐには

前回は、“入力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の調整をすることが多い様に思います。

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

次回の記事 https://d-clue.com/blog/technology/ff5

bookmark_borderフリップフロップ(FF)③|D-FF回路を安定して動作させるには?

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

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

DFFに入れるCLKのTr/Tfを遅くした波形を図 1に示します。

図1

DFFの出力V(Q)の動作がおかしくなっています。クロックV(C)の立上がりだけではなく、立下りでも変化してしまっています。これは、スレーブラッチが正しく動作しなくなっているために起きている現象です。

スレーブがデータを取り込んで(図ではD1Xの“L”を取り込んで)、これをラッチする(32usecのちょっと前のCLKの立下り)事ができず、入力データD1Xの変化がそのまま出力Qに現れてしまっています。

問題の部分を拡大してみると・・・

図2

図 2の拡大図を見ると分かるように、ほんの僅かですがD1Xの立ち上がりのほうが早くなっています。

本来の動作は、CLKの立下りの後、D1Xが変化しないといけないのですが、CLK波形のTr/Tfが遅くなったため順番が逆になってしまったのです。

D1Xの立ち上がりを遅くするためにマスターラッチ用のクロックを遅くしてみました。

図3

これでうまくいくはずだったのですが・・・

図4

残念ながら直っていません(T_T)。何で?と拡大してみると。。。

図5

まだ、D1Xのほうが早く動いてしまっています。

単純なインバータで遅延を作ったのがまずかったようで、CLK2(遅らせたいCLK)の方が後ろにあるのですが、利得が高くなっているために先に動作してしまっています。

それならばという事で、更にインバータを追加してみます。

図6
図8

確かに、D1Xの方が遅くなっています。。。しかし、その差は500psec以下!!

実際の回路では寄生容量など回路図にはないデバイスの影響もあるので、このくらいの差はひっくり返ってしまうこともあります。

以上の様に入力CLKのTr/Tfが遅くなるとDFFは誤動作を起こしてしまうので、Tr/Tfに制限をつける必要があります。

次回は、入力データとクロックの位相関係について触れたいと思います。

bookmark_borderフリップフロップ(FF)②|D-FF回路の動作を詳しく説明

前回記事はこちら

今回は前回紹介したD-FF回路(図 1)の動作を説明したいと思います。

D-FF回路の動作

図1

ラッチ内のASW(四角いブロック)の中は下の様になっていて、SW端子が‘H’でSWX端子が‘L’のときは、左側の列のTrがONし右側の列のTrがOFFするので、COM端子はA端子とつながります。逆にSW端子が‘L’でSWX端子が‘H’のときは、COM端子はB端子につながります。

図2

ラッチ内のINV(三角のブロック)はインバータです。

図3

図 1と図 3を使ってマスターラッチの動作から説明します。結構複雑な動きをします(汗)。

マスターラッチの動作

(A)CLKが‘L’の時(つまり、CLKXが‘H’の時):

ASWの端子Aと端子COMが接続し、入力Dが回路内に取り込まれます

このときD1,D1X,D1XXの状態が変化し、ASWの端子COMからインバータを

2個経由した端子B(つまり、D1XX)は、端子A(つまり入力D)と同じ論理になっています。

(B)CLKが‘H’の時(つまり、CLKXが‘L’の時):

ASWの端子Bと端子COMが接続し、前の状態をラッチします。

つまりD1、D1X、D1XXの正帰還状態となります。

この間、ASWの端子A(つまり入力D)が変化しても、ラッチ回路内は影響を受けません。

図4

続いて図 1と図 4を使ってスレーブラッチの動作を説明します。

スレーブラッチの動作

(マスターラッチとはCLKの接続が逆になっている事に注意して下さい)

(C)CLKが‘H’の時(つまり、CLKXが‘L’の時):

ASWの端子Aと端子COMが接続し、入力D1Xが回路内に取り込まれます

このときD2X,D2XX,D2XXXの状態が変化し、ASWの端子COMからインバータを

2個経由した端子B(つまり、D2XXX)は、端子A(つまり入力D)と同じ論理になっています。

(D)CLKが‘L’の時(つまり、CLKXが‘H’の時):

ASWの端子Bと端子COMが接続し、前の状態をラッチします。

このときはD2X,D2XX,D2XXXの正帰還状態となります。

この間、ASWの端子A(つまり入力D)が変化しても、ラッチ回路内は影響を受けません。

実はこの(D)になる時が一番危険な時なのです。

なぜかというと、“前の状態をラッチする”と“D1Xの変化”がほぼ同時に行われているからです。

安全にするには“前の状態をラッチした後、D1Xが変化する”ようにすれば良いので、

CLKの順番で言うと、

“スレーブラッチのCLKの立下り(CLKXの立ち上がり)の後、マスターラッチのCLKが立下る(CLKXが立ち上がる)”

となります。つまり、スレーブラッチのCLKがいつも早くなるようにしておけば良い事になります。

しかし、実際にはそう単純にはいかない事情があります。

次回はこのあたりをもう少し詳しく紹介したいと思います。