В этом примере показано, как реализовать программируемый КИХ-фильтр для оборудования. Можно программировать фильтр к желаемому ответу путем загрузки коэффициентов во внутренние регистры с помощью интерфейса хоста.
В этом примере мы реализуем банк фильтров, каждый имеющий различные ответы, на чипе. Если все фильтры имеют КИХ-структуру прямой формы и ту же длину, то мы можем использовать интерфейс хоста, чтобы загрузить коэффициенты для каждого ответа на регистровый файл при необходимости.
Этот проект добавляет задержку нескольких циклов, прежде чем входные выборки смогут быть обработаны с загруженными коэффициентами. Однако это имеет преимущество, что то же оборудование фильтра может быть запрограммировано с новыми коэффициентами, чтобы получить различный ответ фильтра. Это сохраняет область чипа, когда в противном случае каждый фильтр был бы реализован отдельно на чипе.
Рассмотрите два КИХ-фильтра, один с ответом 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.
Чтобы сравнить Проект под тестом (DUT) со ссылочным фильтром, откройте Осциллограф и запустите модель в качестве примера.
open_system([modelname '/Scope']);
sim(modelname);
Можно также просмотреть сигналы в Logic Analyzer. Logic Analyzer позволяет вам просмотреть несколько сигналов в одном окне. Это также дает возможность определять переходы в сигналах.
Запустите Logic Analyzer из панели инструментов модели.
Сигналы интереса - входные коэффициенты, запишите адрес, разрешение записи, запишите сделанный, просочитесь, отфильтруйте, ссылка, и ошибка была добавлена к Logic Analyzer для наблюдения.
Отображением Logic Analyzer можно также управлять на основе на делитель или на волну. Чтобы изменить отдельную волну или делитель, выберите волну или делитель и затем нажмите на вкладку "Wave". Полезный режим визуализации в Logic Analyzer является Аналоговым форматом.
Для получения дополнительной информации о Logic Analyzer обратитесь к документации Logic Analyzer.
У вас должна быть лицензия HDL Coder™, чтобы сгенерировать HDL-код для этой модели в качестве примера. Используйте эту команду, чтобы сгенерировать HDL-код. systemname = [modelname '/Programmable КИХ через Регистры]; makehdl (systemname);
Используйте эту команду, чтобы сгенерировать испытательный стенд, который сравнивает результаты симуляции HDL против поведения симуляции Simulink. makehdltb (systemname);
Следующий рисунок показывает симулятор HDL ModelSim после выполнения сгенерированных .do скриптов файла для испытательного стенда. Сравните результат ModelSim с результатом Simulink, как построено прежде.