ラッチを使用するのは、両方をサポートするFPGAでフリップフロップよりも優れていますか?


20

質問:

ラッチを使用するのは、両方をサポートするFPGAでフリップフロップよりも優れていますか?

バックグラウンド:

FPGAではレベルセンシティブなトランスペアレントラッチを避け、エッジセンシティブなフリップフロップのみを使用することがよく知られています。ほとんどのFPGAアーキテクチャは、ラッチとフリップフロップの両方をネイティブにサポートしています。

FPGAベンダーからの一般的なアドバイスは、ラッチに注意すること、またはラッチを使用しないことなどです。このアドバイスには非常に正当な理由があり、その詳細はすべてよく知られています。ただし、ほとんどのアドバイスでは、「ラッチが必要なことがわかっている場合を除き、ラッチを使用しないでください」と表現されています。

私は経験豊富なFPGA設計者であり、ラッチが必要だと知っていると思うたびに、フリップフロップでそれを行うより良い方法があることにすぐに気付きました。ラッチを使用することが明確に優れている場合の例を聞くことに興味があります。

重要な注意点:

ラッチ対フリップフロップはしばしば人々を怒らせます。私は質問に対する答えにのみ興味があります。ラッチとフリップフロップの違いを説明する応答、ラッチを使用しない理由の説明、フリップフロップがラッチより優れている理由の詳細、FPGA以外のターゲットでラッチが優れている方法などについての説明は、まったく話題になりません。


FPGAを使用して、ラッチを使用する既存の回路を正確に模倣する場合
マジェンコ

回答:


11

あなたの質問は基本的に、「いつラッチが必要かを知っていますか?」です。あなたが暗示しているように、これは主観的な質問です。回答として事実よりも多くの意見を期待します。そうは言っても、私の意見は次のとおりです。

私は、あなたのように、フリップフロップを使用するより良い方法を見つけて、ラッチを回避します。結果のロジックは、多くの場合、よりエレガントで堅牢です。しかし、ラッチを回避するためにロジックを十分に制御できない場合があります。たとえば、目的の仕様を満たすためにラッチを必要とするプロセッサバスに接続している場合があります。CPUやバスを再設計することはできないため、ラッチに固執しています。

過去13年以上で、ラッチが必要なのはそれだけです。


2
答えてくれてありがとう。「必須の後方互換性」の下であなたの回答を精神的に提出していますが、これは完全に妥当と思われます。=)
wjl

8

フリップフロップは、競合条件/制約が4つしかないため、ラッチよりも望ましい場合がよくあります。

  1. データ入力の変更から次のアクティブなクロックエッジまでのセットアップ時間
  2. クロックエッジからデータ入力の次の変更までのホールドタイム。
  3. アクティブなクロックパルスの最小持続時間。
  4. 非アクティブなクロックパルスの最小持続時間。

これらの制約が満たされている場合、フリップフロップの出力は完全に「クリーン」であり、不自然さはありません。さらに、フリップフロップのタイミングはある意味「デジタル」です。タイミング制約が満たされている場合、出力は、入力タイミングに関係なく、アクティブクロックエッジ後の予測可能なウィンドウ内でのみ変化します。したがって、カスケードフリップフロップの効果は、深さに関係なく予測できます。対照的に、ラッチ出力のタイミングははるかに「アナログ」です。ラッチに入る信号の遅延は、出力される信号の遅延を引き起こす可能性があります。ラッチ自体の制約が満たされていても、この遅延によりダウンストリームで問題が発生する場合があります。

チップの出力に必要な動作が1つで最も合理的にモデル化される場合は、ラッチを使用することをお勧めします。たとえば、ハードウェアはシリアル/パラレルコンバーターとして動作し、フレーム同期後の最初のクロックの立ち上がりエッジと立ち下がりエッジの間で、最初の出力が入力を追跡します。2番目のクロックの立ち上がりエッジと立ち下がりエッジの間、2番目の出力は入力などを追跡します。フリップフロップと純粋な組み合わせロジックを使用して、タイミング制約が満たされた場合にそのような動作をもたらす回路を設計できますが、そのような回路はラッチを使用するものよりも複雑で、タイミングの制約が満たされない場合は奇妙に動作する傾向があります。


3
「ラッチとフリップフロップの違いを説明する応答、ラッチを使用しない理由を説明する、フリップフロップがラッチより優れている理由の詳細、非FPGAターゲットでラッチが優れている方法などの詳細は、まったくトピック外です。 」
マジェンコ

@supercatさて、少なくともあなたの答えの2番目の部分には、質問に関連する答えがあります。=)ありがとうございます。
WJL

1
@Majenko:おそらく「好ましい」よりも「使いやすい」と言ったほうがいいでしょう。私のポイントは、可能な限りラッチを避けるべきだと主張することではなく、ラッチを使用する人が複雑さを認識する必要があることを提案することでした。
supercat

@supercat、短い波線で例を明確にしてください。
フィリップ

1

私の仕事では、FPGAにラッチを実装しなければならないことがありましたが、それは常に「最後の手段」でした。バスと制御信号の適切なサンプリングと同期を保証するのに十分な速度のクロックを保証できなかった場合、典型的なアプリケーションには非同期インターフェイスまたはバスとの接続が含まれていました。

主な問題は、ラッチが非同期ブロックであることです。したがって、ラッチの入力信号を生成する組み合わせ関数が競合しないことを確認する必要があります。そうしないと、グリッチが発生、ラッチされる可能があり、システムに危険をもたらします

競合を回避するには、これらの組み合わせ機能を特別な冗長な方法で実装する必要があります。残念ながら(この特定のケースでは;-)、それ以外の場合は非常に優れたプロパティです)、FPGA合成ツールは設計を最適化し、すべての冗長性を削除します。したがって、FPGAにラッチを実装する場合、「手動」で実装し、最適化から保護する必要があります(VHDLでは、ラッチで内部的に使用される信号の属性「keep」を「true」に設定する必要がある場合があります) 。


-1 OP 、ラッチ使用すべき時期について具体的に質問し、ラッチ使用すべきではないという理由をこれ以上述べないよう読者に具体的に尋ねました。
ジョー・ハス14年

-1

タイミングに関して:

デザインでフリップフロップを使用している場合、パフォーマンスは最長の組み合わせパス遅延に依存します。

フリップフロップの代わりにラッチを使用すると、次のステージで短いパス遅延から時間を借りることで、最長のコンボパス遅延を補正できます。これにより、遅延を削減し、設計のパフォーマンスを向上させることができます。


3
-1。マルチサイクル制約を使用して適切に分析し、「非同期」部分を2サイクルにわたって実行することをお勧めします。例えばaltera.co.uk/literature/hb/qts/qts_qii53018.pdfの
shuckc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.