Що таке FPGA?


38

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

Відповіді:


30

Вони є електронними компонентами, що додають логіку вашим схемам (тому вони схожі на мікроконтролери). Але проектний підхід тоді зовсім інший, ніж у ЦК (мікроконтролер). В uC ви не можете змінити внутрішню конструкцію UC; ви можете запускати на ньому лише "класичні" програми. Програмування FPGA більше схоже на створення нового обладнання. Ви створюєте нові з'єднання між логічними воротами та створюєте новий спеціалізований процесор. І ви можете все це робити у себе вдома, на столі та на ПК.

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

Корисні посилання:

Приклад використання: http://nsa.unaligned.org/


3
Зазначу, що багато FPGA досить великі, щоб містити декілька ядер процесора, таким чином дозволяючи FPGA бути цілим комп'ютером для себе.
Крейг Трейдер

3
Як зауваження, я думаю, що нижча тактова швидкість може ввести в оману. порівняно з ПК, так. Порівняно з pic16, вони можуть бути швидшими, але це залежить від вартості. Більшість найдешевших, з якими я працював, працює на 40 МГц, але, знову ж таки, варіація продукту до продукту.
Кортук

23

FPGA - це буквально масив логічних воріт, які можна запрограмувати в цьому полі. Фліп-флопи, мультиплексори, 4-розрядні таблиці пошуку тощо, які можна підключити будь-яким способом, використовуючи мову, схожу на C (Verilog).

UC, такий як AVR, також виготовлений з подібних логічних воріт, але вони налаштовані під час виготовлення пристрою. Звичайно, у неї є оперативна пам’ять та флеш, тому ви можете писати програмне забезпечення для зчитування входів та керуючих виходів, але ви не можете змінити фактичні розташування воріт. Ворота завжди будуть розташовані в ALU, контролері пам'яті, послідовному порту тощо.

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

void loop () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}

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

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

Код для FPGA був би простим фліп-флопом:

завжди @ (годинник позиції) ledPin <= buttonPin;

Це займе лише 1 FPGA комірку, приблизно 40 воріт, з десятків тисяч у FPGA.

Я можу перепрограмувати свою FPGA, щоб зробити щось інше, наприклад керувати світлодіодом на основі комбінації чотирьох входів, все ще за один годинник, все ще використовуючи цю клітинку FPGA. Або керувати світлодіодом на основі послідовного потоку з входу, в декількох комірках FPGA, що було б за 100 воротами. Тому я міг керувати світлодіодом на основі послідовних даних, скажімо, "УВІМКНЕНО" або "ВИМКНЕНО", послідовним потоком з дуже високою швидкістю (легко 20 МГц), і все одно використовувати лише невелику частку ємності FPGA.

Таким чином, перевага FPGA - явно швидкість. Він може робити все, що може зробити UC, і він може зробити це набагато швидше, при цьому все робиться паралельно. Складні речі, на які потрібно відібрати мілісекунди, FPGA могла зробити за мікросекунди або менше. Поки в FPGA залишилися ворота, я можу додати до нього більше функцій, не впливаючи на швидкість або роботу попередніх функцій FPGA. До речі, FPGA може дуже легко запустити тактову частоту 20 МГц.

Вартість не є диференціатором. Я можу придбати FPGA, який міг би реалізувати майже будь-який дизайн Arduino, який я коли-небудь бачив, приблизно за 5 доларів, приблизно такий самий, як Arduino AVR чіп. Існують також безкоштовні ланцюги інструментів (IDE, компілятор, налагоджувач) для FPGA.

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

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

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

Інша проблема полягає в тому, що FPGA не постачається в невеликих 8-ти до 20-контактних DIP-пакетах. Вони, як правило, поставляються в 100-контактних або більших пакетах для поверхневого кріплення, тому будувати дошки складніше.

І остаточна проблема полягає в тому, що цілий ряд цікавих проектів може бути реалізований чудово в тих, прості у використанні UC, так навіщо турбуватися з FPGA?


2
"Я можу придбати FPGA, який міг би реалізувати майже будь-який дизайн Arduino, який я коли-небудь бачив за $ 5" Вибачте, але hvæt? Де?
medivh

9

Якщо ви знайомі з основними логічними воротами, ви повинні знати, що вони практично миттєві. Операції A і B OR C змінюються миттєво, коли змінюються A, B або C.

FPGA є (свого роду) матрицею програмованих логічних воріт. Ви можете визначити входи та виходи (як комбінацію входів).

В uC, A + B / C * sqrt (D) потребуватиме декількох тактових циклів і деяку кількість пам'яті. У FPGA результат майже негайний.

Вони чудово підходять для відео, DSP, криптографії ...

Це головна перевага. Сучасні FPGA зараз підходять для пам'яті, і є гібриди uC / FPGA.


Я знаю багато практикуючих ЗНО з багаторічним досвідом роботи, які часто просто через FPGA входять в дизайн, а не в УК, де ви бачили uC. Я дійсно думаю, що вони чудово підходять для обробки інтерфейсу.
Кортук

Так, я думаю, що це приємний приклад: armadeus.com/english/index.html . Особливо цікавий для мене приклад управління сервоприводом: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki

2
Також слід зазначити, що все більше і більше перетворювачів "C до VHDL" або "C to Verilog". Вони ще не найефективніші речі, але ви можете перетворити вже написаний код у апаратне забезпечення, яке можна використовувати для покращення швидкості. Досить круто, якщо ви запитаєте мене (і якщо у вас є тісто для цього).
Кріс Гаммелл

5

Вони використовуються для розтріскування ключів шифрування набагато швидше, ніж це міг зробити комп'ютер загального призначення. : D


1
Ха-ха, мені сподобався ваш дуже функціональний опис. Вони абсолютно дивовижні при паралельній обробці.
Кортук


2

Щоб заощадити гроші та ризик порівняно з ASIC. Якщо тільки ти

  1. Глибоко піклуватися про владу або
  2. Будуємо купу з них (скажімо> 10 000 одиниць)

фіксовані (NRE) витрати на виконання ASIC роблять це непосильним.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.