Упорно не получается сделать FSM так что бы работало

. Я наверное что-то не понимаю

.
После первых экспериментов, воспользовался smf файлом, и нарисовал что нужно.
Смотрю симулятором и в железе EP2C5T144C8 @ 100Мгц.
Quartus генерирует код вида:
Код
always @(posedge clock)
begin
if (clock) begin
fstate <= reg_fstate;
end
end
always @(fstate or reset or tx_busy or f_smpl_rdy or f_all_reg)
begin
if (reset) begin
...
end
else begin
case (fstate)
WAIT: begin
if (f_smpl_rdy)
reg_fstate <= START_PACKET;
// Having else block to avoid latch inference
else
reg_fstate <= WAIT;
...
end
На это квартус говорит:
Код
Warning (10240): Verilog HDL Always Construct warning at bsc.v(56): inferring latch(es) for variable "f_adrrst", which holds its previous value in one or more paths through the always construct
В симуляторе работает, в железе виснет. Мне сначала показалось, что разумным было бы внести все в один блок always @(posedge clock) и это естественно устраняет варнинг, но получается бред если посмотреть в RTL Viewer и в симуляторе.
Когда убираю регистр fstate и вношу все в один блок always @(posedge clock) и делаю case (reg_fstate), вроде все начинает работать но только в симуляторе.
Направте не путь истинный, как реализовать FSM, почему код генерируемый стандартными стредствами IDE приводит к защелкиванию схемы?