dmitry-tomsk 0 25 декабря, 2021 Опубликовано 25 декабря, 2021 · Жалоба 14 hours ago, dxp said: В смысле, размышляете, делать или купить готовое ядро? Да, думаю. Работы много, нсли есть возможность купить недорого (до 5000$), то я бы купил. xillbus вроде только 32 бита или мне показалось? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 26 декабря, 2021 Опубликовано 26 декабря, 2021 · Жалоба 11 часов назад, dmitry-tomsk сказал: Да, думаю. Работы много, нсли есть возможность купить недорого (до 5000$), то я бы купил. xillbus вроде только 32 бита или мне показалось? у Xillibus вроде от 25к цены начинаются. И насколько понял, там вы получаете потоковую модель: FIFO на приём и передачу. Прикладной протокол всё равно ваш, вам и реализовывать. Корка эта, конечно, делает не мало: берёт на себя возню с разбиением запросов на MWr/MRd в соответствии с полученными MPS/MRRS, приём CplD и склеивание их в целостные потоки (а они могут приходить не по порядку (порядок гарантируется только для одного MRd) - в прежних реализациях Xillibus это не учитывалось, пока пользователи не прислали ему кейс (пример аппаратуры), где это возникало), flow control, возможно, переход через границу страниц 4к (но это не точно). Вам требуется выжимать максимум из интерфейса или есть запас по скорости? Если второе, то имеет смысл посмотреть на корку Xilinx AXI-PCie Bridge. Она обеспечивает вполне приличную скорость (потери от максимальной по свидетельству уважаемого @RobFPGA порядка 15%, насколько помню), при этом у вас простой AXI4 интерфейс и тоже нет нужны возиться с MWr/MRd/CplD, flow control. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 26 декабря, 2021 Опубликовано 26 декабря, 2021 · Жалоба 3 hours ago, dxp said: у Xillibus вроде от 25к цены начинаются. И насколько понял, там вы получаете потоковую модель: FIFO на приём и передачу. Прикладной протокол всё равно ваш, вам и реализовывать. Корка эта, конечно, делает не мало: берёт на себя возню с разбиением запросов на MWr/MRd в соответствии с полученными MPS/MRRS, приём CplD и склеивание их в целостные потоки (а они могут приходить не по порядку (порядок гарантируется только для одного MRd) - в прежних реализациях Xillibus это не учитывалось, пока пользователи не прислали ему кейс (пример аппаратуры), где это возникало), flow control, возможно, переход через границу страниц 4к (но это не точно). Вам требуется выжимать максимум из интерфейса или есть запас по скорости? Если второе, то имеет смысл посмотреть на корку Xilinx AXI-PCie Bridge. Она обеспечивает вполне приличную скорость (потери от максимальной по свидетельству уважаемого @RobFPGA порядка 15%, насколько помню), при этом у вас простой AXI4 интерфейс и тоже нет нужны возиться с MWr/MRd/CplD, flow control. dma от xilinx я пробовал. Драйвер под windows похоже совсем плох - скорость на ввод в ПК у меня получилась маленькая (не помню какая). Мне нужно 1600 мбайт или 3200 мбайт в секунду. Интерфейс мне нужен axi-stream, причём на вывод из PC достаточно процессорных команд - по слову 32 бит для передачи пакетов управления в плату. Ну драйвер нужен подписанный, у xilinx был не подписанный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 26 декабря, 2021 Опубликовано 26 декабря, 2021 · Жалоба AXI-PCIe Bridge - это не DMA (хотя как посмотреть, я имел в виду, что там нет никаких дескрипторов, там просто транзакции доступа в память. Но и самописный через TLP будет ровно то же самое: всё равно нужно будет указывать адреса и метать бёрсты). 1600 MBps - это где-то близко к максимальной скорости PCIe Gen2 x4 (не знаю, какая у вас конфигурация). Ну, и хост даже таким потоком подавится, если попытается что-то с ним делать (хотя бы в цикле сравнивать байтики), в сустейне, конечно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 26 декабря, 2021 Опубликовано 26 декабря, 2021 · Жалоба Приветствую! 54 minutes ago, dxp said: AXI-PCIe Bridge - это не DMA (хотя как посмотреть, я имел в виду, что там нет никаких дескрипторов, там просто транзакции доступа в память. Но и самописный через TLP будет ровно то же самое: всё равно нужно будет указывать адреса и метать бёрсты). Самодельный TLP DMA для записи из FPGA в хост относительно прост. Но вот в обратном направлении уже значительно сложнее. И IMHO смысл заниматься TLP уровнем есть либо если надо выжать последние 5 МB/s пропускной, либо если вы хотите на этой IP зарабатывать. И то и другое будет очень непросто. AXI-PCIe Bridge позволяет относительно простыми средствами сделать какой угодно DMA, с точки зрения организации дескрипторов и схемы управления. Ну и проблема драйвера для Win - тут либо неподписанные примеры драйверов, либо самому заморачивается, платить и подписывать свои драйвера, либо платить за готовые решения. 59 minutes ago, dxp said: 1600 MBps - это где-то близко к максимальной скорости PCIe Gen2 x4 (не знаю, какая у вас конфигурация). Ну, и хост даже таким потоком подавится, если попытается что-то с ним делать (хотя бы в цикле сравнивать байтики), в сустейне, конечно. 1600 MBps это ~2 GB/s (~2x 10G) для современных хостов не так уж и много. При хорошем железе можно много чего делать на лету с таким и даже большим потоком. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 26 декабря, 2021 Опубликовано 26 декабря, 2021 · Жалоба 1 hour ago, dxp said: AXI-PCIe Bridge - это не DMA (хотя как посмотреть, я имел в виду, что там нет никаких дескрипторов, там просто транзакции доступа в память. Но и самописный через TLP будет ровно то же самое: всё равно нужно будет указывать адреса и метать бёрсты). 1600 MBps - это где-то близко к максимальной скорости PCIe Gen2 x4 (не знаю, какая у вас конфигурация). Ну, и хост даже таким потоком подавится, если попытается что-то с ним делать (хотя бы в цикле сравнивать байтики), в сустейне, конечно. Задача пока писать на ssd для последующей реконструкции, ну и preview real-time простое есть. Сейчас 12 плат по usb3 пишут 1500 максимум - нужно удвоить посредством авроры+оптики + своей платы иди двух плат синхронизатора на pcie. Самому руки не доходят - пока нет человека c#-cuda, приходится самому, на fpga уже время мало остаётся Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 15 часов назад, RobFPGA сказал: 1600 MBps это ~2 GB/s (~2x 10G) для современных хостов не так уж и много. При хорошем железе можно много чего делать на лету с таким и даже большим потоком. У нас тест в дивайсе есть, когда он качает из памяти хоста данные (задания на обработку) и сразу заворачивает их обратно (байпас) - тест для проверки правильности работы транспортной части. Так вот, в драйвере есть два режима: 1. когда драйвер просто пинает дивайс, и тот гоняет данные, и 2. когда драйвер проверяет целостность данных (сравнивает с отправленным). Хост: сервер 8 ядер (16 потоков) Xeon. В первом режиме загрузка CPU в районе 3-5%, он там только обновляет очереди заданий, скорость порядка 13 Gbps (это чистая скорость по данным, без накладных на протокол, конфигурация PCIe: Gen2 x4) , а во втором случае скорость в районе 3 Gbps и все 16 потоков на 100%. А вся проверка там - это в цикле сраниваются два массива, т.е. обработка простейшая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 17 часов назад, dmitry-tomsk сказал: Задача пока писать на ssd для последующей реконструкции, ну и preview real-time простое есть. Сейчас 12 плат по usb3 пишут 1500 максимум - нужно удвоить посредством авроры+оптики + своей платы иди двух плат синхронизатора на pcie. Наливать с дивайса на хост (MWr only), как сказал уважаемый @RobFPGA, действительно относительно несложно. Особенно, если данные выровненные и не нужно париться с пересечением границ 4k. Просто кидаете TLP один за другим и всё. Останется только продумать систему сигнализации прерываниями, чтобы хост переливал накопленное из памяти в SSD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 1 hour ago, dxp said: Наливать с дивайса на хост (MWr only), как сказал уважаемый @RobFPGA, действительно относительно несложно. Особенно, если данные выровненные и не нужно париться с пересечением границ 4k. Просто кидаете TLP один за другим и всё. Останется только продумать систему сигнализации прерываниями, чтобы хост переливал накопленное из памяти в SSD. Да и обратно не сложно, сортировку пакетов по адресу на лету я уже делал, но 32 бит для спартана и очень давно. Вопрос подписанного драйвера здесь имеет значение. Можно купить jungo за 4500$ + самописная корка раз нет решение подешевле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 1 час назад, dmitry-tomsk сказал: Да и обратно не сложно :) Вот тут не соглашусь. Если просто по схеме "запрос-ответ", то да, несложно. А если метать серии запросов и ловить пачки CplD, которые могут приходить не по порядку, да ещё рваться на границах RCB, то уже получается вполне себе нетривиально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 37 minutes ago, dxp said: :) Вот тут не соглашусь. Если просто по схеме "запрос-ответ", то да, несложно. А если метать серии запросов и ловить пачки CplD, которые могут приходить не по порядку, да ещё рваться на границах RCB, то уже получается вполне себе нетривиально. Так и делал, но ограничивал число исходящих запосов, чтобы память для сборки целого пакета из кусков не переполнилась Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 1 минуту назад, dmitry-tomsk сказал: Так и делал, но ограничивал число исходящих запосов, чтобы память для сборки целого пакета из кусков не переполнилась Тогда скорость будет никакая. Если устраивает, то вполне годно. Хотя если несколько MRd висят, то можете словить "перепутанные" CplD. Ну, и если попадаете на границу RCB, а шина внутри больше 32 бит, то тут уже можно тоже накушаться на склеивании потока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 10 minutes ago, dxp said: Тогда скорость будет никакая. Если устраивает, то вполне годно. Хотя если несколько MRd висят, то можете словить "перепутанные" CplD. Ну, и если попадаете на границу RCB, а шина внутри больше 32 бит, то тут уже можно тоже накушаться на склеивании потока. Простой ход чтобы не попадать на границу rcb - первый запрос выравнивающий, если материнка поддерживает пакет только 128 байт, например, адрес заканчивается на 126, сначала шлём или запрашиваем 2 байта, а остальные - полные 128, кроме последнего. Но это лишнее. Вместо работы со страницами 4k, проще выделить 4-8 буферов неперывной памяти 256k + запасик и выровнять начальный физический адрес по границе 128 или 256 байт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 26.12.2021 в 13:55, dmitry-tomsk сказал: Ну драйвер нужен подписанный, у xilinx был не подписанный. https://support.xilinx.com/s/article/65444?language=en_US Если я ничего не путаю, то вот эти драйвера - подписанные. Но только для ограниченного списка VEN/DEV ID, само собой. Сорри, затупил - там тестовая подпись :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
faa 4 27 декабря, 2021 Опубликовано 27 декабря, 2021 · Жалоба 26.12.2021 в 13:55, dmitry-tomsk сказал: dma от xilinx я пробовал. Драйвер под windows похоже совсем плох - скорость на ввод в ПК у меня получилась маленькая (не помню какая). Мне нужно 1600 мбайт или 3200 мбайт в секунду. Интерфейс мне нужен axi-stream, причём на вывод из PC достаточно процессорных команд - по слову 32 бит для передачи пакетов управления в плату. Ну драйвер нужен подписанный, у xilinx был не подписанный. Есть проект wupper на opencores. Работает. Под 6 ГБ/сек на Gen3 x8 по DMA выдает. Больше нам не надо было. Драйвера и софт в комплекте. В драйвере надо надо включить pci bus master - там этого нет :) У нас работает на xilinx Kintex 7 (XC7Z045) и US (XCKU085). Правда, под 45 Zynq пришлось переписывать довольно много. Но там есть фича - каждую TLP пытается писать по следующему свободному дескриптору. Но это довольно просто лечится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться