题解 | 输入序列连续的序列检测

输入序列连续的序列检测

https://www.nowcoder.com/practice/d65c2204fae944d2a6d9a3b32aa37b39

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input a,
	output reg match
	);

reg [3:0] r_st_current, r_st_next;

localparam P_IDLE = 4'd0, 
		   P_S1   = 4'd1,
		   P_S2   = 4'd2,
		   P_S3   = 4'd3,
		   P_S4   = 4'd4,
		   P_S5   = 4'd5,
		   P_S6   = 4'd6,
		   P_S7   = 4'd7,
		   P_S8   = 4'd8;

always@(posedge clk, negedge rst_n)begin
	if(!rst_n)
		r_st_current <= P_IDLE;
	else
		r_st_current <= r_st_next;
end		 
 always@(*)begin
	if(!rst_n)
		r_st_next <= P_IDLE;
	else begin
		case(r_st_current)
			P_IDLE : r_st_next <= a? P_IDLE	: P_S1;
			P_S1   : r_st_next <= a? P_S2	: P_S1;
			P_S2   : r_st_next <= a? P_S3	: P_S1;
			P_S3   : r_st_next <= a? P_S4	: P_S1;
			P_S4   : r_st_next <= a? P_IDLE	: P_S5;
			P_S5   : r_st_next <= a? P_S2	: P_S6;
			P_S6   : r_st_next <= a? P_S2	: P_S7;
			P_S7   : r_st_next <= a? P_S8	: P_S1;
			P_S8   : r_st_next <= a? P_S3	: P_S1;
			default: r_st_next <= P_IDLE;
		endcase

	end
 end
always@(posedge clk, negedge rst_n)begin
	if(!rst_n)
		match <= 1'b0;
	else if(r_st_current == P_S8)
		match <= 1'b1;
	else 
		match <= 1'b0;
end		 
  
endmodule

全部评论

相关推荐

2024-12-29 19:48
河北科技大学 Java
没事就爱看简历:问题不在于简历:1、大学主修课程学那么多应用语言,作为计算机专业是很难理解的。 2、技能部分,每一个技能点的后半句话,说明对熟练,熟悉的标准有明显误会。 3、项目应该是校企合作的练习吧,这个项目你负责什么,取得了哪些成果都没有提及,只是列举了你认为有技术含量的点,而这些都有成熟的实现。
点赞 评论 收藏
分享
kl_我是东山啊:《相关公司:阿里巴巴》
投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务