Se a máquina de estado for definida para que um ou mais bits de estado não sejam zero no estado de reinicialização, então você deve redefinir explicitamente a máquina de estado usando um sinal de redefinição (veja abaixo). Se a máquina de estado não for redefinida explicitamente neste caso, a máquina de estado poderá ser energizado em um estado indefinido, e MAX PLUS® II dará a seguinte mensagem:
Informações: a máquina de estado "<name>" deve ser redefinida para garantir o funcionamento adequado
Para corrigir este problema, a máquina de estado deve ser redefinida explicitamente. Exemplos de formatos básicos de design AHDL, VHDL e Verilog HDL são mostrados abaixo.
Para AHDL, o sinal de redefinição deve ser declarado e afirmado.
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
Para VHDL, o estado inicial pode ser definido por uma instrução IF
e um sinal de redefinição.
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
Para Verilog HDL, o estado inicial deve ser definido por uma instrução IF
e um
redefinir o sinal, ou seja,
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;
Para todos os formatos HDL, se você não definir o estado inicial da máquina de estado para ser todos zeros, redefinir explicitamente a máquina de estado, uma vez que a máquina de estado a energia será baixa.
Consulte as seções AHDL, VHDL e Verilog HDL da ajuda MAX PLUS II para informações completas sobre a implementação de máquinas de estado em MAX PLUS II.