有限状态机(FSM)的输出取决于过去状态以及当前输入,是时序逻辑电路。适合描述那些发生有先后顺序或者有逻辑规律的事情,状态机的本质就是对具有逻辑顺序或时序规律的事件进行描述的一种方法,广泛用于多种场合。
因此,掌握有限状态机的Verilog描述方式至关重要;通过许多大神前辈的博客,我了解到状态机的描述具有三种方式,反思自己之前的描述深感逻辑混乱,毫无章法,因此重新对这方面进行学习与记录
一、FSM的组成
状态机:状态机描绘状态变迁的状态迁移图,体现了系统对外界事件的反应;
状态机组成六要素:状态集合,初态,终态,输入符号集,输出符号集,状态转移函数;
状态机工作四要素:现态 ,次态,输入,输出;
状态机主要分为三部分:
状态转移部分,描述状态机在时钟驱动下的状态转移这一过程(现态---次态);
状态转移条件,之前我们已经知道状态机会不断进行状态转移,但是由当前状态转移为何种状态?也就是次态的取值是什么,这个工作是状态转移条件部分来描述执行;
输出部分描述状态机的输出,即当前状态下的输出为什么;
这三部分的描述可以放在Verilog描述过程的不同部分,即对应FSM的三种描述方式;
二、FSM的三种描述方式
一段式FSM描述:状态机写在1个always块,既描述状态转移,又描述状态的输入输出;(但是其各部分杂糅,在功能比较复杂的场合会比较混乱,不建议使用)
二段式FSM描述:鉴于一段式描述的缺点,两段式描述使用2个always块,一个always块利用同步时序逻辑描述状态转移,一个always块利用组合逻辑描述状态转移条件以及输出;(但是输出一般使用组合逻辑描述,而组合逻辑易产生毛刺等不稳定因素,并影响系统执行速率)
三段式FSM描述:三段式描述应运而生,通过使用3个always块,一个always块利用同步时序逻辑描述状态转移,一个always块利用组合逻辑描述状态转移条件,一个always块利用同步时序逻辑描述输出,避免了前两种描述方式的弊端;
更详细的描述见下连接: