源代碼連結: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可以合并為一個狀态,然後再繼續化簡。
參考資料:
百度文庫
http://wenku.baidu.com/link?url=FpNDDxCkH47cjpuy49iiuWDQPj7_h0wfxAAkT4BI15hgyGdXhzdawFYUfPm7wl6s2qs_xVY4G9D3nD8y2OnOwzv6jHCvEIZVguKmvomyfZS
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電路實作。