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

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

Введение

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

Пример модели

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

slexMulticoreFPGAExample

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

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

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

Это также включает настройки программного обеспечения в параметрах конфигурации модели (например, System Target File, аппаратная реализация, настройки передачи данных). В этом примере мы выбрали предварительно сконфигурированную целевую архитектуру 'Sample architecture'. Эта архитектура использует рабочий стол в качестве резерва для процесса развертывания.

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

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

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

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

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

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

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

close_system('slexMulticoreFPGAExample',0);