Перейти к содержанию
    

14 hours ago, dxp said:

В смысле, размышляете, делать или купить готовое ядро?

Да, думаю. Работы много, нсли есть возможность купить недорого (до 5000$), то я бы купил. xillbus вроде только 32 бита или мне показалось?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 был не подписанный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AXI-PCIe Bridge - это не DMA (хотя как посмотреть, я имел в виду, что там нет никаких дескрипторов, там просто транзакции доступа в память. Но и самописный через TLP будет ровно то же самое: всё равно нужно будет указывать адреса и метать бёрсты). 1600 MBps - это где-то близко к максимальной скорости PCIe Gen2 x4 (не знаю, какая у вас конфигурация). Ну, и хост даже таким потоком подавится, если попытается что-то с ним делать (хотя бы в цикле сравнивать байтики), в сустейне, конечно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 уже время мало остаётся

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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%. А вся проверка там - это в цикле сраниваются два массива, т.е. обработка простейшая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 часов назад, dmitry-tomsk сказал:

Задача пока писать на ssd для последующей реконструкции, ну и preview real-time простое есть. Сейчас 12 плат по usb3 пишут 1500 максимум - нужно удвоить посредством авроры+оптики + своей платы иди двух плат синхронизатора на pcie.

Наливать с дивайса на хост (MWr only), как сказал уважаемый @RobFPGA, действительно относительно несложно. Особенно, если данные выровненные и не нужно париться с пересечением границ 4k. Просто кидаете TLP один за другим и всё. Останется только продумать систему сигнализации прерываниями, чтобы хост переливал накопленное из памяти в SSD.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, dxp said:

Наливать с дивайса на хост (MWr only), как сказал уважаемый @RobFPGA, действительно относительно несложно. Особенно, если данные выровненные и не нужно париться с пересечением границ 4k. Просто кидаете TLP один за другим и всё. Останется только продумать систему сигнализации прерываниями, чтобы хост переливал накопленное из памяти в SSD.

Да и обратно не сложно, сортировку пакетов по адресу на лету я уже делал, но 32 бит для спартана и очень давно. Вопрос подписанного драйвера здесь имеет значение. Можно купить jungo за 4500$ + самописная корка раз нет решение подешевле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, dmitry-tomsk сказал:

Да и обратно не сложно

:) Вот тут не соглашусь. Если просто по схеме "запрос-ответ", то да, несложно. А если метать серии запросов и ловить пачки CplD, которые могут приходить не по порядку, да ещё рваться на границах RCB, то уже получается вполне себе нетривиально. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 minutes ago, dxp said:

:) Вот тут не соглашусь. Если просто по схеме "запрос-ответ", то да, несложно. А если метать серии запросов и ловить пачки CplD, которые могут приходить не по порядку, да ещё рваться на границах RCB, то уже получается вполне себе нетривиально. 

Так и делал, но ограничивал число исходящих запосов, чтобы память для сборки целого пакета из кусков не переполнилась

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, dmitry-tomsk сказал:

Так и делал, но ограничивал число исходящих запосов, чтобы память для сборки целого пакета из кусков не переполнилась

Тогда скорость будет никакая.  Если устраивает, то вполне годно.

 

Хотя если несколько MRd висят, то можете словить "перепутанные" CplD. Ну, и если попадаете на границу RCB, а шина внутри больше 32 бит, то тут уже можно тоже накушаться на склеивании потока.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, dxp said:

Тогда скорость будет никакая.  Если устраивает, то вполне годно.

 

Хотя если несколько MRd висят, то можете словить "перепутанные" CplD. Ну, и если попадаете на границу RCB, а шина внутри больше 32 бит, то тут уже можно тоже накушаться на склеивании потока.

Простой ход чтобы не попадать на границу rcb - первый запрос выравнивающий, если материнка поддерживает пакет только 128 байт, например, адрес заканчивается на 126, сначала шлём или запрашиваем 2 байта, а остальные - полные 128, кроме последнего. Но это лишнее. Вместо работы со страницами 4k, проще выделить 4-8 буферов неперывной памяти 256k + запасик и выровнять начальный физический адрес по границе 128 или 256 байт

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26.12.2021 в 13:55, dmitry-tomsk сказал:

Ну драйвер нужен подписанный, у xilinx был не подписанный.

https://support.xilinx.com/s/article/65444?language=en_US

Если я ничего не путаю, то вот эти драйвера - подписанные. Но только для ограниченного списка VEN/DEV ID, само собой.

 

Сорри, затупил - там тестовая подпись :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 пытается писать по следующему свободному дескриптору. Но это довольно просто лечится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...