首页 > 其他分享 >序列检测1011?重复检测&非重复检测

序列检测1011?重复检测&非重复检测

时间:2023-07-28 15:34:04浏览次数:46  
标签:sys 重复 检测 reg 状态机 序列 1011

请设计一个检测序列为1011的检测电路?

序列检测一般采用状态机实现。状态机一般采用三段式状态机实现。

重复检测 即在 1011011011 中检测 三次

非重复检测  即在 1011011011 中检测 两次

序列检测示意:

非重复检测 状态转移图

 重复检测 状态转移图

 设计代码和激励代码如下:

module  state(
input        sys_clk             ,
input        sys_rst_n           ,
input        in                  ,
output reg   flag   
);
//独热码定义状态
parameter    S0  = 5'b00001;  //初始状态
parameter    S1  = 5'b00010;  //1
parameter    S2  = 5'b00100;  //10
parameter    S3  = 5'b01000;  //101
parameter    S4  = 5'b10000;  //1011

reg [4:0]   c_state;
reg [4:0]   n_state;

//状态机的第一段采用同步时序描述状态转移
always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        c_state<=S0;
    else 
        c_state<=n_state;
end 

//状态机的第二段采用组合逻辑判断状态转移条件
always@(*) begin 
    case(c_state)
        S0  :  begin  
                if(in==1'b1)
                    n_state<=S1;
                else 
                    n_state<=S0;
               end 
        S1  :  begin  
                if(in==1'b0)
                    n_state<=S2;
                else 
                    n_state<=S0;
               end  
        S2  :  begin  
                if(in==1'b1)
                    n_state<=S3;
                else 
                    n_state<=S0;
               end  
        S3  :  begin  
                if(in==1'b1)
                    n_state<=S4;
                else 
                    n_state<=S2;
               end 
        S4  :  begin                 
                if(in==1'b1)
                    n_state<=S0;
                    //n_state<=S1;      /* 不重复检测 在输入为1 跳转S0,重复检测跳转至S1 */
                else 
                    n_state<=S0;    /*不重复检测 在输入为0 跳转S0 */              
                    //n_state<=S2;      /*重复检测跳转至S2*/
               end 

        default : n_state<=S0;
    endcase
end 
//状态机的第三段描述状态输出(这里采用时序电路输出)
always@(posedge sys_clk or negedge sys_rst_n) begin 
    if(!sys_rst_n)
        flag<=1'b0;
    else if(c_state==S4)
        flag<=1'b1;
    else 
        flag<=1'b0;
end 

endmodule
`timescale 1ns/1ns
module  tb_state();
reg  sys_clk            ;
reg  sys_rst_n          ;
reg  in                 ;
wire flag               ;


initial  begin   
    sys_clk<=1'b0;
    sys_rst_n<=1'b0;
    in<=1'b0;
    #20
    sys_rst_n<=1'b1;
    #20
    in<=1'b1;    //模拟序列输入
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
    #20
    in<=1'b0;
    #20
    in<=1'b0;
    #20
    in<=1'b1;
end 

always #10 sys_clk<=~sys_clk;

state   state_inst(
.sys_clk        (sys_clk  )     ,
.sys_rst_n      (sys_rst_n)     ,
.in             (in       )     ,
.flag           (flag     )
);     
endmodule

非重复检测波形图:

在输入为10110111011 序列下 检测到两次目标序列

重复检测波形图:

在输入为10110111011 序列下 检测到三次目标序列

若有不对的地方,敬请指正,万分感谢。

参考资料:1、(117条消息) IC/FPGA校招笔试题分析(四)再看Moore状态机实现序列检测器_摩尔状态机1011序列检测器_李锐博恩的博客-CSDN博客

标签:sys,重复,检测,reg,状态机,序列,1011
From: https://www.cnblogs.com/yhm1314/p/17587720.html

相关文章

  • 国标GB28181视频平台LntonGBS(源码版)国标视频平台大并发下SIP消息出现重复SN号的问题解
    随着国家倡导平安城市、智慧城市的建设,安防视频监控作为智慧城市安防建设的重要环节,也越来越受到重视。LntonGBS是基于公安部推出的安防主流协议(国标GB28181协议)的视频接入、处理及分发平台,具有视频直播监控、云端录像、云存储、检索回放、智能告警、语音对讲、平台级联等功能。我......
  • 医学案例|两因素重复测量方差
    一、案例介绍将手术要求基本相同的15名患者随机分3组,在手术过程中分别采用A、B、C三种麻醉诱导方法,在T0(诱导前)、T1、T2、T3、T4五个时刻测量患者的收缩压,试着进行方差分析。二、问题分析可以从案例得到,数据既包含组别、测量时间以及组别和测量时间的交叉,所以考虑使用重复测量方......
  • 代码随想录算法训练营第四十天| 300.最长递增子序列 674. 最长连续递增序列 718.
    300.最长递增子序列要求:可以删减任意个节点,最后保存最大的递增长度难点:410489如何保证全局的视角,看到很前面的节点是否大于当前的节点,而不是仅仅记录状态思路:dp[n],当子序列的末尾为N时,它的最大子序列长度也就意味着,N在它的子序列中是最大的,遍历这个N之前的所有序......
  • Unity UGUI的Physics2DRaycaster (2D物理射线检测)组件的介绍及使用
    UnityUGUI的Physics2DRaycaster(2D物理射线检测)组件的介绍及使用一、什么是Physics2DRaycaster组件?Physics2DRaycaster是Unity中的一个UGUI组件,用于在2D场景中进行物理射线检测。它可以检测鼠标或触摸事件在UI元素上的碰撞,并将事件传递给相应的UI元素。二、Physics2DRaycaste......
  • Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用
    UnityUGUI的PhysicsRaycaster(物理射线检测)组件的介绍及使用1.什么是PhysicsRaycaster组件?PhysicsRaycaster是UnityUGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。2.PhysicsRaycaster的工作......
  • YOLOv5目标检测模型
    YOLOv5目标检测模型环境配置1、安装Anaconda打开命令行输入conda-V检验是否安装及当前conda的版本2、conda常用的命令1)conda常用的命令condalist2)查看当前存在哪些虚拟环境condaenvlistcondainfor-e3)python创建虚拟环境condacreate-nyour_env_namepython=x......
  • 边沿检测电路?上升&下降&双边沿
    请设计一个边沿检测电路,检测上升、下降、双边沿?moduleedge_detect(inputsys_clk,inputsys_rst_n,inputin,outputpose_edge,outputnege_edge,outputdou_e......
  • android studio 依赖重复如何解决
    解决AndroidStudio依赖重复问题当我们在使用AndroidStudio开发Android应用时,有时会遇到依赖重复的问题。这种情况通常会导致构建失败或者应用崩溃。本文将详细介绍如何解决这个实际问题,并提供示例代码作为参考。问题描述在开发过程中,我们通常会在build.gradle文件中添......
  • java8 list转map把key重复的value合并
    无序Map<String,List<GeneralVO>>groupMap=generalVOS.stream().collect(Collectors.groupingBy(GeneralVO::getTaskId));有序Map<String,List<GeneralVO>>groupMap2=generalVOS.stream().collect(Collectors.groupingBy(GeneralVO::getTa......
  • OpenCV4之特征提取与对象检测
    1、图像特征概述图像特征的定义与表示图像特征表示是该图像唯一的表述,是图像的DNA图像特征提取概述传统图像特征提取-主要基于纹理、角点、颜色分布、梯度、边缘等深度卷积神经网络特征提取-基于监督学习、自动提取特征特征数据/特征属性尺度空间不变性像素迁移不......