Рассмотрите использование этих рекомендуемых настроек, когда вы создаете модель иерархически и генерируете 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.