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

状态机-重叠序列检测

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

`timescale 1ns/1ns

module sequence_test2(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);
//*************code***********//
 parameter state0=4'b0000;    
parameter state1=4'b0001;
parameter state2=4'b0010;
parameter state3=4'b0101;
parameter state4=4'b1011;
reg [3:0]state;



always @(posedge clk or negedge rst)
begin
if(!rst)
begin
  flag<=1'b0;
  state<=4'd0;
end
else 
begin
  case(state)
    state0:
            begin
                if(data==1'b1)
                begin
                state<=state1;
                flag<=1'b0;
                end
                else
                begin
                state<=state0;
                flag<=1'b0;
                end
            end
    state1:begin
                if(data==1'b0)
                begin
                    state<=state2;
                    flag<=1'b0; 
                end
                else
                begin
                    state<=state1;
                    flag<=1'b0;
                end
            end
    state2:begin
                if(data==1'b1)
                begin
                   state<=state3;
                   flag<=1'b0;  
                end
                else
                begin
                    state<=state0;
                    flag<=1'b0;
                end
           end
    state3:begin
                if(data==1'b1)
                begin
                    state<=state4;
                    flag<=1'b0;  
                end
                else
                begin
                    state<=state2;
                    flag<=1'b0; 
                end
            end
    state4:begin
                if(data==1'b1)
                begin
                  state<=state1;
                  flag<=1'b1;
                end
                else
                begin
                    state<=state2;
                    flag<=1'b1;
                end
           end
              
endcase    
end
end
  

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

一开始想着通过定义两个寄存器对输入的data信号进行打拍子从而消除亚稳态的影响,结果代码无法通过,把消除亚稳态的逻辑代码去掉之后就可以正常通过,看来这个题目中默认外界输入的信号data是没有亚稳态的,并且和时钟域是同步信号。

全部评论

相关推荐

12-13 12:11
复旦大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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