Перейти к содержанию
    

Синтез конвейерного кода с blackbox function

Здравствуйте!
Есть 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

Изменено пользователем vv_gulyaev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 14.07.2022 в 14:18, vv_gulyaev сказал:

II=0

Это как пишут на англицком N/A - физически минимальный II = 1 - то бишь каждый такт.

Как вариант разбейте хлс "обвес" на 2 ядра с II=1 - одним готовьте и подавайте данные по стриму в ваше ядро на верилоге, а другим забирайте и делайте что хотите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/14/2022 at 3:07 PM, fguy said:

Это как пишут на англицком N/A - физически минимальный II = 1 - то бишь каждый такт.

Как вариант разбейте хлс "обвес" на 2 ядра с II=1 - одним готовьте и подавайте данные по стриму в ваше ядро на верилоге, а другим забирайте и делайте что хотите.

Да, опечатался II=1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу новых хлс-ов уже писал тут что они ведут себя неадекватно - по крайней мере 22.1 мои ядра превратил в совсем нерабочие. Если модель плис позволяет откатывайтесь на 18.3 - там более адекватный хлс, ну или хотя бы в 21.2 - он со своими тараканами но еще хоть что то рабочее может выдать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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"
image.thumb.png.d64f7bb849323343b6f11554e2168aab.png

example.cpp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Спасибо! Буду использовать пока эту версию.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 14.07.2022 в 16:28, vv_gulyaev сказал:

example.cpp 2 кБ · 0 загрузок

А зачем вообще это ядро? И зачем из него вызывать ртл? Не проще ли стримы подавать сразу в ртл, а после него поставить ядро на хлс которое будет забирать 4 стрима и считать сумму. Не хочу навязывать свое мнение, но я в таких случаях пишу бесконечный цикл с пайплайном и ии=1, а такое написание как у вас по фэншую нужно для симуляции в хлс и только. Имхо пайплайн для ии=1 с латентностью больше 1 можно сделать только в цикле, а без цикла ядро типа перезапускается каждый раз - может я и ошибаюсь, но всегда пишу бесконечный цикл и оно работает, а симулировать в хлс такие ядра бессмысленно - проще проверять уже в виваде - симулируя бд с ядрами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 синтезируется. Про бесконечный цикл, спасибо за совет, побробую использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если функция формализуема в pipeline не проще ли её переписать на Verilog/HDL,  а то, тут работает, а там нет, как это вообще можно отправлять на релиз?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...