Перейти к содержимому

Fpga что это такое

  • автор:

История и архитектура FPGA

FPGA типа Stratix IV GX фирмы Altera

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

Введение

Аббревиатура FPGA расшифровывается как Field-Programmable Gate Array, что в дословном переводе означает «программируемая в полевых условиях вентильная матрица». На практике это означает, что данная микросхема не имеет строгой конфигурации логики, определённой производителем, и может быть переконфигурирована пользователем по своему усмотрению. Это открывает большие возможности перед производителями всевозможной радиотехнической аппаратуры, нуждающейся в управлении. Производственный процесс значительно ускоряется. Сокращается количество производственных циклов. Кроме того, при обнаружении ошибки в логике уже выпущенной продукции она просто перепрошивается. Вовсе не обязательно отзывать всю линейку из-за некорректной работы.

Купить микросхемы FPGA можно сегодня во всех крупных магазинах электронных компонентов. Их перепрограммирование осуществляется на одном из языков проектирования (как правило, на VHDL). В ходе перепрограммирования вносятся изменения в принцип работы микросхемы, а делать это можно «на лету» прямо в процессе эксплуатации изделия.

Основу микросхем FPGA составляют так называемые логические вентили. По своему устройству они подобны коммутаторам с несколькими входами и одним выходом. При работе микросхемы на их плечи ложится исполнение комбинационной логики либо простейших логических операций, таких как AND или XOR. В современных CPU, ориентированных на широкий потребительский сегмент, функции логических ячеек строго фиксированы и не в состоянии меняться по ходу эксплуатации. В FPGA дело обстоит несколько иначе. Данные микросхемы могут менять топологию соединений на основе получаемых сигналов. Разумеется, такой подход влечёт за собой и увеличение числа транзисторов, а вместе с ним и удорожание кристалла. Но гибкость, которую дают подобные микросхемы, попросту незаменима в ряде задач.

История

Принцип работы FPGA

Технология FPGA развилась на основе PROM и PLD, став их логическим продолжением. Обе эти микросхемы были программируемыми, однако суть этого программирования заключалась только лишь в реконфигурации связей между логическими вентилями, но никак не в изменении логики их работы. Так продолжалось вплоть до 1985 года, когда Бернард Вандершмит и Росс Фримен, основавшие за год до этого компанию Xilinx, выпустили на рынок первую FPGA — XC2064. Эта маркировка микросхем навсегда вошла в историю. Впервые реализованная концепция программируемого пользователем матричного кристалла навсегда изменила рынок микросхем и дала мощный толчок к развитию электронных компонентов. В 2006 году, спустя 17 лет после своей смерти, изобретатель FPGA Росс Фримен был занесён в американский Национальный зал славы изобретателей, почитающий фундаментальные вклады учёных в развитие технологического, социального и экономического прогресса.

Первые годы своего существования микросхемы FPGA не пользовались высоким спросом. Несмотря на всю революционность данной технологии, её потенциал был попросту не востребован, да и процесс реконфигурации требовал специфических навыков. Настоящий интерес к технологии проснулся лишь в начале 90-х с развитием телекоммуникационных сетей. Конкурируя друг с другом, компании Xilinx и Altera начали разрабатывать новые решения. Микросхемы FPGA становились всё более сложными и к концу 90-х вышли далеко за пределы телекоммуникационного сектора, заняв ниши в автомобилестроительном, индустриальном и промышленном сегментах.

В 1997 году произошло интересное событие, вызвавшее всплеск всеобщего внимания к технологии FPGA. Учёный Адриан Томпсон, занимавшийся исследованиями в области эволюционного развития искусственных систем, осуществил удивительный эксперимент. Он взял микросхему FPGA производства Xilinx и поставил перед ней задачу научиться распознавать сигналы в 1 кГц и 10 кГц. При этом микросхеме нельзя было пользоваться таймером для определения частоты. Другими словами, она должна была научиться делать это самостоятельно без какого-либо первоначального алгоритма. С этой целью для логических ячеек были сгенерированы 50 случайных программ, каждая из которых начала в прямом смысле бороться за существование. В следующее «поколение» проходили лишь те программы, которые лучше всего справлялись с поставленной задачей. В итоге спустя 3500 поколений в FPGA микросхеме сформировалась конфигурация связей, способная безошибочно распознавать сигналы частотой 1 кГц и 10 кГц. Этот факт стал сенсацией для всего научного сообщества, ведь логика микросхемы родилась в результате естественного эволюционного процесса, а не оптимизации кода человеком. Остаётся лишь догадываться, какие алгоритмы могут появиться на свет в результате эволюционного процесса, происходящего на кристалле кремния.

Архитектура

Архитектура FPGA базируется на трёх основных компонентах:

Архитектура FPGA

  • логические блоки (ПЛБ);
  • Input/Output блоки (I/O);
  • маршрутизационные каналы.

Архитектура FPGA

Программируемые логические блоки — это ключевые функциональные элементы, выполняющие главную роль в организации логики микросхемы. Они размещаются на пересечениях линий решётки, составленной из горизонтальных и вертикальных каналов. Данные каналы образуют некое подобие шины и способны соединяться в требуемом порядке при помощи электронных ключей, образуя тем самым нужные пользователю связи между ПЛБ. Конфигурация этих связей называется матрицей соединений. Она хранится в памяти микросхемы и может быть перезаписана в зависимости от задач, стоящих перед разработчиком.

Программируемые логические блоки FPGA от Xilinx

Программируемые логические блоки FPGA от Xilinx

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

Блоки ввода-вывода FPGA (Xilinx)

Блоки ввода-вывода FPGA (Xilinx)

Главная особенность FPGA состоит в том, что каждый программируемый логический блок здесь имеет несколько входов и всего один выход. Рассмотрим конфигурацию логического блока более подробно на примере микросхемы производства Xilinx. Он вмещает в себя таблицу истинности (lookup table или LUT), хранящую внутри себя описание логической функции с подведёнными к ней четырьмя входами. В последние годы Xilinx, Altera и другие крупные производители FPGA микросхем постепенно переходят на LUT с увеличенным количеством входов, что даёт возможность использовать меньшее количество программируемых логических блоков, добиваясь при этом той же производительности.

Поскольку выход у логического блока только один, LUT может быть либо регистровым, либо нерегистровым. Почти во всех коммерчески ориентированных FPGA синхронизирующие сигналы передаются специфическим способом через унифицированные трассировочные цепи.

Расположение контактов логического блока

Расположение контактов логического блока

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

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

Маршрутизационные каналы FPGA (Xilinx)

Маршрутизационные каналы FPGA (Xilinx)

В последнее время компании Altera и Xilinx демонстрируют стремление к оптимизации техпроцесса, перенося большинство базовых функций на аппаратный уровень. Микросхема будет работать гораздо быстрее, да и её площадь ощутимо уменьшится, если большинство базовых функций будет реализовано на уровне кристалла. Среди таких функций:

  • интегрированная память;
  • процессоры цифровой обработки сигналов;
  • I/O логика.

Перспективы развития FPGA

Производители пытаются ещё больше расширить сферу применения FPGA, сделав технологию ближе к пользователю. Так, к примеру, компания Altera активно продвигает фреймворк OpenCL для описания параллельных вычислений, производимых в FPGA. Предпринимаются и другие шаги в направлении популяризации FPGA и её продвижения в массы. Не так давно Altera в сотрудничестве с Intel создала микросхему E6x5C — некий гибрид FPGA и процессора из линейки Atom. Однако продукт так и не смог выйти на массовый рынок, так как слишком далеко ушёл от традиционной парадигмы программирования. Однако только представьте, насколько могут расшириться возможности современных компьютеров, если в их процессорах, помимо традиционных ядер и кэш-памяти, будут установлены программируемые логические блоки. Разумеется, оптимизация кода под такие устройства — нетривиальная и довольно трудоёмкая задача. Однако и перспективы, которые откроются перед пользователем, возможно, будут стоить того.

Технология FPGA для тысячи применений

Трудно представить другую технологию, которая настолько разносторонняя как FPGA.
FPGA — Field-Programmable Gate Array, то есть программируемая логическая матрица (ПЛМ), программируемая логическая интегральная схема (ПЛИС). Это технология, при которой создается микросхема с набором логических элементов, триггеров, иногда оперативной памяти и программируемых электрических связей между ними. При этом программирование FPGA оказывается похоже на разработку электрической схемы, а не программы. Пользуюсь данной технологией давно и попробую описать самые полезные с моей точки зрения применения по мере их усложнения.

1. Помощь при разводке плат

Многие наверняка сталкивались, что центральный процессор, память, другие многоногие микросхемы создавали люди, редко задумывающиеся о том, как они будут соединяться на печатной плате. Протянуть шину разрядностью 32 или 64 бита — задача не решаемая без многослойной платы. Но стоит поставить между микросхемами FPGA как разводка становится на несколько порядков проще:

И все это благодаря возможности внутренней перекоммутации сигналов внутри FPGA.

2. Согласование уровней сигналов

Часть микросхем имеет интерфейс 1.2В, другая 1.5, 1.8, 2.5, 3.3В, и все эти микросхемы можно подключить к одной FPGA и обеспечить двусторонний обмен за счет того, что любая FPGA имеет несколько банков ввода-вывода, каждый из которых может иметь свое опорное напряжение сигналов. Например, так:

3. Обеспечение надежности устройства

FPGA достаточно дорогие, но надежные устройства. Они начинают включаться при меньшем напряжении, чем номинальное, выдерживают импульсные наводки, часто короткое замыкание на ножках IO, быстро загружаются и могут использоваться для контроля и управления процессорами и умной периферией. Плюс могут реализовывать вспомогательные функции коммутации, задержек, моргания светодиодом и так далее. Мне очень нравится использовать FPGA (маленький PLD) как умный сторожевой таймер и схема запуска — ни разу не подводил.

4. Автоматы состояний или аппаратное программирование

Если на процессоре сначала создается «исполнитель команд», то есть процессор, а потом в него загружается последовательность команд, то на FPGA можно писать программу с командами, вшитыми в структуру прошивки. При этом отсутствует избыточность процессора, появляется малое потребление при той же скорости и функциональности, гарантированное время выполнения и высокая надежность. Пример такого автомата состояний:

5. Создание процессора внутри FPGA

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

Недостатком такого процессора является отсутствие готовых компиляторов и отладчиков.

6. Использование готовых библиотек процессоров для FPGA

Библиотеки готовых процессоров есть у любого производителя FPGA (от 8086 до ARM), позволяют быстро создать процессор с определенным набором периферии и вставить его в проект FPGA. К процессору прилагается компилятор и отладчик. Быстро, удобно, но избыточно и потому ограничено по быстродействию. Пример структуры готовой библиотеки процессора:

7. Объединять процессор и периферию в одной микросхеме — SoC (System-On-Chip)

SoC — достаточно новая технология, решающая самую страшную проблему инженера, необходимость протаскивать по плате много высокоскоростных интерфейсов, которых всегда оказывается недостаточно, и которые необходимо программно поддерживать. Технология SoC позволяет в одной микросхеме иметь полноценный центральный процессор (поддерживающий операционную систему Linux, например) или микроконтроллер и большую FPGA, соединенные логическими сигналами, общей внутренней памятью и интерфейсами к внешней. То есть проблема эффективной, простой и быстрой передачи информации между FPGA и процессором успешно решена! Пример структуры SoC:

Видно, что FPGA и HPS (Host Processor System, процессор) находятся внутри одной микросхемы и окружены программируемыми ножками ввода-вывода. Действительно это многофункциональная система на кристалле.

8. Модные приложения типа crypto mining

Вспоминая, что FPGA — это набор логических ячеек и триггеров, работающих параллельно, на FPGA можно проводить много параллельных операций, что отличает от процессора, параллельность которого ограничена количеством ядер и потоков. Поэтому можно использовать FPGA как сопроцессор к центральному процессору, вынося на FPGA все самые требовательные к вычислительной мощности операции. Например, центральный процессор занимается логической обработкой задачи, а FPGA параллельно вычисляет контрольные суммы, хэши, ищет совпадения, перебирает варианты и так далее. Быстродействие FPGA ограничено только количеством параллельных блоков и временем выполнения одной операции. Отладив таким образом вычисления можно заказать ASIC, то есть заказную микросхему, выполняющую те же функции, но дешевле (при массовом производстве) и с меньшим энергопотреблением. И данная идея оказалась настолько перспективной и удобной, что гиганты разработки FPGA начали создавать специальное ПО, позволяющее интерактивно переносить части вычислений из программы на C/C++ в FPGA и контролировать быстродействие (HLS, High-Level Synthesis). Есть готовые платы с быстрыми интерфейсами для этого и средства отладки. Очень интересная и перспективная тема для использования.

9. Реализация нейронных сетей на FPGA

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

Поэтому перенеся нейронную сеть на FPGA удается на много порядков ускорить работу нейронной сети, остается обеспечить высокоскоростной интерфейс для загрузки исходных данных и получения результата. В качестве примера — реализация системы распознавания лиц на процессоре i7/9Gen распознает до 20 лиц за секунду с одной видеокамеры HD, реализация на FPGA — порядка 1000 лиц с нескольких камер. Структура используемой глубокой нейронной сети:

Это только часть применений FPGA, с которыми можно столкнуться.
И жаль, что не так много людей ее активно используют и развивают.

Архитектура ПЛИС (FPGA)

FPGA image

FPGA – это сокращение от английского словосочетания Field Programmable Gate Array.

ПЛИС – это сокращение от словосочетания «Программируемая Логическая Интегральная Схема». Слово ПЛИС встречается в русскоязычных документациях и описаниях вместо слова FPGA. Далее по тексту в основном будет использоваться этот термин — ПЛИС.

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

Логика работы ПЛИС определяется не на фабрике изготовителем микросхемы, а путем дополнительного программирования (в полевых условиях, field-programmable) с помощью специальных средств: программаторов и программного обеспечения.

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

Проект для ПЛИС может быть разработан, например, в виде принципиальной схемы. Еще существуют специальные языки описания аппаратуры типа Verilog или VHDL.

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

Обычно, сама микросхема ПЛИС состоит из:

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

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

Разработчик проекта для ПЛИС обычно абстрагируется от внутреннего устройства конкретной микросхемы. Он просто описывает желаемую логику работы «своей» будещей микросхемы в виде схемы или текста на Verilog/ VHDL. Компилятор, зная внутреннее устройство ПЛИС сам пытается разместить требуемую схему по имеющимся конфигурируемым логическим блокам и пытается соединить эти блоки с помощью имеющихся программируемых электронных связей. В общем случае размещение и трассировка связей между логическими блоками в ПЛИС остается за компилятором.

Классификация ПЛИС по типу хранения конфигурации.

SRAM-Based.
Это одна из самых распространенных разновидностей ПЛИС. Конфигурация ПЛИС хранится ячейках статической памяти, изготовленной по стандартной технологии CMOS.
Достоинство этой технологии – возможность многократного перепрограммирования ПЛИС. Недостатки – не самое высокое быстродействие, после включения питания прошивку нужно вновь загружать. Значит на плате должен еще стоять загрузчик, специальная микросхема FLASH или микроконтроллер – все это удорожает конечное изделие.

Flash-based.
В таких микросхемах хранение конфигурации происходит во внутренней FLASH памяти или памяти типа EEPROM. Такие ПЛИС лучше тем, что при выключении питания прошивка не пропадает. После подачи питания микросхема опять готова к работе. Однако, у этого типа ПЛИС есть и свои недостатки. Реализация FLASH памяти внутри CMOS микросхемы – это не очень просто. Требуется совместить два разных техпроцесса для производства таких микросхем. Значит они получаются дороже. Кроме того, такие микросхемы, как правило, имеют ограниченное количество циклов перезаписи конфигурации.

Antifuse.
Специальная технология по которой выполняются однократно программируемые ПЛИС. Программирование такой ПЛИС заключается в расплавлении в нужных местах чипа специальных перемычек для образования нужной схемы.
Недостаток – собственно программировать / прошивать чип можно только один раз. После этого исправить уже ничего нельзя. Сам процесс прошивки довольно не быстрый. Зато есть масса достоинств у таких ПЛИС: они довольно быстрые (могут работать на больших частотах), меньше подвержены сбоям при радиации – все из-за того, что конфигурация получается в виде перемычек, а не в виде дополнительной логики, как у SRAM-based.

Конфигурируемые логические блоки.

В документации компании Альтера встречается выражение Logic Array Block (LAB) – массив логики. У компании Xilinx в микросхемах ПЛИС есть примерно такие же блоки — Configurable Logic Block (CLB). Конфигурируемый логический блок – это базовый элемент в ПЛИС, в нем может быть выполнена какая-то простая логическая функция или реализовано хранение результата вычисления в регистрах (триггерах).

Сложность и структура конфигурируемого логического блока (CLB) определяется производителем.

Теоретически, конфигурируемый логический блок может быть, например, очень простым, просто как отдельный транзистор. Или он может быть очень сложным, как целый процессор. Это крайние точки реализации.

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

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

Таким образом, выбор структуры конфигурируемого логического блока производителем ПЛИС – это всегда поиск компромиса по площади кристалла, по быстродействию, энергопотреблению и так далее.

Конфигурируемый логический блок может состоять из одного или нескольких базовых логических элементов. В англоязычной литературе это Basic Logic Element (BLE) или просто Logic Element (LE). В ПЛИС обычно используются так называемые LUT-based базовые логические элементы. Что-то вроде этого:

ПЛИС, FPGA базовый логический элемент BLE

Рис. 1. Пример традиционного базового логического элемента.

LUT – это Look-Up Table, таблица преобразования. Например, на Рис.1 показан четырехбитный LUT в составе базового логического блока. Здесь четырехбитному числу на входе логической функции ставится в соответствие однобитный результат. Красные квадратики на Рис. 1 обозначают программируемый элемент, регистр – это та память, где хранится прошивка для ПЛИС. Видно, что для конфигурации 4-х битного LUT требуется 16 конфигурационных регистра. Содержимое этих регистров определяют логическую функцию, реализованную внутри базового логического элемента.

Еще один конфигурационный регистр (на Рис. 1 это одиночный красный квадратик справа) определяет нужно ли на выход базового логического элемента выдавать прямо значение с LUT или нужно выдать зафиксированное в D-триггере значение с LUT. Фиксация и хранение данных в цифровых схемах нужна практически в любом проекте.

Примерно такой логический элемент использовался в моем экспериментальном проекте «ПЛИС внутри ПЛИС».

Рассматривая Рис. 1 как пример традиционного базового логического элемента понимаешь какая избыточность заложена внутрь современного кристалла ПЛИС (SRAM-based). Ведь в самом деле, конфигурационные регистры (красные квадратики) прямо не доступны для использования в цифровом проекте. Они только служат для формирования пользовательской функции. Для одного D-триггера в пользовательском проекте требуется более 16 (иногда много больше) триггеров для хранения конфигурации ПЛИС.

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

Altera MAX II Logic Element

Рис. 2. Базовый логический элемент CPLD MAX II компании Альтера.

Здесь хорошо видны LUT и D-Триггер хранения результата. Ниже, на Рис. 3 представлен базовый элемент Cyclone III.

Altera Cyclone III Logic Element

Рис. 3. Базовый логический элемент FPGA Cyclone III компании Альтера.

В микросхемах Альтеры в одном LAB может содержаться 10-16 LE.

В микросхемах компании Xilinx Virtex-6 базовый логический элемент – это так называемый Slice. В одном CLB всего два Slice. Зато один Slice – это довольно сложное устройство:

xilinx slice

Рис. 4. Базовый элемент Xilinx Virtex-6 Slice.

В одном CLB Virtex-6 имеется 8 LUT и 16 D-Триггеров и еще кое-что плюс к этому. Вот так все сложно.

Другая крайность – микросхемы FPGA компании Microsemi (бывшая Actel).
Например, в микросхемах серии 40MX базовый логический элемент выглядит вот так:

Logic Module Microsemi 40mx

Рис. 5. Logic Module of Microsemi 40MX serie.

Восемь входов и один выход.
Здесь нет ни Look-Up Table, ни даже D-Триггера. Триггера, как и остальная логика, формируются где нужно из вот таких крошечных кирпичиков – Logic Module.

Почему у разных компаний получилась такая большая разница в реализации базового логического элемента? Видимо в микросхемах Microsemi связь между базовыми блоками обходится гораздо дешевле: серия 40MX является однократно программируемой. В ней межблочные связи «проплавляются» между соединяющими дорожками и позже не могут быть изменены. Нет никаких регистров для временного хранения прошивки. Здесь нет программируемых переключателей, мультиплексоров, как в FPGA других типов. Ну микросхемы компании Microsemi — это несколько особый случай. Это технология называется antifuse – для производства таких микросхем используется модифицированный техпроцесс CMOS с дополнительными слоями для организации межблочных связей.

Программируемые связи между логическими блоками.

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

Для этого в ПЛИС имеются специальные конфигурируемые коммутаторы.

В англоязычной документации встречаются следующие термины: FPGA Routing Architecture и Programmable Routing Interconnect. Это все об этом, о программируемых связях между логическими блоками.

Известно две основных методики построения ПЛИС по типу архитектуры связей: островная и иерархическая.

island style FPGA

Рис. 6. Островная ПЛИС.

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

Здесь, на Рис. 6 обозначаются CB – Connection Box и SB – Switch Box. В сущности это программируемые мультиплексоры, подключающие тот или иной CLB к другому CLB через цепочки проводов в ПЛИС.

Это island-style FPGA или mesh-based FPGA. Типичный пример таких микросхем – это серии Altera Cyclone и Stratix.

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

hierarhical style FPGA

Рис. 7. Иерархическая ПЛИС.

Здесь близлежащие CLB соединить довольно просто, нужно не много коммутаторов и получающиеся связи работают быстро. Вот если нужен более крупный блок вычислителей, то сигнал должен выйти на более высокий уровень иерархии и потом зайти вглубь в соседнюю «комнату».

Нельзя сказать, что это существенно хуже, чем island-style. Просто каждый метод имеет свои плюсы и минусы.

Типичные представители иерархических ПЛИС – это микросхемы компании Альтера серии Flex10K, APEX.

Программное обеспечение для проектирования ПЛИС.

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

Компилятор должен проанализировать пользовательский проект (схемы и текстовые описания на Verilog HDL или VHDL ) и сгенерировать нетлист (netlist) – список всех элементов схемы и связи между ними. Netlist должен быть оптимизирован – логические функции нужно минимизировать, возможные дублированные регистры нужно удалить.

Затем компилятор должен вместить всю логику из netlist в имеющуюся архитектуру ПЛИС. Это делает фиттер (fitter). Он размещает логические элементы и выполняет трассировку связей между ними (процесс place and route). Сложность состоит в том, что один и тот же проект может быть размещен в ПЛИС разными способами и этих способов миллионы. Некоторое размещение и трассировка оказываются лучше, другие хуже. Главный критерий качества полученной системы – максимальная частота, на которой сможет работать проект при данном размещении элементов и при данной трассировке связей. Здесь оказывает влияние длина связей между логическими блоками и количество программируемых коммутаторов между ними.

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

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

Программное обеспечение компании Альтера: Quartus II.
ПО Xilinx для проектирования для ПЛИС: ISE Suite, Vivaldo Design Suite.
ПО компании Microsemi: Libero IDE, Libero SoC.

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

Что такое FPGA — об интегральных схемах простым языком

Что такое FPGA — об интегральных схемах простым языком

Микроконтроллеры и процессоры стали неотъемлемой частью технологического будущего. Немаловажную роль в этом будущем играет технология FPGA или так называемые программируемые интегральные схемы. Что это такое, как работает и где используется — рассказываем в деталях в нашем материале.

Программируемые логические интегральные схемы

Проектирование новых интегральных схем — сложный и многогранный процесс. Разработчикам необходимо продумать расположение огромного числа элементов: сдвиговые регистры, дешифраторы, мультиплексоры и прочее. Большинство интегральных схем (ИС), в том числе процессоры и микроконтроллеры, имеют предопределенную логику работы.

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

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

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

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

Основным «кирпичиком» при построении любой интегральной схемы являются логические элементы (вентили) — «И», «ИЛИ», «НЕ». На их базе уже создаются триггеры, регистры и так далее.

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

Однако в начале 70-х годов на рынке начали появляться первые программируемые логические устройства. Ключевое отличие от процессоров и микроконтроллеров — можно самостоятельно задавать архитектуру. Связи между логическими элементами не были предопределены и поддавались редактированию.

Изначально такие связи выполнялись в виде пережигаемых тонких проводников. По мере совершенствования технологий стали использоваться МОП-транзисторы с плавающим затвором. Появилась возможность реконфигурировать внутреннюю структуру микросхемы.

Так появились различные подвиды ПЛИС. Например, в середине 80-х популярностью пользовались микросхемы PAL (программируемые матрицы логики). В схемах PAL элементы «И» — программируемые, а элементы «ИЛИ» — фиксированные. На базе таких блоков можно было создавать достаточно сложные заказные схемы с минимальными затратами. Однако PAL имели плавкие титано-вольфрамовые перемычки, поэтому не могли использоваться повторно.

В 1985 году появилось семейство микросхем GAL — Generic Array Logic. В отличие от предыдущих эти схемы можно было программировать многократно, повторно задавая связи между элементами. Группу из PROM, PAL, PLA, GAL принято обобщать термином SPLD — Simple Programmable Logic Device.

Однако большую часть рынка сегодня занимают CPLD (Complex Programmable Logic Device) и FPGA. В чем разница между этими двумя группами микросхем — это довольно обширный вопрос. Мы же подробнее расскажем именно про FPGA.

Что такое FPGA

Как мы выяснили, FPGA (Field-Programmable Gate Array) — это один из подвидов программируемых интегральных схем. Строятся такие микросхемы на логических блоках с гибкой коммутацией — причем число блоков может доходить до сотен тысяч штук. Прошивка с «картой» необходимых связей между логическими ячейками сохраняется в энергонезависимой памяти.

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

Если смотреть структуру CLB подробнее, то здесь все зависит от каждой конкретной микросхемы. Чем дороже плата — тем обычно большие возможности предлагает каждый конкретный конфигурируемый логический блок.

Здесь мы можем увидеть:

  • LUT — Look-Up Tables. Каждый такой блок способен реализовать любую логическую функцию используя в качестве данных операнды с входов.
  • Специализированные управляемые пользователем мультиплексоры (MUX) для комбинационной логики.
  • Блок арифметической логики, который позволяет делать суммирование и умножение операндов (зеленый блок).
  • Несколько однобитных регистров для хранения информации (желтые блоки).

Таким образом, CLB — это своеобразный универсальный кирпичик, который способен выполнить практически любую операцию над данными. На FPGA плате таких — сотни и тысячи.

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

С помощью FPGA фактически можно создавать цифровые схемы: хотите — сетевой контроллер на 100G Ethernet, а хотите — всего в пару нажатий можно реконфигурировать схему и сделать четыре контроллера 25G Ethernet. Более того, на базе FPGA можно создать даже собственный процессор.

К ведущим производителям FPGA микросхем относятся компании Lattice Semiconductor, Microsemi, Altera, Xilinx и некоторые другие. Прогнозируется, что к 2026 году мировой рынок FPGA достигнет 9,1 млрд долларов США по сравнению с 6,2 млрд в 2021 году. Такой рост во многом стал возможен благодаря активному расширению возможностей программируемых интегральных схем, которые уже используются в самых разнообразных областях.

Сфера применения FPGA

По своей универсальности FPGA проигрывают типичным процессорам и микроконтроллерам. Однако возможность буквально программировать архитектуру дает преимущества в специфических задачах, в том числе перед ASIC.

Применение

Центральный процессор

FPGA

Графический процессор

ASIC

Видео и обработка изображений

Обучение искусственного интеллекта

Управление промышленными двигателями

Управление встраиваемыми системами

Прототипирование, малый тираж

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

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

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

Параллелизм также отлично подходит для быстрой обработки больших объемов данных, что позволяет частично использовать FPGA в суперкомпьютерах или информационно-измерительных системах. Например — создание системы распознавания лиц на базе процессора Intel Core i7 девятого поколения распознает до 20 лиц в секунду только с одной камеры. Реализация этой же системы на FPGA позволяет распознавать до 1000 лиц, причем с нескольких камер.

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

Заключение

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

FPGA предлагает максимальную гибкость, а со временем благодаря совершенствованию техпроцесса вырастет и производительность плат.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *