- PVSM.RU - https://www.pvsm.ru -

Первый проект на FPGA Altera и подключение USB-Blaster в Linux

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 1

Продолжаем осваивать FPGA Altera. В первой части [1] я описал процесс установки программного обеспечения Altera Quartus под CentOS7. Теперь уже наконец попробуем что-то сделать «железное», например светодиодики позажигаем. Но прежде небольшое вступление.

Одним из направлений моей деятельности является преподавание в кружке робототехники в небольшом городке Беларуси. Окунувшись во всю эту кухню и поучаствовав в разных конкурсах не только как тренер команды, но и как судья, я пришел к выводу, что ардуино в частности и микроконтроллеры в целом не самая лучшая база для конкурсных роботов (про лего вообще молчу). Многие задачи эффективней решать на уровне голой электроники. Кроме того 90% процентов кружков и «школ» робототехники не дают даже базовых знаний именно электроники, сосредоточившись чисто на «обучении» программированию готовых конструкций. Но чисто электронные роботы (например незаслуженно забытые BEAM) заточены под конкретную задачу и изменение условий конкурса приведет к необходимости существенной перестройки робота, что не всегда возможно. Вот тут я и вспомнил про программируемую логику. В результате поиска информации о применении ПЛИС в обучении я наткнулся на блог Юрия Панчула YuriPanchul [2]. Пользуясь случаем я хочу публично выразить ему свою благодарность. Благодаря ему наш кружок совершенно бесплатно получил плату TerasIC DE0-CV c Altera Cyclone V на борту.

Собственно эта и последующие публикации будут представлять собой реальный учебный материал, который мы реализовываем на кружке. И я буду благодарен за конструктивную критику и замечания, так как применение ПЛИС на кружках для школьников — нехоженая пока область.

Итак, начинаем. В этой публикации будут описаны первые шаги в Quartus, описание элементарной цифровой логики на языке Verilog и загрузка конфигурации в FPGA Altera Cyclone V. Работать мы будем с платой TerasIC DE0-CV, которая имеет на борту встроенный USB-Blaster. Так же затронем и вопрос «запуска» USB-Blaster под Linux.

Запускаем Quartus:

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 2 [3]

Выбираем «Create a New Project». Запускается диалог мастера создания проекта. Тут просто нажимаем Next.

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 3 [4]

А теперь нам надо выбрать рабочую директорию для проекта (не забываем про права доступа!). Придумываем название проекта:

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 4 [5]

На следующем шаге нам предлагают добавить в проект дополнительные файлы. На данном этапе нам это не нужно, но в будущем для облегчения работы стоит добавлять как минимум файл назначения выводов.

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 5 [6]

Теперь настало время важных настроек. На этом шаге нам надо выбрать кристалл, под который пишется проект. В принципе если вы ошибетесь или захотите перекомпиллировать проект под другое устройство — это можно будет исправить позже.

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 6 [7]

Здесь нам предлагают выбрать дополнительные инструменты. Мы пока оставляем все как есть и жмем Next.

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 7 [8]

Ну вот, мы выполнили первоначальные настройки и создали проект. Жмем Finish.

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 8 [9]

Теперь нам нужно создать файл, описывающий логику проекта. Заходим в меню File/New, появляется диалог в котором требуется выбрать тип файла. В принципе логику можно нарисовать в специальном графическом редакторе, но сейчас мы выбираем Verilog HDL File:

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 9 [10]

Файл создан, пишем текст нашей программы, описывающей элементы NO, AND, OR, XOR. В качестве входов используем, имеющиеся на плате переключатели (key*), а состояние выхода индицируем светодиодами (led*). Небольшая ремарка: производитель платы предлагает создать конфигурационный файл для входов-выходов в специальной программе, работающей только под Windows. Если пойти этим путем, то надо следить чтобы имена «проводов» и «регистров» в программе совпадали с таковыми в конфигурационном файле. Но мы сейчас будем делать все вручную, поэтому вольны выбрать любые имена.

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 10 [11]

Теперь сохраняем файл. Важный момент — для корректной работы необходимо, чтобы имя файла совпадало с именем модуля, описываемого в программе (В нашем примере basic_logic).

image [12]

Теперь необходимо сделать ряд настроек для успешной компиляции проекта. Во-первых укажем, какой модуль у нас главный явным образом. Конкретно в этом проекте это не актуально, но для сложных проектов с множеством модулей этот шаг обязателен. Заходим в меню Project/Set As Top Level Entity. Готово. Далее надо сделать ряд настроек для конкретного кристалла. Выберем пункт меню Assignments/Device. Открывается диалог, в котором мы имеем возможность изменить тип кристалла (или проверить, что ранее мы его указали верно):

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 12 [13]

Теперь жмем кнопку Device and Pin Option и в открывшемся диалоге в первую очередь зададим состояние для неиспользуемых выводов. По умолчанию все неиспользуемые контакты микросхемы подключаются к нулю по питанию. Но мы не знаем, как эти выводы разведены физически на плате и такая конфигурация может привести к короткому замыканию и выходу из строя чипа. Поэтому безопасней неиспользуемые выводы сделать входами с высоким сопротивлением — As input tri-stated

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 13 [14]

Следующий необходимый шаг — указать, какие физические ножки микросхемы соответствуют входам и выходам описанного нами модуля. Для этого идем в меню Assignments/Assignment Editor. В открывшемся окне делаем нужные нам назначения согласно схеме нашей платы. В колонке To вписываем имя входа или выхода. В колонке Assignment Name выбираем из списка нужную нам настройку Location. В колонке Value вписываем название контакта микросхемы:

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 14 [15]

Закономерный вопрос: откуда берется название контактов? Обычно в даташите на плату или конкретную микросхему есть табличка PIN OUT. Так же, как я ранее писал, с платой может идти специальная программа, создающая конфигурационный файл. А сейчас вы можете воспользоваться этими данными:

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 15 [16]

Наконец-то можно нажать кнопочку Start Compilation!

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 16 [17]

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 17 [18]

Получаем 16 warnings. Ничего серьезного.

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 18 [19]

Можно посмотреть репорт:

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 19 [20]

Теперь подключаем плату и запускаем программу программатора: Tools/Programmer. Линукс автоматически подхватывает USB-Blaster, но прошивка не работает… Что же, открываем любимую консоль, вооружаемся бубном и погружаемся в документацию к Quartus…

Для начала убеждаемся, что система видит программатор:

dmesg | tail

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 20 [21]

Переходим в папку /etc/profile.d/ , где создаем файл custom.sh

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 21 [22]

А затем в папке /etc/udev/rules.d/ файл с названием 51-usbblaster.rules И наполняем его
смыслом:

Первый проект на FPGA Altera и подключение USB-Blaster в Linux - 22 [23]

Теперь все работает и прошивка прекрасно вгружается в чип:

Автор: Roman_Popov

Источник [24]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/191454

Ссылки в тексте:

[1] первой части: http://habrahabr.ru/post/310160

[2] YuriPanchul: https://habrahabr.ru/users/yuripanchul/

[3] Image: https://habrastorage.org/files/5b3/dcc/6b0/5b3dcc6b0c4448c4a2e9ccc121e5bfde.png

[4] Image: https://habrastorage.org/files/3b3/362/4a3/3b33624a32894ac09063e2db22403a6c.png

[5] Image: https://habrastorage.org/files/f58/a25/33f/f58a2533fae74f2b9b7850049a2200e5.png

[6] Image: https://habrastorage.org/files/956/b80/e83/956b80e83235413d96ea5a62e844d430.png

[7] Image: https://habrastorage.org/files/888/ea2/d44/888ea2d44e874c01ba3dc4de78afa105.png

[8] Image: https://habrastorage.org/files/eec/df4/ce6/eecdf4ce6b7a465a9ab978b45b1348d5.png

[9] Image: https://habrastorage.org/files/11c/711/9cd/11c7119cd2544cdcb654d5afe00f46fe.png

[10] Image: https://habrastorage.org/files/190/d88/022/190d88022be64fcdb8feb57ecb88d39e.png

[11] Image: https://habrastorage.org/files/cda/54d/481/cda54d481e6a4febb064a097a8444757.png

[12] Image: https://habrastorage.org/files/d68/773/0fd/d687730fdd0e4d48a0e07ee4480877a7.png

[13] Image: https://habrastorage.org/files/753/0c2/48d/7530c248da3c4829af0f9d825b22937e.png

[14] Image: https://habrastorage.org/files/fd4/290/023/fd42900235754efd9f93da34462cdb66.png

[15] Image: https://habrastorage.org/files/6e8/d6d/e34/6e8d6de340d743ee9651f9b8dfa4b8b0.png

[16] Image: https://habrastorage.org/files/4d0/93b/6f8/4d093b6f848540989bcf1f8b3e0701e1.png

[17] Image: https://habrastorage.org/files/fec/6b4/a5d/fec6b4a5d5744e4c8ccb5289dc1d7401.png

[18] Image: https://habrastorage.org/files/f73/c3a/1f7/f73c3a1f705a4a88bbd40cd1a45c4ab7.png

[19] Image: https://habrastorage.org/files/340/3c4/fc1/3403c4fc11f447f68d31883ebaf32365.png

[20] Image: https://habrastorage.org/files/bcf/f84/ae8/bcff84ae84ff4c5cb2f63fa28f15dd0c.png

[21] Image: https://habrastorage.org/files/cc7/ae1/76e/cc7ae176e57f4946a3d6ceee4eed1bb4.png

[22] Image: https://habrastorage.org/files/396/0f1/37c/3960f137c7bd4befad14072113e13e4f.png

[23] Image: https://habrastorage.org/files/828/10b/120/82810b1209e546b0bdfbc09d68d54db6.png

[24] Источник: https://habrahabr.ru/post/310816/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best