Можно следовать этим рекомендациям, чтобы узнать, как можно идентифицировать параметры блоков в проекте и программно обновить некоторые параметры так, чтобы модель была совместима с генерацией HDL-кода. Каждое руководство имеет уровень серьезности, который указывает на уровень податливостей. Для получения дополнительной информации см. HDL-руководства по моделированию уровней серьезности.
1.1.11
Рекомендуется
Для блоков Constant и блоков Gain, которые имеют значительно большие значения или используют значения параметров, Constant или Gain значения могут быть не видны в маске блока. Чтобы увеличить читаемость, отрегулируйте размер блока так, чтобы значение параметров могло быть отображено как показано на рисунке.
Идентификатор руководства
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')
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