2011-12-19 17 views
5

メタスタビリティを避けるために、これらの入力を使用する前に、すべての入力をFPGAに同期させる必要があることを認識しています。また、単一のFPGA内でクロックドメインをまたぐ信号を同期させる必要性も認識しています。この問題は、クロックドメインを越えることに関するものではありません。すべてのハードウェアコアの入力と出力の両方を登録する必要がありますか?

私の質問は、日常FPGAデザイン内のすべての内部のハードウェアモジュールの入力と出力のすべて登録することは良い考えであるかどうかです。その理由は、選択されたクロックレートのタイミング制約を満たすことができるように、クロックレートを向上させるために、長い組合せのロジックを分解したいということです。これは、信号が交差しなければならないモジュールの数に比例したレイテンシのサイクルを追加する。これはいいアイデアか悪いアイデアですか? 1つは入力だけを登録し、出力は登録しないのですか?

回答概要

親指のルール:内部FPGAコアのすべての出力レジスタ。入力を登録する必要はありません。ステートマシンのステートレジスタなどのレジスタから出力がすでに来ている場合は、再度登録する必要はありません。

答えて

5

難しくて速いルールを与えるのは難しいです。 それは本当に多くの要因に依存します。

それは可能性:

  • 増加Fmaxの組み合わせパス
  • を分割することにより、配置配線を簡単にするツールが一部
  • でアウトロジックを広めるために可能にすることによってできるように、簡単にあなたのデザインを分割してください部分的に再構築する。

クリティカルパスタイミングの問題を魔法のようには解決しません。あなたの主要な "ブロック"の中にクリティカルパスがある場合、それはあなたのクリティカルパスのままです。

また、対象部品のデザインがどれくらいいっぱいであるかに応じて、、さらにの問題が発生することがあります。

これらのことは、私はアウトプットを登録する側に傾いていると言いました。

+0

私は、アウトプットの登録だけでも同じアドバイスをした人と話しました。 –

+0

私は一般に、データパス出力がレジスタになるようにモジュールを分割します。これは確かに規則ではありません。 –

2

FPGAデザイン内のすべての内部ハードウェアモジュールのすべての入力と出力を登録することは、過度の過ちです。出力レジスタが入力レジスタにロジックを供給しない場合、必要なレジスタの2倍が消費されます。もちろん、論理パスのバランスを取っている場合を除きます。

FPGAデザイン内のすべての内部ハードウェアモジュールの入力だけを登録し、出力を登録するのではなく、控えめな設計アプローチです。設計がそのパフォーマンスとリソースの利用要件を満たしている場合、これは有効なアプローチです。

デザインが性能/利用要件を満たしていない場合は、FPGA内の特定のロジックパスのレジスタを減らすために余分なタイミング解析を行う必要があります。

+0

入力だけではなく、出力を登録するのはどうですか? –

+0

FPGAピンの入力が登録されている限り、内部モジュール入力ではなく内部モジュール出力の登録は重要ではありません。 –

2

私の質問は、FPGAデザインのすべての内部ハードウェアモジュールの入力と出力をすべて定期的に登録することをお勧めします。

いいえ、それはにはお勧めできません日常このようなレジスタを紹介します。

  1. 入力と出力の両方を行うことは冗長です。出力レジスタと次の入力レジスタの間に論理はありません。
  2. ブロックに1つのANDゲートが含まれていると、過剰です。タイミングと設計の複雑さによって異なります。
  3. 登録段階については、適切に検討し、設計する必要があります。出力FIFOが満杯になったり、他のストール状態が発生した場合はどうなりますか?すべての信号に正しいレジスタ遅延があるため、正しいサイクルで正しいステージに表示されますか?レジスタを追加することは、必ずしもそう簡単ではありません。

根拠は、我々が選択したクロック・レートのためのタイミング制約を満たすことができるようにクロックレートを向上させるために、組み合わせ論理の長い鎖を壊すたいということです。これは、信号が交差しなければならないモジュールの数に比例したレイテンシのサイクルを追加する。これはいいアイデアか悪いアイデアですか?

この場合、レジスタを導入する必要があるように聞こえますが、以前の点を「しない」と読んでください。盲目的にしないでください。レジスタの周りの制御ロジックと、ロジックの(今の)マルチサイクルの性質について考えてみましょう。あなたは今、 "パイプライン"を構築しています。出力が書き込めないときにパイプラインを適切に停止することは、バグの巨大な原因です。

道路上を移動する車を考えてください。 1台の車がブレーキをかけて停止している場合は、後ろのすべての車も同様にする必要があります。最初の車のブレーキ灯が作動しない場合、次の車はブレーキング信号を受信せず、クラッシュします。同様に、パイプラインの各ステージは、前のステージにそれが一瞬停止していることを伝える必要があります。

入力から出力までの計算パスに沿って長いタイミングパスを使用するのではなく、これらのレジスタステージをすべて出力から入力に制御するための長いタイミングパスが必要になります。

0

あなたが持っているもう1つのオプションは、ツールがあなたのために働くようにすることです。あなたの完全なシステムの終わりにレジスタの束を追加して(あなたがもっとパイプラインをしたいなら)、あなたの合成ツールのタイミングを変更してください。これにより、レジスタが最も便利なロジック間で(うまくいけば)レジスタが移動します。

関連する問題