- 追加された行はこの色です。
- 削除された行はこの色です。
#pcomment
* Dフリップフロップ(D-FF)の設計 [#gb81cd5a]
論理回路の醍醐味は順序回路、で、そのためにはフリップフロップ!というわけで、D-FFをつくってみたいとおもいます。
#ref(./TFF.png,20%)
D-FFの中身もいろいろありますが、ここは「準スタティック型」と呼ばれるやつを使ってみます。
#ref(./DFFsch.png)
詳しい方なら、「お?マスタースレーブ式か?」と思われるかもしれませんが、基本的にはそうです。↓のクロックト・インバータというやつを使っています。
#ref(./cinv_sch.png)
これは、CK=0/CKb=1のときはふつうのインバータと同じですが、CK=1/CKb=0のときは出力がHigh-Zとなる、というやつです。
これをレイアウトするとこんな感じになります。
インバータを1個つくって、そいつをいじってクロックト・インバータをつくって、それを横に並べながらつないでいくと、案外簡単につくれます。
なおCKbはCKの反転なので、インバータでCKからつくっています。
ちなみに電源(VDD/GND)や端子が同じところのMOSトランジスタはコンタクトを共有する、というテクニックを何か所かでつかっています。(たとえば図中の赤丸のところは、左右のトランジスタでVDDやN1を共有しています)
#ref(./DFF.png,20%)
#ref(DFF.gex)
続いて、シミュレーションしてみましょう。回路抽出して*.spファイルをつくって、電源や入力波形を与える電圧源を追加してみます。
#ref(testDFF.sp)
#ref(./DFFsim.png,20%)
で、シミュレーション。
緑がクロックCK、青がD、赤が出力Qです。
CKの立ち上がりで、Dの値がQに反映さえる、というD-FFの動作をしていますね!
* Tフリップフロップ(T-FF)の設計 [#ga868a31]
Lチカのためには、リングオシレータだけだと周波数が高すぎるので分周しなきゃ、そのためにはT-FF!というわけで、T-FFもつくってみましょう。
といっても、もうD-FFはできているので、簡単です。
D-FFのQBをDにつなげば、T-FFになります。
というわけで、さきほどのD-FFのQBとDをML2でつないでみます。
#ref(./TFF.png,20%)
#ref(TFF.gex)
で、シミュレーション。入力はクロックCKだけです。ここでは20ns周期(50MHzですね)の方形波にしています。
#ref(testTFF.sp)
#ref(./TFFsim.png,20%)
たしかにCK(緑)の立ち上がりごとに、出力Q(青)が反転していて、T-FFの動作、つまりCKの半分の周波数の信号が得られています。
これを何段もつなげれば、どんどん周波数を落として、Lチカにできそうですね!