概要
前回はコンパレータでした。今回はDFFとLATCHを調べてみたいと思います。
DFF
前回の最後でやった、コンビネーション・ファンクション・マクロセルです。LUTと同じマイクロセルを選択し、Typeを変更することでDFFを選択可能です。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-89.png)
マクロセルによって、選べるファンクションは複数あるようです。足の数がそもそも違いますからね。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-90-700x440.png)
全部DFFに変更してみました。17個ありまして、足の数が違うのが3種類ありますね。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-91-300x48.png)
一番シンプルなのは2入力でDとCLKで、Qを出力しています。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-92-300x156.png)
下にnRESETが増えました。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-93-300x158.png)
DFF9だけnSETがさらに増えています。
DFFとは?
D-Flip Flopの略で、D-FFなどと表記されることがあります。フリップフロップはデータを保持する回路で、クロックを使ってデータを保持する回路をD-FFと呼ぶようです。
実際の回路図は探せば出てくるので、各自確認してください。実際に動かしてみて動作を確認してみます。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-94-700x254.png)
DFFにOSC0からクロックを入力して、適当な信号を外部から入力して結果を確認してみます。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-95-700x604.png)
一番上がクロックです。真ん中が適当な入力のDになります。一番下がQの出力です。ちょっとわかりにくいのですが、Qが変化するのはクロックがLOWからHIGHに変わる立ち上がりのタイミングとなります。どの値に変化するかを見ると、クロックの立ち上がりの瞬間のDの値です。
デフォルトの動きですと、クロックの立ち上がりの瞬間のDの値を保持する動きになっています。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-96.png)
設定項目を見てみます。
Initial polarity:初期極性
デフォルトはLowになっていました。これは起動直後の値を設定します。ただしPORがLOWの場合には、起動していないので常にLOWになります。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-97-700x604.png)
デフォルトのLOWではクロックが動いたところがPORがHIGHになって、起動したタイミングで、LOWで起動しています。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-98-700x604.png)
Highに変更してみました。クロックが動いたところがPORがHIGHになった起動したタイミングでHIGHになっています。
Q output polarity:Q出力極性
通常はQですが、反転したQが選択できます。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-99-700x604.png)
ちょっとわかりにくいですが、たしかに反転しています。ただし初期極性がLowなので、反転してHIGHで起動しています。Qを反転した場合には、Highに設定すると起動時にLowになりました。
nRESET:反転リセット
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-100-700x397.png)
リセット付きのDFFをつかって、リセット信号の確認をしてみます。nがついているので、LOWになるとリセットですね。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-101-700x604.png)
nRESETがLOWになると、QもLowに落ちていますね。
nSET:反転セット
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-102.png)
先程の回路のまま、nSET/nRESETをnSETに設定してみました。nRESET端子かと思ったらnSETにもなるんですね。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-103-700x604.png)
結果です。データ名がnRESETのままですが、nSETがLOWになるとQがHIGHにセットされました。
LATCH
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-104.png)
ラッチはDFF/LATCHタイプに変更してから、モードでLATCHを選択することで利用できます。結構面倒ですね。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-105-700x408.png)
足の数とか個数はD-FFと同じですね。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-106-700x470.png)
D-FFと同じ回路を組んで動作を確認します。かなりわかりにくいですが、クロックがLOWの場合、DとQは同じ値です。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-107-700x470.png)
クロックとDの周波数を変えてみました。クロックがLOWのときにDとQが同じように変化していますね。クロックがHIGHのときには、そのときのQの値を保持しています。ラッチはクロック信号がHIGHのときに信号を記憶するという動きになります。実際にはクロック信号ではなく、特定のタイミングの信号を保持するときに使う感じでしょうか。
応用回路(分周器)
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-110-700x256.png)
D-FFの出力を反転させ、Dに戻すことで分周器が作成できます。
![](https://lang-ship.com/blog/wp-content/uploads/2020/12/image-111-700x470.png)
クロックが半分の周波数になりました。これを複数段使うことで、高速すぎるLチカをゆっくり動かすことが可能です。
まとめ
今回はD-FFとLATCHを紹介しました。LATCHも正式にはD-LATCHになると思います。このDはDelayを表していて、前回の結果が遅延して出力する意味みたいです。
マイクロセルの説明より、どんな回路で説明するかが難しいです。特に応用回路とかで、単純な例が見つかりにくいです。D-FFはシリアルtoパラレルとかでも使えますが、一気に回路が複雑になります。
単純なラッチ回路の実用例が見つからない、、、
次回はカウンタの予定です。なかなか紹介する順番が難しいです。
コメント