Mealy電路實現十字路口交通燈html
使用Verilog語言完成十字路口交通燈的設計與實現。用2個手撥開關表示南北向和東西向通道的狀態,6個led燈從左到右依次顯示A路口紅燈,A路口黃燈,A路口綠燈,B路口紅燈,B路口黃燈,B路口綠燈,再用一個手撥開關實現復位(高電平有效)。編碼
其中時鐘分頻爲5秒,即每5秒檢測一次路口狀態,肯定燈亮的下一狀態。url
原理
spa
Mealy Machine:設計
說明: led[5:0] : A’red A’yellow A’green ; B’red, B’yellow, B’ greenhtm
t[1:0]: TA, TB blog
狀態節點ci
狀態get |
狀態編碼table |
狀態輸出 : |
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