1. はじめに
乗算・加算専用 DSP ブロックはハードマクロですが、リソースに適切にマッピングされないと、動作速度が低下する場合があります。本記事では、DSP ブロックを使用している状態でもタイミングが出ない回路について、改善する方法を説明します。
本資料は、インテル® Arria® 10 FPGA の回路を例として使用しています。
2. DSP ブロックについて
DSP ブロックの構造は下記のようになっています。DSP ブロックは様々な機能を持ちますが、必要な機能のみ活性化して使用されます。例えば今回の例では加算回路、係数 ROM、および、レジスターのうち入力・出力以外のレジスターは、使用されません。
【図 1】DSP ブロック (18x19 固定小数点乗算器モードの場合)
3. 例:内部メモリー出力を直接 DSP ブロックの入力とする構成
3-1. 回路構成
内部メモリー出力を FF 経由せずに乗算する場合、DSP ブロックの入力レジスターが使用されず、パスが長くなり Fmax が低下します。
シフトレジスターの記述も、内部メモリーに実装される場合があり注意が必要です。コンパイル結果を確認してください。
【図 2】回路構成
3-2. タイミングエラー箇所をタイミング・アナライザーで確認する
タイミング・アナライザーで Report Timing を実行し、Fail しているパス名を確認します。Location やノード名が RAM to DSP (出力レジスター) になっています。
【図 3】Fail しているパス名の確認
3-3. 回路の構造をグラフィカルに確認する
Technology Map Viewer、Resource Property Viewer で回路の構造をグラフィカルに確認することができます。
手順①:まず、確認したいパスから Technology Map Viewer を開く
‐Timing Analysis 画面で確認したいパスの表示行で
右クリック→ Locate Path → Locate in Technology Map Viewer を実行
手順②:DSP ブロックを選択し、Resource Property Viewer を開く
‐Technology Map Viewer 画面で、DSP ブロックセルを選択し
右クリック→ Locate Node → Locate in Resource Property Viewer を実行して表示
DSP ブロック内で入力レジスターが未使用になっています (low light され、青枠がありません)。入力信号はバイパスされます。
【図 4】回路の構造をグラフィカルに確認
3-4. 対策を実施する
DSP ブロックの入力レジスター (DFF) が使用されるように変更します。
内部 RAM と 乗算の間に DFF を1段以上追加します。これは、Register Packing により DSP ブロック 入力レジスターの使用を期待する変更です。
DFF を追加する際、レイテンシーの変化が問題ない様に調整してください。
RAM の用途がシフトレジスターの場合、全体の段数が変化しない様、内部メモリー部分の長さを調整してください。
RAM の用途が他の機能 (FIFO や係数/関数表など) の場合、読み出しタイミングや、乗算結果の利用タイミングを調整し、全体の機能が維持される様に調整してください。
【図 5】DFF を追加する
3-5. 対策結果をタイミング・アナライザーで確認する
対策結果をタイミング・アナライザーで確認します。Fmax の値が、対策前の 302.21 MHz から 372.21 MHzに改善し、今回のターゲット周波数 333 MHz を満たしました。
【図 6】Timing Analyzer 画面
3-6. 対策後の回路の構造をグラフィカルに確認する
対策結果をグラフィカルに確認します。DSP ブロック内で入力レジスターが使用されています (青枠あり)。内部メモリー (RAM) 出力は DSP ブロック内の入力レジスターを使って受け取られる様になっており、期待通り Register Packing が行われています。
【図 7】回路の構造をグラフィカルに確認
4. 参考:評価回路
4-1. 対策前の回路(RAM-based シフトレジスター + DSP ブロック乗算)
シフトレジスター:16段、RAM-based
乗算器:DSP ブロック (Native Fixed Point DSP を使用)
【図 8】対策前の回路(RAM-based シフト・レジスタ + DSP ブロック乗算)
4-2. 対策後の回路(RAM-based シフトレジスター + DFF + DSP ブロック乗算)
シフトレジスター:15段、RAM-based + DFF
乗算器:DSP ブロック (Native Fixed Point DSP を使用) (変更なし)
コンパイルにより、D-FF が DSP ブロックの入力レジスターとして Packing され、タイミングが改善します。
【図 9】対策後の回路
5. おわりに
以上、DSP ブロックを使用したデザインで、タイミングが出ないケースの例と解析方法、対策方法をご説明いたしました。ご参考になれば幸いです。