硬件描述語(yǔ)言Verilog HDL設計進(jìn)階之: 典型實(shí)例-狀態(tài)機應用
4.6典型實(shí)例6:狀態(tài)機應用
4.6.1實(shí)例的內容及目標
1.實(shí)例的主要內容
狀態(tài)機設計是HDL設計里面的精華,幾乎所有的設計里面都或多或少地使用了狀態(tài)機的思想。狀態(tài)機,顧名思義,就是一系列狀態(tài)組成的一個(gè)循環(huán)機制,這樣的結構使得編程人員能夠更好地使用HDL語(yǔ)言,同時(shí)具有特定風(fēng)格的狀態(tài)機也能提高程序的可讀性和調試性。
本實(shí)例通過(guò)設計一個(gè)狀態(tài)機來(lái)控制紅色颶風(fēng)II代Xilinx開(kāi)發(fā)板上面的8個(gè)LED燈循環(huán)閃爍。在本實(shí)例狀態(tài)機的設計過(guò)程中,讀者需要著(zhù)重注意狀態(tài)機設計的一些特性。
·FSM設計方法(米勒型和摩爾型)。
·狀態(tài)機的編碼(Binary、gray-code、one-hot等)。
·狀態(tài)機的初始化狀態(tài)和默認狀態(tài)(完整狀態(tài)機設計)。
·狀態(tài)機的狀態(tài)定義風(fēng)格(使用parameter參數定義狀態(tài))。
·狀態(tài)機的編寫(xiě)風(fēng)格(狀態(tài)任務(wù)與狀態(tài)轉換分離)
2.實(shí)例目的
通過(guò)本實(shí)例,讀者應達到下面的目標。
·熟悉XilinxISE開(kāi)發(fā)環(huán)境。
·熟悉紅色颶風(fēng)II代Xilinx開(kāi)發(fā)板的使用。
·了解狀態(tài)機設計輸入方法。
·掌握狀態(tài)機在系統設計中的應用。
4.6.2實(shí)例詳解
本實(shí)例的具體步驟可參見(jiàn)2.6節,在此不再詳述,僅給出主要的操作流程以及狀態(tài)機的設計輸入方法。
(1)啟動(dòng)ISE軟件。
(2)創(chuàng )建新工程。
(3)編寫(xiě)狀態(tài)機Verilog代碼。
狀態(tài)機的代碼可以直接進(jìn)行手動(dòng)編寫(xiě),如圖4.2所示。
圖4.2手動(dòng)編寫(xiě)狀態(tài)機代碼
對于簡(jiǎn)單的狀態(tài)機,使用手動(dòng)輸入的方式進(jìn)行編寫(xiě)是最直接的。但是如果需要進(jìn)行復雜的狀態(tài)機設計,使用狀態(tài)圖設計輸入方式則會(huì )更加方便。下面介紹使用狀態(tài)圖進(jìn)行狀態(tài)機設計的一般步驟。
使用ISE創(chuàng )建工程后,為工程添加新的設計輸入,選擇“StateDiagram”選項,如圖4.3所示。
圖4.3狀態(tài)圖設計輸入方式
此時(shí)ISE將打開(kāi)如圖4.4所示的StateCAD工具進(jìn)行狀態(tài)機設計。
圖4.4StateCAD狀態(tài)機設計工具
在這個(gè)專(zhuān)門(mén)的工具中,讀者就可以很方便地進(jìn)行狀態(tài)機的設計。使用這個(gè)工具進(jìn)行狀態(tài)機設計的步驟主要分為3個(gè),下面分別介紹。
(1)創(chuàng )建狀態(tài)機。
單擊工具欄上的圖標,打開(kāi)狀態(tài)機輸入向導,如圖4.5所示。
在本實(shí)例中,我們在向導第1頁(yè)設置一個(gè)8狀態(tài)的狀態(tài)機,如圖4.5所示。在該頁(yè)中,還可以設置狀態(tài)機圖形的形狀。在對話(huà)框的右側有圖形的預覽效果,用戶(hù)可根據自己的喜好設置圖形的形狀。
在狀態(tài)機向導的第2頁(yè),我們?yōu)闋顟B(tài)機使用同步復位模式,建立一個(gè)同步狀態(tài)機,如圖4.6所示。
圖4.5狀態(tài)機向導 圖4.6同步狀態(tài)機
在狀態(tài)機向導的第3頁(yè),可以設置狀態(tài)機的轉換模式,本實(shí)例中使用Next轉換模式,如圖4.7所示。
圖4.7狀態(tài)機轉換模式
設置完畢后,單擊“Finish”按鈕即可完成狀態(tài)機的創(chuàng )建。在StateCAD工具的工作區將出現如圖4.8所示的狀態(tài)機圖形。
(2)添加狀態(tài)任務(wù)。
創(chuàng )建狀態(tài)機后,就要為其中的每一個(gè)狀態(tài)添加狀態(tài)任務(wù)。首先,雙擊如圖4.8所示的圖形中的STATE0狀態(tài),為STATE0添加任務(wù)。此時(shí),將出現如圖4.9所示的狀態(tài)任務(wù)編輯器。
圖4.8創(chuàng )建的狀態(tài)機
單擊“OutputWizard”按鈕,打開(kāi)輸出向導對話(huà)框,如圖4.10所示。
圖4.9狀態(tài)任務(wù)編輯器 圖4.10狀態(tài)輸出向導對話(huà)框
在輸出向導對話(huà)框里面有很多可以選擇的邏輯,根據不同的需要選擇邏輯資源,并輸入參數。單擊“OK”按鈕即可完成對STATE0的狀態(tài)任務(wù)編輯。
按照相同的方法分別為每個(gè)狀態(tài)加載任務(wù),得到如圖4.11所示的狀態(tài)機。
(3)添加狀態(tài)轉換條件。
設置完狀態(tài)任務(wù)后,還需要為狀態(tài)之間的轉換調價(jià)條件??梢噪p擊兩個(gè)狀態(tài)之間的連線(xiàn)設定狀態(tài)轉移條件,此時(shí)將出現條件編輯器,如圖4.12所示。
在該對話(huà)框中,可以在“Condition”下面填寫(xiě)轉移條件(例如:cnt=10),也可以單擊“OutputWizard”按鈕打開(kāi)輸出向導進(jìn)行設置。設置結束后,單擊“OK”按鈕,完成兩個(gè)狀態(tài)之間的轉換條件設置。
圖4.11添加任務(wù)的狀態(tài)機圖形
圖4.12狀態(tài)轉換條件編輯器
按照同樣的方法為需要添加轉換條件的狀態(tài)連線(xiàn)加載狀態(tài)轉移條件。完成后,得到如圖4.13所示的狀態(tài)機。
至此,一個(gè)基本的狀態(tài)機已經(jīng)建立完畢。這樣的一個(gè)狀態(tài)機已經(jīng)可以在我們的系統中使用。不過(guò)在使用之前,我們還需要為StateCAD工具做一些設置,才能使圖形形式的狀態(tài)機轉化為HDL語(yǔ)言的形式。
1.優(yōu)化設置
首先對狀態(tài)機進(jìn)行優(yōu)化設置,選擇StateCAD工具條上的按鈕,打開(kāi)優(yōu)化設置向導,如圖4.14所示。
圖4.13添加狀態(tài)轉換條件的狀態(tài)機
圖4.14優(yōu)化設置向導
在如圖4.14所示的向導中,提示將進(jìn)行5個(gè)步驟的設置,下面分別介紹。
①選擇目標器件。本實(shí)例中選擇FPGA,如圖4.15所示。
圖4.15選擇目標器件
②選擇狀態(tài)機的優(yōu)化方向,用戶(hù)可以選擇速度優(yōu)先、占用面積優(yōu)先以及手動(dòng)設置。在本實(shí)例中我們選擇速度優(yōu)先,如圖4.16所示。
③對狀態(tài)機的性能改善方式進(jìn)行選擇,如圖4.17所示,本實(shí)例選擇保證覆蓋面積模式。
圖4.16狀態(tài)機優(yōu)化方向
圖4.17狀態(tài)機性能改善模式
④加載優(yōu)化參數設置,如圖4.18所示。
圖4.18加載優(yōu)化參數設置
⑤為狀態(tài)機選擇輸出的HDL語(yǔ)言形式以及綜合的EDA工具。在本實(shí)例中,選擇Verilog語(yǔ)言及XilinxXST綜合工具,如圖4.19所示。
圖4.19選擇目標HDL語(yǔ)言和EDA工具
經(jīng)過(guò)這5個(gè)步驟的設置,就完成了狀態(tài)機的優(yōu)化設置,可以開(kāi)始生成Verilog語(yǔ)言形式的狀態(tài)機了。
選擇StateCAD工具欄上的按鈕,開(kāi)始生成Verilog狀態(tài)機。如果設計沒(méi)有錯誤,將出現如圖4.20所示的結果對話(huà)框。
圖4.20狀態(tài)機生成結果
單擊“Close”按鈕后,就可以看見(jiàn)生成的與狀態(tài)機名稱(chēng)相同、后綴為.v的源文件了。
2.添加設計輸入
將使用StateCAD生成的狀態(tài)機源文件加入工程中,即可查看并編輯相關(guān)的狀態(tài)機的代碼了。
3.設置器件及管腳約束
按照開(kāi)發(fā)板的說(shuō)明進(jìn)行相關(guān)的設置。
4.下載驗證
本實(shí)例的狀態(tài)機在開(kāi)發(fā)板上下載后,將能看到開(kāi)發(fā)板上的8個(gè)LED循環(huán)變亮,即實(shí)現跑馬燈的功能。
4.6.3參考設計
本實(shí)例相關(guān)參考設計文件在本書(shū)實(shí)例代碼的“典型實(shí)例6”文件夾。
評論