原创 边沿检测法之彻底理解

2011-7-24 22:47 2518 1 3 分类: FPGA/CPLD

看了一篇《神奇的硬件秒速边沿检测技术》的blog,看了一遍没看懂,于是自己也模拟了一下,看波形图,看着看着突然一下子开窍了,哈哈,实践出真知!

我的边沿检测模块edge_detect程序如下:

module edge_detect(

                  CLK,RSTn,

                  SIG_detected,

                  H2L_flag

                  );

 

//最开头是模块外部输入输出信号和数据                

input  CLK;              //50MHz主时钟

input  RSTn;             //低电平复位信号,

input  SIG_detected;     //被测信号

output H2L_flag;         //1->0标志信号

 

//内部寄存器和接线

reg    H2L_flag1;

reg    H2L_flag2;

reg    H2L_flag3;

//reg      H2L_flag4;

 

always @ (posedge CLK or negedge RSTn)

    if(!RSTn) begin

       H2L_flag1<=1'b1;

       H2L_flag2<=1'b1;

       H2L_flag3<=1'b1;

//     H2L_flag4<=1'b0;

    end

    else begin

       H2L_flag1<=SIG_detected;

       H2L_flag2<=H2L_flag1;

       H2L_flag3<=H2L_flag2;

//     H2L_flag4<=H2L_flag3;

    end

assign H2L_flag=H2L_flag3&(~H2L_flag1);   //negative脉冲边沿检测

 

endmodule

 

生成的RTL视图如下:

20110724224202001.gif

仿真波形如下:

20110724224203002.jpg

为什么几个触发器搭起来就能进行边沿检测呢?道理现在看看真TMD简单:每一个dff就延迟一拍时钟,虽然延迟了,但从dffQ端输出的信号仍然是最初的输入信号电平状态(只是比输入端口延迟了而已,也就是把输入端初始状态经过几个时钟周期保存下来),而取反相与的是输入信号现在的电平状态(没有经过延迟),也就是说如果一个输入信号最初是状态1,几个时间段后输入信号变成状态0,即同一个信号从1跳变到0,傻子都知道这个信号是发生了下降沿跳变。  注意这里只是边沿检测不是延时消抖!!!!!

当前输入信号求反再和延迟后的同一个输入信号相与,目的是为了产生一个时钟周期的高电平作为跳变的标志位,而且想延迟多少时间就加几个dff

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2012-8-24 16:38

程序编译不能通过,assign 语句等号左边不能为reg类型,而必须为wire类型,不知道你的结果是怎么出来的?

用户1634340 2011-8-27 13:34

我写按键消抖就这样用啊
相关推荐阅读
用户1064897 2011-08-08 01:51
Always过程块语法
★   Always过程块语法: always过程块是由always过程语句和语句块组成的,语法格式如下: always @ (敏感事件1 or 敏感事件2 or 敏感事件3…….) 语句块   ...
用户1064897 2011-08-08 01:47
异步复位时亚稳态危害的例子
下面是一个异步复位危害的例子,这是我自己想了好久才想出来的,不对的地方请高手指出。 代码很简单,就是一个计时器,设置了一个8位的定时计时器counter(也可以是更多的位),复位的时候counter...
用户1064897 2011-08-07 23:35
亚稳态2——异步复位时亚稳态产生的影响
——摘自异步复位设计中的亚稳态问题及其解决方案 Trecovery ( recovery time) 指的是原本有效的异步复位信号释放(对低电平有效的复位来说就是上跳沿) 与紧跟其后的第一个时钟有效...
用户1064897 2011-08-07 23:28
初步理解亚稳态1——多看E文才是正道
    这是转发特权同学的翻译《 Understanding Metastability in FPGAs 》,加入了一些自己的理解 所有数字器件(例如FPGA)的信号传输都会有一定的时序要求,...
用户1064897 2011-07-24 22:58
FIFO的使用注意
一个最简单的FIFO如下图: 左图包括数据输入data[7:0],输出q[7:0],写请求wrreq,读请求rdreq,时钟clock,FIFO满标志位full,有的还有FIFO空标志位empty...
用户1064897 2011-07-24 22:55
Altera器件型号指南
1.    其型号编号方式EP1C代表Cyclone器件,EP2C代表Cyclone II,EP3C代表Cyclone III,EP4C代表Cyclone IV,EP5C代表Cyclone V 2....
我要评论
2
1
关闭 站长推荐上一条 /3 下一条