Занимаюсь разработкой под микроконтроллеры я уже очень давно, и некоторое время назад обнаружил очень большой пробел в своих умениях — FPGA! А тема-то интересная и полезная, и вообще хочется очень разобраться. И вот я собрался и начал разбираться в этой теме, и по мере изучения буду публиковать статьи о том, как работать с FPGA и делиться своим опытом с вами. В данной же статье я предлагаю рассмотреть начальную настройку и тестирование отладочной платы DE10-Lite + Quartus lite в Linux.
Наверное рассказывать о том, что такое FPGA (или ПЛИС — программируемая логическая интегральная схема) не нужно, инфы об этом в интернете очень много, поэтому перейдем к делу. Для начала нам понадобится сама плата — немного погуглив и посмотреть варианты на Aliexpress, я остановился на DE10-Lite, так как она самая дешевая из тех, которые есть в списке плат в Quartus`е. Итак, допустим, у вас в руках оказалась эта отладочная плата от Altera. Для начала посмотрим что есть на самой плате:
С помощью данной платы можно изучить работу с 7-сегментными индикаторами, кнопками, диодами, а также VGA, SDRAM и инерционными датчиками.
Установка Quartus
Для начала необходимо установить среду для разработки Quartus. Для этого её нужно скачать с официального сайта. К сожалению там нужно регистрироваться, но работает это. Для скачивания необходимо выбрать следующее:
Для установки делаем следующее:
tar -xvf Quartus-lite-*-linux.tar
./setup.sh
# Тыкаем нужные кнопки
# Софт необходимо установить в директорию вашего юзера, это поможет избежать проблем с обновлением, например: /home/zen/intelFPGA_lite/20.1
rm -r setup.sh readme.txt components/ Quartus-lite-20.1.1.720-linux.tar
Обратите внимание что не стоит бездумно копировать команды отсюда т.к. они для МОЕГО пользователя и МОЕЙ версии quartus.
Для того чтобы иметь возможность запускать квартус из консоли, необходимо сделать следующее:
echo "export PATH=\"\$HOME/intelFPGA_lite/20.1/quartus/bin/:\$PATH\"" >> ~/.bashrc
Это сделает достумными для текущего юзера все программы входящие в пакет Quartus из консоли.
Так же мы ставили программу не от рута, а значит скрипт установки не смог прописать udev rules, а значит это нужно сделать в ручную. Для этого в UBUNTU создаем файл /etc/udev/rules.d/51-altera-usb-blaster.rules
и заполняем его:
# USB-Blaster
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6002", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6003", MODE="0666"
# USB-Blaster II
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6010", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6810", MODE="0666"
После чего обнавляем правила:
sudo udevadm control --reload
Далее отключаем и снова подключаем blaster к usb. Подробнее тут и тут.
Если вдруг вы ставите Quartus на винду обратите внимание на следующее - в диспетчере устройств usb-blaster помечен как не работающий. Это можно решить следующим образом:
- Найти в диспетчере устройств
Altera USB-Blaster
- Выбрать в меню
Обновить драйвер
Выполнить поиск драйвера на этом компьютере
- Указать путь
C:\путь к quartus\quartus\drivers
- Закрыть
Тестирование платы и софта
Далее скачаем документацию на данную плату. Лучше всего сделать это с помощью фирменного CD диска, доступного по ссылке. На этом диске куча полезных штук, таких как схема, даташиты, примеры и мануалы.
wget http://download.terasic.com/downloads/cd-rom/de10-lite/DE10-Lite_v.2.1.0_SystemCD.zip
unzip DE10-Lite_v.2.1.0_SystemCD.zip -d DE10-Lite
rm DE10-Lite_v.2.1.0_SystemCD.zip
cd DE10-Lite
Там будет следующее:
drwxrwxr-x 6 zen zen 4096 июн 8 2020 Datasheet
drwxrwxr-x 10 zen zen 4096 июн 8 2020 Demonstrations
drwxrwxr-x 2 zen zen 4096 июн 8 2020 Manual
drwxrwxr-x 2 zen zen 4096 июн 8 2020 Mechanical
drwxrwxr-x 2 zen zen 4096 июн 8 2020 Schematic
drwxrwxr-x 4 zen zen 4096 июн 8 2020 Tools
-r--r--r-- 1 zen zen 131647 июн 8 2020 Verify.md5
-r--r--r-- 1 zen zen 117372 июн 8 2020 Verify.sfv
Потом подключаем плату к компьютеру через usb коннектор от usb-blaster. При подключении запустится зашитая по дефолту тестовая программа:
Далее необходимо сделать следующее (находясь в папке DE10-Lite):
quartus_pgm -m jtag -o "p;Demonstrations/GSensor/output_files/DE10_LITE_GSensor.sof"
Если вывод зеленого цвета то все круто, если есть красные строки то что-то не работает, в этом случаем можно попробовать установить софт заново. Если все сработало то вы увидите что 7-сегментные индикаторы потухли, но если наклонить плату вправо и влево, то степень наклона отобразится на диодах LEDR.
Если вы вдруг на винде (ну малоли) можно сделать следующее:
На диске, который мы скачали, есть приложение для тестирования платы. Для того чтобы его запустить необходимо добавить 32битный jtag отладчик в папку с установленной программой. Для этого скачиваем архив и достаем из него папку bin32
потом кидаем в папку с установленным quartus, например C:\intelFPGA\16.0\quartus
.
Далее остаётся только запустить тестовую программу, находящуюся на диске в Tools\ControlPanel\DE10_Lite_ControlPanel.exe
. Программа зашивает тестовую прошивку, которая позволяет протестировать работу всех модулей на данной плате дабы убедится в их работоспособности (вы просто выбираете нужный пункт и ControlPanel и меняете состояние элемента на плате), но после перезагрузки запустится опять дефолтная прошивка.
Стартуем в Quartus
После того как мы поковыряли содержимое диска и протестировали плату с программатором, создадим простенький проект. Для этого запустим Quartus Lite Edition.
Увидим менеджер создания проекта. Скипаем первое окно (можно поставить галочку чтобы больше не смотреть на него). На втором окне вводим название проекта. Обратите внимание на то, что IDE не создает отдельную папку для проекта, так что надо создать ее самому.
В следующем окне выберем Empty progect
так как у нас нет заготовленных шаблонов. В третьем окне ничего вводить и менять не надо, так как у нас нет подготовленных библиотек. В четвертом окне нужно найти и выбрать нашу плату. При выборе квартус может сказать что этот шаблон слишком стар для такой версии квартуса, но не обращяем внимание, он все равно его применит.
В пятом окне тоже ничего не меняем, а в последнем смотрим что мы сконфигурирована:
Попробуем создать максимально простой проект который позволить убедится в работе системы. По сути мы просто соединим кнопку со светодиодом. При переключении тумблера будет загораться и гаснуть красный диод. Создадим новый лист с принципиальной схемой, для чего нажмем ctrl+n
и выберем Block Diagram/Schematic File
. Добавим туда вход и выход и соединим их.
В левом окне мы видим что в проекте есть уже один файл.
Это определение пинов FPGA, то есть нам не нужно смотреть на каком пине висит диод и кнопка, достаточно просто ввести их название с платы (номер в квадратных скобках).
Далее необходимо выбрать наш созданный файл как заглавный.
После компилим и зашиваем проект.
Слева в окне Tasks
можно следить за ходом компиляции. В окне Programmer необходимо выбрать наш программатор, а потом нажать Start
и ПЛИС прошьется.
Однако после перезапуска запустится дефолтная прошивка. Чтобы этого не произошло необходимо выбрать файл с расширением .pof (после нажатия на Add File), а не .sof.
В итоге получим:
Диоды, кстати, мерцают потому что в схеме их не подтянули ни к питанию, ни к земле.
Проблемы с Quartus
У меня возникла следующая проблема (эта ошибка высветится если запускать в терминале):
Gtk-Message: 12:28:39.404: Failed to load module "canberra-gtk-module"
Решается очень просто:
sudo apt install libcanberra-gtk-module
Icarus Verilog и GTKWave
К сожалению квартус очень тяжёлая софтина, а 95% времени разработки приходится работать с верификацией, а не железом. Поэтому я предлагаю использовать более легкий набор утилит это Icarus Verilog и GTKWave. Для начала разберется с первым. Для начала нужно проверить какая версия в репе, и если это версия ниже чем релиз то собрать из исходников. Рассмотрим второй вариант т.к. первый это просто sudo apt install iverilog
. Для сборки нужно:
git clone git://github.com/steveicarus/iverilog.git
cd iverilog/
sh autoconf.sh
./configure
# Для 2х последних команд нужно доустановить пакеты которые он просит
make -j 9
sudo make install
Проверяем:
iverilog -v
Должно отобразить последнюю версию. С GTKWave все попроще, т.к. версия программы для просмотра диаграмм не так важна:
sudo apt install gtkwave
В итоге мы научились создавать проект Quartus и написали первую прошивку. В следующих статьях я рассмотрю более подробно работу с IDE и более сложные программы.