题解 | #状态机-非重叠的序列检测#
状态机-非重叠的序列检测
https://www.nowcoder.com/practice/2e35c5c0798249aaa2e1044dbaf218f2
`timescale 1ns/1ns module sequence_test1( input wire clk , input wire rst , input wire data , output reg flag ); //*************code***********// parameter S0=3'd0; parameter S1=3'd1; parameter S2=3'd2; parameter S3=3'd3; parameter S4=3'd4; parameter S5=3'd5; reg [2:0]cs; reg [2:0]ns; always@(posedge clk or negedge rst)begin if(~rst) cs<=S0; else cs<=ns; end always@(*)begin if(~rst) ns=0; else case(cs) S0:begin if(data==1) ns=S1; else ns=S0; end S1:begin if(data==0) ns=S2; else ns=S1; end S2:begin if(data==1) ns=S3; else ns=S0; end S3:begin if(data==1) ns=S4; else ns=S2; end S4:begin if(data==1) ns=S0; else ns=S2; end default:ns=S0; endcase end always@(posedge clk or negedge rst)begin if(~rst) flag<=0; else if(cs==S4&&data==1) flag<=1; else flag<=0; end //*************code***********// endmodule
没啥可说的,就是序列检测,注意最后一次即可