ID do artigo: 000080719 Tipo de conteúdo: Solução de problemas Última revisão: 11/09/2012

Qual é o estado inicial de uma máquina de estado ativada?

Ambiente

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Descrição Ao sintetizar uma máquina de estado para dispositivos Altera® , certifique-se de que a máquina de estado seja redefinida corretamente. Todos os registros em um dispositivo Altera serão energizado em um estado baixo, a menos que o Não-Gate-Push-Back seja usado ou as opções de alta potência sejam definidas no registro. Todos Altera dispositivos compatíveis com o Não-Portal-Push-Back.

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.

Produtos relacionados

Este artigo aplica-se a 1 produtos

Dispositivos programáveis Intel®

O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês prevalecerá e será a determinante. Exibir a versão em inglês desta página.