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

Vitis HLS и вектор на входе функции

Добрый день коллеги.

Потратил уже кучу времени на пустяковую казалось бы проблему. Решения адекватного до сих пор не нашел.

Был vivado hls, была в нем описана функция с вектором на входе. Чтобы грузить весь вектор сразу, параллельной шиной, использовалась директива array_reshape. Все логично, все просто.

Берём vitis hls, и облом. Читаем доки, читаем варнинги. Array_reshape не поддерживается для входов. Витис упрямо лепит интерфейс памяти. Никакой альтернативы для получения того же результата найти не смог. Точнее альтернативы есть, но они скорее нагромождение костылей. Неужели теперь с этим жить? Или я что-то упускаю?

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


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

On 9/17/2020 at 11:03 AM, Strob said:

Добрый день коллеги.

Потратил уже кучу времени на пустяковую казалось бы проблему. Решения адекватного до сих пор не нашел.

Был vivado hls, была в нем описана функция с вектором на входе. Чтобы грузить весь вектор сразу, параллельной шиной, использовалась директива array_reshape. Все логично, все просто.

Берём vitis hls, и облом. Читаем доки, читаем варнинги. Array_reshape не поддерживается для входов. Витис упрямо лепит интерфейс памяти. Никакой альтернативы для получения того же результата найти не смог. Точнее альтернативы есть, но они скорее нагромождение костылей. Неужели теперь с этим жить? Или я что-то упускаю?

Для начала давайте разберёмся с терминами.

Vitis HLS - это что ? Вы пытаетесь сделать kernel для OpenCL на HLS, так ?  Или что-то другое ?

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


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

On 9/23/2020 at 11:27 AM, dsmv said:

Для начала давайте разберёмся с терминами.

Vitis HLS - это что ? Вы пытаетесь сделать kernel для OpenCL на HLS, так ?  Или что-то другое ?

Нет, я пытаюсь сделать ip для использования в проекте vivado. При создании проекта витис позволяет выбрать, ip vivado flow или vitis flow. Насколько я понимаю при выборе ip vivado flow, конечной точкой создания ip будет корка для вивады.

Если вопрос по существу задачи, то обсуждение можно упростить до примера, имеем массив 4 fixed point на входе, хотим домножать их на второй вход, где 1 fixed point. Результат выдаём массивом.

Вообще на данный момент проблема была решена, совершенно дурацким образом. Оказалось что vivado hls не был выпилен из витиса, однако его наличие нигде не озвучивается явно и создаётся впечатление что в будущих релизах его таки выпилят.

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

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


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

А по простому вам совсем ни как - обязательно писать какие то спецкоманды. Я делаю проще - ввожу данные стримом нужной ширины, разбираю на числа в обрабатываемом формате, делаю необходимые операции и собираю результат опять в один стрим. Выглядит может и не так красиво, но зато работает и переносится из версии в версию без проблем. Простой пример - комплексное умножение после ффт с плавающей точкой - в 1 такт 1 пару комплексных чисел не перемножить на нужной частоте - хлс синтез выдает что не успевает по времени - расширяю данные до 4х штатным ip width converter и 4 комплексные умножения за 4 такта уже делаются без проблем (не путаем II с латентностью). Если дальше нужно получить поток по 1 комплексному числу на такт ставлю еще один wc. Из минусов такого решения это размер ядра и ресурсы, но с другой стороны решение получается простым и надежным, а по сравнению с размером ядра ффт все остальные ядра нервно курят.

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

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


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

2 hours ago, fguy said:

А по простому вам совсем ни как

То что вы описали, это я считаю костылем. Фактически вручную реализовывать функционал, который в vivado hls поддерживался из коробки, ну, по мне так странно.

По сути есть директива, которая всегда работала, а теперь перестала. Зачем это было нужно и кому?

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

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


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

50 минут назад, Strob сказал:

То что вы описали, это я считаю костылем.

Я и сам про это написал, но этот примитивный код работает и чаще всего нормально переносится из старой версии хлс-а в новую.

Я работаю с хлс-ом начиная с первых версий (2014.2). За это время там была сделана куча изменений и не всегда приятных и не всегда анонсированных. Так что тут нужно самому следить за ключевыми фишками. Например после 2018.3 испортили синтез брам-интерфейса и не смотря на признание ошибки на форуме оффсайта исправлять ее не спешат. Где то с 2018 версий убрали поддержку записи даже во внутренний брам-массив по диапазону бит - возможно ваша проблема как то связана с этой "фишкой".

Результатом синтеза являются не только соблюдение II и латентность, но и выполнение заданного периода (частоты работы). А здесь будут уже варианты в зависимости от чипа и частоты. Так же "удачный" синтез не всегда гарантирует адекватную работу полученного ядра в чипе и искать такие ошибки гораздо сложнее чем свои.

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


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

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

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

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

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

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

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

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

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

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