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

 
 
> 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
 
Start new topic
Ответов
SFx
сообщение Jul 15 2011, 09:43
Сообщение #2


Знающий
****

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



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


Местный
***

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




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

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


Знающий
****

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


Местный
***

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



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


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


Знающий
****

Группа: Свой
Сообщений: 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
dsmv
сообщение Aug 18 2011, 04:40
Сообщение #7


Местный
***

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


Знающий
****

Группа: Свой
Сообщений: 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
dsmv
сообщение Aug 22 2011, 04:46
Сообщение #9


Местный
***

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


Местный
***

Группа: Свой
Сообщений: 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
dsmv
сообщение Aug 30 2011, 10:41
Сообщение #11


Местный
***

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



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

Несколько слов по поводу развития проекта:

1. Разработка документации. Файлы скачивают, но вопросов пока никто не задаёт. Наверное всё понятно ?
2. Ядро для Spartan-6 x1; Есть ли у кого-нибуть какая либо плата для проверки ?
3. Размещение на opencores.org; Для этого необходимо сделать подключение к шине Wishbone, пример проекта для этой шины и документация на английском языке.

Какие есть ещё предложения ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


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


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