exponenta event banner

Определение и программное изменение и отображение параметров блока HDL

Чтобы узнать, как можно определить параметры блоков в проекте, и программно обновить некоторые параметры, чтобы модель была совместима с формированием кода HDL. Каждое руководство имеет уровень серьезности, который указывает уровень соответствия требованиям. Дополнительные сведения см. в разделе Рекомендации по моделированию HDL Уровни серьезности.

Настройка размеров блоков констант и коэффициентов усиления для идентификации параметров

Идентификатор руководства

1.1.11

Серьезность

Рекомендуется

Описание

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

Отображение параметров, влияющих на создание кода HDL

Идентификатор руководства

1.1.12

Серьезность

Рекомендуется

Описание

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

Например, откройте модель hdlcoder_block_annotation_HDL_params.slx.

open_system('hdlcoder_block_annotation_HDL_params')
set_param('hdlcoder_block_annotation_HDL_params','SimulationCommand','Update')

Подсистема DUT выполняет простую операцию умножения-сложения.

open_system('hdlcoder_block_annotation_HDL_params/DUT')

В модели сохраняются параметры блока HDL. Для просмотра параметров используйте hdlsaveparams функция.

hdlsaveparams('hdlcoder_block_annotation_HDL_params/DUT')
%% Set Model 'hdlcoder_block_annotation_HDL_params' HDL parameters
hdlset_param('hdlcoder_block_annotation_HDL_params', 'GenerateCoSimModel', 'ModelSim');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'GenerateValidationModel', 'on');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'HierarchicalDistPipelining', 'on');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'MaskParameterAsGeneric', 'on');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'MinimizeClockEnables', 'on');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'MinimizeIntermediateSignals', 'on');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'OptimizationReport', 'on');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'ResetType', 'Synchronous');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'ResourceReport', 'on');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'TargetLanguage', 'Verilog');
hdlset_param('hdlcoder_block_annotation_HDL_params', 'Traceability', 'on');

% Set SubSystem HDL parameters
hdlset_param('hdlcoder_block_annotation_HDL_params/DUT', 'DistributedPipelining', 'on');
hdlset_param('hdlcoder_block_annotation_HDL_params/DUT', 'InputPipeline', 1);
hdlset_param('hdlcoder_block_annotation_HDL_params/DUT', 'OutputPipeline', 3);

% Set Sum HDL parameters
hdlset_param('hdlcoder_block_annotation_HDL_params/DUT/Add', 'InputPipeline', 1);
hdlset_param('hdlcoder_block_annotation_HDL_params/DUT/Add', 'OutputPipeline', 1);

% Set Product HDL parameters
hdlset_param('hdlcoder_block_annotation_HDL_params/DUT/Product', 'InputPipeline', 2);
hdlset_param('hdlcoder_block_annotation_HDL_params/DUT/Product', 'OutputPipeline', 1);

Чтобы аннотировать модель с параметрами блока HDL, сохраненными в модели, используйте showHdlBlockParams сценарий, прилагаемый к примеру.

showHdlBlockParams('hdlcoder_block_annotation_HDL_params/DUT','on')
Add block annotation for hdlcoder_block_annotation_HDL_params/DUT. 
 ----HDL----\nDistributedPipelining = on\nInputPipeline = 1\nOutputPipeline = 3 


Add block annotation for hdlcoder_block_annotation_HDL_params/DUT/Add. 
 ----HDL----\nInputPipeline = 1\nOutputPipeline = 1 


Add block annotation for hdlcoder_block_annotation_HDL_params/DUT/Product. 
 ----HDL----\nInputPipeline = 2\nOutputPipeline = 1 


open_system('hdlcoder_block_annotation_HDL_params')

open_system('hdlcoder_block_annotation_HDL_params/DUT')

Чтобы удалить аннотацию параметров блока HDL из модели, выполните команду showHdlBlockParams установить в значение off.

showHdlBlockParams('hdlcoder_block_annotation_HDL_params/DUT','off')
HDL block annotations for hdlcoder_block_annotation_HDL_params/DUT are removed
HDL block annotations for hdlcoder_block_annotation_HDL_params/DUT/In1 are removed
HDL block annotations for hdlcoder_block_annotation_HDL_params/DUT/In2 are removed
HDL block annotations for hdlcoder_block_annotation_HDL_params/DUT/In3 are removed
HDL block annotations for hdlcoder_block_annotation_HDL_params/DUT/Add are removed
HDL block annotations for hdlcoder_block_annotation_HDL_params/DUT/Product are removed
HDL block annotations for hdlcoder_block_annotation_HDL_params/DUT/Out1 are removed
open_system('hdlcoder_block_annotation_HDL_params')

open_system('hdlcoder_block_annotation_HDL_params/DUT')

Изменение параметров блока с помощью find_system и set_param

Идентификатор руководства

1.1.13

Серьезность

Информативный

Описание

Для изменения параметров определенных блоков можно использовать функцию find_system с функцией set_param. Например, этот сценарий, который обнаруживает все блоки Constant с временем Sample, равным inf и изменяет его на -1:

modelname = ‘sfir_fixed’;
open_system (modelname)

% Detect all Constant blocks in the model
blockConstant = find_system(bdroot, 'blocktype', 'Constant')
 
% Detect the Constant blocks with sample time [inf], and change to [-1]
for  n  =  1:numel(blockConstant)
        sTime = get_param(blockConstant{n},'SampleTime') 
        if strcmp(lower(sTime), 'inf')
            set_param(blockConstant{n}, 'SampleTime', '-1')
    end
end

См. также

Функции

Связанные темы