verilog 状态机模版

定义所有状态参数

localparam   IDLE    = 3'b000;
localparam   BOF     = 3'b001;
localparam   FIND    = 3'b010;
localparam   CHANGE  = 3'b011;
localparam   ERROR   = 3'b100;
localparam   EOF     = 3'b101;
always @(posedge I_sys_clk or negedge I_rst_n)
begin
    if(!I_rst_n)
        CurState <= IDLE;
    else begin
        CurState <= NxtState;
    end
end

解释状态变换的逻辑关系

always @(*) begin
        NxtState = CurState;
        case(CurState)
            IDLE   : begin
                    NxtState = (wr_sop) ? BOF : IDLE;
                end
            BOF    : begin
                    NxtState = (wr_vld)  ? FIND : BOF;
                end
            FIND   : begin
                    NxtState = (addr_vld) ? CHANGE : 
                               (failed)   ? ERROR  :FIND;
                end
            CHANGE : begin
                    NxtState = (adm_addr_finished) ? EOF : CHANGE;
                end
            ERROR  : begin
                    NxtState = IDLE;
                end
            EOF    : begin
                    NxtState = IDLE;
                end
            default : begin
                    NxtState = IDLE;
                end
        endcase
    end
posted @ 2024-04-28 17:33  心比天高xzh  阅读(53)  评论(0)    收藏  举报