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

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

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

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

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

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


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

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

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

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

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


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

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

11 hours ago, new123 said:

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

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

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


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

42 minutes ago, Digi said:

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

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

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

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


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

34 minutes ago, Yuri124 said:

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

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

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

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

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

 

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


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

3 minutes ago, Digi said:

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

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

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

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

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


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

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 глядеть

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


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

49 minutes ago, new123 said:

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

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

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


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

9 minutes ago, Yuri124 said:

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

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

 

update

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

 

update2

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

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

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


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

8 minutes ago, new123 said:

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

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

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


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

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

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

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

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


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

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

6 minutes ago, Digi said:

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

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

 

7 minutes ago, Digi said:

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

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

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


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

55 minutes ago, new123 said:

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

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

58 minutes ago, new123 said:

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

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

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


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

12 hours ago, Digi said:

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

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

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


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

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

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

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

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

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

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

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

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

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