Простой одноплатник мне как-то не хотелось приобретать, поэтому выбор мой пал на 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'ом и копируюте на плату/компилите на плате/копируюте на плату скрипт--->отлаживаете/запускаете--->имеете профит!
Думаю, заострять на этом внимание не особо нужно, поэтому просто <<Hello Zynq!>>:
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@<ip_address>:/root/hellozynq.py
root@<ip_address>'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.:
Я решил взять эту платку т.к.
Комментарии (9)
gazpar
05.03.2017 18:58У меня пока руки кривы, чтобы правильно это сделать. Как наловчусь, так сделаю.
kyb27
06.03.2017 09:18Интересная платка. Как прошла доставка?
А hdmi не пробовали еще? На сайте предлагают evaluation вариант ядра. Чем это скажется совсем непонятно.gazpar
06.03.2017 18:37HDMI пробовал- рабочий стол отображается, запускал пару приложений. Вроде работает.
Доставка не очень из-за того, что ЕМС уроды(специально скипали доставку для того, чтобы я сам её забрал+специально заблаговременно не оповещают о доставке или о не-доставке(к примеру, не собираются доставлять груз в оговорённое время, хотя заявка об этом подана заблаговременно)).
eromos
06.03.2017 18:32Немного странный вопрос: а где вы нашли такой радиатор, можно ссылочку пожалуйста?
А платка и правда интересная, похожа очень на microzed по своему составу…
Mogwaika
07.03.2017 11:28+1ПЛИСовая часть цинка управляет светодиодом напрямую или через интерфейсы процессора?
Вы бы хотя бы описали простейшее взаимодействие программируемой логики и софтовой части…
А то статья о том как залить файлик.
Про написание сопроцессора статья будет?
Vaxx
Спасибо, а статьи создание проекта в IDE Vivado фирмы Xilinx и разработка программы будут?