Использование нескольких часов в HDL Coder

В этом примере показано, как создать экземпляр нескольких синхронных входных портов верхнего уровня в HDL- Coder™.

Обзор режимов синхронизации

HDL Coder имеет два режима синхронизации. Один режим генерирует один вход синхроимпульса для тестируемого устройства (DUT). Другой режим генерирует синхронный вход первичного синхроимпульса для каждой скорости Simulink ® в DUT. По умолчанию HDL Coder создает HDL- проекта, который использует один синхроимпорт для DUT. В режиме с одним тактом, если в модели Simulink существует несколько скоростей, создается контроллер синхронизации, чтобы управлять синхронизацией к фрагментам модели, которые запускаются с более медленной скоростью. Контроллер синхронизации генерирует набор синхроимпульсов с необходимой информацией о скорости и фазе для управления синхронизацией для проекта. Каждый сгенерированный синхроимпульс является целым числом, которое медленнее, чем частота основного синхроимпульса. Каждая скорость выхода сигнала сопоставлена с сигналом выхода включения синхроимпульса, который указывает правильность синхронизации для выборки выхода данных.

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

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

load_system('hdlcoder_clockdemo');
open_system('hdlcoder_clockdemo/DUT');
set_param('hdlcoder_clockdemo', 'SimulationCommand', 'update');

Интерфейс синхронизации DUT в одноточечном режиме

В режиме single clock HDL код для DUT имеет набор из трех сигналов, которые не появляются в добавленной к нему схеме Simulink. В совокупности это пакет синхроимпульсов, который содержит сигналы для синхроимпульса, включения главного синхроимпульса и сброса. Эти сигналы появляются в объявлении Сущность и используются во всем сгенерированном коде.

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.
### Running HDL checks on the model 'hdlcoder_clockdemo'.
### Begin compilation of the model 'hdlcoder_clockdemo'...
### Applying HDL optimizations on the model 'hdlcoder_clockdemo'...
### Begin model generation.
### Model generation complete.
### 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.
### Code Generation for 'hdlcoder_clockdemo' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/hdlsrc/hdlcoder_clockdemo/html/hdlcoder_clockdemo_codegen_rpt.html');">hdlcoder_clockdemo_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/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 отчета также генерируется отчет о Сводных данных синхроимпульса.

Генерация синхронного многоклассового HDL-кода

Чтобы сгенерировать несколько синхронных часов для этого проекта, ClockInputs свойство должно быть установлено в multiple. Либо измените ClockInputs свойство в командной строке с использованием makehdl или измените значение параметра Clock inputs на Multiple на вкладке Генерация HDL-кода > 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.
### Running HDL checks on the model 'hdlcoder_clockdemo'.
### Begin compilation of the model 'hdlcoder_clockdemo'...
### Applying HDL optimizations on the model 'hdlcoder_clockdemo'...
### Begin model generation.
### Model generation complete.
### 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.
### Code Generation for 'hdlcoder_clockdemo' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/hdlsrc/hdlcoder_clockdemo/html/hdlcoder_clockdemo_codegen_rpt.html');">hdlcoder_clockdemo_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/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.

Многоклассовый режим и оптимизация HDL Coder

Несколько синхронных часов могут быть полезны даже для проекта с одной частотой 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.
### Running HDL checks on the model 'hdlcoder_audiofiltering'.
### Begin compilation of the model 'hdlcoder_audiofiltering'...
### Applying HDL optimizations on the model 'hdlcoder_audiofiltering'...
### Begin model generation.
### Model generation complete.
### 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.
### Code Generation for 'hdlcoder_audiofiltering' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/hdlsrc/hdlcoder_audiofiltering/html/hdlcoder_audiofiltering_codegen_rpt.html');">hdlcoder_audiofiltering_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/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 timing, один фильтр запускается с удвоенной тактовой частотой как исходная модель Simulink, как показано ниже. Поскольку оптимизация совместного использования ресурсов создает вторую тактовую частоту, пользователь может использовать синхронный режим нескольких синхроимпульсов для обеспечения внешних синхроимпульсов для обеих частот. В этом строении режим нескольких синхроимпульсов все еще генерирует только один синхроимпульс. Вы видите сообщение:

The design requires 2 times faster clock with respect to the base rate = 0.00012207.

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.
### Running HDL checks on the model 'hdlcoder_audiofiltering'.
### Begin compilation of the model 'hdlcoder_audiofiltering'...
### Applying HDL optimizations on the model 'hdlcoder_audiofiltering'...
### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
### Output port 1: 1 cycles.
### Output port 2: 1 cycles.
### Begin model generation.
### Model generation complete.
### 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.
### Code Generation for 'hdlcoder_audiofiltering' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/hdlsrc/hdlcoder_audiofiltering/html/hdlcoder_audiofiltering_codegen_rpt.html');">hdlcoder_audiofiltering_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/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.