任意精度固定小数点データ型の概要 - 2023.2 日本語

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

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

固定小数点データ型では、次の表に示すように、データを 2 の補数の整数ビットと分数ビットの ap_fixed<W,I,[Q,O,N]> 形式で記述します。次の例では、Vitis HLSap_fixed 型を使用して、18 ビット変数 (バイナリ ポイントより上位の 6 ビット (符号ビットも含む) の整数部とバイナリ ポイントより下位の 12 ビットの小数部) を定義しています。変数は、符号付きとして指定され、量子化モードは正の無限大の方向に丸めらるように設定されています。オーバーフロー モードは指定されていないので、オーバーフローにはデフォルトの折り返しモードが使用されます。

#include <ap_fixed.h>
...
ap_fixed<18,6,AP_RND> t1 = 1.5; // internally represented as 0b00'0001.1000'0000'0000 (0x01800)
ap_fixed<18.6,AP_RND> t2 = -1.5; // 0b11'1110.1000'0000'0000 (0x3e800)
...
ヒント: ap_fixed の整数値 (I) は、符号ビットを含む 2 進数の左側の整数ビット数を示しています。

ビット数または精度が異なる変数を含む計算を実行する場合は、2 進小数点が自動的に揃えられます。たとえば、異なるサイズの固定小数点型変数を使用して除算を実行する場合、商の小数部分は被除数の小数部分より大きくなりません。代入の前に結果を新しい変数幅に型変換すると、商の小数部分を保持できます。

固定小数点を使用して実行された C++ シミュレーションの動作は、最終的なハードウェアと同じになります。これにより、ビット精度、量子化、およびオーバーフロー ビヘイビアーを高速の C レベル シミュレーションで解析できるようになります。

固定小数点型は、終了するのに多くのクロック サイクルを必要とする浮動小数点型の代わりに使用できます。浮動小数点型の範囲がすべて必要な場合を除き、固定小数点型で同じ精度をインプリメントでき、より小型で高速なハードウェアにできることがよくあります。

次の表に、ap_fixed 型の識別子を示します。

表 1. 固定小数点の識別子のまとめ
Identifier 説明
W ワード長をビット数で指定
I

符号ビットも含む、整数値を表すビット数 (2 進小数点のにあるビットの数)。

次の例のように、この値が負の場合、2 進小数点のまでの暗示される符号ビット数 (符号付きの場合) または暗示されるゼロビット数 (符号なしの場合) を示します。次に例を示します。

ap_fixed<2, 0> a = -0.5;    // a can be -0.5,

ap_ufixed<1, 0> x = 0.5;    // 1-bit representation. x can be 0 or 0.5
ap_ufixed<1, -1> y = 0.25;  // 1-bit representation. y can be 0 or 0.25
const ap_fixed<1, -7> z = 1.0/256;  // 1-bit representation for z = 2^-8
Q 量子化モード: 結果の保存に使用される変数の最小の小数ビットで定義できるよりも高い精度が生成された場合の動作を指定します。
ap_fixed 型 説明
AP_RND Round to plus infinity
AP_RND_ZERO Round to zero
AP_RND_MIN_INF Round to minus infinity
AP_RND_INF Round to infinity
AP_RND_CONV Convergent rounding
AP_TRN 負の無限大への切り捨て (デフォルト)
AP_TRN_ZERO 0 への切り捨て
O

オーバーフロー モード: 演算結果が結果を格納するのに使用される変数に格納可能な最大値 (負の値の場合は最小値) を超えた場合の動作を指定します。

ap_fixed 型 説明
AP_SAT 1 Saturation
AP_SAT_ZERO 1 0 への飽和
AP_SAT_SYM 1 対称飽和
AP_WRAP 折り返し (デフォルト)
AP_WRAP_SM 符号絶対値のラップ
N オーバーフロー折り返しモードの場合の飽和ビット数を定義します。
  1. AP_SAT* モードを使用すると、飽和を実行するため追加ロジックが必要となるのでリソース使用量が増加し、最大で LUT の使用量が 20% 増加する可能性があります。
  2. hls_math ライブラリの固定小数点演算関数は、量子化モード、オーバーフロー モード、および飽和ビット数のそれぞれの ap_[u]fixed テンプレート パラメーター Q、O、および N をサポートしません。量子化モードとオーバーフロー モードは、ap_[u]fixed 変数が割り当ての左側にあるか、初期化されているが、計算中ではない場合にのみ有効です。

ap_[u]fixed 型に使用可能なデフォルトの最大幅は 1024 ビットです。このデフォルトは、ap_int.h ヘッダー ファイルを含める前に、4096 以下の正の整数値でマクロ AP_INT_MAX_W を定義すると上書きできます。

重要: ap_[u]fixed を使用すると、ROM 合成に時間がかかることがあります。int に変更すると、合成は速くなります。次に例を示します。
static ap_fixed<32,0> a[32][depth] = 

次のように変更できます。

static int a[32][depth] =