Jump to content
    

Bus Master DMA для PCIe

Надо выбросить AXI Interconnect, что автоматом сгенерировал IP Integrator, собрать свой из тех же ядер и можно будет менять параметры.

Share this post


Link to post
Share on other sites

Приветствую.

Новый вопрос по 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 - данные передаются только в направлении ПК.

post-63539-1448885002_thumb.png

post-63539-1448885006_thumb.png

Share this post


Link to post
Share on other sites

Так как операция WRITE на PCIE не требует completion...

Можно ли объяснить снижение скорости при чтении тем, что READ на PCIe требует completion? Если да, то во сколько раз они могут отличаться? Получаю скорость записи (FPGA -> PC) примерно в 1.8 раза больше чем скорость чтения (PC -> FPGA).

Ниже рисунки:

1 - DMA перебрасывает данные из ПК в FPGA (+ они же обратно FPGA -> PC, интерфейс DMA S2MM не показан);

2 - DMA перебрасывает данные из FPGA в ПК (однонаправленная передача FPGA -> PC).

post-63539-1448967966_thumb.png

post-63539-1448967972_thumb.png

Share this post


Link to post
Share on other sites

Приветствую!

 

Дело не в том что для READ требуются completion а в глубине очереди на запросы чтения.

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

 

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

 

Успехов! Rob.

 

 

Share this post


Link to post
Share on other sites

Дело не в том что для READ требуются completion а в глубине очереди на запросы чтения.

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

 

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

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

 

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

Об этом не подумал, цепочка DMA -> Interconnect -> AXI_PCIe на рисунке, т.е. если включаю loopback (см рисунок), то ещё и DMA M_AXI_MM2S и M_AXI_S2MM (+ M_AXI_SG) будут делить время доступа к PCIe??! Похоже, надо сделать заглушку для M_AXIS_MM2S, чтобы отдельно проверить скорость для DMA M_AXI_MM2S?

post-63539-1448979377_thumb.png

Share this post


Link to post
Share on other sites

Похоже, проблема либо в 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...