Скаляризация портов Вектора в сгенерированном коде VHDL

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

Задайте скаляризацию Вектора портов

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

Можно скаляризировать векторные порты в скаляры при генерации HDL-кода из MATLAB ® и Simulink. Для рабочего процесса MATLAB ® в HDL, в задаче Генерация HDL-кода, на вкладке Часы и порты, установите значение Scalarize ports равным dutlevel или on.

Чтобы скаляризировать векторные порты при генерации HDL-кода для модели Simulink:

  • В диалоговом окне Configuration Parameters, на вкладке Генерация HDL-кода > Global Settings > Ports *, установите параметр Scalarize Ports равным dutlevel или on.

  • В HDL Workflow Advisor, на Генерацию HDL-кода > Set Генерации кода Опций > Set Advanced Опций > Ports вкладки, установите параметр Scalarize Ports равным dutlevel или on.

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

См. раздел «Скаляризация портов».

Вектор суммы

Чтобы увидеть уплощение вектора портов, откройте модель 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')

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

open_system('hdlcoder_vector_sum_nested/vsum/vsum_mid')

Скаляризация векторных портов

По умолчанию в 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;

Чтобы скаляризировать векторные порты при генерации HDL-кода, либо установите параметр Scalarize ports в диалоговом окне Параметры Конфигурации, либо установите 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.

  • Векторы или матричные порты как вход в модель-ссылку интерфейс должны быть скаляризированы перед генерацией HDL-кода. Задайте ScalarizePorts на dutlevel.

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

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

См. также

Похожие темы