状态机设计的一般步骤_FPGA菜鸟学习笔记——4、有限状态机

cdf793416d0bc573325175ca29417424.png

1、何为数字系统?

采用数字电子技术实现数字信息处理、传输与控制的数字逻辑单元集合称为数字系统。数字系统一般包括数据处理器和控制器两个部分。

dc75ffb0fdd39d38feb8ece05956ff48.png

数据处理器:由寄存器和组合电路组成。寄存器用于暂存信息,组合电路实现对数据的加工和处理。

控制器:决定数据处理器的操作和操作序列。控制器决定操作步骤,可以记忆当前步骤,也可以确定下一步骤,因此控制器中包含存储器,用来记忆操作步骤,及时根据外部输入和数据处理器的状态信息来确定下一个操作步骤。

大部分数字系统都可以划分为数据模块控制模块。数据模块完成数据处理,产生系统的输出信号、数据运算状态等信息。控制模块实际上就是一个状态机,它接收输入信号以及数据模块产生的数据信息,经状态机控制后产生控制信号,因而状态机的性能好坏对整个系统的性能有很大影响。

2、何为有限状态机?

有限状态机(Finite State Machine,FSM),顾名思义,就是一系列数量有限的状态组成的循环机制。它是由寄存器和组合逻辑构成的硬件时序电路。状态机通过控制各个状态的跳转来控制流程,使得整个代码看上去更加清晰易懂,在控制复杂流程的时候,状态机优势明显,因此基本上都会用到状态机,如SDRAM控制器等。FSM设计技术是实现数字逻辑设计的重要组成部分,是实现高效率、高可靠性控制逻辑的重要途径。通过状态转移图设计手段可以将复杂的控制时序图形化表示,分解为状态之间的转换关系,将问题简化。

根据状态机的输出是否与输入条件相关,可将状态机分为两大类,即摩尔(Moore)型状态机和米勒(Mealy)型状态机。

(1)Moore状态机:组合逻辑的输出只取决于当前状态。Moore机属于异步输出状态机,它的输出仅为当前状态的函数,与当前输入信号状态无关。

33299fbc561a92153ee5de6a2126532b.png

(2)Mealy状态机:组合逻辑的输出不仅取决于当前状态,还取决于输入状态。Mealy机属于同步输出状态机,它的输出是当前状态和所有输入的函数,其输出会在输入变化后立即发生,不依赖于时钟的同步。

6d59e11b0ad6522a1acd09061a53d232.png

3、设计FSM的基本步骤?

(1)画出状态转移图

把实际系统进行逻辑抽象,即实际问题转化为设计要求。首先确定电路输入输出引脚;然后根据实际需要列出所有的状态情况,并对状态顺序进行编号;最后根据状态转移条件画出状态转移图。

(2)确定状态编码和编码方式

编码方式的选择对所设计的电路复杂与否起着重要作用,要根据状态数目确定状态编码和编码方式。

(3)给出状态方程和输出方程

列写状态转移表,选定触发器类型,通过卡诺图化简给出状态方程和输出方程。(此步在FPGA编程中可省略)

(4)编写Verilog代码

按照步骤(1)~(2)编写具有可综合的Verilog代码。

4、何为编码方式?

用Verilog HDL设计实现有限状态机的关键是状态编码,状态机的状态编码规则对设计实现的状态机性能具有很大影响。常用的编码方式有三种:

(1)顺序码:也称二进制编码,就是使用二进制数来表示状态 ,这是一个简单而常用的状态编码方式。

(2)枚举类型状态编码:根据所需要的状态,定义新的枚举类型,并使用枚举类型定义状态变量。

(3)独热码:也称一位有效编码,就是使每个状态占用状态寄存器的一位。

枚举类型状态编码与顺序编码基本相同,所不同的是书写格式不同,用枚举变量来表示状态具有更好的可读性,多用于小型数字系统设计。使用独热码看起来好像很浪费资源,但这种编码方法可以简化各组合逻辑电路之间的内部连接,产生较小的且更快的有限状态机。这对于时序逻辑资源比组合逻辑资源更丰富的可编程逻辑器件来说 , 是比较有效的编码方式。所以强烈推荐独热码。

5、三段式状态机?

根据状态机的实际写法,状态机还可以分为一段式、二段式和三段式状态机。最常用的是三段式状态机,在此介绍三段式状态机。

三段式状态机使用三个always模块:一个always模块采用同步时序描述状态转移(使用状态寄存器);另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律(次态逻辑);最后一个always模块描述状态输出,可以是组合电路输出,也可以是时序电路输出(输出逻辑)。

为了避免不必要的锁存器生成,需要穷举所有状态对应的输出动作,或者使用 default 来定义未定义状态动作;在定义状态时,推荐使用本地化参数定义 localparam(或parameter),这样可以在编写时状态更清晰且不容易出错,也方便修改;在复位或者跑飞能回到初始态或者预定态;要有异步或者同步复位来确保状态机上电有个初始态。

6、三段式状态机代码八股文?

(1)Moore型状态机

b021b52d065db708f07bf876e9b6850d.png
//Moore型状态机的Verilog HDL一般结构:

(2)Moore型状态机

85915ffc8922e091612d633b40cd10cb.png
//Mealy型状态机的Verilog HDL一般结构:

文末说明

本文作者:小强子

知乎ID:Power小强

永远年轻,永远热泪盈眶,永远充满希望,一个嗜好太多能力又太小的普通人。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值