Программируемый КИХ-фильтр для FPGA

В этом примере показано, как реализовать программируемый КИХ-фильтр для оборудования. Можно программировать фильтр к желаемому ответу путем загрузки коэффициентов во внутренние регистры с помощью интерфейса хоста.

В этом примере мы реализуем банк фильтров, каждый имеющий различные ответы, на чипе. Если все фильтры имеют КИХ-структуру прямой формы и ту же длину, то мы можем использовать интерфейс хоста, чтобы загрузить коэффициенты для каждого ответа на регистровый файл при необходимости.

Этот проект добавляет задержку нескольких циклов, прежде чем входные выборки смогут быть обработаны с загруженными коэффициентами. Однако это имеет преимущество, что то же оборудование фильтра может быть запрограммировано с новыми коэффициентами, чтобы получить различный ответ фильтра. Это сохраняет область чипа, когда в противном случае каждый фильтр был бы реализован отдельно на чипе.

Программируемый КИХ-фильтр модели

Рассмотрите два КИХ-фильтра, один с ответом lowpass и другим с highpass ответом. Коэффициенты заданы при помощи Model Properties> Коллбэки> функция InitFcn.

modelname = 'dspprogfirhdl';
open_system(modelname);

Программируемый КИХ через блок Registers загружает коэффициенты lowpass от Поведенческой модели Хоста и обрабатывает входные выборки щебета сначала. Затем блок загружает highpass коэффициенты и обрабатывает те же выборки щебета снова.

open_system([modelname '/Programmable FIR via Registers']);

Блок coeffs_registers загружает коэффициенты во внутренние регистры когда write_enable сигнал высок. Теневые регистры обновляются от содействующих регистров когда write_done сигнал высок. Теневые регистры включают одновременную загрузку и обработку данных сущностью фильтра. Блоки загружают второй набор коэффициентов в то же время, что и, обрабатывая последние несколько входных выборок.

Эта модель сконфигурирована, чтобы использовать полностью параллельную архитектуру в блоке Discrete FIR Filter. Можно также выбрать последовательные архитектуры из меню HDL Block Properties.

Simulink® Simulation Results

Чтобы сравнить Проект под тестом (DUT) со ссылочным фильтром, откройте Осциллограф и запустите модель в качестве примера.

open_system([modelname '/Scope']);
sim(modelname);

Используя Logic Analyzer

Можно также просмотреть сигналы в Logic Analyzer. Logic Analyzer позволяет вам просмотреть несколько сигналов в одном окне. Это также дает возможность определять переходы в сигналах.

Запустите Logic Analyzer из панели инструментов модели.

Сигналы интереса - входные коэффициенты, запишите адрес, разрешение записи, запишите сделанный, просочитесь, отфильтруйте, ссылка, и ошибка была добавлена к Logic Analyzer для наблюдения.

Отображением Logic Analyzer можно также управлять на основе на делитель или на волну. Чтобы изменить отдельную волну или делитель, выберите волну или делитель и затем нажмите на вкладку "Wave". Полезный режим визуализации в Logic Analyzer является Аналоговым форматом.

Для получения дополнительной информации о Logic Analyzer обратитесь к документации Logic Analyzer.

Сгенерируйте HDL-код и испытательный стенд

У вас должна быть лицензия HDL Coder™, чтобы сгенерировать HDL-код для этой модели в качестве примера. Используйте эту команду, чтобы сгенерировать HDL-код. systemname = [modelname '/Programmable КИХ через Регистры]; makehdl (systemname);

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

Результаты симуляции ModelSim™

Следующий рисунок показывает симулятор HDL ModelSim после выполнения сгенерированных .do скриптов файла для испытательного стенда. Сравните результат ModelSim с результатом Simulink, как построено прежде.