关于在 kc705 中通过 MIG 进行 ddr3 寻址的困惑

confusion about ddr3 addressing via MIG in kc705

我已经被这个问题困扰了一个月了,我无法理解它。 我有 xilinx kc705,它有一个 1GB 的内存,组织为 (128 MB x 8),这是一个 [R]ank of 8, 8-bit devices。所以内存接口是64位的。每个设备或芯片是 (128 MB) 并有 8 个存储体 (16 MB),每个存储体有 14 个 [R] 流和 10 个 [C] 列。如下图:所以这个芯片有8个

memory organization

内存突发为8。 当我使用vivado生成MIG时,它生成了一个具有28位地址宽度和512位数据宽度的用户界面。

在MIG文档中地址宽度为:Rank+Bank+Row+Column = 1+3+14+10 = 28位。 (B=3,因为每个设备中有 8 个库)。

我的问题是: 1- 由于内存突发为 8,当我在用户界面端提供一个地址和一个命令(写入或读取)时,MIG 将向 ddr3 发出 8 个命令,这就是为什么数据宽度为 512 位(64 *8=512) 这个理解正确吗?

2- 28位地址中,每个地址对应的是1-Byte、8-Byte(64-bit)还是64-byte(512-bit)?增加它以到达下一个位置?

我的理解是,即使ddr3数据宽度是64位,每个地址都对应1个字节,这是因为有8个芯片,都得到相同的地址,但每个都得到64位的8位部分-少量。当每个芯片执行 8 个突发时,完成 512 位传输。所以我对如何增加地址感到困惑。

是否应该增加8,因为它对应1个字节,每个芯片已经写了8个字节?

ddr3总共写入了64字节,是否应该增加64?

突发长度8是DDR3协议的属性。它的工作方式是您请求一个地址,并返回 8 个字的数据。所以你是正确的,一次突发会给你 64*8=512 位,但是 MIG 内核只会向 DDR 芯片发送一个命令(除了 opening/closing 行之类的东西)。

根据您描述情况的方式,我猜您使用的是原生 MIG UI 而不是 AXI。在这种情况下,您通过 MIG UI 发送的地址是进入 DDR 芯片的实际地址位。因为你有 128M 字,你应该有 27 个地址位。但正如您提到的,MIG 为您提供 28 位。额外的一个是等级位。这是不必要的,因为您只有一个等级,因此该位应始终为 0。(这只是 MIG 的 bugs/annoyances 之一。)

对于 DDR3 和突发长度 8,您始终需要请求 8 字对齐的块。 lower three column address bits have an effect on the order that the 8 words come back,如果您希望其中一个单词在其他单词之前返回,这很有用。但是,由于 MIG 最终会同时为您提供所有单词,因此我不确定如果您将它们设置为 0 以外的任何值会发生什么。

由于排名和较低的 3 列位始终为零,因此您还剩下 24 位可用地址 space。这 24 位使您可以访问 1GB RAM 中完整的 space 512 位块。所以是的,你应该增加 8.