一、状态机
(一)为什么要使用状态机
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