0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是边沿检测

硬件攻城狮 来源:硬件攻城狮 2023-06-17 14:26 次阅读

1、什么是边沿检测

边沿检测用于检测信号的上升沿或下降沿,通常用于使能信号的捕捉等场景。

2、采用1级触发器的边沿检测电路设计(以下降沿为例)

2.1、设计方法

设计波形图如下所示:

60103164-0cc6-11ee-962d-dac502259ad0.png

各信号说明如下:

sys_clk:基准时钟信号(这里设定为50MHz,周期20ns)

sys_rst_n:低电平有效的复位信号

in:输入信号,需要对其进行下降沿检测

~in:输入信号的反相信号

in_d1:对输入信号寄存一拍

in_neg:得到的下降沿指示信号,该信号为 ind1 && ~in

对上图进行分析:

信号in是我们需要对其进行下降沿检测的信号

信号~in是将信号in反向

信号in_d1是使用寄存器寄存in信号,即对其进行打拍,或者说是同步到系统时钟域下

输入信号开始为高电平,在L2处变为低电平,产生第1个下降沿,在L5出产生第2个下降沿

A处为产生的第1个下降沿指示信号,B处为产生的第2个下降沿指示信号

由此我们可以推导出边沿检测信号产生的一般方法:

将需要检测的信号寄存一拍,同步到系统时钟域下,得到信号 in_d1

将需要检测的信号反向,得到信号 ~in

将信号 in_d1 反向,得到信号 ~in_d1

通过组合逻辑电路可以得到下降沿信号 in_neg:assign in_neg = ~in && in_d1

同样通过组合逻辑电路可以得到上升沿信号 in_pos:assign in_pos = in && ~in_d1

双边沿检测就是将上两条加(或运算)起来就可以了,化简后有:双边沿信号 in_both = in ^ ind1

2.2、Verilog实现

根据上文分析不难编写Verilog代码如下:

60257d30-0cc6-11ee-962d-dac502259ad0.png

2.3、RTL电路

60366db6-0cc6-11ee-962d-dac502259ad0.png

上图为生成的RTL电路:该电路由一级D触发器+与逻辑门构成。

2.4、Testbench

Testbench文件需要例化刚刚设计好的模块,并设置好激励。

6044ec2e-0cc6-11ee-962d-dac502259ad0.png

6052f7b0-0cc6-11ee-962d-dac502259ad0.png

2.5、仿真结果

使用ModelSim执行仿真,仿真出来的波形如所示:

6062b150-0cc6-11ee-962d-dac502259ad0.png

从波形图可以看到:

10ns后停止复位

在第1条参考线处输入信号 in 产生了第1个下降沿信号

在第3条参考线处输入信号 in 产生了第2个下降沿信号

在第1条参考线和第2条参考线之间的产生了一个周期的下降沿指示信号 in_neg

在第3条参考线和第4条参考线之间的产生了一个周期的下降沿指示信号 in_neg

3、采用2级触发器的边沿检测电路(以下降沿为例)

3.1、设计方法

设计波形图如下所示:

607f3564-0cc6-11ee-962d-dac502259ad0.png

各信号说明如下:

sys_clk:基准时钟信号(这里设定为50MHz,周期20ns)

sys_rst_n:低电平有效的复位信号

in:输入信号,需要对其进行下降沿检测

in_d1:对输入信号寄存1拍

in_d2:对输入信号寄存2拍

~in_d1:in_d1信号的反相信号

in_neg:得到的下降沿指示信号,该信号为 ~ind1 && ind2

对上图进行分析:

信号in是我们需要对其进行下降沿检测的信号

信号in_d1是使用寄存器寄存in信号,即对其打1拍

信号in_d2是使用寄存器寄存in_d1信号,即对其打1拍

信号~in_d1是将信号in_d1反向

输入信号开始为高电平,在L2处变为低电平,产生第1个下降沿,在L5出产生第2个下降沿

A处为产生的第1个下降沿指示信号,B处为产生的第2个下降沿指示信号

输出的下降沿指示信号落后下降沿一个时钟周期,这是因为对输入信号进行了寄存以消除亚稳态

由此我们可以推导出边沿检测信号产生的一般方法:

将需要检测的信号分别寄存1拍、2拍,同步到系统时钟域下,得到信号 in_d1、in_d2

将in_d1信号反向,得到信号 ~in_d1

将in_d2信号反向,得到信号 ~in_d2

通过组合逻辑电路可以得到下降沿信号 in_neg:assign in_neg = ~in_d1 && in_d2

同样通过组合逻辑电路可以得到上升沿信号 in_pos:assign in_pos = in_d1 && ~in_d2

双边沿检测就是将上两条加(或运算)起来就可以了,化简后有:双边沿信号 in_both = in_d1 ^ in_d2

3.2、Verilog实现

根据上文分析不难编写Verilog代码如下:

60b6f13e-0cc6-11ee-962d-dac502259ad0.png

3.3、RTL电路

60db8ecc-0cc6-11ee-962d-dac502259ad0.png

上图为生成的RTL电路:该电路由2级D触发器+与逻辑门构成。

3.4、Testbench

Testbench文件同2.4章。

3.5、仿真结果

使用ModelSim执行仿真,仿真出来的波形如所示:

60e6e6fa-0cc6-11ee-962d-dac502259ad0.png

从波形图可以看到:

10ns后停止复位

在第1条参考线处输入信号 in 产生了第1个下降沿信号

在第4条参考线处输入信号 in 产生了第2个下降沿信号

在第2条参考线和第3条参考线之间的产生了一个周期的下降沿指示信号 in_neg

在第5条参考线和第6条参考线之间的产生了一个周期的下降沿指示信号 in_neg

两级寄存器构成的边沿检测电路可以有效的防止亚稳态的产生,产生的使能信号会落后一个时钟周期。
责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 触发器
    +关注

    关注

    14

    文章

    1996

    浏览量

    61051
  • 检测信号
    +关注

    关注

    0

    文章

    6

    浏览量

    6303
  • 时钟信号
    +关注

    关注

    4

    文章

    445

    浏览量

    28509

原文标题:4、参考

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA设计经验之边沿检测

    在同步电路设计中,边沿检测是必不可少的!
    发表于 03-01 09:59 5092次阅读

    FPGA设计中的边沿检测问题

    在同步电路设计中,边沿检测是必不可少的!后一种方法所耗的资源要比前一种方法多(一个触发器),但是就可以大大提高可靠性,这绝对是物有所值!!
    发表于 02-01 10:53 972次阅读
    FPGA设计中的<b class='flag-5'>边沿</b><b class='flag-5'>检测</b>问题

    FPGA设计经验:边沿检测

    在同步电路设计中,边沿检测是必不可少的!
    发表于 08-16 15:19 1882次阅读
    FPGA设计经验:<b class='flag-5'>边沿</b><b class='flag-5'>检测</b>

    关于边沿检测的问题

    入图,有没有大神分析一下,是怎实现边沿检测的,它各个时期的电平状态是什么
    发表于 04-13 14:36

    fpga应用篇(二):边沿检测

    `fpga应用篇(二):边沿检测上一篇介绍了阻塞赋值与非阻塞赋值,这次我们利用非阻塞赋值产生一个简单的应用即边沿检测边沿
    发表于 04-06 21:28

    边沿检测设计报告

    边沿检测设计报告
    发表于 09-26 15:38

    FPGA_100天之旅_边沿检测

    FPGA_100天之旅_边沿检测
    发表于 09-28 13:37

    基于FPGA边沿检测的理解问题?

    我看到网上关于边沿检测的讲解,有个地方不理解,t0时刻和t1时刻分别是怎样的时刻,trigger在时钟上升沿经过触发器输出的信号和经过非门的信号是什么样的关系?我的理解是trigger分别输出后是两个电平相反的信号,为什么相与之后就可以
    发表于 05-10 14:52

    边沿检测与提取-轮廓跟踪知识详解

    边沿检测与提取程序
    发表于 01-29 14:56 0次下载

    用移位寄存器实现边沿检测的技巧

    本文记录一下关于用移位寄存器实现边沿检测的技巧。要学会硬件思维式的“模块式”读写代码,那么请多看别人的代码,并用ISE或者VIVADO综合出来看看。 边沿检测
    发表于 04-15 10:26 3251次阅读

    边沿检测的目的及电路原理分析

    边沿检测电路(edge detection circuit)是个常用的基本电路。所谓边沿检测就是对前一个clock状态和目前clock状态的比较,如果是由0变为1,能够
    的头像 发表于 11-19 07:09 1.1w次阅读

    Verilog系统函数和边沿检测

    “ 本文主要分享了在Verilog设计过程中一些经验与知识点,主要包括Verilog仿真时常用的系统任务、双向端口的使用(inout)、边沿检测
    的头像 发表于 03-15 13:34 2305次阅读

    FPGA学习-边沿检测技术

    所谓边沿检测,就是检测输入信号即上升沿或者下降沿的检测边沿检测的电路很好实现:上一时刻为低电
    的头像 发表于 11-26 10:20 1718次阅读

    Verilog边沿检测的基本原理和代码实现

    本文将从Verilog和边沿检测的基本概念入手,介绍Verilog边沿检测的原理和应用代码示例。
    的头像 发表于 05-12 17:05 3756次阅读
    Verilog<b class='flag-5'>边沿</b><b class='flag-5'>检测</b>的基本原理和代码实现

    Verilog实现边沿检测的原理

    边沿检测大致分为:上升沿检测,下降沿检测和,双沿检测。原理都是通过比输入信号快很多的时钟去采集信号,当出现两个连续的采集值不等的时候就是
    的头像 发表于 06-28 15:19 2937次阅读
    Verilog实现<b class='flag-5'>边沿</b><b class='flag-5'>检测</b>的原理