exponenta event banner

Внедрение FFT для FPGA с использованием блока, оптимизированного для FFT HDL

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

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

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

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

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

Архитектура потокового излучения 2 ^ 2

Современные АЦП способны дискретизировать сигналы со скоростью дискретизации до нескольких гигасамплов в секунду. Однако тактовые частоты для самого быстрого 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 (минимальный ресурс)

Используйте 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 в этом примере требуется лицензия 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);