
電子工学において、フリップフロップとラッチは、状態情報を記憶できる2つの安定状態を持つ回路、すなわち双安定マルチバイブレータです。この回路は、1つまたは複数の制御入力に信号を加えることで状態を変化させることができ、その状態(多くの場合、論理補数も含む)を出力します。これは順序論理における基本的な記憶要素です。フリップフロップとラッチは、コンピュータ、通信機器、その他多くの種類のシステムで使用されるデジタル電子システムの基本的な構成要素です。
フリップフロップとラッチは、1ビット(2進数)のデータを格納するデータ記憶素子として使用されます。2つの状態のうち一方は1を表し、もう一方は0を表します。このようなデータ記憶は状態の記憶に使用でき、このような回路は電子工学では順序論理と呼ばれます。有限状態機械で使用される場合、出力と次の状態は、現在の入力だけでなく、現在の状態(したがって、以前の入力)にも依存します。また、パルスのカウントや、可変タイミングの入力信号を何らかの基準タイミング信号に同期させるためにも使用できます。
歴史的に、フリップフロップという用語は、ゲートを使用して 1 ビットのデータを記憶するレベル トリガ (非同期、透過、または不透明) 回路とエッジ トリガ (同期、またはクロック) 回路の両方を総称して指してきました。[ 1 ] [ 2 ]現代の著者は、フリップフロップという用語をエッジ トリガ記憶素子にのみ使用し、ラッチをレベル トリガ記憶素子に使用しています。[ 3 ] [ 4 ]曖昧さを避けるために、エッジ トリガおよびレベル トリガという用語が使用されることがあります。 [ 5 ]
レベルトリガ型ラッチが有効になると透過的になりますが、エッジトリガ型フリップフロップの出力はクロックのエッジ(正方向または負方向)でのみ変化します。
さまざまな種類のフリップフロップやラッチが集積回路として提供されており、通常は1つのチップに複数の素子が搭載されています。例えば、74HC75は7400シリーズの4重透過ラッチです。

最初の電子ラッチは、1918年にイギリスの物理学者ウィリアム・エクルズとFWジョーダンによって発明されました。[ 6 ] [ 7 ]当初はエクルズ・ジョーダン・トリガー回路と呼ばれ、2つのアクティブ素子(真空管)で構成されていました。[ 8 ]この設計は、1943年のイギリスの暗号解読コンピュータ「コロッサス」で使用され[ 9 ] 、集積回路の導入後も、このような回路とそのトランジスタ版はコンピュータで一般的でしたが、現在では論理ゲートで作られたラッチやフリップフロップも一般的です。[ 10 ] [ 11 ]初期のラッチは、トリガー回路やマルチバイブレータなど、さまざまな名称で知られていました。
米国ジェット推進研究所のエンジニアであるPL Lindleyによると、以下に詳述するフリップフロップの種類(SR、D、T、JK)は、1954年にモンゴメリー・フィスターがUCLAで行ったコンピュータ設計のコースで初めて議論され、その後彼の著書『デジタルコンピュータの論理設計』に掲載された。[ 12 ] [ 13 ]リンドリーは当時ヒューズ・エアクラフトでエルドレッド・ネルソンの下で働いており、ネルソンは両方の入力がオンのときに状態が変化するフリップフロップ(論理的なもの)にJKという用語を考案した。他の名前はフィスターが考案したもので、以下に示す定義と若干異なる。リンドリーは、ヒューズ・エアクラフトで働いていたときにこの用語を考案したエルドレッド・ネルソンからJKフリップフロップの話を聞いたと説明している。当時ヒューズで使用されていたフリップフロップはすべて、後にJKとして知られるようになったタイプだった。論理システムを設計する際、ネルソンはフリップフロップの入力に次のように文字を割り当てた。#1: A & B、#2: C & D、#3: E & F、#4: G & H、#5: J & K。ネルソンは1953年に提出した特許出願で、j入力とk入力という表記を使用した。 [ 14 ]

透過型または非同期型のラッチは、相互に結合した一対の反転素子を中心に構築することができる。真空管、バイポーラトランジスタ、電界効果トランジスタ、インバータ、反転論理ゲートはすべて、実際の回路で使用されている。
クロック付きフリップフロップは、同期システム向けに特別に設計されています。このようなデバイスは、専用のクロック信号(クロッキング、パルス、またはストローブと呼ばれる)の遷移時以外は入力信号を無視します。クロッキングによって、フリップフロップは遷移時の入力信号の値に基づいて出力信号を変化させるか、あるいは保持します。フリップフロップによっては、クロックの立ち上がりエッジで出力を変化させるものもあれば、立ち下がりエッジで変化させるものもあります。
基本増幅段は反転型であるため、2つの段を直列に接続(カスケード接続)することで、必要な非反転増幅器を構成できます。この構成では、各増幅器は、もう一方の反転増幅器に対する能動反転フィードバックネットワークとして考えることができます。したがって、回路図は通常、対称的なクロスカップルペアとして描かれますが、2つの段は非反転ループで接続されます(どちらの図も、エクルズ・ジョーダン特許で初めて紹介されました)。
フリップフロップとラッチは、SR(セットリセット)、D(データ)、T(トグル)、JK(上記の歴史のセクションを参照)という一般的なタイプに分類できます。特定のタイプの動作は、入力信号および/または現在の出力に関して次の出力(Q next )を導出する特性方程式によって記述できます。。
静的ゲートを構成要素として使用する場合、最も基本的なラッチは非同期セットリセット(SR)ラッチです。
その2つの入力SとRは、S=1かつR=0の組み合わせで内部状態を1に設定でき、S=0かつR=1の組み合わせで内部状態を0にリセットできる。[注1 ]
SRラッチは、相互接続された一対のNORゲートまたはNANDゲートから構成できます。格納されたビットは、Qとマークされた出力に現れます。
NAND、NOR、AND、ORは、制御された演算として考えると便利です。制御された演算では、一方の入力が制御入力セットとして選択され、もう一方のビットが制御状態に応じて処理される入力として選択されます。これらのゲートはすべて、入力(x)を無視して定数値を出力する制御値と、入力を通過させる(場合によっては反転させる)制御値を持っています。
基本的に、これらはすべて、特定の値を設定するか、入力値を通過させるかのいずれかのスイッチとして使用できます。


SR NOR ラッチは、図に示すように、各 NOR の出力がもう一方の NOR の入力の 1 つに分岐される 2 つの並列 NOR ゲートで構成されています。これらの出力と入力の接続をフィードバック入力、または単にフィードバックと呼びます。残りの入力は、前述のように制御入力として使用します。この時点ではすべてが対称であるため、出力がどの入力に接続されているかは関係ないことに注意してください。残りの制御入力のうちどれをセットとリセットにするかを選択することで、対称性を破ります。セット NORをセット制御を持つ NOR ゲート、リセット NOR をリセット制御を持つ NOR ゲートと呼びます。図では、セット NOR は下側、リセット NOR は上側です。リセット NOR の出力は格納ビット Q になりますが、セット NOR の出力にはその補数Qが格納されることがわかります。
SR NORラッチの動作を導出するには、SとRを制御入力とみなし、上記の式から、制御1でNORをセットおよびリセットすると出力が0に固定され、制御0でNORをセットおよびリセットするとNOTゲートとして動作することを覚えておいてください。これにより、SRラッチの動作を単純な条件として導出することが可能になります(たとえば、各ラインに値を割り当てて、その伝播を確認する代わりに)。
注:Xは「気にしない」という意味で、0または1のどちらかが有効な値です。
R = S = 1 の組み合わせは、両方の NOR ゲートがゼロを出力するため、論理式 Q = not Qが破られることから、制限付き組み合わせまたは禁止状態と呼ばれます。また、この組み合わせは、両方の入力が同時にローになる可能性がある回路(つまり、制限付き状態から保持状態への遷移)では不適切です。出力は準安定状態のままになり、ゲート間の伝搬時間の関係(競合状態)によっては、最終的に 1 または 0 のいずれかに固定される可能性があります。

制限された組み合わせを克服するには、入力にゲートを追加して、(S, R) = (1, 1)制限されていない組み合わせのいずれかに変換すればよい。それは次のようになる。
これは、ほぼすべてのプログラマブルロジックコントローラで行われている。
あるいは、制限された組み合わせによって出力をトグルさせることもできる。その結果得られるのがJKラッチである。
SRラッチの特性方程式は次のとおりです。
ここで、A + B は (A または B) を意味し、AB は (A かつ B) を意味します。
別の表現としては、次のものがあります。

下図に示す回路は、基本的なNANDラッチです。入力は一般的に、セット(Set)とリセット(Reset)をそれぞれSとRで表します。ラッチ動作に影響を与えないように、NAND入力は通常ロジック1でなければならないため、この回路では入力は反転(またはアクティブロー)されているとみなされます。
この回路は、制御入力信号が変化した後でも論理状態を記憶し保持するために、NORゲートをNANDゲートに置き換えたSR NORと同じフィードバックを使用します。ここでも、1制御のNANDは常に0を出力し、0制御のNANDはNOTゲートとして動作することを思い出してください。SとRの入力が両方ともハイの場合、フィードバックによってQ出力は前の状態に維持されます。どちらかがゼロの場合、出力ビットは0に固定され、もう一方は補数に適応します。S = R = 0は無効な状態になります。

教育的な観点から、相互接続されたコンポーネント(トランジスタ、ゲート、真空管など)のペアとして描かれたSRラッチは、初心者には理解しにくい場合が多い。より分かりやすい説明としては、相互接続の代わりに単一のフィードバックループとしてラッチを描く方法がある。以下に示すのは、反転入力を持つANDゲートとORゲートで構成されたSRラッチである。インバータはラッチ機能自体には必要なく、両方の入力をハイアクティブにするために必要となる点に注意されたい。
SR AND-ORラッチの利点は、S = 1、R = 1が明確に定義されていることです。上記のSR AND-ORラッチでは、S信号よりもR信号が優先されます。S信号をR信号よりも優先させる必要がある場合は、出力QをANDゲートの出力ではなくORゲートの出力に接続することで実現できます。
SR AND-ORラッチは、両方のゲートを個別に説明できるため、理解しやすくなっています。ここでも、上記のANDとORの制御ビューを使用します。SもRも設定されていない場合、ORゲートとANDゲートの両方が「ホールドモード」になります。つまり、入力をそのまま通過させ、出力はフィードバックループからの入力になります。入力S = 1の場合、ORゲートはフィードバックループからの他の入力に関係なく1を出力します(「セットモード」)。入力R = 1の場合、ANDゲートはフィードバックループからの他の入力に関係なく0を出力します(「リセットモード」)。ANDゲートはORゲートの出力を入力として受け取るため、RはSよりも優先されます。クロス結合ゲートとして描かれたラッチは、一方のゲートの動作がもう一方のゲートと絡み合っているように見えるため、直感的ではないかもしれません。標準のNORまたはNANDラッチもフィードバックループを使用して描き直すことができますが、その場合、フィードバックループ全体で同じ信号値を示すことはありません。しかし、SR AND-ORラッチには、反転Q出力が必要な場合に別途インバータが必要になるという欠点がある。
SR AND-ORラッチは、論理変換を使用してSR NORラッチに変換できることに注意してください。ORゲートの出力とANDゲートの2番目の入力を反転し、反転したQ出力をこれら2つの追加されたインバータの間に接続します。両方の入力が反転されたANDゲートは、ド・モルガンの法則に従ってNORゲートと等価です。
JKラッチは、JKフリップフロップに比べて使用頻度がはるかに低い。JKラッチの状態遷移表は以下のとおりである。
したがって、JKラッチは、入力組み合わせ11が渡されたときにその出力をトグル(0と1の間で振動)するように作られたSRラッチです。 [ 17 ] JKフリップフロップとは異なり、JKラッチの11入力組み合わせは、トグルを指示するクロックがないため、あまり役に立ちません。
ラッチは透過的に動作するように設計されています。つまり、入力信号の変化は出力に即座に反映されます。透過型ラッチにロジックを追加することで、別の入力(イネーブル入力)がアサートされていない場合に、非透過的または不透明にすることができます。
周期的なイネーブル入力信号は、ライトストローブと呼ばれることがあります。イネーブル入力がクロック信号である場合、ラッチは、後述のフリップフロップのようにエッジセンシティブではなく、レベルセンシティブ(クロック信号のレベルに敏感)であると言われます。
複数の透過ラッチが連続して配置されている場合、それらがすべて同時に透過状態であれば、信号はそれらすべてを通して伝搬します。しかし、透過状態がハイのラッチの後に透過状態がローのラッチが続く場合(またはその逆の場合)、状態と出力はクロックエッジでのみ変化し、マスタースレーブフリップフロップと呼ばれる回路が形成されます。


ゲート付きSRラッチは、反転SRラッチに2段目のNANDゲートを追加することで作成できます。追加されたNANDゲートは入力をさらに反転させるため、SRラッチはゲート付きSRラッチになります(反転イネーブル付きゲート付きSRラッチに変換されます)。
あるいは、ゲート付きSRラッチ(非反転イネーブル付き)は、SRラッチに2段目のANDゲートを追加することで作成できます。
Eがハイ(イネーブルが真)の場合、信号は入力ゲートを通過してカプセル化されたラッチに渡されます。(0, 0) =ホールド以外のすべての信号の組み合わせは、すぐに(Q, Q )出力に再現されます。つまり、ラッチは透過的です。
Eがロー(イネーブルが無効)の場合、ラッチは閉じ(不透明)になり、Eが最後にハイだったときの状態のままになります。
このラッチは、ゲート付きSRラッチの2つのアクティブな入力組み合わせ(01と10)において、RがSの補数であるという事実を利用しています。入力NANDステージは、データ入力信号を反転させることにより、2つのD入力状態(0と1)を次のSRラッチのこれらの2つの入力組み合わせに変換します。イネーブル信号のロー状態は、非アクティブな11の組み合わせを生成します。したがって、ゲート付きDラッチは、1入力同期SRラッチとみなすことができます。この構成により、制限された入力組み合わせの適用が防止されます。これは、透過ラッチ、データラッチ、または単にゲート付きラッチとも呼ばれます。データ入力とイネーブル信号(クロックまたはコントロールと呼ばれることもあります)があります。透過という言葉は、イネーブル入力がオンの場合、信号が入力Dから出力Qまで回路を直接伝搬するという事実に由来します。ゲート付きDラッチは、クロックまたはイネーブル信号のレベルに対してもレベルセンシティブです。
透過ラッチは通常、I/Oポートとして、または非同期システム、あるいは同期2相システム(2相クロックを使用する同期システム)で使用されます。同期2相システムでは、異なるクロック位相で動作する2つのラッチが、マスタースレーブフリップフロップのようにデータの透過性を防ぎます。
以下の真理値表は、イネーブル入力eが0の場合、入力Dは出力に影響を与えないことを示しています。Eがハイの場合、出力はDと等しくなります。

古典的なゲート付きラッチ設計には、いくつかの望ましくない特性があります。[ 18 ]デュアルレールロジックまたはインバータが必要です。入力から出力への伝搬には、最大で3ゲート遅延かかる場合があります。入力から出力への伝搬は一定ではなく、出力によっては2ゲート遅延かかるものもあれば、3ゲート遅延かかるものもあります。
設計者たちは代替案を探した。[ 19 ]成功した代替案の一つがアールラッチである。アールラッチは単一のデータ入力のみを必要とし、出力は一定の2ゲート遅延で得られる。さらに、アールラッチの2つのゲートレベルは、場合によってはラッチを駆動する回路の最後の2つのゲートレベルとマージすることができる。これは、多くの一般的な演算回路の最後の2つのレベルが、OR層の後にAND層が続く構造になっているためである。ラッチ機能をマージすることで、追加のゲート遅延なしでラッチを実装できる。[ 18 ]このマージはパイプラインコンピュータの設計でよく利用されており、実際、元々はジョン・G・アールによってIBM System/360 Model 91で使用するために開発されたものである。[ 20 ]
アールラッチはハザードフリーです。[ 21 ]中央のNANDゲートを省略すると、極性保持ラッチが得られます。これは、ロジックが少なくて済むため、よく使用されます。[ 21 ] [ 22 ]ただし、ロジックハザードの影響を受けやすいです。クロック信号を意図的にスキューさせることで、ハザードを回避できます。[ 22 ]


Dフリップフロップは広く使用されており、データフリップフロップとして知られています。Dフリップフロップは、クロックサイクルの特定の部分(クロックの立ち上がりエッジなど)でD入力の値をキャプチャします。キャプチャされた値がQ出力になります。それ以外のときは、出力Qは変化しません。[ 23 ] [ 24 ] Dフリップフロップは、メモリセル、ゼロ次ホールド、または遅延線として見なすことができます。[ 25 ]
真理値表:
(Xは「気にしない」条件を表し、信号が無関係であることを意味します。)
ICに搭載されているほとんどのD型フリップフロップは、セット状態またはリセット状態に強制的に移行させる機能を備えています(この状態ではD入力とクロック入力は無視されます)。通常、S = R = 1(SRラッチでは不正)という条件はD型フリップフロップで解決されます。S = R = 0に設定すると、フリップフロップは上記のように動作します。その他のSとRの組み合わせに関する真理値表を以下に示します。

これらのフリップフロップは、多くの電子機器に不可欠なシフトレジスタの基礎となるため、非常に有用です。DフリップフロップのD型透過ラッチに対する利点は、D入力ピンの信号がフリップフロップのクロック入力と同時に捕捉され、その後のD入力の変化は次のクロックイベントまで無視される点です。ただし、一部のフリップフロップにはリセット信号入力があり、Qをリセット(ゼロに)することができ、クロックと非同期または同期のいずれかになります。
上記の回路は、クロックのアクティブな遷移ごとにレジスタの内容を1ビットずつ右にシフトします。入力Xは最も左のビット位置にシフトされます。
この回路[ 26 ]は、 SR NANDラッチによって実装された2つのステージで構成されています。入力ステージ(左側の2つのラッチ)は、クロック信号とデータ信号を処理し、出力ステージ(右側の1つのラッチ)への正しい入力信号を保証します。クロックがローの場合、入力ステージの出力信号はデータ入力に関係なく両方ともハイになります。出力ラッチは影響を受けず、以前の状態を保持します。クロック信号がローからハイに変化すると、出力電圧のうち1つだけが(データ信号に応じて)ローになり、出力ラッチをセット/リセットします。D = 0の場合、下側の出力がローになり、D = 1の場合、上側の出力がローになります。クロック信号がハイである限り、これらの入力ステージの出力はデータ入力に関係なく状態を維持し、クロックがハイの間は(出力ステージの)入力論理ゼロがアクティブであるため、出力ラッチは対応する状態に維持されます。クロックがハイの間にデータ入力が変化しても、2つの入力ステージラッチの状態は変わりません。したがって、出力ラッチの役割は、クロックがローレベルの間だけデータを保持することである。
この回路はゲート付きDラッチと密接に関連しています。どちらの回路も、2つのD入力状態(0と1)を、データ入力信号を反転させることで、出力SRラッチ用の2つの入力組み合わせ(01と10)に変換します(どちらの回路も、単一のD信号を2つの相補的なS信号とR信号に分割します)。違いは、ゲート付きDラッチではNAND論理ゲートが使用されるのに対し、正エッジトリガDフリップフロップではSR NANDラッチが使用される点です。これらのラッチの役割は、低電圧(論理ゼロ)を生成するアクティブ出力をロックすることです。したがって、正エッジトリガDフリップフロップは、ラッチされた入力ゲートを備えたゲート付きDラッチと考えることもできます。


マスタースレーブDフリップフロップは、2つのゲート付きDラッチを直列に接続し、一方のイネーブル入力を反転させることによって構成されます。マスターラッチがスレーブラッチの出力値Qを制御し、スレーブラッチが有効になっている間は常にその値を保持するように強制するため、マスタースレーブと呼ばれます。スレーブラッチは常にマスターラッチから新しい値をコピーし、マスターラッチの値とクロック信号の変化に応じてのみ値を変更します。
正エッジトリガのマスタースレーブDフリップフロップでは、クロック信号がロー(論理0)のとき、最初のマスターDラッチ(反転クロック信号)が認識するイネーブルはハイ(論理1)になります。これにより、クロック信号がローからハイに遷移したときに、マスターラッチは入力値を記憶することができます。クロック信号がハイ(0から1)になると、最初のラッチの反転イネーブルはロー(1から0)になり、マスターラッチへの入力で認識される値がロックされます。ほぼ同時に、2番目のスレーブDラッチの2回反転イネーブルがクロック信号とともにローからハイ(0から1)に遷移します。これにより、ロックされたマスターラッチによってクロックの立ち上がりエッジで捕捉された信号がスレーブラッチを通過できるようになります。クロック信号がロー(1から0)に戻ると、スレーブラッチの出力がロックされ、マスターラッチが次のクロックの立ち上がりエッジに備えて新しい値を受け入れ始める間、クロックの最後の立ち上がりエッジで認識された値が保持されます。
回路の一番左のインバータを取り除くと、クロック信号の立ち下がりエッジでD入力を捉えるD型フリップフロップが生成されます。その真理値表は次のようになります。

クロックの立ち上がりエッジと立ち下がりエッジの両方で新しい値を読み取るフリップフロップは、デュアルエッジトリガフリップフロップと呼ばれます。このようなフリップフロップは、2つのシングルエッジトリガD型フリップフロップとマルチプレクサ、または2つのシングルエッジトリガD型フリップフロップと3つのXORゲートを使用して構成できます。



Dフリップフロップの効率的な代替手段は、十分な頻度でクロックが供給される限り、動的回路(情報が容量に蓄積される回路)で実現できます。これは真のフリップフロップではありませんが、その機能的な役割からフリップフロップと呼ばれます。マスタースレーブD素子はクロックのエッジでトリガーされますが、その構成要素はそれぞれクロックレベルによってトリガーされます。エッジトリガーDフリップフロップは、真のフリップフロップではありませんが、マスタースレーブ特性を持ちません。
エッジトリガDフリップフロップは、ダイナミックロジックを用いた集積高速動作においてよく用いられます。これは、デバイスが遷移していない間、デジタル出力が寄生デバイス容量に保持されることを意味します。この設計により、1つまたは複数の内部ノードを放電するだけでリセットが容易になります。一般的なダイナミックフリップフロップの種類として、低消費電力かつ高速でフリップフロップ動作を実行する真の単相クロック(TSPC)タイプがあります。ただし、ダイナミックフリップフロップは通常、静的または低クロック速度では動作しません。十分な時間が経過すると、リーク経路によって寄生容量が放電され、フリップフロップが無効な状態になる可能性があるためです。

T入力がハイの場合、Tフリップフロップはトリガークロックのエッジで状態を変化させます(「トグル」します)。T入力がローの場合、フリップフロップは前の値を保持します。この動作は、次の特性方程式で表されます。
そして真理値表で表すことができる。
Tがハイに保持されると、トグルフリップフロップはクロック周波数を2で割ります。つまり、クロック周波数が4MHzの場合 、フリップフロップから得られる出力周波数は2MHzになります 。この「分周」機能は、さまざまなタイプのデジタルカウンタに応用されています。ATフリップフロップは、JKフリップフロップ(JピンとKピンが接続され、Tとして機能します)またはDフリップフロップ(T入力とQのXOR演算結果がD入力を駆動します)を使用して構築することもできます。


JKフリップフロップは、エッジトリガ型SRフリップフロップ(J:セット、K:リセット)のように動作し、不正なS = R = 1の状態をフリップまたはトグルコマンドに置き換えます。具体的には、J = 1、K = 0の組み合わせは、トリガクロックのエッジでフリップフロップをセットするコマンドです。J = 0、K = 1の組み合わせは、トリガクロックのエッジでフリップフロップをリセットするコマンドです。J = K = 1の組み合わせは、トリガクロックのエッジでフリップフロップをトグルする(つまり、出力を現在の値の論理補数に変更する)コマンドです。J = K = 0に設定すると、現在の状態が維持されます。
JKフリップフロップの特性方程式は次のとおりです。
そして、対応する真理値表は次のとおりです。
JKフリップフロップは、SRフリップフロップ、Dフリップフロップ、Tフリップフロップとして動作するように構成できるため、汎用フリップフロップとみなされます。例えば、Dフリップフロップを合成するには、KをJの補数に設定するだけです(入力Jは入力Dとして機能します)。同様に、Tフリップフロップを合成するには、KをJに設定します。

入力は、クロックの立ち上がりエッジ付近の期間(アパーチャと呼ばれる)で安定して保持されなければなりません。睡蓮の葉の上にいるカエルの写真を撮ることを想像してみてください。[ 28 ]カエルが水に飛び込んだとします。カエルが水に飛び込む瞬間に写真を撮ると、水に飛び込むカエルのぼやけた写真が撮れ、カエルがどの状態だったのかはっきりしません。しかし、カエルが葉の上に安定して座っているとき(または水中に安定して浸かっているとき)に写真を撮ると、鮮明な写真が撮れます。同様に、フリップフロップへの入力は、フリップフロップのアパーチャの間、安定して保持されなければなりません。
セットアップ時間とは、クロックイベントの前にデータ入力が安定して保持されるべき最小時間であり、これによりデータがクロックによって確実にサンプリングされる。
ホールドタイムとは、クロックイベント発生後、データ入力が安定した状態を維持すべき最小時間であり、これによりデータがクロックによって確実にサンプリングされる。
開口時間はセットアップ時間と保持時間の合計です。この期間中はデータ入力を一定に保つ必要があります。[ 28 ]
リカバリ時間とは、クロックイベントが発生する前に非同期セット入力またはリセット入力が非アクティブ状態であるべき最小時間であり、これによりデータがクロックによって確実にサンプリングされる。したがって、非同期セット入力またはリセット入力のリカバリ時間は、データ入力のセットアップ時間とほぼ同じである。
除去時間とは、クロックイベント後に非同期セットまたはリセット入力が非アクティブ状態であるべき最小時間であり、これによりデータがクロックによって確実にサンプリングされる。したがって、非同期セットまたはリセット入力の除去時間は、データ入力の保持時間とほぼ同じである。
非同期入力(セット、リセット)に印加される短いパルスは、リカバリ/除去期間内に完全に印加されてはいけません。そうしないと、フリップフロップが適切な状態に遷移するかどうかが全く不確定になります。別のケースとして、非同期信号がリカバリ/除去時間の間にたまたま1回の遷移を起こす場合、最終的にはフリップフロップは適切な状態に遷移しますが、同期入力信号によっては、出力に非常に短いグリッチが発生する場合と発生しない場合があります。この2番目の状況は、回路設計において重要となる場合とそうでない場合があります。
セット信号とリセット信号(およびその他の信号)は、同期信号または非同期信号のいずれかであり、したがって、セットアップ/ホールド時間またはリカバリ/リムーバル時間のいずれかで特徴付けられます。同期性は、フリップフロップの設計に大きく依存します。
大規模回路のタイミング検証においては、セットアップ/ホールド時間とリカバリ/リムーバル時間を区別することがしばしば必要となる。これは、非同期信号が同期信号よりも重要度が低い場合があるためである。この区別により、回路設計者はこれらの信号タイプごとに検証条件を個別に定義できるようになる。
フリップフロップには、メタステーブル状態と呼ばれる問題があります。これは、データとクロック、またはクロックとリセットなどの2つの入力がほぼ同時に変化する場合に発生します。適切なタイミング制約内で順序が明確でない場合、結果として出力が予測不能な動作をし、いずれかの状態に落ち着くまでに通常より何倍も時間がかかったり、落ち着く前に数回振動したりすることがあります。理論的には、落ち着くまでの時間は制限されません。コンピュータシステムでは、このメタステーブル状態により、別の回路がその値を使用する前に状態が安定しない場合、データの破損やプログラムのクラッシュが発生する可能性があります。特に、2つの異なる論理パスがフリップフロップの出力を使用する場合、安定状態に解決されていないときに、一方のパスがそれを0と解釈し、もう一方のパスが1と解釈して、マシンが矛盾した状態になる可能性があります。[ 29 ]
フリップフロップのメタステーブル状態は、クロックパルスの前後にデータ入力と制御入力を一定期間(それぞれセットアップ時間(t su)とホールド時間(t h)と呼ばれる)有効かつ一定に保つことで回避できます。これらの時間はデバイスのデータシートに記載されており、最新のデバイスでは通常数ナノ秒から数百ピコ秒です。フリップフロップの内部構造によっては、セットアップ時間またはホールド時間のどちらか一方(あるいは両方)をゼロ(または負)にすることは可能ですが、両方を同時に満たすことはできません。
残念ながら、フリップフロップが設計者の制御外でいつでも変化する可能性のあるリアルタイム信号に接続されている場合、セットアップとホールドの基準を常に満たすことができるとは限りません。この場合、設計者ができる最善のことは、回路の要求される信頼性に応じて、エラーの確率を一定のレベルまで低減することです。メタステーブル状態を抑制する手法の1つは、2つ以上のフリップフロップをチェーン接続し、各フリップフロップの出力が次のフリップフロップのデータ入力に供給され、すべてのデバイスが共通のクロックを共有することです。この方法により、メタステーブル状態の発生確率を無視できる値まで低減できますが、ゼロにすることはできません。直列に接続されるフリップフロップの数が増えるにつれて、メタステーブル状態の発生確率はゼロに近づきます。カスケード接続されるフリップフロップの数はランキングと呼ばれ、デュアルランクフリップフロップ(2つのフリップフロップが直列接続)は一般的な状況です。
いわゆるメタステーブル耐性フリップフロップが利用可能で、セットアップ時間とホールド時間を可能な限り短縮することで機能しますが、それでも問題を完全に解消することはできません。これは、メタステーブル状態が単なる回路設計の問題ではないためです。クロックとデータの遷移が時間的に近接している場合、フリップフロップはどちらのイベントが先に発生したかを判断しなければなりません。デバイスをどれだけ高速に製造しても、入力イベントが非常に近接しているため、どちらが先に発生したかを検出できない可能性は常にあります。したがって、完全にメタステーブル耐性のあるフリップフロップを構築することは論理的に不可能です。フリップフロップは、最大セトリング時間(特定の条件下でメタステーブル状態を維持できる最大時間)で特性が示される場合があります。この場合、最大許容メタステーブル時間よりも遅いクロックで動作するデュアルランクフリップフロップは、非同期信号(外部信号など)に対して適切なコンディショニングを提供します。
フリップフロップのもう1つの重要なタイミング値は、クロック出力遅延(データシートではt COという記号でよく使われる)または伝搬遅延(t P)です。これは、クロックエッジの後、フリップフロップが出力を変化させるのにかかる時間です。ハイからローへの遷移時間(t PHL)は、ローからハイへの遷移時間(t PLH)と異なる場合があります。
同じクロックを共有するフリップフロップをカスケード接続する場合(シフトレジスタなど)、クロックのアクティブエッジに続いて後続のフリップフロップの入力にあるデータが適切にシフトされるように、先行するフリップフロップの t COが後続のフリップフロップのホールド時間 (t h ) より長くなるようにすることが重要です。この t COと t hの関係は、フリップフロップが物理的に同一であれば通常保証されます。さらに、正しく動作させるには、クロック周期が t su + t hの合計よりも大きくなければならないことを簡単に確認できます。
フリップフロップは、少なくとも2つの方法で一般化できます。1つは1-of-2ではなく1-of-Nにすること、もう1つは2つ以上の状態を持つ論理に適合させることです。1-of-3エンコーディング、つまり多値3値論理の特殊なケースでは、このような要素はフリップフラップフロップと呼ばれることがあります。[ 30 ]
従来のフリップフロップでは、2 つの相補出力のうち、ちょうど 1 つだけがハイになります。これは、N 個の出力を持つメモリ素子に一般化でき、そのうちちょうど 1 つがハイになります (または、N 個のうちちょうど 1 つがローになります)。したがって、出力は常にワンホット(またはワンコールド) 表現になります。この構成は、従来のクロス結合フリップフロップに似ています。各出力がハイになると、他のすべての出力が抑制されます。[ 31 ]あるいは、出力ごとに 1 つの、多かれ少なかれ従来型のフリップフロップを使用し、一度に 1 つだけが真になるように追加の回路を設けることもできます。[ 32 ]
従来のフリップフロップのもう一つの一般化は、多値論理用のメモリ素子である。この場合、メモリ素子は制御入力によって変化が生じるまで、論理状態のちょうど1つを保持する。[ 33 ]さらに、多値クロックも使用でき、新たなクロック遷移が可能になる。[ 34 ]
{{cite book}}ISBN /日付の不一致(ヘルプ)