Если ты хочешь превратить код в микросхему, используя FPGA, то эта статья поможет тебе освоиться со всеми инструментами. Мы создадим простейший бинарный счетчик, способный считать вниз и вверх. Исходный код на языке Verilog мы промоделируем и синтезируем в среде разработки Xilinx Vivado. Заодно познакомимся с процессом разработки прошивки, а результат можно будет проверить на отладочной плате.

INFO

О том, что такое FPGA, как они устроены и почему во многих случаях они предпочтительнее, чем CPU, GPU и ASIC, читай в предыдущей статье: «FPGA. Разбираемся, как устроены программируемые логические схемы и чем они хороши».

Для примера я возьму простую и доступную Zybo board, но все будет работать на любой современной плате Xilinx, которая поддерживает Vivado. Если понадобится поменять файл ограничений, напиши мне, я смогу помочь.

Стоит сказать о требованиях к операционной системе. Я работаю в Ubuntu 16.04, но подойдут и Windows 7 или 10, CentOS 6 и 7 или SUSE последних версий.

 

Устанавливаем Vivado

Первым делом скачивай Vivado Design Suite — HLx Editions — 2018.2 Full Product Installation для своей ОС отсюда (на выбор варианты для Linux и для Windows).

Перед установкой следует зарегистрироваться на сайте.

Для ознакомительных целей я рекомендую установить бесплатную версию Vivado — WEB Pack, она по набору функций ничем не отличается от платной версии, но имеет ограничение на размер дизайна. Это значит, что счетчик в ней можно спроектировать, а что-то посложнее, что можно было бы продать, — вряд ли.

Программа установки Vivado 2018.2
Программа установки Vivado 2018.2

В конце установки откроется Vivado License Manager, также его можно открыть и из Vivado — через вкладку Help в главном меню. Сюда нам нужно подсунуть файл лицензии. Давай создадим ее.

Скрин страницы http://www.xilinx.com/getlicense
Скрин страницы http://www.xilinx.com/getlicense
  1. Заходим на xilinx.com, попадаем на следующую страницу.
  2. Выбираем свой аккаунт.
  3. Ставим галочку напротив Vivado Design Suite HL: WebPACK 2015 and Earlier License и жмем на Generate Node-Locked License.
  4. Далее используем MAC своей сетевой карты для идентификации хоста и генерируем файл лицензии, который ты позже получишь на почту.
  5. Получив файл лицензии в Vivado License Manager, жмем на Load Licence → Copy License.
Скрин Vivado License Manager на данном этапе
Скрин Vivado License Manager на данном этапе

Теперь Vivado установлена, и нам нужно убедиться, что она корректно запускается.

Открываем терминал в Linux и пишем:

$ source $XILINX_INSTALL_PATH/Vivado/2018.2/settings64.sh

где XILINX_INSTALL_PATH — место установки Vivado. Теперь для запуска достаточно написать vivado.

Также надо установить драйверы кабеля USB для загрузки прошивки. В Windows для этого просто ставим галочку Install Cable Drivers во время установки. В Linux следует вернуться в терминал и набрать следующее:

$ cd $XILINX_INSTALL_PATH/Vivado/2018.2/data/xicom/cable_drivers/lin64/install_script/install_drivers

Теперь ставим драйверы для платы Zybo:

$ sudo ./install_digilent.sh
 

Запускаем пример и моделируем схему

Мы спроектируем четырехбитный бинарный счетчик с задаваемым направлением счета и выводом значения на светодиоды. Счетчик будет синхронным: работать он будет на одной тактовой частоте. При работе в железе счетчик станет изменять свое значение не каждый период тактовой частоты, а один раз в секунду, иначе мы не увидим моргание (при частоте 125 МГц оно для глаза сольется в ровный свет).

После загрузки проекта в FPGA он будет работать так: каждую секунду четыре светодиода переключаются в соответствии с бинарным представлением значения счетчика. Помимо светодиодов, на плате есть еще кнопки и тумблеры. При нажатии на одну кнопку счетчик сбрасывается в ноль. Один из тумблеров разрешает счет, второй тумблер — задает направление счета.

Чтобы получить исходный код и запустить проект в Linux, нам нужно ввести такие команды:

$ git clone https://github.com/urock/rtl_examples.git
$ cd rtl_examples/counter_sv/vivado
$ source $XILINX_INSTALL_PATH/Vivado/2018.2/settings64.sh
$ ./create_project.sh

В Windows в месте выполнения скрипта create_project.sh надо открыть специальное терминальное окно из меню «Пуск» и из папки, созданной во время установки Vivado, перейти в директорию rtl_examples/counter_sv/vivado, где выполнить команду из файла create_project.sh.

В терминале открывается Vivado, создает проект, добавляет в него исходные файлы. Далее открывается Vivado TCL shell, здесь вводим команду start_gui, чтобы перейти в режим GUI. В окне Flow Navigator жмем Simulation → Run Simulation → Run Behavioral Simulation и видим окно вейвформ сигналов.

Вейвформы сигналов при моделировании
Вейвформы сигналов при моделировании

В этом окне отображаются зависимости от времени логических сигналов внутри нашей схемы счетчика. Мы видим тактовый сигнал clk, сигнал сброса reset, сигнал разрешения работы enable, сигнал выбора направления счета dir, сигнал cnt_en, который определяет частоту переключения битов счетчика, и, наконец, значение счетчика, выведенное на четыре светодиода.

Самое время посмотреть на исходные файлы! Закрываем симуляцию и смотрим в окно Sources.

Исходные файлы проекта
Исходные файлы проекта

В разделе Design Sources лежат исходные файлы RTL на языке System Verilog: counter.sv и counter_top.sv. В каждом определено по одноименному модулю, причем, как видно, модуль counter находится внутри модуля counter_top, что определяет иерархию модулей проекта.

В разделе Constraints находятся файлы ограничений XDC (Xilinx Design Constraints). Как уже упоминалось, в них определяются ножки микросхемы, к которым должны подключаться порты ввода-вывода верхнего уровня RTL (top level) и период тактового сигнала.

В разделе Simulation Sources, помимо наших файлов RTL, мы видим еще один уровень иерархии — самый верхний. Это так называемый test bench (tb) — виртуальный стенд, куда мы поместили модуль counter_top. Надо обратить внимание, что модуль counter_tb не имеет портов ввода-вывода: входные сигналы для нашей схемы назначаются непосредственно средствами языка System Verilog.

Посмотрим на код counter.sv.

Продолжение доступно только подписчикам

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Оставить мнение

Check Also

Энкодеры msfvenom. Разбираемся с кодированием боевой нагрузки при бинарной эксплуатации

Генерация полезной нагрузки — неотъемлемая часть эксплуатации. При использовании модулей M…