Подробная временная информация о том, сколько времени занимает каждый подкомпонент (SDAccel & Vivado HLS)
В настоящее время я работаю над дизайном FPGA с использованием SDaccel (и Vivado HLS). В моем проекте есть несколько подкомпонентов, и задержка (тактовые циклы) каждого подкомпонента будет зависеть от входных данных во время выполнения (поэтому окно анализа Vivado HLS не сможет дать мне точные значения задержки). Как измерить синхронизацию каждого компонента в моем дизайне, чтобы я мог определить, где находятся мои узкие места?
Я нашел директиву прагмы (трассировка прагмы SDS), но я не уверен, как ее использовать, чтобы дать мне подробное представление о том, что происходит в системе во время выполнения различных входных данных.
Есть ли в Vivado_HLS прагмы, которые позволяют это? Если так, как я могу их использовать?
Спасибо W
2 ответа
Прагма SDS, кажется, применима, только если вы используете SDSoC, который поддерживает Zynq и Zynq MPSOC.
Если вы просто используете Vivado HLS, похоже, вам нужно включить код трассировки и измерения более ручным способом.
При моделировании вы можете использовать представление формы волны, чтобы увидеть, когда каждый подкомпонент получает данные и производит вывод.
Для этого я часто добавляю логику трассировки или счетчика в свой RTL, чтобы можно было измерять задержку и пропускную способность на FPGA.
Распространенный шаблон, который у меня есть, заключается в том, чтобы иметь событие FIFO, в которое я ставлю метку времени, тип события и значение события. Чтобы сделать его неблокирующим, ставьте в очередь только если есть место в FIFO.
В дополнение к методам, описанным в ответе Джейми, руководство пользователя Vivado HLS описывает TRIPCOUNT
Прагма, которая определяет количество итераций, которые должен выполнить цикл.
Кроме того, при использовании косимуляции C/RTL отчет должен содержать измеренные значения задержки и пропускной способности на основе входных выборок, которые использовались во время моделирования.