① 用verilog 狀態機編寫一個序列檢測器,
狀態機,首先是默認狀態(st0或者直接是s1),然後是序列1狀態(st1),和1101比較,對的話調到序列2狀態,錯誤的話還是st1;st2的時候如果數據是0011,進入st3,錯誤的話,看看是不是1101,如果是的話還是保持在st2,如果不是回到st1;後面依次類推,對的進入下一狀態,錯的話和序列1的數據比較,看看是停在st2還是st1;
② 關於verilog 狀態機的編寫(由狀態圖來寫狀態機)
用一個合適位寬的reg作為狀態機;
工作時每個原狀態都是一個case分支;
狀態轉移用case分支裡面的if else寫;
轉移的次態是if else裡面的結果。
③ 如何用verilog設計有限狀態機
在用Verilog描述有限狀態機時,有下面幾種描述方式:
(1)三段式描述:即現態(CS)、 次態(NS)、 輸出邏輯(OL)各用一個always過程描述。
(2)兩段式描述(CS+NS、OL雙過程描述):使用兩個always過程來描述有限狀態機,一個過程描述現態和次態時序邏輯(CS+NS),另一個過程描述輸出邏輯(OL)。
(3)兩段式描述(CS、NS+OL雙過程描述):一個過程描述現態(CS),另一個過程描述次態和輸出邏輯(NS+OL)。
(4)單段式描述:在單段式描述方式中,將狀態機的現態、次態和輸出邏輯(CS+NS+OL)放在一個always過程中進行描述。
對於兩段式描述,相當於-一個過程是由時鍾信號觸發的時序過程,時序過程對狀態機的時鍾信號敏感,當時鍾發生有效跳變時,狀態機的狀態發生變化,一般用case語句檢查狀態機的當前狀態,然後用if語句決定下一狀態; 另一個過程是組合過程,在組合過程中根據當前狀態給輸出信號賦值,對於摩爾型(Moore) 狀態機,其輸出只與當前狀態有關,因此只需用case語句描述即可;對於米里型(Mealy) 狀態機,其輸出則與當前狀態和當前輸入都有關,因此,可以用case語句和if語句組合進行描述。雙過程的描述方式結構清晰,並且把時序邏輯和組合邏輯分開進行描述,便於修改。
在單過程描述方式中,將有限狀態機的現態、次態和輸出邏輯(CS+NS+OL)放在一個過程中進行描述,這樣做帶來的好處是,相當於採用時鍾信號來同步輸出信號。因此,可以克服輸出邏輯信號出現毛刺的問題,這在--些讓輸出信號作為控制邏輯的場合使用,就有效避免了輸出信號帶有毛刺,從而產生錯誤的控制邏輯的問題。但要注意的是,採用單過程描述方式,輸出邏輯會比雙過程描述方式的輸出邏輯延遲--個時鍾周期的時間。