Как стать автором
Обновить

Комментарии 17

Вспоминая свой опыт с прошлого места работы, где был задействован в разработке на FPGA, в том числе и с платформой ZYNQ: зачем такие скорости обмена между ЦП и ПЛИС?
ЦП хорош тем, что уже реализованы базовые интерфейсы (UART, Ethernet, USB), можно быстро накидать программу управления логикой в ПЛИС части.
Данные-то в ЦП зачем гонять? Там где нужна была максимальная скорость между управляемой железкой с кучей данных и каким-то интерфейсом, писалась обертка для ПЛИС. А обертку уже контролировал проц.
Единственное, где помню, что нужна была работа через проц с DMA, это работа с памятью DDR… Но и опять же участие процессора сводилось к настройке регистров в разных контроллерах.
Например, в программируемой логике реализован какой-то алгоритм обработки данных, который обрабатывает наиболее часто встречающиеся случаи. Если пришли данные, которые нуждаются в особой обработке (редкий случай) то их проще обработать на процессорном модуле. Чем быстрее они туда попадут, тем быстрее обработаются. Когда есть запас по скорости это всегда хорошо.
И в случае с работой с DDR. Можно организовать обмен данными (в случае большого объема) между разными каналами в программируемой логике через DDR, подключенную к процессорному модулю. Дескрипторы удобнее на процессорном модуле заполнять, а в обмене он непосредственно не участвует.
Данные-то в ЦП зачем гонять? Там где нужна была максимальная скорость между управляемой железкой с кучей данных и каким-то интерфейсом, писалась обертка для ПЛИС.

Так может в вашем конкретном случае и вовсе без проца можно обойтись, глядишь, ещё и денег сэкономите на железе?
Фишка Zynq и прочих подобных SoC с ПЛИС на борту в том, что на проц можно накатить ОС, линукс какой-нибудь, а логику ПЛИС использовать как акселератор тяжёлых вычислений и дёргать драйверами. При этом с одной стороны у вас будет очень сложный софт в проце, а с другой возможность делать наиболее тяжёлые операции на ПЛИС в реалтайме.
Сейчас не очень слежу за Zynq, но судя по статьям Xilinx, они очень интересуются 5G и Zynq туда хорошо вписывается. Также наблюдаю её у тех, кто обрабатывает видео с камер наблюдения в реальном времени (crowd control) и кто делает примочки для авто (всякие ADAS). Раньше у Xilinx был журнал Xcell, например в номерах 88 и 93 можно глянуть некоторые реальные кейсы, где, почему и как она использовалась.
Вот Вам кейс из реальной жизни. Zynq US+, на ЦП крутится линух с ftp и несколько SSD на SATA, а на PL многоканальный контроллер оптического интерфейса а ля FC. Вот тут DMA и прочая дичь очень кстати.
Всё зависит от задач. У меня несколько раз были такие задачи, которые прямо требовали участия процессора с программой. Конечно, можно реализовать конечный автомат для реализации алгоритма. Но это выльется в незабываемое приключение с багами и поиска случаев, когда они работают не в той фазе или случайно перепутал сигнальные линии. А если ещё управляете с компьютера, одновременно гоняя данные туда-сюда (могут участвовать высокоскоростные приёмопередатчики), то бывает ещё веселее.
У нас например одна из задач отрисовывать графики, полученные путем обработки данных с АЦП разными алгоритмами в реальном времени. FPGA данные через DMA в драйвер отправляет, драйвер через mmap в userspace, оттуда сервер через вебсокеты на фронтенд. Кнопочку нажал и в web-интерфейсе получил по 7 графиков для каждого из 4-5 каналов на несколько тысяч точек.
Спасибо. Очень познавательно.

>Посчитаем скорость передачи данных: (256 раз * 102400 байт) / (271 * 100 мкс) ≈ 967 321 033

Меня пугает неизвестность, подскажите откуда в этих формулах первый делитель ?

Число 271 было получено из лога работы приложения, запущенного на процессором модуле. Чуть выше по тексту есть "Time 10F". Микросекунды взяты из кода приложения, который приведён выше лога.

Про 100мкс догадался по строчке

usleep(100);

А перевести из hex не догадался, спасибо за отличную статью, картинок бы побольше, а то приходится запускать vivado и сверяться с текстом.

Можно задам здесь вопрос по первой статье ?

Мне непонятно зачем в настройках MIO процессорного модуля выставлять на Bank1 1.8V вместо 3.3.V, у Вас какая-то низковольтная перефирия ?

Да, так реализована используемая плата. К первому банку подключена микросхема физического уровня Ethernet с питанием +1.8В, соответственно питание банка тоже должно быть +1.8В.

Ну да, у Вас же ZYBO с RTL8211E-VL на борту.

А в даташите : The RTL8211E-VL support 1.5/1.8V signaling for RGMII.

А если случайно 3.3 оставить, не сгорит ?

С моей точки зрения, нет. Если на банк физически подать питание +1.8В, а в настройках процессорного модуля выставить, что напряжение +3.3В, то не сгорит, поскольку настройки процессорного модуля не управляют питаем.Но вот будет работать, не понятно, поскольку будут разные стандартны ввода/вывода у MIO.

Не сгорит. Работать будет. Я так подключал 3.3 вольтовый USB3300 к 501 банку, на который уже было подано 2.5 в, ибо ETH был 2.5 вольтовый. Питание банка выставил 3.3В и всё заработало нормально.

"5. Импортируем настройки процессорного модуля. Для этого выполним двойной клик на Zynq7 Processing System => Import XPS Setting => Укажем путь к файлу => OK => OK."

К какому файлу? Инструкция не полная.

Это было описано в предыдущей статье:

Если создается прошивка для покупной платы, то в комплекте с ней есть xml или tcl файл с настройками процессорного модуля. <...> Иначе, необходимо по принципиальной схеме на устройство выяснить, какие MIO используются и куда подключены, какой тип памяти DDR и выставить соответствующие настройки во вкладках Peripherial I/O Pins, MIO Configuration, Clock Configuration и DDR Configuration.

Ок. Спасибо.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации