Дизайн мікропрограмного забезпечення FPGA: Наскільки велика завелика?


13

У мене особливо велика трансформація обробки сигналів, яку потрібно перенести з matlab до VHDL. Це безумовно вимагає певного обміну ресурсами. Трохи підрахунок дав мені наступне:

  • 512 футів 64 балів
  • 41210 операцій множення-додавання

Зважаючи на найбільшу Virtex 6 FPGA з ~ 2000 блоками DSP48E, я знаю, що можу поділитися ресурсами, щоб повторно використовувати ресурси кілька разів. Час виконання насправді не проблема, час обробки може зайняти відносно багато часу в FPGA термінах.

Дивлячись на використання ресурсів, використовуючи radix-2 lite архітектуру, я отримую блоки 4dsp / FFT-операція = 2048 DSP-блоків, що становить ~ 43 к. найбільший Virtex FPGA має 2 кб блоків, або 20 операцій / мюкс.

Очевидно, що такі великі мукси в тканину також збираються на шматочки. Де я можу знайти верхній кінець цієї межі? Я не можу нескінченно ділитися ресурсами FPGA. Чи занадто великі множники 41210? Як обчислити, що занадто велике?

Я також розглядав інші ресурси (фрагменти, Брамс тощо). Radix-2 Lite також дає 4 x 18k brams / fft = 2048 brams. Найбільший Xilinx FPGA містить 2128 Brams. дуже прикордонна. Я стурбований тим, що мій дизайн просто занадто великий.


ОНОВЛЕННЯ:

Ще трохи інформації про сам дизайн. Я не можу вникати в деталі, але ось що я можу дати:

Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host 

                 ^------re-calculate initial conditions----|

висновок специфікації даних: "швидше, ніж моделювання matlab"

Розрахунки мудрі, ось тут я:

Етап FFT: легкий. Я можу реалізувати 1/2/4/8 FFT, зберігати результати у SDRAM та отримувати доступ пізніше. Відносно невеликий, навіть якщо це займе багато часу, це нормально. використовуючи radix-2 lite, я можу отримати 2 DSP48E та 2 18k BRAMS / FFT. Потік дає 6 DSP48Es 0BRAMS / FFT. в будь-якому випадку 64-бальний FFT невеликий з точки зору ресурсу FPGA.

Мультиплікатори : це моя проблема. Входи множення приймаються з таблиць пошуку або даних FFT. Це дійсно лише ціла купа множин-додавань. Оптимізувати не так вже й багато. Не є фільтром, але має характеристики, схожі на фільтр.

З огляду на спільний доступ до ресурсів на FPGA, математика працює так: Один LUT-6 може використовуватися як 4-ходовий мукс. Формула для N бічного M-муксу полягає в наступному:

N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).

хрускіт цифр для моєї реалізації не дає хороших результатів. У 90% сімейства virtix-6 не вистачає фрагментів, щоб поділитись ресурсами своїх DSP, щоб виконати операції 40k.


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

1
Це не є вашим запитанням, але у вашому розрахунку ресурсів ви не вказали, який розмір операнда. 512 FFT x 64 балів x скільки біт? У FPGA розмір операнду повністю залежить від вас, тому вам доведеться враховувати це при розробці розміру вашої проблеми.
The Photon

Я не знаю, чи зрозуміли ви, але ці великі FPGA досить дорогі. Деякі можуть перевищувати $ 5 тис. Можливо, вам слід це також врахувати, якщо вартість не є проблемою.
Густаво Литовський

1
На жаль, за винятком альтернативних пропозицій рішення, які ви отримали у відповідях поки що, я сумніваюся, чи зможемо ми зробити для вас набагато більше. Я маю на увазі, ви можете зробити лише одне ядро ​​FFT і запустити свої 512 входи через нього один за одним, і, очевидно, це би вмістилося навіть у досить невеликій FPGA. Десь між цим і робити все паралельно - це правильний баланс швидкості та ресурсів для вашої програми ... але важко комусь, крім вас, сказати, де має бути цей баланс.
The Photon

1
У вас є номер бюджету на це? Як зазначив Густаво, високі класи FPGA є дорогими, як і розробляється друкована плата, щоб розмістити їх. Якщо просто подвоїти (або вчетверо чи ...) кількість обчислювальної апаратури та продовжувати використовувати існуючий, перевірений (?), Код Matlab, ймовірно, може відповідати специфікації швидкості, як задано.
The Photon

Відповіді:


8

Цікаво, чи є інший спосіб погляду на проблему?

Відмовляючись від вашої оцінки 512 FFT-операцій (64 бали кожна) та 42k MAC-операцій ... Я припускаю, що це вам потрібно для одного проходу через алгоритм?

Тепер ви знайшли FFT ядро ​​за допомогою 4 блоків DSP ... але скільки годинних циклів потрібно на FFT? (пропускна здатність, а не затримка)? Скажімо, 64, або 1 цикл на бал. Тоді вам доведеться виконати ці операції 42k Mac у 64 циклах - можливо, 1 кб MAC на цикл, при цьому кожен MAC обробляє 42 операції.

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

Також, чи можливе будь-яке зниження сили? У мене були випадки, коли для генерації квадратики (і вище) потрібно було множення в циклі. Розгортаючи їх, я міг ітераційно генерувати їх без множення: я був цілком задоволений самим днем, коли створив двигун різниці на FPGA!

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

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

(ps я розчарувався, коли хлопці із програмного забезпечення закрили це інше запитання - я думаю, що це принаймні так доречно)

Редагувати: повторно редагуйте - я думаю, ви починаєте туди потрапляти. Якщо всі входи мультиплікатора є або виходами FFT, або коефіцієнтами "не фільтрує", ви починаєте бачити вигляд регулярності, яку потрібно використовувати. Один вхід до кожного множника підключається до виходу FFT, інший - до коефіцієнта ПЗУ (BlockRam реалізований як постійний масив).

Послідовність різних операцій FFT через один і той же блок FFT автоматично послідовує виходи FFT повз цей множник. Розподіл правильних коефіцієнтів на іншому вході MPY тепер "просто" питання організації правильних адрес ПЗУ в потрібний час: організаційна проблема, а не величезний головний біль MUXes.

Щодо продуктивності: Я думаю, що Дейв Твід був марно песимістичним - FFT приймає n * log (n) операції, але ви можете вибрати O (n) одиниці метеликів та O (logN) цикли, або O (logN) одиниці та O ( n) цикли або будь-яка інша комбінація, що відповідає вашим цілям ресурсу та швидкості. Одне з таких поєднань може зробити структуру множення після FFT набагато простішою, ніж інші ...


Для FFT, реалізованого за допомогою одного апаратного метелика, для завершення потрібні цикли годин NlogN; на 512 балів, це було б 256 * 8 метеликів, або 2048 годин. Це означає, що для 41210 (або 32768?) MAC потрібно буде лише 8-10 апаратних множників, щоб зробити це за той же час.
Трейд Дейва

Я маю на увазі 16-20 множників.
Трейд Дейв

Вибачте, я щойно зрозумів, що отримав це назад. Індивідуальні FFT - це 64 бали, тому для реалізації одного метелика потрібно 32 * 5 = 160 годин. Потім MAC можна виконати за допомогою апаратних множників 200-250.
Трейд Дейв

це те, що мене спотикає. Як xilinx може спроектувати ядро, здатне робити 16 к / 32 кф, що вимагає операцій з множенням додавання 400 К (NlogN), і все ж я борюся зі своїми 41 к? повинен бути спосіб!
stanri

@Dave: Я вважаю, ви маєте на увазі 160 примножень, а не 160 циклів? Немає нічого такого, що по суті є серіалізованим у FFT ...
Брайан Драммонд

2

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

Просто Google для "бібліотеки з підтримкою GPU" або "Бібліотеки, прискореної GPU", щоб розпочати роботу.


Цікаво, що я згадав про GPU клієнту, коли чув про цей проект, і він не зацікавився.
stanri

@StaceyAnneRieck: Він сказав чому?
Трейд Дейва

Він насправді не сказав чому, лише те, що він заглянув у нього до використання FPGA, здавалося, менше роботи. Мені доведеться знову піднести це.
stanri

@stanri: Навіть якщо ви врешті-решт опинитесь на впровадженні FPGA, мені здається, що GPU може бути хорошим способом "дошкрібати" загальну архітектуру системи. Чи є у вас (і чи можете ви поділитися?) Якийсь графік потоку даних високого рівня для алгоритму, і чи можете ви дати нам уявлення про кількість залучених даних? Без відповідей на подібні запитання дати вам справді важко, крім дуже загальних порад.
Трейд Дейва

Це насправді дуже простий алгоритм, саме масштаб робить його таким складним. В основному наступним чином: початкові умови -> 512 фф паралельно -> 32768 множення операцій на виході FFT -> регулювання початкових умов -> промивання та повторення
stan

1

Для значно прискорення певних видів математичних операцій можна використовувати спеціалізоване обладнання або FPGA (або навіть CPLD). Головне, що слід пам’ятати, намагаючись розробити апаратне забезпечення (схему або логіку FPGA) для прискорення математичних операцій, - це з’ясувати, які дані замовлення знадобляться для входу та виходу з вашого пристрою. Пристрій з ефективною схемою вводу / виводу може забезпечити набагато кращі показники, ніж той, що має неефективну компоновку, навіть якщо останній пристрій потребує значно більшої схеми.

Я не намагався розробити апаратно-допоміжну конструкцію для FFT, але я розглядав апаратну допомогу для великих операцій множення (як це може використовуватися для шифрування RSA). Багато мікроконтролерів, навіть ті, які мають спеціальне обладнання для швидкого множення, не є надзвичайно ефективними при таких операціях, оскільки вони вимагають багато перетасування реєстру. Апаратне забезпечення, яке було розроблено для мінімізації заміни реєстру, може досягти набагато кращої продуктивності за допомогою операцій з багатоточним множенням, навіть якщо саме обладнання не було таким складним. Наприклад, апаратне забезпечення, яке може виконувати конвеєрне множення 16xN два біти одночасно (зміщення у два нижніх біта multiplcand та зміщення двох верхніх бітів результату), може досягти кращої продуктивності, ніж апаратне забезпечення, яке може виконувати множення 8x8 за один цикл, незважаючи на те, що перші можуть брати менше схем (і, внаслідок конвеєрного руху, мають коротший критичний шлях даних). Головне - розібратися, як буде виглядати "внутрішня петля" необхідного коду, і з’ясувати, чи є якісь неефективність, які легко усунути.


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

0

Як мало випускає нам час виконання?

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

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


1
Робити важкі обчислення в процесорі з м'яким ядром на FPGA - нерозумно; якщо ви збираєтеся робити обчислення в архітектурі збереженої програми (те, що слід враховувати), це пов'язано з високопродуктивними / доларовими жорсткими процесорами, де ви не сплачуєте штрафну швидкість за гнучку логіку за порівнянні-fab- тверда логіка покоління.
Кріс Страттон

@ChrisStratton - Гарний момент. До цього ефекту додана додаткова примітка.
Вонор Коннор

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

@ChrisStratton - Я думав, що найбільш поширеними інтегрованими архітектурами жорсткого процесора були або ARM, або POWER? В цьому випадку, в основному це товар CPU.
Вонор Коннор

1
Враховуючи ваше інше питання щодо FPGA, побудова плати FPGA, швидше за все, буде досвідом навчання, який коштуватиме зовсім трохи більше, ніж оцінено. Я думаю, що в цьому моменті потрібно зробити клієнтові кілька важких номерів ціни / продуктивності з пробних хмарних обчислень (які в кінцевому підсумку можуть стати придбаним обладнанням), порівняно з деяким уявленням про більш високу ціну та набагато більший ризик зусиль FPGA. .
Кріс Страттон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.