- PVSM.RU - https://www.pvsm.ru -
Продолжаем осваивать 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:
Выбираем «Create a New Project». Запускается диалог мастера создания проекта. Тут просто нажимаем Next.
А теперь нам надо выбрать рабочую директорию для проекта (не забываем про права доступа!). Придумываем название проекта:
На следующем шаге нам предлагают добавить в проект дополнительные файлы. На данном этапе нам это не нужно, но в будущем для облегчения работы стоит добавлять как минимум файл назначения выводов.
Теперь настало время важных настроек. На этом шаге нам надо выбрать кристалл, под который пишется проект. В принципе если вы ошибетесь или захотите перекомпиллировать проект под другое устройство — это можно будет исправить позже.
Здесь нам предлагают выбрать дополнительные инструменты. Мы пока оставляем все как есть и жмем Next.
Ну вот, мы выполнили первоначальные настройки и создали проект. Жмем Finish.
Теперь нам нужно создать файл, описывающий логику проекта. Заходим в меню File/New, появляется диалог в котором требуется выбрать тип файла. В принципе логику можно нарисовать в специальном графическом редакторе, но сейчас мы выбираем Verilog HDL File:
Файл создан, пишем текст нашей программы, описывающей элементы NO, AND, OR, XOR. В качестве входов используем, имеющиеся на плате переключатели (key*), а состояние выхода индицируем светодиодами (led*). Небольшая ремарка: производитель платы предлагает создать конфигурационный файл для входов-выходов в специальной программе, работающей только под Windows. Если пойти этим путем, то надо следить чтобы имена «проводов» и «регистров» в программе совпадали с таковыми в конфигурационном файле. Но мы сейчас будем делать все вручную, поэтому вольны выбрать любые имена.
Теперь сохраняем файл. Важный момент — для корректной работы необходимо, чтобы имя файла совпадало с именем модуля, описываемого в программе (В нашем примере basic_logic).
Теперь необходимо сделать ряд настроек для успешной компиляции проекта. Во-первых укажем, какой модуль у нас главный явным образом. Конкретно в этом проекте это не актуально, но для сложных проектов с множеством модулей этот шаг обязателен. Заходим в меню Project/Set As Top Level Entity. Готово. Далее надо сделать ряд настроек для конкретного кристалла. Выберем пункт меню Assignments/Device. Открывается диалог, в котором мы имеем возможность изменить тип кристалла (или проверить, что ранее мы его указали верно):
Теперь жмем кнопку Device and Pin Option и в открывшемся диалоге в первую очередь зададим состояние для неиспользуемых выводов. По умолчанию все неиспользуемые контакты микросхемы подключаются к нулю по питанию. Но мы не знаем, как эти выводы разведены физически на плате и такая конфигурация может привести к короткому замыканию и выходу из строя чипа. Поэтому безопасней неиспользуемые выводы сделать входами с высоким сопротивлением — As input tri-stated
Следующий необходимый шаг — указать, какие физические ножки микросхемы соответствуют входам и выходам описанного нами модуля. Для этого идем в меню Assignments/Assignment Editor. В открывшемся окне делаем нужные нам назначения согласно схеме нашей платы. В колонке To вписываем имя входа или выхода. В колонке Assignment Name выбираем из списка нужную нам настройку Location. В колонке Value вписываем название контакта микросхемы:
Закономерный вопрос: откуда берется название контактов? Обычно в даташите на плату или конкретную микросхему есть табличка PIN OUT. Так же, как я ранее писал, с платой может идти специальная программа, создающая конфигурационный файл. А сейчас вы можете воспользоваться этими данными:
Наконец-то можно нажать кнопочку Start Compilation!
Получаем 16 warnings. Ничего серьезного.
Можно посмотреть репорт:
Теперь подключаем плату и запускаем программу программатора: Tools/Programmer. Линукс автоматически подхватывает USB-Blaster, но прошивка не работает… Что же, открываем любимую консоль, вооружаемся бубном и погружаемся в документацию к Quartus…
Для начала убеждаемся, что система видит программатор:
dmesg | tail
Переходим в папку /etc/profile.d/ , где создаем файл custom.sh
А затем в папке /etc/udev/rules.d/ файл с названием 51-usbblaster.rules И наполняем его
смыслом:
Теперь все работает и прошивка прекрасно вгружается в чип:
Автор: 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
Нажмите здесь для печати.