题解 | #状态机-非重叠的序列检测#

状态机-非重叠的序列检测

https://www.nowcoder.com/practice/2e35c5c0798249aaa2e1044dbaf218f2

`timescale 1ns/1ns

module sequence_test1(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);

wire rst_n = rst;

//*************code***********//

	// 状态机比较好写
	localparam 
	s0 = 5'b00000,
	s1 = 5'b00001,
	s2 = 5'b00010,
	s3 = 5'b00100,
	s4 = 5'b01000,
	s5 = 5'b10000;

	reg [4:0] cur_st;
	reg [4:0] nxt_st;

	always @(posedge clk or negedge rst_n) 
	begin
		if(~rst_n)
			cur_st <= s0;
		else
			cur_st <= nxt_st;
	end

	always @( *) begin
		case (cur_st)
			s0: nxt_st = data? s1 : s0;
			s1: nxt_st = data? s1 : s2;
			s2: nxt_st = data? s3 : s0;
			s3: nxt_st = data? s4 : s2;
			s4: nxt_st = data? s5 : s2;
			s5: nxt_st = data? s1 : s0;
			default:
				nxt_st = s0;
		endcase
	end

	always @(posedge clk or negedge rst_n) 
	begin
		if(~rst_n)
			flag <= 1'b0;
		else begin
			flag <= (nxt_st==s5);
		end
	end

//*************code***********//
endmodule

状态机解题,Moore型状态机。

先画图再写代码。

全部评论

相关推荐

大象1113:RM竞赛实力这么强,转正都转不了,这公司得多强?要求的多高?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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