exponenta event banner

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

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

Обзор режимов учета времени

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

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

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

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

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

В режиме одиночного синхросигнала код 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.
### 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 (HDL Code Generation) > Глобальные настройки (Global Settings) диалогового окна Параметры конфигурации (Configuration Parameters).

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.

Сводная информация о часах в режиме Multiclock

Содержимое сводки синхросигналов различно в режиме нескольких синхросигналов. Теперь отчет содержит таблицу часов. Эта таблица содержит одну запись для каждого первичного синхросигнала DUT. В нем описывается относительное отношение синхросигналов между каждым синхросигналом и самым быстрым синхросигналом в модели. Как и в случае одиночного режима синхронизации, эта информация представлена как в блоке комментариев файла HDL DUT, так и в отчете HTML.

Оптимизация мультиклокового режима и кодера HDL

Несколько синхронных часов могут быть полезны даже для конструкции с одной скоростью Simulink. Различные оптимизации могут требовать тактовой частоты быстрее, чем указано в исходной модели. В следующем примере показана модель фильтрации звука, которая применяет один и тот же фильтр на левом и правом каналах. По умолчанию кодер HDL генерирует два модуля фильтров в аппаратном обеспечении. При такой конфигурации режим с несколькими часами по-прежнему генерирует только один синхросигнал, как и режим с одним синхросигналом.

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 одиночный фильтр запускается с удвоенной тактовой частотой, чем исходная модель 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.