FPGAでのプロセスタイミング


10

私はfpgasを使い始めたばかりですが、理解できないタイミングの微妙な点があります。すべての同期プロセスが同じエッジでトリガーされる場合、入力は1つの立ち上がりエッジで「キャプチャ」され、出力は同じエッジで変化しますか?次の立ち上がりエッジ?

2つのモジュールがあり、1つの出力が次の入力に流れ込む場合、私のモジュールへの入力(前のモジュールの出力)がキャプチャされると同時に変化する状況が発生する可能性があります。

ISimスクリーンショット

205nsのマーカーは、私が話していることを示しています。opとdata_writeが私の入力です。このテストケースではすべてが「正常に機能」しているように見えますが、シミュレーションでは、いつ何がキャプチャされているのかが明確ではありません。data_write = "0001 ..."は205nsまたは(205ns + 1クロックサイクル)でキャプチャされていますか?ISimでセットアップおよびホールドタイムを示すより詳細な波形を取得する方法はありますか?

ありがとう。

回答:


12

常にフリップフロップによる伝搬遅延があります。これは、「clock-to-Q」遅延と呼ばれることがよくあります。

つまり、入力はエッジでキャプチャされ、出力は同じエッジで変化しますが、数ナノ秒後です。この数ナノ秒の遅延で十分です(フリップフロップがほとんどのFPGAのように「ゼロホールドタイム」で設計されている場合)、次のクロックエッジまで変更がダウンストリームフリップフロップに影響を与えません。

機能シミュレーションまたはRTLシミュレーション(結果を生成するために行っていることと思われます)では、遅延は持続ナノ秒としてシミュレートされません。VHDLでは、それはシミュレーター・クロックの単一のデルタ・サイクルであり、技術的にはまったく時間はありません。これにより、シミュレータ出力の遅延を確認できなくなります。それでも、理想的なシミュレーションのフリップフロップの場合、出力の変更がダウンストリームのフリップフロップに影響を及ぼさないことで十分です。

配置配線後のシミュレーションを行う場合は、適切な遅延を含めることができるため、シミュレーションの労力が増加しますが、これらの効果を明確に確認できます。


1
VHDL RTLシミュレーションでは、遅延は1つのデルタサイクルです。これには時間がまったくかかりませんが、次のデルタサイクルが開始する前に現在のデルタサイクルのすべての更新が完了するため、シミュレーションを規則正しく進めることができます。予定されているデルタサイクルがなくなると時間が進みます。
Martin Thompson

1

目的のクロックエッジ(立ち上がりまたは立ち下がり)で、Dの入力が出力Qに現れます。これには有限の時間がかかり(クロックからQの遅延)、タイミング違反がないと仮定すると、Dは一度に1つのFFのみを通過します。 (つまり、Qに接続された別のFF入力がある場合、2番目のFFは、変更前にFF1 Q値を渡します。

シミュレーションにタイミングを含めるには、デザインを合成して配置配線し、ポスト配置配線シミュレーションを実行する必要があります。これには、すべての組み合わせ、クロックからQまでの遅延などが含まれます。HDLシミュレーションにはこれらのタイミングがないため、タイミング制限ではなく、基本的な動作のテストにのみ役立ちます。また、特定のクロックドメインの速度制限を通知するタイミングレポートを取得し、タイミング違反があるかどうかを通知し、さまざまなパスのタイミングスラックを表示します。この情報を使用して、変更を行う必要がある場所、またはソフトウェアに違反が問題ではないことを通知するために追加されたルール(たとえば、マルチサイクルパスやクロスクロックパスなど)を把握できます。


1

これは、あなたがアイデアを得たと私が信じる理由から、以前の答えへの追加を意味します。

理想的な/機能的/ RTLシミュレーション(=伝播遅延なし)で何が原因で何が結果なのかを確認するのが難しいので、シミュレーションRTLデザインの最初はこれらの問題は少し難しいかもしれません。

適切なシミュレータを使用すると、デルタ遅延実際に視覚化できます。ISimではそれができませんが、ei ModelSimでは、クロックエッジの周りのデルタ拡張を有効にできます。以下は、トラブルシューティングしたバグのあるサードパーティIPのスクリーンショットの例です。

ModelSimでのデルタ遅延拡張

cはクロック信号、+1その他はデルタサイクルであり、時間として視覚化されます。

シミュレーションとデザインの両方が真に理想的で同期であるデザインがシミュレーションされ、遅延がシミュレートされていない場合、原則として、特定のクロックフランクのすべての信号変化を、そのクロックフランクの少し後に発生したものとして表示できます。したがって、この例では、205 nsでdata_write= 0000...がキャプチャされます。最初のユニットの他のいくつかのロジックは、信号data_write0001...同じフランクに変更し、その信号data_writeはクロックフランクの少し後に現れます。この「少し後」は、理想的なシミュレーション(例)の1つまたは複数のシミュレーションデルタ(ISimでは表示されませんが、デルタ拡張を使用したModelSimなど)、または実際のps / nsです。

補足:RTL設計で重要なことの1つは、入力が常にクロック側面でサンプリングされることを確認することです。1デルタサイクル後でも遅すぎます。入力は1デルタ後に有効でなくなる可能性があります。または言い換えると、「クロックパスを変更しないでください」。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.