第5章 状态机
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、状 态 机 状 态 定 义 与 编 码
`define S0 2’b00; //定义状态编码 ③采用编译引导语句声 `define S1 2’b01; 明状态方式:就是采用 …; define语句定义状态。 module mealyFSM(clk,din,reset,dout); …; 语句格式: integer mealystate;//定义状态变量 `define <宏名><宏文本> always(mealystate,din) case (mealystate) 该语句在编译时用“宏文 S0:…; S1:…; 本”替代代码中的”宏 名”,这种方法可以提高 …; default:…; 程序的可读性,与上面的 endcase 参数定义类似。 endmodule
3、几种典型逻辑电路的状态机设计
⑴Moore型FSM的设计 Moore型状态机的输出只与有限状态机的当前状态有关, 与输入信号的当前输入无关,即可将Moore型有限状态机 的输出看成是当前状态的函数,次态=f(现状,输入), 输出=f(现状)。
Next state din current state
2、 有限状态机的几种描述方式
(1)用三个过程描述:即现态(CS)、次态(NS)、 输出逻辑(OL)各用一个always过程描述。 (2)双过程描述(CS+NS、OL双过程描述):使用两 个always过程来描述有限状态机,一个过程描述现态和次 态时序逻辑(CS+NS);另一个过程描述输出逻辑(OL)。 (3)双过程描述(CS、NS+OL双过程描述):一个过 程用来描述现态(CS);另一个过程描述次态和输出逻辑 (NS+OL)。 (4)单过程描述:在单过程描述方式中,将状态机的现 态、次态和输出逻辑(CS+NS+OL)放在一个always 过程中进行描述。
每个二进制位占有一个触发器,所以描述同样的状态数,二 进制编码、格雷编码和约翰逊编码所需触发器少,而独热编码相 对较多。但从编译角度来看,独热码相对其它三种简单。
各种编码比较
二进制编码、格雷码编码和约翰逊编码使用最少的触发器, 消耗较多的组合逻辑,而独热码编码反之。独热码编码的最大 优势在于状态比较时仅仅需要比较一个位,从而一定程度上简 化了译码逻辑,减少复杂性,提高系统的速度,即工作时钟频 率可以做到最高 。虽然在需要表示同样的状态数时,独热编 码占用较多的位,也就是消耗较多的触发器,但这些额外触发 器占用的面积可与译码电路省下来的面积相抵消。 在CPLD中,由于器件拥有较多的提供组合逻辑资源,所 以CPLD多使用二进制编码、约翰逊码或格雷码,而FPGA更 多地提供触发器资源,所以在FPGA中多使用独热码编码。当 然,这并不是说在FPGA中就非得用独热编码,在CPLD中不 能用独热编码,一般的,对于小型设计(状态数小于4)使用 二进制编码,当状态数处于4-24之间时,宜采用独热码编码, 而大型状态机(状态数大于24)使用格雷码更高效。
3. 主控组合过程
状态机状态图及仿真结果
3、状 态 机 状 态 定 义 与 编 码
⑴状态机状态定义方式 ①整数定义编码方式:就是采用简单的整数表示 状态机的各种状态。优点是简单,但缺点是可读 性差且不方便修改。
integer mealystate;//定义状态变量 …; case (mealystate) 0:…; //直接使用整型数状态编码 1:…; …; default:…; endcase
格雷编码
5.2 FSM状态机设计方法
1、采用Verilog HDL描述有限状态机设计原则
⑴根据系统要求确定状态数量、状态转移的条件和 各状态输出信号的赋值、并画出状态转移图。如下 图:
⑵按照状态转移图编写状态机的Verilog HDL代 码。 ⑶利用EDA工具对状态机的功能进行仿真验证。
各种编码比较
如描述6个状态的编码: 二进制编码: 000,001,010,011,100,101 独热编码: 000001,000010,000100,001000, 010000,100000 格雷编码: 000,001,011,010,110,100 约翰逊编码: 000,001,011,111,110,100
第5章 Verilog有限状态机设计
本章内容
5.1、FSM概述 5.2、FSM设计方法
5.1 状态机概述
1、FSM概念
在数字系统中,有限状态机(FSM,Finite State Machine)是一类十分重要的时序电 路。微控制器的核心就是FSM。因此学习 FSM的原理及设计方法对于学习数字系统设 计和理解计算机原理都有重要意义。 本章首先概要介绍FSM的相关理论知识,通 过典型实例说明FSM的设计方法。
1、FSM概念
有限状态机由输入和输出和具有记忆功能的寄存器 组成,寄存器用于寄存状态机内部状态,也称状态寄存 器。 状态机的下一个状态不仅与输入信号有关,还与该 寄存器的当前状态有关,因此有限状态机可看作是组合 逻辑与时序逻辑的一种组合。其中的时序逻辑功能是存 储有限状态机的内部状态;而组合逻辑又可分为次态产 生逻辑和输出逻辑两部分,次态产生逻辑的功能是确定 有限状态机的下一个状态,输出逻辑功能是确定有限状 态机的输出。 由于FSM的描述较为复杂,因此不能使用原理图方法 进行描述,而必须采用Verilog HDL语言进行行为级设 计。
… integer mealystate;//定义状态变量 parameter S0=0,S1=1,S2=2,S3=3; always(mealystate,din) case (mealystate) S0:…; S1:…; …; default:…; endcase endmodule
//定义状态编码
2、 有限状态机FSM组成
摩尔型(Moore)状态机
米里型(Mealy)状态机
单纯的Moore型或Mealy型比较少,常见是两种混合型设计。
例如: 状态机的一般控制形式
如图状态机的基本结构
状态机功能结构描述
7.1.1 状态机的基本结构 3. 主控组合过程
4. 辅助过程 接下页
状态机功能结构描述
reset
S1
1/0
S2
下一状态 当前状态 din=0 s1,0 s1,0 s1,1 din=1 s0,0 s2,0 s0,0
s0=00 s1=01 s2=11
由输入信号检测010序列Verilong程序
module mealyfsm(clk,reset,din,dout, cs_state,ns_state); output dout; s1:begin output [1:0] cs_state,ns_state; dout=1'b0; input clk,reset,din; ns=(!din)?s1:s2; reg dout; end //用格雷码编码声明状态值 s2:begin parameter [1:0] s0=2'b00,s1=2'b10,s2=2'b11; reg [1:0]cs,ns; dout=(din)?1'b0:1'b1; assign cs_state=cs,ns_state=ns; ns=(din)?s0:s1; always@(posedge clk,posedge reset)begin end if(reset==1'b1) //异步复位,高电平有效 default:begin cs<=s0; dout=1'b0; else ns=s0; cs<=ns; end end //次态计算及输出信号产生, endcase always@(cs,din) endmodule case(cs) s0:begin dout=1'b0; if(din===1'bx)ns=s0; else ns=(din)?s0:s1;
Moore型状态机Verilog描述程序
module mooreFSM(clk,reset,din,dout,CS_state,NS_state); input clk,reset,din; output dout;output [3:0] dout,CS_state,NS_state; reg dout; //one-hot code parameter S0=4'b0001,S1=4'b0010,S2=4'b0100,S3=4'b1000; reg [3:0] CS,NS;assign CS_state=CS,NS_state=NS; always @(posedge clk , posedge reset) begin if(reset==1'b1) CS<=S0; else CS<=NS; end 0 always @(CS or din or NS ) begin case(CS) S0 S0: begin dout<=1'b0; 1 0 0 if(din===1'bx)NS=S0; else NS=(!din)?S0:S2; end S1 1 S1: begin dout<=1'b1; S2 1 NS=(!din)?S0:S2; end 1 S2: begin dout<=1'b1; NS=(!din)?S2:S3; end 1 S3 S3: begin dout<=1'b0; 1 0 NS=(!din)?S3:S1; end default:begin dout=1'b0; 0 NS=S0; end endcase end endmodule
0
S0 0
1
1
din clk dout
reset
S1 1
S2 1
1
0
பைடு நூலகம்
1 输出 dout 0 1 1 0
S3 0 0
设计方式采用双过程描述 (CS、NS+OL双过程 描述):一个过程用来描 述现态(CS);另一个 过程描述次态和输出逻辑 (NS+OL)。
独热码各状态跳转控制相对灵活,并且各状态转化控制速度基本相同。
这种方式不可能例举所有状态,所以必须使用default语句避免综合生成多余 的锁存器。
3、状 态 机 状 态 定义与编 码
②采用参数语句声明状态方式:就是采用 parameter语句定义状态。优点是具有较好的 状态可读性,也易修改状态,但缺点是综合优化 较差。 module mealyFSM(clk,reset,dout);
0
仿真结果
可见dout输出由当前状态CS_state(或CS)决定,而现态的转变只 能在时钟控制下依次态而变,而次态NS_state(或NS)由输入din和当 前状态CS决定。这就是mooreFSM状态机工作特点。
⑴Mealy型FSM的设计
Mealy型状态机的输出不仅与有限状态机的当前状态 有关,还与输入信号有关,即可将Mealy型有限状态机的 输出看成是当前状态和输入的函数,次态=f(现态,输 入),输出=f(现态,输入)。
Next state 次态逻辑 (组合逻辑) reset current state 输出逻辑 (组合逻辑)
din
dout
clk
当前次态逻辑 (寄存器) reset
可见moore型有3部分组成:次态逻辑、当前状态逻辑和输出逻辑。
例如:由输入信号中检测010序列
1/0
din clk dout 0/0 S0 0/1 0/0 1/0
dout 次态逻辑 (组合逻辑)
reset clk
当前次态逻辑 (寄存器)
reset
输出逻辑 (组合逻辑)
可见moore型有3部分组成:次态逻辑、当前状态逻辑和输出逻辑。
例如: Moore型状态机设计
采用四种状态描述, 在状态控制下的输 出过程。而次态又 由输入和当前状态 决定。
下一个状态(次态) 当前状态 S0=0001 S1=0010 S2=0100 S3=1000 Din=0 S0 S0 S2 S3 Din=1 S2 S2 S3 S1 0
思考一下电梯运动控制过程?
电梯从一楼到顶楼是一系列楼层,电梯到达 每一层要显示该层楼层信息,还要由乘坐人 控制去那一层,在经过的楼层还要判断是否 有相同方向的人乘坐,这一系列控制判断过 程如何设计呢?
一层 二层
三层
四层
N层
将整个电梯控制过程运行状态分解为N个状态,在每个状态下决定下一步 如何控制,这就是将复杂状态的运动过程分解为一系列状态过程,这就是 状态机设计思想。
3、状 态 机 状 态 编 码
简单状态编码直接可采用前面的整数定义编码方式,但复 杂设计必须采用如下编码方式进行。
⑵复杂状态机状态编码方式
①二进制编码:是二进制数连续编码,这种方法在小型状 态机中常用,较其它方法好。 ②格雷编码(Gray code):码间只有一位不同的编码 方式。 ③独热编码(One-Hot code):每个编码只有一位是1, 其它都是0。 ④约翰逊编码(Johnson code):是在约翰逊计数器 基础上引入的编码,相邻间的编码也只有一个不同。