AR# 54111

2012.4 - Vivado HLS - 大型乗算器 : XST の DSP 使用率がレポートされる DSP と一致せず、タイミングが満たされない

説明

7 シリーズをターゲットにした次の Vivado HLS コードはタイミング要件を満たします (4ns 以下)。DSP は 2 つ使用、Vivado 合成を使用しています。

しかし、Virtex-6 などの古いシリーズの FPGA をターゲットにすると、使用される合成ツールは XST で、合成されるネットリスト/インプリメンテーションでは 4 つの DSP が使用され、タイミングが満たされません (5ns を超える)。

何が問題ですか。

#include "mult.h"
void mult(in_a_t in_a, in_b_t in_b, out_p_t out_p[1])
{
out_p[0] = in_a * in_b;
}

withmult.h:-

#include <ap_int.h>
typedef ap_int<18> in_a_t;
typedef ap_int<42> in_b_t;
typedef ap_int<60> out_p_t;
void mult(in_a_t in_a, in_b_t in_b, out_p_t out_p[1]);

ソリューション

XST と Vivado 合成では、生成された RTL から DSP を自動推論する方法が異なるため、この問題が発生します。

XST に対し次の C コードを使用してこの問題は回避できます。

ap_uint<17> x = in_b;
ap_int<42-17> y = in_b >> 17;
out_p[0] = in_a * x + ((in_a * y) << 17);

Vivado HLS でこの手動変更を行うと、シフト 17 はハードウェアで直接サポートされていて効率よくインプリメントされるので、XST のパフォーマンスが向上します。

これは XST での問題で、同じ RTL 等価コードを使用すると XST では同じ 4 つの DSP が生成されます。

この XST の問題が修正される予定はありません。

添付の ZIP ファイルには例が含まれているので、それを使用して試してみてください。

1. PATH にあるザイリンクス ツールに含まれている Vivado HLS コマンド プロンプトで次を入力します。

vivado_hls run_hls_vanilla.tcl

これで Virtex-6 および Virtex-7 FPGA の両方に対しデフォルトのコードが実行されます。run_hls_workaround.tcl を使用して VHLS を再度実行できます。

2. 結果を比較します。エクスポート プロセスの結果はこちらにあります。

PROJ_NAME\SOL_NAME\impl\report\RTL_LANG\TOP_NAME_export.rpt

たとえば次の場所です。

mult_vanilla\solution_v6\impl\report\verilog\mult_export.rpt

このコマンドを実行します。

diff mult_vanilla\solution_v6\impl\report\verilog\mult_export.rpt mult_vanilla\solution_v7\impl\report\verilog\mult_export.rpt -y

(注記 : diff はザイリンクス ツールで使用できるコマンド ライン ツール セットに含まれています。Vivado HLS コマンド プロンプト ツールにはありません。)

diff mult_vanilla\solution_v6\impl\report\verilog\mult_export.rpt mult_vanilla\solution_v7\impl\report\verilog\mult_export.rpt -y

Implementation tool: Xilinx ISE14.4 | Implementation tool: Xilinx Vivado v2012.4
Device target: xc6vsx315tff1759-1| Device target: xc7vx330tffg1761-1
Report date: Mon Feb 11 15:21:38 GMTST 2013 | Report date: Mon Feb 11 15:32:19 GMTST 2013
<

#=== Resource usage === #=== Resource usage ===
SLICE: 15 | SLICE: 19
LUT: 33 | LUT: 13
FF: 83 FF: 83
DSP: 4| DSP: 2
BRAM: 0 BRAM: 0
SRL: 9 | SRL: 0
#=== Final timing === #=== Final timing ===
CP required: 4.000 CP required: 4.000
CP achieved: 5.423 | CP achieved: 2.015
Timing not met| Timing met

diff mult_workaround\solution_v6\impl\report\verilog\mult_export.rpt mult_workaround\solution_v7\impl\report\verilog\mult_export.rpt -y

Implementation tool: Xilinx ISE14.4 | Implementation tool: Xilinx Vivado v2012.4
Device target: xc6vsx315tff1759-1 | Device target: xc7vx330tffg1761-1
Report date: Mon Feb 11 15:21:40 GMTST 2013 | Report date: Mon Feb 11 15:33:00 GMTST 2013
<

#=== Resource usage === #=== Resource usage ===
SLICE: 21 | SLICE: 25
LUT: 48 | LUT: 39
FF: 111 FF: 111
DSP: 2 DSP: 2
BRAM: 0 BRAM: 0
SRL: 0 SRL: 0
#=== Final timing === #=== Final timing ===
CP required: 4.000 CP required: 4.000
CP achieved: 2.116 | CP achieved: 2.222
Timing met Timing met

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
AR54111_VHLS_mult_XST_workaround.zip 1 KB ZIP
AR# 54111
日付 04/01/2013
ステータス アクティブ
種類 既知の問題
ツール