Verilog:状态机、Mealy/Moore状态机、三段式状态机

1.定义
状态机,全称是有限状态机(Finite Stata Machine,FSM),是一种在有限个状态之间按一定要求和规律转换的时序电路。状态机通过控制各个状态的跳转来控制流程。在Verilog中编写相关代码时,类似在学习C语言用到的case语句。

2 Moore、Mealy状态机。
根据状态机的输出是否与输入条件相关分为两类:Moore状态机、Mealy状态机。

Moore 状态机:组合逻辑的输出只取决于当前状态。
在这里插入图片描述
Mealy 状态机:组合逻辑的输出不仅取决于当前状态,还取决于输入状态。在这里插入图片描述
3.三段式状态机
根据状态机的实际写法,状态机还可以分为一段式、二段式和三段式状机。

一段式:整个状态机写到一个 always 模块里面,在该模块中既描述状态转移,又描述状态的输入和输出。不推荐采用这种状态机,因为从代码风格方面来讲,一般都会要求把组合逻辑和时序逻辑分开;从代码维护和升级来说,组合逻辑和时序逻辑混合在一起不利于代码维护和修改,也不利于约束。

二段式:用两个 always 模块来描述状态机,其中一个 always 模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出。不同于一段式状态机的是,它需要定义两个状态,现态和次态,然后通过现态和次态的转换来实现时序逻辑。

三段式:在两个 always 模块描述方法基础上,使用三个 always 模块,一个 always 模块采用同步时序描述状态转移,一个 always 采用组合逻辑判断状态转移条件,描述状态转移规律,另一个 always 模块描述状态输出(可以用组合电路输出,也可以时序电路输出)。

实际应用中三段式状态机使用最多,因为三段式状态机将组合逻辑和时序分开,有利于综合器分析优化以及程序的维护;并且三段式状态机将状态转移与状态输出分开,使代码看上去更加清晰易懂,提高了代码的可读性,推荐使用三段式状态机。

三段式状态机的基本格式是:
第一个 always 语句实现同步状态跳转;
第二个 always 语句采用组合逻辑判断状态转移条件;(用always@(*)实现组合逻辑
第三个 always 语句描述状态输出(可以用组合电路输出,也可以时序电路输出)。

注:以上参考正点原子FPGA开发文档。

待更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值