边沿检测,就是检测输入信号或者FPGA 内部逻辑信号的跳变,即对信号上
升沿或者下降沿的检测。
想要学习边沿检测电路,我们首先应该学习下面这个经典的电路
我们来分析一下这个电路结构和工作原理
(1) 当系统处于复位状态即rst_n信号为低电平时,寄存器inst清零端生效,寄存器输出端Q清零。由于Q端分别是“与门”inst1和inst2的输入端,而系统输出端neg_edge和pos_edge都是寄存器输出端Q和输入信号signial相与的结果,所以无论此时输入信号signial如何变化, 系统输出端neg_edge和pos_edge一直都是低电平,系统处于复位状态。
(2) 复位结束以后,假设signial信号首先保持的是低电平,在时钟的驱动下,寄存器输出端Q等于signial,也保持低电平,所以系统输出端neg_edge和pos_edge都是保持低电平。
(3) 假设输入信号signial在某个“当前周期”从低到高跳变,那么由于寄存器的延时特性,寄存器输出端Q只有在“下一周期”才会出现跳变。
“与门”inst1的“3号”输入端由于是直接连接到了输入端signial,所以在“当前周期”下“3号”端口的电平为1,输出端neg_edge=0,保持低电平。
“与门”inst2的“1号”输入端通过“非门”直接连接到了输入端signial,所以在“当前周期”下“1号”端口的电平为高,而“4号”端口的电平为Q端的取反,所以“4号”端口的电平也为高,系统输出端pos_edge为高电平。
(1) 当“下一周期”到来以后Q端输出为1,则“4号”端口的电平变为低,系统输出端pos_edge又恢复为低电平。也就是说当信号上升沿到来以后,pos_edge只能保持有且只有一个时钟的高电平,在这里我们叫做“尖峰脉冲”
下降沿的检测原理与上述类似,在此不再赘述,通过这张图我们总结出以下两点:
(1)当信号出现上升沿以后,pos_edge会出现一个时钟周期的“尖峰脉冲”。
(2)当信号出现下降沿以后,neg_edge会出现一个时钟周期的“尖峰脉冲”。
原理掌握以后,接下来我们看一下具体的代码实现
编写测试代码如下:
仿真波形如下:
有上图可以得知,key按键出现下降沿以后,neg_edge出现尖峰脉冲,key按键出现上升沿以后,pos_edge出现尖峰脉冲。