vv_gulyaev 0 14 июля, 2022 Опубликовано 14 июля, 2022 (изменено) · Жалоба Здравствуйте! Есть HLS проект для Vitis HLS 2022.1, содержащий функцию, описанную на verilog. Функция подключена в проект как blackbox модуль, по всем правилам, описанным в документации. Для этой функции II=0 и Latency=2. Столкнулся со следующе проблемой. Если не использовать "pragma hls pipelined", то верхний уровень ситезируется. При этом в репорте видно, что blackbox функция определяется как pipelined (т.к. II=1), а верхний уровень нет. Если же на верхний уровень добавить "pragma hls pipelined", то выдается ошибка: ERROR: [HLS 200-1916] Ap_ctrl_chain blackbox module 'blackbox_module' can not be used in pipeline region. В качестве референсного примера взял проект misc_rtl_as_blackbox из HLS-Tiny-Tutorials и добавил такую прагму в example.cpp. Получил такую же ошибку: ERROR: [HLS 200-1916] Ap_ctrl_chain blackbox module 'rtl_model' can not be used in pipeline region. В документации не находил информации, что нельзя использовать blackbox модули в конвейерных топ уровнях. Наоборт, косвенно подтверждается, что можно: Quote Scalars and Input Pointers The RTL Blackbox IP supports C scalars and input pointers only in sequential and pipeline regions. They are not supported in a dataflow region. When these constructs are used in the C function, use wire port protocol in the RTL IP. Сталкивался ли кто-либо с такой проблемой? misc_rtl_as_blackbox.7z Изменено 14 июля, 2022 пользователем vv_gulyaev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 14 июля, 2022 Опубликовано 14 июля, 2022 · Жалоба В 14.07.2022 в 14:18, vv_gulyaev сказал: II=0 Это как пишут на англицком N/A - физически минимальный II = 1 - то бишь каждый такт. Как вариант разбейте хлс "обвес" на 2 ядра с II=1 - одним готовьте и подавайте данные по стриму в ваше ядро на верилоге, а другим забирайте и делайте что хотите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_gulyaev 0 14 июля, 2022 Опубликовано 14 июля, 2022 · Жалоба On 7/14/2022 at 3:07 PM, fguy said: Это как пишут на англицком N/A - физически минимальный II = 1 - то бишь каждый такт. Как вариант разбейте хлс "обвес" на 2 ядра с II=1 - одним готовьте и подавайте данные по стриму в ваше ядро на верилоге, а другим забирайте и делайте что хотите. Да, опечатался II=1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 14 июля, 2022 Опубликовано 14 июля, 2022 · Жалоба По поводу новых хлс-ов уже писал тут что они ведут себя неадекватно - по крайней мере 22.1 мои ядра превратил в совсем нерабочие. Если модель плис позволяет откатывайтесь на 18.3 - там более адекватный хлс, ну или хотя бы в 21.2 - он со своими тараканами но еще хоть что то рабочее может выдать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_gulyaev 0 14 июля, 2022 Опубликовано 14 июля, 2022 · Жалоба On 7/14/2022 at 3:07 PM, fguy said: Как вариант разбейте хлс "обвес" на 2 ядра с II=1 - одним готовьте и подавайте данные по стриму в ваше ядро на верилоге, а другим забирайте и делайте что хотите Попробовал описанный вариант, но выдается та же ошибка, если использовать "#pragma HLS PIPELINE II=1" на верхнем уровне: ERROR: [HLS 200-1916] Ap_ctrl_chain blackbox module 'rtl_model' can not be used in pipeline region. Если же прагму не использовать модель синтезируется но в столбце Pipelined указано "no" example.cpp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_gulyaev 0 14 июля, 2022 Опубликовано 14 июля, 2022 · Жалоба On 7/14/2022 at 3:30 PM, fguy said: По поводу новых хлс-ов уже писал тут что они ведут себя неадекватно - по крайней мере 22.1 мои ядра превратил в совсем нерабочие. Если модель плис позволяет откатывайтесь на 18.3 - там более адекватный хлс, ну или хотя бы в 21.2 - он со своими тараканами но еще хоть что то рабочее может выдать. Попробую On 7/14/2022 at 4:49 PM, vv_gulyaev said: Попробую В Vitis HLS 2020.2 синтезировалось с #pragma HLS PIPELINE II=1. Спасибо! Буду использовать пока эту версию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 14 июля, 2022 Опубликовано 14 июля, 2022 · Жалоба В 14.07.2022 в 16:28, vv_gulyaev сказал: example.cpp 2 кБ · 0 загрузок А зачем вообще это ядро? И зачем из него вызывать ртл? Не проще ли стримы подавать сразу в ртл, а после него поставить ядро на хлс которое будет забирать 4 стрима и считать сумму. Не хочу навязывать свое мнение, но я в таких случаях пишу бесконечный цикл с пайплайном и ии=1, а такое написание как у вас по фэншую нужно для симуляции в хлс и только. Имхо пайплайн для ии=1 с латентностью больше 1 можно сделать только в цикле, а без цикла ядро типа перезапускается каждый раз - может я и ошибаюсь, но всегда пишу бесконечный цикл и оно работает, а симулировать в хлс такие ядра бессмысленно - проще проверять уже в виваде - симулируя бд с ядрами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_gulyaev 0 15 июля, 2022 Опубликовано 15 июля, 2022 · Жалоба On 7/14/2022 at 5:13 PM, fguy said: А зачем вообще это ядро? И зачем из него вызывать ртл? Не проще ли стримы подавать сразу в ртл, а после него поставить ядро на хлс которое будет забирать 4 стрима и считать сумму. Не хочу навязывать свое мнение, но я в таких случаях пишу бесконечный цикл с пайплайном и ии=1, а такое написание как у вас по фэншую нужно для симуляции в хлс и только. Имхо пайплайн для ии=1 с латентностью больше 1 можно сделать только в цикле, а без цикла ядро типа перезапускается каждый раз - может я и ошибаюсь, но всегда пишу бесконечный цикл и оно работает, а симулировать в хлс такие ядра бессмысленно - проще проверять уже в виваде - симулируя бд с ядрами. Здесь я просто взял пример из архива с примерами от Vitis, чтобы проверить, как синтезируется проект, если rtl ядро pipelined с II=1 и при этом верхний уровень тоже указать pipelined c II=1. В итоге получается, что на версии 2022.1 такое не синтезируется, а на 2020.2 синтезируется. Про бесконечный цикл, спасибо за совет, побробую использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 18 июля, 2022 Опубликовано 18 июля, 2022 · Жалоба Если функция формализуема в pipeline не проще ли её переписать на Verilog/HDL, а то, тут работает, а там нет, как это вообще можно отправлять на релиз? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться