Если ты хочешь превратить код в микросхему, используя FPGA, то эта статья поможет тебе освоиться со всеми инструментами. Мы создадим простейший бинарный счетчик, способный считать вниз и вверх. Исходный код на языке Verilog мы промоделируем и синтезируем в среде разработки Xilinx Vivado. Заодно познакомимся с процессом разработки прошивки, а результат можно будет проверить на отладочной плате.
О том, что такое FPGA, как они устроены и почему во многих случаях они предпочтительнее, чем CPU, GPU и ASIC, читай в предыдущей статье: «FPGA. Разбираемся, как устроены программируемые логические схемы и чем они хороши».
Для примера я возьму простую и доступную Zybo board, но все будет работать на любой современной плате Xilinx, которая поддерживает Vivado. Если понадобится поменять файл ограничений, напиши мне, я смогу помочь.
Стоит сказать о требованиях к операционной системе. Я работаю в Ubuntu 16.04, но подойдут и Windows 7 или 10, CentOS 6 и 7 или SUSE последних версий.
Первым делом скачивай Vivado Design Suite — HLx Editions — 2018.2 Full Product Installation для своей ОС отсюда (на выбор варианты для Linux и для Windows).
Перед установкой следует зарегистрироваться на сайте.
Для ознакомительных целей я рекомендую установить бесплатную версию Vivado — WEB Pack, она по набору функций ничем не отличается от платной версии, но имеет ограничение на размер дизайна. Это значит, что счетчик в ней можно спроектировать, а что-то посложнее, что можно было бы продать, — вряд ли.
В конце установки откроется Vivado License Manager, также его можно открыть и из Vivado — через вкладку Help в главном меню. Сюда нам нужно подсунуть файл лицензии. Давай создадим ее.
Теперь 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
.
Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
1 год7190 р. Экономия 1400 рублей! |
1 месяц720 р. 25-30 статей в месяц |
Уже подписан?
Читайте также
Последние новости