基於proteus的狀態機設計

2021-09-19 10:08:44 字數 3663 閱讀 2747

參考資料

理論上說,任何乙個需要周而復始的執行一系列任務(例如cpu中按順序從儲存器取出指令、再執行指令)的時序系統都可以用狀態機(state machine)模型來描述。時序系統的執行週期可以描述為乙個預定順序的時間週期序列,每個週期都對應狀態機中乙個指定的狀態。狀態機在每個週期中產生特定的操作,完成相應的任務;同時,狀態機由時鐘驅動,按照外部輸入訊號和當前狀態的反饋,在下乙個週期到來之際進行預定的狀態轉移。

根據狀態數目是否有限,狀態機可以分為有限狀態機和無限狀態機;根據是否有乙個公共的時鐘控制,狀態機可以分為同步狀態機和非同步狀態機。其中,最常用的同步有限狀態機又可以分為以下兩種型別:moore狀態機mealy狀態機

圖1. 同步有限狀態機示意圖

moore狀態機的特徵是其輸出z(t)與輸入x(t)無關,只與當前狀態s(t)有關。狀態暫存器的當前狀態s(t)為現態,當前輸入x(t)和現態s(t)共同輸入組合邏輯c1後,使狀態機進入的下乙個狀態s(t+1)稱為次態。在時鐘clk的驅動下,狀態機不斷進行s(t)→s(t+1)的狀態轉移。與moore狀態機相比, meanly狀態機主要差異是:其當前輸出z(t)不僅與當前輸入x(t)有關,而且還與現態s(t)有關。上述狀態機的核心是狀態轉移電路,其主要有以下兩種型別:環形計數器和扭環計數器。

環形計數器是由d觸發器構成的移位暫存器加上反饋電路閉環構成,四位環形計數器的電路如下圖2所示:移位暫存器的低位觸發器輸出端接入相鄰高位觸發器輸入端,而反饋電路從最高位觸發器的序列輸出端接入,其輸出則連到最低位觸發器的序列輸入端。

圖2. 環形計數器的時序邏輯電路

環形計數器不能自啟動,在開始執行前必須使能訊號#start=0,使得環形計數器的四位觸發器輸出[d3, d2, d1, d0]的狀態初始化為0001;然後,在時鐘clk驅動下,四位環形計數輸出[d3, d2, d1, d0]按照以下順序迴圈轉換:0001→0010→0100→1000→0001→…如下圖3(左)所示。環形計數器的特徵是:n位環形計數器的狀態數目n=n,而且其輸出[d3, d2, d1, d0]是單熱點(one hot)編碼,即任何狀態下只有乙個dx=1。所以,環形計數器的輸出dx即是狀態的節拍訊號,標誌相應的狀態。

圖3. 環形計數器和 扭環計數器的狀態圖

扭環計數器的結構同環形計數器基本類似(2位扭環計數器的電路如下圖4所示),只是其反饋電路略有差別:扭環計數器的反饋電路是從最高位觸發器的序列輸出端接入,經過反向後再連到最低位觸發器的序列輸入端。2位扭環計數器的狀態圖則如上圖(右)所示:扭環計數器的初始狀態00,在clk時鐘驅動下,其輸出[db, da]按照以下順序轉換:00→01→11→10→00→…扭環計數器的優點是具有自啟動特性,無須初始化;而且n位扭環計數器的狀態數目n=2n,比n位環形計數器的容量高一倍,效率較高。但是扭環計數器的輸出不是單熱點(one hot)編碼,所以其2位觸發器輸出端須通過2-4解碼器74ls139才能轉換成狀態的節拍訊號:s0→s1→s2→s3→s0→…

圖4. 扭環計數器的時序邏輯電路

在上述扭環計數器構成的狀態轉移電路中,狀態機的下乙個狀態(次態)僅由當前狀態(現態)決定。在一些更複雜的時序系統中,狀態機的次態不僅與現態有關,而且還與當前輸入有關,例如下圖5(右)所示的狀態圖中,當前狀態s0時,若輸入條件c0=0,狀態機保持在狀態s0;若輸入條件c0=1,則在時鐘clk的驅動下,狀態機如常進行狀態轉移:s0→s1。該狀態圖對應的扭環計數器電路如下圖5(左)所示,在反饋電路上增加了基於條件c0的判斷邏輯。值得注意的是,條件c0只在狀態s0有效,其它狀態不起作用。

圖5. 條件判斷的扭環計數器

圖6所示是乙個交通燈系統,展示如何運用狀態機原理來設計時序系統。交通燈的狀態機總共有t1、t2和t3三個狀態,每個狀態都有不同的亮燈模式和亮燈持續的時間(以倒計時的形式顯示),如下圖6(左)所示。該狀態機沒有輸入,其狀態轉移僅僅取決於當前的狀態。在時鐘clk(φ)驅動下,狀態機按照以下順序迴圈轉移:t1→t2→t3→t1→…,狀態轉移時序圖如下圖6(右)所示。

圖6.交通燈的狀態圖和狀態轉移的時序圖

交通燈系統的電路如下圖7所示:環形的路口上有南北向的兩組紅黃綠led燈和一對數碼管(顯示倒計時),路口左邊是整個系統的核心:時序發生器電路;路口下方是乙個由bus匯流排連線的計數器電路。在上圖6(左)中,狀態機在每個狀態【tx】中完成兩個操作:led燈亮和顯示倒計時。時序發生器產生節拍{#t1, #t2, #t3},直接控制紅黃綠交通燈;而計數器電路負責數碼管的倒計時顯示。

圖7.交通燈系統電路圖

時序發生器電路如下圖8(左)所示:右邊的狀態轉移電路是由兩個d觸發器組成的2位扭環計數器,其反饋電路增加了限制:若扭環計數器當前狀態輸出端為01,則下乙個狀態輸出端被強制修改為10,即跳過狀態11。因此,扭環計數器輸出經過2-4解碼器後產生以下節拍序列{#t1, #t2, #t3}:→→→→…狀態圖則如下圖8(右)所示。狀態轉移電路左邊是乙個基於暫存器74ls175的狀態暫存器電路。當載入訊號#load=0時刻,其下降沿將把節拍序列{#t1, #t2, #t3}鎖存,輸出訊號控制紅黃綠交通燈:節拍 #t1和#t3分別反向生成訊號g(綠燈亮)和r(紅燈亮),節拍#t2則反向後和時鐘訊號clock邏輯生成訊號y(黃燈閃爍亮)。

圖8.交通燈時序發生器電路及其狀態圖

值得注意的是,狀態轉移電路輸出的節拍序列{#t1, #t2, #t3}實際上是紅黃綠交通燈當前狀態【tx】的次態【tx+1】(即下乙個狀態 ),當載入訊號#load=0的下降沿時刻,節拍序列{#t1, #t2, #t3}載入到狀態暫存器,生成交通燈新狀態【tx+1】。然後,訊號#load=1載入完成之際,其上公升沿觸發右邊狀態轉移電路,重新整理節拍序列{#t1, #t2, #t3}為交通燈當前狀態【tx+1】的次態【tx+2】,等待下一次載入時刻(#load=0)到來。

verilog 狀態機設計

一,狀態機的基本概念 硬體設計講究並行設計的思想,雖然用verilog描述的電路大都是並行實現的,但是對於實際的工程應用,往往需要讓硬體來實現一些具有一定順序的工作,這就要用到狀態機的思想,什麼是狀態機呢?簡單的說,就是通過不同的狀態遷移來完成一些特定的順序邏輯,硬體的並行性決定了用verilog描...

FPGA狀態機設計

一 狀態機應用設計 一 狀態機基本概念 1.狀態機的描述方法 狀態機描述時關鍵是要描述清楚幾個狀態機的要素,即如何進行狀態轉移,每個狀態的輸出是什麼,狀態轉移的條件等。具體描述時方法各種各樣,最常見的有三種描述方式 1 一段式 整個狀態機寫到乙個always模組裡面,在該模組中既描述狀態轉移,又描述...

基於執行時棧的狀態機設計

狀態機執行時狀態之間的跳轉會由乙個棧來維護和管理,用於記錄狀態的跳轉上下文。狀態之間的跳轉方式有以下幾種方式 exit targetstatewhenempty 跳到上乙個狀態,當前狀態彈出棧頂,targetstatewhenempty表示當棧彈空的時候進入的狀態,沒有則如今到預設狀態。clears...