Spartan 7 4:1 Mig 生成的 DDR3 接口的写入内存时序

Write memory timings for Spartan 7 4:1 Mig Generated DDR3 interface

我正在尝试使用 UI 来了解 7 系列 FPGA 的写入内存时序,用于 MIG 生成的内存控制器(运行 在 4:1)。

我关注的文档是 Xilinix 的 ug586 文档。我特别想了解复制在这里的图 1:77:

我的理解是,对于前几个周期,app_addr app_en app_wdf_data app_wdf_wrenapp_wdf_end 被正确断言并写入数据。见蓝线。

有趣的一点出现在 (1),其中 app_rdy 无效,这意味着内存控制器正忙。此时 app_addr 保存在同一地址 (2) 上,直到 app_rdy 在 (6) 处重新声明。到目前为止一切都有意义。

我很困惑的是写地址a30的是什么?选择是数据(3)或(4)或(5)。该图和逻辑暗示 (3) 被写入 a30(见粉红色虚线)。但我不知道为什么。查看文档中的图 1-75,您可以提前一个时钟写入数据,但与 app_rdy 在时钟上升沿重新启用时相比,(3) 处的数据提前 2 个时钟(7).所以剩下(4)或(5)。但在这个演示中,这些似乎都没有意义。那么写入 a30 的内容是什么?我该如何解决?

(我也对后续地址中写的内容感兴趣,但一旦我理解了 a30 我应该也能理解那些)

我会回答我自己的问题,因为我找到了一个几乎相同的答案 here

基本上混淆是命令队列(由 app_enapp_rdy 控制)与写队列(由 app_wdf_rdy 和 [=13 控制)分开=]).

这意味着您可以在实际请求写入之前将数据排队等待写入 - 事实上,您可以一直排队写入数据,直到 app_wdf_ready 无效。

您必须为每个写入命令排队一些写入数据。您可以在写入命令之前、在与写入命令相同的时钟上或最多两个时钟后对写入数据进行排队。写入数据是一个 FIFO 队列,因此您甚至可以在发出单个写入命令之前对大量写入数据进行排队!

(混淆来自文档中的示例,该示例显示提前一个时钟排队数据 - 但如果您阅读文本,您会得到:

  1. Write data is presented along with the corresponding write command (second half of BL8).
  2. Write data is presented before the corresponding write command.
  3. Write data is presented after the corresponding write command, but should not exceed the limitation of two clock cycles

请注意,在第 2 点中没有提到允许您提前排队数据的限制。

这意味着 - 在我的示例中 - (3) 写入地址 a30,因为它在写队列中。