FPGA:カウントアップまたはカウントダウン?


11

FPGA(Phillio開発ボード、ザイリンクスspartan3e、vhdlを使用)の使用方法を学んでいます。

着信パルスを(ハードコードされた)数値で除算する必要があります。

私は3つのオプションを見ることができます-大まかに、疑似コードとして(例として10カウントを使用):

  1. 入力立ち上がりエッジが1増加すると0に初期化され、10と比較されます。それらが等しい場合、0にリセットし、出力パルスをトリガーします
  2. 入力の立ち上がりエッジが1減少すると10に初期化され、0と比較されます。それらが等しい場合、10にリセットし、出力パルスをトリガーします
  3. 9に初期化しますが、出力ビットである先頭の「0」ビットが少なくとも1つあることを確認してください。入力の立ち上がりエッジで1減少します。出力ビットの立ち上がりエッジでリセットされます。

デューティサイクルは重要ではありません。

これらの1つは他のものより優れていますか?私が考えていないもっと良い方法はありますか?

コンパイラーに最適化の最良の機会を与える「標準的な」方法はありますか?


3
それはたった3つのオプションです:-) ...しかし、真剣に、それはFPGAではそれほど重要ではありません。個々のロジック要素は、ほぼ同じ数のリソースを使用し、どの方法を使用しても同じパフォーマンスを提供するのに十分一般的です。決定は、数値をカウントアップまたはカウントダウンすること、または他のパターンを使用することがデザインの他の場所で役立つかどうかにかかっています。
Dave Tweed 2017

2
4番目のオプション:「1000000000」がロードされ、立ち上がりエッジでシフトされる10ビットの循環シフトレジスタ。シフトレジスタの1ビットを、実行していることのイネーブルとして使用します。
リンカーン

1
付記-コンパイラ/フィッターGUIツールは、ジョブの終了後、ゲートまでのさまざまな抽象化レベルで作成された実際の回路を表示するオプションを備えている必要があります。これにより、ツールが回路にどのように適合したかを確認できます。その後、ソースに適切な変更を加えることができます。
匿名

回答:


12

このレベルに最適化すると、心が壊れます。結果は、使用しているFPGAのテクノロジ、FPGAの他の要因、さらにはフィッターの乱数シードなどの制御外の要因によって変わる可能性があります。

そうは言っても、オプション3が最適だと思います。オプション1と2には、カウンター間を移動するコンパレーター/ ORゲートがあり、ターゲット数に達したことを通知できます。オプション2は、すべてインバーターなしでストレートOR結合できるため、1よりわずかに高速ですが、ANDまたはXORの方が高速である可能性がある小さなテクノロジーの違いに遭遇します。

オプション3は、カウンター内の1つの余分なビットの低コストの比較をスキップします。あなたがフリップフロップで厳しく制限されていない限り、これはそれだけの価値があるはずです。

カウンターについての1つの楽しい事実は、カウンターがロジックブロック内のデバイス固有のサイズにグループ化される傾向があることであり、この余分なビットがそのグループから押し出されると、予想以上にタイミングの変化が見られます。


+1、テクノロジーの制限を押し進めるクロック速度を除いて、タイミングレポートにタイミングの最適化をガイドさせる必要があります。Spartan 3e、またはFPGAで何の原因もなくピコ秒単位を追跡することは、一般に時間の無駄です。
jalalipop

4

もう一つの選択肢は、6(= 2のカウンタ初期化するだろう4、カウントアップして、リセットしたときのキャリー出力活性化(すなわち、FFのは、すべてのものです) - 10)。

これの利点は、追加のFFを必要としないことであり、多くのFGPAは、カウンターまたは加算回路でこの種のキャリー演算を高速化するための専用の補助ロジックを備えています。


3

依存します。例:0→1と1→0のフリップフロップ伝搬遅延は異なる場合があるため、000→001と001→000のカウンターの遷移遅延はわずかに異なる場合があります。FPGAで使用されているcmosテクノロジーに応じて、これはより高い場合とより低い場合があります。したがって、タイミング性能が優れているものを合成して見つける必要があります。


3

コンパイラー作成者の観点から:を使用するinteger場合、内部表現は未定義であり、コンパイラーは最も効率的な実装を自由に選択できます。

特定の内部表現を強制した場合でも、オプティマイザはそれを改善しようとしますが、わずかに悪い視点から開始します。

N1

内部構造を知らない限り、他のロジックに割り当てられたリソース(多くのFPGAには専用の浮動小数点乗加算ロジックがあり、残りのユニットがある場合はカウンターの実装にも使用できます)は、スイッチングしないことを完全に確信しています別のモデルでは、答えは「それについて考えないでください」です。

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