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