当前位置:文档之家› 有限状态机的设计

有限状态机的设计


状态化简
17个状态需要 5位的状态码 15个状态只需 要4位的状态码
重复的状态: •相同的输出,以及 •相同的转换条件 这里有两个重复的状态
用Verilog对摩尔型售货机建模
• 参照上面的结构,用Verilog建模是很容易的, 只要分别描述各个模块。 • 状态寄存器(时序逻辑的always语句块)。 • 下一个状态,组合逻辑(组合逻辑的always语 句块,使用case语句)。 • 输出组合逻辑块(组合逻辑的always语句块或 者使用assign连续赋值语句)。
系统内会出现哪些状态?
• 起始状态: • 对于不同的输入可能出现的状态: • 在交易前,售货机可以投入的最多金额是 多少?
– 售货机内已有25美分,此时只有一个25美分 25 , 25 的硬币可以使用…
• 找零的状态转换
用moore型状态机完成对控制核心的建模
•将所有可能出现的状态 罗列出来,并连接各个 状态之间的转换关系, 标注转换条件,可以得 到如左图所示的呢?能否对这一 很直观的方案作进一步 的优化?
有限状态机的设计
• 什么是状态机? 什么是状态机?
– 状态机是由寄存器组和组合逻辑构成的硬 件时序电路; 件时序电路; – 其状态(即由寄存器组的1和0的组合状态 其状态(即由寄存器组的1 所构成的有限个状态)只能在同一 同一时钟跳 所构成的有限个状态)只能在同一时钟跳 变沿的情况下, 变沿的情况下,才能从一个状态转向另一 个状态; 个状态; – 一个状态究竟转向哪一状态,不但取决于 一个状态究竟转向哪一状态, 各个输入值,还取决于当前状态。 各个输入值,还取决于当前状态。 – 状态机可用于产生在时钟跳变沿时刻开关 状态机可用于产生在时钟跳变沿时刻开关 的复杂的控制逻辑, 的复杂的控制逻辑,是数字逻辑的控制核 心。
对输出产生毛刺的修正
• 将使用assign 赋值的组合逻 辑输出模块用 always描述的 时序逻辑替换。
Mealy型的状态机可以 有效地减少状态的个数
将Moore型状态图转 换为Mealy型状态图
状态 输出
通过上面的例子做一个小结
• 使用两种类型的状态机对自动售货机控制核心 的逻辑进行了设计
– 摩尔型:输出是当前状态的函数 – 米利型:输出不但和当前状态有关还和输入有关
• 对于状态机的代码设计可以使用标准的模板。 • 以组合逻辑输出很可能会产生竞争冒险(毛刺 信号),对后续模块有影响。
练习
• 设计一个电路能侦测序列中连续出现三 个或三个以上的”1”。
设计示例
A/G=0 !Reset/F=0 G=0 !Reset /F=0 G=0
!Reset /F=0 G=0
Start
!A
Idle Stop
!Reset | !A/F=0 G=1
Clear
A/F=1
米利型和摩尔型状态机 摩尔型
•在米利型状态机里,输出值是现态和输入值两 者的函数;但在摩尔型状态机中,其输出值仅 是现态的函数。 •讨论上述状态机时,有些书籍会称这两种时序 电路为有限状态机(finite state machine, 缩写成FSM),属米利型的时序电路被称为 米利FSM或米利机,属摩尔型的时序电路被 称为摩尔FSM或摩尔机。
状态 输出
有限状态机输出的毛刺问题(glitch)
• 多位的状态码输出时,未必能精确的同时到达。 • 输出使用的组合逻辑可能会造成竞争冒险。 • 所以说,设计的有限状态机可能存在毛刺问题。
先看这两个状 态的转换过程 状态寄存器很可 能会这样变化 引起信号DC的输 出产生一个毛刺
如果这个情况发生,那么你就可以使用20美分获得一瓶饮料
区分两种状态机是由它们 输出的产生来判断
状态图
自动售货机逻辑的设计
• 项目:饮料自动售货机,请为 项目 其设计控制核心。 • 单价:所有饮料均为30美分 单价 ($0.30)。 • 找零:10美分和5美分。 找零 • 输入 输入:一次只能投入一枚硬币。 – Q: 25美分 25美分 – D: 10美分 10美分 – N: 5美分 5美分 • 输出:一次输出一件物品(饮 输出 料或硬币)。 – DC: 饮料 – DD: 10美分 10美分 – DN: 5美分 5美分
相关主题