С чего начать изучение FPGA. Часть 1.

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

Некоторое время назад я выкладывал проект простенького приёмника UART, для того чтобы показать на что похож процесс проектирования на ПЛИС. http://pikabu.ru/story/prostenkie_primeryi_na_plis_uart_chas...

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


В программировании обычно самая первая написанная программа это программа, которая выводит на консоль фразу “Hello world!”. Вот и мы не будем далеко уходить от канонов.

А что же такое “Hello world!” в железячном исполнении? А в железячном исполнении – это фиговина, которая будет моргать светодиодом. Вот мы с вами и опишем на языке VHDL схему, которая будет моргать светодиодом.


Период моргания 2 секунды, т.е. 1 секунду светодиод горит, 1 секунду не горит, потом опять 1 секунду горит, потом опять не горит. В общем вы поняли, он будет моргать до опупения пока нам это не надоест.


Итак, запускаем Quartus. Что? Вы ещё не скачали Quartus и Modelsim?

Тогда мы идём к вам! Тогда качайте незамедлительно! Это будет ваше первое задание на пути освоения программируемой логики. Хе хе хе. И оно не такое простое, как кажется, от вас требуется СМС и регистрация. Шучу. Только регистрация.

Итак запускаем Quartus и выполняем команды

FILE --> NEW. Подсказка: команду FILE можно найти вверху справа. Только не на потолке, а в углу экрана монитора.

Должно появиться такое вот меню:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

В нем тыкаем мышкой на слово New Quartus II Project, расположенное в самом верху этого меню. Тыкать надо не мышкой в монитор, а плавно наводим курсор мышки на строку New Quartus II Project и нажимаем левую кнопку мышки ОДИН раз.

Должна появиться такая вот менюха:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

Тыкаем мышкой на NEXT

И видим такую вот менюху:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

В верхней строчке (та, которая сверху) указываем папку, где будут храниться файлы нашего проекта. Очевидно, что они хранятся по пути C:/altera/13.1/PROJECT/HELLO_WORLD

Средняя строчка (та, которая межу верхней и нижней строчкой) – это название нашего проекта. У меня проект назван HELLO_WORLD.

Нижняя строчка – это имя файла верхнего уровня. В общем, не паримся и тоже пишем HELLO_WORLD. Затем, когда ваше меню выглядит также как и у меня (нет редактировать в Paint его не надо) тыкаем на кнопку NEXT. В следующем меню также тыкаем кнопку NEXT. И у нас должно появиться такое вот меню:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

В следующей менюхе опять ставим настройки как у меня:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

В настройках мы говорим, что моделирование у нас будет проводиться программе Modelsim, язык для моделирования – VHDL.

И наконец, жамкаем клавишу FINISH.


Всё, один из самых нудных мышкокликательных этапов мы закончили.

Теперь среда разработки готова к полноценной работе.

Но для начала, немного теории, как нам написать наш железячный Hello world.

В первую очередь необходимо придумать, как отсчитать периоды по 1 секунде.

В схемотехнике для счета чего-либо обычно используется счетчик (удивительно не правда ли?). А что же будет считать наш счётчик?

А считать он будет такты от тактового генератора.

К примеру, наш тактовый генератор, работает на частоте 100 MHz или 100 000 000 Герц. Это значит, что каждый раз как счетчик отсчитает от 0 до 99 999 999 (как раз 100 000 000 тактов) пройдет 1 секунда времени.


Далее должна быть схема сравнения, которая смотрит за состоянием счетчика. Как только счетчик досчитал до 99 999 999, схема сравнения должна выдать сигнал о том, что счетчик отсчитал период в 1 секунду.


Ну и последнее устройство - устройство, которое каждый раз как схема сравнения показала, что счетчик отсчитал 1 период, меняла состояние светодиода на противоположное. По сути – это обычный D-триггер с сигналом разрешения работы и соединенным входом и выходом через инверсию.

Каждый раз как триггеру разрешена работа (когда счетчик досчитал до 99 999 999), он меняет свое состояние на противоположное.


Вам наверное показалось, что объяснение сложное ? Какие-то схемы сравнения, триггеры, счетчики. Но на самом деле, на языке HDL все это дело выглядит очень компактно и просто. Вот картинка, поясняющая принцип работы нашего устройства:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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


Собственно давайте опишем нашу схему на языке VHDL. Для этого создадим файл куда мы будем писать наш проект. Для этого тыкаем мышкой:

FILE --> NEW --> VHDL FILE --> OK

У нас создаться текстовый файл, куда мы будет писать проект.

Сохраним пустой файл:

FILE --> SAVE AS --> СОХРАНИТЬ

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

Обычно программа сама присваивает файлу название файла верхнего уровня. У нас это HELLO_WORLD.

Ну и наконец описываем нашу схему на языке VHDL:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

И запускаем наше текстовое описание схемы на проверку ошибок и возможности синтеза внутри ПЛИС:

PROCESSING --> START ANALYSE & SYNESYS

Вылезли ошибки? Ищем очепятку. У меня всё работает(ну кто бы сомневался)!

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

Для этого тыкаем мышкой:

TOOLS --> NETLIST VIEWERS --> RTL VIEWER

И вот что мы там видим:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

На самом деле у нас сейчас написан мега-быдло-код. Это я для учебных целей разделил все на функциональные блоки, чтобы вам было проще понять описание схемы (какой я молодец).


На самом деле этот же код можно записать вот так, и не поменяется ровным счетом ничего:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

По большему счету проект закончен. И можно генерировать прошивку, прошивать ПЛИС и наша ПЛИС будет усердно мигать нашему миру светодиодом.


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

Но вот беда, Modelsim не знает, как должна работать схема. И он тем более не знает, что должно подаваться на вход нашей схемы. Задача разработчика написать такой файл, который моделирует внешнее окружение нашей схемы. Т.е файл, который задает внешние воздействия. Данный файл называется testbench – испытательный стенд.

Как правильно проводить тестирование это отдельная статья. Да какая нафиг статья! Правильное тестирование - отдельная прикладная область в разработке. Но в нашем случае ничего сложного нет: в тестбенче должен генерироваться синхросигнал и подаваться на вход нашей схемы.


К нашему большому счастью часть тестбенч умеет создавать Qusrtus, и нам останется только описать, как работает наш тест.

Чтобы создать тестбенч необходимо поклацать мышкой:

PROCESSING -->START -->START TEST BENCH TEMPLATE WRITER

Далее необходимо добавить наш тестбенч в проект для этого клацаем

ASSIGMENTS --> SETTINGS

И следуем указанием на картинке:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

Ну как, мышь не поломалась от бесконечного клацания ?

Теперь запускаем симуляцию:

TOOLS --> RUN SIMULATION TOOL --> RTL SIMULATION

У нас запускается Modlesim и на экране монитора появляется страшная НЕХ:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

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

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

C:\altera\13.1\PROJECT\HELLO_WORLD\simulation\modelsim\HELLO_WORLD.vht

Откроем этот файл тестовым редактором и удалим из него ненужную нам фигню, и добавим нужную нам. В итоге, после всех нехитрых манипуляций тест наш выглядит так:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

После того как подправили тест на тот, который нам нужен, запускаем перекомпилирование наших файлов проекта:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

После того, как перекомпилировали проект можно запускать на симуляцию.

Для этого укажем, сколько времени симулировать наш проект и запустим её:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

Обратите внимание, что на слабых машинах симуляция может быть достаточно долгой. Да и редко возникает необходимость моделировать несколько секунд работы устройства.

А вот и результаты нашего тестирования:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

Анализировать результаты работы можно просматривая временные диаграммы, или просматривая сообщения которые мы выводим на консоль.

Как видите тест показывает, что устройство наше вполне работоспособно, работает так, как мы и задумывали !

Наш железячный “Hello world!” прекрасно работает. Правда виртуально. Осталось прошить ПЛИС и наш проект заработает в железе, можете не сомневаться.

Да что тут говорить, смотрите сами !

Синтезируем прошивку:

PROCESSING --> START COMPILATION

После того, как прошла компиляция входим в меню программирования ПЛИС:

TOOLS --> PROGRAMMER

Ну и запускаем программирование:

С чего начать изучение FPGA. Часть 1. Плис, Fpga, Vhdl, Программирование, Схемотехника, Обучение, Видео, Длиннопост

А вот видео работы. Снимал на старенький HTC сильно не пинайте:

Спасибо за прочтение. Все интересующие вас вопросы пишите в комментариях.

Вы смотрите срез комментариев. Показать все
4
Автор поста оценил этот комментарий

Я когда изучал ПЛИС иногда плевался от многих гайдов.  

Там звучало типа так: открыли программу, нажали на хер дракона, открутили рог единорогу, и у вас всё круто.

Порой не хватало объяснения как для дебила ) Когда изучаешь что-то новое и непонятное, хочется проделать всё как обезьянка не включая мозга. А потом, когда будет результат планомерно изучать всю последовательность действий.

раскрыть ветку (6)
DELETED
Автор поста оценил этот комментарий
Слушай, я вот только наткнулся на твою эту статью, ив озникло пару вопросов. В двух словах - зачем это извращение с плис? Ты программируешь на чем то Паскалеподобном, что бы увидеть потом что-то похожее на язык лестничных диаграмм. Почему сразу не рисовать как на промышленных плис контроллерах?
раскрыть ветку (5)
1
Автор поста оценил этот комментарий

Скорость. ПЛИС гораздо быстрее ПЛК

раскрыть ветку (4)
DELETED
Автор поста оценил этот комментарий
Тогда встает вопрос о всяких атмегах, армах и стшках. Они вот тоже побыстрее будут, я плясок с бубном поменьше.
раскрыть ветку (3)
2
Автор поста оценил этот комментарий

Никогда они быстрее не будут. Я могу добиться работы на 200 мегагерц. На таких скоростях ни один из контроллеров работать не будет.

А если взять процессор, то он не сможет например обрабатывать большие потоки информации. А вот мой самый первый пост про плис, я там разжевал это более подробно.

http://pikabu.ru/story/s_chego_nachat_izuchenie_fpga_plis__4...

раскрыть ветку (2)
1
DELETED
Автор поста оценил этот комментарий
Ну в пизду. Статья прекрасная, но надеюсь мне никогда не понадобиться что-то наконец производительности. Лучше дальше костылять во всякие ардуины и ПЛК. Автор, кажется ты не из этой вселенной, удачи тебе, пиши ещё.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

ПЛИС - это особая магия, где требуется определенный склад ума и определенный класс знаний. И ничего сложного нет на самом деле, все достаточно просто. По большей части все упирается в знание интерфейсов. Ардуино - круто. Но вот представь себе ситуацию: у тебя появилась LVDS матрица от ноутбука, и ты хочешь на неё выводить изображение. Ни один из контроллеров с этим не справиться.  Ну опять-же все упирается в класс задач. Мне просто всегда была интересна цифровая схемотехника.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку