怎樣在FPGA中處理開關(guān)控制信號
其中,clk為13.5 MHz頻率的時鐘信號,clk_cnt為采樣時間間隔計(jì)數(shù)器,當(dāng)clk_cnt為135 000時采樣1次,即每隔10 ms采樣1次。寄存器shuru_temp存儲前一次開關(guān)信號狀態(tài),shum存儲當(dāng)前開關(guān)信號狀態(tài)。如果shuru_temp的值等于shtlm的值,則計(jì)數(shù)器test_cnt自動加l。如果連續(xù)4次采樣值相等,即test_cnt=4時去抖動輸出才隨輸入變化。
用電平撥動開關(guān)信號作為輸入,制作了一個脈沖信號用于識別開關(guān)動作,其代碼如下:

代碼中寄存器level_contrl_TEMP存儲level_contrl延時256個時鐘周期后的信號,然后用level_eontrl_TEMP中存儲的信號與level_co-ntrl的值相異或產(chǎn)生所需要的脈沖信號。
調(diào)試中發(fā)現(xiàn),去抖動后的信號經(jīng)常混有持續(xù)時間很短的高頻脈沖干擾信號,因此設(shè)計(jì)中使用兩級D觸發(fā)器延時來徹底消除高頻脈沖干擾,其程序代碼如下:

2.2 雙口RAM及開關(guān)信號編碼設(shè)計(jì)
雙口RAM分為真、假2種雙口。真雙口2個端口都可以讀寫,互不干擾。本次設(shè)計(jì)根據(jù)實(shí)際需要,添加的RAM模塊一端只讀,另一端只寫,讀寫互不干擾。根據(jù)上述分析可知,開關(guān)控制信號只能知道有開關(guān)控制動作發(fā)生,但是不能識別具體哪個開關(guān)發(fā)生了動作。因此,設(shè)計(jì)中首先利用MegaWizardPlug_In Manager中的宏功能塊RAM:2_PORT產(chǎn)生1個雙口RAM存儲塊,然后對這個宏功能模塊的參數(shù)進(jìn)行適當(dāng)調(diào)整,產(chǎn)生一個滿足自己特定要求的模塊,如圖5所示。本文引用地址:http://www.bjwjmy.cn/article/151262.htm
評論