[X]关闭

三段式状态机

文档创建者:贾文洋
浏览次数:4040
最后更新:2016-01-06
在FPGA逻辑电路中,如果状态机比较大,需要的状态转移、信号等处理比较复杂,建议使用三段式状态机来完成设计。当采用三段式建模描述FSM的状态机输出时,只需要指定case敏感表为次态寄存器,然后直接在每个次态的case分支中描述该状态的输出即可,不需要考虑状态转移条件。
虽然三段式描述方法的代码结构复杂了一下,但是换来了很多好处:使FSM做到了同步寄存器的输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更有利于时序路径分组,并且便于维护。
三段式结构:
1:
     reg [2:0] current_state,next_state;
always@(posedge clk or negedge rstn)
begin
if(!rstn)
current_state<=scan_idle;
else
current_state<=next_state;
2:
always@(*)
begin
          next_state=IDLE;
      case(current_state)
          S1:if(...)
                     next_state=S2:
                else.....
           S2:........
   endcase
end
3:
always@(posedge clk or negedge rstn)
begin

   if(!rstn)
....
else
case(next_state)
S1:
S2:
......
dafalut
endcase
end



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则