良好的Verilog FSM代碼風格
FSM是電路設計中非常常見的結構,對於這樣常見的結構的正確輸寫非常重要, 良好的代碼風格對於閱讀理解以及後期維護也非常重要。本文總結了目前常見的兩種輸寫FSM的方法
介紹
FSM目前主要有兩種架構
Moore FSM架構
Moore FSM是目前的主流寫法, 它由三塊組成:
下麵是state diagram
三段式編碼
/**********************************************
Description : 3 always block for moore fsm (BEST)
**********************************************/
module simple_fsm (
clk,
rst_n,
w_i,
z_o
);
input
clk;
input
rst_n;
input
w_i;
output z_o;
parameter IDLE = 2'b00;
parameter S0
= 2'b01;
parameter S1
= 2'b10;
reg [1:0] curr_state;
reg [1:0] next_state;
reg z_o;
// state reg
always@(posedge clk or negedge rst_n)
begin
if (~rst_n) curr_state <= IDLE;
else
curr_state <= next_state;
end
// next state logic
always@(*)
begin
case (curr_state)
IDLE
: if (w_i) next_state = S0;
else next_state = IDLE;
S0
: if (w_i) next_state = S1;
else next_state = IDLE;
S1
: if (w_i) next_state = S1;
else next_state = IDLE;
default : next_state = IDLE;
endcase
end
// output logic
always@(*)
begin
case (curr_state)
IDLE
: z_o = 1'b0;
S0
: z_o = 1'b0;
S1
: z_o = 1'b1;
default : z_o = 1'b0;
endcase
end
endmodule
介紹
FSM目前主要有兩種架構
- Moore FSM
- Mealy FSM
Moore FSM架構
Moore FSM是目前的主流寫法, 它由三塊組成:
- state register : 由DFF構成,將Next state Logic產生的state存入current register
- next state logic : 由組合邏輯組成,根據輸入及目前state,產生next state
- output logic : 組合邏輯, 根據目前state產生輸出
下麵是state diagram
三段式編碼
/**********************************************
Description : 3 always block for moore fsm (BEST)
**********************************************/
rst_n,
w_i,
z_o
);
always@(posedge clk or negedge rst_n)
if (~rst_n) curr_state <= IDLE;
always@(*)
case (curr_state)
end
always@(*)
case (curr_state)
end
沒有留言:
張貼留言