exponenta event banner

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

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

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

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

1.2.4

Серьезность

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

Описание

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

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

Например, откройте модель 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 становится кандидатом на оптимизацию, которая упрощает постоянные операции. При открытии созданной модели отображается блок константы, непосредственно соединенный с портом вывода.

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 для блоков константы и усиления

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

1.2.5

Серьезность

Рекомендуется

Описание

Чтобы создать параметризованный код HDL для блоков усиления и константы:

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

  • Подсистема, содержащая блоки усиления и константы, должна быть атомной подсистемой. Чтобы сделать подсистему атомной подсистемой, щелкните ее правой кнопкой мыши и выберите Обработать как атомную единицу.

  • Включить параметр Генерировать параметризованный код HDL из маскированной подсистемы (Generate parameterized HDL code from masked subsystem) в диалоговом окне Параметры конфигурации (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;

Размещение физических сигнальных линий внутри подсистемы

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

1.2.6

Серьезность

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

Описание

Во избежание ошибок при формировании тестового стенда HDL, физические сигнальные линии, которые присутствуют на том же уровне, что и подсистема DUT, должны быть размещены внутри блока подсистемы. Например, рассмотрим модель Simulink ®, которая имеет физические сигнальные линии вне подсистемы DUT ,HDL_DUT.

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

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

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

См. также

Функции

Связанные темы