Комментарии 17
ЦП хорош тем, что уже реализованы базовые интерфейсы (UART, Ethernet, USB), можно быстро накидать программу управления логикой в ПЛИС части.
Данные-то в ЦП зачем гонять? Там где нужна была максимальная скорость между управляемой железкой с кучей данных и каким-то интерфейсом, писалась обертка для ПЛИС. А обертку уже контролировал проц.
Единственное, где помню, что нужна была работа через проц с DMA, это работа с памятью DDR… Но и опять же участие процессора сводилось к настройке регистров в разных контроллерах.
И в случае с работой с DDR. Можно организовать обмен данными (в случае большого объема) между разными каналами в программируемой логике через DDR, подключенную к процессорному модулю. Дескрипторы удобнее на процессорном модуле заполнять, а в обмене он непосредственно не участвует.
Данные-то в ЦП зачем гонять? Там где нужна была максимальная скорость между управляемой железкой с кучей данных и каким-то интерфейсом, писалась обертка для ПЛИС.
Так может в вашем конкретном случае и вовсе без проца можно обойтись, глядишь, ещё и денег сэкономите на железе?
Фишка Zynq и прочих подобных SoC с ПЛИС на борту в том, что на проц можно накатить ОС, линукс какой-нибудь, а логику ПЛИС использовать как акселератор тяжёлых вычислений и дёргать драйверами. При этом с одной стороны у вас будет очень сложный софт в проце, а с другой возможность делать наиболее тяжёлые операции на ПЛИС в реалтайме.
Сейчас не очень слежу за Zynq, но судя по статьям Xilinx, они очень интересуются 5G и Zynq туда хорошо вписывается. Также наблюдаю её у тех, кто обрабатывает видео с камер наблюдения в реальном времени (crowd control) и кто делает примочки для авто (всякие ADAS). Раньше у Xilinx был журнал Xcell, например в номерах 88 и 93 можно глянуть некоторые реальные кейсы, где, почему и как она использовалась.
>Посчитаем скорость передачи данных: (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.
"5. Импортируем настройки процессорного модуля. Для этого выполним двойной клик на Zynq7 Processing System => Import XPS Setting => Укажем путь к файлу => OK => OK."
К какому файлу? Инструкция не полная.
Это было описано в предыдущей статье:
Если создается прошивка для покупной платы, то в комплекте с ней есть xml или tcl файл с настройками процессорного модуля. <...> Иначе, необходимо по принципиальной схеме на устройство выяснить, какие MIO используются и куда подключены, какой тип памяти DDR и выставить соответствующие настройки во вкладках Peripherial I/O Pins, MIO Configuration, Clock Configuration и DDR Configuration.
Zynq. Передача данных между процессорным модулем и программируемой логикой