Wenn die Zustandsmaschine so definiert ist, dass eines oder mehrere der Zustandsbits im Reset-Zustand nicht Null sind, sollten Sie die Zustandsmaschine explizit zurücksetzen, indem Sie ein Reset-Signal verwenden (siehe unten). Wenn die Zustandsmaschine in diesem Fall nicht explizit zurückgesetzt wird, kann die Zustandsmaschine in einen undefinierten Zustand hochfahren, und MAX PLUS® II wird folgende Meldung ausgegeben:
Info: Der State-Computer "<name>" muss zurückgesetzt werden, um einen ordnungsgemäßen Betrieb zu gewährleisten.
Um dieses Problem zu beheben, sollte die Zustandsmaschine explizit zurückgesetzt werden. Beispiele für die Designeingabeformate AHDL, VHDL und Verilog HDL finden Sie unten.
Für AHDL sollte das Reset-Signal erklärt und bestätigt werden.
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
Für VHDL kann der anfängliche Zustand durch eine IF
Anweisung und ein Reset-Signal definiert werden.
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
Für Verilog HDL muss der Ausgangszustand durch eine IF
Anweisung und eine
Reset-Signal, d. h.
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;
Wenn Sie für alle HDL-Formate den Ausgangszustand der Zustandsmaschine nicht als alle Nullen definieren, setzen Sie die Zustandsmaschine explizit zurück, da die Zustandsmaschine wird niedrig hochfahren.
Hilfe zu den Abschnitten AHDL, VHDL und Verilog HDL in MAX PLUS II Hilfe vollständige Informationen zur Implementierung von Zustandsmaschinen in MAX PLUS II.