描述狀態機的三種方法 小結

2021-10-12 19:55:26 字數 2586 閱讀 2244

author: ssszw

email: [email protected]

用乙個 always 模組用時序邏輯電路同時描述狀態轉移和狀態輸出。

//使用時序邏輯電路和組合邏輯電路同時描述狀態的轉移和輸出

always @(posedge clk) begin

case(current_state)

state1: begin

state1_transition_statement; //根據當前描述下乙個狀態

state1_output_statement; //根據當前狀態和輸入訊號描述輸出

endstate2: begin

state2_transition_statement;

state2_output_statement;

end......

default: begin

staten_transition_statement;

staten_output_statement;

endendcase

end

一段式描述結構:

第乙個 always 模組用時序邏輯電路描述狀態轉移。

第二個 always 模組用組合邏輯電路計算次態以及更新輸出。

//使用時序邏輯電路描述狀態轉移

always @(posedge clk) begin

current_state <= next_state; //時鐘沿到達時狀態轉移

end//使用組合邏輯電路計算次態以及更新輸出

always @(current_state or data_in) begin

case(current_state)

state1: begin

state1_output_statement; //根據當前狀態描述輸出,不等待時鐘訊號直接輸出

state1_transition_statement; //根據當前狀態和輸入訊號計算下一狀態

endstate2: begin

state2_output_statement;

state2_transition_statement;

end......

default: begin

staten_output_statement;

staten_transition_statement;

endendcase

end

二段式描述結構:

第乙個 always 模組用時序邏輯電路描述狀態轉移。

第二個 always 模組用組合邏輯電路計算次態。

第三個 always 模組用時序邏輯電路在時鐘沿到達時更新輸出。

//使用時序邏輯電路描述狀態轉移

always @(posedge clk) begin

current_state <= next_state; //時鐘沿到達時狀態轉移

end//使用組合邏輯電路計算次態

always @(current_state or data_in) begin

case(current_state)

state1: begin

state1_transition_statement; //根據當前狀態和輸入訊號計算下一狀態

endstate2: begin

state2_transition_statement;

end......

default: begin

staten_transition_statement;

endendcase

end//使用時序邏輯電路進行輸出

always @(posedge clk) begin

case(next_state)

state1: begin

state1_output_statement; //根據次態描述輸出,等待時鐘訊號到達時輸出

endstate2: begin

state2_output_statement;

end......

default: begin

staten_output_statement;

endend

三段式描述結構:

一般情況下不使用一段式描述,根據實際情況使用二段式或三段式對 fsm 進行描述,優先使用三段式,當 fsm 中暫存器前的組合邏輯複雜時,選用二段式描述。

二段式與三段式主要的區別在於以下兩點:

三種狀態機 分析 對比和小結

本文簡化所有邏輯重點講解狀態機的框架。先給幾點小結 小結1.在原理圖和實際變現上來說,一段式和三段式完全一致,但在 量大的情況下三段式 更容易維護。小結2.二段式的輸出由組合邏輯驅動,不僅可能輸出毛刺,而且不利於時許約束 分析。小結3.狀態機有著流水線的 缺點 上電之初若不全面指定初始狀態,則可能有...

三種不同狀態機寫法

1 reg 3 0 cs,ns 2 always posedge clk or negedge rst n begin 3 if rst n begin 4 cs idle 5 cmd 3 b111 6 end 7 else begin 8 case cs 9 idle if wr req begi...

三種方法 2020 11 23

利用連線類,例項化得到連線物件 連線類 連線物件 new 連線類 cmd.executescalar cmd.excutereader 關注其中一條資料 物件名.read 獲取關注列所對應的值 console.writeline 物件名 name while 物件名.read 功能,聚焦下一行資料。...