性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

聯合Verilog和Modelsim模擬狀態(tài)機

今天這篇文章想分享一下從零開始,使用Verilog寫一個狀態(tài)機,并用Modelsim軟件仿真狀態(tài)機的效果。文章的框架如下所示:

1. 前言

2. 什么是狀態(tài)機

3. 狀態(tài)機的分類

4. 定義一個場景

5. Verilog代碼實現

6. Modelsim仿真

7. 總結

整篇文章閱讀大概需要8分鐘。

1.前言

去年在接觸USB接口時,看到手冊中描述要控制這個USB3.0的PHY,需要使用狀態(tài)機,如下圖所示。當時感覺這個玩意挺有意思,但是由于這是軟件開發(fā)的內容,所以就沒太在意具體細節(jié)是怎么實現的。

于是,從那時起狀態(tài)機這個名字就一直停留在我的腦海里,但是也一直擱置,沒有去嘗試著自己做做看。最近打算自己寫一個,因此就有了這篇文章,用Verilog寫個狀態(tài)機。

2.什么是狀態(tài)機

邏輯電路根據是否包含記憶元件分為組合邏輯和時序邏輯組合邏輯電路不包含記憶元件,因此組合邏輯的特點是當前的輸出等于輸入。時序邏輯電路含有記憶元件,因此時序邏輯電路的輸出并不完全取決于當前的輸入,還和過去的狀態(tài)有關。時序邏輯電路的輸出受到輸入和記憶元件值的共同影響。

這里和我們以前學習的自動控制系統類似,對開環(huán)系統來說,輸出和輸入相對應。而對于閉環(huán)系統來說,會把過去的輸出反饋到當前的輸入上,所以當前的輸出其實會受到過去輸出的影響。

組合邏輯的輸出和輸入直接相關,直接用NOT-AND-OR就能描述清楚。而時序電路則可以使用有限狀態(tài)機(FSM)來描述。

3.狀態(tài)機的分類

狀態(tài)機分類兩種類型米勒Mealy型和摩爾Moore型。米勒型的狀態(tài)機輸出由內部狀態(tài)和輸入共同決定。摩爾型的輸出僅由內部狀態(tài)確定。

摩爾型

米勒型

從上面的結構圖可以看出,摩爾型的輸出,是直接和當前狀態(tài)S(t)相同,但是米勒型的輸出,不僅和當前的S(t)相關,與當前的狀態(tài)也有關。

4.定義一個場景

狀態(tài)機在我們生活中用的比較多,最常見的就是在寢室門口,地鐵進站口的自動售貨機,使用狀態(tài)機就可以描述出來。比喻,售貨機里面的烤面包2.5元一個,機器的投幣口只接受硬幣,假設我們去購買時,只有0.5元和1元的硬幣,那么在購買面包的過程中,就可以用狀態(tài)機來實現。

網絡協議由三個要素組成,語義,語法,時序,采用類比的思想,狀態(tài)機也有三個要素組成,分別是輸入,輸出,和狀態(tài)。在設計狀態(tài)機時,可以從這三個狀態(tài)入手,一步一步完成狀態(tài)機的建立。

以買烤面包的場景為例,輸入為投入的硬幣,可能是0.5元可能是1元,輸入有兩種可能性,而且輸入會立刻影響狀態(tài)機的跳轉;輸出是我們最終想要的結果,出面包或者找零錢;在買面包的過程中,不同的狀態(tài)受到上一個狀態(tài)和當前輸入的影響。

以上的分析結果為:

輸入:0.5元,1元

輸出:出面包但是不找零;出面包而且找零

狀態(tài):初始狀態(tài),投入0.5元,投入0.5元,投入1.5元,投入2元,投入2.5元,投入3元

考慮狀態(tài)在2.5元和狀態(tài)在3元時,都會輸出結果,因此將2.5元和3元的狀態(tài)直接和初始的狀態(tài)合并。出完面包或者找完零以后,機器會立馬回到最初狀態(tài)。畫出整個系統的狀態(tài)圖如下:

其中:01/00:代表投入0.5元,沒有輸出;10/00:代表投入1元,沒有輸出;10/11:代表投入1元,出面包且找零,其他的可以類推。

5. Verilog代碼實現

定義接口和狀態(tài)

描述狀態(tài)機的跳轉,狀態(tài)機只有在輸入了硬幣的條件下才轉移,這也是觸發(fā)狀態(tài)機變化的條件。

描述輸出面包和輸出找零的結果。

從上面的代碼可以看出來,狀態(tài)機的描寫可以看成是兩個部分。第一個部分是只管狀態(tài)的轉移,僅僅是在有輸入的情況下影響了狀態(tài),此時不管輸出。這部分代碼完成了狀態(tài)機三要素中的兩個要素,輸入和狀態(tài)。第二部分只管描述輸出,這部分的輸出是采用了米勒型來描述,不僅和當前的狀態(tài)有關,還和輸入有關。這部分代碼完成了狀態(tài)機三要素的另一個要素,輸出。

6. Modelsim仿真

編寫Testbench文件來仿真上面的狀態(tài)機功能,看看在不同輸入條件下,狀態(tài)機是否能正常跳轉。使用Modelsim軟件查看波形。

定義接口列表

例化

仿真結果

從上面的仿真的結果來看,狀態(tài)機的功能正常。截圖所示是連續(xù)5次0.5元,此時出面包,但是沒有找零。2次0.5元,2次1元,出面包,并且找零。仿真的結果和我們最初的設計吻合。

7.總結

當把這個狀態(tài)機寫完才發(fā)現,使用Verilog寫狀態(tài)機也不是很難。好像學習都是這樣,沒有做過的東西都感覺有難度,等自己學會了以后,就會發(fā)現并沒有想象中的那么復雜。

學習狀態(tài)機不難的原因是它和我們之前學過的EMC三要素差不多。在EMC設計中抓住三個要素,就能設計較好性能的單板,同樣,寫狀態(tài)機時只要抓住了它的輸入,輸出,狀態(tài)這三個要素,其實也可以搞定。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 3
關注 595
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧