В этом примере показано, как вы можете автоматически идентифицировать и заменить повторяющиеся шаблоны с помощью Clone Detector App.Следовательно, это также улучшает возможности оптимизации модели с помощью совместного использования ресурсов. Модели рефакторов Clone Detector App путем идентификации клонов в проекте и замены клонов ссылками на подсистемные блоки в библиотеке. Этот пример использует модель, которая уже была изменена для оптимального совместного использования ресурсов с помощью Приложения Clone Detector. Чтобы узнать больше об этих изменениях, смотрите «Улучшение совместного использования ресурсов с Проектом изменениями».
Обнаружение клонов - это инструмент, который может использоваться, чтобы идентифицировать шаблоны моделирования в проекте, которые аналогичны нескольким шаблонам образцов, предоставленным в качестве входов через пользовательский файл библиотеки. Как только приложение Clone Detector идентифицирует эти шаблоны, он заменяет шаблоны атомарными подсистемами. Это позволяет генерировать оптимальный код посредством повторного использования кода и приводит к лучшему использованию ресурсов посредством совместного использования ресурсов между атомарными подсистемами. Для получения дополнительной информации об обнаружении клонов см. раздел «Включение повторного использования компонентов при помощи обнаружения клонов» (Simulink Check).
Эта отредактированная модель сохранена как hdlcoderParkTransformShare.slx. Скопируйте эту версию модели во временную директорию с помощью следующих команд:
design_name = 'hdlcoderParkTransformShare'; design_new_name = 'hdlcoderParkTransformShareCopy'; hdlc_demo_dir = fullfile(matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos'); hdlc_temp_dir = [tempdir 'hdlcoderParkTransformDir']; % Create a temporary folder and copy the Simulink model. cd(tempdir); [~, ~, ~] = rmdir(hdlc_temp_dir, 's'); mkdir(hdlc_temp_dir); cd(hdlc_temp_dir); copyfile(fullfile(hdlc_demo_dir, [design_name,'.slx']), fullfile(hdlc_temp_dir, [design_new_name,'.slx']), 'f'); % Open the model. open_system(design_new_name);

Установите SharingFactor 6 на интересующей подсистеме и сгенерируйте HDL вместе с соответствующими отчетами из модели.
subsystem = [design_new_name '/DUT']; hdlset_param(subsystem, 'SharingFactor', 6); makehdl(subsystem);
### Generating HDL for 'hdlcoderParkTransformShareCopy/DUT'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoderParkTransformShareCopy', { 'HDL Code Generation' } )">hdlcoderParkTransformShareCopy</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoderParkTransformShareCopy'.
### Begin compilation of the model 'hdlcoderParkTransformShareCopy'...
### Applying HDL optimizations on the model 'hdlcoderParkTransformShareCopy'...
### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
### Output port 1: 39 cycles.
### Output port 2: 39 cycles.
### Begin model generation.
### Model generation complete.
### Generating new validation model: <a href="matlab:open_system('gm_hdlcoderParkTransformShareCopy_vnl')">gm_hdlcoderParkTransformShareCopy_vnl</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoderParkTransformShareCopy'.
### MESSAGE: The design requires 6 times faster clock with respect to the base rate = 6.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_sincos_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_sincos_single.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_sub_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_sub_single.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_mul_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_mul_single.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_add_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_add_single.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_mul_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_mul_single_block.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_uminus_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_uminus_single.vhd.
### Working on DUT_tc as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/DUT_tc.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/DUT.vhd.
### Generating package file hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/DUT_pkg.vhd.
### Code Generation for 'hdlcoderParkTransformShareCopy' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples4/hdlcoderParkTransformDir/hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/html/hdlcoderParkTransformShareCopy_codegen_rpt.html');">hdlcoderParkTransformShareCopy_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/hdlcoderParkTransformDir/hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/DUT_report.html
### HDL check for 'hdlcoderParkTransformShareCopy' complete with 0 errors, 1 warnings, and 1 messages.
### HDL code generation complete.
Доклад о ресурсах высокого уровня показывает, что, по оценкам, использование ресурсов для проекта:
Resource Usage
_________________________ ________
Multipliers 13
Adders/Subtractors 178
Registers 1012
Total 1-Bit Registers 16888
RAMs 0
Multiplexers 610
I/O Bits 196
Static Shift operators 8
Dynamic Shift operators 8Можно также запустить рабочий процесс синтеза на модели. Результаты синтеза для этой модели:
Resource Usage
_________________________ ________
Slice LUTs 8792
Slice Registers 8419
DSPs 13
Block Ram Tile 0
URAM 0Для получения дополнительной информации о рабочем процессе синтеза смотрите Генерация HDL-кода и FPGA Synthesis из Simulink Model.
Перед использованием приложения Clone Detector создайте библиотеку клиентов, которая содержит каждый повторяющийся шаблон в модели как атомарную подсистему. В данном примере вы получаете пользовательскую библиотеку hdlcoderParkTransformShareLib.slx.
% Copy the library into the temporary directory lib_name = 'hdlcoderParkTransformShareLib'; lib_new_name = 'hdlcoderParkTransformShareLibCopy'; copyfile(fullfile(hdlc_demo_dir, [lib_name,'.slx']), fullfile(hdlc_temp_dir, [lib_new_name,'.slx']), 'f'); % Open the custom library open_system('hdlcoderParkTransformShareLibCopy');

Замените шаблоны модели библиотекой, содержащей Атомарную Подсистему. Чтобы сконфигурировать приложение Clone Detector и заменить клоны, смотрите раздел «Включить повторное использование компонентов при помощи обнаружения клонов (Simulink Check)». В частности, следуйте инструкциям в разделе Set the Parameters for Clone Detection, чтобы связать библиотеку для обнаружения клонов и установить значение Максимального количества различных параметров равным 0.
Затем следуйте разделу Replace Clones, чтобы применить эту библиотеку к модели для точной замены клонов.
Заметьте, что все шаблоны в исходной модели были заменены атомарными подсистемами из библиотеки, как показано ниже:
Сохраните изменения, внесенные в эту систему. В редакторе Simulink, на вкладке Simulation, нажмите Save.
Поскольку эта модель содержит блоки Sin, Cos и Product внутри атомарных подсистем, они теперь могут использоваться совместно и приводят к улучшению использования ресурсов.
subsystem = [design_new_name '/DUT']; hdlset_param(subsystem, 'SharingFactor', 3); % Generate HDL code and the corresponding reports for the optimized model makehdl(subsystem);
### Generating HDL for 'hdlcoderParkTransformShareCopy/DUT'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoderParkTransformShareCopy', { 'HDL Code Generation' } )">hdlcoderParkTransformShareCopy</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoderParkTransformShareCopy'.
### Begin compilation of the model 'hdlcoderParkTransformShareCopy'...
### Applying HDL optimizations on the model 'hdlcoderParkTransformShareCopy'...
### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
### Output port 1: 33 cycles.
### Output port 2: 33 cycles.
### Begin model generation.
### Model generation complete.
### Generating new validation model: <a href="matlab:open_system('gm_hdlcoderParkTransformShareCopy_vnl')">gm_hdlcoderParkTransformShareCopy_vnl</a>.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoderParkTransformShareCopy'.
### MESSAGE: The design requires 3 times faster clock with respect to the base rate = 6.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_sincos_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_sincos_single.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_sub_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_sub_single.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_mul_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_mul_single.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_add_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_add_single.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT/nfp_uminus_single as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/nfp_uminus_single.vhd.
### Working on DUT_tc as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/DUT_tc.vhd.
### Working on hdlcoderParkTransformShareCopy/DUT as hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/DUT.vhd.
### Generating package file hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/DUT_pkg.vhd.
### Code Generation for 'hdlcoderParkTransformShareCopy' completed.
### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples4/hdlcoderParkTransformDir/hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/html/hdlcoderParkTransformShareCopy_codegen_rpt.html');">hdlcoderParkTransformShareCopy_codegen_rpt.html</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/hdlcoderParkTransformDir/hdl_prj/hdlsrc/hdlcoderParkTransformShareCopy/DUT_report.html
### HDL check for 'hdlcoderParkTransformShareCopy' complete with 0 errors, 1 warnings, and 1 messages.
### HDL code generation complete.
После совместного использования в Докладе о ресурсах высокого уровня показано, что использование ресурсов для проекта было оценено как:
Resource Usage
_________________________ ________
Multipliers 13
Adders/Subtractors 177
Registers 1004
Total 1-Bit Registers 16657
RAMs 0
Multiplexers 610
I/O Bits 196
Static Shift operators 8
Dynamic Shift operators 8Заметьте, что счетчики Adders/Dedtractors, Registers и Total 1-Bit Registers уменьшились после совместного использования атомарных подсистем.
Можно также запустить рабочий процесс синтеза на модели. Результаты синтеза для этой модели:
Resource Usage
_________________________ ________
Slice LUTs 8848
Slice Registers 8308
DSPs 13
Block Ram Tile 0
URAM 0Заметьте, что после совместного использования количество регистров среза уменьшилось.