Многоканальный КИХ-фильтр для FPGA

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

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

Многоканальный КИХ-фильтр модели

modelname = 'dspmultichannelhdl';
open_system(modelname);

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

Выберите полностью параллельную архитектуру для блока Discrete FIR Filter и включите разделение ресурсов через несколько каналов.

systemname = [modelname '/Multichannel FIR Filter'];
blockname = [systemname '/Discrete FIR Filter'];
set_param(blockname,'FilterStructure','Direct form symmetric');
hdlset_param(blockname,'Architecture','Fully Parallel');
hdlset_param(blockname,'ChannelSharing','On');

Можно альтернативно задать эти настройки в меню HDL Block Properties, к которому вы получаете доступ путем щелчка правой кнопкой по блоку и выбора HDL Code> HDL Block Properties.

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

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

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

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

У вас должна быть лицензия HDL Coder™, чтобы сгенерировать HDL-код для этой модели в качестве примера. Используйте эту команду, чтобы сгенерировать HDL-код для Многоканальной КИХ-подсистемы Фильтра. Включите отчет использования ресурса.

makehdl(systemname,'resource','on');

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

makehdltb(systemname);

Сравните использование ресурса

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

hdlset_param(blockname,'ChannelSharing','Off');
makehdl(systemname,'resource','on');