БПФ и HDL ОБПФ Оптимизированные блоки и системные объекты поддерживают симуляцию и генерацию HDL-кода для многих приложений. Они обеспечивают две архитектуры, оптимизированную для различных вариантов использования:
Streaming Radix 2^2
- Для высоких приложений пропускной способности. Достигает Gigasamples в секунду, когда вы используете векторный вход.
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 = 'hdlcoderFFTHDLOptimizedExample_Streaming';
open_system(modelname);
Коллбэк InitFcn (Образцовые Свойства> Коллбэки> InitFcn) устанавливает параметры для модели. В этом примере параметры управляют размером БПФ и характеристик входных данных.
FFTLength = 512;
Входные данные являются двумя синусоидами, 200 кГц и 250 кГц, каждый выбранный в 1*2e6 Гц. Размер входного вектора является 8 выборками.
FrameSize = 8; Fs = 1*2e6;
Чтобы продемонстрировать, что данные не должны прибывать постоянно, этот пример применяет допустимый вход любой цикл.
ValidPattern = [1,0];
Визуализируйте результат со Средством просмотра Спектра.
open_system('hdlcoderFFTHDLOptimizedExample_Streaming/Spectrum Viewer/Power Spectrum viewer'); % Run the example model: sim(modelname);
Используйте архитектуру Burst Radix 2
для приложений с ограниченными ресурсами FPGA, особенно когда длина БПФ будет большой. Эта архитектура использует только одну комплексную бабочку, чтобы вычислить БПФ. Проект принимает данные, в то время как ready
утверждается и начинает обрабатывать, если целый кадр БПФ сохранен в память. При обработке проект не может принять данные, таким образом, ready
является de-asserted. Смотрите HDL БПФ Оптимизированная документация для синхронизации схемы, поддерживавших функций и использования ресурсов FPGA.
modelname = 'hdlcoderFFTHDLOptimizedExample_Burst';
open_system(modelname);
Коллбэк InitFcn (Образцовые Свойства> Коллбэки> InitFcn) устанавливает параметры для модели. В этом примере параметры управляют размером БПФ и характеристик входных данных.
FFTLength = 512;
Входные данные являются двумя синусоидами, 200 кГц и 250 кГц, каждый выбранный в 1*2e6 Гц. Данные допустимы каждый цикл.
Fs = 1*2e6; ValidPattern = 1;
Визуализируйте результат со Средством просмотра Спектра.
open_system('hdlcoderFFTHDLOptimizedExample_Burst/Spectrum Viewer/Power Spectrum viewer'); % Run the example model: sim(modelname);
Лицензия HDL Coder™ требуется, чтобы генерировать HDL для этого примера.
Выберите одну из моделей, чтобы сгенерировать HDL-код и испытательный стенд:
systemname = 'hdlcoderFFTHDLOptimizedExample_Burst/FFT HDL Optimized Burst'; or systemname = 'hdlcoderFFTHDLOptimizedExample_Streaming/FFT HDL Optimized Streaming';
Используйте временную директорию для сгенерированных файлов:
workingdir = tempname;
Можно запустить следующую команду, чтобы проверять на совместимость генерации HDL-кода:
checkhdl(systemname,'TargetDirectory',workingdir);
Запустите следующую команду, чтобы сгенерировать HDL-код:
makehdl(systemname,'TargetDirectory',workingdir);
Запустите следующую команду, чтобы сгенерировать испытательный стенд:
makehdltb(systemname,'TargetDirectory',workingdir);