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

状态机-重叠序列检测

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

简析

题目要求检测1011序列。重复序列检测状态机的难点是确定不同输入的情况下状态如何转移。根据波形,从左向右对序列进行匹配:

  • S0: 初始状态,代表目前没有接收到满足要求的数据。data==1时,等于1011中的第一个数,进入S1状态;data==0时,保持状态。
  • S1:代表目前已经有了1个匹配的数据。data==0时,当前序列为10,等于1011中的前两个数,进入S2状态;data==1时,当前序列为11,不是1011的前两个数,但1是1011的第一个数,所以保持S1状态。
  • S2:代表目前已经有了2个匹配的数据。data==1时,当前序列为101,等于1011中的前三个数,进入S3状态;data==0时,当前序列为100,不是1011的前两三个数,00、0都不能匹配,所以返回S0状态。
  • S3:代表目前已经有了3个匹配的数据。data==1时,当前序列为1011,与要求序列匹配,进入S4桩体;data==0时,当前序列为1010,与要求序列不配,010也不匹配,但10与1011的前两个数匹配,所以进入S2状态。
  • S4:最终状态,代表目前已经得到了匹配的序列,并且在下个周期将flag拉高。data==0时,当前序列为10110,10与要求序列的前两个数匹配,所以进入S2状态;data==1时,当前序列为10111,只有最后一位的1匹配,所以进入S1状态。

代码

`timescale 1ns/1ns

module sequence_test2(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);
//*************code***********//
    parameter S0=0, S1=1, S2=2, S3=3, S4=4;
    reg [2:0] state, nstate;
    
    always@(posedge clk or negedge rst) begin
        if(~rst)
            state <= S0;
        else
            state <= nstate;
    end
    
    always@(*) begin
        if(~rst)
            nstate <= S0;
        else
            case(state)
                S0     : nstate <= data? S1: S0;
                S1     : nstate <= data? S1: S2;
                S2     : nstate <= data? S3: S0;
                S3     : nstate <= data? S4: S2;
                S4     : nstate <= data? S1: S2;
                default: nstate <= S0;
            endcase
    end
    
    always@(posedge clk or negedge rst) begin
        if(~rst)
            flag <= 0;
        else
            flag <= state==S4;
    end

//*************code***********//
endmodule
Verilog篇题解 文章被收录于专栏

本人对牛客网verilog篇题目一些理解

全部评论
图上的S4是冗余的,而且你怎么画个mealy型的状态图,写的却是Moore型的代码。。。
点赞 回复 分享
发布于 2024-06-03 02:09 瑞士
怎么感觉flag是要延迟两个时钟周期
点赞 回复 分享
发布于 2024-05-10 15:54 福建
S2:data==0的时候,当前序列为100,与要求序列的前两位数是匹配的,为啥不是保持s2状态呢?
点赞 回复 分享
发布于 2023-06-27 17:31 湖北

相关推荐

那一天的Java_Java起来:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
评论
12
1
分享

创作者周榜

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