VHDL設計的消抖與濾波
在同一塊電路板上,由于信號線的走線過長而產生的高頻毛刺我們可以通過在接近輸入端串聯(lián)一個100歐左右的電阻來濾除。但是對于板外信號,或者板內其他干擾造成較大的抖動時只好采用積分電路來濾波,即串一個電阻還要并一個電容接地。
同樣在VHDL中我們可以采用類似的辦法,對于小于觸發(fā)器建立時間的毛刺可以用時鐘打一下實現濾波。但對于開關或按鍵抖動等較大的干擾,我們可以采用延時比較法或積分法,或者二者并用。
比較法:這個方法很好理解,就是若干個時鐘周期讀取的數據相同時我們認為收到了一個穩(wěn)定的數據,否則認為是過渡態(tài)。即采用若干位的移位寄存器,當寄存器是全'1'或全'0'時才開始讀數。這種方法的缺點是,當干擾脈沖較寬時我們必須等比地擴大移位寄存器的比特,消耗較大資源。
積分法:用一個增減計數器,當輸入信號為'1'時計數器遞增計數直到計數器全'1'停止計數、否則計數器遞減計數直到全'0'停止計數。那么計數器的 MSB即為輸入信號的去抖信號。你也可以用時鐘再加上一個速度較慢的使能來對輸入信號計數。顯然計數器的位數要求與要去抖的抖動脈沖寬度的對數關系。當然也可以二者結合,前端用幾個比特的移位寄存器實現比較,比較結果作為計數使能來控制接下來的增減計數器的計數。
評論