是的。如果执行返回回读访问,其中芯片选择在访问之间更改,而第二个 CS 中的行已打开,则有可能引起总线竞争。在这种情况下,可以发生争用的情况:ACT = 激活和 RD = 读取:
DDR 侧
行动 A
RD A
ACT B
RD B
RD A
本地侧
在 CS1 中读取行 A
在 CS2 中读取 B 行
在 CS1 中读取行 A
控制器指出,第二次读取为行 A 时,行已打开。因此,无需 ACT。下方是一张图,显示了在读取数据从内存返回到FPGA时(在 RD B 立即由 RD A 跟进时)的 dqs 信号。
因而,CS2 的读取会丢失。该解决方案将插入 NOP,如下所示:
DDR 侧
行动 A
RD A
ACT B
RD B
NOP
RD A
本地侧
在 CS1 中读取行 A
在 CS2 中读取 B 行
nop (de-assert 1 周期请求)
在 CS1 中读取行 A
v1.2.0 的Altera DDR SDRAM 控制器内核必须由用户完成。对于 v2.0 内核,这将自动完成,对用户而言变得透明。