状态机——序列检测
每三个时钟周期中检测输入w,若w的高电平个数恰好为2,则输出一个高电平。
module top_module ( input clk, input reset, // Synchronous reset input s, input w, output z ); reg [3:0]cs,ns; parameter A=4'b0001,B=3'b0010,C=3'b0100,D=4'b1000; reg [1:0]cnt; always@(posedge clk) if(reset) cs<=A; else cs<=ns; always@(*)begin case(cs) A:ns=s?B:A; B:ns=C; C:ns=D; D:ns=B; default:ns=A; endcase end always@(posedge clk)begin if(reset) cnt<=0; else case(cs) B:cnt<=w; C,D:cnt<=cnt+w; default:cnt<=0; endcase end assign z=(cs==B&&cnt==2); endmodule