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