Реализуйте БПФ на многоядерном процессоре и FPGA

Этот пример показывает вам, как использовать в своих интересах цель многоядерного процессора с ускорением FPGA путем графического разделения модели. Этот пример требует, чтобы Simulink Coder™ сгенерировал многопоточный код и HDL Coder™, чтобы сгенерировать HDL-код. Вы не можете сгенерировать HDL-код в системах Macintosh.

Введение

Несколько современных процессоров включают многоядерные процессоры, интегрированные с компонентами FPGA, чтобы создать высокоэффективные приложения. Они требуют многожильный и программирование FPGA, включая программирование параллельных потоков, HDL и коммуникационных интерфейсов между ядрами системы. Simulink™ позволяет вам использовать в своих интересах эти подходы путем графического разделения алгоритмов и путем присвоения программного обеспечения, сгенерированного от тех разделов до потоков на процессоре и к модулям на FPGA. Пример использует одну модель уровня приложения, чтобы сгенерировать один исполняемый файл, состоя из нескольких потоков и HDL-кода, использовать в своих интересах аппаратный параллелизм FPGA. Это проиллюстрировано на рисунке ниже.

Модель в качестве примера

Загрузите модель в качестве примера:

slexMulticoreFPGAExample

Определение архитектуры

Ко всем настройкам параллельного выполнения для этой модели можно получить доступ в диалоговом окне Concurrent Execution (Параметры конфигурации>, Решатели> Конфигурируют Задачи).

Первый шаг, чтобы реализовать наш алгоритм должен задать структурные элементы нашей целевой архитектуры. Это включает структурные элементы оборудования, такие как номер и тип процессорных узлов (центральный процессор, FPGA) и каналы связи (AXI, PCI).

Это также включает параметры настройки программного обеспечения в Параметры конфигурации модели (e.g. Системный Конечный файл, аппаратная реализация, настройки передачи данных). В этом примере мы выбрали предварительно сконфигурированную целевую архитектуру 'Демонстрационная архитектура'. Эта архитектура использует ваш рабочий стол в качестве заместителя для процесса развертывания.

Разделение и отображение модели

Разделите модель, чтобы решить, какие функции, запущенные последовательно и которые запускаются одновременно.

Модель в качестве примера разделена явным образом, состоя из Системных блоков MATLAB, блока Model, Атомарной подсистемы и блока Outport. Явное разделение создает разделы на основе этих блоков на корневом уровне модели. Неявное разделение, с другой стороны, создает разделы на основе шагов расчета блока и других ограничений планирования.

После разделения модели можно сопоставить разделы с задачами центрального процессора и узлами FPGA. Можно изменить отображение для исследования космоса проекта через графический интерфейс пользователя или API. Во время отображения сигналы будут автосопоставлены с каналами.

Можно измениться, как блоки сопоставлены с потоками и с FPGA в диалоговом окне Concurrent Execution. Можно также найти больше информации в документации

Сгенерируйте многопоточный и HDL-код

Дважды кликните на кнопке 'Generate Code and Profile Report', чтобы сгенерировать многопоточный код. В этом примере хост - компьютер заменяет целевое окружение. Код С сгенерирован для блоков, сопоставленных с задачами процессора. Этот код организован с помощью собственного компонента потоков настольной машины. Фрагмент кода показывает, как создаются потоки. Кроме того, HDL-код сгенерирован для блоков, сопоставленных с аппаратными узлами. Фрагмент кода ниже иллюстрирует, как модуль/сущность создается в VHDL.

close_system('slexMulticoreFPGAExample',0);