Совместное использование ресурсов для оптимизации области

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

Введение

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

По умолчанию кодер реализует оборудование, которое является отображением 1 к 1 блоков Simulink для реализации аппаратных модулей. Оптимизация совместного использования ресурсов позволяет пользователям совместно использовать оборудование ресурсы путем включения N-to-1 отображение функционально эквивалентных блоков Simulink 'N в одно оборудование модуль. Пользователь задает 'N', используя параметр реализации 'SharingFactor'.

Поскольку мультиплексированная по времени архитектура имеет большую задержку для завершения операции, HDL- Coder™ автоматически управляет расхождением во времени в зависимости от того, какие ресурсы разделяются. Предположим, что общие ресурсы работают с базовой частотой дискретизации, затем совместное использование ресурсов реализуется как локальная многоскоростная архитектура, которая описывается в этом примере. Если общие ресурсы работают с более медленной частотой дискретизации, чем базовая частота дискретизации, то HDL- Coder™ вызывает конвейеризацию тактовой частоты, чтобы синтезировать реализацию, которая использует бюджет задержки, заданный в дифференциале скорости. В этом случае совместно используемая архитектура ресурсов является реализацией с одной скоростью и делает несколько временных шагов, чтобы выполнить все общие операции. Архитектура совместного использования ресурсов с одной скоростью описывает детали этой реализации.

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

bdclose all;
load_system('sfir_fixed');
open_system('sfir_fixed/symmetric_fir');
hdlset_param('sfir_fixed', 'ResourceReport', 'on');
makehdl('sfir_fixed/symmetric_fir');
### Generating HDL for 'sfir_fixed/symmetric_fir'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('sfir_fixed', { 'HDL Code Generation' } )">sfir_fixed</a> for HDL code generation parameters.
### Running HDL checks on the model 'sfir_fixed'.
### Begin compilation of the model 'sfir_fixed'...
### Applying HDL optimizations on the model 'sfir_fixed'...
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'sfir_fixed'.
### Working on sfir_fixed/symmetric_fir as hdlsrc/sfir_fixed/symmetric_fir.vhd.
### Code Generation for 'sfir_fixed' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/sfir_fixed/html/sfir_fixed_codegen_rpt.html');">sfir_fixed_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/sfir_fixed/symmetric_fir_report.html
### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

Совместное использование для реализации N-to-1 Отображение

Чтобы уменьшить ресурсы области, можно вызвать оптимизацию совместного использования, задав параметру 'SharingFactor' в подсистеме положительное целое значение. Этот параметр задает 'N' в N-to-1 аппаратном отображении. В этом примере существует 4 блока продукта, поэтому генерация HDL с набором 'SharingFactor', равным 4, генерирует HDL с 1 умножителем.

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

hdlset_param('sfir_fixed/symmetric_fir', 'SharingFactor', 4);
hdlset_param('sfir_fixed', 'GenerateValidationModel', 'on');
makehdl('sfir_fixed/symmetric_fir');
open_system('gm_sfir_fixed/symmetric_fir');
set_param('gm_sfir_fixed', 'SimulationCommand', 'update');
### Generating HDL for 'sfir_fixed/symmetric_fir'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('sfir_fixed', { 'HDL Code Generation' } )">sfir_fixed</a> for HDL code generation parameters.
### Running HDL checks on the model 'sfir_fixed'.
### Begin compilation of the model 'sfir_fixed'...
### Applying HDL optimizations on the model 'sfir_fixed'...
### 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.
### Generating new validation model: <a href="matlab:open_system('gm_sfir_fixed_vnl')">gm_sfir_fixed_vnl</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'sfir_fixed'.
### MESSAGE: The design requires 4 times faster clock with respect to the base rate = 1.
### Working on symmetric_fir_tc as hdlsrc/sfir_fixed/symmetric_fir_tc.vhd.
### Working on sfir_fixed/symmetric_fir as hdlsrc/sfir_fixed/symmetric_fir.vhd.
### Generating package file hdlsrc/sfir_fixed/symmetric_fir_pkg.vhd.
### Code Generation for 'sfir_fixed' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/sfir_fixed/html/sfir_fixed_codegen_rpt.html');">sfir_fixed_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/sfir_fixed/symmetric_fir_report.html
### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 1 messages.
### HDL code generation complete.

Оптимизация совместного использования реализована с помощью мультиплексирования с разделением по времени. Simulink требует, чтобы выходы совместно используемого ресурса были дискретизированы с предопределенной частотой дискретизации, поэтому HDL Coder разгоняет общий ресурс с более высокой скоростью, чем скорость передачи данных. В приведенном выше примере общая архитектура, которая включает в себя общий ресурс, мультиплексор-сериализатор на входах и демультиплексор-десериализатор на выходах, работает с 4-кратной скоростью входных данных, потому что 'Sharingfactor' = 4.

Балансировка задержки и функциональная эквивалентность

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

sim('gm_sfir_fixed_vnl');
open_system('gm_sfir_fixed_vnl/Compare/Assert_y_out/compare: y_out')
open_system('gm_sfir_fixed_vnl/Compare/Assert_delayed_xout/compare: delayed_xout')

Управляйте мультипликативной избыточной дискретизацией через SharingFactor

Чистая избыточная дискретизация для всего проекта эквивалентна LCM всех значений 'SharingFactor', установленных на модели. Рассмотрим пример, hdlcoder_uniform_oversampling.slx. Он имеет две подсистемы: подсистема 'Share3' имеет 3 блока усиления, которые можно использовать совместно, и 'Share4' имеет 4 блока усиления, которые можно использовать совместно.

saved_warning_state = warning('off', 'hdlcoder:makehdl:DeprecateMaxOverSampling');
warning('off', 'hdlcoder:makehdl:DeprecateMaxComputationLatency');
bdclose('all');
load_system('hdlcoder_uniform_oversampling');
open_system('hdlcoder_uniform_oversampling/Subsystem');
set_param('hdlcoder_uniform_oversampling', 'SimulationCommand', 'update');
hdlsaveparams('hdlcoder_uniform_oversampling/Subsystem');
%% Set Model 'hdlcoder_uniform_oversampling' HDL parameters
hdlset_param('hdlcoder_uniform_oversampling', 'GenerateValidationModel', 'on');
hdlset_param('hdlcoder_uniform_oversampling', 'HDLSubsystem', 'hdlcoder_uniform_oversampling');

% Set SubSystem HDL parameters
hdlset_param('hdlcoder_uniform_oversampling/Subsystem/Share3', 'SharingFactor', 3);

% Set SubSystem HDL parameters
hdlset_param('hdlcoder_uniform_oversampling/Subsystem/Share4', 'SharingFactor', 4);

Заметьте, что 'Share3' устанавливает свой 'SharingFactor' равным 3, а 'Share4' устанавливает свой 'SharingFactor' равным 4. HDL Coder™ применяет локальное совместное использование ресурсов к каждой подсистеме, и в результате для реализации HDL требуется LCM (3, 4) = 12x избыточная дискретизация. Об этом сообщается в сообщении во время генерации HDL-кода.

makehdl('hdlcoder_uniform_oversampling/Subsystem');
### Generating HDL for 'hdlcoder_uniform_oversampling/Subsystem'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_uniform_oversampling', { 'HDL Code Generation' } )">hdlcoder_uniform_oversampling</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoder_uniform_oversampling'.
### Begin compilation of the model 'hdlcoder_uniform_oversampling'...
### Applying HDL optimizations on the model 'hdlcoder_uniform_oversampling'...
### 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.
### Generating new validation model: <a href="matlab:open_system('gm_hdlcoder_uniform_oversampling_vnl')">gm_hdlcoder_uniform_oversampling_vnl</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_uniform_oversampling'.
### MESSAGE: The design requires 12 times faster clock with respect to the base rate = 0.1.
### Working on hdlcoder_uniform_oversampling/Subsystem/Share3 as hdlsrc/hdlcoder_uniform_oversampling/Share3.vhd.
### Working on hdlcoder_uniform_oversampling/Subsystem/Share4 as hdlsrc/hdlcoder_uniform_oversampling/Share4.vhd.
### Working on Subsystem_tc as hdlsrc/hdlcoder_uniform_oversampling/Subsystem_tc.vhd.
### Working on hdlcoder_uniform_oversampling/Subsystem as hdlsrc/hdlcoder_uniform_oversampling/Subsystem.vhd.
### Generating package file hdlsrc/hdlcoder_uniform_oversampling/Subsystem_pkg.vhd.
### Code Generation for 'hdlcoder_uniform_oversampling' completed.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/hdlcoder_uniform_oversampling/Subsystem_report.html
### HDL check for 'hdlcoder_uniform_oversampling' complete with 0 errors, 0 warnings, and 1 messages.
### HDL code generation complete.

Один из способов обойти этот мультипликативный эффект избыточной дискретизации - установить «SharingFactor» всех подсистем в доступный бюджет передискретизации. В приведенном выше примере, если бюджет передискретизации составляет только 4x, задайте 'SharingFactor' = 4 для обоих 'Share3' и 'Share4'. В этом случае HDL Coder может делить меньше ресурсов, чем SharingFactor, и оставаться в простое для остальных циклов.

hdlset_param('hdlcoder_uniform_oversampling/Subsystem/Share3', 'SharingFactor', 4);
makehdl('hdlcoder_uniform_oversampling/Subsystem');
### Generating HDL for 'hdlcoder_uniform_oversampling/Subsystem'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_uniform_oversampling', { 'HDL Code Generation' } )">hdlcoder_uniform_oversampling</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoder_uniform_oversampling'.
### Begin compilation of the model 'hdlcoder_uniform_oversampling'...
### Applying HDL optimizations on the model 'hdlcoder_uniform_oversampling'...
### 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.
### Generating new validation model: <a href="matlab:open_system('gm_hdlcoder_uniform_oversampling_vnl')">gm_hdlcoder_uniform_oversampling_vnl</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_uniform_oversampling'.
### MESSAGE: The design requires 4 times faster clock with respect to the base rate = 0.1.
### Working on hdlcoder_uniform_oversampling/Subsystem/Share3 as hdlsrc/hdlcoder_uniform_oversampling/Share3.vhd.
### Working on hdlcoder_uniform_oversampling/Subsystem/Share4 as hdlsrc/hdlcoder_uniform_oversampling/Share4.vhd.
### Working on Subsystem_tc as hdlsrc/hdlcoder_uniform_oversampling/Subsystem_tc.vhd.
### Working on hdlcoder_uniform_oversampling/Subsystem as hdlsrc/hdlcoder_uniform_oversampling/Subsystem.vhd.
### Generating package file hdlsrc/hdlcoder_uniform_oversampling/Subsystem_pkg.vhd.
### Code Generation for 'hdlcoder_uniform_oversampling' completed.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/hdlcoder_uniform_oversampling/Subsystem_report.html
### HDL check for 'hdlcoder_uniform_oversampling' complete with 0 errors, 0 warnings, and 1 messages.
### HDL code generation complete.

Заметьте, что коэффициент избыточной дискретизации теперь является LCM (4,4) = 4, и что это значение, сообщаемое во время генерации кода. В целом, рекомендуется задать значения 'SharingFactor' для доступного бюджета передискретизации. Если ваш проект содержит меньше общедоступных ресурсов, чем заданное значение 'SharingFactor', HDL Coder делит доступные ресурсы и разгоняет их на значение 'SharingFactor'. Однако, если вы хотите применить и совместное использование ресурсов, и другие оптимизации, которые используют оверклокинг, такие как потоковая передача или применение совместного использования ресурсов в нескольких вложенных подсистемах, это общее руководство может привести к более высокому коэффициенту избыточной дискретизации.

Поддержка блоков, атомарные подсистемы и расширения

HDL Coder поддерживает совместное использование ресурсов 4 типов блока: Продукт, Gain, Атомарная подсистема и Функция MATLAB. Для блоков MATLAB Function используйте MATLAB Datapath архитектура с фиксированными фиксированными точками. Эта архитектура является настройкой по умолчанию для типов с плавающей точкой. Вы можете задать HDL Architecture в диалоговом окне HDL Block Properties блока MATLAB Function.

Обмен функционально эквивалентными блоками Product и Gain означает совместное использование множителей в реализации HDL. Два блока Продукта являются функционально эквивалентными, если: a) типы данных их входов и выходов идентичны, b) их настройки параметры блоков идентичны, и c) их свойства HDL-блоков идентичны. Для блока Gain функциональная эквивалентность дополнительно требует, чтобы постоянное значение и типы данных также были идентичными. Однако, если типы данных константы усиления идентичны для двух блоков Gain с различными постоянными значениями усиления, HDL Coder может совместно использовать их. Точно так же, если блок Gain может быть реализован как блок Product с постоянным входом, и он имеет совпадающие типы данных, что и другой блок Product в проекте, кодер может совместно использовать их.

Третий тип блока, Atomic Subsystem, полезен для совместного использования функционально эквивалентных островков логики, инкапсулированных внутри атомарных подсистем. Две атомарные подсистемы функционально эквивалентны и могут совместно использоваться, если:

  • Их контрольные суммы Simulink идентичны

  • Их свойства блоков идентичны.

Совместное использование атомарных подсистем

% The following example demonstrates an audio filtering model that applies
% the same filter on the left and right channels. By default, HDL Coder
% generates two filter modules in hardware.
bdclose all;
load_system('hdlcoder_audiofiltering');
open_system('hdlcoder_audiofiltering/Audio filter');

% The filters on the two audio channels can be shared by specifying a
% 'SharingFactor' value of 2 on the encompassing subsystem. This generates
% an architecture that uses only one filter, as shown below.
hdlset_param('hdlcoder_audiofiltering/Audio filter', 'SharingFactor', 2);
makehdl('hdlcoder_audiofiltering/Audio filter');
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 Audio filter_tc as hdlsrc/hdlcoder_audiofiltering/Audio_filter_tc.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.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/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.

Возможности между иерархиями

Поскольку 'SharingFactor' является параметром уровня подсистемы, различные подсистемы на разных уровнях иерархии могут задавать различные значения совместного использования. В примере аудиофильтра фильтры на каждом канале используют 3 блока усиления соответственно.

open_system('hdlcoder_audiofiltering/Audio filter/Filter_left');

Совместное использование на более высоком уровне иерархии

Мы можем задать значение 'SharingFactor' 2 на верхнем уровне DUT, чтобы использовать фильтры на двух каналах. Кроме того, мы можем задать значение 'SharingFactor' 3 на каждой из подсистем фильтра, чтобы разрешить совместное использование 3 блоков усиления в каждом канале. Когда HDL-код теперь сгенерирован, сначала заметьте, что левый и правый фильтры были разделены, и у нас есть только один фильтр на верхнем уровне иерархии.

hdlset_param('hdlcoder_audiofiltering/Audio filter', 'SharingFactor', 2);
hdlset_param('hdlcoder_audiofiltering/Audio filter/Filter_left', 'SharingFactor', 3);
hdlset_param('hdlcoder_audiofiltering/Audio filter/Filter_right', 'SharingFactor', 3);
makehdl('hdlcoder_audiofiltering/Audio filter');
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: 2 cycles.
### Output port 2: 2 cycles.
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_audiofiltering'.
### MESSAGE: The design requires 6 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 Audio filter_tc as hdlsrc/hdlcoder_audiofiltering/Audio_filter_tc.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.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/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.

Совместное использование на более низком уровне иерархии

Кроме того, 3 блока усиления в нижней части иерархии (внутри подсистемы фильтра) также являются общими. Конечным результатом является то, что мы сократили использование ресурсов с 6 умножителей до всего одного.

open_system('gm_hdlcoder_audiofiltering/Audio filter/Filter_left');
set_param('gm_hdlcoder_audiofiltering', 'SimulationCommand', 'update');

Объединение оптимизации и совместного использования

Совместное использование ресурсов также может быть объединено с другими оптимизациями, такими как потоковая оптимизация.

Рассмотрим модель ниже: она содержит 24-элементный вектор datapath и 3 векторов блока усиления, которые будут сопоставлены с 72 умножителями, по умолчанию. Потоковая передача может скаляризировать векторный канал данных, в то время как совместное использование может совместно использовать 3 блока Gain.

bdclose all;
load_system('hdl_areaopt1');
open_system('hdl_areaopt1/Controller');
set_param('hdl_areaopt1', 'SimulationCommand', 'update');

Потоковая передача и совместное использование сокращают проект, чтобы использовать один мультипликатор

Чтобы вызвать обе оптимизации, мы задаем 'StreamingFactor' равным 24 и 'SharingFactor' равным 3. Первый уменьшает количество умножителей с 72 до 3, а второй уменьшает 3 скалярных умножителя до 1.

hdlset_param('hdl_areaopt1/Controller', 'StreamingFactor', 24);
hdlset_param('hdl_areaopt1/Controller', 'SharingFactor', 3);
makehdl('hdl_areaopt1/Controller');
open_system('gm_hdl_areaopt1/Controller');
set_param('gm_hdl_areaopt1', 'SimulationCommand', 'update');
### Generating HDL for 'hdl_areaopt1/Controller'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdl_areaopt1', { 'HDL Code Generation' } )">hdl_areaopt1</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdl_areaopt1'.
### Begin compilation of the model 'hdl_areaopt1'...
### Applying HDL optimizations on the model 'hdl_areaopt1'...
### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
### Output port 1: 2 cycles.
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdl_areaopt1'.
### MESSAGE: The design requires 72 times faster clock with respect to the base rate = 2.
### Working on Controller_tc as hdlsrc/hdl_areaopt1/Controller_tc.vhd.
### Working on hdl_areaopt1/Controller as hdlsrc/hdl_areaopt1/Controller.vhd.
### Generating package file hdlsrc/hdl_areaopt1/Controller_pkg.vhd.
### Code Generation for 'hdl_areaopt1' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/hdl_areaopt1/html/hdl_areaopt1_codegen_rpt.html');">hdl_areaopt1_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/hdl_areaopt1/Controller_report.html
### HDL check for 'hdl_areaopt1' complete with 0 errors, 0 warnings, and 1 messages.
### HDL code generation complete.