三段式状态机,看着很繁琐,但是用起来条理清晰,自己总结一下
第一段:状态改变
这里需要特别注意的是,第5行,状态变化的时候,必须要使用时钟沿,上升或下降,不能在两个沿都变化,虽然这样仿真正确,但是下载到硬件中无效,状态不会变化
1: process(clk,rst_n)
2: begin
3: if(rst_n = '0') then
4: current_state <= s_wait;
5: elsif rising_edge(clk) then
6: current_state <= next_state;
7: end if;
8: end process state_change;
第二段:状态转化
这一段注意:
敏感列表是current_state和process中涉及到变化的所有信号
在case xxx is 前面初始化 next_state <= s_wait; 这样就不用在下面状态中关心这个状态了