Сгенерируйте HDL-код для программируемого КИХ-фильтра

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

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

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

Предпосылки

У вас должна быть лицензия HDL Coder™, чтобы запустить этот пример.

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

Введите следующие команды, чтобы открыть модель в качестве примера:

modelname = 'dspprogfirhdl';
open_system(modelname);

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

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

Введите следующие команды, чтобы открыть Программируемого КИХ через блок Registers:

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

Блок coeffs_registers загружает коэффициенты во внутренние регистры, когда сигнал 'write_enable' высок. Следующие теневые регистры обновляются от содействующих регистров, когда сигнал 'write_done' высок. Это включает одновременную загрузку и обработку данных сущностью фильтра. В этом примере мы применяем полностью параллельную реализацию архитектуры к блоку Discrete FIR Filter. Можно также выбрать последовательную архитектуру из меню HDL Block Properties.

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

Simulink® Simulation Results

Введите следующую команду, чтобы запустить модель в качестве примера:

sim(modelname);

Введите следующую команду, чтобы открыть осциллограф:

open_system([modelname '/Scope']);

Сравните DUT (Проект под Тестом) выход со ссылочным выходом.

Введите следующую команду, чтобы закрыть осциллограф:

close_system([modelname '/Scope']);

Используя Logic Analyzer

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

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

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

Изменение отображения в Logic Analyzer

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

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

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

Получите уникальное временное имя каталога для сгенерированных файлов

workingdir = tempname;

Чтобы проверять, существуют ли какие-либо проблемы с моделью для генерации HDL-кода, не генерируя HDL-код, можно запустить следующую команду:

checkhdl(systemname,'TargetDirectory',workingdir);

Введите следующую команду, чтобы сгенерировать HDL-код:

makehdl(systemname,'TargetDirectory',workingdir);
### Generating HDL for 'dspprogfirhdl/Programmable FIR via Registers'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('dspprogfirhdl', { 'HDL Code Generation' } )">dspprogfirhdl</a> for HDL code generation parameters.
### Starting HDL check.
### Begin VHDL Code Generation for 'dspprogfirhdl'.
### Working on dspprogfirhdl/Programmable FIR via Registers/coeffs_registers as /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/coeffs_registers.vhd.
### Working on dspprogfirhdl/Programmable FIR via Registers/Discrete FIR Filter as /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/Discrete_FIR_Filter.vhd.
### Working on dspprogfirhdl/Programmable FIR via Registers as /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/Programmable_FIR_via_Registers.vhd.
### Generating package file /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/Programmable_FIR_via_Registers_pkg.vhd.
### Creating HDL Code Generation Check Report file:///tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/Programmable_FIR_via_Registers_report.html
### HDL check for 'dspprogfirhdl' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

Введите следующую команду, чтобы сгенерировать испытательный стенд:

makehdltb(systemname,'TargetDirectory',workingdir);
### Begin TestBench generation.
### Generating HDL TestBench for 'dspprogfirhdl/Programmable FIR via Registers'.
### Begin simulation of the model 'gm_dspprogfirhdl'...

### Collecting data...
### Generating test bench data file: /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/coeffs_in.dat.
### Generating test bench data file: /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/write_address.dat.
### Generating test bench data file: /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/write_enable.dat.
### Generating test bench data file: /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/write_done.dat.
### Generating test bench data file: /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/filter_in.dat.
### Generating test bench data file: /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/filter_out_expected.dat.
### Working on Programmable_FIR_via_Registers_tb as /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/Programmable_FIR_via_Registers_tb.vhd.
### Generating package file /tmp/BR2019bd_1170825_64229/publish_examples5/tp683d21e7_e9e9_4e3f_bc72_62be43b29c5e/dspprogfirhdl/Programmable_FIR_via_Registers_tb_pkg.vhd.
### HDL TestBench generation complete.
 

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

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

Это заканчивает Сгенерировать HDL-код для Программируемого КИХ-примера Фильтра.