您的位置 首页 产品

【从零开始走进FPGA】你想干嘛——边缘检测技能

一、为什么要讲边沿检测也许,没有那么一本教科书,会说到这个重要的思想;也许,学了很久的你,有可能不知道这个重要的思想吧。很惭愧,我也是在当年学了1年后才领悟到这个思想的。说实话,我

  一、为什么要讲边缘检测

  或许,没有那么一本教科书,会提到这个重要的思想;或许,学了好久的你,有或许不知道这个重要的思想吧。很羞愧,我也是在当年学了1年后才领悟到这个思想的。

  说实话,我的生长很艰苦,没有人能给我体系的辅导,而我得撑起这一片蓝天,于是乎无数个缝隙,我一直在修补我的缺乏。我没能对自己满意过,不是说我“得寸进尺”,而是,我不行“完美”。人能够不完美,但不能够不寻求完美;或许结尾永久达不到,但尽力的进程,你一直在接近完美;有方向感地斗争,让你永久立于不败之地。

  或许我看的书不行多,但校园暑假那儿关于的FPGA的书,我都翻过一遍了;特权的《浅显易懂玩转FPGA》是我所看过的书中,仅有一本涉及到这个重要思想的书,或许这便是有过项目实战的人出的书,和官方理论教材的差异吧。

  说起边缘检测,还有过一个故事:

  话说七哥当年,去一家FPGA公司面试。考官给他一支笔,让他用逻辑门画出边缘检测电路。话音刚落,七哥持笔浪费,数秒钟内画出了边缘检测的电路图,而且给出了完美的解说。瞬间思想的展示与重要使用的阐明,让考官呆若木鸡。听说,七哥赢了,这之后,七哥便被那家公司录用了,一路牛逼,到了今日,证明晰自己,取得了很大的成果。

  二、什么是边缘检测

  所谓边缘检测,便是检测输入信号,或许FPGA内部逻辑信号的跳变,即上升沿或许下降沿的检测。这在FPGA电路规划中适当的广泛,简直我每一个略微完善的工程都会使用到这个思想;后续章节的解说,也不少这个思想的使用。

  以下是七哥当年用决议自己作业的一张图,Bingo在Quartus II Block顶用逻辑门画了出来:

  

wps_clip_image-28203

 

  如上图5个信号:

  

image

 

  正常作业,没有复位的情况下,作业流程如下:

  (1)D触发器通过时钟clk的触发,输出trigger信号,保存了t0时间的信号。

  (2)一起由trigger通过非门输出信号,保存了当时时间t1的触发信号

  (3)通过与门输出信号pos_edge,neg_edge

  a) 只要t0时间为高,且t1时分为低的时分,与门输出高,此刻为下降沿。

  b) 只要to时分为低,且t1时分为高的时分,与门输出高,此刻为上升沿。

  当然,在复位的时间,DFF被复位,无法检测触发信号。

  三、完成边缘检测的最优化

  1. Block或Verilog完成

  一般为了避免触发信号的动摇,加几级触发器,消除颤动,使得信号更安稳。

  此例程中,相对于上图多了触发器。其用触发器对信号打慢两拍,使得触发信号然后在进行相关的处理;再来检测边缘的上升沿,下降沿。

  (1)用Block画图完成

  

wps_clip_image-4666

 

  (2)用verilog代码完成

  edge_tech_design.v代码如下所示:

  /*****************************************************

  * Module Name : edge_tech_design.v

  * Engineer : Crazy Bingo

  * Target Device : EP2C8Q208C8

  * Tool versions : Quartus II 11.0

  * Create Date : 2011-6-25

  * Revision : v1.0

  * Description :

  *****************************************************/

  module edge_tech_design

  (

  input clk,

  input rst_n,

  input trigger,

  output pos_edge,

  output neg_edge

  );

  //Capture the rising_endge & falling_edge

  reg trigger_r0,trigger_r1,trigger_r2;

  always@(posedge clk or negedge rst_n)

  begin

  if(!rst_n)

  begin

  trigger_r0 <= 1’b0;

  trigger_r1 <= 1’b0;

  trigger_r2 <= 1’b0;

  end

  else

  begin

  trigger_r0 <= trigger;

  trigger_r1 <= trigger_r0;

  trigger_r2 <= trigger_r1;

  end

  end

  assign pos_edge = trigger_r1 & ~trigger_r2;

  assign neg_edge = ~trigger_r1 & trigger_r2;

  endmodule

  编译后,剖析Quartus II RTL图,如下所示,与Bingo在Block用逻辑门规划的相同,阐明晰代码的正确性。

  

wps_clip_image-9451

 

  (3)Modelsim-Altera仿真图如下所示,在上升沿(下降沿)到来的时分,时序能够及时精确的检测到。

  2. 边缘检测使用

  边缘检测技能在项目使用中,十分低广泛。如要有用捕获信号跳变沿,边缘检测技能的使用是必不可少的。Bingo大致概括了一下,有如下几个方面

  (1)将时钟边缘使能转换为边缘检测使能,使时钟同步化。

  (2)捕获信号的骤变(UART,SPI等信号使能骤变)

  (3)逻辑剖析仪中信号的边缘检测。

  3. 完成目标及存在缺点

  没有完美无瑕的东西,也没有完美无瑕的电路、代码;本章节中所介绍的边缘检测技能亦如此。有如下缺点:

  (1)增大CLK信号能够增强边缘检测的功率,但不能滤去跳变的杂波。

  (2)削减CLK能够有用滤去跳变的杂波,但不能及时检测到边缘跳变。

  (3)添加DFF能更好的滤除杂波,存放信号,但一起检测延时大。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/117033.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部