В этом примере показано, как использовать Восстановленные Подсистемы в HDL Coder.
Восстановленная Подсистема является подсистемой, которая сбросит все состояния в иерархии подсистемы на основе булева управляющего сигнала. Это делает это, не требуя, чтобы проводное соединение сброса сигнализировало с каждым блоком с сохранением информации в Simulink. Эта функция позволяет сбрасывать блоки, такие как блок MATLAB function, который не имеет доступного порта сброса. Для поддержки в HDL Coder Восстановленная Подсистема поддерживается только в Synchronous Область StateControl.
load_system('hdlcoder_resettable_subsystem'); open_system('hdlcoder_resettable_subsystem/DUT/Resettable Subsystem'); set_param('hdlcoder_resettable_subsystem', 'SimulationCommand', 'update');

Восстановленная Подсистема выглядит похожей на Enabled Подсистему, или любой другой Simulink условно выполнил подсистему, в которой это имеет специализированную Блокировку порта Сброса в нем. Этот блок порта управления имеет несколько триггерных типов в наличии. Поддержки HDL Coder "уровень содержат" триггерный тип.
open_system('hdlcoder_resettable_subsystem/DUT/Resettable Subsystem/LocalReset');
Восстановленные Подсистемы позволяют сбрасывать состояние всех блоков с состоянием в подсистеме к их начальному значению. В сгенерированном HDL-коде каждой задержке проекта - задержке, смоделированной явным образом в Simulink - добавят сброс. Задержки аппаратной реализации, такие как конвейерные задержки не сбрасываются. Сигнал сброса является синхронным сигналом и совершенно независим от глобального сигнала сброса.
close_system('hdlcoder_resettable_subsystem/DUT/Resettable Subsystem/LocalReset'); makehdl('hdlcoder_resettable_subsystem/DUT'); type hdlsrc/hdlcoder_resettable_subsystem/DUT.vhd
### Generating HDL for 'hdlcoder_resettable_subsystem/DUT'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_resettable_subsystem', { 'HDL Code Generation' } )">hdlcoder_resettable_subsystem</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoder_resettable_subsystem'.
### Begin compilation of the model 'hdlcoder_resettable_subsystem'...
### Applying HDL optimizations on the model 'hdlcoder_resettable_subsystem'...
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_resettable_subsystem'.
### Working on hdlcoder_resettable_subsystem/DUT/Resettable Subsystem/Discrete FIR Filter as hdlsrc/hdlcoder_resettable_subsystem/Discrete_FIR_Filter.vhd.
### Working on hdlcoder_resettable_subsystem/DUT/Resettable Subsystem/MATLAB Delay Fcn as hdlsrc/hdlcoder_resettable_subsystem/MATLAB_Delay_Fcn.vhd.
### Working on hdlcoder_resettable_subsystem/DUT/Resettable Subsystem as hdlsrc/hdlcoder_resettable_subsystem/Resettable_Subsystem.vhd.
### Working on hdlcoder_resettable_subsystem/DUT as hdlsrc/hdlcoder_resettable_subsystem/DUT.vhd.
### Generating package file hdlsrc/hdlcoder_resettable_subsystem/DUT_pkg.vhd.
### Code Generation for 'hdlcoder_resettable_subsystem' completed.
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples4/tp687696c7/hdlsrc/hdlcoder_resettable_subsystem/DUT_report.html
### HDL check for 'hdlcoder_resettable_subsystem' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.
-- -------------------------------------------------------------
--
-- File Name: hdlsrc/hdlcoder_resettable_subsystem/DUT.vhd
-- Created: 2021-01-27 13:50:21
--
-- Generated by MATLAB 9.10 and HDL Coder 3.18
--
--
-- -------------------------------------------------------------
-- Rate and Clocking Details
-- -------------------------------------------------------------
-- Model base rate: 1
-- Target subsystem base rate: 1
--
--
-- Clock Enable Sample Time
-- -------------------------------------------------------------
-- ce_out 1
-- -------------------------------------------------------------
--
--
-- Output Signal Clock Enable Sample Time
-- -------------------------------------------------------------
-- Out1 ce_out 1
-- Out2 ce_out 1
-- -------------------------------------------------------------
--
-- -------------------------------------------------------------
-- -------------------------------------------------------------
--
-- Module: DUT
-- Source Path: hdlcoder_resettable_subsystem/DUT
-- Hierarchy Level: 0
--
-- -------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
ENTITY DUT IS
PORT( clk : IN std_logic;
reset : IN std_logic;
clk_enable : IN std_logic;
LocalReset : IN std_logic;
In2 : IN std_logic_vector(7 DOWNTO 0); -- int8
In3 : IN std_logic_vector(7 DOWNTO 0); -- int8
In4 : IN std_logic_vector(7 DOWNTO 0); -- int8
ce_out : OUT std_logic;
Out1 : OUT std_logic;
Out2 : OUT std_logic_vector(32 DOWNTO 0) -- sfix33_En20
);
END DUT;
ARCHITECTURE rtl OF DUT IS
-- Component Declarations
COMPONENT Resettable_Subsystem
PORT( clk : IN std_logic;
reset : IN std_logic;
enb : IN std_logic;
In1 : IN std_logic_vector(7 DOWNTO 0); -- int8
In2 : IN std_logic_vector(7 DOWNTO 0); -- int8
In3 : IN std_logic_vector(7 DOWNTO 0); -- int8
LocalReset : IN std_logic;
Out1 : OUT std_logic;
Out2 : OUT std_logic_vector(32 DOWNTO 0) -- sfix33_En20
);
END COMPONENT;
-- Component Configuration Statements
FOR ALL : Resettable_Subsystem
USE ENTITY work.Resettable_Subsystem(rtl);
-- Signals
SIGNAL Resettable_Subsystem_out1 : std_logic;
SIGNAL Resettable_Subsystem_out2 : std_logic_vector(32 DOWNTO 0); -- ufix33
BEGIN
u_Resettable_Subsystem : Resettable_Subsystem
PORT MAP( clk => clk,
reset => reset,
enb => clk_enable,
In1 => In2, -- int8
In2 => In3, -- int8
In3 => In4, -- int8
LocalReset => LocalReset,
Out1 => Resettable_Subsystem_out1,
Out2 => Resettable_Subsystem_out2 -- sfix33_En20
);
ce_out <= clk_enable;
Out1 <= Resettable_Subsystem_out1;
Out2 <= Resettable_Subsystem_out2;
END rtl;
Блок MATLAB function не имеет поддержки явного порта сброса. Когда помещено в Восстановленную Подсистему, HDL Coder сгенерирует синхронный внешний сигнал сброса управлять сбросом персистентных переменных в функции.
function y = fcn(u)
persistent state;
if isempty(state)
state = fi(0, 1, 33, 20);
endy = state; state = u; end
type hdlsrc/hdlcoder_resettable_subsystem/MATLAB_Delay_Fcn.vhd
-- -------------------------------------------------------------
--
-- File Name: hdlsrc/hdlcoder_resettable_subsystem/MATLAB_Delay_Fcn.vhd
-- Created: 2021-01-27 13:50:21
--
-- Generated by MATLAB 9.10 and HDL Coder 3.18
--
-- -------------------------------------------------------------
-- -------------------------------------------------------------
--
-- Module: MATLAB_Delay_Fcn
-- Source Path: hdlcoder_resettable_subsystem/DUT/Resettable Subsystem/MATLAB Delay Fcn
-- Hierarchy Level: 2
--
-- -------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
ENTITY MATLAB_Delay_Fcn IS
PORT( clk : IN std_logic;
reset : IN std_logic;
enb : IN std_logic;
u : IN std_logic_vector(32 DOWNTO 0); -- sfix33_En20
LocalReset : IN std_logic;
y : OUT std_logic_vector(32 DOWNTO 0) -- sfix33_En20
);
END MATLAB_Delay_Fcn;
ARCHITECTURE rtl OF MATLAB_Delay_Fcn IS
-- Signals
SIGNAL u_signed : signed(32 DOWNTO 0); -- sfix33_En20
SIGNAL y_tmp : signed(32 DOWNTO 0); -- sfix33_En20
BEGIN
u_signed <= signed(u);
MATLAB_Delay_Fcn_1_process : PROCESS (clk, reset)
BEGIN
IF reset = '1' THEN
y_tmp <= to_signed(0, 33);
ELSIF clk'EVENT AND clk = '1' THEN
IF enb = '1' THEN
IF LocalReset = '1' THEN
y_tmp <= to_signed(0, 33);
ELSE
y_tmp <= u_signed;
END IF;
END IF;
END IF;
END PROCESS MATLAB_Delay_Fcn_1_process;
y <= std_logic_vector(y_tmp);
END rtl;
Синхронный сигнал задержки по имени "LocalDelay" был добавлен к коду VHDL, сгенерированному для задержки, реализованной в блоке MATLAB function.