В этом примере показано, как использовать Сбрасываемые Подсистемы в 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');
Подсистема сброса выглядит подобно Подсистеме Включена или любой другой Подсистеме 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); 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: 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.