数字逻辑电路设计:状态机相关技术解析
1. 未使用状态处理
在猜谜游戏的状态机设计中,状态图有六个状态,但由三个触发器构建的实际状态机有八个状态。未使用的两个状态在转换列表中被省略,在一定程度上被视为“无关项”,具体处理方式如下:
- 当编写Q1∗和Q0∗的方程时,是对转换列表中对应列明确为1的状态/输入组合的转换p项求和。虽然未考虑未使用状态,但此过程隐含将其在Q1∗和Q0∗列视为0。
- 相反,Q2∗′方程是对转换列表中对应列明确为0的状态/输入组合的转换p项求和,未使用状态隐含在Q2∗列视为1。
这样处理的结果是,猜谜游戏状态机中所有未使用状态在任何输入组合下的编码下一状态都是100,这是安全的,因为100是正常状态(SOK)的编码。
若要将未使用状态视为真正的“无关项”,需允许它们在任何输入组合下转换到任意下一状态。理论上简单,但实际操作可能有难度。在卡诺图法开发转换/激励方程时,可将未使用状态作为“无关项”处理,但对于较大问题,卡诺图使用不便。商业逻辑最小化程序能处理较大问题,但很多不支持“无关项”,或需设计者插入特殊代码处理。在ABEL状态机中,可使用@DCSET指令较容易处理无关下一状态;在VHDL中,处理过程稍复杂。
2. 输出编码状态分配
猜谜游戏状态机的输出仅取决于状态,且每个命名状态产生不同的输出组合。因此,可将输出作为状态变量,将每个命名状态分配给所需的输出组合。这种输出编码状态分配有时能得到比使用最少状态变量的状态分配更简单的激励方程。
以下是使用输出作为状态变量的猜谜游戏转换列表:
|当前状态|S|L1|L2|L3|L4|ERR|转换表达式|下一状态|S∗|L