Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: DDRx sodimm и FPGA
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
alexadmin
Никогда раньше не доводилось использовать память в (so)dimm исполнении, только в виде отдельных корпусов. И возник следующий вопрос: а как на ходу конфигурируется контроллер под конкретный вставленный DIMM?
Допустим я хочу создать проект с универсальным контроллером, который задействует все линии имеющиеся в разъеме, например для DDR3 это dual rank, 8 banks, 16/10 row/col address. Что соответсвует общему объему 8 Гб. После этого вставляю планку на 2Gb. Понятно, что можно прочитать SPD и узнать, что же там реально вставлено, но как потом правильно работать с этой памятью? Или я покупаю партию одинаковых планок, узнаю точно ее конфигурацию после чего собираю проект фиксированно под имющуюся память?

В общем интересно, как в реальности это происходит, как в миру Xilinx, так и Альтеры.

PS Я имею в виду использование стандартных контроллеров.
vitan
Цитата(alexadmin @ Feb 18 2014, 16:28) *
Понятно, что можно прочитать SPD и узнать, что же там реально вставлено, но как потом правильно работать с этой памятью?

Что значит "потом правильно работать"?
alexadmin
Цитата(vitan @ Feb 18 2014, 17:05) *
Что значит "потом правильно работать"?


Ну как контроллер понимает, что вот в данном конкретном случае надо использовать row addresses =16, single rank, а в другом row addresses =15, dual rank?
vzelenuk
По видимому вопрос звучит так "я настроил мой DDR контроллер на определенную конфигурацию SODIMM, а затем вставил SODIMM с другой конфигурацией банков, мой контроллер должен переконфигурироваться "на лету" прочитав информацию из SPD или мне надо вставлять только планки определенной конфигурации в мой SODIMM разъем?"
Вы сами должны определить что Вы будете вставлять в SODIMM и прежде чем вставить эту планку в разъем должны джамперами или программно выставить тип планки, с которой будет DDR контроллер. И эту конфигурацию записать в Xilinx до того, как она начнет общаться с планкой памяти.
Контроллер может прочитать SPD и ответить, что планка не соответствует тому, что на что Вы его сконфигурировали.
alexadmin
Цитата(vzelenuk @ Feb 18 2014, 17:32) *
По видимому вопрос звучит так "я настроил мой DDR контроллер на определенную конфигурацию SODIMM, а затем вставил SODIMM с другой конфигурацией банков, мой контроллер должен переконфигурироваться "на лету" прочитав информацию из SPD или мне надо вставлять только планки определенной конфигурации в мой SODIMM разъем?"
Вы сами должны определить что Вы будете вставлять в SODIMM и прежде чем вставить эту планку в разъем должны джамперами или программно выставить тип планки, с которой будет DDR контроллер. И эту конфигурацию записать в Xilinx до того, как она начнет общаться с планкой памяти.
Контроллер может прочитать SPD и ответить, что планка не соответствует тому, что на что Вы его сконфигурировали.


Вопрос понят правильно, но. "Записать конфигурацию в Xilinx" я могу только на этапе создания прошивки, ведь штатные контроллеры генерятся со статическим набором параметов - т.е. по сути прошивка под конкретный тип памяти. Я так уловил?
vzelenuk
Цитата(alexadmin @ Feb 18 2014, 17:38) *
Вопрос понят правильно, но. "Записать конфигурацию в Xilinx" я могу только на этапе создания прошивки, ведь штатные контроллеры генерятся со статическим набором параметов - т.е. по сути прошивка под конкретный тип памяти. Я так уловил?


Да, что касается Xilinx MIG там все конфигурирование происходит в момент генерации IPCore при работе в Coregen. И сгенерированный контроллер нельзя переконфигурировать на другой тип памяти. Если хотите универсальный контроллер, который будет конфигурироваться программно на ходу, наверное Вам придется такой написать самому.

Можно сделать так. Генерируете несколько вариантов прошивки для ПЛИС, например Xilinx для разных типов SODIMM модулей. Подключаете SPD шину I2C к какому нибудь микропроцессору, который при подаче питания спрашивает у SODIMM что он там такое. Затем этот микропроцессор по информации из SPD определяет нужную прошивку и заливает ее по параллельному или последовательному интерфейсу в FPGA. Затем перезапуск FPGA и дальше работа с данным SODIMM. Объем прошивок конечно неслабый, но если скажем есть SD карта на борту или микросхема NAND, туда вполне можно закачать два десятка прошивок. Решение конечно тупое, но зато простое в реализации.
Vitaly_N
Я сейчас пытаюсь сделать 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, ну да ладно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.