verilog序列检测器_11010110

news/2024/11/23 4:18:08/

功能说明:

•捕捉11010110序列

•在捕捉到每个序列后产生一个1时钟周期的标记信号

•对捕捉到序列个数进行计数并输出

•计数上限为16,计数满后值保持不变,产生计数慢的溢出信号

•允许序列的嵌套

设计思路

采用mealy型有限状态机

状态图如下所示

在状态转换图中,状态与状态之间的跳变的判定条件实现了序列的嵌套,具体如图上所示。

代码实现

  设计模块

`timescale 1 ps/ 1 ps //产生flag信号时需要用到module detect_11010110(clk,rst_,din,counter,overflow,flag );//输入——din串行输入检测信号,clk时钟信号,rst_复位信号//输出——counter计数信号,overflow计数溢出信号,flag标记信号input din,clk,rst_;output counter,overflow,flag;//检测到的序列的数目reg [4:0] counter;//数目大于16,溢出,捕捉到序列后产生一个1时钟周期的标记信号reg overflow,flag;reg [3:0] state,next_state;parameters0=4'b0000,s1=4'b0001,s2=4'b0010,s3=4'b0011,s4=4'b0100,s5=4'b0101,s6=4'b0110,s7=4'b0111,s8=4'b1000;//参数分别对应初状态和状态一至八//敏感信号:clk上升沿,rst_下降沿,state,next_state,dinalways @(posedge clk or negedge rst_)beginif (!rst_)state=s0;//复位信号,低电平有效,状态恢复至s0elsestate<=next_state;endalways @(state or din or rst_)//状态转换代码实现beginif (!rst_)next_state=s0;elsecase(state)s0:beginif (din==1) next_state=s1;else next_state = s0;ends1:beginif (din==1) next_state=s2;else next_state=s0;ends2:beginif (din==0) next_state=s3;else next_state=s2;ends3:beginif (din==1) next_state=s4;else next_state=s0;ends4:beginif (din==0) next_state=s5;else next_state=s2;ends5:beginif (din==1) next_state=s6;else next_state=s0;ends6:beginif (din==1) next_state=s7;else next_state=s0;ends7:beginif (din==0) next_state=s8;else next_state=s2;ends8:beginif (din==1) next_state=s1;else next_state=s4;enddefault: next_state = s0;endcaseendalways @(posedge clk or negedge rst_)if(!rst_)flag<=1'b0;else if(state == s8)begin#10 flag<=1'b1;#10 flag<=1'b0;//检测到序列11010110后输出一个flag信号,长度为一个时钟周期endelse;always @(posedge clk)//实现序列检测的计数beginif(!rst_)//复位信号有效,计数输出信号和溢出信号清0begincounter<=0;overflow<=0;endelse if(state == s8)counter<=counter+5'b00001;beginif (counter>=5'b10000)beginoverflow<=1;counter<=510000;endelse overflow<=0;endendendmodule

测试模块

`timescale 1 ps/ 1 psmodule detect_11010110_vlg_tst();reg clk;reg din;reg rst_;// wires                                              wire [4:0]  counter;wire flag;wire overflow;detect_11010110 i1 (  .clk(clk),.counter(counter),.din(din),.flag(flag),.overflow(overflow),.rst_(rst_));initial //时钟信号,时钟周期为10                                              begin                                                 // code that executes only once                        // insert code here --> begin                         #0 clk=0;forever #5 clk=~clk;endinitial//复位信号begin                                                      // --> end#0 rst_=1;#20 rst_=0;#20 rst_=1;                                            $display("Running testbench");endinitial$monitor($time,,"counter=%d overflow=%b",counter,overflow);//调用monitor函数,监控和输出参数counter和overflow的值                                                                          initial                                                                begin                                                 //产生随机的串行输入检测信号din                         din=0;//起始为0repeat(5000)//重复5000次,每隔10ps输入一个begin# 10 din={$random} % 2;end$stop;//调用stop函数                                              end                                                   endmodule

仿真结果

Monitor函数输出结果

检测到第一个11010110信号,输出一个一时钟周期宽度的flag信号

 

计数计到16,产生overflow溢出信号,counter值保持不变 

 

 


http://www.ppmy.cn/news/839687.html

相关文章

1、 赛灵思-Zynq UltraScale+ MPSoCs:产品简介

目录 1、 赛灵思-Zynq UltraScale MPSoCs&#xff1a;产品简介1.1、Zynq UltraScale MPSoCs简介1.2、Zynq UltraScale MPSoC 处理系统的主要特性1.2.1、功耗优先1.2.2、系统性能功耗比提升 5 倍 1.3、Zynq UltraScale™ MPSoC产品信息1.3.1、Zynq UltraScale™ MPSoC产品型号1.…

牛客练习赛106 药丸

牛客练习赛106 药丸 2022.12.02 与舍友四排玩了团体对抗的模式&#xff0c;练习赛就只有40分钟的剩余时间了。 题目描述 来源&#xff1a;牛客网 牛牛有 n n n 个属性&#xff0c;第 i i i 个属性的初始值为 a i a_i ai​ &#xff0c;牛牛想把第 i i i 个属性的值变为…

牛客练习赛106 G

题目 题意: 给定一个长度为 nn的 01 序列 S&#xff0c;求最少需要多少次操作能使得最终得到的 01 序列不存在两个相邻位置值都为 1。 若无解则输出 -1。 思路: dp。 f[i][j]: 表示第i个1放到j这个位置时的最小操作数。 f[i][j] f[i-1][k], 1<k<j-2. 第二维只需要枚举到…

Xilinx 7 Series/UltraScale GTX/GTH动态速率配置

Xilinx transceiver动态修改速率计算工具&#xff0c;支持的平台&#xff1a; 界面&#xff1a;

序列检测10110

序列检测 通过这个序列检测&#xff0c;正好复习前面Mealy状态机。 检测序列10110&#xff0c;用计数计其出现的次数。 工具生成的状态机 模块代码 module seq_dec(input clk,input rst_n,input din,output dout );reg [7:0] cnt; //计满足10110序列的次数reg [5:0] P_st…

iview-admin使用小结

首先在使用一个框架之前一定要完整的看一下相关文档&#xff0c;因为框架中会封装常用的功能&#xff0c;也会更加符合大众要求。在ui设计图上&#xff0c;可能实现某个功能设计图中给出的交互并不是很好&#xff0c;而在框架中有更好的组件可以实现&#xff0c;但因为没有看文…

数据结构之树

1.树定义 树(Tree)是由n(n≥0)个结点组成的有限集合(树中元素通常称为结点)。 n&#xff1d;0的树称为空树&#xff1b;n&#xff1e;0的树T由以下两个条件约定构成: ① 有一个特殊的结点称为根(Root)结点&#xff0c;它只有后继结点&#xff0c;没有前驱结 点。 ② 除根结点之…

周末之个人杂想(十五)

闲来无事&#xff0c;将自己大学四年所发生的事稀里糊涂的写了出来&#xff0c;顺便附带介绍了下自己的家乡和自己的母校。 关于长春 长春是个小城&#xff0c;位于吉林省的中心&#xff0c;是吉林省的省会&#xff0c;虽然吉林省也有个市叫吉林市&#xff0c;但长春确是吉林省…