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

XDMA to Stream and Stream to XDMA.

Всем привет.

Начну из далека. Нами была разработана электронная плата для ЦОС. На плате установлены ПЛИС серии Kintex7, DAC с полосой 250MГц/32бит, ADC с полосой 250МГц/32бит, 1 слот SODIMM для установки DDR3 1GB. На плате, кроме того, выведен порт PCI (4 линии Gen2) для подключения к материнской плате с ОС Linux. Глобально необходимо реализовать 2 задачи.

Первая задача -  запись потока с ADC в host. При этом необходимая длительность записи не более 1 секунды. При полосе сигнала 250МГц и ширине 32 бита получается поток поступающий в PCI 1GB/s. Для этого в ПЛИС применяем ядро XDMA, которое имеет вход AXI Stream c2h. К этому входу мы и подключили поток с ADC, конечно через FIFO. Исходили из того предположения, что скорость PCI значительно выше нашего потока и поставленное нами FIFO компенсирует различие скоростей. Вроде бы все заработало и мы можем читать данные больших размеров. Достоверность данных пока не проверяли.

Вторая задача все тоже самое но наоборот. Запись с host в DAC. Объемы данных те же. Пытались реализовать это тем же способом, т.е. через FIFO. И вот тут-то выяснилось, что PCI по своей инициативе периодически приостанавливает передачу данных на довольно длительное время (иногда тысячи тактов при частоте 125М), убирая сигнал TVALID с линии. Никакое FIFO не сможет компенсировать такие паузы. Вероятно та же самая проблема возникает и в первой задаче, просто мы не проверяли данные на достоверность.

Я понимаю, что напрашивается решение применять DDR3, как промежуточный буфер для чтения и записи. Но перед этим хотелось бы уточнить, есть ли какие - либо способы убрать эти гигантские паузы со стороны hosta, прежде чем ввязываться в эту войну с DDR?

 

Изменено пользователем Caruso

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


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

Offtop, но

18 hours ago, Caruso said:

... DAC с полосой 250MГц/32бит, ADC с полосой 250МГц/32бит ...

Нифига себе!

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


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

37 minutes ago, nice_vladi said:

Нифига себе!

А что тут удивительного?   2 канала по 16 бит 250 Msps.    рядовые ADC/DAC на текущий момент. 

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


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

19 hours ago, Caruso said:

Всем привет.

Начну из далека. Нами была разработана электронная плата для ЦОС. На плате установлены ПЛИС серии Kintex7, DAC с полосой 250MГц/32бит, ADC с полосой 250МГц/32бит, 1 слот SODIMM для установки DDR3 1GB. На плате, кроме того, выведен порт PCI (4 линии Gen2) для подключения к материнской плате с ОС Linux. Глобально необходимо реализовать 2 задачи.

Первая задача -  запись потока с ADC в host. При этом необходимая длительность записи не более 1 секунды. При полосе сигнала 250МГц и ширине 32 бита получается поток поступающий в PCI 1GB/s. Для этого в ПЛИС применяем ядро XDMA, которое имеет вход AXI Stream c2h. К этому входу мы и подключили поток с ADC, конечно через FIFO. Исходили из того предположения, что скорость PCI значительно выше нашего потока и поставленное нами FIFO компенсирует различие скоростей. Вроде бы все заработало и мы можем читать данные больших размеров. Достоверность данных пока не проверяли.

Вторая задача все тоже самое но наоборот. Запись с host в DAC. Объемы данных те же. Пытались реализовать это тем же способом, т.е. через FIFO. И вот тут-то выяснилось, что PCI по своей инициативе периодически приостанавливает передачу данных на довольно длительное время (иногда тысячи тактов при частоте 125М), убирая сигнал TVALID с линии. Никакое FIFO не сможет компенсировать такие паузы. Вероятно та же самая проблема возникает и в первой задаче, просто мы не проверяли данные на достоверность.

Я понимаю, что напрашивается решение применять DDR3, как промежуточный буфер для чтения и записи. Но перед этим хотелось бы уточнить, есть ли какие - либо способы убрать эти гигантские паузы со стороны hosta, прежде чем ввязываться в эту войну с DDR?

 

 

В pcie есть flow control, можно в теории к нему подключитсья и посмотреть число свободнах буферов для разных типов tlp. Не в курсе, можно ли это сделать для xdma. Если буферы свободные есть, значит виною кривая архитектура драйвера-xdma. Под windows он на приём вообще скорость на порядок губит. Я в своё время пробовал его ставить, плюнул, отложил до лучших времён. alinx с kintex только приехала, как дойдут руки сделаю свою корку и отпишусь. У меня задача выжать максимум на приём, так как нужно 16 плат ацп на 400 мбайт в секунду подключить к пк.

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


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

3 hours ago, RobFPGA said:

А что тут удивительного?   2 канала по 16 бит 250 Msps.    рядовые ADC/DAC на текущий момент. 

Да я, почему-то, подумал про один канал 32 бита 250 MSPS

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


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

On 10/2/2022 at 7:43 PM, nice_vladi said:

я, почему-то, подумал про один канал 32 бита 250 MSPS

а я вначале подумал 

Quote

 с полосой 250MГц

про полосу аналогового сигнала, т.е. частота отсчетов в 2 раза выше (как минимум)... 

Изменено пользователем Yuri124

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


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

Используйте ДДР для буферизации, драйвер XDMA очень плохо написан. Переделать его не просто. Особенно для работы с ST. Если брать ММ, то есть читать блок фиксированного размера, а потом сколько угодно долго возиться с передачей блока памяти от кернеля юзеру, то результаты скорости передачи неплохие, а непрерывно если читать или писать, то возникают длинные паузы. Я намерял 80мкс паузы, но это мамка и проц хорошие, а говорят за 100 легко. 

Вариант переписать драйвер так, чтобы железо скатер -гезер дма работало без софта (что теоретически возможно) , но это не каждому под силу, и опенсорсной версии я не нашел. Как оно могло бы работать - посмотрите в утилите performance, там через ioctl вызывается функция, которая данные никуда не отдает, а просто вычитывает через pcie.

 

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


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

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

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

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

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

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

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

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

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

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