飽和 | 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 が同じである場合は、ほかのビットがコピーされます。
- 重複している MSB が削除されます。
- 新しい符号ビットは削除されたビットの最下位ビットです。この場合は 0 です。
- 新しい符号ビットが新しい値の符号と比較されます。
- 異なる場合は、すべての数値が反転されます。この場合は数値は異なります。
N が 0 より大きい場合:
- 符号絶対値の飽和が使用されます。
- N 個の MSB が 1 に飽和します。
- N =0 のケースと同様の動作になりますが、正の数値は正のまま、負の数値は負のままになる点が異なります。