一.有限状态机的基本结构和功能
- FSM (Finite State Machine)是数字逻辑电路以及数字系统的重要组成部分,尤其应用于数字系统核心部件的设计,实现高效率高可靠性逻辑控制。
- 可替代MCU,或在MCU中做规范设计
时序逻辑:控制状态,需要时钟
两个基本功能:
- 根据当前状态和输入条件完成内部状态转换
- 根据当前状态和输入条件产生输出信号序列
例
用三进程状态机实现一个简单自动售货机控制电路,电路框图如下图有两个投币口(1元和5角),商品2元一件,不设找零ln[0]表示投入5角,ln[1]表示投入1元,Out表示是否提供货品
S0(00001):初始状态,未投币或已取商品
S1(00010):投币5角
S2(00100):投币1元
S3(01000):投币1.5元
S4(10000):2元及以上
独热码表示状态编码
二.状态机状态编码
- 二进制编码方式:用N位二进制数,表示M个工作状态,
。3位二进制可表示不多于8个状态
- 一位热码编码方式:N位二进制数表示N个状态,每位编码对应一个触发器,每个状态由其中一个触发器的状态来表示 。3位二进制可表示不多于3个状态
三.有限状态机的技术优势
- 设计方案相对固定,模式简单,可定义符号化枚举类型的状态
- 状态机Verilog HDL 描述层次分明,结构清晰,易读易懂
- 基于有限状态机设计技术的控制器工作速度大大优于CPU
- 基于有限状态机设计技术的控制器可靠性也优于CPU
四.有限状态机的分类
五.有限状态机的Verilog模式
例:一般有限状态机设计及组成
module fsm_seq101(clk,clr,x,z);
input clk,clr,x;
output reg z;
reg[1:0] state,next_state;
parameter S0=2'b00,S1=2'b01,S2=2'b11,S3=2'b10; //状态编码,格雷码
always@(posedge clk or posedge clr) //过程一,现态定义
begin
if(clr)state<=S0;
else state<=next_state;
end
always@(state or x) //过程二,次态定义
begin
case(state)
S0: begin if(x) next_state<=S1;
else next_state<=S0;
end
S1: begin if(x) next_state<=S1;
else next_state<=S2;
end
S2: begin if(x) next_state<=S3;
else next_state<=S0;
end
S3: begin if(x) next_state<=S1;
else next_state<=S2;
end
default: next_state<=S0;
endcase
end
always@(state) //过程三,输出组合逻辑
begin case(state)
S3:z=1'b1;
default:z=1'b0;
endcase
end
endmodule