videoscan 0 30 августа, 2018 Опубликовано 30 августа, 2018 (изменено) · Жалоба Народ! Проблема следующая. Есть программа на Vivado HLS со структурой как на рисунке: Верхняя функция - controll, в вызывает 3 разные подпрограммы function1, function2 и function3. Те в свою очередь обращаются к одной функции kernel, где происходит обработка данных. Функция kernel должна быть одна (на уровне RTL), потому как ресурсов она жрет немерено (1024 одних DSP блоков). Vivado HLS на этапе Sinthesis делает 3 RTL копии этой функции. Директива Allocation не помогает, она видит только функции в той подпрограмме, в которую вставлена. Кто-нибудь с этой проблемой сталкивался? Это решаемо? Изменено 30 августа, 2018 пользователем videoscan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 30 августа, 2018 Опубликовано 30 августа, 2018 · Жалоба Народ! Проблема следующая. Есть программа на Vivado HLS со структурой как на рисунке: Верхняя функция - controll, в вызывает 3 разные подпрограммы function1, function2 и function3. Те в свою очередь обращаются к одной функции kernel, где происходит обработка данных. Функция kernel должна быть одна (на уровне RTL), потому как ресурсов она жрет немерено (1024 одних DSP блоков). Vivado HLS на этапе Sinthesis делает 3 RTL копии этой функции. Директива Allocation не помогает, она видит только функции в той подпрограмме, в которую вставлена. Кто-нибудь с этой проблемой сталкивался? Это решаемо? Я так понимаю что должен быть некая ещё одна функция 4 которая решает кто из этих троих имеет доступ у жрущей функции. И само собой жрущая функция вызывается в одном месте в функции 4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
videoscan 0 30 августа, 2018 Опубликовано 30 августа, 2018 (изменено) · Жалоба Я так понимаю что должен быть некая ещё одна функция 4 которая решает кто из этих троих имеет доступ у жрущей функции. И само собой жрущая функция вызывается в одном месте в функции 4. Т. е. так как на рис? А что помешает Vivado создать заодно и 3 экземпляра Function4 ? На самом деле решение есть: слить все 3 функции Function1-Function3 в одну здоровую и там сказать с помощью ALLCATION, что kernel нужен один, но как это некрасиво! И зачем мы Октябрьскую революцию делали, Си используем? Изменено 30 августа, 2018 пользователем videoscan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 31 августа, 2018 Опубликовано 31 августа, 2018 · Жалоба Т. е. так как на рис?ДаА что помешает Vivado создать заодно и 3 экземпляра Function4 ?Может и никто. Но так как Function4 не ресурсозатратная то это перестаёт быть проблемой.На самом деле решение есть: слить все 3 функции Function1-Function3 в одну здоровую и там сказать с помощью ALLCATION, что kernel нужен один, но как это некрасиво! И зачем мы Октябрьскую революцию делали, Си используем? В том и проблема что программерский подход к плис однозначно будет приводить к подобным проблемам. Си заточен для последовательного выполнения. ПЛИС же структура по определению параллельная и по этому к ней нужно подходить с другой логикой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
videoscan 0 3 сентября, 2018 Опубликовано 3 сентября, 2018 · Жалоба Может и никто. Но так как Function4 не ресурсозатратная то это перестаёт быть проблемой. Но если он создаст 3 экземпляра Function4, то к каждому их них он присоединит по одному экземпляру kernel и все останется по-прежнему. Но будет время - попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться