我正在尝试使用MIG生成的内存控制器(以4:1运行)的UI来了解7系列FPGa的写内存时序。
我要遵循的文档是Xilinix的ug586文档。我特别想了解图1:77,该图在此处复制:
我的理解是,在最初的几个周期中,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
在时钟的上升沿重新启用时相比,(3)的数据提前2个时钟。 (7)。这样就剩下(4)或(5)了。但是,在本演示中,这些似乎都没有道理。那么写到a30
的内容是什么,我该如何解决呢?
(我也很感兴趣写在后续地址中的内容,但是一旦我了解了a30
,我也应该能够理解这些内容)
答案 0 :(得分:0)
我将回答自己的问题,因为我找到了几乎相同的答案here。
基本上,混乱之处在于命令队列(由app_en
和app_rdy
控制)与写队列(由app_wdf_rdy
和app_wdf_wren
控制)分开)。
这意味着您可以在实际请求写入之前将数据排队等待写入-实际上,您可以继续对写入数据进行排队,直到取消app_wdf_ready
为止。
您必须为每个写命令排队一些写数据。您可以在写命令之前,与写命令相同的时钟或最多两个时钟之后将写数据排队。写数据是一个FIFO队列,因此即使发出单个写命令,您也可以将很多写数据排队!
(困惑来自文档中的示例,该示例显示了一个时钟提前一个队列的数据-但是,如果您阅读文本,则会得到:
- 写入数据与相应的写入命令(BL8的下半部分)一起显示。
- 在相应的写入命令之前显示写入数据。
- 写数据在相应的写命令之后出现,但不应超过两个时钟周期的限制
请注意,在第2点中,没有提到允许多久将数据排队的限制。
这意味着-在我的示例中-(3) 被写入地址a30
,就像在写队列中一样。