今天在使用quartus編寫VHDL程序的時(shí)候,需要寫一個(gè)使能信號(hào)子模塊,具體的效果是當(dāng)檢測(cè)到輸入信號(hào)的邊沿時(shí)(按下按鍵),輸出一個(gè)持續(xù)0.5秒的高電平使能信號(hào)。編寫的過程中需要在一個(gè)進(jìn)程中檢測(cè)兩個(gè)信號(hào)的邊沿,由于編譯器不支持雙信號(hào)的邊沿檢測(cè),所以需要一些技巧來達(dá)到我們的目的,另外,經(jīng)過我的推測(cè),此方法也適用于單信號(hào)的雙邊沿檢測(cè),這就很厲害了!話不多說,直接上代碼:

其實(shí)原理很簡單,就是多寫一個(gè)process進(jìn)程,通過if語句生成一個(gè)觸發(fā)器,把輸入信號(hào)延后一個(gè)時(shí)鐘,在另一個(gè)進(jìn)程中用 ? if(refresh_deley='0' and refresh='1'),就能實(shí)現(xiàn)判斷上升沿的效果,如下圖:

但顯然,此技巧有一定局限性,由上圖我們可以看出,我們判斷出的上升沿和下降沿有一定的延時(shí)性,但不會(huì)超過一個(gè)時(shí)鐘周期,且原信號(hào)持續(xù)信號(hào)必須大于一個(gè)時(shí)鐘周期才能被檢測(cè)到,所以要求我們輸入的時(shí)鐘信號(hào)應(yīng)該要盡量大一些,這樣才能保證結(jié)果的正確性。最后上一個(gè)仿真結(jié)果圖:

