外同步信号检测---verilog---状态机

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: chensimin
//
// Create Date: 2018/02/08 11:39:20
// Design Name:
// Module Name: signal_detect
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////// module signal_detect #
(
parameter TOTAL_TIME_CNT = ,
parameter THRESHOLD_VALUE = ,
parameter WIDTH =
)
(
input wire clk,
input wire rst,
input wire signal,
output wire signal_existence
); //--------------------------------------------------------------
外部信号边沿检测
reg signal_delay_1;
reg signal_delay_2;
wire signal_rise;
always @(posedge clk or posedge rst)
begin
if( rst )
begin
signal_delay_1 <= 'b0;
signal_delay_2 <= 'b0;
end
else
begin
signal_delay_1 <= signal;
signal_delay_2 <= signal_delay_1;
end
end assign signal_rise = !signal_delay_2 && signal_delay_1; //----------------------------------------------------------------
计数器1 用来在第一个状态计数
reg [ WIDTH- : ] time_cnt_1;
always @(posedge clk or posedge rst)
begin
if( rst )
time_cnt_1 <= ;
else if( time_cnt_1 < TOTAL_TIME_CNT - && current_state == 'b01)
time_cnt_1 <= time_cnt_1 + 'b1;
else
time_cnt_1 <= ;
end //----------------------------------------------------------------
计数器2 用来在第二个状态计数
reg [ WIDTH- : ] time_cnt_2;
always @(posedge clk or posedge rst)
begin
if( rst )
time_cnt_2 <= ;
else if( time_cnt_2 < TOTAL_TIME_CNT - && current_state == 'b10)
time_cnt_2 <= time_cnt_2 + 'b1;
else
time_cnt_2 <= ;
end //----------------------------------------------------------------
计算第一个状态下 signal_rise 的脉冲个数
reg [ WIDTH- : ] i;
always @(posedge clk or posedge rst)
begin
if( rst )
i <= ;
else if ( time_cnt_1 == )
i <= ;
else if( signal_rise && current_state == 'b01)
i <= i + 'b1;
end //----------------------------------------------------------------
计算第二个状态下 signal_rise 的脉冲个数
reg [ WIDTH- : ] j;
always @(posedge clk or posedge rst)
begin
if( rst )
j <= ;
else if ( time_cnt_2 == )
j <= ;
else if( signal_rise && current_state == 'b10)
j <= j + 'b1;
end //---------------------------------------------------------------- localparam NO_SIGNAL = 'b01;
localparam HAVE_SIGNAL = 'b10; reg [:]current_state;
reg [:]next_state;
always @ (posedge clk or posedge rst)
begin
if( rst )
current_state <= NO_SIGNAL;
else
current_state <= next_state;
end //--------------------------------------------------------------
状态机跳变条件:
1.在NO_SIGNAL状态下,先是在一定时间段内,数脉冲的个数,当脉冲的个数大于了某个阈值时,立刻判断为,外同步信号存在。
2.在HAVE_SIGNAL状态下,同样也是数脉冲的个数,当一段时间内,脉冲总数量小于某个阈值时,则判断为外同步信号丢失,状态跳转到NO_SIGNAL状态
always @(*)
begin
next_state = NO_SIGNAL;
case( current_state ) NO_SIGNAL:
begin
if( i >= THRESHOLD_VALUE )
next_state = HAVE_SIGNAL;
else
next_state = NO_SIGNAL;
end HAVE_SIGNAL:
begin
if( (time_cnt_2 == TOTAL_TIME_CNT - ) && j < THRESHOLD_VALUE )
next_state = NO_SIGNAL;
else
next_state = HAVE_SIGNAL;
end endcase
end //-------------------------------------------------------------
  状态机输出信号驱动
reg signal_existence_r;
always @(posedge clk or posedge rst)
begin
if (rst)
begin
signal_existence_r <= 'b0;
end
else
begin case( current_state ) NO_SIGNAL:
begin
signal_existence_r <= 'b0;
end HAVE_SIGNAL:
begin
signal_existence_r <= 'b1;
end endcase end
end assign signal_existence = signal_existence_r; endmodule /* add_force {/signal_detect/clk} -radix hex {1 0ns} {0 50000ps} -repeat_every 100000ps
add_force {/signal_detect/rst} -radix hex {1 0ns} {0 150ns}
add_force {/signal_detect/signal} -radix hex {0 0ns} {1 300ns} {0 400ns} -repeat_every 500ns */

仿真波形:

1.

2.

3.

外同步信号检测---verilog---状态机的更多相关文章

  1. 视频外同步信号研究---fvh

    视频外同步信号研究---fvh 一个时钟周期有两个edge,分别称为:(1)Leading edge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候:对于开始电压是0,那么就是0变成 ...

  2. C# 同步 异步 回调 状态机 async await Demo

    源码 https://gitee.com/s0611163/AsyncAwaitDemo 为什么会研究这个? 我们项目的客户端和服务端通信用的是WCF,我就想,能不能用异步的方式调用WCF服务呢?或者 ...

  3. Verilog状态机使用技巧

    “没有什么难处是通过增加一个状态机不能够解决的,如果不行,那就俩..” 在实现某种功能时,若感觉该功能的各种可能状态间的切换太绕了,此时,增加一个状态机往往能使思路变得清晰,功能的实现也就简单明了了. ...

  4. Verilog状态机

    以1011为例 代码如下: //1011(Meay型) module state1(clk,in,rst_n,out); input clk; input rst_n; input in; outpu ...

  5. (原创)Verilog三段式状态机

    下面以上图一个简单的FSM说明三段式Verilog状态机范式: `timescale 1ns / 1ps module FSM( clk,rst_n, in1,in2, out1,out2, CS,N ...

  6. RSync实现文件备份同步详解

    1.rsync简介 rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输.rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个 ...

  7. linux高级技巧:rsync同步(一个)

    1.rsync基本介绍         rsync这是Unix下的一款应用软件,它能同步更新两处计算机的文件与文件夹,并适当利用差分编码以降低数据传输.rsync中一项与其它大部分类似程序或协议中所未 ...

  8. 160407、java实现多线程同步

    多线程就不说了,很好理解,同步就要说一下了.同步,指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系.所以同步的关键是多个线程对象竞争同一个共享资源. 同步分为外同步和内同步.外同步就是在外 ...

  9. [笔记][FPGA]有限状态机FSM学习笔记(三)

    0. 简介 在数电FPGA中,FSM是一个重要的部分,藉此可以完成一些复杂算法的硬件实现等.其中有关于FSM的写法按照always块的个数来划分,又分为一段式.两段式.三段式状态机.顾名思义,一段式就 ...

随机推荐

  1. 解析XML技术

    转载:http://developer.51cto.com/art/200903/117512.htm XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交 ...

  2. RESTful Web Service 架构

    特点:简单,可靠,高效,跨平台和跨语言 含义: Web Service 简单来说是指提供给不同设备通过互联网(一般使用 HTTP 协议)进行通信和交换数据的一种服务.RESTful Web Servi ...

  3. mysql_connect和mysql_pconnect区别

    php中mysql_pconnect()的实现方式:其实mysql_pconnect()本身并没有做太多的处理,它唯一做的只是在php运行结束后不主动close掉mysql的连接.mysql_pcon ...

  4. DG增量恢复

    本篇文档: 讲述DG环境出现GAP归档缝隙,且主库的该归档日志被删除的情况下,快速恢复DG的连通性 流程讲述: >明确主库增量备份起点 scn 查询备库控制文件current scn ,及v$d ...

  5. Excel导入CSV文件中文乱码

    参考: iconv -f UTF8 -t GB18030 a.csv >b.csv 或iconv -f UTF-8 -t GB18030 a.csv >b.csv

  6. 线段树专题2-(加强版线段树-可持续化线段树)主席树 orz! ------用于解决区间第k大的问题----xdoj-1216

    poj-2104(区间第K大问题) #include <iostream> #include <algorithm> #include <cstdio> #incl ...

  7. 《DSP using MATLAB》Problem 5.31

    第3小题: 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Out ...

  8. Sencha Touch app example -- oreilly app 分析

    from: 2013/8/30的笔记 使用development.js 读取 app.json 配置文件 app.json 配置了app.js文件 app.js lauch function ,首先用 ...

  9. loki grafana 团队开源的,类似Prometheus 的log 系统

    Prometheus 主要面向的是metrics,但是loki 是log,这样加上grafana 强大的可视化以及alert能力, 我们可以做好多事情,loki 的设计来源于Prometheus. 组 ...

  10. Monitor Minio server with Prometheus

    转自:https://blog.minio.io/monitor-minio-server-with-prometheus-4ed537abcb74 Prometheus is an open sou ...