exponenta event banner

Реализация FFT на многоядерном процессоре и FPGA

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

Введение

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

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

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

slexMulticoreFPGAExample

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

Все параметры параллельного выполнения для этой модели доступны в диалоговом окне «Параллельное выполнение» (Configuration Parameters > Solvers > Configure Tasks).

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

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

Секционирование и сопоставление модели

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

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

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

В диалоговом окне «Одновременное выполнение» можно изменить способ сопоставления блоков с потоками и FPGA. Дополнительные сведения см. в разделе Оптимизация и развертывание на многоядерном целевом компьютере.

Создание многопоточного кода и кода HDL

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

close_system('slexMulticoreFPGAExample',0);