|
MicroBlaze + MPMC (контроллер DDR2), примеры, туториалы |
|
|
|
Nov 5 2012, 00:37
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Есть такая 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...
--------------------
|
|
|
|
|
Nov 5 2012, 18:25
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(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) был лишним? Зачем в туториале показали всё это? Пока что не вижу логики во всём этом процессе...
--------------------
|
|
|
|
|
Nov 6 2012, 01:14
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(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 своей программой?
--------------------
|
|
|
|
|
Nov 12 2012, 00:02
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(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 можно получить ошибку которую совершенно не ясно было как решать и чем она вызвана. Большое всем спасибо за участие!
--------------------
|
|
|
|
|
Nov 30 2012, 20:59
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

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