第10章 Verilog狀態機設計技術_第1頁
第10章 Verilog狀態機設計技術_第2頁
第10章 Verilog狀態機設計技術_第3頁
第10章 Verilog狀態機設計技術_第4頁
第10章 Verilog狀態機設計技術_第5頁
已閱讀5頁,還剩64頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 E D A技術與應用第第10章章 VerilogVerilog狀態機狀態機設計技術設計技術 E D A技術與應用10.1 Verilog狀態機的一般形式狀態機的一般形式 廣義而論,只要涉及觸發器的電路,無論電路大小,都廣義而論,只要涉及觸發器的電路,無論電路大小,都能歸結為狀態機。能歸結為狀態機。 有限狀態機用來有限狀態機用來實現一個數字電路的控制部分實現一個數字電路的控制部分。與。與CPU的功能類似,綜合了時序邏輯和組合邏輯電路的功能類似,綜合了時序邏輯和組合邏輯電路。 CPU是通過操作指令和硬件操作單元來實現控制功能,是通過操作指令和硬件操作單元來實現控制功能,而有限狀態機是而有限狀態機

2、是通過狀態轉移來實現控制功能通過狀態轉移來實現控制功能。 綜合器能從不同表述形態的綜合器能從不同表述形態的HDL代碼中輕易萃取出狀態代碼中輕易萃取出狀態機,并加以多側面、多目標和多種形式的優化。機,并加以多側面、多目標和多種形式的優化。 E D A技術與應用10.1.1 狀態機的特點與優勢狀態機的特點與優勢面對同一個設計項目的不同形式的邏輯設計方案中,利用有面對同一個設計項目的不同形式的邏輯設計方案中,利用有限狀態機的設計方案來描述和實現將可能是最佳選擇。限狀態機的設計方案來描述和實現將可能是最佳選擇。有限狀態機的優越性有限狀態機的優越性:(1)高效的順序控制模型)高效的順序控制模型(2)容易

3、利用現成的)容易利用現成的EDA工具進行優化設計工具進行優化設計(3)性能穩定)性能穩定(4)高速性能)高速性能(5)高可靠性能)高可靠性能 E D A技術與應用10.1.2 狀態機的一般結構狀態機的一般結構用用Verilog設計的狀態機根據不同的設計的狀態機根據不同的分類分類標準可以分為多種不標準可以分為多種不同形式:同形式: 從狀態機的信號輸出方式上分:從狀態機的信號輸出方式上分:Mealy型型和和Moore型型狀態機狀態機 從狀態機的結構描述上分:從狀態機的結構描述上分:單過程單過程狀態機和狀態機和多過程多過程狀態機狀態機 從狀態表達方式上分:從狀態表達方式上分:符號化符號化狀態機和狀態

4、機和確定狀態編碼確定狀態編碼的狀的狀態機態機 從狀態機編碼方式上分:從狀態機編碼方式上分:順序編碼順序編碼、一位熱編碼一位熱編碼或或其他編其他編碼方式碼方式狀態機狀態機最一般和最常用的狀態機結構中通常包含了最一般和最常用的狀態機結構中通常包含了說明部分說明部分、主控主控時序過程時序過程、主控組合過程主控組合過程、輔助過程輔助過程等幾個部分等幾個部分 E D A技術與應用說明部分說明部分中包含狀態轉換變量的定義和所有可能狀態的說明,中包含狀態轉換變量的定義和所有可能狀態的說明,必要時還要確定每一狀態的編碼形式,最好是純抽象的符號必要時還要確定每一狀態的編碼形式,最好是純抽象的符號化狀態機,即所定

5、義的狀態序列和狀態轉換變量都不涉及具化狀態機,即所定義的狀態序列和狀態轉換變量都不涉及具體的數值、編碼,甚至數據類型或變量類型。體的數值、編碼,甚至數據類型或變量類型。1、狀態機說明部分、狀態機說明部分parameter2: 0 s0=0, s1=1, s2=2 , s3=3, s4=4;reg 2: 0 current_state, next_state; 狀態元素狀態元素s0、s1等用關鍵詞等用關鍵詞parameter來定義,各狀態元素來定義,各狀態元素所取得數值或編碼必須寫出具體值。所取得數值或編碼必須寫出具體值。 parameter旁的位寬說明可寫可不寫旁的位寬說明可寫可不寫 curr

6、ent_state是是現態變量現態變量和和next_state是次態變量是次態變量 E D A技術與應用2005版本的版本的System Verilog1、狀態機說明部分、狀態機說明部分typedef enum s0, s1, s2, s3, s4 type_user;type_user current_state, next_state; typedef是用戶數據類型自定義語句關鍵詞是用戶數據類型自定義語句關鍵詞 enum是定義枚舉類型關鍵詞是定義枚舉類型關鍵詞 type_user是用戶定義狀態元素是用戶定義狀態元素s0、s1、s2、s3、s4為為type_user類型的標識符類型的標識符

7、第二第二句將狀態變量句將狀態變量current_state、next_state定義為定義為type_user類型類型 E D A技術與應用2、主控時序過程、主控時序過程 主控時序過程主控時序過程指負責狀態機運轉和在時鐘驅動下負責狀態指負責狀態機運轉和在時鐘驅動下負責狀態轉換的過程。轉換的過程。 狀態機是隨外部時鐘信號,以同步時序方式工作的,狀態狀態機是隨外部時鐘信號,以同步時序方式工作的,狀態機中必須包含一個機中必須包含一個對工作時鐘敏感對工作時鐘敏感的過程,狀態機向下一的過程,狀態機向下一狀態轉換的實現僅取決于時鐘信號的到來。狀態轉換的實現僅取決于時鐘信號的到來。 當時鐘的有效跳變到來時,

8、時序過程只是當時鐘的有效跳變到來時,時序過程只是機械地將代表次機械地將代表次態的信號態的信號next_state中的內容送入現態的信號中的內容送入現態的信號current_state中中,而信號,而信號next_state中的內容完全由其他過程根據實際情中的內容完全由其他過程根據實際情況來決定。況來決定。 此時序過程中也可放置一些同步或異步清此時序過程中也可放置一些同步或異步清0或置位方面的控或置位方面的控制信號。制信號。 E D A技術與應用3、主控組合過程、主控組合過程 主控組合過程主控組合過程根據當前狀態和外部的信號發出控制信號,根據當前狀態和外部的信號發出控制信號,同時確定下一狀態的走

9、向。同時確定下一狀態的走向。 在時鐘的作用下,在時鐘的作用下,REG時序過程將次態信號的內容時序過程將次態信號的內容next_state傳遞傳遞給現態信號給現態信號current_state COM組合過程通過信號組合過程通過信號current_state中的狀態值,進入相應的狀態中的狀態值,進入相應的狀態; 在此狀態中根據外部的信號(如在此狀態中根據外部的信號(如state_inputs)向內或向外發出控制)向內或向外發出控制信號(如信號(如com_outputs);); 同時根據外部信號(如同時根據外部信號(如state_inputs)向次態信號)向次態信號next_state中賦相中賦相

10、應的狀態值,確定下一狀態的走向;應的狀態值,確定下一狀態的走向; 此狀態值通過此狀態值通過next_state傳給傳給REG時序過程,直到下一個時鐘脈沖時序過程,直到下一個時鐘脈沖的到來。的到來。 E D A技術與應用4、輔助過程、輔助過程 輔助過程輔助過程用于配合狀態機工作的組合過程或時序過程。例用于配合狀態機工作的組合過程或時序過程。例如為了完成某種算法的過程,或為了存儲數據的存儲過程,如為了完成某種算法的過程,或為了存儲數據的存儲過程,或用于配合狀態機工作的其他時序過程等。或用于配合狀態機工作的其他時序過程等。 例例10-1 module FSM_EXP (clk, reset, sta

11、te_inputs, comb_outputs); input clk;/狀態機工作時鐘狀態機工作時鐘 input reset;/狀態機復位控制狀態機復位控制 input 0: 1 state_inputs;/來自外部的狀態機控制信號來自外部的狀態機控制信號 output 3: 0 comb_outputs;/狀態機對外部發出的控制信號輸出狀態機對外部發出的控制信號輸出 reg 3: 0 comb_outputs; parameter s0=0, s1=1, s2=2, s3=3, s4=4; /定義狀態參數定義狀態參數 reg 4: 0 c_st, next_state; /定義現態和次態的

12、狀態變量定義現態和次態的狀態變量 always (posedge clk or negedge reset) begin/主控時序過程主控時序過程 if (!reset) c_st=s0; /復位有效時,下一狀態進入初態復位有效時,下一狀態進入初態s0 else c_st=next_state; end E D A技術與應用 例例10-1-續續 always (c_st or state_inputs) begin/主控組合過程主控組合過程 case (c_st) /為了在仿真波形中容易看清為了在仿真波形中容易看清,將將current_state簡寫為簡寫為c_st s0 : begin co

13、mb_outputs=5; /進入狀態進入狀態s0時,輸出控制碼時,輸出控制碼5if (state_inputs=2b00) next_state=s0; /條件滿足條件滿足,回初態回初態s0else next_state=s1; end/條件不滿足,到下一狀態條件不滿足,到下一狀態s1 s1 : begin comb_outputs=8; /進入狀態進入狀態s1時,輸出控制碼時,輸出控制碼8if (state_inputs=2b01) next_state=s1;else next_state=s2; end s2 : begin comb_outputs=12;if (state_inpu

14、ts=2b10) next_state=s0;else next_state=s3; end s3 : begin comb_outputs=14;if (state_inputs=2b11) next_state=s3;else next_state=s4; end s4 : begin comb_outputs=9; next_state=s0; end default : next_state =s0; /現現態若未出現以上各態,返回初態態若未出現以上各態,返回初態s0 endcase endendmodule E D A技術與應用狀態機的狀態轉換圖狀態機的狀態轉換圖狀態機的工作時序狀態

15、機的工作時序間接了解狀態機間接了解狀態機內部運行情況內部運行情況利用利用它改變狀態它改變狀態機變化模式和狀機變化模式和狀態轉變態轉變方向方向 E D A技術與應用10.1.3 初始控制與表述初始控制與表述Verilog狀態機的相關設置控制:狀態機的相關設置控制:(1)打開打開“狀態機萃取狀態機萃取”開關開關:AssignmentsSettings,在,在category欄,選擇欄,選擇Analysis & Synthesis Settings,單擊旁邊的,單擊旁邊的按鈕按鈕More Settings,在彈出的對話框下方,在彈出的對話框下方Existing option settings

16、欄單擊選中欄單擊選中Extract Verilog State Machines。在上方的。在上方的Option的的Setting欄選擇欄選擇On E D A技術與應用10.1.3 初始控制與表述初始控制與表述Verilog狀態機的相關設置控制:狀態機的相關設置控制:(2)關于參數定義表述關于參數定義表述:在狀態機設計中,用:在狀態機設計中,用parameter進進行參數定義(綜合器萃取狀態機的主要依據),一旦打開行參數定義(綜合器萃取狀態機的主要依據),一旦打開“狀態機萃取狀態機萃取”開關,其定義的形式可以十分隨意。比如,開關,其定義的形式可以十分隨意。比如,可以表述為可以表述為“param

17、eter s0=0, s1=1”,也可以表述為也可以表述為“parameter s0=4b1001, s1=4b0011”,最后狀態機被綜合的,最后狀態機被綜合的結果未必按照此表述方式來構建。結果未必按照此表述方式來構建。(3)狀態變量定義表述狀態變量定義表述:如果已打開:如果已打開“狀態機萃取狀態機萃取”開關,開關,定義句中位寬定義句中位寬msb: lsb的表述可以比較隨意,不必一定與狀的表述可以比較隨意,不必一定與狀態數對應。假設有態數對應。假設有5個狀態,定義時個狀態,定義時“reg 2: 0 c_st, next_state”中用了位寬中用了位寬2:0,而不是,而不是4:0。一旦打開了

18、一旦打開了“狀態機萃取狀態機萃取”開關,就可利用開關,就可利用Quartus II的狀態的狀態圖觀察器直觀了解當前狀態圖走向,方法是:圖觀察器直觀了解當前狀態圖走向,方法是:ToolsNetlist Viewers State Machine Viewer E D A技術與應用10.2 Moore型狀態機及其設計型狀態機及其設計 從從信號輸出方式上分,有信號輸出方式上分,有Moore型和型和Mealy型兩類狀態型兩類狀態機。機。 Mealy型狀態機型狀態機屬于異步輸出狀態機,它的輸出是當前屬于異步輸出狀態機,它的輸出是當前狀態和所有輸入信號的函數,它的輸出是在輸入變化后狀態和所有輸入信號的函數

19、,它的輸出是在輸入變化后立即發生的,不依賴時鐘的同步。立即發生的,不依賴時鐘的同步。 Moore型狀態機型狀態機屬于同步輸出狀態機,它的輸出僅為當屬于同步輸出狀態機,它的輸出僅為當前狀態的函數,這類狀態機在輸入發生變化時必須等待前狀態的函數,這類狀態機在輸入發生變化時必須等待時鐘的到來,比時鐘的到來,比Mealy機要多等待一個時鐘周期。機要多等待一個時鐘周期。 例例10-1既屬于既屬于Mealy型狀態機,又屬于型狀態機,又屬于Moore型狀態機。型狀態機。 E D A技術與應用10.2.1 多過程結構狀態機多過程結構狀態機ADC0809工作時序和芯片引腳圖工作時序和芯片引腳圖 START為轉換

20、為轉換啟動控制信號啟動控制信號,高電平有效。,高電平有效。 ALE為模擬信號輸入選通端口為模擬信號輸入選通端口地址鎖存信號地址鎖存信號,上升沿有效。,上升沿有效。 EOC為為狀態信狀態信號,號,START有效后,有效后,EOC為低電平,進入為低電平,進入轉換狀態,轉換時間約轉換狀態,轉換時間約100m ms,轉換結束后,轉換結束后,EOC變為高變為高電平。電平。 OE為為輸出允許控輸出允許控制,高電平有效。制,高電平有效。 E D A技術與應用控制控制ADC0809采樣狀態圖采樣狀態圖監測監測EOC,低電平,轉換,低電平,轉換未結束,停留,高電平,未結束,停留,高電平,轉換結束,進入轉換結束,

21、進入st3狀態機向狀態機向0809發出發出OE信號信號(高電平),允許輸出,(高電平),允許輸出,同時作為數據穩定周期,同時作為數據穩定周期,以便下一個狀態中向鎖存以便下一個狀態中向鎖存器鎖入可靠的數據。器鎖入可靠的數據。狀態機向狀態機向0809發出發出LOCK信號(上升沿),將信號(上升沿),將0809輸出的數據進行鎖存。輸出的數據進行鎖存。 E D A技術與應用 例例10-2 :ADC0809采樣控制采樣控制 module ADC0809 (D, CLK, EOC, RST, ALE, START, OE, ADDA, Q, LOCK_T); input 7: 0 D; /來自來自0809

22、轉換好的轉換好的8位數據位數據 input CLK, RST; /狀態狀態機工作時鐘和系統復位控制機工作時鐘和系統復位控制 input EOC; /轉換狀態指示,低電平表示正在轉換轉換狀態指示,低電平表示正在轉換 output ALE; /8個模擬信號通道地址鎖存信號個模擬信號通道地址鎖存信號 output START, OE; /轉換啟動信號和數據輸出三態控制信號轉換啟動信號和數據輸出三態控制信號 output ADDA, LOCK_T; /信號通道控制信號和鎖存測試信號信號通道控制信號和鎖存測試信號 output 7:0 Q; reg ALE, START, OE; parameter s

23、0=0, s1=1, s2=2, s3=3, s4=4; /定義各狀態子類型定義各狀態子類型 reg4: 0 cs, next_state; /為了便于仿真顯示,現態名簡寫為為了便于仿真顯示,現態名簡寫為cs reg7: 0 REGL; reg LOCK; /轉換后數據輸出鎖存時鐘信號轉換后數據輸出鎖存時鐘信號 always (cs or EOC) begin /主控組合過程,規定各狀態轉換方式主控組合過程,規定各狀態轉換方式 case (cs) s0 : begin ALE=0; START=0; OE=0; LOCK=0;next_state=s1; end /0809初始化初始化 s1

24、: begin ALE=1; START=1; OE=0; LOCK=0;next_state=s2; end /啟動采樣信號啟動采樣信號START E D A技術與應用 例例10-2-續續 :ADC0809采樣控制采樣控制 s2 : begin ALE=0; START=0; OE=0; LOCK=0;if (EOC=1b1) next_state=s3;/EOC=0表明轉換結束表明轉換結束else next_state=s2; end /轉換未結束,繼續等待轉換未結束,繼續等待s3 : begin ALE=0; START=0; OE=1; LOCK=0;/開啟開啟OE,打開打開 AD數據

25、口數據口next_state=s4; end /下一狀態無條件轉向下一狀態無條件轉向s4 s4 : begin ALE=0;START=0;OE=1;LOCK=1;/開啟數據鎖存信號開啟數據鎖存信號next_state=s0; enddefault : begin ALE=0; START=0; OE=0; LOCK=0;next_state=s0; end endcase end always (posedge CLK or posedge RST) begin/時序過程時序過程 if (RST) cs=s0; else cs=next_state; end always (posedge

26、LOCK) if (LOCK) REGL=D;/在在LOCK上升沿上升沿 將轉換好的數據鎖入將轉換好的數據鎖入 assign ADDA=0; assign Q=REGL; /選擇模擬信號進入通道選擇模擬信號進入通道IN0 assign LOCK_T=LOCK; /將測試信號輸出將測試信號輸出endmodule E D A技術與應用采樣狀態機采樣狀態機結構框圖結構框圖程序中包含三個過程結構:程序中包含三個過程結構: 時序過程時序過程REG:在:在CLK的驅動下,不斷將的驅動下,不斷將next_state中的內容(狀態中的內容(狀態元素)賦給現態元素)賦給現態cs,并由此信號將,并由此信號將狀態狀

27、態變量傳輸給變量傳輸給COM組合過程。組合過程。 組合過程組合過程COM:(1)狀態譯碼功能。根據從現態信號狀態譯碼功能。根據從現態信號cs中獲得的狀態中獲得的狀態變量,以及來自變量,以及來自0809的狀態線信號的狀態線信號EOC,決定下一狀態的轉移方向,決定下一狀態的轉移方向,即次態的狀態變量。即次態的狀態變量。(2)采樣控制功能。根據采樣控制功能。根據cs中的狀態變量確定對中的狀態變量確定對0809的控制信號的控制信號ALE、START、OE等輸出相應控制信號,當采樣結等輸出相應控制信號,當采樣結束后還要通過束后還要通過LOCK向鎖存器過程向鎖存器過程LATCH發出鎖存信號。發出鎖存信號。

28、 鎖存器輔助過程鎖存器輔助過程LATCH:將由:將由0809的的D7.0數據輸出口輸出的數據輸出口輸出的8位已位已轉換好的數據鎖存起來。轉換好的數據鎖存起來。 E D A技術與應用ADC0809采樣狀態機工作時序采樣狀態機工作時序狀態狀態s0:復位信號后即進入狀態:復位信號后即進入狀態s0。狀態狀態s1:第二個時鐘上升沿后,狀態機進入狀態:第二個時鐘上升沿后,狀態機進入狀態s1(即(即cs=s1),),由由START、ALE發出啟動采樣和地址選通的控制信號。發出啟動采樣和地址選通的控制信號。狀態狀態s2:EOC由高電平變為低電平,由高電平變為低電平,0809的的8位數據輸出端呈現位數據輸出端呈

29、現高阻態高阻態“ZZ”。等待。等待CLK數個時鐘周期后,數個時鐘周期后,EOC變為高電平,變為高電平,表示轉換結束。表示轉換結束。狀態狀態s3:在此狀態的輸出允許:在此狀態的輸出允許OE被設置成高電平。此時被設置成高電平。此時8089的的數據輸出端數據輸出端D7.0即輸出已經轉換好的數據即輸出已經轉換好的數據5EH。狀態狀態s4:LOCK_T發出一個脈沖,其上升沿立即將發出一個脈沖,其上升沿立即將D端口的端口的5E鎖鎖入入Q和和REGL中。中。由內部由內部LOCK信信號引出的號引出的測試信號測試信號激勵按激勵按0809控制控制時序人為時序人為設定設定 E D A技術與應用 例例10-3:修改后

30、的:修改后的ADC0809采樣控制采樣控制 /將組合過程將組合過程COM拆分為兩個拆分為兩個部分部分 always (cs or EOC) begin/狀態譯碼和狀態轉換狀態譯碼和狀態轉換 case (cs)s0 : next_state=s1;s1 : next_state=s2;s2 : if (EOC=1b1) next_state=s3; else next_state=s2; s3 : next_state=s4; s4 : next_state=s0; default : next_state=s0; endcase end always (cs or EOC) begin/對外控

31、制信號輸出對外控制信號輸出 case (cs)s0 : begin ALE=0; START=0; OE=0; LOCK=0; ends1 : begin ALE=1; START=1; OE=0; LOCK=0; end s2 : begin ALE=0; START=0; OE=0; LOCK=0; end s3 : begin ALE=0; START=0; OE=1; LOCK=0; end s4 : begin ALE=0; START=0; OE=1; LOCK=1; end default : begin ALE=0; START=0; OE=0; LOCK=0; end end

32、case end E D A技術與應用10.2.2 序列檢測器及其狀態機設計序列檢測器及其狀態機設計 序列檢測器序列檢測器用于檢測一組或多組由二進制碼組成的脈沖序用于檢測一組或多組由二進制碼組成的脈沖序列信號,當序列檢測器連續收到一組串行二進制碼后,如列信號,當序列檢測器連續收到一組串行二進制碼后,如果這組碼與檢測器中預先設置的碼相同,則輸出果這組碼與檢測器中預先設置的碼相同,則輸出1,否則輸,否則輸出出0。 這種檢測的這種檢測的關鍵關鍵在于正確碼的收到必須是連續的,這就要在于正確碼的收到必須是連續的,這就要求檢測器必須記住前一次正確碼及正確序列,直到連續的求檢測器必須記住前一次正確碼及正確序

33、列,直到連續的檢測中所收到的每一位碼都與預置數的對應碼相同,任何檢測中所收到的每一位碼都與預置數的對應碼相同,任何一位不相等都將回到初始狀態重新開始檢測。一位不相等都將回到初始狀態重新開始檢測。 E D A技術與應用 例例10-4:8位序列數位序列數11010011的序列檢測器的序列檢測器 module SCHK (input CLK, DIN, RST, output SOUT); parameter s0=40, s1=41, s2=42, s3=43, s4=44, s5=45, s6=46, s7=47, s8=48;/設定設定9個狀態參數個狀態參數 reg 8: 0 ST, NST;

34、 always (posedge CLK or posedge RST) begin if (RST) ST=s0; else ST=NST; end always (ST or DIN) begin /11010011串行輸入,高位在前串行輸入,高位在前 case (ST)s0 : if (DIN=1b1) NST=s1; else NST=s0;s1 : if (DIN=1b1) NST=s2; else NST=s0;s2 : if (DIN=1b0) NST=s3; else NST=s0;s3 : if (DIN=1b1) NST=s4; else NST=s0;s4 : if (D

35、IN=1b0) NST=s5; else NST=s0;s5 : if (DIN=1b0) NST=s6; else NST=s0;s6 : if (DIN=1b1) NST=s7; else NST=s0;s7 : if (DIN=1b1) NST=s8; else NST=s0;s8 : if (DIN=1b0) NST=s3; else NST=s0;default : NST=s0; endcase end assign SOUT= (ST=s8);endmodule測出的數據測出的數據110恰好與恰好與原序列數的頭三位相同原序列數的頭三位相同 E D A技術與應用10.3 Mealy

36、型狀態機設計型狀態機設計 Mealy型狀態機型狀態機與與Moore型狀態機相比,輸出變化要領型狀態機相比,輸出變化要領先一個周期,即一旦輸入信號或狀態發生變化,輸出信先一個周期,即一旦輸入信號或狀態發生變化,輸出信號即刻發生變化。號即刻發生變化。Mealy機與機與Moore機在設計上基本相機在設計上基本相同,只是同,只是Mealy機的組合過程結構中的輸出信號是當前機的組合過程結構中的輸出信號是當前狀態和當前輸入的函數。狀態和當前輸入的函數。 Mealy機將時序過程與組合過程混合,在同一個過程中機將時序過程與組合過程混合,在同一個過程中決定主控狀態譯碼和主控時序,決定主控狀態譯碼和主控時序, 所

37、以不需要用次態來傳所以不需要用次態來傳遞狀態。遞狀態。 E D A技術與應用 例例10-5 :雙過程:雙過程Mealy機機 module MEALY1 (input CLK, DIN1, DIN2, RST, output reg 4: 0 Q); reg 4: 0 PST; parameter st0=0, st1=1, st2=2, st3=3, st4=4; always (posedge CLK or posedge RST) begin : REG if (RST) PST=st0; else begincase (PST) st0 : if (DIN1=1b1) PST=st1;

38、else PST=st0; st1 : if (DIN1=1b1) PST=st2; else PST=st1; st2 : if (DIN1=1b1) PST=st3; else PST=st2; st3 : if (DIN1=1b1) PST=st4; else PST=st3; st4 : if (DIN1=1b0) PST=st0; else PST=st4; default : PST=st0;endcase end endAlways (PST of DIN2) begin : COM/輸出控制信號的過程輸出控制信號的過程 case (PST)st0 : if (DIN2=1b1)

39、 Q=5H10; else Q=5H0A;st1 : if (DIN2=1b0) Q=5H17; else Q=5H14;st2 : if (DIN2=1b1) Q=5H15; else Q=5H13;st3 : if (DIN2=1b0) Q=5H1B; else Q=5H09;st4 : if (DIN2=1b1) Q=5H1D; else Q=5H0D;default : Q=5b00000; endcase endendmodule E D A技術與應用 過程過程REG是時序與組合混合型過程,將狀態機的主控時序電是時序與組合混合型過程,將狀態機的主控時序電路和主控狀態譯碼電路同時用一個

40、過程來表達。路和主控狀態譯碼電路同時用一個過程來表達。 過程過程COM負責根據狀態和輸入信號給出不同的對外控制信號負責根據狀態和輸入信號給出不同的對外控制信號輸出。輸出。雙過程雙過程Mealy機狀態圖機狀態圖 E D A技術與應用雙過程雙過程Mealy機仿真波形機仿真波形 PST是現態轉換情況,是現態轉換情況,DIN1控制各狀態控制各狀態的的轉換方式,轉換方式,DIN2控制對控制對外控制信號碼的輸出:當復位后,且外控制信號碼的輸出:當復位后,且DIN1=0時,一直處于時,一直處于st0狀狀態,若此時態,若此時DIN2=0,輸出碼,輸出碼0AH;當;當DIN1都為都為1時,每一個時鐘時,每一個時

41、鐘上升沿后,都轉入下一狀態,直到狀態上升沿后,都轉入下一狀態,直到狀態s4,同時根據每一個狀態,同時根據每一個狀態下的下的DIN2的值輸出相應設定的控制碼,一直到的值輸出相應設定的控制碼,一直到DIN1=0才回到初才回到初始狀態始狀態s0。 輸出信號中存在毛刺,為了排除毛刺,可通過選擇可能的優化設輸出信號中存在毛刺,為了排除毛刺,可通過選擇可能的優化設置,也可將輸出通過寄存器鎖存,濾除毛刺。置,也可將輸出通過寄存器鎖存,濾除毛刺。毛刺毛刺一旦輸入信號一旦輸入信號DIN2發生變化,發生變化,Q即刻發生變化(異步)即刻發生變化(異步) E D A技術與應用 例例10-6 :單過程:單過程Mealy

42、機機 module MEALY2 (input CLK, DIN1, DIN2, RST, output reg 4: 0 Q); reg 4: 0 PST; parameter st0=0, st1=1, st2=2, st3=3, st4=4; always (posedge CLK or posedge RST) begin : REG if (RST) PST=st0; else begincase (PST) st0 : begin if (DIN2=1b1) Q=5H10; else Q=5H0A; if (DIN1=1b1) PST=st1; else PST=st0; end

43、st1 : begin if (DIN2=1b0) Q=5H17; else Q=5H14; if (DIN1=1b1) PST=st2; else PST=st1; end st2 : begin if (DIN2=1b1) Q=5H15; else Q=5H13; if (DIN1=1b1) PST=st3; else PST=st2; end st3 : begin if (DIN2=1b0) Q=5H1B; else Q=5H09; if (DIN1=1b1) PST=st4; else PST=st3; end st4 : begin if (DIN2=1b1) Q=5H1D; el

44、se Q=5H0D; if (DIN1=1b0) PST=st0; else PST=st4; default : begin PST=st0; Q=5b00000; endendcase end endendmodule E D A技術與應用單過程單過程Mealy機仿真波形機仿真波形單過程單過程Mealy機狀態圖(與雙過程相同)機狀態圖(與雙過程相同)輸入信號輸入信號DIN2發生變化,要等時鐘上升沿后發生變化,要等時鐘上升沿后Q才才發生變化(同步)發生變化(同步) E D A技術與應用 例例10-7 :單過程序列檢測器:單過程序列檢測器Mealy機機 module SCHK (input C

45、LK, DIN, RST, output SOUT); parameter s0=0, s1=1, s2=2, s3=3, s4=4, s5=5, s6=6, s7=7, s8=8; reg 8: 0 ST; always (posedge CLK) begin SOUT=0; if (RST) ST=s0; else begincase (ST) s0 : if (DIN=1b1) ST=s1; else ST=s0; s1 : if (DIN=1b1) ST=s2; else ST=s0; s2 : if (DIN=1b0) ST=s3; else ST=s0; s3 : if (DIN=

46、1b1) ST=s4; else ST=s0; s4 : if (DIN=1b0) ST=s5; else ST=s0; s5 : if (DIN=1b0) ST=s6; else ST=s0; s6 : if (DIN=1b1) ST=s7; else ST=s0; s7 : if (DIN=1b1) ST=s8; else ST=s0; s8 : begin SOUT=1; if (DIN=1b0) ST=s3; else ST=s0; end default : ST=s0; endcase end endendmodule E D A技術與應用單過程單過程序序列檢測器列檢測器Mealy

47、機仿真波形機仿真波形 與雙過程序列檢測器與雙過程序列檢測器Moore機相比,單過程機相比,單過程Mealy機的仿真波形在機的仿真波形在SOUT的輸出延遲了一個時鐘,這種延遲數據具有濾波作用。如的輸出延遲了一個時鐘,這種延遲數據具有濾波作用。如果果SOUT是一個多位復雜算法的組合邏輯輸出,可能會有許多毛是一個多位復雜算法的組合邏輯輸出,可能會有許多毛刺,引起不良后果,利用單過程刺,引起不良后果,利用單過程Mealy機形式可以有所改善。機形式可以有所改善。雙過程雙過程序序列檢測器列檢測器Moore機仿真波形機仿真波形 E D A技術與應用10.4 狀態機圖形編輯設計狀態機圖形編輯設計(1)打開狀態

48、機圖形編輯窗打開狀態機圖形編輯窗:在:在Quartus II的工程管理窗的工程管理窗中點擊中點擊FileNew,選擇狀態機文件,選擇狀態機文件State Machine File。(2)打開狀態機圖形編輯窗后,在)打開狀態機圖形編輯窗后,在Quartus II的工程管理的工程管理窗中點擊窗中點擊ToolsState MachineWizard。 E D A技術與應用(3)在)在State Machine Wizard最初的對話框中選擇生成一個最初的對話框中選擇生成一個新狀態機新狀態機“Create a new state machine design”,然后在后,然后在后面出來的框中分別選擇復

49、位信號控制方式和有效方式,如異面出來的框中分別選擇復位信號控制方式和有效方式,如異步和高電平有效:步和高電平有效:Asynchronous和和active-high。 E D A技術與應用(4)在狀態機編輯器對話框中設置)在狀態機編輯器對話框中設置狀態元素狀態元素、輸入輸出信號輸入輸出信號、狀態轉換條件狀態轉換條件等。等。狀態元素狀態元素輸入信號輸入信號轉換狀態條件轉換狀態條件輸出信號輸出信號不同狀態對應的不同狀態對應的輸出信號的值輸出信號的值 E D A技術與應用(5)完成后存盤,文件后綴是)完成后存盤,文件后綴是.smf。可以從狀態機圖形編輯。可以從狀態機圖形編輯器上看到轉換圖形,還可以利

50、用左側的工具進行一些修改補器上看到轉換圖形,還可以利用左側的工具進行一些修改補充。將這個圖形狀態機存盤后,可以以此文件作為工程進行充。將這個圖形狀態機存盤后,可以以此文件作為工程進行設計。設計。狀態轉換圖形狀態轉換圖形 E D A技術與應用(6)也可以將這個圖形狀態機文件轉變成)也可以將這個圖形狀態機文件轉變成HDL代碼文件。選代碼文件。選擇擇ToolsGenerate HDL File(HDL文件控制項),在打開的文件控制項),在打開的窗口中,選擇需要轉變的硬件描述語言項,包括窗口中,選擇需要轉變的硬件描述語言項,包括VHDL、Verilog HDL或或System Verilog。 E D

51、 A技術與應用10.5 不同編碼類型狀態機不同編碼類型狀態機 用用文字符號文字符號定義各狀態元素的狀態機稱為定義各狀態元素的狀態機稱為符號化狀態機符號化狀態機,其狀態元素的具體編碼由其狀態元素的具體編碼由Verilog狀態機的綜合器根據預設狀態機的綜合器根據預設的約束來確定。的約束來確定。 可直接將各狀態用可直接將各狀態用具體的二進制數具體的二進制數來定義,不使用文字符來定義,不使用文字符號,這種編碼方式稱為號,這種編碼方式稱為直接編碼方式直接編碼方式。 E D A技術與應用10.5.1 直接輸出型編碼直接輸出型編碼最典型的應用實例就是計數器。計數器本質上是一個主控時最典型的應用實例就是計數器

52、。計數器本質上是一個主控時序過程與一個主控組合過程合二為一的狀態機,計數輸出就序過程與一個主控組合過程合二為一的狀態機,計數輸出就是各狀態的狀態碼。是各狀態的狀態碼。決定了計數進決定了計數進制數(或膜制數(或膜n)計數輸出是計數輸出是此狀態機狀此狀態機狀態碼輸出態碼輸出若為異步清若為異步清0,則計數器是模則計數器是模m計數器,若計數器,若為同步清為同步清0,則計數器是模則計數器是模m+1計數器計數器 E D A技術與應用狀態碼直接輸出型狀態機狀態碼直接輸出型狀態機:將狀態編碼直接輸出作為控制信:將狀態編碼直接輸出作為控制信號,即號,即output=state,要求各狀態的編碼作特殊的安排,以適

53、,要求各狀態的編碼作特殊的安排,以適應控制對象的要求。應控制對象的要求。狀狀態態狀態編碼狀態編碼STARTALEOELOCKB功能說明功能說明s000000初始態初始態s111000啟動轉換啟動轉換s200001若測得若測得EOC=1時,轉下時,轉下一狀態一狀態ST3s300100輸出轉換好的數據輸出轉換好的數據s400110利用利用LOCK的上升沿江的上升沿江轉換好的數據鎖存轉換好的數據鎖存控制控制ADC0809采樣狀態機的狀態編碼表采樣狀態機的狀態編碼表 E D A技術與應用 例例10-8 :ADC0809采樣控制(狀態碼直接輸出型)采樣控制(狀態碼直接輸出型) module ADC080

54、9 (D, CLK, ECO, RST, ALE, START, OE, ADDA, Q, LOCK_T); input 7: 0 D; input CLK, RST, EOC; output START, OE, ALE, ADDA, LOCK_T; output 7: 0 Q; parameter s0=5B00000, s1=5B11000, s2=5B00001, s3=5B00100, s4=5B00110; reg 4: 0 cs, SOUT, next_state; reg7: 0 REGL; reg LOCK; always (cs or EOC) begin case (cs

55、) s0 : begin next_state=s1; SOUT=s0; end s1 : begin next_state=s2; SOUT=s1; end s2 : begin SOUT=s2; if (EOC=1b1) next_state=s3; else next_state=s2; end s3 : begin SOUT=s3; next_state=s4; end s4 : begin SOUT=s4; next_state=s0; end default : begin next_state=s0; SOUT=s0; end endcase end always (posedg

56、e CLK or posedge RST) begin /時序過程時序過程 if (RST) cs=s0; else cs=next_state; end always (posedge SOUT1) /寄存器過程寄存器過程 if (SOUT1) REGAL=D; assign ADDA=0; assign Q=REGL; assign LOCK_T=SOUT1; assign OE=SOUT2; assign ALE=SOUT3; assign START=SOUT4;endmodule E D A技術與應用狀態機工作時序狀態機工作時序狀態碼直接輸出型狀態機的優點狀態碼直接輸出型狀態機的優點

57、:輸出速度快,不大可能出:輸出速度快,不大可能出現毛刺現象(因為控制輸出信號直接來自構成狀態編碼的觸現毛刺現象(因為控制輸出信號直接來自構成狀態編碼的觸發器)。發器)。狀態碼直接輸出型狀態機狀態碼直接輸出型狀態機的缺點的缺點:程序可讀性差,用于狀態:程序可讀性差,用于狀態譯碼的組合邏輯資源比其他以相同觸發器數量構成的狀態要譯碼的組合邏輯資源比其他以相同觸發器數量構成的狀態要多,而且控制非法狀態出現的容錯技術要求較高。多,而且控制非法狀態出現的容錯技術要求較高。 E D A技術與應用10.5.2 用宏定義語句定義狀態編碼用宏定義語句定義狀態編碼 例例10-9 :ADC0809采樣控制(宏替換語句

58、采樣控制(宏替換語句define定定義狀態元素)義狀態元素) define s0 5B00000define s1 5B11000define s2 5B00001define s3 5B00100define s4 5B00110module ADC0809 (D, CLK, ECO, RST, ALE, START, OE, ADDA, Q, LOCK_T); input 7: 0 D; input CLK, RST, EOC; output START, OE, ALE, ADDA, LOCK_T; output 7: 0 Q;reg 4: 0 cs, SOUT, next_state;

59、 reg7: 0 REGL; reg LOCK; always (cs or EOC) begin case (cs) s0 : begin next_state=s1; SOUT=s0; end s1 : begin next_state=s2; SOUT=s1; end s2 : begin SOUT=s2; if (EOC=1b1) next_state=s3; else next_state=s2; end s3 : begin SOUT=s3; next_state=s4; end s4 : begin SOUT=s4; next_state=s0; end default : be

60、gin next_state=s0; SOUT=s0; end endcase end E D A技術與應用10.5.2 用宏定義語句定義狀態編碼用宏定義語句定義狀態編碼 例例10-9 -續續:ADC0809采樣控制(宏替換語句采樣控制(宏替換語句define定義狀態元素)定義狀態元素) always (posedge CLK or posedge RST) begin /時序過程時序過程 if (RST) cs=s0; else cs=next_state; end always (posedge SOUT1) /寄存器過程寄存器過程 if (SOUT1) REGAL=D; assign ADDA=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論