Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MicroBlaze + MPMC (контроллер DDR2)
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
AVR
Есть такая SK-AT91SAM9G45-XC6SLX платка, на ней верчу MicroBlaze и встроенной в ПЛИС памяти уже не хватает, решил использовать DDR. К платке поставляется демка, на ней есть процессор и DDR2 память работает.

Хотелось бы поинтересоваться, есть ли какое-либо особое специальное руководство по тому как подключать DDR память к MicroBlaze? Ведь это не такой простой процесс, но поиски не увенчались хорошими результатами.

Второй возможный путь - использовать существующий проект как основу, но вопрос - какие файлы отвечают за параметры контроллера DDR? Чтобы можно было подсмотреть их и просто применить у себя. Пока что попытки не увенчались успехом. Сделать самому (не брать готовое, но подсмотреть) желательно, т.к. хочется производить настройки всяких кэшей памятей и прочее...

Сам же исходный рабочий проект не открывается т.к. жалуется на "ERROR:EDK - IPNAME: microblaze, INSTANCE: microblaze_0 - cannot find MPD for the pcore 'microblaze_v8_00_a' in any of the repositories -", видимо в тестовом проекте всё очень старое, потому и есть острая необходимость понять что именно надо смотреть в нем чтобы правильно подключить DDR...
Corvus
Так в XPS же понятный и подробный мастер на этот случай есть. Вплоть до того, что кучи чипов памяти готовые настройки, надо только название своей в списке найти. Для примера можно взять какую-нить отладку от Avnet и скачать пример к ней.
Flood
Есть два пути, первый - попытаться изменить версии IP-ядер в проекте и открыть его в новом ISE/XPS. Возможны осложнения, но 8.00 не такое уж старое ядро.
Второй, более правильный - создать проект с нуля и следовать подсказкам мастеров. У MPMC (MIG) свой большой мастер, где самое скучное - задание распиновки (для Sparten-6 это проще). Таким образом можно самостоятельно воссоздать тестовый проект.
Кроме того, можно создать не PLB-проект с MPMC, а AXI-проект с AXI-контроллером памяти, он вроде поддерживается для S6.
AVR
Цитата(Corvus @ Nov 5 2012, 10:24) *
Так в XPS же понятный и подробный мастер на этот случай есть. Вплоть до того, что кучи чипов памяти готовые настройки, надо только название своей в списке найти. Для примера можно взять какую-нить отладку от Avnet и скачать пример к ней.
как раз смотрю на ютубе сейчас " Xilinx EDK Tutorial - Adding MPMC to an EDK Project"

в самом деле там всё из под вывиха, судя по всему запускается coregen отдельный для MIG, а вот как его связывать с проектом - не сильно ясно

постараюсь найти PDF... помнится что у Nios2 этот процесс был "всё в одном окне", никаких специальных скриптов и прочего лишнего, видимо тут сложнее...
AVR
Цитата(Flood @ Nov 5 2012, 17:00) *
Второй, более правильный - создать проект с нуля и следовать подсказкам мастеров. У MPMC (MIG) свой большой мастер, где самое скучное - задание распиновки (для Sparten-6 это проще). Таким образом можно самостоятельно воссоздать тестовый проект.
Мне не понятны азы...

1) я создал microblaze, доабвил туда I2C UART и заодно MPMC (указал MCB_DDR2)
2) далее, внутри настроек MPMC я указал свой тип памяти (у меня полный аналог MT47H32M16)
3) следуя туториалу от Avnet я отдельно запустил coregen и выбрал там MIG, накликал под свой тип памяти - но что делать с ним дальше? зачем я выполнил пункт 3?

Возможно 3) был лишним? Зачем в туториале показали всё это?

Пока что не вижу логики во всём этом процессе...
Flood
Возможно, п.3. был лишним. Чтобы он был нужен, можно создать процессор без контроллера памяти в п.1. Но лучше просто выбросить шаг 3.
Разночтения возникают только из-за использования разных туториалов.
AVR
Цитата(Flood @ Nov 5 2012, 22:41) *
Возможно, п.3. был лишним. Чтобы он был нужен, можно создать процессор без контроллера памяти в п.1. Но лучше просто выбросить шаг 3.
Спасибо! Заработало!
На скорую руку написал тест, правда медленно работает если и код и данные и стек и heap всё в DDR2 (жаль что heap отдельно от стека не получается установить, ругается) - запись 100000 байт с инкрементным числом и чтение затем (и сверка) занимает одну секунду, медленно...
Но я и этому рад, в самом деле пришлось применять бубен и магические заклинания чтобы всё срослось.

Если можно, несколько вопросов:

1) Как повысить скорость? Очевидно надо добавить как минимум I и D кэши (почему-то при создании процессора с контроллером возникала какая-то ошибка при генерации netlist-а, поэтому решил временно отключить). Можно ли их добавить уже после визарда создания microblaze?

2) Как же инициализировать DDR кодом программы (если использую не только для хранения временных данных а именно кода)? ELF файл в котором ссылается на DDR память (и вообще вне BRAM-ную память) получается залить только через XMD console - тут подробнее кому надо, просто не через GUI делается. В дальнейшем мне потребуется для этих же целей подключать SRAM на платке, на которой ПЛИСина грузится из SPI - bit файл понятно будет там, но как же инициализировать SRAM или DDR своей программой?
Flood
Насчет кешей не подскажу, т.к. использую только AXI-вариант процессора, там основная шина подключается через кэш (порты IC, DC) и все понятно само собой.
Загрузку программы во внешнюю память должен делать бутлоадер, стартующий из внутренней памяти (BRAM).
akorud
Присоединяюсь у предыдущему ответу.
SPI бутлоадер нашел из примеров Xilinx, занимает около 10 килобайт, встраивается в BRAM, при старте грузит srec из SPI flash в DDR. Все работает шустро и надежно.
Что касается DDR2 - в варианте AXI надо было в визарде выбрать банк, тип (или переписать из datasheet параметры custom), частоту - и все заработало сразу.
Koluchiy
А мануал по подключению внешней памяти к MCB Вы прочитали?
AVR
Цитата(akorud @ Nov 6 2012, 23:52) *
Присоединяюсь у предыдущему ответу.
SPI бутлоадер нашел из примеров Xilinx, занимает около 10 килобайт, встраивается в BRAM, при старте грузит srec из SPI flash в DDR. Все работает шустро и надежно.
Что касается DDR2 - в варианте AXI надо было в визарде выбрать банк, тип (или переписать из datasheet параметры custom), частоту - и все заработало сразу.
Спасибо за подсказку, буду смотреть этот бутлоадер - как раз из SPI-ной флэшки надо.

Сделал систему на базе AXI с кэшами и т.д. - теперь и из BRAM и из DDR2 одинаково быстро работает, замерял. Почему-то первый раз были какие-то ошибки которые я побоялся исправить, а сейчас понял что при создании проекта в XPS некоторые порты имеют неправильную ширину, но если их вручную поправить - всё работает корректно.

Кроме того, еще одна проблема, решение которой я нашел тут ввиде ручного редактирования *.xmp файла: How can I make a single-ended clock for microblaze, а если не сделать как там написано вручную то на этапе translate можно получить ошибку которую совершенно не ясно было как решать и чем она вызвана.

Большое всем спасибо за участие! sm.gif
dm.pogrebnoy
А может кто-нибудь сделать скриншоты настроек кэша Микроблейза в случае системы на AXI и скриншот конфигурации системы. А то я что-то этот кэш включил, а скорость вообще не изменилась. Получилось что-то около 10 МБ/c на запись и 20 МБ/c на чтение, вроде бы мало. Память DDR2 400/800 128МБ шина 16 бит.
akorud
Цитата(dm.pogrebnoy @ Nov 27 2012, 10:36) *
А может кто-нибудь сделать скриншоты настроек кэша Микроблейза в случае системы на AXI и скриншот конфигурации системы. А то я что-то этот кэш включил, а скорость вообще не изменилась. Получилось что-то около 10 МБ/c на запись и 20 МБ/c на чтение, вроде бы мало. Память DDR2 400/800 128МБ шина 16 бит.

Вот скриншот нашей системы. Доступ до DDR через кэш такой же быстрый как и до локальной памяти по шине LMB. Без кэша тормозит жутко.
dm.pogrebnoy
Да, я конечно не правильно делал. Сейчас все подключил как надо, поигрался с настройками, получил скорость на последовательном чтении-записи. На запись 477 МБ/с, на чтение 151 МБ/с. От настроек при таком раскладе не сильно зависит скорость. Может быть при случайном доступе будут другие цифры.
AVR
Цитата(dm.pogrebnoy @ Dec 5 2012, 19:03) *
Может быть при случайном доступе будут другие цифры.
от типа кэша зависит, вот в Mircorblaze даже из версий 14.3 I/D кэши "Direct mapped (1-way associative)" - так что при случайном доступе больше чем на размер кэша - обломайзинг (если я правильно впитал содержимое статей объясняющих принцип и строение кэша как такового...)

хотя если совсем случайный доступ, то в любом случае будет черепашка
AVR
Цитата(akorud @ Nov 6 2012, 23:52) *
SPI бутлоадер нашел из примеров Xilinx, занимает около 10 килобайт, встраивается в BRAM, при старте грузит srec из SPI flash в DDR. Все работает шустро и надежно.
Вспомнил эту тему, решил продолжить.

Обнаружил в последних версиях Xilinx SDK в меню Xilinx Tools -> Program Flash и там можно выбрать что куда откуда грузить, некий бутлоадер сидящий в BRAM. Можно это оно же самое, только GUI-фицированное? Там тоже некий SREC формат упоминается.
akorud
Цитата(AVR @ Jan 1 2013, 02:06) *
Вспомнил эту тему, решил продолжить.

Обнаружил в последних версиях Xilinx SDK в меню Xilinx Tools -> Program Flash и там можно выбрать что куда откуда грузить, некий бутлоадер сидящий в BRAM. Можно это оно же самое, только GUI-фицированное? Там тоже некий SREC формат упоминается.

В SDK 14.1 для начала выскочило окно с грозным предупреждением что поддерживаются только x8/x32 после чего логичное сообщение, что поддерживаемого flash memory controller нет в моем дизайне.
Насколько я понял из help - ничего нового. Все построено на предположениях что:
1. В bitstream ROM зашит бутлоадер умеющий скопировать код из флеш в RAM. Xilinx в примерах дает (ЕМНП) варианты для SPI и parallel flash. Можно написать свой.
2. Каким-то чудом ваш код попадет в этот флеш. Причем в формате распознаваемом бутлоадер из п.1. Для примеров Xilinx - SREC. Если напишете свой - любой на ваш вкус. Вот за это чудо Xilinx не отвечает. Приведенный пункт меню - один из вариантов. Аналогично можно через impact (SPI поддерживается). В нашем устройстве - FPGA устанавливается в reset, после чего CPU подключенный параллельно к флеш (вот так прямо электрически) его программирует.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.