ПЛИС или Микроконтроллер

На первый взгляд странное сравнение ПЛИС с микроконтроллером. Ведь это совсем разные вещи, разные области применения. Но я бы хотел сравнить их с точки зрения технического творчества. Что выбрать интересующемуся цифровой техникой, DIY - ПЛИС или микроконтроллер для погружения в мир электроники? Большинство выбирают второе, и возможно, если хобби станет более серьезным, то со временим первое. Этот выбор скорее всего не осознанный, просто в интернете в сегменте DIY намного больше информации, примеров проектов на основе микроконтроллеров, таких как AVR (известная платформа Arduino), STM32 и другие. Второе выбрал и я. Но после того, как я добрался до ПЛИС, мой осознанный выбор в начале пути был бы в сторону первого. Я убежден, что новичку следует начинать именно с ПЛИС. И вот какие я могу привести аргументы.

В случае ардуино, запустив свой первый Hello Word - мигание светодиодом, может сложится иллюзия понимания происходящего, особенно если вы знакомы с программированием. Это иллюзия разбивается об реальность, как только вы начнете усложнять свой проект. И тут есть два пути развития.

Первый путь, на который сворачивают наиболее часто, это метод тыка, копипаста кусков кода с подобных проектов, с целью все таки заставить работать железку как задумано. Ясное дело, что подобное "творчество" не особо то и доставляет удовольствие. Если трудности, которые встречаются на пути к реализации проекта значительны, то есть вероятность и вовсе проект не закончить.

Другой путь - это попытка разобратся. В ходе которого оказывается, что хотя платформа arduino и предоставляет низкий начальный порог входа, но потом оказывается, что она лишь отодвигает довольно высокий порог. Так, применение AVR в своих проектах не отменяет необходимости читать довольно увесистый даташит, что бы тонко сконфигурировать режим АЦП, например. Что нужно разбираться в режимах работы периферии микроконтроллера, таких как таймеры и т.п. Что есть прерывания, DMA и т.д.

Ситуация с STM32 еще сложнее. Страниц в даташите намного больше, чем у ARM, периферии, ее режимов работы больше. Порог входа просто большой, в отличие от arduino. Здесь можно споткнутся уже на стадии конфигурирования проекта в IDE, которая больше походит на блокнот. Привет Keil и IAR! Не могу назвать редактор кода как IDE, если в нем отсутствует навигация по коду, автодополнение. В мире embedded с средствами разработки дела обстоят немного плачевно. Хотите настроить проект в Qt Creator? Привет установка тулчейна и изучение синтаксиса cmake или makefile.

Допустим вы прошли этот путь до Hello Word самостоятельно без статей по типу быстрый старт. Потому что вам все равно придется это все уметь, что бы двигатся дальше, самостоятельно. Вы правильно настроили периферию, записали правильные значения в нужные регистры. Теперь для продуктивной работы вам нужно докупить отладчик, и научится отлаживать. Без этого вы обьязательно где то застрянете.

Если вы вернетесь к проекту через какое то время, что бы что то подправить, вам придется начать все с начала. Ведь Вы же не думаете, что будете помнить, что означает запись в регистр OCR значения 0x56, например. Может стоило использовать HAL (hardware application laye) библиотеки от производителя? Ок, хорошая идея. Изучим HAL.

А вдруг вам нужно будет поменять семейство микроконтроллера, или даже производителя? Привет изучение по новой даташита, HAL и переписывание с нуля вашей прошивки. Тут может прийти осознание, что использование HAL библиотеки тоже не очень хорошая идея. Лучше бы вообще отделять логику от конфигурирования периферии микроконтроллера. Хорошо, изучим устройство ОС реального времени. А так же FreeRTOS или ChibiOS.

До кучи не забываем, что нужно знать С/С++ не на уровне базового синтаксиса. Знать что такое стек, распределение памяти в микроконтроллере и т.п. Знать цифровую электронику, архитектуру микроконтроллера в общем.

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

Но, скорей всего Вы не планируете это. Это лишь ваше хобби, и вам нужно лишь доделать до конца свой DIY проект. Поэтому большинство и выбирают первый путь, так как не готовы потрать много усилий и времени на освоение этого всего. А что бы разработка вашего проекта была приятной, вам следовало бы изначально отказатся от микроконтроллера в пользу ПЛИС. ПЛИС - это голая матрица логических вентилей, которые вы программируете как вам нужно. Из знаний вам необходимо лишь понимание цифровой электроники - булева алгебра, логические элементы, триггеры, регистры, счетчики, шифраторы - дешифраторы. Временные диаграммы. Все. Так же со временеим можно выучить VHDL или Verilog.

Если вы изучили цифровую электронику, то порог входа в ПЛИС нулевой. Но это еще не все. Микроконтроллер по сути ограничивает вас возможностями и наличием, количеством периферии. Поэтому на микроконтроллере Вы никогда не сможете сделать то, что можно на ПЛИС. Просто посмотрите на этот список проектов https://marsohod.org/projects. Разве не круто? Такого Вы не сможете получить с микроконтроллером. ПЛИС дает настоящую свободу для творчества в перевес к изучению часами периферии микроконтроллера, что бы его сконфигурировать нужным образом. С ПЛИС как я называю, включается режим Бога :) Вы полносью свободны в своем творчестве до такой степени, что можете разработать собственный микроконтроллер внутри ПЛИС или даже попробовать готовые проекты x86 - го процессора https://habr.com/post/146160/, эмулятора nintendo https://danstrother.com/fpga-nes/.

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

Надеюсь я убедил вас начать свой творческий путь в мире DIY именно из ПЛИС. Интересных вам проектов и хорошо проведенных часов за своим хобби!