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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> MIG, DDR2 на Spartan 6, напрямую, без Microblaze
AVR
сообщение Jan 28 2014, 14:09
Сообщение #1


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

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



У меня есть плата со Spartan 6 и DDR2, и через Microblaze мне было относительно просто заставить работать DDR2, т.е. железо рабочее. Но как то же самое сделать без микроба?

Я выполнил генерацию (coregen) с помощью MIG точно так же как я это делал когда-то для Microblaze, и вижу кучу файлов, а сгенерированных файлов - десятки, куча .v-файлов, десятки сотни линий... Как в этом сориентироваться? Ожидал что раз DDR2-контроллер есть - то он всё делает, а пользователю даёт простой интерфейс, чтобы он голову не ломал...

т.е. основной вопрос прост: как осознать результат, вываленный MIG-ом? Я просто в шоке и не верю что осознаю как это делать, а нормальный туториал гуглением не попался.

Другой вопрос состоит в том, а что если я возьму Microblaze с его работающим DDR2?
Мне необходимо закачать несколько пару секунд потока "без единого разрыва" около 300 Мбит/с, напрямую в DDR2 я может и закачаю столько, но в случае Microblaze что может быть быстрым интерфейсом ввода от своей кастомной логики?


--------------------
Go to the top of the page
 
+Quote Post
lemorus
сообщение Jan 28 2014, 15:17
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 22-01-14
Из: Нижний Новгород
Пользователь №: 80 151



Насколько я знаю, Вам нужен проект работы с DDR2 коркой. По моему нечто похожее было в референс на Virtex4. Вам понадобится проект и тестбенч. Ну и возможно кто нибудь скинет сюда исходники проекта работы с DDR2. Буфер на DDR2 не такой уж архисложный проект по идее, и довольно распространен в узких кругах sm.gif


Сообщение отредактировал lemorus - Jan 28 2014, 15:19
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jan 28 2014, 15:29
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Да ничего сложного! Горздно легче чем собирать ядро линукса из исходников sm.gif

Для начала посмотрите user guide для выбраного Вами контролера - среди всего ужаса описанного Вами найдется один top модуль который включает в себя все остальные и предоставляет для юзера очень простой интерфейс в пару-тройку сотен линий wink.gif

Ткже в генерируемых файлах присутствует образец скрипта для синтеза корки.

В EDK можно к существующей системе на Microblaze - подключить еще например DMA контроллер и записывать данные в память напрямую. Сам контрллер можно взять гоотовый из EDK, а можно и самому наваять - и подключить к контроллеру DDR через отдельный порт или к AXI interconnect шине.
Но в любом случае придется повозится с подключением кучи сигналов - в FPGA без этого увы никак.

Успехов! Rob.

P.S. вот по теме http://electronix.ru/forum/index.php?showt...=116819&hl=
Go to the top of the page
 
+Quote Post
slawikg
сообщение Jan 28 2014, 15:46
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 31-07-06
Пользователь №: 19 224



Цитата
т.е. основной вопрос прост: как осознать результат, вываленный MIG-ом?

Инсталируйте файл с названием проекта и расширением ".v", а как его использовать смотрите в файле sim_tb_top, с его иерархией.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 28 2014, 17:04
Сообщение #5


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

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



Цитата(RobFPGA @ Jan 28 2014, 19:29) *
Да ничего сложного! Горздно легче чем собирать ядро линукса из исходников sm.gif

Собрать Linux это как чай заварить, а с DDR2 не похоже чтобы просто...

Цитата
В EDK можно к существующей системе на Microblaze - подключить еще например DMA контроллер и записывать данные в память напрямую.

У меня мысль такая возникла - я могу ведь подключить к Microblaze двухпортовую BRAM? С внешней стороны подавать, а внутри микроба - считывать и класть в DDR2 (дальше хоть по UART слать, главное без разрывов несколько сот мегабит заглотить)? А может есть специальный компонент FIFO для шины AXI...


--------------------
Go to the top of the page
 
+Quote Post
NahaL
сообщение Jan 28 2014, 17:07
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 5-07-06
Из: Барнаул
Пользователь №: 18 592



Цитата(AVR @ Jan 29 2014, 00:04) *
У меня мысль такая возникла - я могу ведь подключить к Microblaze двухпортовую BRAM? С внешней стороны подавать, а внутри микроба - считывать и класть в DDR2 (дальше хоть по UART слать, главное без разрывов несколько сот мегабит заглотить)?

А микроб успеет такой поток "перекидать"?
Цитата
А может есть специальный компонент FIFO для шины AXI...

Дык вроде есть.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 28 2014, 17:28
Сообщение #7


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

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



Цитата(NahaL @ Jan 28 2014, 21:07) *
А микроб успеет такой поток "перекидать"?
Дык вроде есть.

Примитивный рачет показывает мне что 300*10^6 / 32 бит = ~10 млн. операций "туда-сюда", около десяти тактов на каждое перемещение. Я опасаюсь что таки не хватит... На Spartan 6 я больше чем 100 МГц от микроба не выжму, поэтому наверное всё же лучше няпрямую с DDR2 разбираться...


--------------------
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jan 28 2014, 18:24
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(AVR @ Jan 28 2014, 19:28) *
Примитивный рачет показывает мне что 300*10^6 / 32 бит = ~10 млн. операций "туда-сюда", около десяти тактов на каждое перемещение. Я опасаюсь что таки не хватит... На Spartan 6 я больше чем 100 МГц от микроба не выжму, поэтому наверное всё же лучше няпрямую с DDR2 разбираться...



Тяга к знаниям похвальна но для получения результата Вы лучше с DMA разбирайтесь - подключите в EDK к рабочей системе на Miicroblaze axi_dma_* и будет Вам простой интерфейс для записи потока данных в память (и даже для чтения из оной).

Успехов! Rob.
Go to the top of the page
 
+Quote Post
count_enable
сообщение Jan 28 2014, 18:25
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Сделайте систему на AXI4 DMA и свою корку на AXI Stream. Или сделайте свою корку на AXI4 Master, если длина бёрста в 256 слов достаточна. Тогда надо будет разобраться только с шиной, она в разы проще чем MIG.
Go to the top of the page
 
+Quote Post
lemorus
сообщение Jan 28 2014, 19:38
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 22-01-14
Из: Нижний Новгород
Пользователь №: 80 151



Вот ссылка на референс дизайн буфера для видеопотока на DDR2 на Spartan3AN
http://www.xilinx.com/support/documentatio...tes/xapp458.pdf
http://www.xilinx.com/support/documentatio...tes/xapp458.zip

И прикрепил xapp702, еле нашел сам дизайн, DDR2 на Virtex4. Подробно не смотрел.

Мельком пробегал дизайн на SP605 плату, точно видел на DDR3, но вроде как есть и на DDR2.

Сообщение отредактировал lemorus - Jan 28 2014, 19:56
Прикрепленные файлы
Прикрепленный файл  xapp702.pdf ( 305.93 килобайт ) Кол-во скачиваний: 28
Прикрепленный файл  xapp702.zip ( 49.6 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 28 2014, 19:59
Сообщение #11


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

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



Цитата(lemorus @ Jan 28 2014, 23:38) *
Вот ссылка на референс дизайн буфера для видеопотока на DDR2 на Spartan3AN
Мельком пробегал дизайн на SP605 плату, точно видел на DDR3, но вроде как есть и на DDR2.

Спасибо!
Обязательно отпишусь когда что-то получится, чтобы другим кому интересно тоже было всё понятно.


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Feb 13 2014, 12:54
Сообщение #12


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

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



Докладываю, временно не было программатора, а теперь попробовал.

Код
    int count = 0;
    while(true)
    {
        int sz = (64 * 1024 * 1024) / 8;
        xil_printf("\n\r----- %d\n\r", count++);
        u64 *ddr2 = (u64*) XPAR_MCB_DDR2_S0_AXI_BASEADDR;
        for(int i = 0; i < sz; i++) ddr2[i] = 0xAABBCCDD;
    }
    return 0;


Между ----- проходит 2.75 секунды на запись 64 Мб - это 24.4*10^6 байт/с, используется кэширование, память с 16-битным интерфейсом.

Прежде чем городить DMA, я бы поинтересовался - я смогу выжать больше чем жалкие 24 Мбайт/с? Или это предел?

P.S.
Думаю задействовать http://xillybus.com как быстрое решение проблемы - хороший вариант?


--------------------
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Feb 13 2014, 15:09
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

А кактус то оказался значительно выше sad.gif

Цитата(AVR @ Feb 13 2014, 14:54) *
Докладываю, временно не было программатора, а теперь попробовал.
...
Между ----- проходит 2.75 секунды на запись 64 Мб - это 24.4*10^6 байт/с, используется кэширование, память с 16-битным интерфейсом.

Прежде чем городить DMA, я бы поинтересовался - я смогу выжать больше чем жалкие 24 Мбайт/с? Или это предел?


Сможете! для 16 бит 400MHz DDR2 как минимум в 60 раз больше. Это если все же будете пересылать данные через стандартный axi_dma или axi_cdma контроллеры.

Цитата(AVR @ Feb 13 2014, 14:54) *
P.S.
Думаю задействовать http://xillybus.com как быстрое решение проблемы - хороший вариант?


Ответ на этот вопрос зависит в первую очередь от толщины Вашего кошелька.

Успехов! Rob



Go to the top of the page
 
+Quote Post
mr.alexeevas
сообщение Feb 14 2014, 05:33
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668



Цитата(AVR @ Jan 28 2014, 18:09) *
У меня есть плата со Spartan 6 и DDR2, и через Microblaze мне было относительно просто заставить работать DDR2, т.е. железо рабочее. Но как то же самое сделать без микроба?

Я выполнил генерацию (coregen) с помощью MIG точно так же как я это делал когда-то для Microblaze, и вижу кучу файлов, а сгенерированных файлов - десятки, куча .v-файлов, десятки сотни линий... Как в этом сориентироваться? Ожидал что раз DDR2-контроллер есть - то он всё делает, а пользователю даёт простой интерфейс, чтобы он голову не ломал...


Недавно занимался тем же самым. Необходимо было записать в память как можно больше и быстрее, а потом медленно считать. Правда я работал с VHDL, а top-level собирал в схематике.

Для теста использовал счетчик который работал с частотой 40 МГц и на каждый такт он выдавал по 8 бит (1 байт), можно было конечно и 32 бита, на записи бы это никак не отразилось. Все прекрасно работает если учесть все прерывания которые выдает DDR. Главное было написать машину состояний, чтобы грамотно управлять потоком данных и памятью.

Если будут конкретные вопросы пишите, чем смогу помогу wink.gif
Go to the top of the page
 
+Quote Post
Mad Makc
сообщение Feb 14 2014, 07:05
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 2-10-04
Из: Мухосранска
Пользователь №: 763



А вот скажите- у вас DDR2 один корпус стоит на плате? Если да, то используются ли терминирующие резисторы? А то логика подсказывает, что они вроде как не нужны( соединение точка-точка), однако в явном виде это нигде прочитать не удалось. Может, конечно не там читал?
Go to the top of the page
 
+Quote Post

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

 


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


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