exponenta event banner

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

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

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

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

При создании кода HDL из MATLAB ® и Simulink векторные порты можно масштабировать в скаляры. Для рабочего процесса MATLAB ® to HDL в задаче Создание кода HDL на вкладке Часы и порты установите для параметра Скаляризировать порты значениеdutlevel или on.

Для масштабирования векторных портов при создании кода HDL для модели Simulink:

  • В диалоговом окне «Параметры конфигурации» на вкладке «Создание кода HDL» > «Глобальные настройки» > «Порты» * установите параметр «Масштабировать порты» в значениеdutlevel или on.

  • В помощнике по рабочим процессам HDL на вкладке «Создание кода HDL» > «Настройка параметров генерации кода» > «Настройка дополнительных параметров» > «Порты» задайте для параметра «Масштабировать порты» значение dutlevel или on.

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

См. раздел Scalarize ports.

Модель векторной суммы

Для просмотра сведения векторных портов откройте модель. 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')

Масштабировать векторные порты

По умолчанию 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 в диалоговом окне 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 и входы в блок «Сумма элементов» также сплющены в скаляры.

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 для создания неконфликтных определений портов.

См. также

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