オーバーフロー モード - 2023.2 日本語

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語
飽和 AP_SAT
0 への飽和 AP_SAT_ZERO
対称飽和 AP_SAT_SYM
折り返し AP_WRAP
符号絶対値の折り返し AP_WRAP_SM

AP_SAT

値が次のように飽和されます。

  • オーバーフローが発生したときは値が最大値に飽和されます。
  • 負のオーバーフローのときは最小値に飽和されます。
    ap_fixed<4, 4, AP_RND, AP_SAT> UAPFixed4 = 19.0; // Yields: 7.0
    ap_fixed<4, 4, AP_RND, AP_SAT> UAPFixed4 = -19.0; // Yields: -8.0
    ap_ufixed<4, 4, AP_RND, AP_SAT> UAPFixed4 = 19.0; // Yields: 15.0
    ap_ufixed<4, 4, AP_RND, AP_SAT> UAPFixed4 = -19.0; // Yields: 0.0

AP_SAT_ZERO

オーバーフローまたは負のオーバーフローの場合に値 を 0 にします。

ap_fixed<4, 4, AP_RND, AP_SAT_ZERO> UAPFixed4 = 19.0; // Yields: 0.0
ap_fixed<4, 4, AP_RND, AP_SAT_ZERO> UAPFixed4 = -19.0; // Yields: 0.0
ap_ufixed<4, 4, AP_RND, AP_SAT_ZERO> UAPFixed4 = 19.0; // Yields: 0.0
ap_ufixed<4, 4, AP_RND, AP_SAT_ZERO> UAPFixed4 = -19.0; // Yields: 0.0

AP_SAT_SYM

値が次のように飽和されます。

  • オーバーフローが発生したときは値が最大値に飽和されます。
  • 負のオーバーフローのときは最小値に飽和されます。
    • 符号付き ap_fixed 型の場合は負の最大値
    • 符号なし ap_ufixed 型の場合は 0
    ap_fixed<4, 4, AP_RND, AP_SAT_SYM> UAPFixed4 = 19.0; // Yields: 7.0
    ap_fixed<4, 4, AP_RND, AP_SAT_SYM> UAPFixed4 = -19.0; // Yields: -7.0
    ap_ufixed<4, 4, AP_RND, AP_SAT_SYM> UAPFixed4 = 19.0; // Yields: 15.0
    ap_ufixed<4, 4, AP_RND, AP_SAT_SYM> UAPFixed4 = -19.0; // Yields: 0.0

AP_WRAP

オーバーフローが発生したときは値が折り返されます。

ap_fixed<4, 4, AP_RND, AP_WRAP> UAPFixed4 = 31.0; // Yields: -1.0
ap_fixed<4, 4, AP_RND, AP_WRAP> UAPFixed4 = -19.0; // Yields: -3.0
ap_ufixed<4, 4, AP_RND, AP_WRAP> UAPFixed4 = 19.0; // Yields: 3.0
ap_ufixed<4, 4, AP_RND, AP_WRAP> UAPFixed4 = -19.0; // Yields: 13.0

N の値が 0 の場合 (デフォルトのオーバーフロー モード):

  • 範囲外の MSB はすべて削除されます。
  • 符号なしの場合は、最大値に達すると 0 に戻ります。
  • 符号付きの場合は、最大値に達すると最小値に戻ります。

N が 0 より大きい場合:

  • N が 0 より大きい場合、MSB は飽和するか、または 1 に設定されます。
  • 符号ビットは保持されるため、正の値は正のまま、負の値は負のままになります。
  • 飽和していないビットは LSB 側からコピーされます。

AP_WRAP_SM

値が符号絶対値で折り返されます。

ap_fixed<4, 4, AP_RND, AP_WRAP_SM> UAPFixed4 = 19.0; // Yields: -4.0
ap_fixed<4, 4, AP_RND, AP_WRAP_SM> UAPFixed4 = -19.0; // Yields: 2.0

N の値が 0 の場合 (デフォルトのオーバーフロー モード):

  • このモードでは符号絶対値ラップが使用されます。
  • 符号ビットは最下位の削除されたビットの値に設定されます。
  • 最上位の残りのビットが元の MSB とは異なる場合、残っているビットすべてが反転されます。
  • MSB が同じである場合は、ほかのビットがコピーされます。
    1. 重複している MSB が削除されます。
    2. 新しい符号ビットは削除されたビットの最下位ビットです。この場合は 0 です。
    3. 新しい符号ビットが新しい値の符号と比較されます。
  • 異なる場合は、すべての数値が反転されます。この場合は数値は異なります。

N が 0 より大きい場合:

  • 符号絶対値の飽和が使用されます。
  • N 個の MSB が 1 に飽和します。
  • N =0 のケースと同様の動作になりますが、正の数値は正のまま、負の数値は負のままになる点が異なります。