путаница с адресацией ddr3 через MIG в kc705 - PullRequest
1 голос
/ 23 января 2020

Я застрял с этой проблемой уже месяц и не могу ее понять. У меня есть xilinx kc705 с 1 ГБ памяти, организованной как (128 МБ x 8), то есть один [R] анк из 8, 8-битных устройств. поэтому интерфейс памяти составляет 64 бита. Каждое устройство или чип имеет (128 МБ) и имеет 8 банков (16 МБ), каждый имеет 14 [R] потоков и 10 [C] столбцов. как на картинке ниже: таким образом, существует 8 чипов.

организация памяти

Объем памяти равен 8. Когда я использую vivado для генерации MIG, он производит Пользовательский интерфейс с 28-разрядной шириной адреса и 512-разрядной шириной данных.

в ширине адреса документации MIG: Ранжирование + Банк + Строка + Столбец = 1 + 3 + 14 + 10 = 28 бит. (B = 3, так как в каждом устройстве по 8 банков).

Мои вопросы: 1 - поскольку объем памяти равен 8, когда я предоставляю один адрес одной командой (запись или чтение) в пользовательском интерфейсе сторона, MIG будет выдавать 8 команд в сторону ddr3, поэтому ширина данных составляет 512 бит (64 * 8 = 512) ПРАВИЛЬНО ЛИ ЭТО ПОНИМАНИЕ?

2 - В 28-битном адресе каждый адрес соответствует 1-байтовому, 8-байтовому (64-битному) или 64-байтовому (512-битному) и как мне увеличить его для достижения следующего местоположения?

Насколько я понимаю, каждому адресу соответствует 1 байт, хотя ширина данных ddr3 составляет 64 бита, и это потому, что имеется 8 чипов, и все получают один и тот же адрес, но каждый получает 8-битную часть 64-битный. и когда каждый из чипов выполняет 8-разрядную передачу, выполняется 512-битная передача. поэтому я запутался в том, как увеличить адрес.

, должно ли оно быть увеличено на 8, так как оно соответствует 1 байту и 8 байтов записано на каждый чип?

или

должно быть увеличено на 64, поскольку в ddr3 записано 64 байта?

1 Ответ

2 голосов
/ 04 февраля 2020

Длина пакета 8 является свойством протокола DDR3 . Это работает так, что вы запрашиваете один адрес и возвращаете 8 слов данных. Таким образом, вы правы, что один пакет даст вам 64 * 8 = 512 бит, но ядро ​​MIG будет отправлять только одну команду на микросхемы DDR (кроме таких вещей, как открытие / закрытие строки).

From То, как вы описываете ситуацию, я предполагаю, что вы используете собственный MIG UI, а не AXI. В этом случае адреса, которые вы отправляете через пользовательский интерфейс MIG, являются фактическими адресными битами, которые go для микросхем DDR. Поскольку у вас 128 миллионов слов, у вас должно быть 27 адресных битов. Но, как вы упомянули, MIG дает вам 28 бит. Дополнительный бит ранга. Это не нужно, потому что у вас есть только один ранг, поэтому этот бит всегда должен быть равен 0. (Это только одна из ошибок / неприятностей MIG.)

При использовании DDR3 и длины пакета 8 вам всегда нужно запрашивать блоки, которые 8 слов выровнены. младшие три бита адреса столбца влияют на порядок возврата 8 слов , что полезно, если вы хотите, чтобы одно из слов вернулось раньше других. Однако, поскольку MIG, в конечном счете, дает вам все слова одновременно, я не уверен, что произойдет, если вы установите их в любое значение, кроме 0.

, когда биты ранга и младших 3 столбцов всегда равны нулю, это оставляет вам 24 бита полезного адресного пространства. Эти 24 бита дают вам доступ к полному пространству 512-битных блоков в вашей 1 Гбайт ОЗУ. Так что да, вы должны увеличить на 8.

...