Digi 0 Posted October 22, 2020 · Report post Делаем устройство которое должно работать под управлением ОС LINUX и нужно поблочно передавать данные из/в устройство (используя DMA) и нужно передавать управляющие команды. По сути это плата аналогового ввода вывода данных. По реализации я себе это представляю так: обмен по DMA будет осуществляться с внешней DDR3 памятью подключенной к ПЛИС. Для работы с управляющими командами планировал выделить что то вроде регистровой памяти. Плис: Cyclone 10 GX. Кто нибудь таким занимался ? Посоветуйте как лучше это реализовать. PS: Если есть, кто сможет такое быстро реализовать, а ещё лучше если вы будете из Воронежа, то пишите. Рассмотрим различные варианты сотрудничества в плане разработки прошивок под FPGA. Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted October 22, 2020 · Report post Уточните, команды любые или только по части DMA? Если любые, то можно их через BAR передавать в обе стороны. Прикрутить какой нибудь Intel PIO к BAR через Avalon и гонять команды. Правда только запись со стороны драйвера/компьютера по 4 байта. Если команды объемные и частые , то летенси захромает. Если команды DMA, то это уже другой разговор Quote Ответить с цитированием Share this post Link to post Share on other sites
Digi 0 Posted October 23, 2020 · Report post Команды команды произвольные, медленные. Типа: установки частоты, режима работы, итд... 11 hours ago, new123 said: Прикрутить какой нибудь Intel PIO к BAR через Avalon и гонять команды. Сейчас буду пробовать что то изобразить ))) Quote Ответить с цитированием Share this post Link to post Share on other sites
Yuri124 0 Posted October 23, 2020 · Report post 42 minutes ago, Digi said: Команды команды произвольные, медленные. Типа: установки частоты, режима работы, итд... Смысла для этого прикручивать в FPGA блок DMA абсолютно не вижу, т.к. задержки даже могут увеличиться: придет команда забрать данные, потом по ДМА ПЛИС отправит запрос и получит ответ - всяко дольше, чем сразу в 4-х байтах (или их серии из нескольких подряд) получить всю нужную информацию. Если, конечно, эта нужная для выполнения команды информация объемом не сотни байт - килобайты. Quote Ответить с цитированием Share this post Link to post Share on other sites
Digi 0 Posted October 23, 2020 · Report post 34 minutes ago, Yuri124 said: Смысла для этого прикручивать в FPGA блок DMA абсолютно не вижу, т.к. задержки даже могут увеличиться: придет команда забрать данные, потом по ДМА ПЛИС отправит запрос и получит ответ - всяко дольше, чем сразу в 4-х байтах (или их серии из нескольких подряд) получить всю нужную информацию. Если, конечно, эта нужная для выполнения команды информация объемом не сотни байт - килобайты. Я планировал что команды будут передаваться по одному BAR без DMA, а блок данных, объёмом несколько Мб по другому BAR и через DMA. Алгоритм примерно такой: 1 Установили частоту и режим работы. 2 Отправили СТАРТ 3 4 Дождались готовности новых 5 Считали данные по ДМА 6 Goto 2 Quote Ответить с цитированием Share this post Link to post Share on other sites
Yuri124 0 Posted October 23, 2020 · Report post 3 minutes ago, Digi said: блок данных, объёмом несколько Мб ТОгда без ДМА никак. Изначально думалось, что данные - небольшой блок каких-либо параметров, необходимых для выполнения команды. У альтеры к киту на Cyclone V GT есть пример chaining DMA - там по DMA передаются мегабайты туда-сюда на пределе возможностей шины PCIe. Может быть его приспособить под Ваш чип, если к нему нет ничего готового... Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted October 23, 2020 · Report post 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 глядеть Quote Ответить с цитированием Share this post Link to post Share on other sites
Yuri124 0 Posted October 23, 2020 · Report post 49 minutes ago, new123 said: внутри qsys кидаете на BAR2 avalon-mm bridge, его ноги выходят в top модуль, и уже с ними напрямую общаетесь с BAR2 по шине Avalon не проще ли создать свой модуль, который соединить с BAR шиной прямо в QSYS. Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted October 23, 2020 (edited) · Report post 9 minutes ago, Yuri124 said: не проще ли создать свой модуль, который соединить с BAR шиной прямо в QSYS. может и проще, кому как. Это постоянно по авалону общаться. Мне было проще напрямую значения смотреть, я под это дело (четырх байтовую разметку) систему команд и разработал со всякими контрольными суммами и тд. 16 байт у меня на команду отводится. Ну и другие значения различные вывешиваю через PIO, например температуру, драйвер напрямую смотрит. При этом мне не надо постоянно самому авалон долбить. update Кстати, я не сразу понял вопрос. Без бриджа? В десятых сериях такие корки, что сложно осуществимо. Там нет отдельного выхода BAR2, BAR4 и тд, общая шина со своей адресацией. А в пятерке да, можно было и напрямую update2 дезинформировал. Я юзаю новую версию корки без отдельных выводов. Можно взять старую версию, там да, есть прямой вывод. Edited October 23, 2020 by new123 Quote Ответить с цитированием Share this post Link to post Share on other sites
Yuri124 0 Posted October 23, 2020 · Report post 8 minutes ago, new123 said: В десятых сериях такие корки, что сложно осуществимо. Там нет отдельного выхода BAR2, BAR4 и тд, общая шина со своей адресацией. А в пятерке да, можно было и напрямую Спасибо за уточнение. Да, в V так. Quote Ответить с цитированием Share this post Link to post Share on other sites
Digi 0 Posted November 7, 2020 · Report post С IO и памятью немного разобрался, заработало. Теперь задача стоит сопрячь 2х портовую память с Avalon-MM и самописным , внешним, контроллером. То есть я с одной стороны в Platform builder подключил 2х портовую память к Avalon а вот как получить обычные сигналы второго порта , не Avalon , чтобы прикрутить их к моему контроллеру ? И другой вопрос, что использовать для того чтобы вывести от Avalon MM Master наружу сигналы адрес, данные, чтение, запись , для того чтобы их использовать в своём контроллере ? Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted November 7, 2020 · Report post Я использовал встроенный dma контроллер. 6 minutes ago, Digi said: подключил 2х портовую память к Avalon а вот как получить обычные сигналы второго порта , не Avalon , чтобы прикрутить их к моему контроллеру ? двух портовая же работает, что первый, что второй на Avalon. Вам получается надо какой то конвертер/переходник смастерить 7 minutes ago, Digi said: что использовать для того чтобы вывести от Avalon MM Master наружу сигналы адрес, данные, чтение, запись , д если внутри qsys шина ни с чем не развязана, то обычно ее вытаскивают через колонку/столбец export, прописывая там название выходов. Если шина уже развязана с чем то другим, что поможет Avalon Bridge, не помню только, можно ли именно мастер вытаскивать, надо смотреть Quote Ответить с цитированием Share this post Link to post Share on other sites
Digi 0 Posted November 7, 2020 · Report post 55 minutes ago, new123 said: двух портовая же работает, что первый, что второй на Avalon. Вам получается надо какой то конвертер/переходник смастерить Получается что переходник или с Авалон Master на стандартный интерфейс памяти и память ставить вне Platform Designer или с Avalon Slave . 58 minutes ago, new123 said: если внутри qsys шина ни с чем не развязана, то обычно ее вытаскивают через колонку/столбец export, прописывая там название выходов. Если шина уже развязана с чем то другим, что поможет Avalon Bridge, не помню только, можно ли именно мастер вытаскивать, надо смотреть На этой шине уже висят устройства с некоторым диапазоном адресов. Я хотел другой диапазон адресов этой же шины отдавать наружу в виде адрес/данные. Для дальнейшей работой с ними. Это будет доступ к банку регистров контроллера. Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted November 7, 2020 · Report post Ну тогда Avalon Bridge. У меня так Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted November 8, 2020 · Report post 12 hours ago, Digi said: на стандартный интерфейс памяти и память кстати, если вы посмотрите примеры альтеры, то память они используют "On Chip Memory", а он полностью на авалоне. У меня так и сделано, переходники никакие не лепил Quote Ответить с цитированием Share this post Link to post Share on other sites