两段式状态机
module detect_2(
input clk_i,
input rst_n_i,
output out_o
);
reg out_r;
// 状态声明和状态编码
reg [1:0] Current_state;
reg [1:0] Next_state;
parameter [1:0] S0=2'b00;
parameter [1:0] S1=2'b01;
parameter [1:0] S2=2'b10;
parameter [1:0] S3=2'b11;
// 时序逻辑:描述状态转换
always @(posedge clk_i)
begin
if (!rst_n_i)
Current_state <= 0;
else
Current_state <= Next_state;
end
// 组合逻辑:描述下一状态和输出
always @(*)
begin
case (Current_state)
S0 :
begin
out_r = 1'b0;
Next_state = S1;
end
S1 :
begin
out_r = 1'b1;