本文簡化所有邏輯重點講解狀態機的框架。
先給幾點小結:
小結1.在原理圖和實際變現上來說,一段式和三段式完全一致,但在**量大的情況下三段式**更容易維護。
小結2.二段式的輸出由組合邏輯驅動,不僅可能輸出毛刺,而且不利於時許約束、分析。
小結3.狀態機有著流水線的「缺點」:上電之初若不全面指定初始狀態,則可能有若干個時鐘的無效輸出。
狀態機一般有3個基本組成要素:
要素1.新狀態
要素2.當前狀態
要素3.輸出
當每個clk到來,要完成3個任務:
任務1.將「新狀態」賦給「當前狀態」
任務2.產生下乙個「新狀態」(可能包含組合邏輯)
任務3.根據「當前狀態」產生輸出(可能包含組合邏輯)
以下分別給出三種狀態機的框架**、原理圖、**激勵**和**波形圖
一段式:
形式上,丟掉「新狀態」這個媒介,直接把新狀態的值賦給「當前狀態」,故沒有任務2。
形式上,在乙個觸發器裡完成任務1、3,但實際上這需要2個觸發器,因為1個觸發器只有一組輸出/輸入。
二段式:用1個觸發器完成任務1,用乙個組合邏輯完成任務2、3。最後的輸出由組合邏輯驅動,可能會產生毛刺,不利於時序分析和優化。
三段式:
乙個觸發器完成任務1,乙個組合邏輯完成任務2,乙個觸發器完成任務3
**激勵**:
本文邏輯簡單,三種狀態機波形幾乎一致。
描述狀態機的三種方法 小結
author ssszw email szwsongzhengwei 163.com 用乙個 always 模組用時序邏輯電路同時描述狀態轉移和狀態輸出。使用時序邏輯電路和組合邏輯電路同時描述狀態的轉移和輸出 always posedge clk begin case current state s...
三種不同狀態機寫法
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...
整理 狀態機的兩種寫法對比
狀態機可以用兩種方法實現 豎著寫 在狀態中判斷事件 和橫著寫 在事件中判斷狀態 這兩種實現在本質上是完全等效的,但在實際操作中,效果卻截然不同。豎著寫 在狀態中判斷事件 c 片段 cur state nxt state switch cur state else if e1 event else i...