首页 > 解决方案 > Spartan 7 4:1 Mig Generated DDR3 接口的写入内存时序

问题描述

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

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

图 1-77 来自 ug586_7Series_MIS.pdf

我的理解是,在前几个周期中,app_addr app_en app_wdf_data app_wdf_wren正确app_wdf_end断言并写入数据。见蓝线。

有趣的点出现在 (1) 处,其中app_rdy被取消断言,这意味着内存控制器很忙。此时app_addr,在同一地址 (2) 上保持,直到app_rdy在 (6) 处重新声明。到目前为止,一切都说得通。

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

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

标签: fpgaxilinxspartan

解决方案


我会回答我自己的问题,因为我在这里找到了几乎相同的答案。

基本上,混淆是命令队列(由 and 控制)与写队列(由andapp_en控制app_rdy)是分开的。app_wdf_rdyapp_wdf_wren

这意味着您可以在实际请求写入之前将数据排队等待写入 - 事实上,您可以继续排队写入数据,直到app_wdf_ready被取消断言。

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

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

  1. 写入数据与相应的写入命令一起呈现(BL8 的后半部分)。
  2. 写入数据出现在相应的写入命令之前。
  3. 写入数据在相应的写入命令之后呈现,但不应超过两个时钟周期的限制

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

这意味着 - 在我的例子中 - (3)写入地址a30,就像它在写入队列中一样。


推荐阅读