сингнал start изначально находится в единице (инициализируется значением) :
initial
begin
state = IDLE;
start = 1'b1; // <------
......
end
по входу в состоянии IDLE первый раз, в данном коде, просто осуществляется переход в следующее состояние WR_CFG_MGMT,
по второму фронту в состоянии WR_CFG_MGMT устанавливаются нужные сигналы,
по третьему фронту в состоянии WR_CFG_MGMT снимаются управляющие сигналы, переход в состояние RD_CFG_MGMT,
по четвёртому , в состоянии RD_CFG_MGMT выставляются управляющие сигналы на чтение из регистра
по пятому в состоянии RD_CFG_MGMT снимаются управляющие сигналы, переход в состояние TRY_DATA,
по шестому - host контроллер должен был выставить данные на host_rd_data , установка wr_en для уарта, переход в состояние IDLE
по седьмому - в другой ветке IDLE снимаем сигнал wr_en уарта, а также все остальные сигналы.
Заранее согласен, что можно было добавить больше состояний. Тем не менее переходы выполняются корректно, и к самой машине состояний вроде как претензий, кроме наглядности кода, нет.