Vivado HLS (High Level Synthesis) — САПР Xilinx, предназначенная для создания цифровых устройств с применением языков высокого уровня C/C++.

Немного про HLS читайте в предыдущей статье.

HLS. Часть 0.

Протокол AXI-Stream используется, как стандартный интерфейс для соединения IP блоков, которые обмениваются данными. Интерфейс может использоваться для соединения одного главного IP, который генерирует данные, с другим IP, который принимает данные. Протокол также может быть использован для соединения большего количества главных и подчиненных IP. Протокол поддерживает несколько потоков данных, использующих общий набор шин, что позволяет реализовать внутренний обмен данными между IP блоками.

Интерфейс AXI-Stream использует термин передача пакета. Передачей называют обмен одиночных данных от главного к подчиненному IP. Передача определяется одиночным Handshake. Пакетом называют группу байт, передающихся вместе, что аналогично пакетной передаче в AXI. Пакет может состоять из одной или нескольких передач. Компоненты могут использовать пакеты для более эффективной передачи данных. Также существует понятие кадра, который состоит из целого числа пакетов.

Для того, чтобы передача данных состоялась, необходимо, чтобы на очередном такте были выставлены сигналы TVALID и TREADY. При этом главный IP не может ждать выставления TREADY перед выставлением TVALID. А когда сигнал TVALID установлен, он не может быть снят до тех пор, пока не будет выставлен TVALID. Подчиненный IP может ждать выставления TVALID до выставления TREADY. Также подчиненному компоненту разрешено менять состояние TREADY, если в этот момент TVALID снят.

У нас сегодня под капотом пример IP на HLS, которая генерирует данные для AXI-Stream.

1. Создаем новый проект.

2. Выбираем нужным нам SoC.

3. Меню конфигурации проекта.

4. Настраиваем рабочую частоту для IP, по умолчанию значение равно 10ns, можно время задавать через частоту (мне например так привычнее).

5. Вводим название проекта.

6. Вводим название top функции.

7. Исходный код проекта.

8. Сборка проекта.

9. Утилизация ресурсов FPGA.

10. Диаграмма планирования.

11. Упаковываем наш код в IP, далее делаем компиляцию C/C++ -> HDL (Verilog или HDL). Вводим название IP и заполняем поля описания ядра.

12. Нажимаем ОК для генерации выходного ядра.

13. Информация при генерировании проекта.

14. Загружаем IP в проект с Vivado (подробно из цикла статей про Zynq-7000 SoC — Xilinx. Z-turn Lite. Bare metal).

15. Необходимое IP.

16. Настраиваем AXI DMA для работы с нашим IP.

17. Итоговый проект в Vivado.

18. Создадим новый проект.

19. Создадим проект в SDK для проверки работы с нашим IP, будем использовать готовый пример от Xilinx.

20. Исходный код проекта (основной .c файл).

21. Результат нашей работы. Видим, что хотели, то и получили.

Отправить ответ

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Уведомлять о