|
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. Без кэша тормозит жутко.
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 3 2013, 20:56
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(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 подключенный параллельно к флеш (вот так прямо электрически) его программирует.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|