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 功能,聚焦下一行資料。...