ZHCZ054A December   2024  – October 2025 AWR2544

 

  1.   1
  2. 1简介
  3. 2器件命名规则
  4. 3器件标识
  5. 4器件型号/修订版对应关系公告
  6. 5功能规范的已知设计异常
    1.     MSS#25
    2.     MSS#27
    3.     MSS#28
    4.     MSS#29
    5.     MSS#30
    6.     MSS#33
    7.     MSS#40
    8. 5.1  MSS#49
    9. 5.2  MSS#52
    10. 5.3  MSS#53
    11. 5.4  MSS#54
    12. 5.5  MSS#55
    13. 5.6  MSS#56
    14. 5.7  MSS#57
    15. 5.8  MSS#58
    16. 5.9  MSS#59
    17. 5.10 MSS#60
    18. 5.11 MSS#61
    19. 5.12 MSS#62
    20. 5.13 MSS#63
    21. 5.14 MSS#64
    22. 5.15 MSS#65
    23.     MSS#68
    24.     MSS#71
    25. 5.16 ANA#12A
    26.     ANA#37A
    27.     ANA#39
    28.     ANA#43
    29.     ANA#44
    30.     ANA#45
    31.     ANA#47
    32.     ANA#59
  7.   商标
  8. 6修订历史记录

MSS#65

单条 MFENCE 指令问题

受影响的修订版:

AWR2544

说明:

MFENCE 指令用于暂停指令取指流水线,直至所有 CPU 触发的内存事务完成。

在极特殊情况下,MFENCE 可能允许其后续事务在前面的 STORE 操作完成前执行。

例如,

  1. STORE_A

  2. MFENCE

  3. TRANSACTION_B

MFENCE 的实现机制是:暂停 CPU 直至内存系统确认无“进行中”事务,即处于空闲状态。这可防止 CPU 在 STORE_A 完成之前执行 TRANSACTION_B。存在一个很小的窗口期:当 STORE_A 从 L1D 移至 L2 且内存系统处于空闲状态时,内存系统可能过早声明自身为空闲状态。如果 TRANSACTION_B 必须严格在 STORE_A 之后执行,这可能导致程序行为异常。例如:假设 STORE_A 向 DDR3 写入数据,而 TRANSACTION_B 触发 EDMA 读取 STORE_A 写入的地址。MFENCE 应确保 STORE_A 在 EDMA 执行前提交,以便 EDMA 读取更新后的值。由于本公告所述问题,TRANSACTION_B 可能在 STORE_A 提交前触发 EDMA,导致 EDMA 读取到陈旧数据。

权变措施:

将单条 MFENCE 指令替换为连续两条 MFENCE 指令。当 STORE_A 从 L1D 传至 L2 时,如果内存系统过早指示空闲,此方案可通过恢复暂停状态来解决该问题。

  1. STORE_A
  2. MFENCE
  3. MFENCE
  4. TRANSACTION_B

关于一致性操作的说明:对于以下公告,除已列出的权变措施外,也可使用双 MFENCE 作为权变措施:

请注意,上述第二条公告不涵盖 L1D 和 L2 的块及全局写回操作。如果 L1D 和 L2 的块及全局写回操作后紧跟 MFENCE 和依赖于写回完成的事务,则应使用双 MFENCE 权变措施。

另请注意,当前版本的 MCSDK 软件包未包含此权变措施。该方案将在未来版本中提供

注: 跟踪功能的特殊注意事项。如果通过包含 MFENCE 的软件生成跟踪信息,该权变措施有额外要求。MFENCE 的跟踪生成要求每条 MFENCE 指令后紧跟一条 NOP 和一条 MARK 指令。该权变措施详见本白皮书。