FPGA——状态机

FPGA——状态机

状态机

状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(Finite State Machine),主要分为2大类:

1.Mealy 状态机

输出跟外部输入和当前状态共同决定

2.Moore状态机
在这里插入图片描述
输出只和状态有关而与输入无关

FPGA-程序设计

四段论
1.状态空间定义
2.状态跳转
3.下个状态判断
4.确定状态时刻目的

// 状态空间定义
parameter  look_book    =   3'b001;
parameter  play_game    =   3'b010;
parameter  sleep        =   3'b100;

reg  [2:0]    state_current      ;
reg  [2:0]    state_next         ;

简单起见,只定义了两个状态的转移,在每个状态只用一个寄存器置位,采用独热码方式。

// 状态的转移
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
         state_current <= sleep;
    end
    else begin
         state_current<=state_next;
    end
end 

状态的转移 为时序逻辑,即采用非阻塞赋值。在复位时,状态为look_book,否则将次态赋给现态。

// 下一状态的判断
always  @(*)begin
    case(state_current)
       sleep: begin
           if(study_time)
                state_next = look_book   ;
           else
                state_next = sleep       ;
       end
       look_book:begin
           if(play_time)
                state_next = play_game   ;
           else
                state_next = look_book       ;
       end
       play_game:begin
           if(play_time)
                state_next = sleep   ;
           else
                state_next = play_game       ;
       end
       default:sleep;
   endcase
        
end 

在下一个状态设计中我们采用组合逻辑的方法,一般在状态判断会有多个条件都会在always语句中这是我们可以用"*“来代替"look_book or play_game or sleep”

// 确定状态时刻目的
wire  Incident_one ;
assign Incident_one = (state_current == sleep)? 1'b1:  1'b0;

利用条件语句,完成对事件判断当state_current == sleep条件为真时Incident_one = 1’b1,否则Incident_one = 1’b0。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值