Jump to content

    
Digi

Altera PCI express как лучше реализовать обмен

Recommended Posts

Делаем устройство которое должно работать под управлением ОС LINUX и нужно поблочно передавать данные из/в устройство (используя DMA) и  нужно передавать управляющие команды.  По сути это плата аналогового ввода вывода данных. По реализации я себе это представляю так: обмен  по DMA будет осуществляться с внешней DDR3 памятью подключенной к ПЛИС.  Для работы с управляющими командами  планировал выделить что то вроде регистровой памяти.   Плис: Cyclone 10 GX. 

Кто нибудь таким занимался ? Посоветуйте как лучше это реализовать. 

PS: Если есть, кто сможет такое быстро реализовать, а ещё лучше если вы будете из Воронежа, то пишите. Рассмотрим различные варианты сотрудничества в плане разработки прошивок под FPGA. 

Share this post


Link to post
Share on other sites

Уточните, команды любые или только по части DMA?

Если любые, то можно их через BAR передавать в обе стороны. Прикрутить какой нибудь Intel PIO к BAR через Avalon и гонять команды. Правда только запись со стороны драйвера/компьютера по 4 байта. Если команды объемные и частые , то летенси захромает.

Если команды DMA, то это уже другой разговор

Share this post


Link to post
Share on other sites

Команды команды произвольные, медленные. Типа: установки частоты, режима работы, итд... 

11 hours ago, new123 said:

Прикрутить какой нибудь Intel PIO к BAR через Avalon и гонять команды.

Сейчас буду пробовать что то изобразить ))) 

Share this post


Link to post
Share on other sites
42 minutes ago, Digi said:

Команды команды произвольные, медленные. Типа: установки частоты, режима работы, итд... 

Смысла для этого прикручивать в FPGA блок DMA абсолютно не вижу, т.к. задержки даже могут увеличиться: придет команда забрать данные, потом по ДМА ПЛИС отправит запрос и получит ответ  - всяко дольше, чем сразу в 4-х байтах (или их серии из нескольких подряд) получить всю нужную информацию.

Если, конечно, эта нужная для выполнения команды информация объемом не сотни байт - килобайты.

Share this post


Link to post
Share on other sites
34 minutes ago, Yuri124 said:

Смысла для этого прикручивать в FPGA блок DMA абсолютно не вижу, т.к. задержки даже могут увеличиться: придет команда забрать данные, потом по ДМА ПЛИС отправит запрос и получит ответ  - всяко дольше, чем сразу в 4-х байтах (или их серии из нескольких подряд) получить всю нужную информацию.

Если, конечно, эта нужная для выполнения команды информация объемом не сотни байт - килобайты.

Я планировал что команды будут передаваться по одному BAR без DMA, а блок данных, объёмом несколько Мб по другому BAR и через DMA. 

Алгоритм примерно такой:
1 Установили частоту и режим работы.
2 Отправили СТАРТ

4 Дождались готовности новых
5 Считали данные по ДМА
6 Goto 2

 

Share this post


Link to post
Share on other sites
3 minutes ago, Digi said:

блок данных, объёмом несколько Мб

ТОгда без ДМА никак. Изначально думалось, что данные - небольшой блок каких-либо параметров, необходимых для выполнения команды.

У альтеры к киту на Cyclone V GT есть пример chaining DMA - там по DMA передаются мегабайты туда-сюда на пределе возможностей шины PCIe.

Может быть его приспособить под Ваш чип, если к нему нет ничего готового...

Share this post


Link to post
Share on other sites
1 hour ago, Digi said:

Сейчас буду пробовать что то изобразить )))

у PCIE корки, та что называется PCIE DMA Avalonn-MM, подключаете BAR2 или любой последующий (BAR0 занят самим контроллером DMA), потом в qsys на этот BAR2 по авалону цепляете 32-х битный Intel PIO (Intel Parallel I/O), настраиваете внутренню адресацию и по итогу в top модуле имеете прямой доступ к 4-х байтному полю по заданному адресу. Если команды требуют больше данных, можно прикрутить 2 и более PIO.

Если вариант с множественным PIO не очень нравится, внутри qsys кидаете на BAR2 avalon-mm bridge, его ноги выходят в top модуль, и уже с ними напрямую общаетесь с BAR2 по шине Avalon. Но как по мне, проще сразу напрямую в PIO глядеть

Share this post


Link to post
Share on other sites
49 minutes ago, new123 said:

внутри qsys кидаете на BAR2 avalon-mm bridge, его ноги выходят в top модуль, и уже с ними напрямую общаетесь с BAR2 по шине Avalon

не проще ли создать свой модуль, который соединить с BAR шиной прямо в QSYS.

Share this post


Link to post
Share on other sites
9 minutes ago, Yuri124 said:

не проще ли создать свой модуль, который соединить с BAR шиной прямо в QSYS.

может и проще, кому как. Это постоянно по авалону общаться. Мне было проще напрямую значения смотреть, я под это дело (четырх байтовую разметку) систему команд и разработал со всякими контрольными суммами и тд. 16 байт у меня на команду отводится. Ну и другие значения различные вывешиваю через PIO, например температуру, драйвер напрямую смотрит. При этом мне не надо постоянно самому авалон долбить.

 

update

Кстати, я не сразу понял вопрос. Без бриджа? В десятых сериях такие корки, что сложно осуществимо. Там нет отдельного выхода BAR2, BAR4 и тд, общая шина со своей адресацией. А в пятерке да, можно было и напрямую

 

update2

дезинформировал. Я юзаю новую версию корки без отдельных выводов. Можно взять старую версию, там да, есть прямой вывод.

Edited by new123

Share this post


Link to post
Share on other sites
8 minutes ago, new123 said:

В десятых сериях такие корки, что сложно осуществимо. Там нет отдельного выхода BAR2, BAR4 и тд, общая шина со своей адресацией. А в пятерке да, можно было и напрямую

Спасибо за уточнение. Да, в V так.

Share this post


Link to post
Share on other sites

С IO и памятью немного разобрался, заработало. 

Теперь задача стоит сопрячь 2х портовую память с Avalon-MM и самописным , внешним, контроллером.   То есть я с одной стороны в Platform builder подключил 2х портовую память к Avalon а вот как получить обычные сигналы второго порта , не Avalon , чтобы прикрутить их к моему контроллеру ?

И другой вопрос, что использовать для того чтобы вывести от Avalon MM Master наружу сигналы адрес, данные, чтение, запись , для того чтобы их использовать в своём контроллере ?

Share this post


Link to post
Share on other sites

Я использовал встроенный dma контроллер.

6 minutes ago, Digi said:

подключил 2х портовую память к Avalon а вот как получить обычные сигналы второго порта , не Avalon , чтобы прикрутить их к моему контроллеру ?

двух портовая же работает, что первый, что второй на Avalon. Вам получается надо какой то конвертер/переходник смастерить

 

7 minutes ago, Digi said:

что использовать для того чтобы вывести от Avalon MM Master наружу сигналы адрес, данные, чтение, запись , д

если внутри qsys шина ни с чем не развязана, то обычно ее вытаскивают через колонку/столбец export, прописывая там название выходов. Если шина уже развязана с чем то другим, что поможет Avalon Bridge, не помню только, можно ли именно мастер вытаскивать, надо смотреть

Share this post


Link to post
Share on other sites
55 minutes ago, new123 said:

двух портовая же работает, что первый, что второй на Avalon. Вам получается надо какой то конвертер/переходник смастерить

Получается что переходник или с Авалон Master на стандартный интерфейс памяти и память  ставить вне Platform Designer или с Avalon Slave .

58 minutes ago, new123 said:

если внутри qsys шина ни с чем не развязана, то обычно ее вытаскивают через колонку/столбец export, прописывая там название выходов. Если шина уже развязана с чем то другим, что поможет Avalon Bridge, не помню только, можно ли именно мастер вытаскивать, надо смотреть

На этой шине уже висят устройства с некоторым диапазоном адресов. Я хотел другой диапазон адресов этой же шины отдавать наружу в виде адрес/данные. Для дальнейшей работой с ними. Это будет доступ к банку регистров контроллера.

Share this post


Link to post
Share on other sites
12 hours ago, Digi said:

 на стандартный интерфейс памяти и память 

кстати, если вы посмотрите примеры альтеры, то память они используют "On Chip Memory", а он полностью на авалоне. У меня так и сделано, переходники никакие не лепил

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.