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

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

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

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

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

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

Потоковая передача основания 2^2 архитектура

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

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

modelname = 'FFTHDLOptimizedExample_Streaming';
open_system(modelname);

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

FFTLength  = 512;

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

FrameSize    = 8;
Fs           = 1*2e6;

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

ValidPattern = [1,0];

Откройте Средство просмотра Спектра и запустите модель в качестве примера.

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

Разорвите основание 2 (минимальный ресурс) архитектура

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

modelname = 'FFTHDLOptimizedExample_Burst';
open_system(modelname);

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

FFTLength  = 512;

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

Fs           = 1*2e6;
ValidPattern = 1;

Откройте Средство просмотра Спектра и запустите модель в качестве примера.

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-код:

makehdl(systemname);

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

makehdltb(systemname);