VHDL: Використання оператора '*' при впровадженні множників у дизайн


10

В даний час FPGA вбудовані в блоки DSP, останні FPGA навіть вбудовані в сумісні з IEEE-754 модулі з плаваючою точкою.

Можливе створення об'єкта / модуля DSP за допомогою графічного інтерфейсу після вибору в ньому необхідних параметрів, а потім миттєво його в проекті.

Коли нам потрібно зробити такий мікроуправління при розробці миттєвих дійсних блоків DSP і коли ми просто вводимо в код оператор '*' і даваємо інструменту синтезу обробляти деталі низького рівня? Який краще?

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


Який FPGA має 754 сумісні FPU в тканині?
Мартін Томпсон

Відповіді:


6

Я робив це кілька разів сам.

Зазвичай інструменти дизайну вибиратимуть між тканинною реалізацією та DSP-фрагментом на основі параметрів синтезу.

Наприклад, для Xilinx ISE в налаштуваннях процесу синтезу, Параметри HDL, є параметр "-use_dsp48" з параметрами: Авто, Автомакс, Так, Ні. DSP скибочки. У мене колись була проблема, коли я помножив ціле число на 3, що зробило висновок про фрагмент DSP - за винятком того, що я вже вручну виводив кожен DSP-фрагмент у чіпі, тому синтезатор не вдався! Я змінив налаштування на Ні, оскільки я вже використовував кожен фрагмент dsp.

Це, мабуть, хороше правило (я щойно склав): якщо ваша конструкція працює на частоті менше 50 МГц, і ви, ймовірно, збираєтеся використовувати менше 50% DSP-фрагментів у чіпі, тоді просто використовуйте *, + і, - оператори. це дозволить зробити висновок про зрізи DSP без регістрів трубопроводу. Це дійсно обмежує максимальну швидкість. (Я не маю уявлення, що відбувається, коли ви використовуєте поділ)

Однак, якщо це виглядає так, що ви збираєтеся запускати шматочки ближче до максимальної швидкості зрізу DSP (333 МГц для нормального швидкості Spartan 6). Коли ви збираєтеся використовувати всі фрагменти, вам слід зробити їх вручну. .

У цьому випадку у вас є два варіанти.

Варіант 1: використовувати вручну шаблон необробленого шаблону екземплярів DSP. Варіант 2: використовувати блок IP від ​​Xilinx Core Generator. (Я б скористався цим варіантом. У той же час ви дізнаєтесь усе про ген core, що допоможе в майбутньому)

Перш ніж зробити будь-яке з них, прочитайте перші кілька сторінок керівництва користувача DSP-фрагментів. У випадку з Spartan 6 (DSP48A1) це буде Xilinx doc UG389: http://www.xilinx.com/support/documentation/user_guides/ug389.pdf

Спершу розглянемо варіант генератора ядра. Зазвичай я створюю тестовий проект у Core Generator для тієї частини, з якою працюю, де я створюю будь-яку кількість IP-блоків просто для того, щоб вивчити систему. Потім, коли я готовий додати його до свого дизайну в ISE, я клацніть правою кнопкою миші в Ієрархії дизайну, натисніть нове джерело та виберіть "IP (майстер генератора та архітектури CORE)", щоб я міг редагувати та відновлювати блок безпосередньо з мого проекту.

У Core gen, погляньте на різні блоки IP, які ви можете вибрати - є кілька десятків, більшість з яких досить круті.

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

Коли я будував фільтр IIR 5 на 3 порядку минулого року, мені довелося скористатися шаблоном вручну інстанції, оскільки я будував дуже власну реалізацію, з 2 зрізами DSP накручувався в 4 рази швидше, ніж швидкість вибірки. Це був тотальний біль.


13

Якщо ви просто хочете помножити два числа, і вони відповідають блоку DSP, тоді *оператор повинен зробити висновок блоку DSP. Якщо ні, відправте інструмент синтезу назад :)

Однак, щоб скористатися більш складними комбінаціями функціональності DSP, часто потрібна пряма інстанція блоку та налаштування його параметрів. Приклади речей, які можуть не відображатись за допомогою висновку (використовуючи Xilinx DSP48E1 як приклад):

  • Використання попередньої добавки
  • Використання поштового акумулятора
  • Використання детектора візерунка
  • Використання логічного блоку

І особливо комбінації перерахованого.

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


4

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

Однак я хотів би розглянути висновки блоків DSP перед тим, як перейти до інструментів GUI. У посібнику Xilinx XST є "реципієнти" HDL, як інстанціювати блоки DSP за допомогою чистого verilog / VHDL. В основному, якщо ви додасте достатню кількість регістрів до та / або після множників, XST використовуватиме блок DSP для автоматичної реалізації операції. Ви можете перевірити в журналах синтезу, щоб побачити, чи правильно він виводить блоки DSP. Я припускаю, що в Альтера є щось подібне.

Між іншим, я просто продумував це протягом декількох хвилин тому, оскільки зараз працюю над реалізацією твістера Mersenne, який використовує лише множник для початкового насіння. Моя реалізація першого проходу не відповідає термінам, але функціональність правильна. XST також поклав операцію множення в блоки DSP, однак він не оптимізований, тому він працює приблизно вдвічі швидше, як хотілося б. Я, ймовірно, буду повторно виконувати множення, використовуючи техніку "зміна і додавання", яка займе 32x кількість тактових циклів, але більше не потребуватиме апаратного множника.


Чому він повинен не мати часу при використанні апаратного множника?
Quantum231

32-бітове на 32-бітове не-конвеєрне множення займає більше 8 нс, мабуть.
alex.forencich

хм, бачу, не врахував цього. Отже блоки DSP не конвеєрні. Цікаво, як саме вони реалізують множення. Це дійсно жорсткий паралельний множник?
Quantum231

Я думаю, що це може бути налаштовано на роботу декількома різними способами. Відповідно до посібника XST, додавання достатньої кількості регістрів на вході та виході дозволить XST використовувати конвеєр множиною конвеєра у фрагменті DSP48. У моєму випадку був лише один вихідний регістр і відсутні вхідні регістри, тому цим не вдалося скористатися. Оскільки це було лише для ініціалізації (висівання PRNG), я замінив паралельне множення на бітовий серійний множник, щоб заощадити на використанні ресурсів.
alex.forencich

2

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

Я не знав там, де провідний мультиплікатор FP у FPGA.

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


FPGA останнього покоління, як-от серія Altera 10, мають множинні множники з плаваючою комою IEEE-754 на самому апаратному забезпеченні! Я не мав можливості використовувати їх сам.
Quantum231

Якщо ми вбудували блоки DSP, то FPGA повинна використовувати їх замість комбінаторного множника або використовувати якийсь інший алгоритм, який, наприклад, використовує блок пам'яті?
Quantum231

2

Я читаю цей документ http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf :

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

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

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