ビット幅の伝搬 - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

関数のコーディング スタイルは、主に関数の引数およびインターフェイスに影響します。関数への引数サイズが正確に記述されていれば、Vitis HLS でこの情報がデザインに伝搬されます。すべての変数に対して任意精度型を作成する必要はありません。次の例では、2 つの整数が乗算されますが、下位 24 ビットのみが結果に使用されます。

#include "ap_int.h"
 
ap_int<24> foo(int x, int y) { 
 int tmp;
 
 tmp = (x * y);
 return tmp
}

このコードが合成されると、出力が 24 ビットに切り捨てられた 32 ビット乗算器になります。

次のコード例のように、入力のサイズが正しく 12 ビット型 (int12) になっていれば、最終 RTL では 24 ビット乗算器が使用されます。

#include "ap_int.h"
typedef ap_int<12> din_t;
typedef ap_int<24> dout_t;
 
dout_t func_sized(din_t x, din_t y) { 
 int tmp;
 
 tmp = (x * y);
 return tmp
}

2 つの関数入力に任意精度型を使用するだけで、Vitis HLS で 24 ビット乗算器を使用するデザインが作成され、12 ビット型がデザインに伝搬されます。AMDでは、ローカル変数のサイズを設定する必要がないように、階層内のすべての関数の引数のサイズを正しく設定することをお勧めしています。

通常は、変数が関数インターフェイスから、特に最上位関数インターフェイスから直接駆動されると、最適化の中に実行されないものがでてくることがあります。典型的な例は、入力がループ インデックスの上位制限として使用される場合です。