牛客进阶题目11:非重叠的序列检测

可以用状态机也可用移位寄存器

注意题目给rst的命名不带n后缀,但其实还是下降沿触发

`timescale 1ns/1ns

module sequence_test1(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);
//*************code***********//
reg shut_down ;
reg [4:0]	seq_shift ;

always @(posedge clk or negedge rst) begin
	if(!rst)
		seq_shift <= 'd0 ;
	else if(shut_down)
		seq_shift <= 'd0 ;
	else
		seq_shift <= {seq_shift[3:0],data} ;
end

always @(posedge clk or negedge rst) begin
	if(!rst)
		flag <= 1'b0 ;
	else if({seq_shift[3:0],data} == 5'b10111)
		flag <= 1'b1 ;
	else
		flag <= 1'b0 ;
end
always @(posedge clk or negedge rst) begin
	if(!rst)
		shut_down <= 1'b0 ;
	else if({seq_shift[3:0],data} == 5'b10111)
		shut_down <= 1'b1 ;
	else
		shut_down <= shut_down ;
end

//*************code***********//
endmodule
posted @ 2023-01-07 22:48  骑猪上树的少年  阅读(52)  评论(0编辑  收藏  举报
回到顶部