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

状态机-重叠序列检测

https://www.nowcoder.com/practice/10be91c03f5a412cb26f67dbd24020a9

module sequence_test2(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);
parameter s0=3'd0,s1=3'd1,s2=3'd2,s3=3'd3,s4=3'd4;
//*************code***********//
reg[2:0] current_state,next_state;
always @(*)
begin
case (current_state)
s0 : next_state = data ? s1 : s0;
s1 : next_state = data ? s1 : s2;
s2 : next_state = data ? s3 : s0;
s3 : next_state = data ? s4 : s2;
s4 : next_state = data ? s0: s2;
endcase
end

always @(posedge clk or negedge rst)
begin
if(!rst)
begin
current_state<=s0;
end
else
begin
current_state<= next_state;
end
end

always @ (posedge clk or negedge rst)
begin
if(!rst)
begin
flag<=1'b0;
end
else
begin
flag <= current_state== s4 ? 1'b1 :1'b0;
end
end
//*************code***********//
endmodule

`timescale 1ns/1ns
module testbench();
    reg rst;
	reg clk=1;
	reg data;
	wire out;
	 sequence_test2 u1(
	. clk(clk)  ,
	. rst (rst) ,
	. data (data),
	.flag(out)
);
	always #5 clk = ~clk;  // Create clock with period=10 
  initial begin
  rst=0;data=0;
 #10 rst=1;
 #20 data=1;
 #10 data=0;
 #10 data=1;
 #20 data=0;
 #10 data=1;
 #50 data=0;
 #10 data=1;
 #20 data=0;
 #10 data=1;
 #10 data=0; 

 $finish;
end  
    
endmodule

题中给出的波形有误,正确波形如下:

全部评论

相关推荐

迷茫的大四🐶:那你问他上班之后老实了没
点赞 评论 收藏
分享
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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