私はこれを数回自分でやった。
通常、デザインツールは、合成の設定に基づいて、ファブリックの実装とDSPスライスのどちらかを選択します。
たとえば、ザイリンクスISEの場合、合成プロセスの設定であるHDLオプションには、「-use_dsp48」というオプションがあり、Auto、AutoMax、Yes、Noのオプションがあります。 DSPスライス。私はかつて整数を3倍する問題があり、DSPスライスを推論していました。ただし、チップ内のすべてのDSPスライスを手動で推論していたため、シンセは失敗しました。すでにすべてのdspスライスを使用していたため、設定を[いいえ]に変更しました。
これはおそらく良い経験則です(私が作成したばかりです)。デザインのクロックが50 MHz未満で、チップのDSPスライスの50%未満を使用する場合は、 *、+、および-演算子。これにより、パイプラインレジスタのないDSPスライスが推測されます。これは本当に最高速度を制限します。(除算を使用するとどうなるかわかりません)
ただし、DSPスライスの最大速度(Spartan 6の通常のスピードグレードでは333 MHz)に近いスライスを実行するように見える場合は、すべてのスライスを使用するので、手動で推論する必要があります。 。
この場合、2つのオプションがあります。
オプション1:raw DSPインスタンシエーションテンプレートを手動で使用します。オプション2:ザイリンクスコアジェネレーターのIPブロックを使用します。(私はこのオプションを使用します。同時に、将来的に役立つコア生成についてすべて学習します)
これらのいずれかを実行する前に、DSPスライスユーザーガイドの最初の数ページをお読みください。Spartan 6(DSP48A1)の場合、ザイリンクスのドキュメントUG389:http ://www.xilinx.com/support/documentation/user_guides/ug389.pdf
最初にCore Generatorオプションを検討してください。私は通常、Core Generatorで作業している部分のテストプロジェクトを作成します。ここでは、システムを学習するためだけに任意の数のIPブロックを作成します。次に、ISEでデザインに追加する準備ができたら、デザイン階層を右クリックし、新しいソースをクリックして、[IP(CORE Generator&Architecture Wizard)]を選択し、ブロックを直接編集および再生成できるようにします。私のプロジェクトから。
Core genで、選択可能なさまざまなIPブロックを確認します。数十個ありますが、そのほとんどはかなりクールです。
Multiplier Coreは、最初に見るべきものです。すべてのページをチェックアウトし、データシートボタンをクリックします。重要な部分は、整数ビット幅、パイプラインステージ(レイテンシ)、およびすべての制御信号です。これにより、不要なすべてのポートが削除され、可能な限り単純なブロックが生成されます。
昨年5 x 3次のIIRフィルターを構築していたとき、2つのDSPスライスがサンプルレートより4倍高速でクロックされる非常にカスタムな実装を構築していたため、手動のインスタンス化テンプレートを使用する必要がありました。それは完全な苦痛でした。