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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> OpenSource DMA for Virtex 5, проект на www.ds-dev.ru
dsmv
сообщение Jul 14 2011, 15:32
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Всем доброго времени суток.

Я открыл исходный код для проекта контроллера PCI Express на ПЛИС Virtex 5;
Проект доступен по адресу: http://www.ds-dev.ru

Проект ещё не завершён. Сейчас мне пришлось опять его отложить. Но ознакомится с ним уже можно.
Работает полная модель системы.

В железе есть недостатки:
1. Не работает прерывание.
2. Есть сбои при частых обращениях к регистрам BAR1
3. Есть сбой при одновременной работе двух каналов DMA

Это всё исправимо.
Меня интересует критический разбор проекта.
Go to the top of the page
 
+Quote Post
SFx
сообщение Jul 14 2011, 18:17
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



добавьте скрипт сборки хотя бы, и туда старт моделирования. просто читать сырцы не очень интересно. example design тоже не повредит.


З.Ы. За опенсурс cheers.gif
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jul 15 2011, 09:40
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(SFx @ Jul 14 2011, 21:17) *
добавьте скрипт сборки хотя бы, и туда старт моделирования. просто читать сырцы не очень интересно. example design тоже не повредит.


Добавил полный архив проекта. http://ds-dev.ru/projects/ds-dma/files
Он под Active-HDL 8.3; В него включены скомпилированные библиотеки проекта. Так что он должен просто запуститься.
В нем также есть несколько временных диаграмм и лог файл.
Файл верхнего уровня: stend_ambpex5_core_m2
Example design есть, это проект ambpex5_v20_sx50t_core
Go to the top of the page
 
+Quote Post
SFx
сообщение Jul 15 2011, 09:43
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



спасибо, на недельке погляжу.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 12 2011, 09:58
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284




Контроллер работает всё лучше и лучше.

Работает ввод и вывод данных. Есть сбои при одновременной работе двух каналов DMA.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 17 2011, 03:33
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(dsmv @ Aug 12 2011, 16:58) *
Контроллер работает всё лучше и лучше.

Работает ввод и вывод данных. Есть сбои при одновременной работе двух каналов DMA.

Под двумя каналами ДМА понимается два потока в противоположных направлениях (один - на запись и один - на чтение), или два канала - это два логических устройства, шарящих шину и работающих в произвольных (возможно совпадающих) направлениях) ?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 17 2011, 07:37
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(Bad0512 @ Aug 17 2011, 06:33) *
Под двумя каналами ДМА понимается два потока в противоположных направлениях (один - на запись и один - на чтение), или два канала - это два логических устройства, шарящих шину и работающих в произвольных (возможно совпадающих) направлениях) ?


Реализовано два независимых двунаправленных канала DMA.
Они могут работать оба в одну сторону или в разные стороны.
Естественно, они разделяют шину.
Контроллер заканчивается 64-х разрядной параллельной шиной. С сигналами запроса DMA.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 17 2011, 14:05
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Есть хорошие новости:
прошло успешное тестирование одновременной работы двух каналов DMA.

1. Два канала на приём. Время тестирования 6 часов. Средняя скорость по каждому каналу 809.1 Мбайт/с
2. Один канал на приём, второй на передачу. Время тестирования 6 часов. Средняя скорость по каждому каналу 574.2 Мбайт/с

На сайте выложил описание управляющих регистров.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 17 2011, 15:38
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 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 бит ДДР, но это
не важно). К ним кое-какие сигналы управления. Всё очень похоже.
Кстати, всё забываю спросить... Откуда ваш контроллер берёт данные на плате и куда их складывает? Наиболее часто ДМА машины цепляют к ДДР контроллеру. На этом стыке,
кстати тоже есть возможность потерять производительность.

Прикрепленные файлы
Прикрепленный файл  GN412x_FlexDMA_sequencer_design_guide_52179_Doc3.pdf ( 447.97 килобайт ) Кол-во скачиваний: 164
Прикрепленный файл  GN412x_FPGA_IP_hardware_design_guide_51860_Doc2.pdf ( 2.89 мегабайт ) Кол-во скачиваний: 1465
 
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Aug 17 2011, 15:52
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(Bad0512 @ Aug 17 2011, 18:09) *
Никогда не понимал смысла в построении многоканальных контроллеров. Если контроллер построен правильно, то он утилизирует шину почти на 100%.
Соответственно когда один из каналов загружает шину, второй в любом случае ждёт пока шина освободится. Есть смысл распараллеливать лишь те операции,
которые могут в одно и то же время независимо работать не мешая друг другу. Например, чтение и запись. В остальных случаях вместо многоканальных движков
логичнее будет навернуть сверху над движком управляющий автомат, а не дублировать логику движка.

В pcie линия запросов одна - на чтение и на запись. Для чтения (памяти ПК) вторая линия. Минимум два канала формирования запросов. При правильном построении контроллера логика не дублируется, формирователь запросов один для всех каналов чтения/записи, приёмник один для всех каналов чтения. В формирователе добавляется только арбитр и мультиплексор по сравнению с одноканальным вариантом, в приёмнике не добавляется ничего, разве что декодер номера канала. Попробуйте сформировать чтение нескольких потоков данных с разной скоростью имея один канал. Думаю, Вас никакой автомат не спасёт. Простой пример такой необходимости - размещение памяти дескрипторов страниц данных в памяти ПК для sgdma передач (размер буфера больше 1 мбайт winda позволяет сделать только так, бесконечное копирование с задействованием цпу во временный буфер не в счёт).
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 18 2011, 04:40
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 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

Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 18 2011, 14:13
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(dsmv @ Aug 18 2011, 11:40) *
Документы посмотрел. У них, также как и остальных разработчиков DMA, используется одиночные дескрипторы для DMA. Это резко ограничивает скорость обмена при работе с фрагментированной памятью.

Если Вы имеете ввиду со стороны памяти хоста, то там - честный scatter-gather, с листами страничек и размером одного ДМА пакета до 4 мегабайт (как раз размер HD картинки).
Если речь идёт о непрерывности со стороны интерфейса в локальную память, то в родном геннумовском интерфейсе всё даже хуже - там не то что адрес менять нельзя, его просто нет, интерфейс заточен на ФИФО. Кстати для ЦАП-АЦП вполне подходит такой вариант. Именно потому, что при обращении к локальной памяти нельзя выставить, а потом на ходу и поменять адрес, я и взялся этот дизайн переписывать. Приделал небольшой списочек дескрипторов для локальной памяти, в моём случае было важно за одну операцию забирать до 8 разных кусков видео-аудио, которые уже лежат в локальной памяти, но имеют разный размер (от 0 до 4 мегабайт) и естественно расположены по почти случайным адресам.
Go to the top of the page
 
+Quote Post
FLTI
сообщение Aug 19 2011, 11:03
Сообщение #13


Местный
***

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



Цитата(Bad0512 @ Aug 17 2011, 19:38) *
Поглядите документы на IP для бриджа GN4121/GN4124.

В документах от Gennum ( в отличии от Xilinx и Altera, которые приводят результаты даже для конкретных материнских плат ) нигде не указаны достижимые скорости передачи данных для GN4121/GN4124.
Если Вы имели дело с GN4121/GN4124, то что можете сказать по поводу достижимых скоростей?
Или же я всё же не заметил, и есть документ , где эти скорости приведены?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 22 2011, 04:46
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 24 2011, 12:39
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Добавлен проект ML605_LX240T_CORE для платы ML605. Там реализован PCI Express v2.0 x4; Работает. Скорости таки же, как и на AMBPEX5.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 10th August 2025 - 01:55
Рейтинг@Mail.ru


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