Введение в ПЛИС: 1. Что такое ПЛИС
Содержание курса | 2. Языки описания аппаратуры
ПЛИС (программируемая логическая интегральная схема) — это электронное устройство, состоящие из большого количества логических элементов, которое можно программируемым образом настроить на выполнение нужной функции. Использование ПЛИС позволяет существенно ускорить разработку и производство электронной аппаратуры, поскольку значительная часть необходимой логики может быть реализована на одной микросхеме.
В простейшем случае можно представить ПЛИС, как матрицу, составленную из универсальных логических элементов, которые мы можем соединять между собой по нашему усмотрению. На самом деле, конечно, видов внутренних блоков гораздо больше. Здесь и специальные модули ввода-вывода, элементы памяти, отдельные dsp-блоки, высокоскоростные трансиверы и многое другое, в зависимости от модели ПЛИС. Чтобы понять, как мы пришли к текущей ситуации, давайте немного окунемся в историю и посмотрим на процесс развития ПЛИС. Начнем обсуждение с важного момента в истории электроники: появления транзисторов в 1947 году. О дотранзисторной эре можно почитать, например, здесь [1]. Замена громоздких ламп кремниевыми транзисторами к концу 1950-х годов позволила создавать сложные сборки логических элементов на одной подложке, что привело к появлению интегральных схем. В 60х годах продолжилось развитие полупроводниковых технологий, в частности, появились такие как ТТЛ и КМОП. Уже в 70х годах появляются первые программируемые микросхемы.
1970 — Компания Fairchild представляет первую 256-битную SRAM-микросхему. SRAM (Static Random-Access Memory) — статическая память с произвольным доступом. Является энергозависимой. От DRAM (динамической памяти) отличается в первую очередь тем, что не требует периодического обновления данных. В дальнейшем эти элементы стали активно использоваться как важная составляющая ПЛИС.
1970 — Разработан первый тип SPLD — микросхема ППЗУ. ППЗУ (программируемое постоянное запоминающее устройство) — это тип программируемой памяти, который обеспечивает возможность записи данных в устройство один раз, и эти данные остаются постоянными (неизменными) после этой записи.
1971 — Изобретение нового типа ROM (Read-Only Memory)-памяти — EPROM. Первое постоянное запоминающее устройство, которое обладает возможностью перезаписи. Осуществлялась перезапись под воздействием ультрафиолетовых лучей.
1975 — Появление нового типа SPLD — PLA (Programmable Logic Arrays), он же ПЛМ (программируемые логические матрицы). В основе PLA лежит развитие идеи микросхем ППЗУ.
Конец 70-х — Разработан ещё один класс SPLD — ПМЛ (программируемый массив логики) (PAL — Programmable Array Logic).
Конец 70-х — Началось активное использование ASIC-микросхем в связи с появлением нового типа данных устройств — вентильных матриц. Первая вентильная матрица называлась некоммутированная логическая матрица (ULA).
1983 — Появление памяти EEPROM, главным отличием которой от EPROM-микросхем является высокая скорость перезаписи. Это достигается за счет стирания данных электрическим способом.
1983 — Разработано устройство GAL — продолжение идеологии PAL.
1984 — Впервые продемонстрирована технология Flash, основанная на EPROM- и EEPROM-технологиях. Особенностью Flash является перезапись данных блоками, что сказывается на скорости и надежности элемента памяти.
1984 — Появились первые сложные программируемые логические устройства (CPLD) от созданной в этом же году компании Altera. Они представляют собой несколько SPLD, соединённых специальной программируемой логической матрицей.
1984 — Основание компании Xilinx. Росс Фриман из Xilinx разработал новый класс микросхем — FPGA-микросхемы.
1985 — Запуск производства первой FPGA-микросхемы, Xilinx XC2064 с 1000 вентилей. В ней применялась 3-микронная технология. [2]
Теперь давайте подробнее разберем вышеназванные типы ПЛИС. К SPLD (Simple Programmable Logic Device — простым программируемым логическим устройствам) можно отнести такие как ПЛМ, ПМЛ и GAL.
ПЛМ (программируемая логическая матрица) — она же PLA, представляет собой вид программируемого логического устройства, используемого для реализации комбинационных цифровых схем. В ПЛМ сигналы и/или их инвертированные копии через перекоммутируемую матрицу заводятся на массив элементов «И»(«AND»), результирующие сигналы проходят еще одну матрицу и поступают на массив элементов «ИЛИ»(«OR»). Такая структура позволяет синтезировать множество логических функций в одном кристалле. Обобщенный вид представлен на рис. 1 а).
Рис. 1: Обобщенная структура интегральных схем а) PLA, б) PAL, в) FPGA.
ПМЛ (программируемый массив логических элементов), он же PAL, состоит из фиксированных OR-матриц и программируемых AND-матриц. Это означает, что логика в PAL-устройстве программируется только в AND-матрице, а OR-матрица остается статичной. Это приводит к более ограниченной гибкости по сравнению с PLA. Но зато такие устройства получаются дешевле. Рисунок 1 б).
GAL — дальнейшее развитие PAL, основным отличием является возможность перезаписи прошивки, что значительно упростило прототипирование устройств.
CPLD (сложное программируемое логическое устройство) — это ПЛИС с большим числом логических элементов и блоков памяти, что позволяет реализовывать более сложные логические функции. Часто они содержат в себе энергонезависимую память, что позволяет хранить файл прошивки непосредственно внутри кристалла.
FPGA (программируемая пользователем вентильная матрица) — это самый мощный тип ПЛИС, который представляет собой массив логических элементов, соединенных между собой в форме матрицы. FPGA имеет множество встроенных блоков, таких как умножители, счетчики, блоки памяти и т.д., что позволяет реализовывать на ней самые сложные функции. Рисунок 1 в).
Попытаемся выделить, чем ПЛИС отличаются от других интегральных схем. Сначала рассмотрим сравнение ПЛИС с микроконтроллерами. Микроконтроллеры являются миниатюрными вычислительными устройствами, содержащими в себе микропроцессор, память и блоки ввода-вывода. Они обычно используются для управления периферийными устройствами, такими как датчики, моторы, светодиоды и другие, и обеспечивают простоту в использовании и программировании. ПЛИС, зачастую являются более емкими устройствами, в них можно реализовать функциональность множества микроконтроллеров, а также другие сложные цифровые системы. ПЛИС имеют гибкую архитектуру, позволяющую изменять логику и перенастраивать устройство в широких пределах функциональности. Помимо этого, с ПЛИС удобнее работать в системах, критичных к задержкам сигналов и различным временным параметрам. Это делает их более гибкими и мощными инструментами для проектирования цифровых устройств. С другой стороны, ПЛИС могут быть более дорогими и сложными в использовании по сравнению с микроконтроллерами. Также они могут потреблять больше энергии и требовать более сложной обвязки.
Еще одно сравнение можно провести с микросхемами ASIC (Application-Specific Integrated Circuit), которые специально разрабатываются для определенного приложения. ASIC могут быть очень эффективными, поскольку они оптимизированы для конкретных требований, что позволяет снижать энергозатраты, сокращать размеры устройства и добиваться непревзойденной производительности. Однако, проектирование ASIC требует значительных затрат времени и денег, и может быть нецелесообразным для небольших тиражей продукции или для проектирования прототипов. В отличие от этого, ПЛИС предлагают готовые блоки, которые можно использовать для создания сложных цифровых систем и быстро прототипировать свои идеи.
CPU (Central Processing Unit) и GPU (Graphics Processing Unit) являются общепринятыми типами процессоров, используемых в вычислительных системах. CPU — это устройство, которое обрабатывает инструкции и управляет операциями в компьютере. GPU же — устройство, которое занимается обработкой графической информации, используется для вывода изображений на экран и выполнения операций с изображениями, например, рендерингом. СPU работают на высоких тактовых частотах и являются эффективным решением широкого круга повседневных задач. GPU — содержат в себе большое множество более простых процессорных ядер, что отлично подходит для решения хорошо распараллеливаемых задач, таких как уже упомянутая работа с графикой. Также они широко используются в последнее время в области машинного обучения и искусственного интеллекта. ПЛИС отличается от CPU и GPU в том, что она представляет собой программируемую логическую матрицу, внутренняя архитектура которой может быть настроена на выполнение определенных функций в соответствии с требованиями приложения. CPU и GPU, напротив, обычно специализированы для выполнения определенного набора инструкций и не могут быть изменены после изготовления.
DSP-процессоры предназначены для обработки сигналов в режиме реального времени, таких как аудио-, видео-, радиосигналы и т.д. Они имеют специальные инструкции и аппаратную поддержку для эффективной работы с сигналами и преобразованиями. Они также могут иметь множество функциональных блоков, таких как АЦП, ЦАП, усилители и т.д. ПЛИС имеют большую гибкость и могут быть быстро перепрограммированы для реализации новых функций и алгоритмов. Это делает ПЛИС полезными для решения задач обработки сигналов, но они также могут использоваться для реализации других типов приложений.
Микроконтроллеры и процессоры — микросхемы с завершенной архитектурой, заточенные под исполнение последовательности команд. Но что, если мы, например, хотим сделать устройство, предназначенное для обработки большого количества сигналов, да еще и хотим, чтобы процедура обработки могла быть изменена по требованию заказчика. Тогда оптимальным решением могут быть ПЛИС.
Так как же вообще устроены ПЛИС и как с ними работать? ПЛИС представляют собой матрицу из тысяч или даже миллионов универсальных логических блоков. Каждый логический блок — сборка из комбинационной схемы, реализующей таблицу истинности, регистров, сохраняющих состояние схемы и системы управления, задающей требуемую структуру. Кроме логических элементов, ПЛИС также включает в себя элементы памяти и различные специализированные блоки, такие как PLL, используемые для генерации тактовых частот, вычислительные DSP-блоки, высокоскоростные приемопередатчики и др.
Разработчик на языке описания аппаратуры (HDL) описывает структуру, которую он бы хотел получить внутри кристалла ПЛИС. По этому описанию в результате компиляции проекта получают файл прошивки, который записывается в постоянную память на устройстве, и при включении питания происходит процесс конфигурирования ПЛИС, когда по данным файла прошивки устанавливаются внутренние связи между элементами ПЛИС.
Здесь следует понимать, что несмотря на то, что в целом HDL-описание напоминает код на языке программирования, например, язык Verilog является C-подобным с обильным заимствованием синтаксиса, оно, в отличие от программного кода, фактически задает схему внутреннего устройства микросхемы. Другими словами, на языке программирования вы описываете последовательность команд, которые должен выполнить процессор. Даже если процессор многоядерный и вы пишите многопоточное приложение, в конечном итоге программа все-равно сводится к последовательности команд. В ПЛИС же, вместо того, чтобы писать последовательность команд для процессора, мы можем написать сам процессор. Более того, там довольно часто применяются уже готовые софт-процессоры, для которых вы уже можете написать программу на С. Но и помимо процессора вы можете описать именно ту схему, которая вам нужна. Такая гибкость позволяет решать огромное число задач, которые без ПЛИС решить было бы довольно сложно.
Основными производителями ПЛИС являются американские корпорации Xilinx (c 2022 года объединилась с AMD) и Altera, которая в 2015 году была поглощена Intel. Ориентировочные данные (точных данных нет и в различных источниках оценки разнятся) по долям рынка, занимаемым основными производителями ПЛИС на 2021 год, представлены на рис. 2.
Рис. 2: Ориентировочные данные по долям рынка, занимаемым основными производителями ПЛИС на 2021 год.
Непосредственное производство большинства чипов осуществляется на Тайване и в Южной Корее. Также и в плане разработки, и в плане производства ПЛИС в последнее время активно развиваются китайские компании. Кроме разработки непосредственно архитектуры микросхем крупнейшие производители ПЛИС также занимаются развитием сред разработки проектов на ПЛИС. Так Xilinx развивает систему Vivado (ранее — ISE/PlanAhead), а Intel — Quartus. Данные пакеты являются сложными программными комплексами, предназначенными в основном для выполнения многоступенчатого процесса компиляции, в ходе которого по описанию на HDL синтезируется схема, после чего подбираются необходимые для ее реализации компоненты ПЛИС и происходит трассировка межблочных соединений. На выходе получаем бинарный файл прошивки, который с помощью встроенных средств среды может быть записан в ПЗУ устройства. Кроме вышеуказанного в состав сред разработки входят логические анализаторы, предназначенные для просмотра сигналов внутри ПЛИС, графические средства просмотра схем, генерируемых по описаниям, иногда — средства симуляции модулей. Также в каждой среде присутствуют системы высокоуровневой разработки, где вы можете собрать требуемую схему из уже готовых IP-блоков задавая только параметры блоков и межблочные соединения. Примерами таких IP-блоков могут служить уже упомянутые нами софт-процессоры (NiosII у Intel и MicroBlaze у Xilinx). Но и помимо процессоров имеется в запасе большой выбор модулей, предназначенных для работы с внешними интерфейсами, генерации тактовых частот, цифровой обработки сигналов и многое другое.
В этой главе мы познакомились с миром ПЛИС, начиная с их определения и заканчивая практическими аспектами их использования. Мы узнали, что ПЛИС — это высокоадаптивные микросхемы, позволяющие разработчикам гибко настраивать аппаратное обеспечение под конкретные нужды. Рассмотрев различные типы ПЛИС, включая SPLD, CPLD и FPGA, обозначили их разнообразные области применения. Сравнение ПЛИС с другими вычислительными устройствами выявило их уникальные преимущества, такие как возможность параллельной обработки данных и гибкость в применении. Мы также узнали о ключевых производителях ПЛИС и их средах разработки. В дальнейшем мы более детально разберем некоторые темы, затронутые здесь. Сейчас же переключимся на практические аспекты работы с ПЛИС.
Задание 1.
Установить одну из сред разработки на ПЛИС (Vivado или Quartus Prime) и ознакомиться с ней. Бесплатную версию ПО можно найти на сайте соответствующего разработчика. Конкретный номер версии нужно выбирать в соответствии с имеющимся в наличии отладочным модулем, на котором в последствии будет вестись работа. После установки нужно попробовать создать первый проект, посмотреть обучающие материалы можно, например, на Youtube. При создании проекта от вас потребуется придумать ему название (название может отражать его функцию, а также физический структурный элемент системы, на котором будет развернута прошивка), и указать целевую платформу (конкретный тип ПЛИС, для которой будет собираться проект).
Ресурсы
[1] https://skillbox.ru/media/code/revolyutsiya-tranzistorov/.
[2] https://parallel.ru/fpga/FPGA_history.html
Содержание курса | 2. Языки описания аппаратуры