DSP および演算ブロックを最適に推論するためのコード記述 - 2023.2 日本語

FPGA および SoC 用 UltraFast 設計手法ガイド (UG949)

Document ID
UG949
Release Date
2023-11-29
Version
2023.2 日本語

AMD デバイスの DSP ブロックでは、次のようなさまざまなファンクションを実行できます。

  • 乗算
  • 加算および除算
  • コンパレータ
  • カウンター
  • 汎用ロジック

DSP ブロックは複数のレジスタ段を使用してパイプライン処理されており、全体的なリソースの消費電力を削減しながら高速動作が可能です。AMDでは、コードを完全にパイプライン処理して DSP48 にマップされるようにし、すべてのパイプラン段が使用されるようにすることをお勧めします。この追加リソースが柔軟に使用されるようにするには、セット条件をファンクション内に含めないようにして、DSP48 に正しくマップされるようにします。

AMD デバイス内の DSP48 スライス レジスタには、リセットのみが含まれ、セットは含まれません。そのため、必要でない限り、DSP48 スライス内にインプリメント可能な乗算器、加算器、カウンター、またはその他のロジックの付近にセット (信号適用時の値が 1) は記述しないようにしてください。また、DSP スライスでは同期リセット動作しかサポートされないので、非同期リセットは使用しないでください。セットまたは非同期リセットを生成するコードでは、エリア、パフォーマンス、または消費電力の面で最適な結果が得られない可能性があります。

多くの DSP デザインは、AMD アーキテクチャに適しています。アーキテクチャが最適に使用されるようにするには、アーキテクチャの機能について理解し、デザイン入力コードでこれらのリソースが活用されるようにする必要があります。

DSP48 ブロックでは、符号付き演算のインプリメンテーションが使用されます。AMDでは、リソース機能に適した最も効率的なマップを達成できるように、HDL ソースに符号付きの値を記述することをお勧めします。符号なしのバス値がコードで使用された場合でも、合成ツールでこのリソースを使用できる可能性はありますが、符号なしから符号付きへの変換があるため、そのコンポーネントの完全なビット精度を得られない可能性があります。

AMDでは、ターゲット デザインに多数の加算器が含まれる場合は、デザインを評価して、DSP48 スライスの前置加算器と後置加算器がより多く使用されるようにすることをお勧めします。たとえば、FIR フィルターを使用する場合は、複数の加算器を連続して使用する (加算器ツリー) よりも、加算器カスケードを使用してシストリック (対称) フィルターを構築できます。フィルターが対称の場合は、専用の前置加算器を使用して、ファンクションをより少ない数の LUT とフリップフロップに、また、より少ない数の DSP スライス (ほとんどの場合リソース量は半分) に統合できるかどうかを確認します。

加算器ツリーが必要な場合は、6 入力 LUT アーキテクチャで、単純な 2 入力加算と同じリソース量を使用するだけで三項加算 (A + B + C = D) を効率的に作成できます。これにより、キャリー ロジック リソースを節約できます。多くの場合、これらの方法を使用する必要はありません。

これらの機能を知っておくと、トレードオフを前もって認識できるので、インプリメンテーションが最初からよりスムーズで効率的に実行されるように RTL コードを記述できます。AMDでは、ほとんどの場合、DSP リソースを推論することをお勧めします。

DSP48 スライスの機能に関する詳細、およびデザインの要件に合わせたこのリソースの利用方法は、 『7 シリーズ FPGA DSP48E1 スライス ユーザー ガイド』 (UG479) および 『UltraScale アーキテクチャ DSP スライス ユーザー ガイド』 (UG579) を参照してください。