狀態機( state machine )
有限狀態機(finite: statemachine,簡稱fsm)
在有限個狀態之間按一定規律轉換的時序電路。
狀態暫存器由一組觸發器組成,用來記憶狀態機當前所處的狀態,狀態的改變只發生在
時鐘的跳變沿。
狀態是否改變、如何改變,取決於組合邏輯f的輸出,f是當前狀態和輸入訊號的函式。
狀態機的輸出是由輸出組合邏輯g提供的,g也是當前狀態和輸入訊號的函式。。
狀態機的設計
四段論狀態空間定義
狀態跳轉
下個狀態判斷
各個狀態下的動作
1.狀態空間定義
//define state space
parameter sleep = 4'b1000; .
parameter study = 4' b0100;
parameter eat = 4' b0010;
parameter amuse = 4' b0001;
//internal variable
reg[3:0] current state;
reg [3:0] next state ;
獨熱碼:每個狀態只有乙個寄
存器置位,解碼邏輯簡單(避免競爭冒險)
2.狀態跳轉(時序邏輯)
// transition
always @ (posedge clk or negedge rst_ n) begin
if(!rst_ n)
current state < <= sleep;//時序邏輯使用非阻塞賦值。
else
current state < <= next state;
end3.下個狀態判斷(組合邏輯)
// next state
decision
always @ (current_ state or input_ signals) begin//因為是組合邏輯,所以電平觸發。
case (current_ state)
sleep: begin
if (clock_ alarm)
next_ state = study;//組合邏輯使用阻塞賦值
else
next state = sleep;
endsyudy: begin
if (lunch time)
next state = eat;
else
next_ state = syudy;
endeat: ... ;
amuse: ...;
default: ... ;
endcase
endif/else要配對以避免latch的產生,case語句沒給全也會產生latch。
4.各個狀態下的動作
// action
wire read_ book;
assign read book = (curretn _state ==study) ? 1'b1: 1'b0;//適合狀態較少時
always @ (curretn _state) begin
if (curretn state == study)
read book = 1;
else
read_ book = 0;
end//適合狀態較多時
三段式可以在組合邏輯後再增加一級暫存器來實現時序邏輯輸出:
1、可以有效地濾去組合邏輯輸出的毛刺:
2、可以有效地進行時序計算與約束;
3、另外對於匯流排形式的輸出訊號來說,容易使匯流排資料對齊,從而減小匯流排資料間
的偏移,減小接收端資料取樣出錯的頻率。
FPGA之有限狀態機
fpga之有限狀態機 assassinn module fsm clock,reset,a,f,g input clock,reset input a output f,g reg f,g reg 3 0 state parameter idle 4 b0000,start 4 b0010,stop...
有限狀態機
有限狀態機 finite state machine,fsm 又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。狀態儲存關於過去的資訊,就是說 它反映從系統開始到現在時刻的輸入變化。轉移指示狀態變更,並且用必須滿足來確使轉移發生的條件來描述它。動作是在給...
有限狀態機
以前,只碰到過 陣列中所有數字只出現2次,只有乙個出現1次,找這個數的問題 每次迴圈異或陣列中元素,最後的結果就是single one。這次換作出現3次就懵逼了,主要原因,沒有使用過有限狀態機,應該說是連概念都沒有,所以這次一定要好好記錄一下 關於這道題的解釋discussion中woshidais...