doom13 0 October 29, 2015 Posted October 29, 2015 · Report post Надо выбросить AXI Interconnect, что автоматом сгенерировал IP Integrator, собрать свой из тех же ядер и можно будет менять параметры. Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 November 30, 2015 Posted November 30, 2015 · Report post Приветствую. Новый вопрос по 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 - данные передаются только в направлении ПК. Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 December 1, 2015 Posted December 1, 2015 · Report post Так как операция WRITE на PCIE не требует completion... Можно ли объяснить снижение скорости при чтении тем, что READ на PCIe требует completion? Если да, то во сколько раз они могут отличаться? Получаю скорость записи (FPGA -> PC) примерно в 1.8 раза больше чем скорость чтения (PC -> FPGA). Ниже рисунки: 1 - DMA перебрасывает данные из ПК в FPGA (+ они же обратно FPGA -> PC, интерфейс DMA S2MM не показан); 2 - DMA перебрасывает данные из FPGA в ПК (однонаправленная передача FPGA -> PC). Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 99 December 1, 2015 Posted December 1, 2015 · Report post Приветствую! Дело не в том что для READ требуются completion а в глубине очереди на запросы чтения. Если глубина маленькая то возникают паузы на ожидания окончания предыдущих запросов перед посылкой следующего запроса. Надо иметь еще ввиду что AXI интерконнект может "блокировать" запросы на чтение/запись если они идут в одно периферийное устройство - тое-есть исполнятся они будут в порядке прихода а не полностью параллельно. Успехов! Rob. Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 December 1, 2015 Posted December 1, 2015 · Report post Дело не в том что для 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? Quote Share this post Link to post Share on other sites More sharing options...
doom13 0 December 2, 2015 Posted December 2, 2015 · Report post Похоже, проблема либо в 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. Quote Share this post Link to post Share on other sites More sharing options...