Artikel-ID: 000080719 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 11.09.2012

Wie ist der Anfängliche Zustand einer hochfahrenden Zustandsmaschine?

Umgebung

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Beschreibung Bei der Verkleinerung einer Zustandsmaschine für Altera® Geräte müssen Sie sicherstellen, dass die Zustandsmaschine ordnungsgemäß zurückgesetzt wird. Alle Register in einem Altera Gerät werden in einem niedrigen Zustand hochfahren, es sei denn, es werden Not-Gate-Push-Back verwendet oder die Power-up-High-Optionen sind im Register festgelegt. Alle Altera Geräte unterstützen Not-Gate-Push-Back.

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.

Zugehörige Produkte

Dieser Artikel bezieht sich auf 1 Produkte

Intel® programmierbare Geräte

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.