Идентифицируйте и программно изменяйте и отображайте параметры блоков

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

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

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

1.1.11

Серьезность

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

Описание

Для блоков Constant и блоков Gain, которые имеют значительно большие значения или используют значения параметров, Constant или Gain значения могут быть не видны в маске блока. Чтобы увеличить читаемость, отрегулируйте размер блока так, чтобы значение параметров могло быть отображено как показано на рисунке.

Отобразите параметры, которые влияют на генерацию HDL-кода

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

1.1.12

Серьезность

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

Описание

Некоторые свойства блоков, такие как 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')

На модели сохранены параметры блоков. Чтобы увидеть параметры, используйте 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);

Чтобы аннотировать модель с параметрами блоков, сохраненными в модели, используйте 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')

Чтобы удалить аннотацию параметров блоков из модели, запустите 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 time 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

См. также

Функции

Похожие темы