Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не получается ограничить число копий подпрограммы.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
videoscan
Народ!

Проблема следующая.
Есть программа на Vivado HLS со структурой как на рисунке:
Верхняя функция - controll, в вызывает 3 разные подпрограммы function1, function2 и function3.
Те в свою очередь обращаются к одной функции kernel, где происходит обработка данных.
Функция kernel должна быть одна (на уровне RTL), потому как ресурсов она жрет немерено (1024 одних DSP блоков).
Vivado HLS на этапе Sinthesis делает 3 RTL копии этой функции.
Директива Allocation не помогает, она видит только функции в той подпрограмме, в которую вставлена.

Кто-нибудь с этой проблемой сталкивался? Это решаемо?

MegaVolt
Цитата(videoscan @ Aug 30 2018, 15:33) *
Народ!

Проблема следующая.
Есть программа на Vivado HLS со структурой как на рисунке:
Верхняя функция - controll, в вызывает 3 разные подпрограммы function1, function2 и function3.
Те в свою очередь обращаются к одной функции kernel, где происходит обработка данных.
Функция kernel должна быть одна (на уровне RTL), потому как ресурсов она жрет немерено (1024 одних DSP блоков).
Vivado HLS на этапе Sinthesis делает 3 RTL копии этой функции.
Директива Allocation не помогает, она видит только функции в той подпрограмме, в которую вставлена.

Кто-нибудь с этой проблемой сталкивался? Это решаемо?
Я так понимаю что должен быть некая ещё одна функция 4 которая решает кто из этих троих имеет доступ у жрущей функции. И само собой жрущая функция вызывается в одном месте в функции 4.
videoscan
Цитата(MegaVolt @ Aug 30 2018, 13:45) *
Я так понимаю что должен быть некая ещё одна функция 4 которая решает кто из этих троих имеет доступ у жрущей функции. И само собой жрущая функция вызывается в одном месте в функции 4.


Т. е. так как на рис?
А что помешает Vivado создать заодно и 3 экземпляра Function4 ?

На самом деле решение есть: слить все 3 функции Function1-Function3 в одну здоровую и там сказать с помощью ALLCATION, что kernel нужен один, но как это некрасиво! И зачем мы Октябрьскую революцию делали, Си используем?
MegaVolt
Цитата(videoscan @ Aug 30 2018, 16:35) *
Т. е. так как на рис?
Да
Цитата
А что помешает Vivado создать заодно и 3 экземпляра Function4 ?
Может и никто. Но так как Function4 не ресурсозатратная то это перестаёт быть проблемой.
Цитата
На самом деле решение есть: слить все 3 функции Function1-Function3 в одну здоровую и там сказать с помощью ALLCATION, что kernel нужен один, но как это некрасиво! И зачем мы Октябрьскую революцию делали, Си используем?

В том и проблема что программерский подход к плис однозначно будет приводить к подобным проблемам. Си заточен для последовательного выполнения. ПЛИС же структура по определению параллельная и по этому к ней нужно подходить с другой логикой.
videoscan
Цитата(MegaVolt @ Aug 31 2018, 07:33) *
Может и никто. Но так как Function4 не ресурсозатратная то это перестаёт быть проблемой.


Но если он создаст 3 экземпляра Function4, то к каждому их них он присоединит по одному экземпляру kernel и все останется по-прежнему.
Но будет время - попробую.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.