Перейти к содержанию
    

MicroBlaze + MPMC (контроллер DDR2)

Есть такая 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...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так в XPS же понятный и подробный мастер на этот случай есть. Вплоть до того, что кучи чипов памяти готовые настройки, надо только название своей в списке найти. Для примера можно взять какую-нить отладку от Avnet и скачать пример к ней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть два пути, первый - попытаться изменить версии IP-ядер в проекте и открыть его в новом ISE/XPS. Возможны осложнения, но 8.00 не такое уж старое ядро.

Второй, более правильный - создать проект с нуля и следовать подсказкам мастеров. У MPMC (MIG) свой большой мастер, где самое скучное - задание распиновки (для Sparten-6 это проще). Таким образом можно самостоятельно воссоздать тестовый проект.

Кроме того, можно создать не PLB-проект с MPMC, а AXI-проект с AXI-контроллером памяти, он вроде поддерживается для S6.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так в XPS же понятный и подробный мастер на этот случай есть. Вплоть до того, что кучи чипов памяти готовые настройки, надо только название своей в списке найти. Для примера можно взять какую-нить отладку от Avnet и скачать пример к ней.
как раз смотрю на ютубе сейчас " Xilinx EDK Tutorial - Adding MPMC to an EDK Project"

 

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

 

постараюсь найти PDF... помнится что у Nios2 этот процесс был "всё в одном окне", никаких специальных скриптов и прочего лишнего, видимо тут сложнее...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Второй, более правильный - создать проект с нуля и следовать подсказкам мастеров. У MPMC (MIG) свой большой мастер, где самое скучное - задание распиновки (для Sparten-6 это проще). Таким образом можно самостоятельно воссоздать тестовый проект.
Мне не понятны азы...

 

1) я создал microblaze, доабвил туда I2C UART и заодно MPMC (указал MCB_DDR2)

2) далее, внутри настроек MPMC я указал свой тип памяти (у меня полный аналог MT47H32M16)

3) следуя туториалу от Avnet я отдельно запустил coregen и выбрал там MIG, накликал под свой тип памяти - но что делать с ним дальше? зачем я выполнил пункт 3?

 

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

 

Пока что не вижу логики во всём этом процессе...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно, п.3. был лишним. Чтобы он был нужен, можно создать процессор без контроллера памяти в п.1. Но лучше просто выбросить шаг 3.

Разночтения возникают только из-за использования разных туториалов.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно, п.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 своей программой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчет кешей не подскажу, т.к. использую только AXI-вариант процессора, там основная шина подключается через кэш (порты IC, DC) и все понятно само собой.

Загрузку программы во внешнюю память должен делать бутлоадер, стартующий из внутренней памяти (BRAM).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяюсь у предыдущему ответу.

SPI бутлоадер нашел из примеров Xilinx, занимает около 10 килобайт, встраивается в BRAM, при старте грузит srec из SPI flash в DDR. Все работает шустро и надежно.

Что касается DDR2 - в варианте AXI надо было в визарде выбрать банк, тип (или переписать из datasheet параметры custom), частоту - и все заработало сразу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяюсь у предыдущему ответу.

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 можно получить ошибку которую совершенно не ясно было как решать и чем она вызвана.

 

Большое всем спасибо за участие! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может кто-нибудь сделать скриншоты настроек кэша Микроблейза в случае системы на AXI и скриншот конфигурации системы. А то я что-то этот кэш включил, а скорость вообще не изменилась. Получилось что-то около 10 МБ/c на запись и 20 МБ/c на чтение, вроде бы мало. Память DDR2 400/800 128МБ шина 16 бит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может кто-нибудь сделать скриншоты настроек кэша Микроблейза в случае системы на AXI и скриншот конфигурации системы. А то я что-то этот кэш включил, а скорость вообще не изменилась. Получилось что-то около 10 МБ/c на запись и 20 МБ/c на чтение, вроде бы мало. Память DDR2 400/800 128МБ шина 16 бит.

Вот скриншот нашей системы. Доступ до DDR через кэш такой же быстрый как и до локальной памяти по шине LMB. Без кэша тормозит жутко.

post-60842-1354308960_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, я конечно не правильно делал. Сейчас все подключил как надо, поигрался с настройками, получил скорость на последовательном чтении-записи. На запись 477 МБ/с, на чтение 151 МБ/с. От настроек при таком раскладе не сильно зависит скорость. Может быть при случайном доступе будут другие цифры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть при случайном доступе будут другие цифры.
от типа кэша зависит, вот в Mircorblaze даже из версий 14.3 I/D кэши "Direct mapped (1-way associative)" - так что при случайном доступе больше чем на размер кэша - обломайзинг (если я правильно впитал содержимое статей объясняющих принцип и строение кэша как такового...)

 

хотя если совсем случайный доступ, то в любом случае будет черепашка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...