Вступ до 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 для вашого проекту, ви за замовчуванням обираєте інструменти розробки того чи іншого виробника, їхню підтримку та технічну документацію.
69 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів