Реализуйте БПФ для FPGA, используя оптимизированный блок FFT HDL

В этом примере показано, как использовать блок FFT HDL Optimized для реализации БПФ для оборудования.

Блоки и системные объекты БПФ и IFFT HDL Optimized поддерживают симуляцию и генерацию HDL-кода для многих приложений. Они обеспечивают две архитектуры, оптимизированные для различных вариантов использования:

  • Streaming Radix 2^2 - Для высокопроизводительных приложений. Достигает гигасамплес в секунду (GSPS), когда вы используете векторный вход.

  • Burst Radix 2 - Для применения в низких зонах. Использует только одну сложную бабочку.

Этот пример включает две модели, которые показывают, как использовать потоковые и пакетные архитектуры блока FFT HDL Optimized, соответственно.

Потоковая архитектура Radix 2 ^ 2

Современные АЦП способны дискретизировать сигналы со скоростью дискретизации до нескольких гигасамп в секунду. Однако тактовые частоты для самой быстрой FPGA не соответствуют этой частоте дискретизации. FPGA обычно работают на сотнях МГц. Одним из способов выполнения обработки GSPS на FPGA является обработка нескольких выборок одновременно с гораздо более низкой тактовой частотой. Многие современные FPGA поддерживают JESD204B стандартный интерфейс, который принимает скалярный вход с тактовой частотой ГГц и производит вектор выборок с более низкой тактовой частотой. Поэтому современная обработка сигналов требует векторной обработки.

The Streaming Radix 2^2 архитектура предназначена для поддержки сценария использования с высокой пропускной способностью. Эта модель примера использует вход размера вектора 8 и вычисляет БПФ с помощью Streaming Radix 2^2 архитектура. Временную диаграмму, поддерживаемые функции и использование ресурсов FPGA см. на странице с Описанием HDL Optimized block.

modelname = 'FFTHDLOptimizedExample_Streaming';
open_system(modelname);

Обратный коллбэк InitFcn (Свойства модели > Коллбэки > InitFcn) устанавливает параметры для модели. В этом примере параметры управляют размером БПФ и характеристиками входных данных.

FFTLength  = 512;

Входные данные являются две синусоид, 200 кГц и 250 кГц, каждый дискретизирован с частотой 1 * 2e6 Гц. Значение входа размера вектора составляет 8 выборки.

FrameSize    = 8;
Fs           = 1*2e6;

Чтобы продемонстрировать, что данные не должны приходить постоянно, этот пример применяет допустимый вход каждый другой цикл.

ValidPattern = [1,0];

Откройте Spectrum Viewer и запустите пример модели.

open_system('FFTHDLOptimizedExample_Streaming/Spectrum Viewer/Power Spectrum viewer');
sim(modelname);

Архитектура Burst Radix 2 (минимальный ресурс)

Используйте Burst Radix 2 архитектура для приложений с ограниченными ресурсами FPGA, особенно когда длина БПФ большая. Эта архитектура использует только одну сложную бабочку, чтобы вычислить БПФ. Проект принимает данные во время ready утверждается и начинает обработку, когда вся система координат БПФ сохранена в памяти. Во время обработки проект не может принять данные, поэтому ready отменяется. Временную диаграмму, поддерживаемые функции и использование ресурсов FPGA см. на странице с Описанием HDL Optimized block.

modelname = 'FFTHDLOptimizedExample_Burst';
open_system(modelname);

Обратный коллбэк InitFcn (Свойства модели > Коллбэки > InitFcn) устанавливает параметры для модели. В этом примере параметры управляют размером БПФ и характеристиками входных данных.

FFTLength  = 512;

Входные данные являются две синусоид, 200 кГц и 250 кГц, каждый дискретизирован с частотой 1 * 2e6 Гц. Данные действительны каждый цикл.

Fs           = 1*2e6;
ValidPattern = 1;

Откройте Spectrum Viewer и запустите пример модели.

open_system('FFTHDLOptimizedExample_Burst/Spectrum Viewer/Power Spectrum viewer');
sim(modelname);

Сгенерируйте HDL-код и испытательный стенд

Для генерации HDL-кода в данном примере требуется Coder™ лицензия HDL.

Выберите одну из моделей для генерации HDL-кода и испытательного стенда:

systemname = 'FFTHDLOptimizedExample_Burst/FFT HDL Optimized Burst';

или

systemname = 'FFTHDLOptimizedExample_Streaming/FFT HDL Optimized Streaming';

Используйте эту команду для генерации HDL-кода для любого из режимов FFT. Сгенерированный может использоваться для любого целевого устройства FPGA или ASIC.

makehdl(systemname);

Используйте эту команду, чтобы сгенерировать испытательный стенд, которая сравнивает результаты HDL-симуляции с поведением симуляции Simulink.

makehdltb(systemname);