verilog使用Mealy电路实现交通灯

 Mealy电路实现十字路口交通灯

使用Verilog语言完成十字路口交通灯的设计与实现。用2个手拨开关表示南北向和东西向通道的状态,6个led灯从左到右依次显示A路口红灯,A路口黄灯,A路口绿灯,B路口红灯,B路口黄灯,B路口绿灯,再用一个手拨开关实现复位(高电平有效)。

其中时钟分频为5秒,即每5秒检测一次路口状态,确定灯亮的下一状态。


原理

Mealy Machine

verilog使用Mealy电路实现交通灯

说明 led[5:0] :   A’red  A’yellow  A’green ;  B’red,  B’yellow,  B’ green

        t[1:0]:  TA, TB 

 

状态节点

状态

状态编码

状态输出 :

INI (启动状态)

0000

000_000

S1

0001

001_100

S2

0010

010_100

S3

0100

100_001

S4

1000

100_010

 

 

状态转化

TA TB

 

当前状态

下一状态 / 灯的输出

 


00

01

10

11

S1

S2/010_100

S2/010_100

S1/001_100

S1/001_100

S2

S3/100_001

S3/100_001

S3/100_001

S3/100_001

S3

S4/100_010

S3/100_001

S4/100_010

S3/100_001

S4

S1/001_100

S1/001_100

S1/001_100

S1/001_100

INI

S1/001_100

S1/001_100

S1/001_100

S1/001_100

 

状态转化图

verilog使用Mealy电路实现交通灯



总结Moore电路和Mealy电路

Moore电路的状态结点就表示了输出。而Mealy电路的状态结点仅表示状态,输出在有向边上,和输入用斜杠区分,表示当前输出依赖于有向边的起点和并列的输入值。

一般来说根据实际问题可以灵活选择Moore或者Mealy状态机,看哪一种更接近实际问题的描述。

Mealy状态机在一些情况下会比等价的Moore状态机节点数少一些,但是本次实验交通灯并没有少。针对其他一些问题:

1、画出Moore状态机后可以直接列出表格,也可以进一步转化为Mealy状态机,只要把Moore机中下一状态的输出改变成Mealy机中当前状态的输出,然后再进一步列表格简化Mealy状态机。

2、画出Mealy状态机后可以直接列出表格,进行化简。也可以进一步转化为Moore状态机,只要把现时输出改变为下一时刻输出。当一个状态有多(n)个输出时,需要将该状态拆分为多(n)个状态。

e.g

verilog使用Mealy电路实现交通灯

                                                               Mealy型机转换为Moore型机

如上图所示,把Mealy型机转换为Moore型机,只要把现时输出改变为下一时刻输出。对于状态A,有4个箭头指向它,表示在当前状态下有4个状态可以转换为下一状态的A;同时当前输出均为0,可以把0移入状态A内部,表示在Moore机中状态A的输出为0。同理,可以把0分别移位B/C状态。但对于状态D,有两个箭头指向且具有不同的输出值,需要把状态D分解成两个状态D1和D2(每个状态对应一个输出,当输出不同需要利用不同的状态表示,这即是Moore机具有更多状态的原因),得到完整的Moore机状态模型。

同理,若把上图的Moore机转换为Mealy机,只要把Moore机中下一状态的输出改变成Mealy机中当前状态的输出,由于D1/D2两状态处于A/C两状态之间,且相当于A/C节点之间的一个等效节点,可以把D1/D2两状态合并为一个状态。

 

参考资料:

http://blog.sina.com.cn/s/blog_78699cbf01016mvt.html

http://www.eefocus.com/alvin1130/blog/12-01/236722_9a984.html

http://wenku.baidu.com/link?url=KPstJgatFudWA0erLG52UYAZTJgLli9Y5LqZ_6UgF01pnAJd3xnIFfZKJLdwH_YL6R1JxhEhoj3SyWxKlqwM15PE50BgllTqUE1oWGckOzG






你可能感兴趣的:(verilog使用Mealy电路实现交通灯)