[CPU-3.16] CPU 访问 0x3FF0_0000 ~ 0x3FF1_EFFF 与 0x3FF4_0000 ~ 0x3FF7_FFFF 两段地址空间存在限制
描述
落在这两段地址空间的 CPU 读操作具有推测性,推测性读操作会导致程序描述的行为与硬件的真实行为不一致。
如果两个 CPU 同时连续访问 0x3FF0_0000 ~ 0x3FF1_EFFF 地址空间的内容,其中的一些访问可能丢失。
CPU 通过 0x3FF4_0000 ~ 0x3FF7_0000 地址空间读 FIFO 时,FIFO 的读指针会被延时更新。CPU 频率升高后,CPU 发起的两次连续读 FIFO 时间间隔缩短。当新的读 FIFO 请求到来时,FIFO 读指针还没有更新,这会导致 CPU 读到前一次读 FIFO 的值。
变通方法
落在这两段地址空间的 CPU 访问均需要在对应的操作前加入 “MEMW” 指令。即在 C/C++ 中,软件访问这两段地址内的寄存器时需要加上 “volatile” 属性。
当 CPU 频率为 160 MHz 时,在两次连续读 FIFO 之间添加 6 个 “nop” 指令。CPU 频率为 240 MHz 时,在两次连续读 FIFO 之间添加 7 个 “nop” 指令。
解决方案
暂无 修复计划。