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

Рассмотрите использование этих рекомендуемых настроек, когда вы создадите свою модель иерархически и сгенерируете HDL-код для вашего проекта. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований податливости. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.

Избегайте постоянных связей блока с контурами порта подсистемы

ID инструкции

1.2.4

Серьезность

Обязательный

Описание

Рекомендуется, чтобы вы постарались не непосредственно соединять блоки Константа с выходными портами Подсистемы. Инструменты синтеза могут оптимизировать и удалить константы и создать неподключенные порты.

Если вы используете типы данных с плавающей точкой с Native Floating Point режим включил и ввел постоянные значения арифметическому оператору, такие как блок Add, HDL Coder™ заменяет блок Add на блок Constant при генерации кода. Эта оптимизация может привести к блоку Constant, непосредственно соединенному с выходным портом. Поэтому рекомендуется, чтобы вы избежали таких построений моделирования. См. также Упрощают Постоянные Операции и Уменьшают Сложность Проекта в HDL Coder.

Например, откройте модель hdlcoder_constant_subsystem_boundary.slx. DUT содержит две подсистемы Constant_subsys1 и Constant_subsys2, выходные параметры которого являются входными параметрами к третьей Подсистеме. Constant_subsys1 содержит блоки Константа, непосредственно соединенные с выходными портами и Constant_subsys2 содержит блоки Константа, которые имеют один типы данных как входные параметры с блоком 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-код для постоянного и получите блоки

ID инструкции

1.2.5

Серьезность

Рекомендуемый

Описание

Сгенерировать параметрированный HDL-код для блоков Усиления и Константа:

  • Подсистема, которая содержит блоки Усиления и Константа, должна быть подсистемой маскированной. Блоки Усиления и Константа используют эти значения параметров маски. Вы задаете параметры маски Подсистемы в диалоговом окне Mask Editor.

  • Подсистемой, которая содержит блоки Усиления и Константа, должна быть Атомарная подсистема. Чтобы сделать Подсистему Атомарной подсистемой, щелкните правой кнопкой по той Подсистеме и выберите Treat как атомарный модуль.

  • Включите Генерировать параметрированный HDL-код из установки подсистемы маскированной в диалоговом окне Configuration Parameters или установите MaskParameterAsGeneric к on в командной строке с помощью makehdl или hdlset_param.

Для примера откройте модель hdlcoder_masked_subsystems. 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;

Поместите линии физического сигнала в подсистеме

ID инструкции

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.

Смотрите также

Функции

Похожие темы