Strob 0 17 сентября, 2020 Опубликовано 17 сентября, 2020 · Жалоба Добрый день коллеги. Потратил уже кучу времени на пустяковую казалось бы проблему. Решения адекватного до сих пор не нашел. Был vivado hls, была в нем описана функция с вектором на входе. Чтобы грузить весь вектор сразу, параллельной шиной, использовалась директива array_reshape. Все логично, все просто. Берём vitis hls, и облом. Читаем доки, читаем варнинги. Array_reshape не поддерживается для входов. Витис упрямо лепит интерфейс памяти. Никакой альтернативы для получения того же результата найти не смог. Точнее альтернативы есть, но они скорее нагромождение костылей. Неужели теперь с этим жить? Или я что-то упускаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 23 сентября, 2020 Опубликовано 23 сентября, 2020 · Жалоба On 9/17/2020 at 11:03 AM, Strob said: Добрый день коллеги. Потратил уже кучу времени на пустяковую казалось бы проблему. Решения адекватного до сих пор не нашел. Был vivado hls, была в нем описана функция с вектором на входе. Чтобы грузить весь вектор сразу, параллельной шиной, использовалась директива array_reshape. Все логично, все просто. Берём vitis hls, и облом. Читаем доки, читаем варнинги. Array_reshape не поддерживается для входов. Витис упрямо лепит интерфейс памяти. Никакой альтернативы для получения того же результата найти не смог. Точнее альтернативы есть, но они скорее нагромождение костылей. Неужели теперь с этим жить? Или я что-то упускаю? Для начала давайте разберёмся с терминами. Vitis HLS - это что ? Вы пытаетесь сделать kernel для OpenCL на HLS, так ? Или что-то другое ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 24 сентября, 2020 Опубликовано 24 сентября, 2020 (изменено) · Жалоба 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 не был выпилен из витиса, однако его наличие нигде не озвучивается явно и создаётся впечатление что в будущих релизах его таки выпилят. Изменено 24 сентября, 2020 пользователем Strob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 2 октября, 2020 Опубликовано 2 октября, 2020 (изменено) · Жалоба А по простому вам совсем ни как - обязательно писать какие то спецкоманды. Я делаю проще - ввожу данные стримом нужной ширины, разбираю на числа в обрабатываемом формате, делаю необходимые операции и собираю результат опять в один стрим. Выглядит может и не так красиво, но зато работает и переносится из версии в версию без проблем. Простой пример - комплексное умножение после ффт с плавающей точкой - в 1 такт 1 пару комплексных чисел не перемножить на нужной частоте - хлс синтез выдает что не успевает по времени - расширяю данные до 4х штатным ip width converter и 4 комплексные умножения за 4 такта уже делаются без проблем (не путаем II с латентностью). Если дальше нужно получить поток по 1 комплексному числу на такт ставлю еще один wc. Из минусов такого решения это размер ядра и ресурсы, но с другой стороны решение получается простым и надежным, а по сравнению с размером ядра ффт все остальные ядра нервно курят. Изменено 2 октября, 2020 пользователем fguy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 2 октября, 2020 Опубликовано 2 октября, 2020 (изменено) · Жалоба 2 hours ago, fguy said: А по простому вам совсем ни как То что вы описали, это я считаю костылем. Фактически вручную реализовывать функционал, который в vivado hls поддерживался из коробки, ну, по мне так странно. По сути есть директива, которая всегда работала, а теперь перестала. Зачем это было нужно и кому? Изменено 2 октября, 2020 пользователем Strob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 2 октября, 2020 Опубликовано 2 октября, 2020 · Жалоба 50 минут назад, Strob сказал: То что вы описали, это я считаю костылем. Я и сам про это написал, но этот примитивный код работает и чаще всего нормально переносится из старой версии хлс-а в новую. Я работаю с хлс-ом начиная с первых версий (2014.2). За это время там была сделана куча изменений и не всегда приятных и не всегда анонсированных. Так что тут нужно самому следить за ключевыми фишками. Например после 2018.3 испортили синтез брам-интерфейса и не смотря на признание ошибки на форуме оффсайта исправлять ее не спешат. Где то с 2018 версий убрали поддержку записи даже во внутренний брам-массив по диапазону бит - возможно ваша проблема как то связана с этой "фишкой". Результатом синтеза являются не только соблюдение II и латентность, но и выполнение заданного периода (частоты работы). А здесь будут уже варианты в зависимости от чипа и частоты. Так же "удачный" синтез не всегда гарантирует адекватную работу полученного ядра в чипе и искать такие ошибки гораздо сложнее чем свои. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться