Verilog中的有限状态机
什么是狀態機:
狀態機是由狀態寄存器和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態進行狀態轉移,是協調相關信號動作、完成特定操作的控制中心;
有限狀態機(Finite State Machine)分為以下兩類,分別是:摩爾(Moore)狀態機和米利(Mealy)狀態機;
? ? ? ? 時序電路的輸出總取決于觸發器的當前狀態,但卻不一定直接依賴于原始輸入,因此圖中的細虛線表示的連線可能存在,也可能不存在;當不存在時,也即輸出僅由電路狀態決定的時序電路稱為Moore型,而輸出由電路狀態和原始輸入同時決定的成為Mealy型(這樣的命名是為了紀念20世紀50年代上述電路行為的提出者Edward Moore和George Mealy);
再多說幾點:
???????無論?Moore狀態機的輸入信號何時到達,他的輸出信號知道下一個時鐘周期的上升沿都不會改變,這對于避免設置時間違例非常重要;而當Mealy狀態機的輸入信號在一個時鐘周期的中間的某個時刻發生了改變,它的一個或多個輸出和下一個狀態信號可能會在一段時間后發生變化。 而這個一段時間之后可能會出現在下一個時鐘上升沿的建立時間之后。 如果發生這種情況,保存 FSM 下一個狀態的寄存器可能會收到不正確的輸入。這對于 FSM是?一種非常痛苦且難以找到的錯誤QWQ。
????????盡管有以上的分析,但是Mealy也有其自身的優勢;比如說,Moore狀態機可能會比Mealy狀態機需要更多的狀態來指定他的功能和作用,這是因為Moore狀態機的輸出信號只取決于當前的狀態,而Mealy狀態機則是還需要依賴輸入信號,因此Mealy狀態機可以為單個狀態指定不同的輸出行為;
?Moore狀態機verilog寫法實例:
module simple(input clk,input rst_n,input w,output z );localparam A = 2'b00; localparam B = 2'b01; localparam C = 2'b10;reg [1:0] state; assign z = (y == C);always @(posedge clk or negedge rst_n) beginif (!rst_n) beginstate <= A;endelsecase (state)A:beginif (w) beginstate <= B;endelse beginstate <= A;endend B:beginif (w) beginstate <= C;endelse beginstate <= A;endendC:beginif (w) beginstate <= C;endelse beginstate <= A;endenddefault: beginstate <= state;endendcase end endmodule?Mealy狀態機寫法實例:
module mealy(input clk,input rst_n,input w,output y,output Y,output reg z );localparam A = 1'b0; localparam B = 1'b1;always @(w,y) begincase (y)A:beginif (w) beginz = 0;y = B;endelse beginz = 0;Y = A;endend B:beginif (w) beginz = 1;y = B;endelse beginz = 0;Y = A;endendendcase endalways @(posedge clk or negedge rst_n) beginif (!rst_n) beginy <= A;endelse beginy <= Y;end end endmodule?這篇筆記參考網上眾多資料實驗并整理而成,如果涉及侵權煩請請告知,我將第一時間處理。
總結
以上是生活随笔為你收集整理的Verilog中的有限状态机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学生用计算机玩游戏怎么按OK键,玩电脑游
- 下一篇: 英雄打怪游戏。