Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bus Master DMA для PCIe
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2
doom13
Уточню вопрос: достаточно ли последних двух осциллограмм, чтобы сказать, что производительность DMA (пропускная способность шины) во втором случае больше?
Проверил ещё раз правильность работы всей системы (переключение дескрипторов, остановку DMA при использовании всех дескрипторов, восстановление передачи при обновлении дескрипторов), не могу понять, как время передачи пакета (65536х8 байт) в обоих случаях может быть одинаковым.
RobFPGA
Приветствую!

А у Вас часом не включен Interrupt Delay Time Out. ? PG021.pdf LogiCORE IP AXI DMA v7.1 page 17
В этом случае прерывание происходит не сразу а с задержкой заданной таймером - вот и получаете "неизменное" время передачи wink.gif

Успехов! Rob.


doom13
Проверю конечно, но разрешал прерывание по завершению обработки буфера или ошибке.
doom13
Извиняюсь, ввёл в заблуждение. Рисунки из поста выше для разных условий работы системы, первый, похоже, когда система работала в Gen1.
Счас всё перепроверил, получается присвоение параметру DM_ADDR_PIPE_DEPTH значения 8; и параметрам crossbar-а Read/Write Acceptance значения 8 не увеличило пропускную способность системы (о чём и свидетельствовал постоянный период прерывания). Первый рисунок - система с дефолтными параметрами, второй - система с параметрами настроенными "ручками". Тут видно, что за одно время передаётся одинаковое количество данных (число burst-ов).
RobFPGA
Приветствую!

По картинкам видно что тормозит именно DMА такое впечатление что на входе у него не хватает данных.
Задержек со стороны PCIe тут не видно.


Успехов! Rob.


doom13
Цитата(RobFPGA @ Oct 20 2015, 12:34) *
По картинкам видно что тормозит именно DMА такое впечатление что на входе у него не хватает данных.
Задержек со стороны PCIe тут не видно.

Да, спасибо, вот я ... . Можете смеяться, генератор трафика работает на 156.25 MHz (моделирует приём 10G Ethernet, далее фифо с переходом на 250 MHz, DMA забирает данные из FIFO), для него 9.3 Gbit/s почти потолок. Когда была проблема с работой ядра в Gen1 я его проверял, чтоб там ничего не тормозило, а тут что-то позабыл.
RobFPGA
Приветствую!

"Ну, что же Вы, Иван Иваныч..." biggrin.gif

Удачи! Rob
doom13
Цитата(RobFPGA @ Oct 20 2015, 15:42) *

Запустил генератор трафика на 250 MHz, с Вашими советами показало 13.56 Gbit/s. Спасибо, помогли. Если оставить AXI Interconnect в режиме auto и параметр DM_ADDR_PIPE_DEPTH для DMA со стандартным значением 1, получаю примерно тех же 9.3 Gbit/s.
Руками набросать свой interconnect - это ещё нормально, но вот вручную править файлы, которые нагенерил IP Integrator, чтоб оно заработало нормально, - "ваще опа".
Dmitrij68
Цитата(RobFPGA @ Oct 19 2015, 14:07) *
Приветствую!

Увы это издержки "удобств" когда за Вас работает неизвестный индийский Раджа.
В форме кофигурирования interconecta таких параметров нет - но можно раскрыть блок interconecta ПОСЛЕ diagram validation найти там axi_crossbar
и в нем уже - поставив ручной режим - изменить нужные параметры. Ну или сразу нарисовать правильный xbar из примитивов axi_crossbar, axi_dwidth_converter, axi_clock_converter, ... не надеясь на телепатические способности Раджи.

Успехов! Rob.
Нажмите для просмотра прикрепленного файла


Почему у меня отсутствует кнопка ОК? Могу отредактировать но не могу применить? И куда Вы добавляете set_property? В xdc или в свойства корки. В свойства корки есть только удалить, а добавить нет. Версия 2015.1 и 2015.3.
Dmitrij68
Цитата(RobFPGA @ Oct 19 2015, 14:07) *
Приветствую!

Увы это издержки "удобств" когда за Вас работает неизвестный индийский Раджа.
В форме кофигурирования interconecta таких параметров нет - но можно раскрыть блок interconecta ПОСЛЕ diagram validation найти там axi_crossbar
и в нем уже - поставив ручной режим - изменить нужные параметры. Ну или сразу нарисовать правильный xbar из примитивов axi_crossbar, axi_dwidth_converter, axi_clock_converter, ... не надеясь на телепатические способности Раджи.

Успехов! Rob.
Нажмите для просмотра прикрепленного файла


Почему у меня отсутствует кнопка ОК? Могу отредактировать но не могу применить? И куда Вы добавляете set_property? В xdc или в свойства корки. В свойства корки есть только удалить, а добавить нет. Версия 2015.1 и 2015.3.
doom13
Надо выбросить AXI Interconnect, что автоматом сгенерировал IP Integrator, собрать свой из тех же ядер и можно будет менять параметры.
doom13
Приветствую.
Новый вопрос по DMA. Сейчас делаю передачу данных ПК -> FPGA (параметры для DMA и AXI Interconnect-a, как советовали выше). На базе генератора трафика сделал loopback для DMA (MM2S -> S2MM). Получаю скорость передачи примерно в два раза меньше (около 7.5 Гбит/с) чем мог выдать DMA в режиме S2MM.
Для возможности подключения разных источников трафика на интерфейс DMA S_AXIS_S2MM сделал мультиплексор AXI-Stream (могу включать loopback для DMA или передавать данные от генератора трафика). Получаю низкую скорости передачи при использовании режима loopback для DMA - MM2S канал тормозит передачу.
Вопрос, как это устранить?

Рисунок 1 - режим loopback для DMA, данные передаются ПК -> FPGA -> ПК.
Рисунок 2 - данные передаются только в направлении ПК.
doom13
Цитата(RobFPGA @ Oct 16 2015, 20:55) *
Так как операция WRITE на PCIE не требует completion...

Можно ли объяснить снижение скорости при чтении тем, что READ на PCIe требует completion? Если да, то во сколько раз они могут отличаться? Получаю скорость записи (FPGA -> PC) примерно в 1.8 раза больше чем скорость чтения (PC -> FPGA).
Ниже рисунки:
1 - DMA перебрасывает данные из ПК в FPGA (+ они же обратно FPGA -> PC, интерфейс DMA S2MM не показан);
2 - DMA перебрасывает данные из FPGA в ПК (однонаправленная передача FPGA -> PC).
RobFPGA
Приветствую!

Дело не в том что для READ требуются completion а в глубине очереди на запросы чтения.
Если глубина маленькая то возникают паузы на ожидания окончания предыдущих запросов перед посылкой следующего запроса.

Надо иметь еще ввиду что AXI интерконнект может "блокировать" запросы на чтение/запись если они идут в одно периферийное устройство - тое-есть исполнятся они будут в порядке прихода а не полностью параллельно.

Успехов! Rob.

doom13
Цитата(RobFPGA @ Dec 1 2015, 16:45) *
Дело не в том что для READ требуются completion а в глубине очереди на запросы чтения.
Если глубина маленькая то возникают паузы на ожидания окончания предыдущих запросов перед посылкой следующего запроса.

Надо иметь еще ввиду что AXI интерконнект может "блокировать" запросы на чтение/запись если они идут в одно периферийное устройство - тое-есть исполнятся они будут в порядке прихода а не полностью параллельно.

Спасибо, счас это всё обдумаю, пока хочу ещё спросить: для рисунка 1 (сообщение #63) , где идёт передача PC -> FPGA данные передаются ещё и в обратном направленни FPGA -> PC (на диаграмму их не добавил). Т.е. получается на S_AXIS_RQ_* в данном случае поступает больше транзакций (от MM2S и от S2MM, на чтение и на запись) чем когда однонаправленная передача данных от генератора трафика (рисунок 2, сообщение #63). Стоит ли искать проблему в этом?

Цитата(RobFPGA @ Dec 1 2015, 16:45) *
Надо иметь еще ввиду что AXI интерконнект может "блокировать" запросы на чтение/запись если они идут в одно периферийное устройство - тое-есть исполнятся они будут в порядке прихода а не полностью параллельно.

Об этом не подумал, цепочка DMA -> Interconnect -> AXI_PCIe на рисунке, т.е. если включаю loopback (см рисунок), то ещё и DMA M_AXI_MM2S и M_AXI_S2MM (+ M_AXI_SG) будут делить время доступа к PCIe??! Похоже, надо сделать заглушку для M_AXIS_MM2S, чтобы отдельно проверить скорость для DMA M_AXI_MM2S?
doom13
Похоже, проблема либо в AXI Interconnect, либо в самом ядре AXI bridge for PCIe.
Получены следующие результаты:
1) Работает только DMA S2MM - данные передаются со скоростью ~13.5 Gbit/s.
2) Работает только DMA MM2S - данные передаются со скоростью ~10.8 Gbit/s.
3) Режим LOOPBACK (ПК -> FPGA -> ПК) - данные передаются со скоростью ~7.5 Gbit/s (в каждом направлении).

4) Попробовал реализовать независимые генераторы и передачу данных (один генератор в FPGA, второй - приложение в user space ). Пока работает один из них, скорости соответствуют полученным в пунктах 1) и 2) , если разрешить работу обоих одновременно, то DMA S2MM передаёт данные с той же скоростью (~13.5 Gbit/s), скорость передачи данных DMA MM2S падает до ~1.3 Gbit/s.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.