В этом примере показано, как инстанцировать нескольких синхронных входных портов часов верхнего уровня в HDL Coder.
HDL Coder имеет два режима синхронизации: тот, который генерирует один вход часов к Устройству под тестом (DUT) и тот, который сгенерирует синхронный первичный вход часов для каждого уровня Simulink в DUT. По умолчанию HDL Coder создает проект HDL, который использует один порт часов в DUT. В одном режиме тактовой синхронизации, если несколько уровней существуют в модели Simulink, контроллер синхронизации создается, чтобы управлять синхронизацией к фрагментам модели, которые запускаются на более медленном уровне. Контроллер синхронизации генерирует набор часов, включает с необходимым уровнем и информацией о фазе, чтобы управлять проектом. Каждые сгенерированные часы включают, целое число несколько медленнее, чем первичная тактовая частота. Каждый уровень выходного сигнала сопоставлен с часами, включают выходной сигнал, который указывает на правильную синхронизацию, чтобы произвести выходные данные.
В синхронном несколько режим тактовой синхронизации сгенерированный код имеет набор портов часов как первичные входные параметры к DUT, каждый соответствующий отдельному уровню в модели. Переходы между уровнями часто требуют, чтобы часы включили на данном уровне, которые не совпадают с часами того уровня. Эти несовпадающие по фазе сигналы сгенерированы с контроллером синхронизации. Модель часов кратного может потребовать нескольких контроллеров синхронизации.
Первое использование в качестве примера многоскоростная Интерполяция CIC просачивается один режим тактовой синхронизации. Вход фильтра также представлен как выход для этого примера, чтобы подарить модели выходные сигналы, запускающиеся на различных уровнях.
load_system('hdlcoder_clockdemo'); open_system('hdlcoder_clockdemo/DUT'); set_param('hdlcoder_clockdemo', 'SimulationCommand', 'update');
В одном режиме тактовой синхронизации HDL-код для DUT будет иметь набор трех сигналов, которые не появляются в схеме Simulink, добавленной к нему. Коллективно это пакет часов, содержа сигналы для часов, основной тактовый генератор включают и сбрасывают. Эти сигналы появляются в Объявлении сущности VHDL и используются в сгенерированном коде.
hdlset_param('hdlcoder_clockdemo', 'Traceability', 'on'); makehdl('hdlcoder_clockdemo/DUT');
### Generating HDL for 'hdlcoder_clockdemo/DUT'. ### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_clockdemo', { 'HDL Code Generation' } )">hdlcoder_clockdemo</a> for HDL code generation parameters. ### Starting HDL check. ### Begin VHDL Code Generation for 'hdlcoder_clockdemo'. ### Working on DUT_tc as hdlsrc/hdlcoder_clockdemo/DUT_tc.vhd. ### Working on hdlcoder_clockdemo/DUT as hdlsrc/hdlcoder_clockdemo/DUT.vhd. ### Generating package file hdlsrc/hdlcoder_clockdemo/DUT_pkg.vhd. ### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2020ad_1302590_239645/publish_examples0/tpce460566/hdlsrc/hdlcoder_clockdemo/html/hdlcoder_clockdemo_codegen_rpt.html');">hdlcoder_clockdemo_codegen_rpt.html</a> ### Creating HDL Code Generation Check Report file:///tmp/BR2020ad_1302590_239645/publish_examples0/tpce460566/hdlsrc/hdlcoder_clockdemo/DUT_report.html ### HDL check for 'hdlcoder_clockdemo' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.
Блок комментария файла в HDL код DUT содержит информацию о Сводных данных Часов. В одном режиме тактовой синхронизации как показано здесь, этот отчет содержит таблицу, детализирующую частоты дискретизации для каждых часов, включают выходной сигнал. Отчет также содержит таблицу, перечисляющую каждый пользовательский выходной сигнал, и его связанные часы включают выходной сигнал. Любое время отчет HTML сгенерирован, Сводный отчет Часов, также сгенерировано.
Чтобы сгенерировать несколько синхронных часов для этого проекта, параметр 'ClockInputs' должен быть установлен на 'несколько'. Это может быть сделано на makehdl командной строке или путем изменения настроек "Clock inputs" "Нескольким" на вкладке HDL Configuration Parameters Global Settings.
makehdl('hdlcoder_clockdemo/DUT', 'ClockInputs', 'multiple');
### Generating HDL for 'hdlcoder_clockdemo/DUT'. ### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_clockdemo', { 'HDL Code Generation' } )">hdlcoder_clockdemo</a> for HDL code generation parameters. ### Starting HDL check. ### Begin VHDL Code Generation for 'hdlcoder_clockdemo'. ### Working on DUT_tc_d1 as hdlsrc/hdlcoder_clockdemo/DUT_tc_d1.vhd. ### Working on hdlcoder_clockdemo/DUT as hdlsrc/hdlcoder_clockdemo/DUT.vhd. ### Generating package file hdlsrc/hdlcoder_clockdemo/DUT_pkg.vhd. ### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2020ad_1302590_239645/publish_examples0/tpce460566/hdlsrc/hdlcoder_clockdemo/html/hdlcoder_clockdemo_codegen_rpt.html');">hdlcoder_clockdemo_codegen_rpt.html</a> ### Creating HDL Code Generation Check Report file:///tmp/BR2020ad_1302590_239645/publish_examples0/tpce460566/hdlsrc/hdlcoder_clockdemo/DUT_report.html ### HDL check for 'hdlcoder_clockdemo' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.
Содержимое Сводных данных Часов отличается в нескольких режим тактовой синхронизации. Отчет теперь содержит таблицу часов. Эта таблица имеет одну запись для каждых первичных часов DUT. Это описывает относительное отношение часов между каждыми часами и самыми быстрыми часами в модели. Как с одним режимом тактовой синхронизации, эта информация представлена и в HDL блок комментария файла DUT и в отчете HTML.
Несколько синхронных часов могут быть полезны даже для проекта только с одним уровнем Simulink. Различная оптимизация может потребовать тактовых частот быстрее, чем обозначенный в исходной модели. Следующий пример демонстрирует модель фильтрации аудио, которая применяет тот же фильтр на левые и правые каналы. По умолчанию HDL Coder сгенерировал бы два модуля фильтра в оборудовании. С этой настройкой несколько режим тактовой синхронизации все еще только генерирует часы, как один режим тактовой синхронизации делает.
bdclose hdlcoder_clockdemo; load_system('hdlcoder_audiofiltering'); open_system('hdlcoder_audiofiltering/Audio filter'); hdlset_param('hdlcoder_audiofiltering', 'ClockInputs', 'Multiple'); hdlset_param('hdlcoder_audiofiltering/Audio filter', 'SharingFactor', 0); makehdl('hdlcoder_audiofiltering/Audio filter', 'Traceability', 'on');
### Generating HDL for 'hdlcoder_audiofiltering/Audio filter'. ### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_audiofiltering', { 'HDL Code Generation' } )">hdlcoder_audiofiltering</a> for HDL code generation parameters. ### Starting HDL check. ### Begin VHDL Code Generation for 'hdlcoder_audiofiltering'. ### Working on hdlcoder_audiofiltering/Audio filter/Filter_left as hdlsrc/hdlcoder_audiofiltering/Filter_left.vhd. ### Working on hdlcoder_audiofiltering/Audio filter as hdlsrc/hdlcoder_audiofiltering/Audio_filter.vhd. ### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2020ad_1302590_239645/publish_examples0/tpce460566/hdlsrc/hdlcoder_audiofiltering/html/hdlcoder_audiofiltering_codegen_rpt.html');">hdlcoder_audiofiltering_codegen_rpt.html</a> ### Creating HDL Code Generation Check Report file:///tmp/BR2020ad_1302590_239645/publish_examples0/tpce460566/hdlsrc/hdlcoder_audiofiltering/Audio_filter_report.html ### HDL check for 'hdlcoder_audiofiltering' complete with 0 errors, 0 warnings, and 0 messages. ### HDL code generation complete.
С разделением ресурсов, к которому применяются идентичные левые и правые атомарные подсистемы канала, сгенерирован только один фильтр. Чтобы удовлетворить требования синхронизации Simulink, один фильтр запущен на дважды тактовой частоте как исходная модель Simulink, как показан ниже. Поскольку оптимизация разделения ресурсов создает вторую тактовую частоту, пользователь может использовать синхронный несколько режим тактовой синхронизации, чтобы предоставить внешние таймеры для обоих уровней. Сводный отчет Часов показывает время выполнения для двух часов.
bdclose gm_hdlcoder_audiofiltering; hdlset_param('hdlcoder_audiofiltering/Audio filter', 'SharingFactor', 2); makehdl('hdlcoder_audiofiltering/Audio filter', 'Traceability', 'on'); open_system('gm_hdlcoder_audiofiltering/Audio filter'); set_param('gm_hdlcoder_audiofiltering', 'SimulationCommand', 'update');
### Generating HDL for 'hdlcoder_audiofiltering/Audio filter'. ### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_audiofiltering', { 'HDL Code Generation' } )">hdlcoder_audiofiltering</a> for HDL code generation parameters. ### Starting HDL check. ### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays. ### Output port 0: 1 cycles. ### Output port 1: 1 cycles. ### Begin VHDL Code Generation for 'hdlcoder_audiofiltering'. ### MESSAGE: The design requires 2 times faster clock with respect to the base rate = 0.00012207. ### Working on hdlcoder_audiofiltering/Audio filter/Filter_left as hdlsrc/hdlcoder_audiofiltering/Filter_left.vhd. ### Working on hdlcoder_audiofiltering/Audio filter as hdlsrc/hdlcoder_audiofiltering/Audio_filter.vhd. ### Generating package file hdlsrc/hdlcoder_audiofiltering/Audio_filter_pkg.vhd. ### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2020ad_1302590_239645/publish_examples0/tpce460566/hdlsrc/hdlcoder_audiofiltering/html/hdlcoder_audiofiltering_codegen_rpt.html');">hdlcoder_audiofiltering_codegen_rpt.html</a> ### Creating HDL Code Generation Check Report file:///tmp/BR2020ad_1302590_239645/publish_examples0/tpce460566/hdlsrc/hdlcoder_audiofiltering/Audio_filter_report.html ### HDL check for 'hdlcoder_audiofiltering' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.