固定小数点データ型では、次の表に示すように、データを 2 の補数の整数ビットと分数ビットの ap_fixed<W,I,[Q,O,N]>
形式で記述します。次の例では、Vitis HLS の ap_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
型の識別子を示します。
Identifier | 説明 | |
---|---|---|
W | ワード長をビット数で指定 | |
I |
符号ビットも含む、整数値を表すビット数 (2 進小数点の左にあるビットの数)。 次の例のように、この値が負の場合、2 進小数点の右までの暗示される符号ビット数 (符号付きの場合) または暗示されるゼロビット数 (符号なしの場合) を示します。次に例を示します。
|
|
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 | オーバーフロー折り返しモードの場合の飽和ビット数を定義します。 | |
|
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] =