В этом примере показано, как использовать блок FFT HDL Optimized для реализации FFT для аппаратных средств.
Блоки FFT и IFFT HDL Optimized и системные объекты поддерживают моделирование и генерацию кода HDL для многих приложений. Они обеспечивают две архитектуры, оптимизированные для различных сценариев использования:
Streaming Radix 2^2 - Для высокопроизводительных приложений. Достигает гигасамплов в секунду (GSPS) при использовании векторного ввода.
Burst Radix 2 - Для приложений с низкой площадью. Использует только одну сложную бабочку.
Этот пример включает в себя две модели, которые показывают, как использовать потоковую и пакетную архитектуры блока FFT HDL Optimized соответственно.
Современные АЦП способны дискретизировать сигналы со скоростью дискретизации до нескольких гигасамплов в секунду. Однако тактовые частоты для самого быстрого FPGA не соответствуют этой частоте выборки. FPGA обычно работают на частоте сотни МГц. Одним из способов выполнения обработки GSPS в FPGA является одновременная обработка нескольких выборок с гораздо меньшей тактовой частотой. Многие современные FPGA поддерживают стандартный интерфейс JESD204B, который принимает скалярный вход на тактовой частоте ГГц и формирует вектор выборок на более низкой тактовой частоте. Поэтому современная обработка сигналов требует векторной обработки.
Streaming Radix 2^2 архитектура разработана для поддержки варианта использования с высокой пропускной способностью. В этом примере модель использует входной вектор размером 8 и вычисляет БПФ с помощью Streaming Radix 2^2 архитектура. Временную диаграмму, поддерживаемые функции и использование ресурсов FPGA см. на странице «FFT HDL Optimized block reference».
modelname = 'FFTHDLOptimizedExample_Streaming';
open_system(modelname);

Обратный вызов InitFcn (Свойства модели > Обратные вызовы > InitFcn) задает параметры для модели. В этом примере параметры управляют размером БПФ и характеристиками входных данных.
FFTLength = 512;
Входные данные представляют собой две синусоидальные волны, 200 кГц и 250 кГц, каждая из которых дискретизирована при 1 * 2е6 Гц. Размер входного вектора составляет 8 выборок.
FrameSize = 8; Fs = 1*2e6;
Чтобы продемонстрировать, что данные не должны приходить непрерывно, этот пример применяет действительный ввод через каждый другой цикл.
ValidPattern = [1,0];
Откройте средство просмотра спектра и запустите пример модели.
open_system('FFTHDLOptimizedExample_Streaming/Spectrum Viewer/Power Spectrum viewer');
sim(modelname);

Используйте Burst Radix 2 архитектура для приложений с ограниченными ресурсами FPGA, особенно когда длина FFT велика. Эта архитектура использует только одну сложную бабочку для вычисления БПФ. Проект принимает данные, пока ready утверждается и начинает обработку, как только весь кадр БПФ сохраняется в памяти. Во время обработки проект не может принимать данные, поэтому ready отменяется. Временную диаграмму, поддерживаемые функции и использование ресурсов FPGA см. на странице «FFT HDL Optimized block reference».
modelname = 'FFTHDLOptimizedExample_Burst';
open_system(modelname);

Обратный вызов InitFcn (Свойства модели > Обратные вызовы > InitFcn) задает параметры для модели. В этом примере параметры управляют размером БПФ и характеристиками входных данных.
FFTLength = 512;
Входные данные представляют собой две синусоидальные волны, 200 кГц и 250 кГц, каждая из которых дискретизирована при 1 * 2е6 Гц. Данные действительны каждый цикл.
Fs = 1*2e6; ValidPattern = 1;
Откройте средство просмотра спектра и запустите пример модели.
open_system('FFTHDLOptimizedExample_Burst/Spectrum Viewer/Power Spectrum viewer');
sim(modelname);

Для создания HDL в этом примере требуется лицензия HDL Coder™.
Выберите одну из моделей для создания кода HDL и тестового стенда:
systemname = 'FFTHDLOptimizedExample_Burst/FFT HDL Optimized Burst';
или
systemname = 'FFTHDLOptimizedExample_Streaming/FFT HDL Optimized Streaming';
Эта команда используется для генерации кода HDL для любого режима БПФ. Сгенерированный может использоваться для любого целевого объекта FPGA или ASIC.
makehdl(systemname);
Эта команда используется для создания тестового стенда, который сравнивает результаты моделирования HDL с поведением моделирования Simulink.
makehdltb(systemname);