三段式状态机

   此文摘抄网名为crazybingo的书中的对三段式状态机的介绍。

在FPGA逻辑设计中,如果状态机比较大,需要的状态转移、信号等的处理比较复杂,建议使用三段式状态机来完成设计,当采用三段式建模描述FSM的状态机输出时,只需要指定case敏感表为次态寄存器,然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。

  虽然三段式描述方法的代码结构复杂一些,但是换来了很多的好处:使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定性和毛刺的隐患,而且更利于时序路径的分组,使得其在fpga/cpld中的综合和布局布线的效果更佳。另外三段式状态机的结构统一,便于维护,在设计思路上非常清晰。

在第一个进程中,同步时序always模块,格式化描述次态寄存器转移到现态寄存器:

//FSM:always1

reg [2:0] c_state,n_state;

always@(posedge clk or negedge rst_n)

begin

     if(!rst_n) 

          c_state<=IDLE;

   else 

         c_state <=n_state;

end

在第二个进程中,组合逻辑always模块,判断状态并且描述状态转移(注意状态要写完整):

//FSM2

always@(*)

begin

        n_state = IDLE;

        case(c_state)

        S1:begin

             if(...) 

             n_state =S2;

             else 

             ......

             end

       S2:...

           ......

       endcase

end

 在第三个进程中,同步时钟always模块,格式化的描述次态寄存器的输出。

//FSM3

always@(posedge clk or negedge rst_n)

begin

if(!rst_n) 

        .....

else 

     case(n_state)

     S1:....

     S2:....

     .....

     default:;

     endcase

end


状态机是时序电路的万能钥匙,所有时序电路都能通过状态机实现,。状态机是FPGA逻辑电路设计的精髓,现实世界都是线程的并行,熟练掌握状态机,是学好FPGA的必经之路。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值