三段式状态机设计 (三段式状态机verilog)
本文目录导航:
三段式状态机设计
有限状态机采用三段式风格,即三个always块描述状态机. 优点:书写清晰,组合与时序分离设计,易于综合,且在一定程度上避免了状态转移和输出等组合逻辑中的毛刺. 主要目的是为了提高状态机的可读性,为分析逻辑功 能提供方便,也可以是cstate or nstate. 建议使用的独热码,电路的速度和可靠性有显著的提高,但注意:存在多余的状态,就有一些不可到达的状态,需要在case语句的最后,加default分支,以确保能回到IDLE状态。

基于FPGA的贪吃蛇游戏设计(八)——状态机设计
Verilog语言通过不同的always语句块实现硬件电路的并行执行,但在实际工程中,除了并行执行电路外,有时也需要串行执行的电路。
这时,可以选择有限状态机FSM(Finite State Machine)来实现。
状态机由状态寄存器和组合逻辑电路构成,可以根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。
有限状态机主要分为两大类:Mealy状态机:时序逻辑的输出不仅取决于当前状态,还与输入有关;Moore状态机:时序逻辑的输出只与当前状态有关。
贪吃蛇游戏采用的是Mealy状态机模型。
根据代码的设计方式,状态机可以分为一段式、二段式和三段式。
一段式写法是把所有的逻辑(输入、输出和状态)都放在一个always语句块中,这种后期不易维护。
在简单的状态机可以使用。
二段式写法就是有两个always块,把时序逻辑和组合逻辑分隔开来。
时序逻辑里进行当前状态和下一状态的切换,组合逻辑实现各个输入、输出以及状态判断。
这种写法不仅便于阅读、理解、维护,而且有利于综合器优化代码,有利于用户添加合适的时序约束条件,有利于布局布线器实现设计。
在两段式描述中,当前状态的输出用组合逻辑实现,可能存在竞争和冒险,产生毛刺。
要求对状态机的输出用寄存器打一拍,但很多情况下不允许插入寄存器节拍,此时使用三段式描述。
其优势在于能够根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而不需要额外插入时钟节拍。
三段式写法就是有三个always块,一个时序逻辑采用同步时序的方式描述状态转移,一个采用组合逻辑的方式判断状态转移条件、描述状态转移规律,第三个模块使用同步时序的方式描述每个状态的输出。
三段式代码容易维护,时序逻辑的输出解决了两段式组合逻辑的毛刺问题,但是从资源消耗的角度上看,三段式的资源消耗多一些。
这里用一段式状态机来完成游戏的控制过程:关于这四个状态的描述请参考第一篇(整体描述):友晶科技FPGA:基于FPGA的贪吃蛇游戏设计(一)2个设计点提醒:这个cnt_clk计数器这里不能写成cnt_clk=,因为第6秒的时间只有一瞬间,当这个时候没有拨动SW时,其他时刻它就不再去判断SW的情况了。
当游戏结束时,按任意键触发游戏重新开始,cnt_clk和flash_cnt两个计数器清零,不然重新开始的时候会跳过欢迎界面,以及再次游戏结束时蛇不会闪烁。
其实就是要确保在重启状态下,所有的条件要回到与复位时一样。
蛇身方向控制用一个三段式的4状态的状态机来实现。
四个状态分别是上、下、左、右。
状态机第一段:完成初始化状态,以及完成当前状态转换到下一状态的时序逻辑:首先方向一定要初始化,否则方向就会错乱,虽然这里初始化方向是向右,但实际上运行时起步方向的判断是根据key值来判断。
状态机第二段:在当前状态下,根据当前的输入转换为下一状态的组合逻辑。
根据按键进行三个方向的选择,这里是按键按下的时候,信号传导Direct_next,然后由Direct_next送给Direct_r:状态机第三段:根据当前状态和当前输入产生当前输出的时序逻辑:上面这段代码解释如下:
verilog语法学习2:完全掌握有限状态机的写法
有限状态机(FSM)是Verilog中一个核心概念。
本文将对这一概念进行梳理。
一、使用状态机的目的使用状态机是为了实现有序的逻辑操作。
由于Verilog编程通常在硬件平台上运行,而硬件平台支持并行执行。
然而,并非所有任务都适合并行执行,如泡茶过程就需要按顺序进行,因此,状态机通过状态转换来执行特定的顺序逻辑。
二、状态机的结构与分类状态机的四个要素包括:当前输入、当前状态、下一状态、当前输出值。
状态转换由外部输入(如时钟和当前输入)驱动。
根据输入不同,可分为Moore型和Mealy型两种状态机。
Moore型状态机的输出仅与当前状态有关,而Mealy型状态机的输出与当前状态和输入有关。
仿真结果显示,两者均可实现相同功能,但Mealy型状态机的输出与输入变化同步,而Moore型状态机的输出比输入晚一个时钟周期。
三、状态机的书写流程与要点在了解状态机结构和分类后,我们需要掌握其书写流程。
一般步骤包括:设计状态转移图、编写代码、仿真测试。
其中,格雷码和独热码编码方法需要特别注意。
四、状态机的书写方法常用的状态机书写方法包括一段式、两段式、三段式和特殊状态机。
三段式状态机最为推荐,其资源消耗适中,易于维护。
特殊状态机适用于高速状态机。