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

Другие вопросы по тегам