首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

vhdl 有限状态机

vhdl 有限状态机

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