verilog使用Mealy電路實現交通燈

兌隱發表於2015-05-27

 Mealy電路實現十字路口交通燈


原始碼連結:http://download.csdn.net/detail/august717/8747577

使用Verilog語言完成十字路口交通燈的設計與實現。用2個手撥開關表示南北向和東西向通道的狀態,6個led燈從左到右依次顯示A路口紅燈,A路口黃燈,A路口綠燈,B路口紅燈,B路口黃燈,B路口綠燈,再用一個手撥開關實現復位(高電平有效)。

其中時鐘分頻為5秒,即每5秒檢測一次路口狀態,確定燈亮的下一狀態。


原理

Mealy Machine

說明 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

 

狀態轉化圖



總結Moore電路和Mealy電路

Moore電路的狀態結點就表示了輸出。而Mealy電路的狀態結點僅表示狀態,輸出在有向邊上,和輸入用斜槓區分,表示當前輸出依賴於有向邊的起點和並列的輸入值。

一般來說根據實際問題可以靈活選擇Moore或者Mealy狀態機,看哪一種更接近實際問題的描述。

Mealy狀態機在一些情況下會比等價的Moore狀態機節點數少一些,但是本次實驗交通燈並沒有少。針對其他一些問題:

1、畫出Moore狀態機後可以直接列出表格,也可以進一步轉化為Mealy狀態機,只要把Moore機中下一狀態的輸出改變成Mealy機中當前狀態的輸出,然後再進一步列表格簡化Mealy狀態機。

2、畫出Mealy狀態機後可以直接列出表格,進行化簡。也可以進一步轉化為Moore狀態機,只要把現時輸出改變為下一時刻輸出。當一個狀態有多(n)個輸出時,需要將該狀態拆分為多(n)個狀態。

e.g


                                                               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

相關文章