Scalarization векторных портов в сгенерированном коде VHDL

В этом примере показано, как сгладить векторные сигналы в модели Simulink® в структуру скалярных сигналов в сгенерированном коде VHDL.

Задайте Scalarization векторных портов

Когда вы генерируете код Verilog, по умолчанию, векторные сигналы сглажены в скаляры по умолчанию. Когда вы генерируете код VHDL, можно задать, сгладить ли векторные сигналы на целой модели или на уровне DUT. Выравнивание векторных портов только на уровне DUT ускоряет генерацию кода особенно для больших моделей, которые имеют много векторных входных параметров.

Вы можете scalarize векторные порты в скаляры при генерации HDL-кода от MATLAB® и Simulink. Для MATLAB® к рабочему процессу HDL, в задаче генерации HDL-кода, на вкладке Clocks & Ports, портах Scalarize набора к dutlevel или on.

К scalarize векторные порты при генерации HDL-кода для модели Simulink:

  • В диалоговом окне Configuration Parameters, на генерации HDL-кода> Глобальные Настройки> Порты* вкладка, набор параметр Портов Scalarize к dutlevel или on.

  • В HDL Workflow Advisor, на вкладке HDL Code Generation> Set Code Generation Options> Set Advanced Options> Ports, набор параметр Портов Scalarize к dutlevel или on.

  • В командной строке MATLAB, набор ScalarizePorts свойство к on или dutlevel при помощи hdlset_param или makehdl.

Порты See Scalarize.

Векторная модель суммы

Чтобы видеть выравнивание векторных портов, откройте модель hdlcoder_hdlcoder_vector_sum_nested. Модель управляется векторным входом ширины 10 и имеет скалярный выход.

open_system('hdlcoder_vector_sum_nested')
set_param('hdlcoder_vector_sum_nested','SimulationCommand','update')

Эта модель совпадает с simplevectorsum модель и состоит из Подсистемы, vsum_mid, в vsum подсистема.

open_system('hdlcoder_vector_sum_nested/vsum')

vsum_mid подсистема содержит блок Sum of Elements, который сконфигурирован для векторного суммирования. Модель сконфигурирована, чтобы использовать Tree реализация при генерации HDL-кода для блока Sum of Elements в |vsum подсистеме. Эта реализация оптимизирована в течение минимальной задержки, генерирует структуру древовидной формы сумматоров для блока.

open_system('hdlcoder_vector_sum_nested/vsum/vsum_mid')

Порты вектора Scalarize

По умолчанию, ScalarizePorts свойством является off. HDL Coder™ генерирует определение типа и объявление порта для векторного порта In1 как показано в этом коде.

PACKAGE simplevectorsum_pkg IS
  TYPE vector_of_std_logic_vector16 IS ARRAY (NATURAL RANGE <>)
     OF std_logic_vector(15 DOWNTO 0);
  TYPE vector_of_signed16 IS ARRAY (NATURAL RANGE <>) OF signed(15 DOWNTO 0);
END simplevectorsum_pkg;

...

ENTITY vsum IS
  PORT( In1     :  IN    vector_of_std_logic_vector16(0 TO 9);  -- int16 [10]
        Out1    :  OUT   std_logic_vector(19 DOWNTO 0)  -- sfix20
      );
END vsum;

К scalarize векторные порты при генерации HDL-кода или установите параметр портов Scalarize в диалоговом окне Configuration Parameters или установите ScalarizePorts свойство к on или dutlevel с hdlset_param или makehdl. Когда вы устанавливаете ScalarizePorts к dutlevel, только векторные сигналы в DUT сглажены в скаляры. Скаляры вводятся к vsim_mid подсистема как векторы.

makehdl('hdlcoder_vector_sum_nested/vsum', 'ScalarizePorts', 'dutlevel')
ENTITY vsum IS
  PORT( In1_0                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_1                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_2                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_3                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_4                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_5                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_6                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_7                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_8                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_9                :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        Out1                 :   OUT   std_logic_vector(19 DOWNTO 0)  -- sfix20
        );
END vsum;
ENTITY vsum_mid IS
  PORT( In1                               :   IN    vector_of_std_logic_vector16(0 TO 9);  -- int16 [10]
        Out1                              :   OUT   std_logic_vector(19 DOWNTO 0)  -- sfix20
        );
END vsum_mid;

Чтобы сгладить векторные порты на целой модели, установите ScalarizePorts к on. Векторные порты в vsum_mid и входные параметры с блоком Sum of Elements также сглажены в скаляры.

makehdl('hdlcoder_vector_sum_nested/vsum', 'ScalarizePorts', 'on')
ENTITY vsum_mid IS
  PORT( In1_0                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_1                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_2                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_3                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_4                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_5                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_6                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_7                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_8                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        In1_9                             :   IN    std_logic_vector(15 DOWNTO 0);  -- int16
        Out1                              :   OUT   std_logic_vector(19 DOWNTO 0)  -- sfix20
        );
END vsum_mid;

Указания по применению и ограничения

  • Когда вы используете ScalarizePorts свойство для защищенной модели, необходимо использовать то же значение для этого свойства как значение, заданное для этого параметра в топ-модели, от которой на это ссылаются.

  • Когда вы используете IP Core Generation и FPGA-in-the-Loop рабочие процессы, векторные порты не поддерживаются. Установите ScalarizePorts как on или dutlevel. Для более быстрой генерации кода, набор ScalarizePorts к dutlevel.

  • Векторные или матричные порты, как введено к интерфейсу модели - ссылки должны быть scalarized прежде, чем сгенерировать HDL-код. Установите ScalarizePorts к dutlevel.

  • По умолчанию Сгенерируйте код VHDL для моделей - ссылок в одну библиотеку, включен. Код VHDL сгенерирован в одной библиотеке вместо отдельных библиотек. В этом случае установите ScalarizePorts свойство к off прежде, чем сгенерировать HDL-код.

  • Когда генерация кода, если вы сталкиваетесь с вводом или конфликтами по совпадению имен между векторными портами при взаимодействии через интерфейс с двумя или больше сгенерированными модулями VHDL кода, использует ScalarizePorts свойство сгенерировать неконфликтные определения порта.

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

Похожие темы