|
|
  |
DDRx sodimm и FPGA, Теория и практика |
|
|
|
Feb 18 2014, 12:28
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

|
Никогда раньше не доводилось использовать память в (so)dimm исполнении, только в виде отдельных корпусов. И возник следующий вопрос: а как на ходу конфигурируется контроллер под конкретный вставленный DIMM? Допустим я хочу создать проект с универсальным контроллером, который задействует все линии имеющиеся в разъеме, например для DDR3 это dual rank, 8 banks, 16/10 row/col address. Что соответсвует общему объему 8 Гб. После этого вставляю планку на 2Gb. Понятно, что можно прочитать SPD и узнать, что же там реально вставлено, но как потом правильно работать с этой памятью? Или я покупаю партию одинаковых планок, узнаю точно ее конфигурацию после чего собираю проект фиксированно под имющуюся память?
В общем интересно, как в реальности это происходит, как в миру Xilinx, так и Альтеры.
PS Я имею в виду использование стандартных контроллеров.
|
|
|
|
|
Feb 18 2014, 13:32
|
Участник

Группа: Свой
Сообщений: 69
Регистрация: 15-02-14
Из: Кострома
Пользователь №: 80 525

|
По видимому вопрос звучит так "я настроил мой DDR контроллер на определенную конфигурацию SODIMM, а затем вставил SODIMM с другой конфигурацией банков, мой контроллер должен переконфигурироваться "на лету" прочитав информацию из SPD или мне надо вставлять только планки определенной конфигурации в мой SODIMM разъем?" Вы сами должны определить что Вы будете вставлять в SODIMM и прежде чем вставить эту планку в разъем должны джамперами или программно выставить тип планки, с которой будет DDR контроллер. И эту конфигурацию записать в Xilinx до того, как она начнет общаться с планкой памяти. Контроллер может прочитать SPD и ответить, что планка не соответствует тому, что на что Вы его сконфигурировали.
|
|
|
|
|
Feb 18 2014, 13:38
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

|
Цитата(vzelenuk @ Feb 18 2014, 17:32)  По видимому вопрос звучит так "я настроил мой DDR контроллер на определенную конфигурацию SODIMM, а затем вставил SODIMM с другой конфигурацией банков, мой контроллер должен переконфигурироваться "на лету" прочитав информацию из SPD или мне надо вставлять только планки определенной конфигурации в мой SODIMM разъем?" Вы сами должны определить что Вы будете вставлять в SODIMM и прежде чем вставить эту планку в разъем должны джамперами или программно выставить тип планки, с которой будет DDR контроллер. И эту конфигурацию записать в Xilinx до того, как она начнет общаться с планкой памяти. Контроллер может прочитать SPD и ответить, что планка не соответствует тому, что на что Вы его сконфигурировали. Вопрос понят правильно, но. "Записать конфигурацию в Xilinx" я могу только на этапе создания прошивки, ведь штатные контроллеры генерятся со статическим набором параметов - т.е. по сути прошивка под конкретный тип памяти. Я так уловил?
|
|
|
|
|
Feb 18 2014, 13:44
|
Участник

Группа: Свой
Сообщений: 69
Регистрация: 15-02-14
Из: Кострома
Пользователь №: 80 525

|
Цитата(alexadmin @ Feb 18 2014, 17:38)  Вопрос понят правильно, но. "Записать конфигурацию в Xilinx" я могу только на этапе создания прошивки, ведь штатные контроллеры генерятся со статическим набором параметов - т.е. по сути прошивка под конкретный тип памяти. Я так уловил? Да, что касается Xilinx MIG там все конфигурирование происходит в момент генерации IPCore при работе в Coregen. И сгенерированный контроллер нельзя переконфигурировать на другой тип памяти. Если хотите универсальный контроллер, который будет конфигурироваться программно на ходу, наверное Вам придется такой написать самому. Можно сделать так. Генерируете несколько вариантов прошивки для ПЛИС, например Xilinx для разных типов SODIMM модулей. Подключаете SPD шину I2C к какому нибудь микропроцессору, который при подаче питания спрашивает у SODIMM что он там такое. Затем этот микропроцессор по информации из SPD определяет нужную прошивку и заливает ее по параллельному или последовательному интерфейсу в FPGA. Затем перезапуск FPGA и дальше работа с данным SODIMM. Объем прошивок конечно неслабый, но если скажем есть SD карта на борту или микросхема NAND, туда вполне можно закачать два десятка прошивок. Решение конечно тупое, но зато простое в реализации.
Сообщение отредактировал vzelenuk - Feb 18 2014, 17:45
|
|
|
|
|
Nov 19 2015, 13:44
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 30-11-07
Пользователь №: 32 839

|
Я сейчас пытаюсь сделать DDR2 контроллер для SODIMM на Spartan 6 с конфигурацией по SPD. За основу взял дизайн из "Современной электроники" №2 за 2012 г.
Сейчас столкнулся с непонятной проблемой - последнее слово в вычитываемой пачке нулевое! Всегда нулевое, даже если я пишу все 1, то при чтении последнее слово нулевое. Причём, как при BL=4, так и при BL=8. Непонятно, где я накосячить умудрился.
Я что делаю - принятые DQ и DQS одновременно логгирую в BRAM и спокойно рассматриваю. Разумеется, диаграммы в симуляторе совпадают с даташитом JESD79-2F. Пока экспериментирую с AL=0, CL=4. Кто уже работал с DDR2, подскажите, пожалуйста, хоть какую-нибудь идею, куда копать! С микроновской моделькой я, естественно, игрался - с нею в симуляции всё хорошо, хотя она и тормозная и не поддерживает команды OCD Drive 1 и OCD Drive 0, ну да ладно.
Сообщение отредактировал Vitaly_N - Nov 20 2015, 10:07
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|