guantouren的个人空间 https://blog.eetop.cn/24326 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

边沿检测法之彻底理解

已有 1567 次阅读| 2011-11-10 01:30 |个人分类:verilog

 

看了一篇《神奇的硬件秒速边沿检测技术》的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视图如下:

仿真波形如下:

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

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


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 2

    评论
  • 465

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 15:29 , Processed in 0.010323 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部