Программирование SoC Zynq
Простой одноплатник мне как-то не хотелось приобретать, поэтому выбор мой пал на SoC’и. Выбирал я между Zynq и Cyclone V. По названию темы, думаю, догадались, что же я решил выбрать.
Данная публикация будет состоять из небольшого обзора платки с заглавной картинки и того, как «программировать» и «конфигурировать» подобное железо. Кому это интересно прошу под кат.
Board
Приобрёл платку Z-turn Board фирмы Myir. На ней камень Zynq 7020, 85к логических ячеек, 2 ядра Cortex-A9, 1 GB DDR3. Выведеные на плате интерфейсы: JTAG, HDMI, micro SD host, Ethernet, UART, USB OTG и ~100 GPIO pins. Из периферии есть LED, RGB LED, buzzer, inertial and temperature sensors.
Более подробное описание можете поглядеть по ссылке.
Отмечу, что если собираетесь использовать такой камень, то обязательно приобретайте для него радиатор и стойки для соответствующей платы. А если и этого не хватает, то привинтите туда ещё и вентилятор, т.к. этот зверь греется сильно.
Программирование
Собственно, программивать Zynq можно двумя путями: 1) как обычный MCU baremetal 2) из под OS.
Baremetal
В этом случае всё предельно просто: накидываете программку--->компилите--->заливаете JTAG’ом в камень. У этого камня 256 кБ флэша для прошивки. Т.к. JTAG отладчик я не преобретал, то показывать тут нечего =)
OS
В моём случае на micro SD карточке сборка Линукса. Т.е. путь создания, проверки и отладки программ аналогичен описанному, в прошлой публикации.
Элементарщина: накидываете программку--->компилите toolchain’ом и копируюте на плату/компилите на плате/копируюте на плату скрипт--->отлаживаете/запускаете--->имеете профит!
Думаю, заострять на этом внимание не особо нужно, поэтому просто <
bash>$ touch hellozynq.py
bash>$ echo '#!/bin/python
> print "Hello Zynq!"
> ' > hellozynq.py
bash>$ cat hellozynq.py
#!/bin/python
print "Hello Zynq!"
Копируем наш файлик на борду:
bash>$ scp hellozynq.py root@:/root/hellozynq.py
root@'s password:
hellozynq.py 100% 35 0.0KB/s 00:00
Запускаем:
root@localhost:~# chmod +x hellozynq.py
root@localhost:~# python hellozynq.py
Hello Zynq!
root@localhost:~# uname -a
Linux localhost.localdomain 3.15.0-xilinx #9 SMP PREEMPT Tue May 26 17:26:14 CST 2015 armv7l armv7l armv7l GNU/Linux
Конфигурирование
А вот здесь заострим внимание. Путь конфигурирования FPGA части этого SoC’a ориентировочно таков:
- Создание проекта в IDE фирмы Xilinx
- Разрабокта конфигурации
- Генерация bitstream’а
- Прошивка
Создание проекта в IDE фирмы Xilinx и разрабокта программы сами по себе займут по статье. Поэтому я возьму готовый проект, который шёл вместе с бордой.
Сперва запускаем проект. Затем запускаем синтез и имплемнтацию. После генерируем bitstream файл.
Копируем его на борду:
bash>$ scp another_blink.bit root@192.168.100.9:/root/ablink.bit
root@192.168.100.9's password:
hw.bit 100% 3951KB 3.9MB/s 00:00
Проверяем каталог:
root@localhost:~# ls -lahs *.bit
3.9M -rw-r--r-- 1 root root 3.9M Mar 5 10:35 ablink.bit
3.9M -rw-r--r-- 1 root root 3.9M Mar 1 18:17 blink_conf.bit
3.9M -rw-r--r-- 1 root root 3.9M Mar 2 03:13 hw.bit
0 -rw-r--r-- 1 root root 3.9M Mar 2 18:50 uf.bit
И конфигурируем FPGA:
root@localhost:~# cat hw.bit > /dev/xdevcfg
Ура товарищи! Светодиод горит!
Заметки:
Конфигурировать FPGA, естественно, можно и отладчиком. Только у меня его нет. Vivado очень можная штука и требует много памяти и ресурсов CPU. На моих i5 и 4GB ОЗУ постоянно свапует.
Также нужно быть внимательным разработчиком, т.к. я слышал несколько историй о том, как жгли камни неправильно настраивая вывода FPGA. Быть может, это невалидно для Zynq.
P.S.:
Я решил взять эту платку т.к. она самая дешёвая и доступная мне интересны FPGA тем, что в них можно синтезировать любые цифровые интерфейсы, делать мультиплексоры выводов и, самое крутое, синтезировать вычислители (автоматы, процессоры, сопроцессоры типа FPU и т.п.). А в купе с Linux’ом на процессорной части можно творить крутейшие вещи.