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

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

3天内不再提示

Verilog实现边沿检测的原理

冬至子 来源:玩儿转FPGA 作者:建東 2023-06-28 15:19 次阅读

边沿检测原理

边沿检测大致分为:上升沿检测,下降沿检测和,双沿检测。原理都是通过比输入信号快很多的时钟去采集信号,当出现两个连续的采集值不等的时候就是边沿产生处。

图1为边沿采集图,clk为采集时钟,sig为被采集信号,现在需要知道什么时候sig的跳边沿到来,于是有了一个sig_buf的2bit信号用来存储被采集的sig信号,当前值被放在低位,高位时是上一个时刻的值。也就是

sig_buf[1:0] <= {sig_buf[0],sig};

从图中可以看出,sig_buf为2'01的时候正好是上升沿出现之后,2'b10正是下降沿出现之后。所以正好可以利用这两个信号的出现来判断上升沿还是下降沿。这样也就实现了边沿检测。

重点

这种边沿检测方法一定要有clk周期小于sig高电平脉宽的条件,不然无法保证能够每次采集到sig的边沿。

图片

图1. 边沿采集示意图

边沿采集代码讲解

此代码可以修改sig_buf的长度,也就是 不用一个0和一个1判断,而是多个0和多个1,但是宽度变了以后对sig的脉宽要求也就更宽,这点一定要牢记,不然很可能出现检测边沿无法实现。

很多人反映tb写不来,不知道tb要写什么,要怎么写。这里顺便说下怎么写,就以边沿检测tb为例。

仿真目的 :产生符合自己要求的激励信号,测试此时的输出是否和预想一致,一致则通过,否则失败。

仿真步骤 :根据仿真目的也很容易可以抽象出来仿真的步骤分为2步,第一步,产生激励,第二步,查看被测试模块输出。

激励产生

周期信号产生always begin #5 clk=0; #5 clk=1; end //时钟信号

只在最开始产生某种特殊波形:initial begin rst = 1 ; #10 rst = 0; end

上述两种信号都是关于时间的函数f(t),这种函数特点决定了可以用延时命令#xx去产生。

需要结合当前状态的信号:这种波形不仅仅时间的函数,还和某个信号相关,比如分频模块,分频值在不停变,那么这个时候不如直接调用一个已经写好的分频模块,分频系数可以外部状态机控制,这样就可以解决。换句话说,tb只是产生理想激励,所以需要你不择手段的去产生自己想要的东西,不管是可综合还是不可综合语句。

tb文件的一般代码结构

1.module定义

2.reg和wire定义,需要被你主动控制的信号定义为reg,有赋值来源的信号定义为wire,比如模块输入定义为reg,方便自己产生各种波形,输出定义为wire。

3.initial begin end语句,产生初始化激励,比如复位,使能。initial语句可以写多个,效果上两个initial都是同时执行的,仿真的时候你感受不出差别。

4.特殊激励产生,比如时钟,状态机等

5.被测试模块调用

6.被测试模块输出结果合格检测,这一步如果不会可以忽略,自己看波形。对于复杂设计看波形会非常累,所以建议慢慢养成习惯

仿真结果展示

上升沿检测波形,mode=0,当输入信号被检测到上升沿的时候,信号the_edge就会有一个高脉冲:

图片

图2. 上升沿检测

下降沿检测波形,mode=1,当输入信号被检测到下降沿的时候,信号the_edge就会有一个高脉冲:

图片

图3. 下降沿检测

双沿检测波形,mode=2,当输入信号被检测到上升沿或者下降沿的时候,信号the_edge就会有一个高脉冲:

图片

图4. 双沿检测

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

    关注

    14

    文章

    988

    浏览量

    82993
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27165
  • CLK
    CLK
    +关注

    关注

    0

    文章

    122

    浏览量

    16908
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8159
收藏 人收藏

    评论

    相关推荐

    FPGA设计经验之边沿检测

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

    FPGA设计经验:边沿检测

    在同步电路设计中,边沿检测是必不可少的!
    发表于 08-16 15:19 1795次阅读
    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进行外部边沿检测检测不准确问题?

    程序边沿检测下降沿并统计数量(数量到达2后重新计数,并发送动作信号),但是最终发现检测结果不准确,有时候能检测到,有时候检测不到。万分感谢您
    发表于 08-21 12:58

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

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

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

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

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

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

    FPGA学习系列:12. 边沿检测设计

    设计背景: 在我们工程设计中,有时会需要到上升沿和下降沿这么一个说法,通过上升沿和下降沿来驱动一个电路,那么学习边沿检测就非常的重要了。 设计原理 : 在学习边沿检测前我们先学习一下下
    的头像 发表于 06-13 11:20 5193次阅读
    FPGA学习系列:12. <b class='flag-5'>边沿</b><b class='flag-5'>检测</b>设计

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

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

    Verilog系统函数和边沿检测

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

    FPGA学习-边沿检测技术

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

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

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

    什么是边沿检测

    1、什么是边沿检测 边沿检测用于检测信号的上升沿或下降沿,通常用于使能信号的捕捉等场景。 2、采用1级触发器的
    的头像 发表于 06-17 14:26 1493次阅读
    什么是<b class='flag-5'>边沿</b><b class='flag-5'>检测</b>