饱和 | 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 时,N 个 MSB 位饱和为 1 或设为 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 情况下的行为类似,但正数仍保留为正数,负数保留为负数。