В этом примере показано, как реализовать программируемый конечная импульсная характеристика для оборудования. Можно запрограммировать фильтр на нужный ответ, загрузив коэффициенты во внутренние регистры с помощью хост-интерфейса.
В этом примере мы реализуем на чипе банк фильтров, каждый из которых имеет разные отклики. Если все фильтры имеют прямую структуру конечной импульсной характеристики и ту же длину, то мы можем использовать хост-интерфейс, чтобы загрузить коэффициенты для каждого ответа в файл регистра при необходимости.
Этот проект добавляет задержку нескольких циклов, прежде чем входные выборки могут быть обработаны загруженными коэффициентами. Однако преимущество состоит в том, что одно и то же оборудование фильтра может быть запрограммировано новыми коэффициентами для получения другой характеристики фильтра. Это сохраняет площадь чипа, так как в противном случае каждый фильтр будет реализован отдельно на чипе.
Рассмотрим две конечные импульсные характеристики фильтра, один с lowpass ответом, а другой с highpass-ответом. Коэффициенты заданы при помощи функции Model Properties > Callbacks > InitFcn.
Блок Программируемая конечная импульсная характеристика через Регистры загружает коэффициенты lowpass из Поведенческой Модели Хоста и сначала обрабатывает входные выборки щебета. Затем блок загружает коэффициенты highpass и снова обрабатывает те же выборки щебета.
Блок coeffs_registers загружает коэффициенты во внутренние регистры, когда write_enable
сигнал высок. Теневые регистры обновляются из коэффициентов, регистрируемых при write_done
сигнал высок. Теневые регистры позволяют одновременно загружать и обрабатывать данные сущностью фильтра. Блоки загружают второй набор коэффициентов одновременно с обработкой последних нескольких входных выборок.
Эта модель сконфигурирована, чтобы использовать полностью параллельную архитектуру для блока Discrete FIR Filter. Можно также выбрать последовательные архитектуры из меню HDL Block Properties.
Чтобы сравнить Проект под тестом (DUT) с ссылкой фильтром, откройте Возможности и запустите модель примера.
Можно также просмотреть сигналы в Logic Analyzer. Logic Analyzer позволяет вам просмотреть несколько сигналов в одном окне. Это также облегчает определение переходов в сигналах.
Запустите Logic Analyzer с панели инструментов модели.
Интересующие вас сигналы - входные коэффициенты, адрес записи, активация записи, запись сделана, фильтрация, отфильтровывание, ссылка и ошибка были добавлены в Logic Analyzer для наблюдения.
Logic Analyzer отображения может также управляться на волне или на делителе базиса. Чтобы изменить отдельную волну или делитель, выберите волну или делитель, а затем нажмите на вкладку «Волна». Полезным режимом визуализации в Logic Analyzer является Аналоговый формат.
Для получения дополнительной информации о Logic Analyzer см. документацию по Logic Analyzer.
Для генерации HDL-кода для этой модели HDL Coder™ необходимо иметь лицензию примера. Используйте эту команду для генерации HDL-кода.
systemname = [modelname '/Programmable FIR via Registers'];
makehdl(systemname);
Используйте эту команду, чтобы сгенерировать испытательный стенд, которая сравнивает результаты HDL-симуляции с поведением симуляции Simulink. makehdltb (systemname);
Следующий рисунок показывает HDL-симулятор ModelSim после запуска сгенерированных скриптов .do для испытательного стенда. Сравните результат ModelSim с результатом Simulink, как построено ранее.