Если у вас при нахождении в состоянии S0 ничего, требующего управления от FSM не происходит, то не смешивайте количество тактов и FSM. Просто подавайте на FSM сигнал, по которому будет переход в нужное вам состояние (в примере ниже s0_to_s1):
Код
always @ (posedge CLK) begin
if (RESET)
state <= S0;
else
state <= nextstate;
end
always @* begin
nextstate = state; // loopback
case(state)
S0 : begin
if (s0_to_s1)
nextstate = S1;
end
.....
endcase
end
А счётчик тактов делайте отдельно. Один из вариантов уже предложил Flip-fl0p: сигнал выхода FSM в S0 предзагружает и запускает счётчик, который после каждый такт декрементируется. Когда счётчик досчитывает до нуля, формируется сигнал s0_to_s1 (ну его лучше осмысленно назвать, согласно функции, которую он в дизайне выполняет)
Сообщение отредактировал one_eight_seven - Dec 1 2017, 08:18