В этом примере показано, как использовать блок FFT HDL Optimized, чтобы реализовать БПФ для оборудования.
БПФ и HDL ОБПФ Оптимизированные блоки и системные объекты поддерживают симуляцию и генерацию HDL-кода для многих приложений. Они обеспечивают две архитектуры, оптимизированные для различных вариантов использования:
Streaming Radix 2^2
- Для высоких приложений пропускной способности. Достигает gigasamples в секунду (GSPS), когда вы используете векторный вход.
Burst Radix 2
- Для низких приложений области. Использование только одна комплексная бабочка.
Этот пример включает две модели, которые показывают, как использовать потоковую передачу и разорвать архитектуры блока FFT HDL Optimized, соответственно.
Современные 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);
Используйте 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 Coder™ требуется, чтобы генерировать HDL для этого примера.
Выберите одну из моделей, чтобы сгенерировать HDL-код и испытательный стенд:
systemname = 'FFTHDLOptimizedExample_Burst/FFT HDL Optimized Burst';
или
systemname = 'FFTHDLOptimizedExample_Streaming/FFT HDL Optimized Streaming';
Используйте эту команду, чтобы сгенерировать HDL-код:
makehdl(systemname);
Используйте эту команду, чтобы сгенерировать испытательный стенд, который сравнивает результаты симуляции HDL против поведения симуляции Simulink.
makehdltb(systemname);