В прошлой публикации я упомянул, что мой SBC для экспериментов пал смертью храбрых. Само собою, встала проблема нового подопытного.

Простой одноплатник мне как-то не хотелось приобретать, поэтому выбор мой пал на 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 ориентировочно таков:

  1. Создание проекта в IDE фирмы Xilinx
  2. Разработка конфигурации
  3. Генерация bitstream'а
  4. Прошивка

Создание проекта в 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'ом на процессорной части можно творить крутейшие вещи.
Поделиться с друзьями
-->

Комментарии (9)


  1. Vaxx
    05.03.2017 18:57
    +1

    Спасибо, а статьи создание проекта в IDE Vivado фирмы Xilinx и разработка программы будут?


  1. gazpar
    05.03.2017 18:58

    У меня пока руки кривы, чтобы правильно это сделать. Как наловчусь, так сделаю.


  1. kyb27
    06.03.2017 09:18

    Интересная платка. Как прошла доставка?
    А hdmi не пробовали еще? На сайте предлагают evaluation вариант ядра. Чем это скажется совсем непонятно.


    1. gazpar
      06.03.2017 18:37

      HDMI пробовал- рабочий стол отображается, запускал пару приложений. Вроде работает.

      Доставка не очень из-за того, что ЕМС уроды(специально скипали доставку для того, чтобы я сам её забрал+специально заблаговременно не оповещают о доставке или о не-доставке(к примеру, не собираются доставлять груз в оговорённое время, хотя заявка об этом подана заблаговременно)).


      1. kyb27
        07.03.2017 08:48

        Спасибо.
        Да, про ЕМС мало чего хорошего можно сказать.


  1. eromos
    06.03.2017 18:32

    Немного странный вопрос: а где вы нашли такой радиатор, можно ссылочку пожалуйста?

    А платка и правда интересная, похожа очень на microzed по своему составу…


    1. gazpar
      06.03.2017 18:33

      https://www.chipdip.ru/product/i-535-heat-sink + хэндмэйд


      1. eromos
        06.03.2017 18:54

        Спасибо, а то у нас идет работа с максимальной загрузкой и плисовой и процессорной части и греется просто ужас как все, а радиаторы маленькие что мы ставили не спасают, даже с кулером


  1. Mogwaika
    07.03.2017 11:28
    +1

    ПЛИСовая часть цинка управляет светодиодом напрямую или через интерфейсы процессора?
    Вы бы хотя бы описали простейшее взаимодействие программируемой логики и софтовой части…
    А то статья о том как залить файлик.
    Про написание сопроцессора статья будет?