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

Одним из направлений моей деятельности является преподавание в кружке робототехники в небольшом городке Беларуси. Окунувшись во всю эту кухню и поучаствовав в разных конкурсах не только как тренер команды, но и как судья, я пришел к выводу, что ардуино в частности и микроконтроллеры в целом не самая лучшая база для конкурсных роботов (про лего вообще молчу). Многие задачи эффективней решать на уровне голой электроники. Кроме того 90% процентов кружков и «школ» робототехники не дают даже базовых знаний именно электроники, сосредоточившись чисто на «обучении» программированию готовых конструкций. Но чисто электронные роботы (например незаслуженно забытые BEAM) заточены под конкретную задачу и изменение условий конкурса приведет к необходимости существенной перестройки робота, что не всегда возможно. Вот тут я и вспомнил про программируемую логику. В результате поиска информации о применении ПЛИС в обучении я наткнулся на блог Юрия Панчула YuriPanchul. Пользуясь случаем я хочу публично выразить ему свою благодарность. Благодаря ему наш кружок совершенно бесплатно получил плату 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).

image

Теперь необходимо сделать ряд настроек для успешной компиляции проекта. Во-первых укажем, какой модуль у нас главный явным образом. Конкретно в этом проекте это не актуально, но для сложных проектов с множеством модулей этот шаг обязателен. Заходим в меню 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 И наполняем его
смыслом:



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



Любуемся результатом, играемся переключателями, мигая светодиодиками:

Поделиться с друзьями
-->

Комментарии (43)


  1. nerudo
    23.09.2016 14:51

    Клавиатура на фото — тру. Эх, где мои 17 лет…


    1. jok40
      23.09.2016 14:59
      +1

      :) Не совсем. От шифта под ентером отделена какая-то кнопка. Это не тру.


      1. Roman_Popov
        23.09.2016 15:10
        +1

        Зато одновременно большой Enter и большой backspace! Из-за этого и перенесли слэши к шифту. Но вообще да, не совсем тру ибо псевдомеханика :( Тру мне ученики обещали на днюху подарить.


  1. nckma
    23.09.2016 16:13

    А Вы правда думаете детей посадить за квартус, чтоб они роботов программировали?
    Неужели получится? Как Вы это делаете? От ПЛИС иногда студенты впадают в уныние. Ну и англоязычный интерфейс — довольно таки большое препятствие.


    1. Roman_Popov
      23.09.2016 17:22
      +2

      Правда. Получится или нет — посмотрим. Собственно мы пока только начали. Есть группа старшеклассников с высокой мотивацией — пробуем пока с ними. Поскольку они уже пробовали на вкус программирование, то им понятней Verilog. Условная «малышня» (7-8 класс, есть несколько товарищей младше) пока занимаются с простой электроникой, их приобщать буду после осознанного построения цифровой логики на базе микросхем низкой степени интеграции. И видимо на уровне именно графического построения.

      Естественно речь не идет о встраиваемых процессорах, оптимизации архитектуры и пр. Но на уровне «запихать горку логики в один кристалл» думаю тема ПЛИС подъемна заинтересованным школьникам.

      Англоязычный интерфейс действительно препятствие, но тут ничего не попишешь…

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

      В общем посмотрим что и как получится. Если тема пойдет и удастся нащупать удачную методику преподавания, то есть честолюбивые планы забабахать свой робонабор чисто на ПЛИС :)


      1. UA3MQJ
        23.09.2016 20:11
        +2

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


    1. YuriPanchul
      24.09.2016 00:55
      +1

      Чтобы студенты не впадали в уныние, нужно просто преподавать ПЛИС интересно.

      Конечно, если давать делать что-нибудь скучное (мультиплексор из гейтов) и с графическим schematic entry (как это дается в некоторых российских вузовских методичках), то студент впадет в уныние.

      А вот скажем построить свой процессор шаг за шагом — это поинтереснее ( http://www.silicon-russia.com/public_materials/2016_09_01_kazakhstan/day_4_microarchitecture/01_slides/03_DDCA2e_LectureSlides_Ch7_Ru_2016_09_01.pptx ).

      Хотя вы правы в том, что придумать цепочку задач, которые были бы и доступны, и интересны — это нетривиальная задача.


    1. Aquarius-Michael
      25.09.2016 08:38

      Если интерфейс англоязычный, то необходимы хорошие учебные материалы с понятным и пошаговым пояснением. Главное, чтобы дети смогли освоить ПЛИС. Это очень хорошая область, где можно реализовать многое.
      Смотря какие студенты попадутся. Главное, их заинтересовать, показать им насколько широки возможности ПЛИС, который позволяет заменить собой десятки микросхем, что удобно для прототипирования и отладки. Помнится мне, ходил со студентами на факультативный курс по ПЛИС по желанию. Вот часть процента от желающих решила изучать и дальше. А остальные, не поняв, не стали дальше изучать. А я в первое время часто путался из-за не привычки в интерфейсе (тогда я занимался на MultiSim, но такое ПО ограничено производительностью ПК), но ещё раздумывал, как дальше поступить с ПЛИС. Следующий семестр с курсовой работой сделать функциональный аналог процессора Intel i4004 показал мне реальные возможности ПЛИСа. Вот отсюда и начал активно осваивать его, даже это было сложно. Теперь я работаю не только с кристаллами Altera, но и кристаллами Xilinx. Иногда присматриваюсь к Lattice для расширения кругозора.


    1. mezastel
      25.09.2016 23:49

      Я сажаю, вроде ничего, работает.


  1. ef_end_y
    23.09.2016 17:17

    можете сделать картинки кликабельными?


    1. Roman_Popov
      23.09.2016 17:34

      Ой блин… Не проконтролировал… Думал habrastorage сам готовый код дает. Может ткнете в инструкцию как это сделать, с ходу не нашел.


      1. Roman_Popov
        23.09.2016 17:49

        Сделал через костыль.


        1. ef_end_y
          23.09.2016 18:34

          Спасибо


  1. EBolov
    23.09.2016 18:53

    глаза от шрифтов в квартусе чуть не вытекли, самостоятельно такой ставили или «так и было»?


    1. Roman_Popov
      23.09.2016 18:55

      Так было. Меня лично напрягает только текст на верилоге.


    1. Aquarius-Michael
      25.09.2016 11:36
      +2

      Шрифты в Квартусе можно поменять при желании.


      1. Roman_Popov
        25.09.2016 12:57

        Да, после этого комментария залез в квартус и нашел где меняются шрифты :)


  1. vpuhoff
    24.09.2016 01:50

    Сама статья хорошая, спасибо, оказывается программирование FPGA не намного сложнее чем любого другого микроконтроллера. Но вам не кажется, что использовать FPGA Altera Cyclone V для мигания светодиодами это как убийство мухи из гранатомёта?
    Просто хотелось бы понять какие реальные преимущества у такой схемы по сравнению с любыми другими контроллерами (STM например).


    1. UA3MQJ
      24.09.2016 02:47

      Реальные преимущества схемы мигания светодиодом на ПЛИС в том, что можно помигать на циклоне в 4000 ячеек, и с тем же успехом переехать на MAX240. Не переписывая ни одной буквы кода. По аналогии с STM это было бы равнозначно переезду с STM32 на STM8. С определенными нюансами можно было бы переехать даже на другого производителя. Я пробовал и в принципе это реально.


    1. nerudo
      24.09.2016 14:16

      Можно мигать с частотой 1 ГГц! А если правильный кристалл взять, то и 10 ;)


    1. kh0
      25.09.2016 08:39
      +2

      Сэр. Убийство мухи из гранатомета очень оправдано, если совершено для обучения и ведет к более выскому уровню владению гранатомета. Тем более, что гранатомет подарили. Учебный.


    1. Roman_Popov
      25.09.2016 08:57

      Ну это же классика — для железячника помигать светодиодом это как для программиста «Hello world!». Просто первый урок. К тому же не просто мигание, а реализация логических функций.

      И как уже верно отметили, циклон подарен и плата удобна для обучения — все наглядно, разные кнопочки-светодиодики, VGA и т.д. Для установки на роботов есть дешевые и голые MAXII, для заливки на которые нужно только поменять конфигурационный файл для физических выводов.

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

      А основная сложность как раз таки принципиальное отличие в программировании по сравнению с микроконтроллером. Нужен «железно»-ориентированный подход. По факту это не «программирование», а «конфигурирование». Ну и для серьезных проектов постоянно держать в голове временные диаграммы, чтобы обеспечить синхронность работы. Для уже сформировавшегося программиста это может представлять почти непреодолимую сложность.


  1. ef_end_y
    25.09.2016 01:18

    Похоже я облажался. Заказал с Китая такую платку: https://ru.aliexpress.com/item/FPGA-development-board-ALTERA-IV-EP4CE-four-generations-NIOSII-send-send-remote-control-to-send-video/32657715247.html

    Приехала вместе с CD. На нем все на китайском языке. Есть какие-то примеры, но они явно написаны под иной чип или плату. Я нашел лишь несколько, которые подошли и все они примитивные и только лишь моргают светодиодами.

    Никакой инфы какие ноги чипа куда распаяны, кроме этих четырех светодиодов у меня нет.

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


    1. DanielKOcean
      25.09.2016 08:40
      +2

      Зайди в контакты у них на сайте и попробуй перевести в гугл транслэйте о чём это вообще :) Мыла, к сожалению, я так понял, нет у них на сайте, но намёки на какую-то связь должны быть. В конце концов лупу возьми да по дорожкам отследи, обычно выводят подряд на разъёмы. Почувствуй себя тру реверс-инженером, это иногда вдохновляет.


      1. jok40
        25.09.2016 15:08

        Поддерживаю. Чип установлен не бга-шный, так что срисовать схему с помощью обычной звонилки не должно составить труда.


        1. DanielKOcean
          25.09.2016 15:28

          Вот чем-чем, а звонилкой проверять FPGA, да и прочую микроэлектронику — стопроцентный шанс выпалить ноги.


          1. jok40
            25.09.2016 15:39

            Вот тут абсолютно не согласен. Мы то и дело реверсим схемы с каких-нибудь плат. Занимаемся этим уже много много лет. И ни разу за всё время не «выпалили» ни одной ноги. Под «звонилкой», я конечно, подразумеваю нормальную цифровую цешку, а не самоделку из батарейки и лампочки.


            1. DanielKOcean
              25.09.2016 15:46

              Ну если она умеет умно ограничивать ток при прозвоне, то какие вопросы, но мы же не можем быть уверенными в том, что у уважаемого пользователя окажется под рукой нормальный аппарат, а не китайская лампочка с батарейкой, замаскированные под «тестер» :) Так что в подобных советах лично я стараюсь быть аккуратным.


              1. jok40
                25.09.2016 16:08

                Ну Вы вообще меня запугали насмерть :) Двадцать с лишним лет рисую платы с помощью звонилок и ни разу не задумался о том, насколько опасное это занятие. Теперь плохо спать буду…

                А по делу: не морочьте человеку голову. С помощью лупы он точно ничего не нарисует, потому как платы нынче никто не делает двуслойными — тем более такого уровня интеграции. Так что только звонилка — только хардкор!


                1. DanielKOcean
                  25.09.2016 16:42

                  Все электронщики делятся на тех, кто уже сжигают чип за 50к+ и на тех, кто ещё сожжёт :)


                  1. jok40
                    25.09.2016 16:59

                    Волков бояться — в лес не ходить :)

                    Вот пример платы, с которой недавно пришлось рисовать кусок схемы.


                    1. DanielKOcean
                      25.09.2016 17:05

                      «При съёмках этого видео ни один BGA-чип не был отпаян!» (с)
                      Надеюсь, это какой-то майнер битков, который озолотит тебя :)


                      1. jok40
                        25.09.2016 17:27

                        А вот и не угадали! :) Чипов было заменено 12 штук (2 из них — BGA). Это интерфейсная плата от АТС. Никакого золота — обычная повседневная рутина.


    1. Roman_Popov
      25.09.2016 09:20
      +2

      Вроде в отзывах пишут, что документация на английском. Стоит написать продавцу. Можно погрозить плохими отзывами.


      1. ef_end_y
        25.09.2016 10:23

        Вот например отзыв с российским флажком: «Его работы удивительным». Может так русскоязычный написать? Думаю, отзывы проплачены.

        На сиди 99% инфы на китайском и несколько статей на английском, так что формально дока на английском у них как бы есть, правда она никак не относится к конкретному устройству.

        Вообще, ругаться с продавцом пока охоты нет, устройство по сборке очень качественное, буду пытаться заняться реверс-инженерингом как посоветовали выше


        1. Roman_Popov
          25.09.2016 13:00
          +1

          Отзывы не проплачены, уберите флажок «переводить на русский» и увидите, что русский флажок просто комментировал на английском :)

          И не забывайте, что это китайцы. У них менталитет такой, что если не поругались то и ладно. Если наехать — все сделают как надо.


      1. ef_end_y
        28.09.2016 15:11

        Поскольку я тут пошумел на китайцев, хочу сказать, что не все так плохо как я думал. У меня получилось среди тысячи иероглифов найти файлы для квартуса, где прописаны номера ног для VGA в частности. Сегодня я сделал свой первый проект «пин-понг» — нарисовал рамку и в ней шарик отскакивает от краев. На удивление, это оказалось не так уж трудно, в основном были косяки, связанные с тем, что для модулей необходимы регистры в качестве входного параметра и wire для выходного. В общем, спасибо за совет, но решил к китайцу не обращаться, сам разберусь


    1. nckma
      26.09.2016 08:43

      Есть же марсоход.орг


  1. jok40
    26.09.2016 08:17

    Хочу дать пару советов начинающим работать с демоплатами.

    Первое. На этих платах обычно установлено некоторое количество периферии. Это могут быть память, АЦП, eeprom, датчик положения в пространстве ну и т.п. Вся эта периферия уже подключена к каким-то ножкам чипа FPGA. Часть из этих ножек подают какие-то управляющие сигналы на эту периферию. Например, это могут быть сигналы Chip Select или Output Enable. Лучше не оставлять эти ножки ненастроенными: нужно объявить их в проекте и подать на них такой статический уровень, который бы держал выходы периферии в отключенном состоянии.

    Второе. Это такой простенький «лайфхак». На старте изучения платы (когда только начинаешь «играться» с ней) можно не париться с объявлением ножек вручную в пинплэнере, коих у чипа может быть несколько десятков, а то и сотен. Гораздо проще открыть файл с расширением «qsf» из любой демки от платы (это обычный текстовый файл), найти в нём блок команд, описывающих ножки, и скопировать этот блок в qsf-файл своего проекта. После чего можно будет сразу приступить к написанию кода на верилоге с использованием этих ножек.


    1. Roman_Popov
      26.09.2016 09:26

      Первое описано в данной статье.

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


      1. jok40
        26.09.2016 09:52

        Первое описано в данной статье.
        Вы, по всей видимости, имеете в виду абзац с этим текстом:
        Поэтому безопасней неиспользуемые выводы сделать входами с высоким сопротивлением — As input tri-stated

        Да, с этим я почти согласен. Но не полностью. Я не рекомендую настраивать абсолютно все неиспользуемые ножки на ввод. Ножки управления сигналами CS и OE периферии лучше всё-таки объявить в модуле, настроить на вывод и подать на них статический уровень — чтобы явно отключить периферию.

        То есть примерно так:

        module basic_logic
        (
        output DRAM_CS_N,
        output G_SENSOR_CS_N,
        output ADC_CS_N,
        ...
        );

        assign DRAM_CS_N = 1'b 1;
        assign G_SENSOR_CS_N = 1'b 1;
        assign ADC_CS_N = 1'b 1;
        ...
        endmodule


        1. nerudo
          26.09.2016 11:15

          Проще поставить Input tri-state with weak pull-up. Этого в 99% случаев начинающему будет достаточно.


  1. jok40
    26.09.2016 09:51

    Промахнулся