|
OpenSource DMA for Virtex 5, проект на www.ds-dev.ru |
|
|
|
Jul 14 2011, 15:32
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Всем доброго времени суток. Я открыл исходный код для проекта контроллера PCI Express на ПЛИС Virtex 5; Проект доступен по адресу: http://www.ds-dev.ruПроект ещё не завершён. Сейчас мне пришлось опять его отложить. Но ознакомится с ним уже можно. Работает полная модель системы. В железе есть недостатки: 1. Не работает прерывание. 2. Есть сбои при частых обращениях к регистрам BAR1 3. Есть сбой при одновременной работе двух каналов DMA Это всё исправимо. Меня интересует критический разбор проекта.
|
|
|
|
|
 |
Ответов
|
Aug 17 2011, 07:37
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Цитата(Bad0512 @ Aug 17 2011, 06:33)  Под двумя каналами ДМА понимается два потока в противоположных направлениях (один - на запись и один - на чтение), или два канала - это два логических устройства, шарящих шину и работающих в произвольных (возможно совпадающих) направлениях) ? Реализовано два независимых двунаправленных канала DMA. Они могут работать оба в одну сторону или в разные стороны. Естественно, они разделяют шину. Контроллер заканчивается 64-х разрядной параллельной шиной. С сигналами запроса DMA.
|
|
|
|
|
Aug 17 2011, 15:38
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(dsmv @ Aug 17 2011, 14:37)  Реализовано два независимых двунаправленных канала DMA. Они могут работать оба в одну сторону или в разные стороны. Естественно, они разделяют шину. Контроллер заканчивается 64-х разрядной параллельной шиной. С сигналами запроса DMA. Никогда не понимал смысла в построении многоканальных контроллеров. Если контроллер построен правильно, то он утилизирует шину почти на 100%. Соответственно когда один из каналов загружает шину, второй в любом случае ждёт пока шина освободится. Есть смысл распараллеливать лишь те операции, которые могут в одно и то же время независимо работать не мешая друг другу. Например, чтение и запись. В остальных случаях вместо многоканальных движков логичнее будет навернуть сверху над движком управляющий автомат, а не дублировать логику движка. Цитата(dsmv @ Aug 17 2011, 21:05)  Есть хорошие новости: прошло успешное тестирование одновременной работы двух каналов DMA.
1. Два канала на приём. Время тестирования 6 часов. Средняя скорость по каждому каналу 809.1 Мбайт/с 2. Один канал на приём, второй на передачу. Время тестирования 6 часов. Средняя скорость по каждому каналу 574.2 Мбайт/с
На сайте выложил описание управляющих регистров. Поглядите документы на IP для бриджа GN4121/GN4124. Там есть некоторые интересные идеи, часть из них я реализовал в своём контроллере. А кое-что наоборот убрал. В общем, довольно интересно наблюдать как одну и ту же задачу решают разные люди. Бридж геннумовский в общем и целом не сильно от коры Ксайлинкса отличается - также торчат в обе стороны две шины данных (в данном случае они 16 бит ДДР, но это не важно). К ним кое-какие сигналы управления. Всё очень похоже. Кстати, всё забываю спросить... Откуда ваш контроллер берёт данные на плате и куда их складывает? Наиболее часто ДМА машины цепляют к ДДР контроллеру. На этом стыке, кстати тоже есть возможность потерять производительность.
|
|
|
|
|
Aug 18 2011, 04:40
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Цитата(Bad0512 @ Aug 17 2011, 18:38)  Никогда не понимал смысла в построении многоканальных контроллеров. Если контроллер построен правильно, то он утилизирует шину почти на 100%. Соответственно когда один из каналов загружает шину, второй в любом случае ждёт пока шина освободится. Есть смысл распараллеливать лишь те операции, которые могут в одно и то же время независимо работать не мешая друг другу. Например, чтение и запись. В остальных случаях вместо многоканальных движков логичнее будет навернуть сверху над движком управляющий автомат, а не дублировать логику движка. Смысл есть. Контроллер разрабатывается под специфику нашей компании - а именно подключение АЦП и ЦАП. Двухканальный и двунаправленный контроллер позволяет закрыть большинство задач. В частности одновременный ввод из АЦП и вывод в ЦАП, или ввод двух независимых потоков от АЦП. Цитата(Bad0512 @ Aug 17 2011, 18:38)  Поглядите документы на IP для бриджа GN4121/GN4124. Там есть некоторые интересные идеи, часть из них я реализовал в своём контроллере. А кое-что наоборот убрал. В общем, довольно интересно наблюдать как одну и ту же задачу решают разные люди. Бридж геннумовский в общем и целом не сильно от коры Ксайлинкса отличается - также торчат в обе стороны две шины данных (в данном случае они 16 бит ДДР, но это не важно). К ним кое-какие сигналы управления. Всё очень похоже. Документы посмотрел. У них, также как и остальных разработчиков DMA, используется одиночные дескрипторы для DMA. Это резко ограничивает скорость обмена при работе с фрагментированной памятью. Цитата(Bad0512 @ Aug 17 2011, 18:38)  Кстати, всё забываю спросить... Откуда ваш контроллер берёт данные на плате и куда их складывает? Наиболее часто ДМА машины цепляют к ДДР контроллеру. На этом стыке, кстати тоже есть возможность потерять производительность. Потерять производительность можно везде. По поводу подключения, есть компонент pcie_core64_m1 - http://src.ds-dev.ru/projects/ds_dma/core/...core64__m1.htmlЭто собственно контроллер, он имеет пакетную шину PB_BUS, которая реализована на двух сигналах pb_master и pb_slave; Выше по иерархии компонент pcie_core64_m2 - http://src.ds-dev.ru/projects/ds_dma/core/...core64__m2.htmlОн уже имеет нормальную 64-х разрядную синхронную параллельную шину. Тестовый проект выполнен как проект ADMPRO. В нём реализован узел подключения к тетрадам cl_ambpex5_m2 - http://src.ds-dev.ru/projects/ds_dma/ambpe...mbpex5__m5.htmlи собственно тетрады: TRD_MAIN TRD_DIO64_IN TRD_DIO64_OUT TRD_TEST_CTRL Подробнее о интерфейсе ADMPRO можно прочитать на сайте "ИнСиС" - http://insys.ru/docВ тетраде TRD_TEST_CTRL реализован узел формирования тестовой последовательности- cl_test_generate и узел проверки тестовой последовательности - cl_test_checkВ итоге cl_test_generate формирует тестовую последовательность, программа на компьютере её проверяет. Или наоборот, программа формирует тестовую последовательность, а узел cl_test_check её проверяет. В тетраде MAIN также есть узел формирования псевдослучайной последовательности. В тесте двух каналов на приём используется два источника - тетрада MAIN и тетрада TEST_CTRL
|
|
|
|
|
Aug 18 2011, 14:13
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(dsmv @ Aug 18 2011, 11:40)  Документы посмотрел. У них, также как и остальных разработчиков DMA, используется одиночные дескрипторы для DMA. Это резко ограничивает скорость обмена при работе с фрагментированной памятью. Если Вы имеете ввиду со стороны памяти хоста, то там - честный scatter-gather, с листами страничек и размером одного ДМА пакета до 4 мегабайт (как раз размер HD картинки). Если речь идёт о непрерывности со стороны интерфейса в локальную память, то в родном геннумовском интерфейсе всё даже хуже - там не то что адрес менять нельзя, его просто нет, интерфейс заточен на ФИФО. Кстати для ЦАП-АЦП вполне подходит такой вариант. Именно потому, что при обращении к локальной памяти нельзя выставить, а потом на ходу и поменять адрес, я и взялся этот дизайн переписывать. Приделал небольшой списочек дескрипторов для локальной памяти, в моём случае было важно за одну операцию забирать до 8 разных кусков видео-аудио, которые уже лежат в локальной памяти, но имеют разный размер (от 0 до 4 мегабайт) и естественно расположены по почти случайным адресам.
|
|
|
|
|
Aug 22 2011, 04:46
|
Местный
  
Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284

|
Цитата(Bad0512 @ Aug 18 2011, 17:13)  Если Вы имеете ввиду со стороны памяти хоста, то там - честный scatter-gather, с листами страничек и размером одного ДМА пакета до 4 мегабайт (как раз размер HD картинки). Я хочу обратить внимание как раз на честный scatter-gather. Во всех известных мне IP Core, а именно Xilinx, PLDA, Northwest Logic, Synopsys, Intensys, а также в микросхемах PLX используются одиночные дескрипторы. Т.е. для одного блока памяти используется один дескриптор. Алгоритм работы: DMA читает один дескриптор и производит обмен с одним блоком. Если размер блока большой, например 1 Мбайт, то всё замечательно. Но проблема в том, что выделить 1.5 Гбайта можно только в USER MEMORY. А там память выделяется страницами по 4 килобайта. И получаются большие потери, так как дескриптор читается для блока в 4 килобайта. В моём контроллере дескрипторы объеденены в блок, за одну операцию происходит чтение блока в котором 63 дескриптора. Потери производительности на чтение дескрипторов минимальны. А если дескрипторов меньше 63 - то всё работает из памяти и потерь нет. Интересное решение в DMA от Intensys. Там дескрипторы расположены в локальной памяти ПЛИС. Потерь на чтение нет, но большой блок в фрагментированной памяти разместить нельзя - не хватит памяти ПЛИС. Со стороны локальной шины у меня DMA работает по фиксированному адресу, предполагается что там расположено FIFO.
|
|
|
|
Сообщений в этой теме
dsmv OpenSource DMA for Virtex 5 Jul 14 2011, 15:32 SFx добавьте скрипт сборки хотя бы, и туда старт модел... Jul 14 2011, 18:17 dsmv Цитата(SFx @ Jul 14 2011, 21:17) добавьте... Jul 15 2011, 09:40    dsmv Есть хорошие новости:
прошло успешное тестирование... Aug 17 2011, 14:05     dmitry-tomsk Цитата(Bad0512 @ Aug 17 2011, 18:09) Нико... Aug 17 2011, 15:52          mhspace Цитата(dsmv @ Aug 30 2011, 13:41) Файлы с... Aug 31 2011, 14:49          Kuzmi4 Цитата(dsmv @ Aug 30 2011, 13:41) ...
2. ... Aug 31 2011, 14:55           dsmv Вот фрагмент отчета для проекта ambpex5_v20_sx50t_... Sep 1 2011, 08:09     FLTI Цитата(Bad0512 @ Aug 17 2011, 19:38) Погл... Aug 19 2011, 11:03 Kuzmi4 Вот бы ещё описалово какое-никакое к сорцам (хотя ... Sep 1 2011, 16:35 dsmv Цитата(Kuzmi4 @ Sep 1 2011, 19:35) Вот бы... Sep 2 2011, 08:39 Kuzmi4 2 dsmv
То есть, если я правильно понял, на данный ... Sep 2 2011, 11:04 dsmv Цитата(Kuzmi4 @ Sep 2 2011, 14:04) 2 dsmv... Sep 2 2011, 12:35  dsmv Готов проект для SP605. На модели работает. Теперь... Sep 2 2011, 15:18 Kuzmi4 2 dsmv
Для тестов могу взять систему с AMD Athlon6... Sep 2 2011, 16:31 dsmv Это не горит. Вторник тоже подойдет.
Прошивка и д... Sep 2 2011, 19:34 Kuzmi4 2 dsmv
Просмотрел файлы. Возник вопрос касательно ... Sep 6 2011, 13:21 Kuzmi4 Результаты (система: AMD Athlon64 3000+, 1536 MB R... Sep 6 2011, 15:46 dsmv Цитата(Kuzmi4 @ Sep 6 2011, 18:46) резюми... Sep 6 2011, 16:18 Kuzmi4 2 dsmv
да , провтыкал я со спидгрейдом: Spartan®-6... Sep 6 2011, 16:28 dsmv Нет, частота локальной шины ядра 62.5 Мгц - 16 нс.... Sep 6 2011, 17:00  dsmv Есть новая информация. Проект SP605_LX45T_CORE усп... Sep 13 2011, 08:42 Jack_of_Shadows Добрый день! Пишет вам благодарный, но немного... Dec 28 2012, 14:12 dsmv Спасибо за интерес к моему проекту. Тест работает ... Jan 11 2013, 13:14 Kuzmi4 2 Jack_of_Shadows
Есть версия для вишбона, или вас... Jan 5 2013, 19:29 Jack_of_Shadows Kuzmi4, да-да, видел, на данном этапе мне это не о... Jan 6 2013, 10:07 Kuzmi4 2 Jack_of_Shadows
А куда проще ? Времянки на WB до... Jan 6 2013, 10:14 Jack_of_Shadows Kuzmi4,
я хотел сказать что вокруг PCIE_CORE64_M1 ... Jan 7 2013, 18:25 Jack_of_Shadows И еще, может я конечно начинаю не с той стороны, н... Jan 9 2013, 15:08 Jack_of_Shadows ЦитатаЕсть возможность проверить работу на компьют... Jan 14 2013, 08:10 Kuzmi4 2 Jack_of_Shadows
удалось побороть ошибку ? Систем... Jan 17 2013, 07:37 Jack_of_Shadows Kuzmi4
пока нет. Управляющие регистры доступны, яв... Jan 17 2013, 08:31 karak Цитата(Jack_of_Shadows @ Jan 17 2013, 12... Jan 17 2013, 09:33 karak Цитата(Jack_of_Shadows @ Jan 17 2013, 12... Jan 17 2013, 10:11 Jack_of_Shadows karak
Код Device information
m_TotalIRQ = 0
... Jan 17 2013, 09:40 Jack_of_Shadows Цитатау вас 64 битная linux система или 32?
64 бит... Jan 17 2013, 10:16 dsmv Цитата(Jack_of_Shadows @ Jan 17 2013, 13... Jan 17 2013, 10:50  karak Цитата(dsmv @ Jan 17 2013, 14:50) FIDO_ID... Jan 17 2013, 15:04 Jack_of_Shadows karak,
мне советовали по поводу проги к вам обраща... Jan 21 2013, 12:19 karak В функции ошибка, из за которой всегда данные ввод... Jan 28 2013, 10:52 Jack_of_Shadows Всё руки не доходили написать по поводу 64-битного... Mar 22 2013, 07:23 StrangerX Доброго времени суток.
Пытаюсь запустить ваше ядро... Nov 20 2013, 07:03 StrangerX И ещё ничего не понял про NEXT_BLOCK.
Как я понял... Nov 20 2013, 10:50 dsmv В памяти компьютера создаётся блок 64*8=512 байт -... Nov 25 2013, 15:58  StrangerX Цитата(dsmv @ Nov 25 2013, 19:58) По пово... Dec 12 2013, 13:32   dsmv Цитата(StrangerX @ Dec 12 2013, 16:32) Сп... Dec 21 2013, 05:26    dsmv Всем доброго времени суток.
Вот хочу спросить, к... Jan 15 2014, 11:37 Antonx86 Добрый день!
Имеется желание запустить проект ... Feb 10 2014, 05:15 dsmv Добрый день.
Давайте сделаем. Я посмотрю на AC701... Feb 11 2014, 11:15  dsmv Собрал проект AC701_A200T_CORE. Пока есть проблемы... Feb 18 2014, 06:58 Antonx86 dsmv, добрый день,
в http://ds-dev.ru/issues/65 о... Mar 12 2014, 05:54 dsmv Настройки нормальные. Хотя у меня есть некоторые о... Mar 12 2014, 09:46  dsmv Проверил с ядром от ISE 14.7 - не работает.
Пробл... Mar 17 2014, 12:59 Antonx86 dsmv, добрый день,
измеряли ли Вы скорость обмена ... Jun 10 2014, 00:32 dsmv Цитата(Antonx86 @ Jun 10 2014, 03:32) dsm... Jun 20 2014, 13:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|