|
MIG, DDR2 на Spartan 6, напрямую, без Microblaze |
|
|
|
Jan 28 2014, 14:09
|

фанат 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 что может быть быстрым интерфейсом ввода от своей кастомной логики?
--------------------
|
|
|
|
|
Jan 28 2014, 15:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Да ничего сложного! Горздно легче чем собирать ядро линукса из исходников  Для начала посмотрите user guide для выбраного Вами контролера - среди всего ужаса описанного Вами найдется один top модуль который включает в себя все остальные и предоставляет для юзера очень простой интерфейс в пару-тройку сотен линий  Ткже в генерируемых файлах присутствует образец скрипта для синтеза корки. В EDK можно к существующей системе на Microblaze - подключить еще например DMA контроллер и записывать данные в память напрямую. Сам контрллер можно взять гоотовый из EDK, а можно и самому наваять - и подключить к контроллеру DDR через отдельный порт или к AXI interconnect шине. Но в любом случае придется повозится с подключением кучи сигналов - в FPGA без этого увы никак. Успехов! Rob. P.S. вот по теме http://electronix.ru/forum/index.php?showt...=116819&hl=
|
|
|
|
|
Jan 28 2014, 15:46
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 31-07-06
Пользователь №: 19 224

|
Цитата т.е. основной вопрос прост: как осознать результат, вываленный MIG-ом? Инсталируйте файл с названием проекта и расширением ".v", а как его использовать смотрите в файле sim_tb_top, с его иерархией.
|
|
|
|
|
Jan 28 2014, 17:04
|

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

|
Цитата(RobFPGA @ Jan 28 2014, 19:29)  Да ничего сложного! Горздно легче чем собирать ядро линукса из исходников  Собрать Linux это как чай заварить, а с DDR2 не похоже чтобы просто... Цитата В EDK можно к существующей системе на Microblaze - подключить еще например DMA контроллер и записывать данные в память напрямую. У меня мысль такая возникла - я могу ведь подключить к Microblaze двухпортовую BRAM? С внешней стороны подавать, а внутри микроба - считывать и класть в DDR2 (дальше хоть по UART слать, главное без разрывов несколько сот мегабит заглотить)? А может есть специальный компонент FIFO для шины AXI...
--------------------
|
|
|
|
|
Jan 28 2014, 17:07
|
Частый гость
 
Группа: Свой
Сообщений: 85
Регистрация: 5-07-06
Из: Барнаул
Пользователь №: 18 592

|
Цитата(AVR @ Jan 29 2014, 00:04)  У меня мысль такая возникла - я могу ведь подключить к Microblaze двухпортовую BRAM? С внешней стороны подавать, а внутри микроба - считывать и класть в DDR2 (дальше хоть по UART слать, главное без разрывов несколько сот мегабит заглотить)? А микроб успеет такой поток "перекидать"? Цитата А может есть специальный компонент FIFO для шины AXI... Дык вроде есть.
|
|
|
|
|
Jan 28 2014, 18:24
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Feb 13 2014, 12:54
|

фанат 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 как быстрое решение проблемы - хороший вариант?
--------------------
|
|
|
|
|
Feb 13 2014, 15:09
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! А кактус то оказался значительно выше  Цитата(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
|
|
|
|
|
Feb 14 2014, 05:33
|

Участник

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