Если конструкция содержит избыточные логические или неиспользуемые блоки, HDL Coder™ удаляет блоки, компоненты или часть кода HDL, которая не участвует в выводе.
Компоненты, которые не вносят вклад в вывод в проекте, удаляются во время генерации кода HDL. Удаление избыточной логики уменьшает размер кода и позволяет избежать возможных сбоев синтеза с помощью последующих средств при развертывании кода на целевой платформе. Если компонент или логика сохраняются во время генерации кода HDL, этот компонент или логика считается активным. Эта оптимизация повышает производительность конструкции на целевом оборудовании. Оптимизация не влияет на поддержку отслеживания.
Избыточная логика в конструкции удаляется в сочетании с неиспользуемой оптимизацией удаления портов. Сведения об этой оптимизации см. в разделе Оптимизация неподключенных портов в коде HDL для моделей Simulink.
Кодер HDL не считает компонент или логику избыточными в следующих случаях:
Компонент имеет, по меньшей мере, один выходной порт, который способствует оценке выходного сигнала DUT.
Компонент имеет, по меньшей мере, один выходной порт, который вносит вклад в оценку управляющего порта активного блока подсистемы.
Компонент имеет, по меньшей мере, один выходной порт, который вносит вклад в оценку ввода компонента, который сохраняется во время генерации кода HDL.
Компонент является активной подсистемой черного ящика или содержит активную подсистему черного ящика или подключен к активной подсистеме черного ящика, как описано ниже.
Компонент представляет собой блок захвата данных FPGA.
В других случаях генератор кода рассматривает логику как избыточную и удаляет связанные блоки или компоненты во время генерации кода. Кроме того, для блоков с архитектурой HDL установлено значение No HDLтакие блоки, как «Область», «Утверждение», «Терминатор» и «До рабочей области», считаются избыточными и удаляются во время создания кода.
Во время генерации кода кодер HDL удаляет резервную логику или блоки, которые не участвуют в выводе DUT. Открытие модели hdlcoder_remove_redundant_logic.
open_system('hdlcoder_remove_redundant_logic') set_param('hdlcoder_remove_redundant_logic', 'SimulationCommand', 'update');

DUT блок подсистемы содержит блок коммутатора и блок включенной подсистемы. На основе управляющего ввода в блок Switch, ложный путь от Subsystem_2 передается на выход. EnabledSubsystem_1 вывод блока завершается блоком отображения и не вносит активного вклада в вывод.
open_system('hdlcoder_remove_redundant_logic/DUT')

Для создания кода HDL для проекта в командной строке MATLAB ® введите:
makehdl('hdlcoder_remove_redundant_logic/DUT')
Сгенерированный код VHDL показывает, что кодер HDL оценивал состояние блока коммутатора во время компиляции для передачи входных данных из Subsystem_2 к выходу и устранено Subsystem_1 входная ветвь. EnabledSubsystem_1 блок удаляется во время генерации кода HDL, поскольку он не имеет активного выхода.
ARCHITECTURE rtl OF DUT IS
-- Component Declarations COMPONENT Subsystem_2 PORT( Out1 : OUT std_logic_vector(31 DOWNTO 0) -- single ); END COMPONENT;
-- Component Configuration Statements FOR ALL : Subsystem_2 USE ENTITY work.Subsystem_2(rtl);
-- Signals SIGNAL Subsystem_2_out1 : std_logic_vector(31 DOWNTO 0); -- ufix32
BEGIN
u_Subsystem_2 : Subsystem_2
PORT MAP( Out1 => Subsystem_2_out1 -- single
);Out1 <= Subsystem_2_out1;
END rtl;
Подсистемы черного ящика - это блоки подсистем, для которых установлена архитектура HDL BlackBox. Интерфейс черного ящика для подсистемы - это сгенерированный компонент VHDL или модуль Verilog, который включает только определения входных и выходных портов HDL для подсистемы. Созданный интерфейс используется для интеграции существующего написанного вручную кода HDL, IP стороннего поставщика или другого кода, созданного кодером HDL. См. раздел Создание интерфейса черного ящика для подсистемы.
Подсистемы черного ящика, имеющие хотя бы один входной порт, считаются действительными и сохраняются при формировании кода HDL. Входной порт может быть не подключен. В этом случае Simulink ® вставляет в блок виртуальный сигнал, имеющий постоянное нулевое значение. В случае выходных портов подсистемы черного ящика должны иметь, по меньшей мере, один выходной порт, который соединен с нисходящим блоком. Когда выходной порт подключен, генератор кода идентифицирует подсистему черного ящика как источник, который вносит вклад в вычисление выходного значения, и сохраняет его во время генерации кода.
Открытие модели hdlcoder_blackbox_redundant_logic.
open_system('hdlcoder_blackbox_redundant_logic') sim('hdlcoder_blackbox_redundant_logic');

DUT подсистема содержит подсистемы черного ящика внутри ящиков с маркировкой Preserved и Removed. Подсистемы черного ящика внутри Preserved не удаляются во время генерации кода, поскольку они имеют по крайней мере один входной порт. Другие подсистемы черного ящика, которые не имеют входного порта или не имеют подключенного выходного порта, удаляются во время генерации кода.
open_system('hdlcoder_blackbox_redundant_logic/DUT')

Создание кода HDL для DUT подсистема, выполните следующую команду:
makehdl('hdlcoder_remove_redundant_logic/DUT')
Сгенерированный код HDL показывает подсистемы в Preserved раздел. Неподключенный входной порт автоматически подключается к постоянному нулю.
ARCHITECTURE rtl OF DUT IS
-- Component Declarations COMPONENT bbx_with_io PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; In1 : IN vector_of_std_logic_vector8(0 TO 3); -- int8 [4] Out1 : OUT vector_of_std_logic_vector9(0 TO 3) -- sfix9 [4] ); END COMPONENT;
COMPONENT no_io_subsys_bbx_with_in PORT( clk : IN std_logic; reset : IN std_logic; enb : IN std_logic ); END COMPONENT;
COMPONENT bbx_with_in PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; In1 : IN std_logic_vector(15 DOWNTO 0) -- int16 ); END COMPONENT;
COMPONENT sink_bbx PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; In1 : IN std_logic_vector(7 DOWNTO 0) -- int8 ); END COMPONENT;
COMPONENT bbx_with_connected_out PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; Output : OUT std_logic_vector(16 DOWNTO 0) -- ufix17 ); END COMPONENT;
...
END rtl;
Блоки подсистемы сохраняются в сгенерированном коде HDL, если блоки имеют по меньшей мере один выходной порт, который вносит вклад в оценку выходного сигнала DUT. Блоки подсистемы также сохраняются, если они содержат действительную подсистему черного ящика. Подсистема черного ящика действительна, если она содержит входной порт или выходной порт, который подключен, как описано выше.
Этому соглашению следуют различные типы блоков подсистем.
Подсистема
Атомная подсистема
Ссылки на модель
Вариационная подсистема
Подсистема Foreach
Срабатывающая подсистема
Включенная подсистема
Синхронные подсистемы
Маскированные подсистемы
Для отдельных портов подсистемы удаление избыточной логики также зависит от того, задан ли параметр «Удалить неиспользуемые порты» в диалоговом окне «Параметры конфигурации». См. раздел Удаление неиспользуемых портов.
Открытие модели hdlcoder_subsys_redundant_logic.
open_system('hdlcoder_subsys_redundant_logic') sim('hdlcoder_subsys_redundant_logic');

DUT подсистема содержит блоки подсистемы внутри блоков с маркировкой Preserved и Removed. Блоки подсистемы внутри Preserved не удаляются во время генерации кода, поскольку они имеют по крайней мере один выходной порт, который способствует оценке выходных данных DUT, или имеют допустимую подсистему черного ящика. Другие подсистемы черного ящика, не имеющие активного выходного порта, удаляются во время генерации кода.
open_system('hdlcoder_subsys_redundant_logic/DUT')

Создание кода HDL для DUT подсистема, выполните следующую команду:
makehdl('hdlcoder_subsys_redundant_logic/DUT')
Сгенерированный код HDL показывает подсистемы в Preserved раздел.
ARCHITECTURE rtl OF DUT IS
-- Component Declarations COMPONENT subsys_with_io PORT( In1 : IN std_logic_vector(15 DOWNTO 0); -- int16 Out1 : OUT std_logic_vector(15 DOWNTO 0); -- int16 Out2 : OUT std_logic_vector(15 DOWNTO 0) -- int16 ); END COMPONENT;
COMPONENT subsys_with_out PORT( Out2 : OUT std_logic_vector(7 DOWNTO 0) -- int8 ); END COMPONENT;
COMPONENT subsys_with_no_io_valid_bbx PORT( clk : IN std_logic; reset : IN std_logic; enb : IN std_logic ); END COMPONENT;
...
END rtl;
Для портов данных подсистемы удаление избыточной логики также зависит от того, задан ли параметр «Удалить неиспользуемые порты». См. раздел Оптимизация неподключенных портов в коде HDL для моделей Simulink.
Параметр «Удалить неиспользуемые порты» не влияет на управляющие порты. Управляющие порты и компоненты, способствующие оценке управляющих портов, сохраняются в сгенерированном коде HDL только в том случае, если весь экземпляр подсистемы считается активным.
open_system('hdlcoder_control_redundant_logic') sim('hdlcoder_control_redundant_logic');

DUT подсистема содержит две атомарные подсистемы со входом, который управляет портом Enable. Подсистема atomic_subsys_dead_out_instance_2 не активен, так как выходы завершены.
open_system('hdlcoder_control_redundant_logic/DUT')

Создание кода HDL для DUT подсистема, выполните следующую команду:
makehdl('hdlcoder_control_redundant_logic/DUT')
atomic_subsys_dead_out_instance_2 включение порта управления и входного сигнала удаляется в сгенерированный код ЛПВП.
ENTITY DUT IS
PORT( clk : IN std_logic;
reset : IN std_logic;
clk_enable : IN std_logic;
In1 : IN std_logic_vector(15 DOWNTO 0); -- int16
ce_out : OUT std_logic;
Out1 : OUT std_logic_vector(15 DOWNTO 0); -- int16
Out2 : OUT std_logic_vector(15 DOWNTO 0) -- int16
);
END DUT;ARCHITECTURE rtl OF DUT IS
-- Component Declarations COMPONENT atomic_subsys_dead_out_instance_1 PORT( clk : IN std_logic; reset : IN std_logic; enb : IN std_logic; In1 : IN std_logic_vector(15 DOWNTO 0); -- int16 Enable : IN std_logic; Out1 : OUT std_logic_vector(15 DOWNTO 0); -- int16 Out2 : OUT std_logic_vector(15 DOWNTO 0) -- int16 ); END COMPONENT;
...
END rtl;
Избыточная логика в атомных подсистемах, ссылках на модели и блоках подсистемы Foreach обрабатывается одинаково во время генерации кода HDL. Избыточная логика на границе атомных подсистем удаляется при формировании кода ЛВП.
Открытие модели hdlcoder_atomic_subsys2_redundant.
open_system('hdlcoder_atomic_subsys2_redundant') sim('hdlcoder_atomic_subsys2_redundant');

DUT подсистема содержит один блок атомной подсистемы. Блок константы вводится в подсистему, которая имеет блок добавления, подключенный к блоку терминатора.
open_system('hdlcoder_atomic_subsys2_redundant/DUT')

Создание кода HDL для DUT подсистема, выполните следующую команду:
makehdl('hdlcoder_atomic_subsys2_redundant/DUT')
При создании кода HDL блок Add и входной порт удаляются, поскольку блоки не способствуют оценке исходящего порта DUT.
ENTITY atomic_subsys_dead_out_instance_1 IS
PORT( In1 : IN std_logic_vector(15 DOWNTO 0); -- int16
Out1 : OUT std_logic_vector(15 DOWNTO 0); -- int16
Out2 : OUT std_logic_vector(15 DOWNTO 0) -- int16
);
END atomic_subsys_dead_out_instance_1;ARCHITECTURE rtl OF atomic_subsys_dead_out_instance_1 IS
...
In1_signed <= signed(In1);
Gain_mul_temp <= to_signed(16#000A#, 16) * In1_signed; Gain_out1 <= Gain_mul_temp(15 DOWNTO 0);
Out1 <= std_logic_vector(Gain_out1);
Gain1_mul_temp <= to_signed(16#0014#, 16) * In1_signed; Gain1_out1 <= Gain1_mul_temp(15 DOWNTO 0);
Out2 <= std_logic_vector(Gain1_out1);
END rtl;
Если имеется более одного активного экземпляра блоков атомной подсистемы, вычисление избыточной логики не пересекает границу подсистемы, и блоки сохраняются в сгенерированном коде HDL.
Открытие модели hdlcoder_atomic_subsys1_redundant.
open_system('hdlcoder_atomic_subsys1_redundant') sim('hdlcoder_atomic_subsys1_redundant');

DUT подсистема содержит две атомарные подсистемы. Внутри этих подсистем блок Add соединяется с блоком Terminator.
open_system('hdlcoder_atomic_subsys1_redundant/DUT')

Создание кода HDL для DUT подсистема, выполните следующую команду:
makehdl('hdlcoder_atomic_subsys1_redundant/DUT')
При создании кода HDL блок Add удаляется, поскольку он не способствует оценке исходящего порта DUT. Поскольку активны два экземпляра атомной подсистемы, входной порт блока Add сохраняется во время генерации кода HDL.
Один файл HDL atomic_subsys_dead_out_instance_1 генерируется для атомных подсистем. Этот файл содержит In2 объявление порта, но не используется в коде HDL. На уровне DUT DUT.vhd, блок Constant сохраняется, хотя он подается во входной порт, который не управляет каким-либо компонентом в атомной подсистеме.
ENTITY atomic_subsys_dead_out_instance_1 IS
PORT( In1 : IN std_logic_vector(15 DOWNTO 0); -- int16
In2 : IN std_logic_vector(7 DOWNTO 0); -- int8
Out1 : OUT std_logic_vector(15 DOWNTO 0); -- int16
Out2 : OUT std_logic_vector(15 DOWNTO 0) -- int16
);
END atomic_subsys_dead_out_instance_1;ARCHITECTURE rtl OF atomic_subsys_dead_out_instance_1 IS
-- Signals SIGNAL In1_signed : signed(15 DOWNTO 0); -- int16 SIGNAL Gain_mul_temp : signed(31 DOWNTO 0); -- sfix32 SIGNAL Gain_out1 : signed(15 DOWNTO 0); -- int16 SIGNAL Gain1_mul_temp : signed(31 DOWNTO 0); -- sfix32 SIGNAL Gain1_out1 : signed(15 DOWNTO 0); -- int16
...
END rtl;
При наличии нескольких активных экземпляров блоков атомной подсистемы эти экземпляры сохраняются в созданном коде.
Открытие модели hdlcoder_atomic_subsys1_ports_redundant.
open_system('hdlcoder_atomic_subsys1_ports_redundant') sim('hdlcoder_atomic_subsys1_ports_redundant');

DUT подсистема содержит две активные атомарные подсистемы.
open_system('hdlcoder_atomic_subsys1_ports_redundant/DUT')

Создание кода HDL для DUT подсистема, выполните следующую команду:
makehdl('hdlcoder_atomic_subsys1_ports_redundant/DUT')
Атомные подсистемы сохраняются в сгенерированном HDL-коде, но вычисление блока усиления удаляется из кода. В этом случае экземпляры нескольких атомных подсистем активны, и, таким образом, избыточная логика не удаляется через границу порта.
ENTITY DUT IS
PORT( In1 : IN std_logic_vector(15 DOWNTO 0); -- int16
Out1 : OUT std_logic_vector(15 DOWNTO 0); -- int16
Out2 : OUT std_logic_vector(15 DOWNTO 0); -- int16
Out3 : OUT std_logic_vector(15 DOWNTO 0); -- int16
Out4 : OUT std_logic_vector(15 DOWNTO 0) -- int16
);
END DUT;ARCHITECTURE rtl OF DUT IS
-- Component Declarations COMPONENT atomic_subsys_dead_out_instance_1 PORT( In1 : IN std_logic_vector(15 DOWNTO 0); -- int16 Out1 : OUT std_logic_vector(15 DOWNTO 0); -- int16 Out2 : OUT std_logic_vector(15 DOWNTO 0); -- int16 Out3 : OUT std_logic_vector(15 DOWNTO 0) -- int16 ); END COMPONENT;
...
Out1 <= atomic_subsys_dead_out_instance_1_out1;
Out2 <= atomic_subsys_dead_out_instance_1_out2;
Out3 <= atomic_subsys_dead_out_instance_2_out1;
Out4 <= atomic_subsys_dead_out_instance_2_out2;
END rtl;
Если хотя бы один экземпляр блока Atomic Subsystem не активен и если за пределами блоков Atomic Subsystem имеются неиспользуемые выходные порты, генерируемый код HDL изменяется в зависимости от параметра Remove Unused Porta. См. раздел Оптимизация неподключенных портов в коде HDL для моделей Simulink.
Избыточная логика в маскированных подсистемах удаляется таким же образом, как и для обычных блоков подсистем. При формировании параметров маски как дженерик-программ в коде HDL путем установки MaskParameterAsGeneric кому on, общие порты сохраняются в коде.
Открытие модели hdlcoder_masked_subsys_redundant.
open_system('hdlcoder_masked_subsys_redundant') sim('hdlcoder_masked_subsys_redundant');

Модель содержит маскированную подсистему, имеющую два параметра маски Gain и Gain1. Gain имеет значение 10 и} Gain1 | имеет значение | 20}.
open_system('hdlcoder_masked_subsys_redundant/DUT')

Создание кода HDL для DUT подсистема, выполните следующую команду:
makehdl('hdlcoder_masked_subsys_redundant/DUT')
Сгенерированный код показывает, что общие порты Gain и Gain1 сохраняются, но выходной порт Out2 удаляется.
ENTITY Subsystem IS
GENERIC( Gain : integer := 10;
Gain1 : integer := 20
);
PORT( In1 : IN std_logic_vector(15 DOWNTO 0); -- int16
Out1 : OUT std_logic_vector(15 DOWNTO 0) -- int16
);
END Subsystem;ARCHITECTURE rtl OF Subsystem IS
...
kconst <= to_signed(Gain, 16);
In1_signed <= signed(In1);
Gain_mul_temp <= kconst * In1_signed; Gain_out1 <= Gain_mul_temp(15 DOWNTO 0);
Out1 <= std_logic_vector(Gain_out1);
END rtl;
Аннотации или блоки DocBlock, находящиеся внутри активных подсистем, сохраняются в сгенерированном коде HDL. Подсистема активна, если она содержит по меньшей мере один выходной порт, который приводит к оценке выходного сигнала DUT, или имеет активную подсистему черного ящика, как описано выше. Если кодер HDL определяет, что подсистема, содержащая аннотацию или DocBlock, является избыточной, то эта аннотация или DocBlock также удаляется из сгенерированного кода.
Открытие модели hdlcoder_annotations_redundant_logic.
open_system('hdlcoder_annotation_redundant_logic') sim('hdlcoder_annotation_redundant_logic');

DUT подсистема содержит Inner annotation подсистема. Эта подсистема является избыточной, поскольку не имеет активного выходного порта.
open_system('hdlcoder_annotation_redundant_logic/DUT')

Создание кода HDL для DUT подсистема, выполните следующую команду:
makehdl('hdlcoder_annotation_redundant_logic/DUT')
Сгенерированный код HDL показывает Inner annotation подсистема, включая аннотацию Inner annotation удален из сгенерированного кода HDL.
ENTITY DUT IS
PORT( In1 : IN vector_of_std_logic_vector8(0 TO 3); -- int8 [4]
Out2 : OUT vector_of_std_logic_vector8(0 TO 3) -- int8 [4]
);
END DUT;ARCHITECTURE rtl OF DUT IS
BEGIN -- Removed -- -- Outer annotation
Out2 <= In1;
END rtl;
Избыточная логика и неиспользуемые блоки удаляются из модели, когда она содержит шины. Оптимизация избыточной логики применяется аналогичным образом к виртуальным шинам, невиртуальным шинам и портам элементов шины.
Открытие модели hdlcoder_virtual_bus_redundant.
open_system('hdlcoder_virtual_bus_redundant') sim('hdlcoder_virtual_bus_redundant');

DUT подсистема содержит виртуальную шину, которая управляет innerSubsystem блок и блок добавления. Один из сигналов шины подключен к блокам терминатора на выходе.
open_system('hdlcoder_virtual_bus_redundant/DUT')

Чтобы создать код HDL для подсистемы DUT, выполните следующую команду:
makehdl('hdlcoder_virtual_bus_redundant/DUT')
Сгенерированный код HDL показывает, что резервная логика удалена в конструкции, а порты ввода и вывода, которые являются активными, сохранены.
ENTITY DUT IS
PORT( In1 : IN std_logic_vector(7 DOWNTO 0); -- int8
Out1 : OUT std_logic_vector(7 DOWNTO 0); -- int8
Out2 : OUT std_logic_vector(7 DOWNTO 0) -- int8
);
END DUT;ARCHITECTURE rtl OF DUT IS
-- Component Declarations COMPONENT innerS PORT( In1_signal1 : IN std_logic_vector(7 DOWNTO 0); -- int8 Out1 : OUT std_logic_vector(7 DOWNTO 0) -- int8 ); END COMPONENT;
...
END rtl;
Внутри innerSubsystem блок Add, подключенный к блоку Terminator, удаляется.
ENTITY innerSubsystem IS
PORT( In1_signal1 : IN std_logic_vector(7 DOWNTO 0); -- int8
Out1 : OUT std_logic_vector(7 DOWNTO 0) -- int8
);
END innerSubsystem;ARCHITECTURE rtl OF innerSubsystem IS
-- Signals SIGNAL signal1 : signed(7 DOWNTO 0); -- int8
BEGIN -- Removed
signal1 <= signed(In1_signal1);
Out1 <= std_logic_vector(signal1);
END rtl;
1. Если модель содержит несколько экземпляров атомных подсистем, ссылок на модель или блоков Foreach Subsystem, если эти блоки определены как активные во время генерации кода HDL, то все порты сохраняются в сгенерированном коде. Компоненты, подключенные к этим портам в восходящем направлении, также считаются активными. Порты сохраняются независимо от того, активизируется или деактивизируется DeleteUnusedPorts установка. Это ограничение также применяется при использовании сигналов шины. В случае сигналов шины, когда имеется множество экземпляров атомных подсистем или ссылок на модели, которые считаются активными, сохраняется вся шина.
Открытие модели hdlcoder_atomic_bus_virtual_redundant.
open_system('hdlcoder_atomic_virtual_bus_redundant') sim('hdlcoder_atomic_virtual_bus_redundant');

DUT подсистема содержит две атомарные подсистемы, innerSubsystem и innerSubsystem блок. Оба экземпляра атомной подсистемы активны.
open_system('hdlcoder_atomic_virtual_bus_redundant/DUT')

Чтобы создать код HDL для подсистемы DUT, выполните следующую команду:
makehdl('hdlcoder_atomic_virtual_bus_redundant/DUT')
Сгенерированный код HDL показывает, что блок усиления, который управляет блоками атомной подсистемы, сохраняется.
ENTITY DUT IS
PORT( In1 : IN std_logic_vector(7 DOWNTO 0); -- int8
Out1 : OUT std_logic_vector(7 DOWNTO 0); -- int8
Out2 : OUT std_logic_vector(7 DOWNTO 0) -- int8
);
END DUT;ARCHITECTURE rtl OF DUT IS
-- Component Declarations COMPONENT innerSubsystem PORT( In1_signal1 : IN std_logic_vector(7 DOWNTO 0); -- int8 In1_signal2 : IN std_logic_vector(7 DOWNTO 0); -- int8 Out1 : OUT std_logic_vector(7 DOWNTO 0) -- int8 ); END COMPONENT;
...
u_innerSubsystem : innerSubsystem
PORT MAP( In1_signal1 => In1, -- int8
In1_signal2 => std_logic_vector(Gain_out1), -- int8
Out1 => innerSubsystem_out1 -- int8
);
u_innerSubsystem1 : innerSubsystem
PORT MAP( In1_signal1 => In1, -- int8
In1_signal2 => std_logic_vector(Gain_out1), -- int8
Out1 => innerSubsystem1_out1 -- int8
);
In1_signed <= signed(In1);
Gain_cast <= resize(In1_signed & '0', 16);
Gain_out1 <= Gain_cast(7 DOWNTO 0);
Out1 <= innerSubsystem_out1;
Out2 <= innerSubsystem1_out1;
END rtl;
2. Для моделей с векторными сигналами блоки Demux служат границами для избыточной логической оптимизации. Избыточная логика и компоненты, расположенные ниже по потоку от блока Demux, удаляются во время генерации кода HDL. Оптимизация не пересекает границу блока Demux и поэтому сохраняет компоненты, расположенные выше по потоку от блока Demux. Это ограничение при использовании векторов также применяется при преобразовании шин в векторы.
Открытие модели hdlcoder_vector_redundant_logic.
open_system('hdlcoder_vector_redundant_logic') sim('hdlcoder_vector_redundant_logic');

DUT подсистема содержит innerSubsystem блок. Эта подсистема имеет один активный выходной порт, а другой порт завершается.
open_system('hdlcoder_vector_redundant_logic/DUT')

Чтобы создать код HDL для подсистемы DUT, выполните следующую команду:
makehdl('hdlcoder_vector_redundant_logic/DUT')
Сгенерированный код HDL показывает, что блок Add выполняет векторное вычисление Add. Блок усиления и блок добавления сохраняются в сгенерированном коде HDL, так как избыточная логическая оптимизация не пересекает границу блока Demux.
ENTITY DUT IS
PORT( In1 : IN std_logic_vector(7 DOWNTO 0); -- int8
Out1 : OUT std_logic_vector(8 DOWNTO 0); -- sfix9
Out2 : OUT std_logic_vector(8 DOWNTO 0) -- sfix9
);
END DUT;ARCHITECTURE rtl OF DUT IS
-- Component Declarations COMPONENT innerSubsystem PORT( In1 : IN vector_of_std_logic_vector9(0 TO 1); -- sfix9 [2] Out1 : OUT std_logic_vector(8 DOWNTO 0) -- sfix9 ); END COMPONENT;
...
In1_signed <= signed(In1);
Gain1_cast <= resize(In1_signed & '0' & '0', 16); Gain1_out1 <= Gain1_cast(7 DOWNTO 0);
Mux_out1(0) <= signed(In1); Mux_out1(1) <= Gain1_out1;
Add_out1_gen: FOR t_0 IN 0 TO 1 GENERATE Add_out1(t_0) <= resize(Mux_out1(t_0), 9) + resize(Mux_out1(t_0), 9); END GENERATE Add_out1_gen;
outputgen: FOR k IN 0 TO 1 GENERATE Add_out1_1(k) <= std_logic_vector(Add_out1(k)); END GENERATE;
Out2 <= std_logic_vector(Add_out1(0));
...
END rtl;