‘10010’序列检测器的两种实现方法(有限状态机、移位寄存器) 您所在的位置:网站首页 modelsim状态机的状态 ‘10010’序列检测器的两种实现方法(有限状态机、移位寄存器)

‘10010’序列检测器的两种实现方法(有限状态机、移位寄存器)

2024-07-17 20:30| 来源: 网络整理| 查看: 265

1、序列检测器?

         序列检测器指的就是将一个指定的序列(以‘10010’为例)从数字码流中识别出来,是一个经典的数字电路实例。通常的序列检测方法有2种:有限状态机法(FSM);移位寄存器法。

        序列检测还分为重复检测和非重复检测。假设在输入码流“10010010”中进行重复检测,则会在检测到第一个“10010”和第二个“10010”后分别拉高输出表示成功检测;若非重复检测则只在检测到第一个“10010”拉高输出。

        接下来就几种情况分别进行说明并提供代码、仿真及仿真结果说明。

2、有限状态机法

        FSM(有限状态机)又可分为两种,根据状态机的输出是否与输入条件相关,可将状态机分为两大类,即摩尔(Moore)型状态机和米勒(Mealy) 型状态机。可参考FPGA状态机(一段式、二段式、三段式)、摩尔型(Moore)和米勒型(Mealy)

Moore 状态机:组合逻辑的输出只取决于当前状态,而与输入状态无关。Mealy 状态机:输出不仅取决于当前状态,还取决于输入状态。 2.1、Moore 状态机

        先将状态转移图贴出:

 

IDLE:初始状态,对输入的码流进行检测,若为1则跳转到状态A,则为0保留在该状态A: 对输入的码流进行检测,若为0则跳转到状态B(10),则为1保留在该状态B: 对输入的码流进行检测,若为0则跳转到状态C(100),则为1则跳转到状态A(101)C: 对输入的码流进行检测,若为1则跳转到状态D(1001),则为0则跳转到状态IDLE(1000)D: 对输入的码流进行检测,若为0则跳转到状态E(10010),则为1则跳转到状态A(10011)E: 此时已经成功检测到了序列”10010“,可以拉高输出。 重复检测:然后对输入的码流进行检测,若为0则跳转到状态C(100_100,后面的100可视为新的一轮检测),则为1则跳转到状态A(10010_1)非重复检测:然后对输入的码流进行检测,若为0则跳转到状态IDLE(10010_0,后面的100不可视为新的一轮检测),则为1则跳转到状态A(10010_1) 2.1.1、Verilog代码

        根据状态转移图可编写Verilog代码如下:需要注意的是,将是否进行重复检测设为了参数REPEAT,1--重复检测;0--非重复检测,提供程序复用性。

//检测序列“10010”,使用三段式Moore型状态机 module seqdet_moore #( parameter REPEAT = 1'b1 //1--重复检测;0--非重复检测 ) ( input x , //输入 input clk , //时钟 input rst_n , //复位信号,低电平有效 output reg z //输出采用时序逻辑,避免毛刺 ); //reg define reg [2:0] cur_state , //现态 next_state ; //状态 //parameter define localparam IDLE = 3'd0, A = 3'd1, B = 3'd2, C = 3'd3, D = 3'd4, E = 3'd5; //三段式状态机第1段 always @(posedge clk or negedge rst_n)begin if(!rst_n) cur_state


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有