сингнал 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 уарта, а также все остальные сигналы.
Заранее согласен, что можно было добавить больше состояний. Тем не менее переходы выполняются корректно, и к самой машине состояний вроде как претензий, кроме наглядности кода, нет.
|