exponenta event banner

Высокопроизводительный канализатор для FPGA

В этом примере показано, как реализовать канализатор с высокой пропускной способностью (Gigasamples в секунду, GSPS) для аппаратных средств с использованием набора многофазных фильтров.

Высокоскоростная обработка сигналов является требованием для таких приложений, как радар, широкополосная беспроводная связь и обратная связь.

Современные АЦП способны дискретизировать сигналы со скоростью дискретизации до нескольких гигасамплов в секунду. Но тактовые частоты для самого быстрого FPGA не соответствуют этой частоте выборки. FPGA обычно работают на частоте сотни МГц. Подход к выполнению обработки GSPS на FPGA заключается в переходе от скалярной обработки к векторной обработке и обработке множества выборок одновременно с гораздо меньшей тактовой частотой. Многие современные FPGA поддерживают стандартный интерфейс JESD204B, который принимает скалярный вход на тактовой частоте ГГц и формирует вектор выборок на более низкой тактовой частоте.

В этом примере показано, как разработать приложение обработки сигналов для пропускной способности GSPS в Simulink. Входные данные векторизируются через интерфейс JESD204B и доступны в FPGA с меньшей тактовой частотой. Модель представляет собой набор многофазных фильтров, который состоит из фильтра и БПФ, который обрабатывает 16 выборок одновременно. Метод набора полифазных фильтров используется для минимизации неточности БПФ из-за утечки и потери гребешка. Дополнительные сведения о наборе многофазных фильтров см. в разделе Спектральный анализ высокого разрешения.

В первой части примера реализован набор многофазных фильтров с 4-х отводным фильтром.

Во второй части примера используется блок оптимизации HDL каннелайзера, сконфигурированный для 12-отводного фильтра. Блок оптимизации HDL Каннелайзера использует метод набора многофазных фильтров.

Банк полифазных фильтров

modelname = 'PolyphaseFilterBankHDLExample_4tap';
open_system(modelname);

InitFcn обратный вызов (Свойства модели > Обратные вызовы > InitFcn) устанавливает модель. Эта модель использует 512-точечный БПФ с фильтром с четырьмя отводами для каждой полосы. Используйте dsp.Channelizer Системная object™ для генерации коэффициентов. Многофазный метод объекта Каннелизатора генерирует матрицу 512 на 4. Каждая строка представляет коэффициенты для каждой полосы. Коэффициенты формируются в фиксированную точку с той же длиной слова, что и входной сигнал.

FFTLength  = 512;
h = dsp.Channelizer;
h.NumTapsPerBand = 4;
h.NumFrequencyBands = FFTLength;
h.StopbandAttenuation = 60;
coef =fi(polyphase(h),1,15,14,'RoundingMethod','Convergent');

Алгоритм требует 512 фильтров (по одному фильтру для каждого диапазона). Для векторного ввода 16 выборок мы можем использовать 16 фильтров, 32 раза.

InVect      = 16;
ReuseFactor = FFTLength/InVect;

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

Multiplication_PipeLine = 2;
CoefBank_PipeLine       = 1;

Источник данных

Входные данные состоят из двух синусоидальных волн, 200 кГц и 250 кГц.

Результаты моделирования

Чтобы визуализировать результат спектра, откройте средства просмотра спектра и запустите модель.

open_system('PolyphaseFilterBankHDLExample_4tap/FFT Spectrum Viewer/Power Spectrum viewer (FFT)');
open_system('PolyphaseFilterBankHDLExample_4tap/PFB Spectrum Viewer/Power Spectrum viewer (PFB)');
sim(modelname);

Набор многофазных фильтров Power Spectrum Viewer показывает улучшение спектра мощности и минимизацию утечки частоты и образования границ по сравнению с использованием только БПФ. Сравнивая два спектра и увеличивая масштаб от 100 кГц до 300 кГц, заметьте, что набор полифазных фильтров имеет меньше пиков свыше -40 дБ, чем классический БПФ.

Рекомендации по оптимизированному оборудованию

  • Тип данных: Длина слова данных влияет как на точность результата, так и на ресурсы, используемые в оборудовании. В этом примере мы проектируем фильтр с полной точностью. С типом входных данных fixdt(1,15,13), выходной сигнал: fixdt(1,18,17). Абсолютные значения коэффициентов фильтра меньше 1, поэтому данные не растут после каждого умножения, и нам нужно сложить один бит для каждого сложения. Чтобы сохранить точность в БПФ, нам нужно вырастить по одному биту для каждого этапа. Это делает умножение множителя на каждом этапе больше. Для многих FPGA желательно поддерживать размер умножения меньше 18x18. Поскольку 512-точечный БПФ имеет 9 каскадов, вход БПФ не может быть больше 11 битов. Исследуя коэффициенты фильтра, мы наблюдаем, что первые 8 двоичных цифр максимального коэффициента равны нулю, и поэтому мы можем привести коэффициенты к fixdt(1,7,14) вместо fixdt(1,15,14). Также мы наблюдаем, что максимальное значение выходного сигнала блока Datatype внутри набора многофазных фильтров имеет 7 начальных нулей после двоичной точки, и поэтому мы приводим выходной сигнал фильтра к fixdt(1,11,17) вместо этого. Это позволяет сохранить размер множителя внутри БПФ меньше 18 на 18 и экономит аппаратные ресурсы.

  • Конструкция для скорости:

  1. Блок управления состоянием: Блок кодера управления состоянием (HDL Coder) используется в синхронном режиме для генерации аппаратного удобного кода для блока задержки с разрешающим портом.

  2. Минимизация включения часов: модель настроена на генерацию кода HDL с включенной опцией Минимизация включения часов (В параметрах конфигурации выберите > Генерация кода HDL > Глобальные настройки > Порты > Минимизация включения часов). Эта опция поддерживается, если модель является односкоростной. Включение тактового сигнала - это глобальный сигнал, который не рекомендуется использовать для высокоскоростных систем.

  3. Использование блока DSP в FPGA: для преобразования умножителей в блок DSP в FPGA, умножители должны быть конвейерными. В этом примере мы направляем множители (2 задержки до и 2 задержки после) путем установки Multiplication_PipeLine = 2; Эти регистры конвейера не должны быть сброшены. Установите для каждого трубопровода тип сброса «нет» (щелкните правой кнопкой мыши блок задержки и выберите «Код HDL» > «Свойства блока HDL» > «Тип сброса» = «Нет»).

  4. Использование ПЗУ в FPGA: Блок коэффициентов внутри банка коэффициентов является комбинаторным блоком. Чтобы отобразить этот блок в ПЗУ, добавьте регистр после блока. Длина задержки задается значением CoefBank_PipeLine. Установите тип сброса для этих задержек равным none (щелкните правой кнопкой мыши блок Delay и выберите HDL Code > HDL Block Properties > Reset Type = None).

Создание кода HDL и испытательного стенда

Для создания кода HDL для этой модели необходимо иметь лицензию HDL Coder™. Эта команда используется для создания кода HDL. systemname = 'PolyphaseFilterBankHExample _ 4tap/PolyPhaseFilterBank'; makehdl (системное имя);

Эта команда используется для создания тестового стенда, который сравнивает результаты моделирования HDL с поведением моделирования Simulink. makehdltb (системное имя);

Результаты синтеза

Конструкция была синтезирована для Xilinx Virtex 7 (xc7vx550t-ffg1158, степень скорости 3) с использованием ISE. В проекте достигается тактовая частота 499,525 МГц (перед местом и маршрутом). При 16 отсчетах на тактовый сигнал это преобразуется в пропускную способность 8 GSPS. Следует отметить, что эта подсистема имеет большое количество портов ввода-вывода и не подходит в качестве автономной конструкции, предназначенной для FPGA.

Оптимизированный каналообразователь HDL

Для улучшения частотной характеристики используйте фильтр с большим количеством отводов. В следующей модели используется оптимизированный блок каннелизатора HDL, сконфигурированный с 12-отводным фильтром для улучшения спектра. Использование встроенного блока оптимизации HDL каннелизатора упрощает изменение параметров конструкции.

modelname = 'PolyphaseFilterBankHDLExample_HDLChannelizer';
open_system(modelname);

Модель использует переменные рабочего пространства для настройки БПФ и фильтра. В этом случае модель использует 512-точечный FFT и 12-краевой фильтр для каждой полосы. Количество коэффициентов для каналообразователя составляет 512 полос частот, умноженных на 12 отводов на полосу частот. tf(h) способ генерирует все коэффициенты.

InVect     = 16;
FFTLength  = 512;
h = dsp.Channelizer;
h.NumTapsPerBand = 12;
h.NumFrequencyBands = FFTLength;
h.StopbandAttenuation = 60;
coef12Tap = tf(h);

Источник данных

Входные данные состоят из двух синусоидальных волн, 200 кГц и 206,5 кГц. Частоты ближе друг к другу, чем в первом примере, чтобы проиллюстрировать разницу между каналообразователем и 4-отводным фильтром в спектральном разрешении.

Результаты моделирования

Чтобы визуализировать результат спектра, откройте средства просмотра спектра и запустите модель.

open_system('PolyphaseFilterBankHDLExample_HDLChannelizer/PFB_4tap Spectrum Viewer/Power Spectrum viewer (PFB_4tap)');
open_system('PolyphaseFilterBankHDLExample_HDLChannelizer/Channelizer Spectrum Viewer/Power Spectrum viewer (Channelizer_12tap)');
sim(modelname);

Power Spectrum Viewer для Channelizer_12tap модели показывает улучшение спектра мощности набора многофазных фильтров с 12-отводным фильтром по сравнению с 4-отводным фильтром в предыдущей модели. Сравните результаты спектра для блоков каналообразователей и четырехконтактных полифазных фильтров. Увеличьте масштаб между 100 кГц и 300 кГц, чтобы увидеть, что каналообразователь обнаруживает только два пика, в то время как 4-отводная группа многофазных фильтров обнаруживает более 2 пиков. Два пика являются ожидаемым результатом, поскольку входной сигнал имеет только две частотные составляющие.