对于前端工程师而言,设计状态机是最基本的技能,状态机就像电路的指挥中心,控制着电路的各种数据路径,所以是至关重要的。下面就来简单回顾一下状态机的一些基本概念。
何时使用状态机:
状态机是用于描述有逻辑顺序的电路。即在拿到一个模块的功能描述后,有类似“先....然后...再”或者“如果....如果...."这类描述的时候,可以考虑使用状态机。
关于何时使用状态机,这里介绍两种常见的情况:
- 第一种思路,从状态入手,如果一个模块有比较明显的时序顺序或者逻辑顺序,可以将其划分成不同的状态,然后考虑什么时候进行状态跳转。
- 第二种思路是从输出入手,一个模块要输出数据,什么时候(状态)输出什么样的数据,什么时候改变输出的数据(状态的跳转和输入),通过这样的形式来进行回溯。
无论哪种思路,使用状态机的目的都是要控制某部分电路,完成某种具有逻辑顺序或时序规律的电路设计。 其实对于逻辑电路而言,小到一个简单的时序逻辑,大到复杂的微处理器,都适合用状态机方法进行描述。
状态机基本要素与分类:
状态机的基本要素有 3 个,它们是:状态、输出和输入。
- 状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。可以使用one-hot或者二进制编码来作为状态变量,更好的办法是使用电路中已有的信号的不同值来作为状态变量,这样可以大大节省电路资源,不必要创建新的信号。比如一些协议转换时候输入编码的某几位功能位。
- 输出:输出指在某一个状态时向外界输出的信号,常常是控制信号,比如读写信号,使能信号。
- 输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的状态转移较为简单,有的状态机有输入条件,当某个输入条件存在时才能转移到相应的状态。
根据状态机的输出是否与输入条件相关,可将状态机分为两大类:摩尔(Moore)型状 态机和米勒(Mealy)型状态机。
摩尔状态机:摩尔状态机的输出仅仅依赖于当前状态,而与输入条件无关。
- 米勒型状态机:米勒型状态机的输出不仅依赖于当前状态,而且取决于该状 态的输入条件。
状态机的基本描述方式:
一般用于状态机状态描述的方法有2种,分别是:状态转移图,和 HDL 语言描述。
- 状态转移图:状态转移图是状态机描述的最自然的方式。经常在设计规划阶段定义逻辑功能时使用,也可以在分析代码中状态机时使用,通过图形化的方式非常有助于理 解设计意图。使用一些EDA工具也可以生成状态转移图便于进行分析,当然前提是HDL代码的书写要规范。
- HDL 语言描述状态机,目前对于状态机有一些固定规范的描述方法,可以使 HDL 语言描述的状态机更安全、稳定、高效、易于维护。
热门跟贴