源代码链接:http://download.csdn.net/detail/august717/8743661
问题描述
十字路口南北方向(B)有一组红绿灯,十字路口东西方向(A)有一组红绿灯。
TA,TB分别表示A,B走向是否有学生出现(为True时有学生)。通过当前两组红绿灯的状态和每5秒侦测到的TA,TB来改变两组红绿灯状态。每种红绿灯状态保持5秒。
问题模型
因为可以根据红绿灯状态,和TA,TB值抽象为: 在出现一定TA,TB值时,红绿灯状态转为下一个确定状态。所以为FSM有限状态机模型。
实现方法
实现FSM可以用Moore电路和Mealy电路。(两者是等价的)。
知识准备
1 Moore FSM:
Moore型状态机:下一状态只由当前状态决定,即 次态 = f(现状,输入),输出 = f(现状);
2 Mealy FSM:
Mealy型状态机:输出不但与当前状态有关,还与当前输入值有关,即次态 = f(现状,输入),输出 = f(现状,输入);
3 Moore与Mealy之间的转换:
只要把Moore机中下一状态的输出改变成Mealy机中当前状态的输出。
4 Mealy状态机的化简:
只有当两个状态对应的输入,输出,下一状态完全相同时,可以简化状态。
e.g 数电12章ppt
此处e,g可以合并为一个状态,然后再继续化简。
参考资料:
百度文库
wiki(中文)
http://zh.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA
http://blog.163.com/enjoy_yourself_ok/blog/static/1645812142012227102738745/
Moore 电路实现十字路口交通灯
使用Verilog语言完成十字路口交通灯的设计与实现。用2个手拨开关表示南北向和东西向通道的状态,6个led灯从左到右依次显示A路口红灯,A路口黄灯,A路口绿灯,B路口红灯,B路口黄灯,B路口绿灯,再用一个手拨开关实现复位(高电平有效)。
其中时钟分频为5秒,即每5秒检测一次路口状态,确定灯亮的下一状态。
原理
Moore Machine
说明: led[5:0] : A’red A’yellow A’green ; B’red, B’yellow, B’ green
t[1:0]: TA, TB
状态节点
状态 | 状态编码 | 状态输出 : led[5:0] |
INI (启动状态) | 0000 | 000_000 |
S1 | 0001 | 001_100 |
S2 | 0010 | 010_100 |
S3 | 0100 | 100_001 |
S4 | 1000 | 100_010 |
状态转化
当前状态 | 输出 (led[5:0]) | 输入(t[1:0]) | 下一状态 |
INI | 000_000 | XX | S1 |
S1 | 001_100 | 1X | S1 |
S1 | 001_100 | 0X | S2 |
S2 | 010_100 | XX | S3 |
S3 | 100_001 | X1 | S3 |
S3 | 100_001 | X0 | S4 |
S4 | 100_010 | XX | S1 |
状态转化图
下一篇讲Mealy电路实现。