Как определить области дизайна ПЛИС, которые используют больше всего ресурсов и областей?


11

Я работаю над большим дизайном ПЛИС, и я очень близок к пределам ресурсов ПЛИС, которую я сейчас использую, Xilinx LX16 в пакете CSG225.

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

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

Отчеты о сроках Xilinx просто фантастические, но теперь мне нужно знать, где я могу получить лучший результат с точки зрения экономии места.

Мне также трудно сказать, какой тип ресурсов у меня заканчивается, или что влияет на эти ресурсы.

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

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

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

использование регистров срезов: 42% использование LUT срезов: 96% количество полностью использованных пар LUT-FF: 38% Означает ли это, что я не очень удобен в регистрах, но не слишком загружен?

Существуют ли инструменты, помогающие разработчикам оптимизировать область или, по крайней мере, дать им более глубокое понимание их кода?

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


Похоже, у вас много взаимосвязей между сигналами, я уверен, что вы можете это исправить, изменив уровни оптимизации, совместного использования ресурсов и тому подобное. Какой инструмент вы используете? Исе или Вивадо?
Фархада

1
Я использую ISE (Vivado не будет поддерживать Spartan-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

Этот ответ в значительной степени основан на комментариях там. Спасибо Дипике, Сикте и Габору.

Сначала включите «Создать подробный отчет MAP» в свойствах процесса карты (-detail).

Затем откройте «Сводку проекта» и перейдите к «Использование на уровне модуля». Вот полная иерархия, показывающая эксклюзивное и инклюзивное использование дизайна.

Каждая строка покажет пару чисел, например 0/5392. Это означает, что этот модуль содержит ноль этого конкретного элемента, но этот модуль и все его подмодули содержат в общей сложности 5392 элемента.

Вот мой вывод (частично расширенный) Отчет об использовании

Работая над уменьшением размера, Габор рекомендует переключиться на более крупную ПЛИС в инструментах синтезатора, чтобы он мог полностью отобразить карту, даже если она слишком велика, чтобы поместиться в текущую ПЛИС, и ускорить работу инструментов.


3

Похоже, вы используете почти все логические ресурсы, используя только половину регистров. Похоже, вам нужно выяснить, что съедает все ваши LUT. Есть способы оптимизировать отдельные компоненты и сделать их немного более эффективными с точки зрения пространства - таких как ОЗУ, регистры сдвига и конечные автоматы. Посмотрите на полученный файл .log от синтезатора. Он скажет вам, какие компоненты выводятся. Убедитесь, что он правильно выводит компоненты. Если это не так, он может не генерировать особенно эффективный список соединений. Вы можете многое сказать, просто взглянув на файлы журнала синтеза. Возможно, некоторые незначительные изменения в вашем коде позволят синтезатору выводить различные компоненты, поэтому взгляните на руководство по синтезатору для некоторого шаблона. Возможно, вам придется переключить синтезатор, чтобы оптимизировать область вместо скорости. Также убедитесь, что у вас не отключены какие-либо настройки. Однажды я попытался синтезировать компонент дизайна, который потреблял 40% спартанской 3E 500 (9,312 пар LUT / FF с 4 входами, 5,6 КБ блока ОЗУ) для Virtex 6 HXT 565 (354,240 пар LUT / двойной FF с 32 входами, 32 МБ блок ОЗУ). Прошло 7 часов, чтобы Xilinx par финишировал и занял около 40% чипа. ?!?!?!? Оказывается, блок оперативной памяти был отключен, и синтезатор превратил несколько килобайт оперативной памяти в LUT. Не самое эффективное решение когда-либо. После изменения настроек заняло около 1% чипа. Пойди разберись. 312 пар LUT / FF с 4 входами, 5,6 КБ блока ОЗУ) для Virtex 6 HXT 565 (354 240 пар LUT / двойной FF с 32 входами, 32 МБ блока ОЗУ). Прошло 7 часов, чтобы Xilinx par финишировал и занял около 40% чипа. ?!?!?!? Оказывается, блок оперативной памяти был отключен, и синтезатор превратил несколько килобайт оперативной памяти в LUT. Не самое эффективное решение когда-либо. После изменения настроек заняло около 1% чипа. Пойди разберись. 312 пар LUT / FF с 4 входами, 5,6 КБ блока ОЗУ) для Virtex 6 HXT 565 (354 240 пар LUT / двойной FF с 32 входами, 32 МБ блока ОЗУ). Прошло 7 часов, чтобы Xilinx par финишировал и занял около 40% чипа. ?!?!?!? Оказывается, блок оперативной памяти был отключен, и синтезатор превратил несколько килобайт оперативной памяти в LUT. Не самое эффективное решение когда-либо. После изменения настроек заняло около 1% чипа. Пойди разберись.


3

Было бы целесообразно опубликовать весь раздел «Использование ресурсов» из вывода инструмента.

Используете ли вы все блоки RAM? Обычно можно заменить логические / математические функции эквивалентными таблицами поиска в ОЗУ, если домен достаточно ограничен, и они достаточно сложны, чтобы их можно было предварительно рассчитать.

Как и вывод памяти, то же самое относится и к множителям. Иногда незначительное отклонение от рекомендованного шаблона создания экземпляра может привести к выбрасыванию умножителя, выводимого для модулей DSP48A.

Если вы используете контроллер PCIe, можете ли вы уменьшить общее буферное пространство, зарезервированное для полезных нагрузок TLP, или максимальный размер пакета TLP? Это может снизить использование ОЗУ / логики IP-ядра за счет полной нагрузки.

С помощью (Altera) Quartus вы можете выбрать несколько элементов в представлении иерархии дизайна и увидеть там использование цветов после кластера и кластеризацию. Это может дать наглядное представление об относительном использовании ваших дизайнерских модулей.


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