上溢模式 - 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 时,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 相同,那么将复制其他位。
    1. 删除冗余 MSB。
    2. 新符号位是已删除位的最低有效位。在此情况下即为 0。
    3. 将新的符号位与新的值的符号进行比较。
  • 如果不同,则对所有数值取反。在此情况下两者不同。

如果 N>0:

  • 使用符号量级饱和
  • N 个 MSB 饱和为 1。
  • 与 N = 0 情况下的行为类似,但正数仍保留为正数,负数保留为负数。