FSM fue alcanzado entre dos estados solamente!

0

Estoy escribiendo un fsm que se toca entre s1 y s2 y no pasa al siguiente estado. Incluso si aumento la demora después de s3 (para que se complete la operación). Incluso observé la simulación de que los datos estaban disponibles en ese instante, pero la ruta de control no fue a s3. Comienza desde s0 y salta a s2-s1-s2-s1-s2-s1 ........ (Ya declaré s0, s1, s2 .., w0, w1, .... como parámetros)

Por favor, hazme saber dónde cometí errores.

Aquí está mi código verilog:

always@(posedge clk)begin
   if(rst)
      cstate<=s0;
   else
      cstate<=nstate;  end


always@(cstate)
begin
case({cstate})
s0:
begin
control signals // for the module instantiations enable in data path
state_indicator<=6'b000000;
end
w0:
begin 
#150;
state_indicator<=7'b000001;
end
s1:
begin 
control signals
state_indicator<=6'b000010;;
end
w1:
begin 
#10000;
state_indicator<=6'b000011;
end
s2:
begin
control signals
state_indicator<=6'b000100;
end
w2:
begin
#6000;
state_indicator<=6'b000101;
end

s3: begin
control signals
state_indicator<=6'b000110;
end
w3:
begin
#10000;
state_indicator<=7'b0000110; 
end

y escribí

always@( cstate or start or done1)
begin
case({cstate})
s0:begin  if(start) begin nstate<=w0 ; end 
        else if(!start) 
        begin nstate<=s0; end  
        end
w0: nstate<=s1;
s1: nstate<=w1;
w1: nstate<=s2;
s2: nstate<=w2;
w2: nstate<=s3;
s3: nstate<=w3;
w3: nstate<=s4;
s4: nstate<=w4;//1delay
w4:nstate<=s5;
s5:begin  if(!done1) nstate<=s1;
else if(done) nstate<=s6; end
endcase
end
    
pregunta Sandeep I

0 respuestas

Lea otras preguntas en las etiquetas