FPGA学习日记13——状态机

一、状态机

(一)为什么要使用状态机

FPGA为并行执行,如果想要处理具有前后顺序的事件就需要用到状态机

(二)什么是状态机

状态机简写:FSM(Finite State Machine),同步有限状态机(同步是指状态机中所有跳转都是在同一时钟的作用下发生的),简称状态机。分类:Moore型、Mealy型(在数电中有介绍是时序逻辑电路的分类,米利型电路输出信号不仅取决于存储电路的状态还取决于输入变量;莫尔型电路输出信号只取决于存储电路的状态)

状态机的每一个状态代表一个事件,状态机适合描述事件有先后发生顺序(计数器、微处理器等等)

状态机表示方法:类似于时序电路的状态转换图

(二)状态机程序设计

从实际中抽象出时序事件,得到状态转换图进而设计状态机。

二、实践——可乐售卖机

module cola_machine (
    input wire clk,
    input wire rst_n,
    input wire pi_money,
    output reg po_cola
);
    reg [1:0] state;
    
    parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10;

    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            state <= S0;
            po_cola <= 0;
        end else begin
            case (state)
                S0: begin
                    if (pi_money == 1'b1)
                        state <= S1;
                    else
                        state <= S0;
                end
                S1: begin
                    if (pi_money == 1'b1)
                        state <= S2;
                    else
                        state <= S1;
                end
                S2: begin
                    if (pi_money == 1'b1)
                        state <= S0;
                    else
                        state <= S2;
                end
                default: state <= S0;
            endcase
        end
    end
    
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            po_cola <= 1'b0;
        else if ((state == S2) && (pi_money == 1'b1))
            po_cola <= 1'b1;
        else
            po_cola <= 1'b0;
    end
endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值