ЛПВП Coder™ может обнаруживать атомарные подсистемы, которые идентичны или идентичны, за исключением их значений параметров маски, на любом уровне иерархии модели, и генерировать один повторно используемый ЛПВП module или entity. Повторно используемый HDL-код генерируется как один файл и создается несколько раз.
Для создания многократно используемого кода ЛПВП для атомных подсистем:
DefaultParameterBehavior Параметр конфигурации Simulink ® должен бытьInlined. Этот параметр можно задать в командной строке с помощью команды set_param или hdlsetup функция. Чтобы задать этот параметр в диалоговом окне «Параметры конфигурации», необходимо иметь Coder™ Simulink.
Примечание
Используя hdlsetup наборы InlineParams свойство для on. Включение этого параметра совпадает с настройкой DefaultParameterBehavior кому Inlined. Настройка InlineParams кому off изменения DefaultParameterBehavior значение для Tunable.
Нельзя использовать функции ведения журнала, такие как ведение журнала сигналов или использование блоков, таких как «В рабочую область» или «В файл».
Атомарные подсистемы должны быть идентичными или идентичными, за исключением значений параметров маски.
MaskParameterAsGeneric должно быть on. Дополнительные сведения см. в разделе Создание параметризованного кода HDL из маскированной подсистемы.
Параметры маски не должны быть настраиваемыми. Генератор кода не имеет общих атомных подсистем с настраиваемыми параметрами маски.
Типы данных параметров маски не могут быть double или single.
Настраиваемый параметр должен использоваться только в блоках константы или усиления.
Типы данных порта должны совпадать.
При изменении значения параметра настраиваемой маски тип данных выходного порта может измениться. Если одна из атомных подсистем имеет другой тип данных порта, код, сгенерированный для этой подсистемы, также отличается.
Для создания многократно используемого кода HDL для виртуальных подсистем:
DefaultParameterBehavior Параметр конфигурации Simulink должен быть Inlined. Этот параметр можно задать в командной строке с помощью команды set_param или hdlsetup функция. Чтобы задать этот параметр в диалоговом окне «Параметры конфигурации», необходимо установить кодер Simulink.
Примечание
Используя hdlsetup наборы InlineParams свойство для on. Включение этого параметра совпадает с настройкой DefaultParameterBehavior кому Inlined. Настройка InlineParams кому off изменения DefaultParameterBehavior значение для Tunable.
Нельзя использовать функции ведения журнала, такие как ведение журнала сигналов или использование блоков, таких как «В рабочую область» или «В файл».
Виртуальные подсистемы должны быть идентичными или идентичными, за исключением значений параметров маски.
SubsystemReuse необходимо установить значение 'Atomic and Virtual'.
Настройка SubsystemReuse кому 'Atomic and Virtual' уменьшение искусственных алгебраических ошибок и улучшение распознавания идентичных подсистем, независимо от их топологии в остальной части конструкции. Определение аналогичных подсистем может способствовать совместному использованию ресурсов.
Для установки требуемых значений в окне команд MATLAB введите:
hdlset_param('myHDLModel', 'SubsystemReuse', 'Atomic and Virtual')
Можно также задать этот параметр на панели «Создание кода HDL» верхнего уровня в диалоговом окне «Параметры конфигурации». В разделе Глобальные параметры > Стиль кодирования можно изменить значение параметра Повторное использование кода на требуемое значение.
Предыдущие команды задают SubsystemReuse вариант для вашего проекта. Для установки этой опции только для текущего сеанса генерации кода введите:
makehdl(<DUT system>, 'SubsystemReuse', 'Atomic and Virtual')
MaskParameterAsGeneric должно быть on. Дополнительные сведения см. в разделе Создание параметризованного кода HDL из маскированной подсистемы.
Параметры маски не должны быть настраиваемыми. Генератор кода не имеет общих атомных подсистем с настраиваемыми параметрами маски.
Типы данных параметров маски не могут быть double или single.
Настраиваемый параметр должен использоваться только в блоках константы или усиления.
Типы данных порта должны совпадать.
При изменении значения параметра настраиваемой маски тип данных выходного порта может измениться. Если одна из атомных подсистем имеет другой тип данных порта, код, сгенерированный для этой подсистемы, также отличается.
Если конструкция содержит идентичные атомарные подсистемы, кодер генерирует один HDL module или entity для подсистемы и создает ее экземпляр несколько раз.
hdlcoder_reusable_code_identical_subsystem модель показывает пример подсистемы DUT, содержащей три идентичные атомарные подсистемы.


Кодер HDL генерирует один файл VHDL ® ,vsum.vhd, для трех подсистем.
makehdl('hdlcoder_reusable_code_identical_subsystem/DUT')### Generating HDL for 'hdlcoder_reusable_code_identical_subsystem/DUT'.
### Starting HDL check.
### Generating new validation model: gm_hdlcoder_reusable_code_identical_subsystem_vnl.
### Validation model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_reusable_code_identical_subsystem'.
### Working on hdlcoder_reusable_code_identical_subsystem/DUT/vsum/Sum of Elements as
hdl_prj\hdlsrc\hdlcoder_reusable_code_identical_subsystem\Sum_of_Elements.vhd.
### Working on hdlcoder_reusable_code_identical_subsystem/DUT/vsum as
hdl_prj\hdlsrc\hdlcoder_reusable_code_identical_subsystem\vsum.vhd.
### Working on hdlcoder_reusable_code_identical_subsystem/DUT as
hdl_prj\hdlsrc\hdlcoder_reusable_code_identical_subsystem\DUT.vhd.
### Generating package file hdl_prj\hdlsrc\hdlcoder_reusable_code_identical_subsystem\DUT_pkg.vhd.
### Creating HDL Code Generation Check Report DUT_report.html
### HDL check for 'hdlcoder_reusable_code_identical_subsystem' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.сгенерированный код для подсистемы DUT, DUT.vhd, содержит три экземпляра vsum компонент.
ARCHITECTURE rtl OF DUT IS
-- Component Declarations
COMPONENT vsum
PORT( In1 : IN vector_of_std_logic_vector16(0 TO 9); -- int16 [10]
Out1 : OUT std_logic_vector(19 DOWNTO 0) -- sfix20
);
END COMPONENT;
-- Component Configuration Statements
FOR ALL : vsum
USE ENTITY work.vsum(rtl);
-- Signals
SIGNAL vsum_out1 : std_logic_vector(19 DOWNTO 0); -- ufix20
SIGNAL vsum1_out1 : std_logic_vector(19 DOWNTO 0); -- ufix20
SIGNAL vsum2_out1 : std_logic_vector(19 DOWNTO 0); -- ufix20
BEGIN
u_vsum : vsum
PORT MAP( In1 => In1, -- int16 [10]
Out1 => vsum_out1 -- sfix20
);
u_vsum1 : vsum
PORT MAP( In1 => In2, -- int16 [10]
Out1 => vsum1_out1 -- sfix20
);
u_vsum2 : vsum
PORT MAP( In1 => In3, -- int16 [10]
Out1 => vsum2_out1 -- sfix20
);
Out1 <= vsum_out1;
Out2 <= vsum1_out1;
Out3 <= vsum2_out1;
END rtl;Если конструкция содержит атомарные подсистемы, которые идентичны, за исключением их настраиваемых значений параметров маски, можно создать один HDL module или entity для подсистемы. В созданном коде module или entity создается несколько раз.
Для создания многоразового кода для идентичных атомных подсистем включите MaskParameterAsGeneric для модели. По умолчанию MaskParameterAsGeneric отключен.
Например, чтобы разрешить генерацию многократно используемого кода для атомных подсистем с настраиваемыми параметрами в hdlcoder_reusable_code_parameterized_subsystem модель, введите:
hdlset_param('hdlcoder_reusable_code_parameterized_subsystem','MaskParameterAsGeneric','on')
Либо в диалоговом окне Параметры конфигурации (Configuration Parameters) на вкладке Создание кода HDL (HDL Code Generation) > Глобальные настройки (Global Settings) > Стиль кодирования (Coding Style) включите опцию Генерировать параметризованный код HDL из маскированной подсистемы.
hdlcoder_reusable_code_parameterized_subsystem модель показывает пример подсистемы DUT, содержащей атомарные подсистемы, которые идентичны, за исключением их настраиваемых значений параметров маски.


В hdlcoder_reusable_code_parameterized_subsystem/DUTмодули усиления являются подсистемами со значениями усиления, представленными перестраиваемыми параметрами маски. Значения коэффициента усиления: 4 для gain_module, 5 для gain_module1, и 7 для gain_module2.
С MaskParameterAsGeneric включен, кодер HDL генерирует один исходный файл, gain_module.v, для трех подсистем модуля усиления.
makehdl('hdlcoder_reusable_code_parameterized_subsystem/DUT','MaskParameterAsGeneric','on',... 'TargetLanguage','Verilog')
### Generating HDL for 'hdlcoder_reusable_code_parameterized_subsystem/DUT'.
### Starting HDL check.
### Begin Verilog Code Generation for 'hdlcoder_reusable_code_parameterized_subsystem'.
### Working on hdlcoder_reusable_code_parameterized_subsystem/DUT/gain_module as
hdlsrc\hdlcoder_reusable_code_parameterized_subsystem\gain_module.v.
### Working on hdlcoder_reusable_code_parameterized_subsystem/DUT as
hdlsrc\hdlcoder_reusable_code_parameterized_subsystem\DUT.v.
### Creating HDL Code Generation Check Report DUT_report.html
### HDL check for 'hdlcoder_reusable_code_parameterized_subsystem' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.сгенерированный код для подсистемы DUT, DUT.v, содержит три экземпляра gain_module компонент.
module DUT
(
In1,
In2,
In3,
Out1,
Out2,
Out3
);
input [7:0] In1; // uint8
input [7:0] In2; // uint8
input [7:0] In3; // uint8
output [31:0] Out1; // uint32
output [31:0] Out2; // uint32
output [31:0] Out3; // uint32
wire [31:0] gain_module_out1; // uint32
wire [31:0] gain_module1_out1; // uint32
wire [31:0] gain_module2_out1; // uint32
gain_module # (.myGain(4)
)
u_gain_module (.In1(In1), // uint8
.Out1(gain_module_out1) // uint32
);
assign Out1 = gain_module_out1;
gain_module # (.myGain(5)
)
u_gain_module1 (.In1(In2), // uint8
.Out1(gain_module1_out1) // uint32
);
assign Out2 = gain_module1_out1;
gain_module # (.myGain(7)
)
u_gain_module2 (.In1(In3), // uint8
.Out1(gain_module2_out1) // uint32
);
assign Out3 = gain_module2_out1;
endmodule // DUTВ gain_module.v, myGain Verilog
®parameter генерируется для настраиваемого параметра маски.
module gain_module
(
In1,
Out1
);
input [7:0] In1; // uint8
output [31:0] Out1; // uint32
parameter [31:0] myGain = 4; // ufix32
wire [31:0] kconst; // ufix32
wire [39:0] Gain_mul_temp; // ufix40
wire [31:0] Gain_out1; // uint32
assign kconst = myGain;
assign Gain_mul_temp = kconst * In1;
assign Gain_out1 = Gain_mul_temp[31:0];
assign Out1 = Gain_out1;
endmodule // gain_module