ロジックシミュレータでフリップフロップを作成できないのはなぜですか?
私はいくつかのロジックシミュレーターで遊んでいますが、フリップフロップが機能しない理由がわかりません。NANDゲートを備えたTフリップフロップを実装しようとしています。
私が試したすべてのシミュレーターは同じ結果をもたらします。QまたはQ 'は、内部更新のタイミングに応じて、立ち上がりエッジでトグルするのではなく、クロックの状態を取得します。回路の対称性を考えると、私はそれほど驚くことではありませんが、実際にどのように機能するのか疑問に思います。
これも可能ですか、それとも基本的な部品ではできないため、これらのイミュレータはフリップフロップコンポーネントを提供しますか?もしそうなら、なぜそして何が欠けていますか?
シミュレーター:
- https://logic.ly/demo
- https://circuitverse.org/simulator
- https://academo.org/demos/logic-gate-simulator/
- https://simulator.io/board
提供されているTフリップフロップ(circuitverse.org)と比較したNANDゲート回路:
Simulator.ioでも同じです(NANDがないためAND + NOTを使用):
回答
このページから、表示するスタイルは、クロックパルスの幅が、出力ステージが反応するのに十分な長さでありながら、物が発振しないように十分に短いように調整されている場合にのみ機能するためです。伝播時間をモデル化しないロジックシミュレータは、対応できない場合があります。
回路をシミュレートするには、伝搬遅延を「理解する」回路シミュレータが必要です。または、トランジスタレベルで回路をシミュレートする必要があります。
その同じページは、完全同期J-Kフリップフロップのこの回路を示しています(T ffのためにJとKを一緒に接続するだけです):
シミュレーターでそれを試してみて、何が起こるか見てみましょう。
表示する回路は、フリップフロップではなく、ゲート付きJKラッチです。これには欠点があります。Tがハイでクロックがハイの場合、交差結合されたNANDゲートがリングオシレータを形成します。これは「レースアラウンド」問題と呼ばれることもあります。クロックがローに戻るまで、出力が安定することはありません。
この回路は、クロックフロップを作成しない方法を示しています。そうでなければそれは役に立たない。実際のトグルフロップは、反対のレベルでクロックされる2段階のラッチのペアを使用します。これは、「エッジトリガー」または「マスタースレーブ」フリップフロップと呼ばれることもあります。
詳細はこちら:JKフリップフロップで初めてQとQ 'がどのように決定されますか?
そしてここに:JKラッチ、ベンイーターエラーの可能性?
ゲート遅延タイミングに依存しないエッジトリガーTフリップフロップを実装するには、最低6つのNandゲートが必要だと思います。以下の回路は、CircuitLabでうまくシミュレートしています。
この回路をシミュレートする–CircuitLabを使用して作成された回路図
編集:
この回路はクロックのみに依存し、個別のT入力とクロック入力がないため、この回路はTフリップフロップではないと誰かがコメントしています。
しかし、私が「Tフリップフロップ」をグーグルで検索すると、最初に出てくるヒットは次のようになります。
Tまたは「トグル」フリップフロップは、各クロックエッジで出力を変更し、T入力への信号の周波数の半分の出力を提供します。
これは、バイナリカウンタ、分周器、および一般的なバイナリ加算デバイスの構築に役立ちます。両方の入力をハイに接続することにより、JKフリップフロップから作成できます。
グラフィックが含まれています:
私は、これが必ずしもTフリップフロップが別々のT入力とクロック入力を持たなければならないという主張の権威ある反論であるとは主張しません。(インターウェブ上のフリップフロップについては確かに多くの誤った情報があります。たとえば、OP回路は、他の回答で説明されている問題があるにもかかわらず、Tフリップフロップとしてラベル付けされた場所全体に表示されます。)ただし、私はコメント提供者のそれとは別の観点として上記の情報を提供しています。
Edit2:コメント投稿者が回路の状態図を要求しました。この情報を提供しますが、図としては提供しません。
4つの安定状態と12の状態があり、通常の動作では安定状態間で遷移します。
安定状態は次のとおりです。
状態:Vin N1 N2 N3 N4 N5 N6
S1:0 1 1 0 1 1 0
S2:1 0 1 0 1 0 1
S3:0 1 1 1 0 0 1
S4:1 1 0 1 1 1 0
遷移は次のようになります
S1で\$\uparrow\$N1 \$\downarrow\$N6 \$\uparrow\$N5 \$\downarrow\$ S2
S2で\$\downarrow\$N1 \$\uparrow\$N4 \$\downarrow\$N3 \$\uparrow\$ S3
S3で\$\uparrow\$N2 \$\downarrow\$N5 \$\uparrow\$N6 \$\downarrow\$N4 \$\uparrow\$ S4
S4で\$\downarrow\$N2 \$\uparrow\$N3 \$\downarrow\$ S1
あなたが遭遇するかもしれない(しかしそうすべきである)もう一つの問題はこれです:QとQ 'はJKフリップフロップで最初にどのように決定されますか?。
これは、Tフリップフロップに特に当てはまります。
Tとクロックの2つの入力しかないTフリップフロップの場合、「X」をサポートするシミュレーションで出力が既知の状態になる方法はありません。
良いシミュレータは、値が不明であることを示し、両方の出力に「X」を示すであろう。
私の回答で述べたように、同期または非同期入力を使用して、出力を既知の状態に設定できます。
参考までに、マスタースレーブJKフリップフロップを使用して非同期入力でTフリップフロップを作成しました。これは、ブラウザーでシミュレートできます。