题解 | #不重叠序列检测#

不重叠序列检测

https://www.nowcoder.com/practice/9f91a38c74164f8dbdc5f953edcc49cc

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	output reg match,
	output reg not_match
	);
	reg [3:0]next_state;
	reg [3:0]cur_state;
	parameter ST0=4'b0000;
	parameter ST1=4'b0001;
	parameter ST2=4'b0010;
	parameter ST3=4'b0011;
	parameter ST4=4'b0100;
	parameter ST5=4'b0101;
	parameter FT1=4'b0111;
	parameter FT2=4'b1000;
	parameter FT3=4'b1001;
	parameter FT4=4'b1010;
	parameter FT5=4'b1011;
	parameter OT1=4'b1100;//符合序列状态
	parameter WT1=4'b1101;//不符合序列状态
	//状态转移
	always@(posedge clk or negedge rst_n)
	begin
	   if(~rst_n)
	      cur_state<=ST0;
	   else
		  cur_state<=next_state;
	end
	//match输出
	always@(posedge clk or negedge rst_n)
	if(~rst_n)
	begin
		match<=0;
		not_match<=0;
	end
	else
	begin
	/*
	↓↓↓下面如果用cur_state,结果会比答案要求延时一个时钟周期,
	*/
		match<=(next_state==OT1);
		not_match<=(next_state==WT1);
	end
	//状态转移逻辑
	always@(cur_state or data)
	begin
		case(cur_state)
		ST0:next_state<=(data?FT1:ST1);
		ST1:next_state<=(data?ST2:FT2);
		ST2:next_state<=(data?ST3:FT3);
		ST3:next_state<=(data?ST4:FT4);
		ST4:next_state<=(data?FT5:ST5);
		ST5:next_state<=(data?WT1:OT1);
		FT1:next_state<=FT2;
		FT2:next_state<=FT3;
		FT3:next_state<=FT4;
		FT4:next_state<=FT5;
		FT5:next_state<=WT1; 
		OT1:next_state<=(data?FT1:ST1);
		WT1:next_state<=(data?FT1:ST1);
		endcase
	end
endmodule

全部评论

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务