Этот пример демонстрирует, как сгенерировать HDL-код для дискретного КИХ-фильтра с несколькими потоками входных данных.
Во многих приложениях DSP несколько потоков данных отфильтрованы тем же фильтром. Прямое решение состоит в том, чтобы реализовать отдельный фильтр для каждого канала. Если возможно, более эффективная областью структура может быть применена путем совместного использования одной реализации фильтра среди нескольких каналов. Получившееся оборудование требует более быстрых часов относительно частоты дискретизации для одного фильтра канала.
Вы требуете, чтобы лицензия HDL Coder™ запустила этот пример.
Введите следующие команды, чтобы открыть модель в качестве примера:
modelname = 'dspmultichannelhdl';
open_system(modelname);
Рассмотрите двухканальный КИХ-фильтр. Вектор входных данных включает два потока синусоидального сигнала с различными частотами. Потоки входных данных обрабатываются фильтром lowpass, коэффициенты которого заданы Функцией обратного вызова Model Properties InitFcn.
Введите следующие команды, чтобы задать полностью параллельную реализацию архитектуры с блоком 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.
Введите следующую команду, чтобы запустить модель в качестве примера:
sim(modelname);
Введите следующую команду, чтобы открыть осциллограф:
open_system([modelname '/Scope']);
Сравните эти два потока выходных данных.
Введите следующую команду, чтобы закрыть осциллограф:
close_system([modelname '/Scope']);
Получите уникальное временное имя каталога для сгенерированных файлов:
workingdir = tempname;
Можно ввести следующую команду, чтобы подтвердить установки параметров блока Multichannel FIR Filter:
checkhdl (systemname, 'TargetDirectory', workingdir);
Введите следующую команду, чтобы сгенерировать HDL-код:
makehdl(systemname,'TargetDirectory',workingdir);
### Generating HDL for 'dspmultichannelhdl/Multichannel FIR Filter'. ### Using the config set for model <a href="matlab:configset.showParameterGroup('dspmultichannelhdl', { 'HDL Code Generation' } )">dspmultichannelhdl</a> for HDL code generation parameters. ### Starting HDL check. ### The code generation and optimization options you have chosen have introduced additional pipeline delays. ### The delay balancing feature has automatically inserted matching delays for compensation. ### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays. ### Output port 0: 2 cycles. ### Begin VHDL Code Generation for 'dspmultichannelhdl'. ### MESSAGE: The design requires 2 times faster clock with respect to the base rate = 0.0005. ### Working on dspmultichannelhdl/Multichannel FIR Filter/Discrete FIR Filter as /tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/Discrete_FIR_Filter.vhd. ### Working on Multichannel FIR Filter_tc as /tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/Multichannel_FIR_Filter_tc.vhd. ### Working on dspmultichannelhdl/Multichannel FIR Filter as /tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/Multichannel_FIR_Filter.vhd. ### Generating package file /tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/Multichannel_FIR_Filter_pkg.vhd. ### Creating HDL Code Generation Check Report file:///tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/Multichannel_FIR_Filter_report.html ### HDL check for 'dspmultichannelhdl' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.
Введите следующую команду, чтобы сгенерировать испытательный стенд:
makehdltb(systemname,'TargetDirectory',workingdir);
### Begin TestBench generation. ### Generating HDL TestBench for 'dspmultichannelhdl/Multichannel FIR Filter'. ### Begin simulation of the model 'gm_dspmultichannelhdl'... ### Collecting data... ### Generating test bench data file: /tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/In1.dat. ### Generating test bench data file: /tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/Out1_expected.dat. ### Working on Multichannel_FIR_Filter_tb as /tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/Multichannel_FIR_Filter_tb.vhd. ### Generating package file /tmp/BR2019bd_1170825_64229/publish_examples6/tpf4ee82b2_4c0e_4442_a9d1_81aa5c706a6a/dspmultichannelhdl/Multichannel_FIR_Filter_tb_pkg.vhd. ### HDL TestBench generation complete.
Можно ввести следующую команду, чтобы показать отчет ресурса с каналом, совместно использующим:
makehdl (systemname, 'TargetDirectory', workingdir, 'ресурс', 'on');
Можно ввести следующую команду, чтобы показать отчет ресурса без канала, совместно использующего:
hdlset_param (имя блока, 'ChannelSharing', 'Off'); makehdl (systemname, 'TargetDirectory', workingdir, 'ресурс', 'on');
Вы видите различное использование ресурса путем сравнения двух отчетов:
Это заканчивает Сгенерировать HDL-код для Многоканального КИХ-примера Фильтра.