VHDL实现双信号边沿判断的一种方法
2017-04-03 本文已影响712人
言丶武
今天在使用quartus编写VHDL程序的时候,需要写一个使能信号子模块,具体的效果是当检测到输入信号的边沿时(按下按键),输出一个持续0.5秒的高电平使能信号。编写的过程中需要在一个进程中检测两个信号的边沿,由于编译器不支持双信号的边沿检测,所以需要一些技巧来达到我们的目的,另外,经过我的推测,此方法也适用于单信号的双边沿检测,这就很厉害了!话不多说,直接上代码:
![](https://img.haomeiwen.com/i1960386/2c967aacaf80a6b2.png)
其实原理很简单,就是多写一个process进程,通过if语句生成一个触发器,把输入信号延后一个时钟,在另一个进程中用 if(refresh_deley='0' and refresh='1'),就能实现判断上升沿的效果,如下图:
![](https://img.haomeiwen.com/i1960386/622eaf155d20bfb3.png)
但显然,此技巧有一定局限性,由上图我们可以看出,我们判断出的上升沿和下降沿有一定的延时性,但不会超过一个时钟周期,且原信号持续信号必须大于一个时钟周期才能被检测到,所以要求我们输入的时钟信号应该要尽量大一些,这样才能保证结果的正确性。最后上一个仿真结果图:
![](https://img.haomeiwen.com/i1960386/b758a6f84937358a.png)
![](https://img.haomeiwen.com/i1960386/d86ac5521acd3703.png)