Si la machine d’état est définie de sorte qu’un ou plusieurs bits d’état ne sont pas zéro dans l’état de réinitialisation, vous devez explicitement réinitialiser l’ordinateur d’état à l’aide d’un signal de réinitialisation (voir ci-dessous). Si la machine d’état n’est pas réinitialisée explicitement dans ce cas, la machine d’état peut s’alimenter dans un état non défini et MAXPLUS® II envoie le message suivant :
Infos : la machine d’état « <nom> » doit être réinitialisée pour garantir un bon fonctionnement
Pour corriger ce problème, la machine d’état doit être réinitialisée explicitement. Vous trouverez ci-dessous des exemples de formats d’entrée de gamme pour AHDL, VHDL et Verilog HDL.
Pour AHDL, le signal de réinitialisation doit être déclaré et revendiqué.
SUBDESIGN statemachine ( clk, reset, ena, d : INPUT; q : OUTPUT; ) VARIABLE ss: MACHINE WITH STATES (s0=1, s1=0); -- reset state is s0, state register is non-zero BEGIN ss.reset = reset; -- assert this signal to properly reset the state machine
Pour VHDL, l’état initial peut être défini par une IF
déclaration et un signal de réinitialisation.
ENTITY statemachine IS PORT( clk : IN STD_LOGIC; input : IN STD_LOGIC; reset : IN STD_LOGIC; output : OUT STD_LOGIC); END statemachine; ARCHITECTURE a OF statemachine IS TYPE STATE_TYPE IS (s1, s2); -- reset state is s1 ATTRIBUTE ENUM_ENCODING : STRING; ATTRIBUTE ENUM_ENCODING OF STATE_TYPE : TYPE IS "1 0"; -- state register for s1 is non-zero SIGNAL state : STATE_TYPE; BEGIN PROCESS (clk) BEGIN IF reset = '1' THEN state <= s2; -- causes state machine to power up in state s2 IF (clk'EVENT AND clk = '1') THEN CASE state IS
Pour Verilog HDL, l’état initial doit être défini par une IF
déclaration et un
réinitialiser le signal, c’est-à-dire
module statemachine (clk, in, reset, out); input clk, in, reset; output out; reg out; reg state; parameter s1 = 1, s2 = 0; always @ (state) begin case (state) -- define outputs s1: out = 0; always @ (posedge clk or posedge reset) begin if (reset) state = s1; -- causes state machine to power up in state s1 else case (state) -- define state transitions s1: if (in) state = s2;
Pour tous les formats HDL, si vous ne définissez pas l’état initial de l’ordinateur d’état comme étant des zéros, réinitialisez explicitement la machine d’état, car la machine d’état alimentera faiblement.
Voir les sections AHDL, VHDL et Verilog HDL de l’aide MAX PLUS II pour informations complètes sur l’implémentation des machines d’état dans MAX PLUS II.