Drakonof 0 18 апреля, 2020 Опубликовано 18 апреля, 2020 · Жалоба Всем привет! Artix7 Vivado 2019.1 Debian10 Собрал систему Axi Memory Mapped to Pci Express, CDMA, DDR3. Задача в том что бы посылать данные через PCIe в DDR с помощью DMA. В данный момент с ПК данные записываются в DDR ПЛИСа со скоростью 500Мб/с, что для заданных целей проекта мало. В ip PCIe у меня выделено 3 бара: DDR,BRAM, регистры CDMA. Всё прекрасно пишется и читается, но как я сказал выше, медленно. Так же в этой коре выделен один AXI BAR с адресом 0x40000000, который транслируется в адресное пространство CDMA как BAR0 PCIe'са и имеет адрес 0x60000000. Написал простенький дравер на линикс под данные цели, где заполняю регистры DMA. Адрес назначения = 0x80000000 (это адрес ddr в адресном пространстве cdma) и адрес источника который возвращает драйвер как выделенную память под dma, затем устанавливаю количество байт, что активирует трансфер из сорса в адрес назначение и в идеи данные из буфера выделенного драйвером в ПК должны появиться в ddr ПЛИС, но их там нет. Если сорс адрес ставить bram, то по той же схеме через драйвер, данные передаются из brem в ddr. Не могу понять что упускаю... pdf блок диаграммы, настройки и драйвей под линукс прикрепил. Можно попросить посмотреть файлы? Может кто нибудь подскажет что я не правильно делаю. PS не нашел ответов в и в Xilinx Answer 65062 AXI Memory Mapped for PCI Express Address Mapping design_1.pdf test_pci.c настройки и адреса.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 19 апреля, 2020 Опубликовано 19 апреля, 2020 · Жалоба 1. А чем DMA/Bridge Subsystem for PCI-Express не устроил? Лучше бы его пользовать. 2. Драйвер написан процентов на 10 от требуемого. Да и то с ошибками Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Drakonof 0 19 апреля, 2020 Опубликовано 19 апреля, 2020 · Жалоба 6 минут назад, gosha-z сказал: 1. А чем DMA/Bridge Subsystem for PCI-Express не устроил? Лучше бы его пользовать. 2. Драйвер написан процентов на 10 от требуемого. Да и то с ошибками Спасибо за Ваш ответ. Вы про xdma говорите? Дело в том что в Xilinx Answer 65062 AXI Memory Mapped for PCI Express Address Mapping представлена связка pcie + cdma. Да и бегать от варианта к варианту не хочется, решил разобраться для начало в одном, а если потом нужно будет другие освою. Если не сложно, Вы не могли бы конкретизировать что добавить и что исправить. Если честно уже столько вариантов перепробовал, что забыл что исправлял и не много запутался) В моей компании только начинают осваивать xilinx, а на линукс так вообще никого, по этому и спросить не у кого кроме как на форуме.. Буду крайне признателен если поможете разобраться. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 19 апреля, 2020 Опубликовано 19 апреля, 2020 · Жалоба 1. Хотите перформанса - пользуйте xdma 2. По драйверу - читать первоисточник и смотреть исходники AR 65444 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Drakonof 0 19 апреля, 2020 Опубликовано 19 апреля, 2020 · Жалоба 27 минут назад, gosha-z сказал: 1. Хотите перформанса - пользуйте xdma 2. По драйверу - читать первоисточник и смотреть исходники AR 65444 спасибо. я там уже был, как я сказал, уже много чего попробовал и уже запутался. Какой выбирать вариант Types of DMA mappings при написании драйвера, правильно ли составлена блок диаграмма в вивадо (пусть даже относительно cdma), куда записывать адрес dma выделенный драйвером (в регистры cdma или pcie) и какой адрес (dma_addr_t или буфера который передаётся в аргумент при использование dma_map_single)? Про какие ошибки Вы говорите, укажите пожалуйста, что бы я исправил, если Вам не сложно. Начну конечно же с создания новой блок диаграммы c xdma, но если там что то не так сделаю, то копать драйвер можно до посинения, но он так и не заработает... я не прошу исчерпывающего решения из коробки, просто обсудить детали Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 19 апреля, 2020 Опубликовано 19 апреля, 2020 · Жалоба 1 hour ago, Drakonof said: Начну конечно же с создания новой блок диаграммы c xdma, Вот и начните. Оставьте только xdma+interconnect+mig о добейтесь, чтобы оно заработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 20 апреля, 2020 Опубликовано 20 апреля, 2020 · Жалоба 23 hours ago, gosha-z said: 1. Хотите перформанса - пользуйте xdma 2. По драйверу - читать первоисточник и смотреть исходники AR 65444 Под windows нормальный драйвер где-то можно взять? В stream режиме xdma AR65444 почему-то даёт 200 мбайт в секунду приём и 1600 - передачу. Как-то совсем уж печально. Jungo Windriver с той же прошивкой вообще завис (у него тестовый софт на qt есть для пробы). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 20 апреля, 2020 Опубликовано 20 апреля, 2020 · Жалоба 41 minutes ago, dmitry-tomsk said: Под windows нормальный драйвер где-то можно взять? Нигде.Об это уже миллион копий сломано. Я пытался в этом разобраться. Подозреваю, что проблема в том, что Windows не умеет маппить kernel memory в user memory (нет аналога mmap), поэтому всегда время тратится на copy to/from user. Ну и плюс никому неохота тратить примерно $600/год на EV сертификат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 20 апреля, 2020 Опубликовано 20 апреля, 2020 · Жалоба 1 hour ago, gosha-z said: Нигде.Об это уже миллион копий сломано. Я пытался в этом разобраться. Подозреваю, что проблема в том, что Windows не умеет маппить kernel memory в user memory (нет аналога mmap), поэтому всегда время тратится на copy to/from user. Ну и плюс никому неохота тратить примерно $600/год на EV сертификат. А почему тогда на передачу скорость хорошая? Да и по слухам через DDR и на приём она хорошая (на моей плате нет DDR, чтобы проверить), а в stream режиме какая-то недоделка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Drakonof 0 21 апреля, 2020 Опубликовано 21 апреля, 2020 (изменено) · Жалоба В 19.04.2020 в 12:22, gosha-z сказал: Вот и начните. Оставьте только xdma+interconnect+mig о добейтесь, чтобы оно заработало. не могу понять, у xdma можно поставить частоту 250 или 125МГц, но на плате только 200 для ядра. Даже относительно AC701 проект не собирается.. может попробуем разобраться с моей конфигурацией? если честно я был бы очень рад не начинать всё с начала и довести до конца то что уже есть Изменено 21 апреля, 2020 пользователем Drakonof Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 21 апреля, 2020 Опубликовано 21 апреля, 2020 · Жалоба 2 hours ago, Drakonof said: у xdma можно поставить частоту 250 или 125МГц, но на плате только 200 для ядра. Для вас великая проблема сделать 125 из 200? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Drakonof 0 21 апреля, 2020 Опубликовано 21 апреля, 2020 (изменено) · Жалоба 6 часов назад, gosha-z сказал: Для вас великая проблема сделать 125 из 200? Нет что Вы) просто разбираться с новыми трудностями вместо старых которые всё равно никуда не денутся очень не охота. Буду пытаться через xdma что то сделать, хотя проект даже еще не собрался. Но а вообще, есть вероятность что AC701 сама по себе не позволяет работать через dma с хостом? (вопрос конечно может показаться глупым, но, если позволите, я сошлюсь на неопытность) Спасибо что Вы еще здесь. Изменено 21 апреля, 2020 пользователем Drakonof Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Drakonof 0 21 апреля, 2020 Опубликовано 21 апреля, 2020 (изменено) · Жалоба Не могу разобраться с ошибкой [DRC REQP-49] connects_GTGREFCLK0_ACTIVE_connects_GTGREFCLK1_ACTIVE: GTPE2_COMMON cell xdma_p_i/xdma_0/inst/xdma_p_xdma_0_0_pcie2_to_pcie3_wrapper_i/pcie2_ip_i/inst/inst/gt_top_i/pipe_wrapper_i/pipe_lane[0].pipe_quad.gt_common_enabled.gt_common_int.gt_common_i/qpll_wrapper_i/gtp_common.gtpe2_common_i: Use of the GTGREFCLK is reserved for test purposes only. This has the lowest performance of the available clocking methods and can degrade transceiver performance. при этом critical warnings [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":6] [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":8] [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":10] [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":12] [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":15] [Vivado 12-2285] Cannot set LOC property of instance 'xdma_p_i/refclk_ibuf'... xdma_p_i/refclk_ibuf is not a leaf level instance ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":19] set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n] set_property LOC M20 [get_ports sys_rst_n] set_property PULLUP true [get_ports sys_rst_n] # PCIe Lane 0 set_property LOC GTPE2_CHANNEL_X0Y7 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[0].gt_wrapper_i/gtp_channel.gtpe2_channel_i}] # PCIe Lane 1 set_property LOC GTPE2_CHANNEL_X0Y6 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[1].gt_wrapper_i/gtp_channel.gtpe2_channel_i}] # PCIe Lane 2 set_property LOC GTPE2_CHANNEL_X0Y5 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[2].gt_wrapper_i/gtp_channel.gtpe2_channel_i}] # PCIe Lane 3 set_property LOC GTPE2_CHANNEL_X0Y4 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[3].gt_wrapper_i/gtp_channel.gtpe2_channel_i}] # GTP Common Placement set_property LOC GTPE2_COMMON_X0Y1 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[0].pipe_quad.gt_common_enabled.gt_common_int.gt_common_i/qpll_wrapper_i/gtp_common.gtpe2_common_i}] мой xdc set_property LOC IBUFDS_GTE2_X0Y3 [get_cells xdma_p_i/refclk_ibuf] set_property LOC F11 [get_ports sys_clk_p] set_property LOC E11 [get_ports sys_clk_n] set_property LOC C12 [get_ports {pcie_rx_n[0]}] set_property LOC D12 [get_ports {pcie_rx_p[0]}] set_property LOC C10 [get_ports {pcie_tx_n[0]}] set_property LOC D10 [get_ports {pcie_tx_p[0]}] set_property LOC A13 [get_ports {pcie_rx_n[1]}] set_property LOC B13 [get_ports {pcie_rx_p[1]}] set_property LOC A9 [get_ports {pcie_tx_n[1]}] set_property LOC B9 [get_ports {pcie_tx_p[1]}] set_property LOC C14 [get_ports {pcie_rx_n[2]}] set_property LOC D14 [get_ports {pcie_rx_p[2]}] set_property LOC C8 [get_ports {pcie_tx_n[2]}] set_property LOC D8 [get_ports {pcie_tx_p[2]}] set_property LOC A11 [get_ports {pcie_rx_n[3]}] set_property LOC B11 [get_ports {pcie_rx_p[3]}] set_property LOC A7 [get_ports {pcie_tx_n[3]}] set_property LOC B7 [get_ports {pcie_tx_p[3]}] #0 set_property PACKAGE_PIN M26 [get_ports calib_led] set_property IOSTANDARD LVCMOS33 [get_ports calib_led] #1 set_property PACKAGE_PIN T24 [get_ports link_led] set_property IOSTANDARD LVCMOS33 [get_ports link_led] При этом если сделать open ip example design и прописать в .xdc set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n] set_property LOC M20 [get_ports sys_rst_n] set_property PULLUP true [get_ports sys_rst_n] set_property LOC IBUFDS_GTE2_X0Y3 [get_cells refclk_ibuf] set_property LOC F11 [get_ports sys_clk_p] set_property LOC E11 [get_ports sys_clk_n] то пример собирается, не могу понять что моему проекту нужно. xdma_p.pdf Изменено 21 апреля, 2020 пользователем Drakonof Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться