В этом примере показано, как использовать Восстановленные Подсистемы в HDL Coder.
Восстановленная Подсистема является подсистемой, которая сбросит все состояния в иерархии подсистемы на основе булева управляющего сигнала. Это делает это, не требуя, чтобы проводное соединение сброса сигнализировало с каждым блоком с сохранением информации в Simulink. Эта функция позволяет сбрасывать блоки, такие как блок MATLAB function, который не имеет доступного порта сброса. Для поддержки в HDL Coder Восстановленная Подсистема поддерживается только в Синхронной области 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. ### Starting HDL check. ### 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. ### Creating HDL Code Generation Check Report file:///tmp/BR2019bd_1170825_64229/publish_examples2/tp6a800c02/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: 2019-07-26 17:47:00 -- -- Generated by MATLAB 9.7 and HDL Coder 3.15 -- -- -- ------------------------------------------------------------- -- 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); end
y = state; state = u; end
type hdlsrc/hdlcoder_resettable_subsystem/MATLAB_Delay_Fcn.vhd
-- ------------------------------------------------------------- -- -- File Name: hdlsrc/hdlcoder_resettable_subsystem/MATLAB_Delay_Fcn.vhd -- Created: 2019-07-26 17:47:00 -- -- Generated by MATLAB 9.7 and HDL Coder 3.15 -- -- ------------------------------------------------------------- -- ------------------------------------------------------------- -- -- 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.