狀態機是有限狀態自動機的簡稱,是現實事物執行規則抽象而成的一種數學模型
將電路的全部工作方式,分成幾個場景,這些場景的工作方式明顯不同,然後將這些場景通過數學模型表示出來
輸出只和狀態有關而與輸入無關
狀態表
輸出不僅和狀態有關而且和輸入有關係
狀態表
人有三個狀態健康, 感冒,**中。
觸發的條件有淋雨(t1),吃藥(t2),打針(t3),休息(t4)。
所以狀態機就是
健康-> (t4) ->健康;
健康-> (t1) ->感冒;
感冒-> (t2) ->**中;
感冒-> (t3) ->健康;
**中- (t45->健康,等等。
就是這樣狀態在不同的條件下跳轉到自己或不同狀態的圖。簡單的講就是狀態轉換圖,如果學過模電的話,對於狀態轉換圖應該比較熟悉。狀態轉換圖如下所示:
上圖所示代表,我們現有四個狀態,在s0狀態下我收到00那麼我就跳轉到s1狀態,如果在s1狀態下我收到10那麼我們就跳轉到s2。如果在s2狀態如果收到10就跳轉到s0,如果收到00那麼就跳轉到s3。
記憶當前狀態機所處的狀態——就是我當前是什麼狀態我就寫什麼狀態,00就表示s1狀態,01就表示s2狀態。
根據輸入訊號和當前狀態決定下一狀態
當前狀態和輸入訊號決定當前狀態的輸出
1.狀態機要安全。
要求我們的狀態機要 完備不能進入死迴圈,特別是不能進入非預知的狀態。
2.狀態機的設計要滿足面積和速度的要求。
要求設計簡潔、高效的狀態機。
3.狀態機的設計要清晰易懂,易維護。
乙個狀態機至少要包含兩個狀態。例如自動門,有 open 和 closed 兩個狀態。
事件就是執行某個操作的觸發條件或者口令。對於自動門,「按下開門按鈕」就是乙個事件。
事件發生以後要執行動作。例如事件是「按開門按鈕」,動作是「開門」。程式設計的時候,乙個 action 一般就對應乙個函式。
也就是從乙個狀態變化為另乙個狀態。例如「開門過程」就是乙個變換。
三段式狀態機一般包含以下三段:當前狀態、下一狀態和輸出。
//第乙個程序,同步時序always模組,格式化描述次態暫存器遷移到現態寄
存器always @ (posedge clk or negedge rst_ n)begin
if(!rst_ n)begin
current state <= idle:
endelse begin
current state <= next state;
//注意,使用的是非阻塞賦值
endend
//第二個程序,組合邏輯always模組,描述狀態轉移條件判斷
always @ (
*)begin //電平觸發
case
(current_ state)begin
s1:begin
if..
.begin
next_ state= s2;
//阻 塞賦值
else begin
next_ state= s1;
endend
s2:begin
if..
.begin
.....
.default
: begin //狀態機要完 備
next state= idle;
endendcase
end
//第三個程序,同步時序always模組,格式化描述暫存器輸出
always @ (posedge clk or negedge rst_ n) begin
if(!rst_ n)begin
...//初始化
endelse
if(current_ state==s1)begin
out1<=
1'b1;
//注意 是非阻塞邏輯
endelse begin
out1 <='"b0;
endend
1.三段always模組中,第乙個和第三個always模組是同步時序always,用非阻塞賦值(「<=」);第二個always模組是組合邏輯always模組,用阻塞賦值(「=」)。關於阻塞賦值的含義可查閱資料
2.第二部分為組合邏輯always模組,對於always的敏感列表必須採用always@ (*)的方式。
3.第二部分,組合邏輯always模組,裡面判斷條件一定要包含所有情況!可以用else保證包含完全。
4.需要注意:第二部分case中的條件應該為當前態( current state)。
5.三段式並不是一定要寫為3個always塊,如果輸出更多,就不止3段了。
狀態機學習筆記(一)
狀態機可歸納為4個要素,即現態 條件 動作 次態。詳解如下 現態 是指當前所處的狀態。條件 又稱為 事件 當乙個條件被滿足,將會觸發乙個動作,或者執行一次狀態的遷移。動作 條件滿足後執行的動作。動作執行完畢後,可以遷移到新的狀態,也可以仍舊保持原狀態。動作不是必需的,當條件滿足後,也可以不執行任何動...
狀態機學習筆記(一)
狀態機可歸納為4個要素,即現態 條件 動作 次態。詳解如下 現態 是指當前所處的狀態。條件 又稱為 事件 當乙個條件被滿足,將會觸發乙個動作,或者執行一次狀態的遷移。動作 條件滿足後執行的動作。動作執行完畢後,可以遷移到新的狀態,也可以仍舊保持原狀態。動作不是必需的,當條件滿足後,也可以不執行任何動...
狀態機 狀態機0
近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...