Dave Tweedが指摘しているように、FPGAにクロックの両方のエッジで動作できるフリップフロップハードウェアが含まれていない限り、従来のシングルエッジフリップフロップを使用して目的の動作を実装するために独自のロジックを記述する必要があります。ダブルエッジフリップフロップのように動作する回路を実装する方法はいくつかありますが、そのような回路は一般に、フリップフロップに関連するものとは異なるタイミング制約を追加します。
たとえば、単純なアプローチは、2つの2入力xorと1組の「T」フリップフロップ(クロックパルスが到着したときの入力の状態が、そのクロックエッジが出力を切り替えるかどうかを示す)を組み合わせたモジュールを持つことです。立ち上がりエッジによってトリガーされるものと、立ち下がりエッジによってトリガーされるもの。モジュールの出力は、フリップフロップの出力のxorになり、両方のフリップフロップへの入力は、モジュールの出力とその入力のxorになります。
この方法で設計された回路は、本質的にはダブルエッジフリップフロップのように動作しますが、セットアップおよび伝搬時間が長くなりますが、追加のタイミング制約があります。フィードバックパス上にない通常のフリップフロップは、クロックエッジの開始にラントパルスの束があっても問題ありません。ただし、クロックが有効なレベルで安定し、セットアップ時間の制約が最初のラントパルスと、クロックパルスが安定してアクティブになった時間から測定されたホールドタイムとクロックアクティブ時間の制約が満たされます。フリップフロップ出力の動作は、クロックが不安定な間は不定ですが、クロックが安定した後に定義されます。double-xor-double-flopモジュールは、出力を変更するクロックエッジは、そうする可能性のある他のクロックエッジから安全な距離でなければならないという追加のタイミング制約を追加します。たとえば、入力が出力と一致しないときに3つのクロックエッジが非常に連続して存在することにより、その制約を満たさない場合、出力が不確定または準安定状態になる可能性があります(偶数のエッジを含むシナリオは問題ではないことに注意してください) 、そのようなシナリオにはラントパルスのみが含まれるため、ラントパルスの後に有効なパルスがあるため、3つのエッジのケース(または1より大きい他の奇数のケース)が問題になります。
別の回路設計では、上記のように2つのフリップフロップを使用しますが、それらの出力をマルチプレクサに供給します。この回路はラントパルスによって不良状態に陥ることはなく、クロッキングの制約は基礎となるラッチと同じになりますが、出力が高かったままである(または低かったため低のままである必要がある)という欠点があります。 )そのため、クロックエッジで短時間グリッチする可能性があります。重要ではない回路もあれば、重要な回路もあります。
論理合成ツールが、どのタイミング制約が重要であると指定されているかを分析することにより、ダブルエッジフリップフロップを自動的に実装することはおそらく可能ですが、そうすることはやや難しいでしょう。また、設計に小さな変更を加えると実装に大きな変化が生じ、予期せぬ動作の変化が生じるリスクが高まります。