В этом примере показов, как оптимизировать сгенерированный HDL-код для Блоков MATLAB function с помощью оптимизации распределённой конвейеризации. Распределённая конвейеризация является HDL- Coder™ оптимизацией, которая улучшает сгенерированный HDL-код из блоков MATLAB Function, моделей Simulink ® или графиков Stateflow ®. При помощи распределённой конвейеризации ваш проект достигает более высоких тактовых частот на устройстве FPGA.
Этот пример показывает, как распределить регистры трубопровода в простой модели, которая связывает пять умножений.
open_system('hdlcoder_distpipe_multiplier_chain') set_param('hdlcoder_distpipe_multiplier_chain','SimulationCommand','Update')
The HDL_DUT
Подсистема является DUT, для которого необходимо сгенерировать HDL-код. Подсистема управляет блоком MATLAB Function mult_chain
.
open_system('hdlcoder_distpipe_multiplier_chain/HDL_DUT')
Чтобы увидеть цепь умножений, откройте блок MATLAB Function.
open_system('hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain')
1. Задайте генерацию двух этапов трубопровода для блока MATLAB Function.
ml_subsys = 'hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain'; hdlset_param(ml_subsys, 'OutputPipeline', 2)
2. Задайте MATLAB Datapath
архитектура. Эта архитектура обрабатывает блок MATLAB Function как обычную Подсистему. Затем можно применить различные оптимизации через блоки MATLAB Function с другими блоками в модели Simulink ®.
hdlset_param(ml_subsys, 'architecture', 'MATLAB Datapath');
3. Включите оптимизацию распределённой конвейеризации на блоке. Чтобы увидеть результаты оптимизации, включите генерацию отчета оптимизации. Чтобы применить оптимизацию между иерархиями в модели, включите иерархическую распределенную конвейеризацию в модели и распределенную конвейеризацию во всех подсистемах.
hdlset_param('hdlcoder_distpipe_multiplier_chain', ... 'HierarchicalDistPipe', 'on', 'OptimizationReport', 'on') hdlset_param('hdlcoder_distpipe_multiplier_chain/HDL_DUT', 'DistributedPipelining', 'on'); hdlset_param(ml_subsys, 'DistributedPipelining', 'on');
4. Сгенерируйте HDL-код для HDL_DUT
подсистема.
makehdl('hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain')
По умолчанию HDL Coder генерирует код VHDL в hdlsrc
папка.
В отчете Распределенный трубопровод (Distributed Pipelining) видно, что генератор кода переместил регистры конвейера. Чтобы увидеть эффекты оптимизации, откройте сгенерированную модель gm_hdlcoder_distpipe_multiplier_chain
и перейдите к HDL_DUT
Подсистема.
The MATLAB Datapath
архитектура создает Подсистему вместо блока MATLAB Function. Затем оптимизация может распределить регистры конвейера и модуля задержку, которую вы добавили внутри Подсистемы, чтобы оптимизировать цепь множителя и улучшить синхронизацию. Откройте mult_chain
Подсистема.
Проверьте настройки блока MATLAB Function