Як визначити області дизайну FPGA, які використовують найбільш ресурси та площу?


11

Я працюю над великим дизайном FPGA, і я дуже близький до обмежень ресурсів FPGA, якими я зараз користуюся, Xilinx LX16 в пакеті CSG225.

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

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

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

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

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

В даний час я використовую звіти про місцеві статистичні показники пост-місця та маршруту та використовую SmartXplorer. Я використовую стратегії проектування, щоб оптимізувати час.

Після вимкнення частини мого дизайну, щоб пристосувати його, ось деякі результати:

Використання реєстру фрагментів: 42% використання LUT-вмісту: 96% кількість повністю використаних пар LUT-FF: 38% Це означає, що я легкий на регістри, але важкий у використанні воріт?

Чи є інструменти, які допоможуть розробникам оптимізувати область чи принаймні дати їм більше розуміння свого коду?

Оновлення: Переглянувши використання модуля рівня, я виявив, що у мене скрізь є невеликі клейкі асинхронні фіфоси, які займають близько 30% від загальної кількості LUT. Я використовую їх як цілодобовий клей для високошвидкісних автобусів. Я мав би змогу їх усунути, оскільки годинники тісно пов’язані між собою. (Вхід 120 МГц, виробляє 100 МГц і 200 МГц через DCM)


Схоже, у вас є багато взаємозв'язків між сигналами, я впевнений, що ви можете це виправити, змінивши рівні оптимізації, розподілу ресурсів тощо. Який інструмент ви використовуєте? ISE чи Vivado?
FarhadA

1
Я використовую ISE (Vivado не підтримує «Спартан-6»). Я переклав це на форумах Xilinx, і вони сказали включити Детальний звіт про карту. Я зробив це, і файл * .mrp тепер містить Розділ 13 - Використання Ієрархією. Я опублікую дані, як тільки я їх краще відформатую.
Marcus10110

Відповіді:


5

Я перекреслив це питання на Форумі Xilinx тут: http://forums.xilinx.com/t5/Implementation/How-to-determine-what-part-of-the-design-consumes-the-most/td-p / 393247

Ця відповідь багато в чому ґрунтується на коментарях. Завдяки Діепіка, Сікта та Габор.

По-перше, увімкніть "Створити детальний звіт про карту" у властивостях процесу карт (-detail).

Потім відкрийте Звіт про дизайн та перейдіть до Використання рівня модуля. Ось повна ієрархія, що показує ексклюзивне та всеосяжне використання дизайну.

У кожному рядку буде показана пара чисел, як 0/5392. Це означає, що цей модуль містить нуль цього конкретного елемента, але цей модуль та всі його підмодулі містять загалом 5392 елементи.

Ось мій вихід (частково розширений) Звіт про використання

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


3

Схоже, ви використовуєте майже всі логічні ресурси, використовуючи лише половину регістрів. Схоже, вам потрібно зрозуміти, що з'їдає всі ваші LUT. Існують способи оптимізації конкретних компонентів і зробити їх трохи ефективнішими для простору - такі, як оперативна пам’ять, регістри зсуву та стан машини. Подивіться на отриманий .log файл із синтезатора. Він підкаже, які саме компоненти вводяться в дію. Переконайтеся, що він належним чином визначає компоненти. Якщо це не так, він може не генерувати особливо ефективний список нетто. Можна багато чого сказати, просто подивившись файли журналів синтезу. Можливо, кілька незначних змін у вашому коді дозволять синтезатору зробити висновок про різні компоненти, тому подивіться посібник із синтезатора для певного шаблону. Вам може знадобитися переключити синтезатор, щоб оптимізувати область, а не швидкість. Також переконайтеся, що у вас немає вимкнених параметрів висновку. Одного разу я намагався синтезувати конструктивний компонент, який споживав 40% спартанської 3E 500 (9,312 пар LUT / FF з 4 входами, 5,6 КБ блочної оперативної пам’яті) для Virtex 6 HXT 565 (354,240 6-вхідних LUT / подвійних пар FF, 32 МБ блоку оперативної пам’яті). На завершення Xilinx пішло 7 годин і зайняло близько 40% чіпа. ?!?!?!? Виходить оперативна оперативна пам'ять блоку оперативної пам'яті була вимкнена, і синтезатор перетворив кілька КБ оперативної пам’яті на LUT. Не найефективніше рішення. Після зміни налаштування вона займала 1% чіпа. Піди розберися. 312 пари LUT / FF з 4 входами, оперативна пам'ять блоку 5,6 КБ) для Virtex 6 HXT 565 (354 240 6-вхідних пар LUT / подвійний FF, 32 МБ блоку оперативної пам'яті). На завершення Xilinx пішло 7 годин і зайняло близько 40% чіпа. ?!?!?!? Виходить оперативна оперативна пам'ять блоку оперативної пам'яті була вимкнена, і синтезатор перетворив кілька КБ оперативної пам’яті на LUT. Не найефективніше рішення. Після зміни налаштування вона займала 1% чіпа. Піди розберися. 312 пари LUT / FF з 4 входами, оперативна пам'ять блоку 5,6 КБ) для Virtex 6 HXT 565 (354 240 6-вхідних пар LUT / подвійний FF, 32 МБ блоку оперативної пам'яті). На завершення Xilinx пішло 7 годин і зайняло близько 40% чіпа. ?!?!?!? Виходить оперативна оперативна пам'ять блоку оперативної пам'яті була вимкнена, і синтезатор перетворив кілька КБ оперативної пам’яті на LUT. Не найефективніше рішення. Після зміни налаштування вона займала 1% чіпа. Піди розберися.


3

Варто було б опублікувати весь розділ "Використання ресурсів" з виводу інструменту.

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

Як і виведення пам'яті, те саме стосується і множників. Іноді крихітний відхилення від рекомендованого шаблону інстанції може викинути множник, який підводиться до одиниць DSP48A.

Якщо ви використовуєте контролер PCIe, чи можете ви зменшити загальний простір буфера, зарезервований для корисних навантажень TLP, або максимальний розмір пакету TLP? Це може зменшити оперативну пам’ять / логіку використання ядра IP за рахунок пропускної здатності / загальної пропускної здатності.

За допомогою (Altera) Quartus ви можете багаторазово вибирати елементи у вікні ієрархії дизайну та бачити там кольори / кластеризовані області використання після p & r. Це може дати наочне уявлення про відносне використання ваших модулів проектування.


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