Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Вступ до FPGA: все, що варто знати про програмовані матриці

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Всім привіт! Мене звати Юрій Грицай, я Software Engineer у львівському офісі GlobalLogic.

Технологія FPGA давно зайняла свою нішу та швидко розвивається в умовах сучасного технологічного прогресу. Сьогодні я спробую пояснити чому, а також розкажу, у чому унікальність FPGA, яка їхня специфіка та чим вони відрізняються від інших типів контролерів.

Що таке FPGA?

FPGA розшифровується як Field-Programmable Gate Array, тобто логічна інтегральна схема, яка може бути запрограмована користувачем. Іншими словами, це чіп, що складається з безлічі функціональних елементів та логічних зв’язків, які можуть бути визначені на етапі програмування.

Оскільки у FPGA немає чітко заданої архітектури, як у будь-якого іншого процесора, вам доведеться побудувати її самому на початку реалізації проекту. Це означає, що ви можете сконфігурувати потрібний вам функціонал і зібрати його в ту архітектуру, яка потрібна для вирішення конкретної задачі. Більше того, використовуючи FPGA, ви можете здійснювати реалізацію функцій паралельно, тобто кожна задача може виконуватись незалежно від інших, єдиним обмеженням є алгоритмічна побудова задач, коли один процес не може початись без отримання вихідних даних іншого. Цим підходом, власне, FPGA і є унікальним та відрізняється від інших типів процесорів.

Уявімо, що у нас є задача інвертувати кожен піксель кадру відеопотоку. Використовуючи FPGA, можна кожен піксель зробити окремою функцією, яка в один і той самий момент часу буде інвертувати конкретно вибраний піксель. І за один момент часу (один процесинг крок) можна інвертувати весь кадр. Не можна сказати, що це є непосильною задачею для інших типів процесорів, але тут використання FPGA є оптимальним.

‘’Серце’’ FPGA


В цілому, можна виділити три головні елементи, з яких побудовані FPGA: програмовані логічні блоки (CLB,Configurable logic blocks), інтерфейсні блоки вводу-виводу (Input/Output blocks) та матриці внутрішніх зв’язків (Interconnections matrix).
Пропоную детальніше розглянути кожен з елементів.

  • Логічні блоки — це базовий функціональний елемент, це цеглинка, яка може бути сконфігурована в потрібну логічну функцію, елемент пам’яті чи спеціалізоване ядро для виконання чітко визначеної задачі. Набір можливих конфігурацій блоку і визначає технологічний рівень FPGA.


  • Блоки вводу-виводу: слугують для забезпечення зв’язку між виводами корпусу і внутрішніми сигнальними лініями. Ці блоки також можуть бути налаштовані під різні типи інтерфейсів, які вам потрібні для комунікації з різними периферійними елементами.
  • Матриця внутрішніх зв’язків дозволяє об’єднувати різні функціональні блоки в довільній конфігурації:

Як відбувається програмування?


На зображенні показані два різних варіанти конфігурації одного і того самого блоку. В залежності від обраних налаштувань мультиплексорів в результаті отримуються різні функціональні блоки. По своїй суті, файл програми — це набір конфігурацій ключів програмованих логічних блоків

На малюнку нижче показане віртуальне зображення реального проекту, яке дозволяє побачити, як поширюються ті чи інші сигнали та як вони використовуються всередині чіпа.

Інструменти для програмування

FPGA програмуються за допомогою спеціалізованих комп’ютерних мов HDL (hardware description languages). Це мови поведінкового опису апаратних засобів, де розробник може не описувати конкретні елементи схеми, а програмувати поведінку системи в цілому або конкретного блоку. Серед них найбільшою популярністю користуються мови VHDL і Verilog.
Ось як виглядає код та функціональна симуляція написана на VHDL:

При програмуванні розробник має можливість моніторити поведінку системи та функціоналу в кожен момент часу, при тих чи інших даних, які вона отримала на вході. Це дозволяє дуже глибоко проникнути у функціонал, який реалізується, докладно знати, які зміни відбуваються та коли, що є дуже корисним у процесі створення програми.

У якому випадку краще використовувати FPGA?

В першу чергу, хотів би виділити основні типи процесорів, які можна використовувати в вбудованих системах:

  • MCU — мікроконтролери з закладеною наперед архітектурою дозволяють доволі гнучко забезпечити рішення для більшості задач (по вартості вони дешевші, ніж FPGA)
  • Спеціалізовані інтегральні схеми (ASIC) — це мікросхеми які спроектовані спеціально на виконання того чи іншого функціоналу. Як правило, вони використовуються в велико серійних приладах і потребують доволі значних початкових вкладень, але в серійному виробництві вони значно дешевші за всі інші типи контролерів.

І більш детально зупинимося на FPGA. Зважаючи на те, що кожен тип мікросхем може виконувати певний набір конкретних функцій, важливо розуміти, у яких саме випадках використання FPGA буде найефективнішим.

Я вже згадував, що унікальність FPGA є у тому, що реалізація функцій може здійснюватись паралельно. Проте, не кожну задачу можна розбити на паралельні процеси. Більше того, використання паралельних алгоритмів не завжди є оптимальним рішенням. Тому нижче пропоную розглянути типи аплікацій, у яких використання FPGA є найдоцільнішим:

  • Мультимедіа. Якщо ви працюєте з відео та великими об’ємами інформації, яку потрібно обробити в реальному часі, тоді FPGA є незамінним. Алгоритми, які використовуються в мультимедійних аплікаціях, можна обробляти паралельними потоками, використання FPGA забезпечує значно більшу продуктивність, ніж в інших типах процесорів.
  • Прилади контролю за великими промисловими пристроями. Це випадок, коли потрібно дуже швидко реагувати на події в реальному часі, які відбуваються навколо нас. Тут FPGA є надзвичайно корисним, адже ми маємо контроль над кожним моментом часу всередині нашого процесора (контролера).

Хотілось би додати, що дані типи застосування не є єдиними і однозначними, в кожному конкретному випадку застосування може бути зумовленим специфікою задачі. Так FPGA дуже поширені в створенні спеціалізованих криптовалютних майнерах, їх використовують для відлагодження ASIC на початкових фазах і в багатьох інших сферах.

Як розпочати роботу з FPGA?

Найперший і найголовніший крок — це вибрати контролер з оптимальним набором функцій, які б вирішили вашу конкретну задачу. Сьогодні лідерами серед виробників FPGA на ринку є Xilinx, Intel (Altera) та Lattice. Загалом, ціни коливаються від 15-20$ до тисяч доларів — все залежить від задач, які ви хочете реалізувати за допомогою FPGA. Після обрання вендора наступним кроком, потрібно обрати Development kit, навчальну плату на якій ви можете протестувати створений вами проект,

Пам’ятайте, що коли ви обираєте конкретну FPGA для вашого проекту, ви за замовчуванням обираєте інструменти розробки того чи іншого виробника, їхню підтримку та технічну документацію.

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному4
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Товариство а хтось має практичний досвід використання того ж Vitis, поділіться враженнями.

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

Кілька слів де ми використовуємо FPGA в компанії Cypress для прототипіювання нових мікросхем. Ми використовуємо готові кіти з мікросхемами Xilinx FPGA різної складності та вартості: для перевірки нескладних блоків використовуємо Xilinx Artix-7 кіт вартістю порядку 100 дол., в якості прототипу процесора на базі ядра ARM Cortex M0+ — Xilinx Kintex-7 за кілька тис. дол, а потужніші системи (2 ядра ARM Cortex M0+, CM4) — Xilinx Ultrascale порядка 10тис., інколи доводиться юзати ще більш потужні і дорогі платформи (до 20тис дол.) для нових продуктів.

Інструменти для роботи (в нашій компанії все пишеться на Verilog, VHDL не використовується):
— Синтез Synplify Pro (найкраще, як на мене)
— Place and Route — Xilinx Vivado
— Симуляція — Aldec-HDL та Questa Sim (часто RTL в поєднанні з кодом на С)
— Відлагодження — Mentor Certus Analyzer (справді крута річ)

Великі проекти збираються довго, 12 годин це нормально, користуємося віддаленими Linux серверами де це має сенс.

По моєму досвіду де ВАРТО використовуавти FPGA:
1. Прототипи нових мікросхем
2. Реалізація нестандартних функціональних блоків/інтерфейсів/протоколів, які не можна реалізувати на наявних контролерах, наприклад, конвертер бітових потоків в дорогих професійних аудіо-ЦАП
3. Нові алгоритми криптографії, які поки що не підтримуються залізом наявних спеціалізованих рішень (ASIC)
4. Проекти, де потрібно обробляти багато паралельних задач (наприклад, багатоканальний демодулятор чи модулятор).

Якщо вашу задачу можна вирішити за допомогою наявних мікросхем (DSP, MCU) — я не бачу сенсу використовувати FPGA в більшості випадків. Це тільки додасть вам різних проблем.

Я гадаю, для широкого загалу краще розказати за саме комерційну складову галузі: ким насамперед затребувані такі пристрої. Зокрема, у застосуваннях де вони не контролюються інженером, що вміє їх програмувати, а живуть самостійним життям в конкретних продуктах. Почни з продуктів серійного виробництва, а потів вже розпівідай про кастомізацію, від самої найпростішої.

Окремою статтею можеш розповісти про надійність цього заліза. Бо саме це було тривалий час ахілесовою п′ятою програмованих матриць.

Окремо розкажи про застосування в іграх та іграшках. Бо так вже влаштована цивілізація, що саме ігрове застосування вирішує, чи буде підтриманий вектор розвитку. Чому так: в іграх є ентузіасти, які допомагають вижити проектам на початковому рівні, пережити кризові ситуації. В комерційних проектах такого майже нема, фейл = смерть та анафема.

Бо так вже влаштована цивілізація, що саме ігрове застосування вирішує, чи буде підтриманий вектор розвитку.

Ніт. Вирішує оборонна промисловість.

Якби вирішувала оборонна промисловість, в армії водилися б найрозумніші люди. Підняти рівень ПОЧАТКОВОЇ освіти у людей значно простіше, ніж створити спеціаліста в вузькій галузі.

Але чомусь там IQ від 0 до 1.

Altera викоистовується в американських РЕБах.

Саме тому їх і викупив Intel.

Стаття ознайомчого характеру і не передбачала детального висвітлення ні конкретних проекті ні практики використання. В мережі є безліч інфи по цій тематиці, для прикладу ось що реалізовано на маленькій FPGA
www.youtube.com/watch?v=YqtYiuPd6io

Це єдина стаття, чи планується цикл статей?

Якщо буде інтерес, то можна продовжувати з більшим ухилом в прикладну складову.

Без осцилографа і аналізатора логіки це мазохізм

FPGA, як я його розумію, фактично і є мультиплексор. Це основна його роль.
А сутність FPGA майже на 100% софтова, цим він власне і корисний, що на відміну від складних для тестування процесорів, він дозволяє винести найбільш електрично (та температурно) навантажену частину на окремий компонент, отримати бажану швидківть за рахунок паралелізації — в той самий час мати ЛЕГКО ЗАМІНЮВАНИЙ універсальний компонент, який швидко тестується.

Неочевидний момент: FPGA можна паралелізувати. Тобто поставити 2 та більше мікросхем поряд, і якщо одна з них виходить з ладу, перемкнути на іншу, і досить швидко. Може навіть автоматично за результатом автотесту.

Помимо этого чип FPGA не для мигания светодиодиками не дешевый.

Ну не знаю, меня недавно носом тыцнули в фпга кит за 50 баксов, куда можно линукс поставить.

А нащо там саме FPGA, поясни, в чому вигода? Від якої суми «будь-який цифровий осцилограф» ти маєш на увазі?

В нас керування моторами в цирку (Xilinx).

Ще пробуємо об’єднати кілька камер, із специфіною попередньою обробкою (Lattice).

16 штук для початку.

Там специфічне фільтрування потрібне, щоб на хост не качати непотрібні частини зображень, і специфічний мультиплексинг для того ж. Реальний час.

Щось дуже все таємно. 90% — вікі, 10% — development kit, практики використання і — нічого не висвітлено

Після обрання вендора наступним кроком, потрібно обрати Development kit, навчальну плату на якій ви можете протестувати створений вами проект,

Ще одна незвична для програмістів відмінність. Коли я пишу на якомусь Qt я можу взяти приклад і змінити під свої потреби і в мене буде готовий продукт (це ідеалізований вимадок і я розумію, що таке рідко буває але теоретично можливо).

У випадку з FPGA Development Kit все не так і Development Kit лише придатний щоб на ньому поперемикати світлодіоди. А якщо я хочу поширити своє рішення, то мені буде треба розробити якусь свою плату.

Іншою мовою у світі FPGA між Hello World та продакшеном прірва. Виправте мене якщо я помиляюсь.

В цьому розрізі є цікавий момент, якщо потрібні серйозні речі то і подукти на виході дуже не дешеві, і часто використовують модифіковані кіти як закінчений продукт. Якщо продукт багато серійний і повинен бути дешевим то FPGA програють контролерам і прірва дійсно є. Так як без власної хардвари не обійтись.

Тому треба якусь хай доморощену і малу, але FPGA в якійсь малінці-ардуїнці.

Вони існують, просто в силу специфіки використання вони не настільки популярні та і потребують додаткових навичок в програмуванні, хоча і в цьому напрямку є зрушення, десь читав як люди на пайтоні кодять під FPGA.

В чому складність розробити плату?

Відсутність необхідних знань та навичок.

Чому прірва?
Development kit це як демка для перевірки концепцій
Пам’ятайте, що коли ви обираєте конкретну FPGA для вашого проекту, ви за замовчуванням обираєте інструменти розробки того чи іншого виробника, їхню підтримку та технічну документацію.

Слушне зауваження.

Для програмістів (особливо тих хто для розробки використовує Linux) це дуже болісний процес, коли не можно просто розгорнути середовище за дві три команди з консолі, а треба десь реєструватись завантажувати гігібайтні пакети які призначені лише для якогось окремого проекту.

Мабуть не збирали проекти на С, С++. Бо там також тточення кількома рядками настроюється досить рідко.

Хтось тут на форумі недавно писав, що в Україні FPGA-розробники нікому не потрібні :)

що власне тре робити вна неньці на ФПГА?
скільки будуть платити ФПГА розробнику? мінімалка хоть буде?

Это был как раз я.. Это громко сказано — не нужны. На самом деле есть простое объяснение этому явлению,- мелкотемье разработок! FPGA на самом деле штука серьёзная и просто не имеет конкурентов. Но под их использование нужна дерзкая задача, которая не решается лобовым решением на контроллерах! И еще,- забудьте о слове «программирование» для FPGA ! Это КОНФИГУРИРОВАНИЕ архитектуры! Если там есть программирование, то только если в ней на борту есть процессор и надо писать программу. Но это ДРУГАЯ задача. В основном это схемотехника! А HDL — это язык описания аппаратуры! Разве что микропрограммные автоматы вас развлекут... И не вздумайте сравнивать ремесло например программиста на С с HDL-дизайнером! Это разные Вселенные!.. Есть этапы, которых нет в традиционном программировании! Начиная от оптимизации дизайна с верификацией и заканчивая меж-клоковыми переходами и борьбой с задержками (констрейны) и метастабильным состоянием. Имея опыт таких этапов вы сможете пробовать себя в создании ASIC. Дизайн-бюро сможет вас привлечь к работе. Советую вам освоиться с HDL CODER, особенно если вы сильны в математике. Это новое качество творчества с FPGA....

И еще,- забудьте о слове «программирование» для FPGA !

Есть опыт использование Intel’овских FPGA для OpenCL. Но оптимизатор там — тихий ужас коппиляция из OpenCL C/C++ в FPGA шла около 3 часов(!!!). В конце концов получил 10% выигрыша по сравнению с работой этого же kernel’а на интелловских GPU (CoffeeLake). Ну и стоимость устройства была под 5К-10К.

Ну и как тут уже упоминали — это числодробилки, если прокачивать данные — будет очень медленно.

Лично для себя отметил — пока отложить лет на 5, потом пересмотреть FPGA.

Хм... Это еще фигня! 3 часа не срок... Я в курсе на счет OpenCL. Это как раз способ сделать эту работу формальной. Якобы программирование... В итоге все равно получается АРХИТЕКТУРА! Тут важно понимать, что все происходит параллельно! Прелесть FPGA в возможности обработки данных «на лету», в ходе перекачек данных. Ну а конвейеризация делает этот процесс высокопроизводительным.

NVidia CUDA вже підбирається і до FPGA ніші, ось приклад:
habr.com/ru/post/513138

Предполагаю, что для них лучшим вариантом будет eASIC..

Еще в 2010-2011 году я искал как войти в это направление — именно коммерческая разработка, предложений по работе на тот момент практически не было (на пальцах одной руки) и оплата на тот момент на уровне гораздо ниже программиста. На рынке США, Израиль — это очень востребованное направление, особенно военка :) Насчет применений — то с чем в жизни бытовой столкнулся — в машине блок управления усилителя руля перебирал (дорожки надо было пропаять), так вот там стояла FPGA Xilinx.

Что за машина была? Такой кустарщины не допускают в автопроме уже давно.

Lada Конина ( Калина ) в 2012; а так Spartan 3AN до сих пор дома в наличии

Ah, ok. На Лады правила мирового автопрома не действуют %)

FPGA присутствует чаще чем мы думаем. В некоторых дорогих опциях по сбору данных с камер / датчиков изначально стояли ПЛИС. Возможно поэтому пакеты таких опций стоили более 10 k$. В системах помощи водителю R&D версии интерфейсов в системах сбора данных используют ПЛИС (AutoSens 2019). Это не массмаркет и не тиражируется на 1 млн штук, но имеет место быть, когда это выгоднее сделать на ПЛИС пока ещё нет специализрованных микрсохем.
На большой серверной комутационной плате 19″ от Cisco, я насчитал FPGA аж трёх разных проиводиетелй Xilinx (что-то дешёвое типа Spartan-3 или Kintex), Altera (Max 2) и Lattice. Но там на плате по разводке было видно, что делали разные отделы и кто на чём умеет, тот то и ставит.

Так для использования в прототипировании никто не возражает. Проблема FPGA в продакшене была в том, что они нанадёжны для mission critical, сейчас xilinx даже космические радиозащищённый FPGA выпускает, но там цена такая, что можно фабрику свою с нуля построить, это для абсолютно единичных применений.

ФПГА и ПЛИС, ну це як 64бітСоК і ардуіна 8 біт

Підписатись на коментарі