今天在使用quartus編寫VHDL程序的時(shí)候,需要寫一個(gè)使能信號(hào)子模塊票彪,具體的效果是當(dāng)檢測(cè)到輸入信號(hào)的邊沿時(shí)(按下按鍵),輸出一個(gè)持續(xù)0.5秒的高電平使能信號(hào)。編寫的過(guò)程中需要在一個(gè)進(jìn)程中檢測(cè)兩個(gè)信號(hào)的邊沿捆等,由于編譯器不支持雙信號(hào)的邊沿檢測(cè),所以需要一些技巧來(lái)達(dá)到我們的目的续室,另外栋烤,經(jīng)過(guò)我的推測(cè),此方法也適用于單信號(hào)的雙邊沿檢測(cè)挺狰,這就很厲害了明郭!話不多說(shuō)买窟,直接上代碼:
其實(shí)原理很簡(jiǎn)單,就是多寫一個(gè)process進(jìn)程薯定,通過(guò)if語(yǔ)句生成一個(gè)觸發(fā)器始绍,把輸入信號(hào)延后一個(gè)時(shí)鐘,在另一個(gè)進(jìn)程中用 ? if(refresh_deley='0' and refresh='1')话侄,就能實(shí)現(xiàn)判斷上升沿的效果亏推,如下圖:
但顯然,此技巧有一定局限性满葛,由上圖我們可以看出径簿,我們判斷出的上升沿和下降沿有一定的延時(shí)性,但不會(huì)超過(guò)一個(gè)時(shí)鐘周期嘀韧,且原信號(hào)持續(xù)信號(hào)必須大于一個(gè)時(shí)鐘周期才能被檢測(cè)到篇亭,所以要求我們輸入的時(shí)鐘信號(hào)應(yīng)該要盡量大一些,這樣才能保證結(jié)果的正確性锄贷。最后上一個(gè)仿真結(jié)果圖: