реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Не получается ограничить число копий подпрограммы., Vivado HLS загадка
videoscan
сообщение Aug 30 2018, 12:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



Народ!

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

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



Сообщение отредактировал videoscan - Aug 30 2018, 12:42
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Aug 30 2018, 12:45
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(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.
Go to the top of the page
 
+Quote Post
videoscan
сообщение Aug 30 2018, 13:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



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


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

На самом деле решение есть: слить все 3 функции Function1-Function3 в одну здоровую и там сказать с помощью ALLCATION, что kernel нужен один, но как это некрасиво! И зачем мы Октябрьскую революцию делали, Си используем?

Сообщение отредактировал videoscan - Aug 30 2018, 13:41
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Aug 31 2018, 07:33
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



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

В том и проблема что программерский подход к плис однозначно будет приводить к подобным проблемам. Си заточен для последовательного выполнения. ПЛИС же структура по определению параллельная и по этому к ней нужно подходить с другой логикой.
Go to the top of the page
 
+Quote Post
videoscan
сообщение Sep 3 2018, 06:55
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 16-09-14
Из: Москва
Пользователь №: 82 826



Цитата(MegaVolt @ Aug 31 2018, 07:33) *
Может и никто. Но так как Function4 не ресурсозатратная то это перестаёт быть проблемой.


Но если он создаст 3 экземпляра Function4, то к каждому их них он присоединит по одному экземпляру kernel и все останется по-прежнему.
Но будет время - попробую.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 10:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.02812 секунд с 7
ELECTRONIX ©2004-2016