реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> MicroBlaze + MPMC (контроллер DDR2), примеры, туториалы
AVR
сообщение Nov 5 2012, 00:37
Сообщение #1


фанат 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...


--------------------
Go to the top of the page
 
+Quote Post
Corvus
сообщение Nov 5 2012, 06:24
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 24-04-08
Из: Зеленоград
Пользователь №: 37 056



Так в XPS же понятный и подробный мастер на этот случай есть. Вплоть до того, что кучи чипов памяти готовые настройки, надо только название своей в списке найти. Для примера можно взять какую-нить отладку от Avnet и скачать пример к ней.
Go to the top of the page
 
+Quote Post
Flood
сообщение Nov 5 2012, 13:00
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Есть два пути, первый - попытаться изменить версии IP-ядер в проекте и открыть его в новом ISE/XPS. Возможны осложнения, но 8.00 не такое уж старое ядро.
Второй, более правильный - создать проект с нуля и следовать подсказкам мастеров. У MPMC (MIG) свой большой мастер, где самое скучное - задание распиновки (для Sparten-6 это проще). Таким образом можно самостоятельно воссоздать тестовый проект.
Кроме того, можно создать не PLB-проект с MPMC, а AXI-проект с AXI-контроллером памяти, он вроде поддерживается для S6.
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 5 2012, 17:24
Сообщение #4


фанат Linux'а
*****

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



Цитата(Corvus @ Nov 5 2012, 10:24) *
Так в XPS же понятный и подробный мастер на этот случай есть. Вплоть до того, что кучи чипов памяти готовые настройки, надо только название своей в списке найти. Для примера можно взять какую-нить отладку от Avnet и скачать пример к ней.
как раз смотрю на ютубе сейчас " Xilinx EDK Tutorial - Adding MPMC to an EDK Project"

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

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


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 5 2012, 18:25
Сообщение #5


фанат 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) был лишним? Зачем в туториале показали всё это?

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


--------------------
Go to the top of the page
 
+Quote Post
Flood
сообщение Nov 5 2012, 18:41
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Возможно, п.3. был лишним. Чтобы он был нужен, можно создать процессор без контроллера памяти в п.1. Но лучше просто выбросить шаг 3.
Разночтения возникают только из-за использования разных туториалов.
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 6 2012, 01:14
Сообщение #7


фанат 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 своей программой?


--------------------
Go to the top of the page
 
+Quote Post
Flood
сообщение Nov 6 2012, 05:01
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Насчет кешей не подскажу, т.к. использую только AXI-вариант процессора, там основная шина подключается через кэш (порты IC, DC) и все понятно само собой.
Загрузку программы во внешнюю память должен делать бутлоадер, стартующий из внутренней памяти (BRAM).
Go to the top of the page
 
+Quote Post
akorud
сообщение Nov 6 2012, 19:52
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Присоединяюсь у предыдущему ответу.
SPI бутлоадер нашел из примеров Xilinx, занимает около 10 килобайт, встраивается в BRAM, при старте грузит srec из SPI flash в DDR. Все работает шустро и надежно.
Что касается DDR2 - в варианте AXI надо было в визарде выбрать банк, тип (или переписать из datasheet параметры custom), частоту - и все заработало сразу.
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Nov 7 2012, 09:25
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



А мануал по подключению внешней памяти к MCB Вы прочитали?
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 12 2012, 00:02
Сообщение #11


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

Большое всем спасибо за участие! sm.gif


--------------------
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Nov 27 2012, 09:36
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



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


--------------------
Go to the top of the page
 
+Quote Post
akorud
сообщение Nov 30 2012, 20:59
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 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. Без кэша тормозит жутко.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Dec 5 2012, 15:03
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



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


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Dec 15 2012, 22:42
Сообщение #15


фанат Linux'а
*****

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



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

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


--------------------
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 06:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01539 секунд с 7
ELECTRONIX ©2004-2016