Сгенерируйте повторно используемый код для подсистем

HDL Coder™ может обнаружить атомарные подсистемы, которые идентичны, или идентичны за исключением их значений параметров маски, на любом уровне иерархии модели, и генерируют один допускающий повторное использование HDL module или entity. Допускающий повторное использование HDL-код генерируют как один файл и инстанцируют многократно.

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

  • DefaultParameterBehavior Simulink® Параметром конфигурации должен быть Inlined. Можно установить этот параметр в командной строке при помощи set_param или hdlsetup функция. Чтобы задать эту установку в диалоговом окне Configuration Parameters, у вас должен быть Simulink Coder™.

    Примечание

    Используя hdlsetup наборы InlineParams свойство к on. Включение этого параметра совпадает с установкой DefaultParameterBehavior к Inlined. Установка InlineParams к off изменения DefaultParameterBehavior значение к Tunable.

  • Не используйте функциональность, такую как логгирование сигнала или использование блоков как To Workspace или To File.

  • Атомарные подсистемы должны быть идентичными, или идентичными за исключением их значений параметров маски.

    • MaskParameterAsGeneric должен быть on. Для получения дополнительной информации смотрите, Генерируют параметрированный HDL-код от подсистемы маскированной.

    • Параметры маски должны быть ненастраиваемыми. Генератор кода не совместно использует атомарные подсистемы с параметрами маски, которые являются настраиваемыми.

    • Параметры маски должны быть скаляром.

    • Типами данных параметров маски должен быть integer или fixed-point с размером слова меньше чем или равных 32.

    • Настраиваемый параметр должен использоваться только в Constant, Gain или блоках Compare To Constant.

    • Типы данных порта должны соответствовать.

      Если вы изменяете значение настраиваемого параметра маски, тип данных выходного порта может измениться. Если одна из атомарных подсистем имеет различный тип данных порта, код, сгенерированный для той подсистемы также, отличается.

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

  • DefaultParameterBehavior Параметром конфигурации Simulink должен быть Inlined. Можно установить этот параметр в командной строке при помощи set_param или hdlsetup функция. Чтобы задать эту установку в диалоговом окне Configuration Parameters, у вас должен быть Simulink Coder.

    Примечание

    Используя hdlsetup наборы InlineParams свойство к on. Включение этого параметра совпадает с установкой DefaultParameterBehavior к Inlined. Установка InlineParams к off изменения DefaultParameterBehavior значение к Tunable.

  • Не используйте функциональность логгирования, такую как логгирование сигнала или блоки как To Workspace или To File.

  • Виртуальные подсистемы должны быть идентичными, или идентичными за исключением их значений параметров маски.

    • SubsystemReuse должен быть установлен в 'Atomic and Virtual'.

      • Установка SubsystemReuse к 'Atomic and Virtual' уменьшает искусственные алгебраические ошибки и улучшает распознавание идентичных подсистем, независимо от их топологии в остальной части проекта. Идентификация подобных подсистем может помочь разделению ресурсов.

      • Устанавливать эти значения к вашей необходимой установке, в командном окне MATLAB, введите:

        hdlset_param('myHDLModel', 'SubsystemReuse', 'Atomic and Virtual')
      • В качестве альтернативы можно установить эту опцию от панели HDL Code Generation верхнего уровня в диалоговом окне Configuration Parameters. Под Global Settings> Coding style, можно изменить настройки Code reuse к необходимой опции.

      • Предыдущий набор команд SubsystemReuse опция для вашего проекта. Установить эту опцию только для текущего сеанса генерации кода, введите:

        makehdl(<DUT system>, 'SubsystemReuse', 'Atomic and Virtual')
    • MaskParameterAsGeneric должен быть on. Для получения дополнительной информации смотрите, Генерируют параметрированный HDL-код от подсистемы маскированной.

    • Параметры маски должны быть ненастраиваемыми. Генератор кода не совместно использует атомарные подсистемы с параметрами маски, которые являются настраиваемыми.

    • Параметры маски должны быть скаляром.

    • Типами данных параметров маски должен быть integer или fixed-point с размером слова меньше чем или равных 32.

    • Настраиваемый параметр должен использоваться только в Constant, Gain или блоках Compare To Constant.

    • Типы данных порта должны соответствовать.

      Если вы изменяете значение настраиваемого параметра маски, тип данных выходного порта может измениться. Если одна из атомарных подсистем имеет различный тип данных порта, код, сгенерированный для той подсистемы также, отличается.

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

Если ваш проект содержит идентичные атомарные подсистемы, кодер генерирует один HDL module или entity для подсистемы и инстанцирует его многократно.

Пример

Откройте hdlcoder_reusable_code_identical_subsystem модель, чтобы видеть пример подсистемы DUT, содержащей три идентичных атомарных подсистемы.

HDL Coder генерирует один 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 Code Generation> Global Settings> Coding Style, включают опцию Generate parameterized HDL code from masked subsystem.

Пример

hdlcoder_reusable_code_parameterized_subsystem модель показывает пример подсистемы DUT, содержащей атомарные подсистемы, которые идентичны за исключением их настраиваемых значений параметров маски.

В hdlcoder_reusable_code_parameterized_subsystem/DUT, модули усиления являются подсистемами со значениями усиления, представленными настраиваемыми параметрами маски. Значения усиления: 4 для gain_module, 5 для gain_module1, и 7 для gain_module2.

С MaskParameterAsGeneric активированный, HDL Coder генерирует один исходный файл, 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

Если входная модель имеет подсистемы, который содержит информацию о маске, такую как переменные маски и код инициализации маски, информация о маске тех подсистем сохраняется в сгенерированной модели. Если вам не нужна эта информация, можно удалить ее.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте