Board logo

标题: vhdl 有限状态机 [打印本页]

作者: 苹果也疯狂    时间: 2012-3-2 16:26     标题: vhdl 有限状态机

利用 VHDL 设计的许多实用逻辑系统中,有许多是可以利用有限状态机的设计方案来
描述和实现的。无论与基于 VHDL的其它设计方案相比,还是与可完成相似功能的 CPU相
比,状态机都有其难以逾越的优越性。
       以前看了不少关于如何写VDHL状态机的文章,都是提倡使用二段式或三段式的写法,都建议避免使用一段式的写法,但看了之后,都没什么体会。象我们写软件出身的,心理上总喜欢一段式的写法,觉得思路比较连贯,而且可以写在一个process里,“内聚性”比较高。软件工程师是最讨厌多个函数共用全局变量的了。
       但对于硬件开发,就不一样了。因为VHDL还是无法完全屏蔽掉硬件的物理特性,不好的布局,会使得写的逻辑错误执行。最近写的一个状态机,就遇到了这个麻烦。因为喜好的缘故,加上状态机里面有计数器,用组合逻辑写比较麻烦,于是我用了一段式的写法。结果实际运行的时候,发现状态机经常无故锁死,用逻辑分析仪看,发现陷入了非法的状态,而且when others语句也无法使状态机回到IDLE状态。开始怀疑逻辑上有错误,折腾几天后,把状态切换部分独立出来放在一个同步process里,问题解决了。虽然偶尔还会发现落入非法状态,但状态机会自动恢复到初始状态,不会锁死了,而程序逻辑没有做如何修改。看来以后还是得规规矩矩用二段或三段式的写法了。为了便于记忆,把二段、三段式的特点终结成几句话:
      二段式:状态切换用时序逻辑,次态输出和信号输出用组合逻辑。
      三段式:状态切换用时序逻辑,次态输出用组合逻辑,信号输出用时序逻辑。信号输出的process中,case语句用next state做条件,可以解决比组合逻辑输出慢一拍的问题。
有时候判断次态需要用到计数器怎么办呢(计数器是时序电路,用组合逻辑是实现不了的)?方法是独立实现一个计数器,而在组合逻辑里用使能信号(或清除、置位等)来控制它。





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0