一、为什么要讲边缘检测
或许,没有那么一本教科书,会提到这个重要的思想;或许,学了好久的你,有或许不知道这个重要的思想吧。很羞愧,我也是在当年学了1年后才领悟到这个思想的。
说实话,我的生长很艰苦,没有人能给我体系的辅导,而我得撑起这一片蓝天,于是乎无数个缝隙,我一直在修补我的缺乏。我没能对自己满意过,不是说我“得寸进尺”,而是,我不行“完美”。人能够不完美,但不能够不寻求完美;或许结尾永久达不到,但尽力的进程,你一直在接近完美;有方向感地斗争,让你永久立于不败之地。
或许我看的书不行多,但校园暑假那儿关于的FPGA的书,我都翻过一遍了;特权的《浅显易懂玩转FPGA》是我所看过的书中,仅有一本涉及到这个重要思想的书,或许这便是有过项目实战的人出的书,和官方理论教材的差异吧。
说起边缘检测,还有过一个故事:
话说七哥当年,去一家FPGA公司面试。考官给他一支笔,让他用逻辑门画出边缘检测电路。话音刚落,七哥持笔浪费,数秒钟内画出了边缘检测的电路图,而且给出了完美的解说。瞬间思想的展示与重要使用的阐明,让考官呆若木鸡。听说,七哥赢了,这之后,七哥便被那家公司录用了,一路牛逼,到了今日,证明晰自己,取得了很大的成果。
二、什么是边缘检测
所谓边缘检测,便是检测输入信号,或许FPGA内部逻辑信号的跳变,即上升沿或许下降沿的检测。这在FPGA电路规划中适当的广泛,简直我每一个略微完善的工程都会使用到这个思想;后续章节的解说,也不少这个思想的使用。
以下是七哥当年用决议自己作业的一张图,Bingo在Quartus II Block顶用逻辑门画了出来:

如上图5个信号:

正常作业,没有复位的情况下,作业流程如下:
(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画图完成

(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用逻辑门规划的相同,阐明晰代码的正确性。

(3)Modelsim-Altera仿真图如下所示,在上升沿(下降沿)到来的时分,时序能够及时精确的检测到。
2. 边缘检测使用
边缘检测技能在项目使用中,十分低广泛。如要有用捕获信号跳变沿,边缘检测技能的使用是必不可少的。Bingo大致概括了一下,有如下几个方面
(1)将时钟边缘使能转换为边缘检测使能,使时钟同步化。
(2)捕获信号的骤变(UART,SPI等信号使能骤变)
(3)逻辑剖析仪中信号的边缘检测。
3. 完成目标及存在缺点
没有完美无瑕的东西,也没有完美无瑕的电路、代码;本章节中所介绍的边缘检测技能亦如此。有如下缺点:
(1)增大CLK信号能够增强边缘检测的功率,但不能滤去跳变的杂波。
(2)削减CLK能够有用滤去跳变的杂波,但不能及时检测到边缘跳变。
(3)添加DFF能更好的滤除杂波,存放信号,但一起检测延时大。