Технология 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, с которыми можно столкнуться.
И жаль, что не так много людей ее активно используют и развивают.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 35

    +12
    FPGA достаточно дорогие, но надежные устройства. Они начинают включаться при меньшем напряжении, чем номинальное, выдерживают импульсные наводки, часто короткое замыкание на ножках IO, быстро загружаются и могут использоваться для контроля и управления процессорами и умной периферией.
    Цена ПЛИС может варьироваться в промежутке ~10$ -50000$. Надежность понятие крайне растяжимое, начиная с того это flash-based или SRAM-based FPGA, заканчивая конкретным дизайном, который может быть глючным сам по себе. Под меньшим напряжением, видимо понимается питание памяти конфигурации у SRAM-based FPGA, но, извините, это далеко не единственный домен питания, каждый банк питается определённым напряжением для поддержки соответствующего IO-стандарта (вы, кстати, это сами выше писали). По поводу скорости загрузки тоже некорректно, т.к. flash-based не грузятся вообще, а SRAM-based в зависимости от собственного размера и типа интерфейса конфигурации могут как медленно, так и очень-очень быстро. По поводу выдерживания импульсных наводок и КЗ — просто без комментариев… откуда вообще эти данные? Сейчас новички прочтут это и начнут коротить и перегружать выводы ПЛИС на отладочных платах, и будет очень весело отлаживать глюки в дизайне на глючном железе.
      –3
      Про надежность — это сравнение работающих плат с микроконтроллерами, процессорами и FPGA. И платы с FPGA во всех рассмотренных случаях оказывались наиболее живучими, особенно маленькие PLD серии MAX от Altera/Intel. Ни одного сброса прошивки или зависания за 20 лет работы устройств. А зависания процессоров по разным причинам от питания до наводок на шину — это классический процесс отладки и залатывания дыр в софте.
        +2
        Нет у FPGA (общих серий, MIL/AEROSPACE градации не рассматриваем, их всёравно нам никто не продаст) повышенной терпимости к КЗ на выходе. И с напряжениями тоже всё не очень вкусно, про 3.3в у современных вообще можно забыть, даже у Cyclone III в аппноуте была отдельная приписка про то, что 3.3в накладывает дикие ограничения на токи и быстродействие, у более свежих таким образом уже и 2.5в пропадает. Скорость загрузки — могу цитату интела привести: «Ого, у вас PCIe поднялось без механизма неполной загрузки и CvP — ну это сугубо ваше везение, и на новых чипсетах так работать не будет.»
          +1
          Использую Cyclone IV, без проблем работает с 3.3В сигналами.
            0
            Warning-и про 3/3.3в на IO видели?
              0
              LVDS по стандарту требует 2.5В, подключить 3.3В софт не даст. Но это не технологическое ограничение. Что делать в таком случае? Варианты: 1) плюнуть на стандарт, и провести собственные тесты на 3.3В, 2) на порядок повысить стоимость и сложность проекта. Я выбрал 1-ый вариант, тк не ответственное применение.
                0

                Про +2,5 вольта на LVDS не совсем так. Это требование не стандарта, а производителя конкретной микросхемы. К примеру, в Cyclone 10 GX формировать LVDS могут только банки с питанием +1,8 вольта. В более ранних Cyclone — только банки с питанием +2,5 вольта.

                  0
                  Согласен, ошибался, что это ограничение стандарта.
      +8
      На мой взгляд, есть два разумных применения ПЛИС:
      -Прототипирование кристаллов (с последующим запуском ASIC в серию)
      -Построение спецвычислителей/нестандартных контроллеров в малосерийном производстве (когда выпускать свой ASIC экономически нецелесообразно).

      Остальные задачи — это из пушки по воробьям, вроде «коммутируем 3,3 В на 2,5 В» или «ПЛИС как супервизор по питанию». Эти задачи решаются очень дешёвыми микросхемами, созданными именно для этого.

      А уж «заводите всё на ПЛИС, там разберёмся» — это вообще за гранью. Вы серьёзно считаете, что использование ПЛИС в качестве «коммутатора всего-на-всё» будет дешевле дополнительных 2 или даже 4 слоёв в плате?

      ПЛИС — это отличная вещь сама по себе. Вот только не нужно пихать её всюду по поводу и без.
        0
        Про разумные применения ПЛИС — предлагаю добавить еще один пункт, построение сложных вычислителей с возможностью изменения алгоритма обработки.
        Причем это изменение может быть как следствием исправления ошибки (в ASIC уже ничего не поправишь), так и просто заменой алгоритма шифрования, например.
          +1
          Так это и ежу понятно, у альтеры были даже серии hardcopy и сервис по заморозке дизайна и выпуску ASICа на этой самой серии, правда этот сервис похоронили с возвращением фирмы обратно в интел.
            +1
            в ASIC уже ничего не поправишь

            Я тоже так думал, но недавно узнал, что можно с помощью фокусированного ионного луча (Focused Ion Beam (FIB)) делать простые доработки: перерезать связь, добавить новую. Дорого, конечно. Но зато можно опробовать некоторые изменения до перезапуска разработки. Сродни перерезанным дорожкам и перемычкам на печатной плате при первом запуске.
          +2

          Более-менее — поддержу предыдущих ораторов.
          Пп. 1-3 — просто высосаны из пальца.
          По п. 6, если речь идёт о "сторонних" процессорах (т.е. "от 8086 до ...") — лучше начать с opencores.org, чем с сайта производителя ПЛИС.
          Остальное — верно в той или иной мере (которая определяется тиражом производимого прибора).

            –1
            opencores.org не поддерживает внутрисхемной отладки, которая есть в процессорах с сайта производителя ПЛИС. А она позволяет существенно ускорить отладку — на дворе уже 21 век давно. Не все же светодиодом моргать и в консоль выводить.
              +1
              В рамках интела не забудьте, что вам прийдется купить лицензию на ARM DS5 (хотябы Altera Edition) для этой отладки, иначе ничего, кроме как приложения через GDB на уже загруженном в АРМе линуксе вы не отладите.
                +1

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

              0
              У FPGA (но не CPLD !) возможная область применения действительно очень широкая. Дешевые FPGA, например, могут полностью вытеснить микроконтроллеры, это экономически и технологически оправдано. Мешает одно — отсутствие адекватных языков описания аппаратуры, ориентированных именно на синтез, а не на моделирование.
                0
                Если брать SystemVerilog, то я полностью согласен, но чем классические Verilog/VHDL плохи? Впринципе если в голове держать парадигму «всё параллельно и одновременно +-задержки», то можно довольно быстро въехать.
                  –1
                  Классические HDL плохи тем, что на них трудно описывать сложные алгоритмы обработки.
                    0
                    Сначала было трудно, потом привыкли :)
                    Изнутри HDL-инженера как-то затрудняюсь понять, в чём сложность и чего не хватает в плане «ориентации на синтез».
                      0
                      Классические HDL не сложны, просто недостаточны для решения многих задач, если сравнивать с традиционными языками программирования. Мне интересна эта тема, поэтому провел много экспериментов, пытаясь понять, чего именно не хватает традиционным HDL. Например, сравнивал сложность и громоздкость написания Тетриса на Си для ПК, и на HDL для ПЛИС. Или простого симулятора 2Д физики, включая графический редактор сцен, и тд. Это как раз задачи, для которых хватает ресурсов дешевых ПЛИС (без использования софт-процессора).
                0
                Дешевые FPGA, например, могут полностью вытеснить микроконтроллеры, это экономически и технологически оправдано.
                А вы не могли бы привести примеры? Какая дешёвая FPGA может вытеснить, скажем, stm32f303cct6?
                  0
                  По цене уже сейчас есть FPGA в районе 5$ на DigiKey, например у EFINIX (сам использую Cyclone IV). Такого выбора АЦП/ЦАП, как в МК, в ПЛИС пока нет, но это обусловлено не технологией, а существующим позиционировании на рынке. Но на FPGA можно, например, реализовать TDC ADC с быстродействием ~200Мвыб/сек при разрядности ~6бит, с минимальной пассивной обвязкой -сам пробовал (можно посмотреть мои посты под ником Leka на форумах ixbt.com, electronix.ru, marsohod.org).
                    0
                    Ну так это ни так не дешевле, ни эдак. Этот МК в рознице в России < $3. Ещё одно удорожание в случае FPGA — это решительное увеличение требований к квалификации разработчика. FPGA могут всякие интересные (и странные) вещи на скоростях, недоступных МК, но, почти всегда, это дорого и нишево.

                    А что насчёт потребления, как для носимой электроники и IoT?
                      0
                      FPGA сейчас не позиционируются на вытеснение МК, отсюда и разница в ценах. Малопотребляющие FPGA есть у Lattice.
                0
                Автор не написал интересного применения ПЛИС: защиты технологий. Во многих больших ПЛИС есть возможность «программировать» их зашифрованным содержимым. Ключ шифрования прошивается в чип, и расшифровка производится внутри него «на лету» при загрузке. Таким образом можно скрыть от любопытных алгоритмы преобразований сигналов или вычислений.
                  0
                  Вот только эта криптография как правило есть только в жирных ПЛИС, ценник которых не очень вкусный.
                  +3
                  Часть микросхем имеет интерфейс 1.2В, другая 1.5, 1.8, 2.5, 3.3В...

                  Угу, а ещё очень приличная их часть имеет интерфейс 5 вольт, и вот тут как раз случается облом… image
                  Да, и как заметили в комменте выше, с 3,3 В тоже есть определённые проблемы.

                  Только не надо говорить, что «такие уже мало где используются». Большинство читателей вашей статьи — не инженеры Intel или Realtek, а обычные радиолюбители с паяльником / программисты. А у них очень даже входу такие микросхемы.
                    +4
                    1)
                    Они начинают включаться при меньшем напряжении, чем номинальное, выдерживают импульсные наводки, часто короткое замыкание на ножках IO

                    Интересно, что есть FPGA, которые не поддерживают горячего включения. Т.е. пока каскады I/O не запитаются, на входы ничего нельзя подавать, иначе от тока на I/O FPGA может повредиться.
                    См. пример здесь, искать по «Do Not Drive I/O Pins During Power Sequencing»:
                    www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/cyclone-10/c10gx-51003.pdf

                    2)
                    FPGA (маленький PLD)

                    Подскажите пожалуйста, есть ли разница между Programmable Logic Device, Complex Programmable Logic Device и Field Programmable Logic Device?

                    3)
                    При этом отсутствует избыточность процессора, появляется малое потребление при той же скорости и функциональности

                    В то же время, FPGA кушает много тока. Одно статическое потребление некоторых FPGA уже поражает. Для ряда приложений, того же Интернета Вещей, микроконтроллер будет намного более выигрышным вариантом по потреблению.

                    4)
                    Отладив таким образом вычисления можно заказать ASIC, то есть заказную микросхему, выполняющую те же функции, но дешевле

                    Не совсем так. Проект, написанный для ПЛИС, можно попытаться перенести в ASIC. Только если в исходном проекте использовались примитивы FPGA (например, блочная память), то эти куски проекта придётся нещадно править. Никто не гарантирует, что под выбранный техпроцесс есть эквивалентные макроэлементы. Далее при синтезе логики под ASIC нужно будет добавлять сканирующую логику (Design for Test), ведь фабрика должна будет проверить готовый чип. Логика должна быть DFT friendly. В проектах для FPGA об этом даже думать не надо. Затем, в FPGA нет такой части, как back-end: не надо думать о целостности сигналов внутри кристалла, SPICE моделировании I/O. Добавление back-end, более объемная верификация требует больше человеко-часов. Уже только это скажется на стоимости разработки. Если приплюсовать сюда стоимость лицензий на инструменты, то получим намного менее привлекательную сумму.
                    ASIC будет дешевле только за счёт тиража, я бы сказал.
                    Да, есть такой интересный документ по преобразованию проектов ПЛИС под ASIC:
                    www.onsemi.com/pub/Collateral/HBD872-D.PDF
                    Там довольно неплохо описаны все этапы.

                    5)
                    гиганты разработки FPGA начали создавать специальное ПО, позволяющее интерактивно переносить части вычислений из программы на C/C++ в FPGA и контролировать быстродействие (HLS, High-Level Synthesis)

                    HLS всё равно описывает аппаратуру, поэтому нужен определенный стиль кода и описания функций. Нельзя взять любой C++ код, положить его в HLS синтезатор и получить на выходе рабочую логику.
                      +1
                      Далее при синтезе логики под ASIC нужно будет добавлять сканирующую логику (Design for Test), ведь фабрика должна будет проверить готовый чип. Логика должна быть DFT friendly. В проектах для FPGA об этом даже думать не надо.

                      Сканирующая логика нужна только если нужна — это решение на уровне архитектуры. Во многих случаях DFT может быть излишним — отлаженные, проверенные в прошлых проектах решения, простая схемотехника, отсутствие граничных требований по проектированию (площадь/скорость/потребление) и т.п. DFT в таких случаях может наоборот добавить новых проблем, а не помочь найти существующие.
                        0

                        Спасибо! Я пока только начал изучать мир проектирования ASIC. У меня сложилось впечатление, что без DFT совсем никак, потому что надо проверить чипы на пластине и отсеять брак.

                          +1
                          Я думаю, зависит от сложности цифровой части и архитектуры. Scan-chain, например, позволяет отбраковывать ошибки техпроцесса, когда где-то внутри произошло КЗ дорожек или плохо отлился кремний. В контексте сказанного вами для FPGA разработчику про такое действительно не нужно думать, т.к. он покупает микросхему уже после отбраковки.
                      0
                      Это только часть применений FPGA, с которыми можно столкнуться.
                      И жаль, что не так много людей ее активно используют и развивают.

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

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

                      Самое читаемое