Первый взгляд энтузиаста микроконтроллера на программируемую логику

Первый взгляд энтузиаста микроконтроллера на программируемую логику
Первый взгляд энтузиаста микроконтроллера на программируемую логику
Anonim

Первый взгляд на микроконтроллер Enthusiast на программируемую логику

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

Платы FPGA теперь в пределах досягаемости

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

Image
Image

Платформа разработки Papilio DUO FPGA. Собственная работа автора

Однако, даже если FPGA становятся более доступными и более удобными в использовании, чем в прошлые годы, вы все равно можете спросить «почему?». Не слишком ли быстрые и универсальные микроконтроллеры? Может быть, может и нет.

FPGA - это, по сути, пользовательский чип ASIC, который можно запрограммировать и перепрограммировать по мере необходимости. У FPGA с максимальной пропускной способностью есть миллионы ворот. Большинство из них чисто цифровое. Некоторые из них являются системой на чипе (SoC), с процессорами ARM и аналоговыми периферийными устройствами в одном пакете.

Было бы сложно решить одну «лучшую вещь», которую может сделать FPGA. Они невероятно универсальные устройства, но если бы мне пришлось выбрать один-один ответ, это было бы «параллельно», так как они могут делать больше чем одно за раз.

ПЛИС не ограничены одним путем выполнения

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

FPGA не является MCU и не имеет встроенного в него MCU. Однако вы можете создать свои собственные MCU в массиве ворот. Фактически, вы можете настроить много микроконтроллеров в массиве ворот, создав собственный многоядерный процессор. Более частое использование заключается в том, чтобы FPGA выполняла тяжелую вычислительную работу, в то время как подключенный MCU обрабатывает не-realtime I / O, пользовательский интерфейс и другие более мирские задачи.

Чтобы лучше понять возможности параллелизма FPGA, визуализируйте процессор или MCU как управляемый стопкой карт размером 3 "x 5". На каждой карте есть инструкция или слово, записанное на нем. Вы можете дублировать любую из карт так часто, как вам хотелось бы, и вы можете прыгать в своем стеке, как сочтете нужным.

Для обработки стека команд каждая карта должна проходить через один слот, по одной карте за другой. Этот слот представляет собой путь через арифметический логический блок MCU (ALU). Если вы используете одноядерный процессор, у вас есть только один ALU.

С каждым тактовым циклом одна карта подается через ALU. Если вы хотите выполнить функцию (группировку подмножеств карт) 5 раз, вам все равно придется кормить эту группу карт через слот 5 раз, каждая карта по отдельности. Внезапно 30-строчная функция становится 150 тактов работы.

Группы «Wire Up» логических ячеек

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

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

Image
Image

Подумайте о коде FPGA как о плане, а не о инструкциях

Конструкции ПЛИС создаются с использованием высокоуровневых языков проектирования, так же как компьютеры запрограммированы на языках программирования высокого уровня. Код языка FPGA похож на общий код C, но он действует совсем по-другому. В системе MCU код сообщает процессору, что делать в каждом такте, во время выполнения.

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

Код микроконтроллера в верхней части окна, код FPGA ниже:

Image
Image

«Массив ворот» в FPGA представляет собой большой массив таблиц поиска (LUT). LUT - это особый тип регистра, иногда называемый ОЗУ, который настроен для имитации логического элемента. Когда FPGA настроен, используемые LUT каждый имитируют какой-либо затвор. По существу, большой блок регистров превратился в вашу группировку логических ворот.

Путем настройки параллельных схем в FPGA ничего не было повторно использовано (если вы не решите повторно использовать), и ничто не должно проходить через узкое место ALU.

Например, рассмотрите возможность слияния датчиков реального времени на роботе с 20 различными датчиками, каждый из которых связывается через I 2 C.

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

С помощью FPGA вы можете настроить 20 независимых интерфейсов I 2 C. Все 20 будут работать точно в одно и то же время. В одном действии ваш бот на базе FPGA считывает все 20 датчиков одновременно. Данные могут быть введены в комбинаторную логику, которую вы создали, и представлены в виде виртуального анализа в MCU.

Несколько недостатков

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

Если вы собираетесь заглядывать в ПЛИС, нужно иметь в виду несколько вещей:

  • В мире MCU вы кодируете программу, а затем программируете ее во встроенную вспышку. В мире FPGA это не называется «программой», это «конфигурация».
  • В вашей системе разработки MCU вы можете вызывать скомпилированный код «HEX-файл» или «прошивку». С помощью FPGA вы обычно ссылаетесь на него как на «бит-поток» или «файл конфигурации».
  • Проекты FPGA обычно создаются с использованием одного из двух языков: Verilog или VHDL. Как правило, языки FPGA называются HDL или языками описания аппаратного обеспечения. Я узнал Verilog, и у меня недостаточно опыта работы с VHDL, чтобы сравнить их.
  • В некотором смысле, HDL выглядят как обычные языки программирования, но это не так. Verilog, в частности, выглядит довольно C-like. Не позволяйте этому дурачить вас, думая, что вы программируете MCU. Это принесет вам печаль.

FPGA - это не единственная программируемая логическая игра в городе. CPLD (сложное программируемое логическое устройство) аналогичны FPGA и нестабильны, но немного менее гибкими. Программируемые логические блоки также начинают отображаться в микроконтроллерах, таких как некоторые члены серии Microchip PIC. И компания Silego имеет семейство настраиваемых программируемых логических устройств смешанного сигнала в своей линии GPAK. Ни одно из этих других устройств не достигает контрольных точек, которые делают высокопроизводительные ПЛИС, но для более простых приложений они могут стоить внимания.

Вывод

Для меня самым большим изменением в мышлении о ПЛИС была концепция FPGA, настроенная во время включения, а не во время выполнения. Если вы вызываете функцию (также называемую модулем в HDL), вы не просто повторно используете кодовый блок при запуске программы. С помощью FPGA, когда чип включен и бит-бит загружен, вы создаете отдельные логические схемы. При кодировании это выглядит как программное обеспечение, но это не так. Это аппаратное обеспечение.

Благодаря небольшой работе FPGA могут открывать новые миры. Они мощные, не слишком трудные для изучения и увлекательно отличные от микроконтроллеров, с которыми большинство из нас знакомы.