VHDL:デザインに乗数をインプリメントするときに「*」演算子を使用


10

現在のFPGAにはDSPブロックが組み込まれており、最新のFPGAにはIEEE-754準拠の浮動小数点ユニットも組み込まれています。

必要なパラメーターを選択した後、GUIを使用してDSPエンティティ/モジュールを作成し、デザインでインスタンス化することが可能です。

実際のDSPブロックをインスタンス化する設計でこのようなマイクロマネージメントを行う必要があるのはいつですか。また、コードに「*」演算子を入力して、合成ツールに低レベルの詳細を処理させるのはいつですか どちらが良いですか?

バイナリ乗算に関しては、多くの異なるタイプの乗算アルゴリズムがあります。現在、シリコンにDSPブロックが組み込まれており、さらに浮動小数点乗算器も組み込まれていますが、これは、これらのアルゴリズムすべてが事実上廃止されていないことを意味しますか?


ファブリックに754準拠のFPUが搭載されているFPGAを教えてください。
Martin Thompson

回答:


6

私はこれを数回自分でやった。

通常、デザインツールは、合成の設定に基づいて、ファブリックの実装と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倍高速でクロックされる非常にカスタムな実装を構築していたため、手動のインスタンス化テンプレートを使用する必要がありました。それは完全な苦痛でした。


13

2つの数値を乗算するだけで、それらがDSPブロックに適合している場合、*オペレーターはDSPブロックを推測する必要があります。そうでない場合は、合成ツールを送り返します:)

ただし、DSP機能のより複雑な組み合わせを利用するには、多くの場合、ブロックの直接インスタンス化とそのパラメーターの構成が必要です。推論ではうまくマッピングできない場合の例(ザイリンクスDSP48E1を例として使用):

  • 前置加算器の使用
  • ポストアキュムレータの使用
  • パターン検出器の使用
  • ロジックユニットの使用

そして特に上記の組み合わせ。

合成ツールは、ロジックと算術の完全に任意の組み合わせを、期待するほど効率的にマッピングするにはまだ十分ではありません。


4

DSPブロックが存在する場合は、LUTを使用して同じことを行うよりも効率的であるため、可能であればそれらを使用する必要があります。高性能の乗算が必要でない場合を除き、その場合は、たとえば、パイプライン化された加算器とシフトレジスタを実装してスペースを節約する必要があります。

ただし、GUIツールに進む前に、DSPブロックの推論を検討します。ザイリンクスXSTマニュアルには、純粋なverilog / VHDLでDSPブロックをインスタンス化する方法に関するHDLの「レシピ」があります。基本的に、乗算器の前後に十分なレジスタを追加すると、XSTはDSPブロックを使用して演算を自動的に実装します。合成ログをチェックして、DSPブロックを正しく推論しているかどうかを確認できます。アルテラも似たようなものを持っていると思います。

ちなみに、私は数分前にこれを検討していました。現在、初期シードに乗数のみを使用するメルセンヌツイスターの実装に取り​​組んでいるためです。私の最初のパスの実装はタイミングを満たしていませんが、機能は正しいです。XSTは乗算演算もDSPブロックに入れますが、最適化されていないため、希望する速度の約半分の速度で実行されます。クロックサイクル数の32倍のシフトアンドアド手法を使用して乗算を再実装する可能性がありますが、ハードウェア乗算器は不要になります。


ハードウェア乗数を使用すると、なぜタイミングが失敗するのですか?
quantum231

32ビットx 32ビットの非パイプライン乗算は、明らかに8 ns以上かかります。
alex.forencich 2014

うーん、私はそれを考慮しませんでした。したがって、DSPブロックはパイプライン処理されません。彼らは乗算をどのように正確に実装しているのでしょうか。それは実際にはハードパラレル乗数ですか?
quantum231

いくつかの異なる方法で機能するように構成できると思います。XSTのマニュアルによると、入力と出力に十分なレジスタを追加すると、XSTはDSP48スライスでパイプライン乗算器を使用できるようになります。私の場合、出力レジスタは1つしかなく、入力レジスタがなかったため、これを利用できませんでした。これは初期化(PRNGのシード)のためだけだったので、リソースの使用率を節約するために、並列乗算をビット直列乗算器に置き換えました。
alex.forencich 2014

2

それは、どれだけの最適化が必要で、どれだけの移植性がデザインにあるべきかによって異なります。これは少しソフトウェアに似ており、少しのアセンブリを使用して最適化するか、コンパイラに命令を選択させます。また、サイズと速度のトレードオフがあり、組み合わせの倍精度乗算器を使用できない場合もあります。

FPGAのどこにハードワイヤードFP乗算器があるかは知りませんでした。

CPUに適した実際のIEEE P754準拠の乗算演算子には、大きな乗数以上のものが含まれます。指数の追加、非正規化のシフト、無限大の管理、およびいくつかのほとんど役に立たないフラグ(不正確、アンダーフロー...)が必要です。


アルテラ10シリーズなどの最新世代のFPGAは、ハードウェア自体にIEEE-754準拠の浮動小数点乗算器を備えています。私はそれらを自分で使用する機会がありませんでした。
Quantum231 2014

DSPブロックが組み込まれている場合、FPGAは組み合わせ乗算器の代わりにそれらを使用するか、メモリブロックを使用する他のアルゴリズムを使用する必要がありますか?
Quantum231 2014

2

私はこのドキュメントを読んだ http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf

単一のDSPブロックに収まる関数はパイプライン化されたRTLコードから効率的に合成できますが、複数のDSPブロックを必要とするより複雑な関数はパフォーマンスが低下することがわかりました。数学関数の標準RTL記述は、たとえば各演算の後などに大量にパイプライン化できますが、このパイプライン処理ではDSPブロックの構造と内部ステージが考慮されない場合があるため、結果として得られる合成デザインは標準以下のパフォーマンスを示す可能性があります。 DSPブロックは、フルスピードで実行できないように組み合わされています。

彼らの調査結果を確認するためのツールのソースを見つけられればいいのにと思います。

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