Рассмотрите использование этих рекомендуемых настроек, когда вы создаете модель иерархически и генерируете HDL-код для своего проекта. Каждое руководство имеет уровень серьезности, который указывает на уровень податливостей. Для получения дополнительной информации см. HDL-руководства по моделированию уровней серьезности.
Идентификатор руководства
1.2.4
Серьезность
Обязательный
Описание
Рекомендуется избегать прямого подключения блоков Constant к выходным портам Подсистемы. Инструменты синтеза могут оптимизировать и удалить константы и создать несвязные порты.
Если вы используете типы данных с плавающей точкой с Native Floating Point mode enabled, и входные значения константы для арифметического оператора, такого как блок Add, HDL Coder™ заменяет блок Add на блок Constant при генерации кода. Эта оптимизация может привести к блоку Constant, непосредственно соединенному с портом выхода. Поэтому рекомендуется избегать таких конструкций моделирования. Смотрите также Упрощение Постоянных Операций и Уменьшение Сложности Проекта в HDL Coder.
Для примера откройте модель hdlcoder_constant_subsystem_boundary.slx. DUT содержит две подсистемы Constant_subsys1 и Constant_subsys2, выходы которой являются входами в третью Подсистему. Constant_subsys1 Содержит блоки Constant, непосредственно соединенные с выходными портами, и Constant_subsys2 Содержит блоки Constant, которые имеют отдельные типы данных в качестве входов для блока Add.
load_system('hdlcoder_constant_subsystem_boundary.slx') set_param('hdlcoder_constant_subsystem_boundary','SimulationCommand','Update') open_system('hdlcoder_constant_subsystem_boundary/DUT/Constant_subsys1')

open_system('hdlcoder_constant_subsystem_boundary/DUT/Constant_subsys2')

Как Constant_subsys2 использует отдельные типы данных, и модель имеет Native Floating Point режим включен, когда вы генерируете HDL-код для DUT, Constant_subsys2 становится кандидатом для оптимизации, которая упрощает постоянные операции. Когда вы открываете сгенерированную модель, вы видите блок Constant, непосредственно соединенный с портом выхода.
open_system('gm_hdlcoder_constant_subsystem_boundary.slx') set_param('gm_hdlcoder_constant_subsystem_boundary','SimulationCommand','Update') open_system('gm_hdlcoder_constant_subsystem_boundary/DUT/Constant_subsys2')

Идентификатор руководства
1.2.5
Серьезность
Рекомендуется
Описание
Чтобы сгенерировать параметризованные HDL-коды для блоков Gain и Constant:
Подсистема, содержащая блоки Gain и Constant, должна быть маскированной подсистемой. Блоки Gain и Constant используют эти значения параметров маски. Параметры маски Подсистемы задаются в диалоговом окне «Редактор маски».
Подсистема, содержащая блоки Gain и Constant, должна быть Атомарной Подсистемой. Чтобы сделать Подсистему Атомарной Подсистемой, щелкните правой кнопкой мыши эту Подсистему и выберите Обработать как атомарный модуль.
Включите параметризированный HDL-код из маскированной настройки подсистемы в диалоговом окне Параметров конфигурации или установите MaskParameterAsGeneric на on в командной строке с помощью makehdl или hdlset_param.
Для получения примера откройте модель hdlcoder_masked_subsystems. The Top Подсистема содержит две атомарные маскированные подсистемы MASKSUB и MASKSUB1 которые аналогичны, но для значений маскированных параметров.
load_system('hdlcoder_masked_subsystems') set_param('hdlcoder_masked_subsystems', 'SimulationCommand', 'Update') open_system('hdlcoder_masked_subsystems/TOP')

Модель имеет MaskParameterAsGeneric настройка включена. Этот параметр соответствует параметризованному HDL-коду из маскированной настройки подсистемы, который включен в командной строке.
hdlsaveparams('hdlcoder_masked_subsystems')
%% Set Model 'hdlcoder_masked_subsystems' HDL parameters
hdlset_param('hdlcoder_masked_subsystems', 'HDLSubsystem', 'hdlcoder_masked_subsystems/TOP');
hdlset_param('hdlcoder_masked_subsystems', 'MaskParameterAsGeneric', 'on');
Чтобы сгенерировать код VHDL для Top Подсистема, выполните эту команду:
makehdl('hdlcoder_masked_subsystems/TOP')
В сгенерированном коде вы видите, что HDL- Coder™ генерирует один HDL- файла MaskedSub с различными маскированными параметрами, сопоставленными с общими портами.
-- -------------------------------------------------------------
--
-- File Name: hdlsrc\hdlcoder_masked_subsystems\TOP.vhd
-- Created: 2018-10-08 13:30:02
--
-- Generated by MATLAB 9.6 and HDL Coder 3.13
--
--
-- -------------------------------------------------------------
--
--
ARCHITECTURE rtl OF TOP IS
-- Component Declarations
COMPONENT MASKSUB
GENERIC( m : integer;
b : integer
);
PORT( x : IN std_logic_vector(7 DOWNTO 0); -- uint8
y : OUT std_logic_vector(16 DOWNTO 0) -- ufix17
);
END COMPONENT;
-- Component Configuration Statements
FOR ALL : MASKSUB
USE ENTITY work.MASKSUB(rtl);
-- Signals
SIGNAL MASKSUB_out1 : std_logic_vector(16 DOWNTO 0); -- ufix17
SIGNAL MASKSUB1_out1 : std_logic_vector(16 DOWNTO 0); -- ufix17
BEGIN
u_MASKSUB : MASKSUB
GENERIC MAP( m => 5,
b => 2
)
PORT MAP( x => In1, -- uint8
y => MASKSUB_out1 -- ufix17
);
u_MASKSUB1 : MASKSUB
GENERIC MAP( m => 6,
b => 4
)
PORT MAP( x => In1, -- uint8
y => MASKSUB1_out1 -- ufix17
);
Out1 <= MASKSUB_out1;
Out2 <= MASKSUB1_out1;
END rtl;
1.2.6
Обязательный
Чтобы избежать ошибок при генерации испытательного стенда HDL, линии физического сигнала, которые присутствуют на том же уровне, что и подсистема DUT, должны быть размещены внутри блока Subsystem. Для примера рассмотрим этот Simulink® модель, которая имеет линии физического сигнала за пределами подсистемы DUT, HDL_DUT.

Поместите линии физического сигнала и блоки, соединенные с ним, которые подсвечиваются внутри блока Subsystem. Затем можно сгенерировать HDL-код и испытательный стенд для подсистемы DUT.
