Руководства по моделированию

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

Сгенерируйте параметризованный HDL-код для блоков Constant и Gain

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

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.

Simulink model with physical signal lines outside the DUT subsystem, HDL_DUT.

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

Simulink model with physical signal lines placed inside a Subsystem block.

См. также

Функции

Похожие темы