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

状态机-重叠序列检测

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

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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