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