exponenta event banner

Программируемый фильтр FIR для FPGA

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

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

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

Модель программируемого фильтра FIR

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

Программируемый блок FIR через регистры загружает коэффициенты нижних частот из модели поведения хоста и сначала обрабатывает входные выборки частотно-частотной модуляции. Затем блок загружает коэффициенты верхних частот и снова обрабатывает те же самые выборки чирпа.

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

Эта модель настроена на использование полностью параллельной архитектуры для блока дискретного КИХ-фильтра. Также можно выбрать последовательные архитектуры в меню Свойства блока HDL.

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

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

Использование логического анализатора

Сигналы также можно просмотреть в логическом анализаторе. Логический анализатор позволяет просматривать несколько сигналов в одном окне. Это также облегчает обнаружение переходов в сигналах.

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

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

Дисплей логического анализатора также может управляться по волнам или по делителям. Чтобы изменить отдельную волну или делитель, выберите волну или делитель, а затем щелкните вкладку «Волна». Полезным способом визуализации в Logic Analyzer является аналоговый формат.

Для получения дополнительной информации о логическом анализаторе см. документацию по логическому анализатору.

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

Для создания кода HDL для этой модели необходимо иметь лицензию HDL Coder™. Эта команда используется для создания кода HDL.

systemname = [modelname '/Programmable FIR via Registers'];
makehdl(systemname);

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

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

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