VHDL实现双信号边沿判断的一种方法

今天在使用quartus编写VHDL程序的时候,需要写一个使能信号子模块,具体的效果是当检测到输入信号的边沿时(按下按键),输出一个持续0.5秒的高电平使能信号。编写的过程中需要在一个进程中检测两个信号的边沿,由于编译器不支持双信号的边沿检测,所以需要一些技巧来达到我们的目的,另外,经过我的推测,此方法也适用于单信号的双边沿检测,这就很厉害了!话不多说,直接上代码:

VHDL实现双信号边沿判断的一种方法_第1张图片

其实原理很简单,就是多写一个process进程,通过if语句生成一个触发器,把输入信号延后一个时钟,在另一个进程中用   if(refresh_deley='0' and refresh='1'),就能实现判断上升沿的效果,如下图:


VHDL实现双信号边沿判断的一种方法_第2张图片

但显然,此技巧有一定局限性,由上图我们可以看出,我们判断出的上升沿和下降沿有一定的延时性,但不会超过一个时钟周期,且原信号持续信号必须大于一个时钟周期才能被检测到,所以要求我们输入的时钟信号应该要尽量大一些,这样才能保证结果的正确性。最后上一个仿真结果图:


VHDL实现双信号边沿判断的一种方法_第3张图片


VHDL实现双信号边沿判断的一种方法_第4张图片

你可能感兴趣的:(VHDL实现双信号边沿判断的一种方法)