FPGA開(kāi)發(fā)實(shí)用教程-基于Xilinx和Verilog HDL(微課版) 課件 【ch04】獨(dú)立按鍵去抖實(shí)驗(yàn)_第1頁(yè)
FPGA開(kāi)發(fā)實(shí)用教程-基于Xilinx和Verilog HDL(微課版) 課件 【ch04】獨(dú)立按鍵去抖實(shí)驗(yàn)_第2頁(yè)
FPGA開(kāi)發(fā)實(shí)用教程-基于Xilinx和Verilog HDL(微課版) 課件 【ch04】獨(dú)立按鍵去抖實(shí)驗(yàn)_第3頁(yè)
FPGA開(kāi)發(fā)實(shí)用教程-基于Xilinx和Verilog HDL(微課版) 課件 【ch04】獨(dú)立按鍵去抖實(shí)驗(yàn)_第4頁(yè)
FPGA開(kāi)發(fā)實(shí)用教程-基于Xilinx和Verilog HDL(微課版) 課件 【ch04】獨(dú)立按鍵去抖實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

獨(dú)立按鍵去抖實(shí)驗(yàn)卓越工程師培養(yǎng)系列FPGA開(kāi)發(fā)實(shí)用教程——基于Xilinx和VerilogHDL第四章01實(shí)驗(yàn)內(nèi)容通過(guò)學(xué)習(xí)FPGA高級(jí)開(kāi)發(fā)系統(tǒng)上的獨(dú)立按鍵電路原理圖、按鍵去抖原理和狀態(tài)機(jī)設(shè)計(jì),設(shè)計(jì)一個(gè)基于FPGA高級(jí)開(kāi)發(fā)系統(tǒng)的按鍵控制LED計(jì)數(shù)頂層模塊,當(dāng)按下按鍵KEY1時(shí),控制編號(hào)為L(zhǎng)ED0?LED3的4個(gè)發(fā)光二極管按照“0000—0001—0010—…—1111—0000”的順序循環(huán)點(diǎn)亮,這里假設(shè)LED熄滅為0,點(diǎn)亮為1。實(shí)驗(yàn)內(nèi)容02實(shí)驗(yàn)原理獨(dú)立按鍵去抖實(shí)驗(yàn)涉及的硬件電路包括4個(gè)位于FPGA高級(jí)開(kāi)發(fā)系統(tǒng)上的LED(編號(hào)為L(zhǎng)ED0?LED3)、1個(gè)獨(dú)立按鍵(編號(hào)為KEY1),以及與獨(dú)立按鍵串聯(lián)的10kQ限流電阻、與獨(dú)立按鍵并聯(lián)的100nF濾波電容。KEY1連接X(jué)C6SLX16芯片的G13引腳。另外,硬件電路還包括系統(tǒng)時(shí)鐘引腳和系統(tǒng)復(fù)位引腳,如圖4-1所示。當(dāng)按鍵未按下時(shí),G13引腳上的電平為高電平;當(dāng)按鍵按下時(shí),G13引腳上的電平為低電平。實(shí)驗(yàn)原理獨(dú)立按鍵電路原理圖市場(chǎng)上絕大多數(shù)按鍵結(jié)構(gòu)都是機(jī)械式開(kāi)關(guān)結(jié)構(gòu),而機(jī)械式開(kāi)關(guān)的核心部件為彈性金屬簧片,因而在開(kāi)關(guān)切換的瞬間會(huì)在接觸點(diǎn)出現(xiàn)來(lái)回彈跳的現(xiàn)象。在按鍵松開(kāi)后,也會(huì)出現(xiàn)類(lèi)似的情況,這種情況被稱為抖動(dòng)。按鍵按下時(shí)產(chǎn)生前沿抖動(dòng),按鍵松開(kāi)后產(chǎn)生后沿抖動(dòng),如圖4-2所示。實(shí)驗(yàn)原理按鍵去抖原理獨(dú)立按鍵去抖原理圖如圖4-3所示,因?yàn)榘存I未按下時(shí)為高電平,按鍵按下時(shí)為低電平,所以對(duì)于理想按鍵,按鍵按下時(shí)可以立刻檢測(cè)到低電平,按鍵松開(kāi)后可以立刻檢測(cè)到高電平。但是,實(shí)際情況是按鍵一旦按下,就會(huì)產(chǎn)生前沿抖動(dòng),抖動(dòng)持續(xù)時(shí)間為5?10ms。接著,芯片引腳會(huì)檢測(cè)到穩(wěn)定的低電平。按鍵松開(kāi)后,會(huì)產(chǎn)生后沿抖動(dòng),抖動(dòng)持續(xù)時(shí)間依然為5?10ms。實(shí)驗(yàn)原理接著,芯片引腳會(huì)檢測(cè)到穩(wěn)定的高電平。去抖實(shí)際上是每1ms檢測(cè)一次連接到按鍵的引腳電平,連續(xù)檢測(cè)到20次低電平,即低電平持續(xù)時(shí)間超過(guò)20ms,表示識(shí)別到按鍵按下。同理,按鍵松開(kāi)后,如果連續(xù)檢測(cè)到20次高電平,即高電平持續(xù)時(shí)間超過(guò)20ms,則表示識(shí)別到按鍵松開(kāi)。根據(jù)前面的分析,要求每1ms檢測(cè)一次連接到按鍵的引腳電平,因此,需要通過(guò)50MHz的系統(tǒng)時(shí)鐘分頻出一個(gè)1kHz的時(shí)鐘。假設(shè)去抖前的按鍵名為btn_i,去抖后的按鍵名為btn_o,未檢測(cè)到按鍵按下時(shí)btn_o為低電平,在連續(xù)20次檢測(cè)到按鍵按下時(shí),bta_o產(chǎn)生一個(gè)脈寬為1ms的脈沖信號(hào)。這樣,就實(shí)現(xiàn)了按鍵的去抖。獨(dú)立按鍵去抖時(shí)序圖如圖4-4所示。實(shí)驗(yàn)原理狀態(tài)機(jī)的全稱為有限狀態(tài)機(jī)(FiniteStateMachine,F(xiàn)SM),由狀態(tài)寄存器和組合邏輯電路構(gòu)成,能夠根據(jù)控制信號(hào)按照預(yù)先設(shè)定的狀態(tài)進(jìn)行狀態(tài)轉(zhuǎn)移,是協(xié)調(diào)相關(guān)信號(hào)動(dòng)作、完成特定操作的控制中心。狀態(tài)機(jī)狀態(tài)機(jī)由3部分組成,分別為產(chǎn)生下一狀態(tài)的組合邏輯電路、當(dāng)前狀態(tài)的時(shí)序邏輯電路和產(chǎn)生輸出的組合邏輯電路。狀態(tài)機(jī)組成部分狀態(tài)機(jī)的使用可歸納為4個(gè)要素:現(xiàn)態(tài)、條件、動(dòng)作和次態(tài)。狀態(tài)機(jī)的使用實(shí)驗(yàn)原理狀態(tài)機(jī)工作原理①按鍵未按下時(shí)的空閑狀態(tài)IDLE,復(fù)位時(shí)進(jìn)入該狀態(tài)。②檢測(cè)到按鍵按下且計(jì)數(shù)器小于20的延遲狀態(tài)DELAY。③檢測(cè)到按鍵按下且計(jì)數(shù)器大于或等于20時(shí)產(chǎn)生一個(gè)脈寬為1ms脈沖的脈沖狀態(tài)PULSE。④按鍵未松開(kāi)時(shí)的保持狀態(tài)KEEP,獨(dú)立按鍵去抖處理的狀態(tài)轉(zhuǎn)換。實(shí)驗(yàn)原理獨(dú)立按鍵去抖處理狀態(tài)機(jī)

獨(dú)立按鍵去抖狀態(tài)轉(zhuǎn)換條件如表所示。實(shí)驗(yàn)原理當(dāng)前狀態(tài)下一狀態(tài)轉(zhuǎn)換條件IDLEIDLE未檢測(cè)到按鍵按下IDLEDELAY檢測(cè)到按鍵按下,按鍵按下為低電平,從IDLE狀態(tài)跳轉(zhuǎn)至DELAY狀態(tài),同時(shí)啟動(dòng)計(jì)數(shù)器DELAYDELAY檢測(cè)到按鍵按下且計(jì)數(shù)器小于20,計(jì)數(shù)器執(zhí)行加1操作。DELAYIDLE計(jì)數(shù)器小于20并檢測(cè)到按鍵松開(kāi)DELAYPULSE檢測(cè)到按鍵按下且計(jì)數(shù)器大于或等于20,即按鍵引腳低電平持續(xù)時(shí)間為20ms,說(shuō)明成功檢測(cè)到按鍵己有效按下PULSEKEEP在成功檢測(cè)到按鍵己有效按下時(shí),將bta_o置1,由于PULSE狀態(tài)只會(huì)保持一個(gè)狀態(tài),從PULSE狀態(tài)跳轉(zhuǎn)至KEEP狀態(tài)時(shí),bm_o將被置0,因此,btn_o的高電平只會(huì)持續(xù)1ms。KEEPIDLE識(shí)別到按鍵松開(kāi),跳轉(zhuǎn)至IDLE狀態(tài)KEEPKEEP識(shí)別到按鍵依然處于按下?tīng)顟B(tài)

獨(dú)立按鍵去抖實(shí)驗(yàn)電路有7個(gè)引腳,引腳名稱、類(lèi)型、約束及描述如表所示。實(shí)驗(yàn)原理引腳名稱引腳類(lèi)型引腳約束引腳描述clk_iinV10時(shí)鐘輸入,50MHzrst_n_iinN7復(fù)位輸入,低電平復(fù)位btn_iinG13按鍵輸入,按下為低電平led_o[3]outG16通過(guò)電阻連接到led3led_o[2]outH15通過(guò)電阻連接到led2led_o[1]outF16通過(guò)電阻連接到led1led_o[0]outG14通過(guò)電阻連接到led0

獨(dú)立按鍵去抖實(shí)驗(yàn)內(nèi)部電路圖如圖4-8所示。實(shí)驗(yàn)原理03實(shí)驗(yàn)步驟步驟1:復(fù)制工程文件夾并添加Verilog文件實(shí)驗(yàn)步驟將“D:\Spartan6FPGATest\Material”目錄中的exp03.clrJitter_with_fsm文件夾復(fù)制到“D:\Spartan6FPGATest\Product”目錄中。然后,雙擊運(yùn)行“D:\Spartan6FPGATesf\Product\exp03.clrJitter_with_fsm\project目錄中的btn_led_cnt.xise文件,打開(kāi)工程。工程打開(kāi)后,將“D:\Spartan6FPGATest\Product\exp03.clr_jitter_with_fsm\code”目錄中的.v文件和.ucf文件全部添加到工程中,并將頂層文件設(shè)置為btn_led_cnt.v。步驟2:完善clrJitter_with_fsm.v文件實(shí)驗(yàn)步驟將程序清單4-1中的代碼輸入clrjitter_with_fsm.v文件中,并檢查該文件的語(yǔ)法,下面對(duì)關(guān)鍵語(yǔ)句進(jìn)行解釋。第13至18行代碼:定義參數(shù)BTN_DOWN,值為0,代表按鍵按下為低電平。同時(shí)定義4個(gè)參數(shù)表示狀態(tài)機(jī)的4個(gè)狀態(tài),分別為空閑狀態(tài)IDLE、延遲狀態(tài)DELAY、脈沖狀態(tài)PULSE和保持狀態(tài)KEEP。第22至26行代碼:定義當(dāng)前狀態(tài)curr_state和下一狀態(tài)next_state。另外,再定義兩個(gè)計(jì)數(shù)器,分別為當(dāng)前計(jì)數(shù)器s_cnt_curr和下一計(jì)數(shù)器s_cnt_next,均賦初值00000。實(shí)驗(yàn)步驟第30至40行代碼:實(shí)現(xiàn)兩個(gè)時(shí)序邏輯電路,分別為產(chǎn)生當(dāng)前狀態(tài)的時(shí)序邏輯電路及產(chǎn)生當(dāng)前計(jì)數(shù)器值的時(shí)序邏輯電路。當(dāng)rst_n_i為0復(fù)位時(shí),狀態(tài)機(jī)當(dāng)前狀態(tài)curr_state為IDLE,當(dāng)前計(jì)數(shù)器s_cnt_curr清零;在clk_i上升沿,curr_state更新為next_state,s_cnt_curr更新為s_cnt_next。第42至102行代碼:實(shí)現(xiàn)產(chǎn)生下一狀態(tài)、產(chǎn)生輸岀的組合邏輯電路。實(shí)驗(yàn)步驟實(shí)驗(yàn)步驟步驟3:仿真工程檢查完clrJitter_with_fsm.v文件的語(yǔ)法之后,對(duì)clrJitter_with_fsm模塊進(jìn)行仿真,本實(shí)驗(yàn)已經(jīng)提供了測(cè)試文件模板clrjitter_with_fsm_tf.v,無(wú)須再創(chuàng)建,只需要將程序清單4-2中的內(nèi)容輸入模版代碼的相應(yīng)位置,然后參考2.3節(jié)步驟7進(jìn)行仿真,下面對(duì)該文件的部分代碼進(jìn)行介紹。實(shí)驗(yàn)步驟第1行代碼:因?yàn)樵撃K的時(shí)鐘信號(hào)周期為1ms,所以這里要產(chǎn)生周期為1ms的時(shí)鐘。第12至22行代碼:模擬按鍵按下時(shí)的前沿抖動(dòng)過(guò)程。第24行代碼:模擬按鍵按下時(shí)的穩(wěn)定狀態(tài),持續(xù)時(shí)間為120ms。實(shí)驗(yàn)步驟第25至27行代碼:模擬按鍵松開(kāi)后的后沿抖動(dòng)過(guò)程。第28行代碼:模擬按鍵松開(kāi)后的穩(wěn)定狀態(tài),持續(xù)時(shí)間為200ms。第30至37行代碼:模擬按鍵抖動(dòng)過(guò)程。實(shí)驗(yàn)步驟實(shí)驗(yàn)步驟完成測(cè)試文件的修改后,檢查測(cè)試文件語(yǔ)法對(duì)clrjitter_with_fsm模塊進(jìn)行仿真,查看如圖4-9所示的仿真結(jié)果,btn_i經(jīng)過(guò)一段時(shí)間的前沿抖動(dòng)之后,進(jìn)入穩(wěn)定狀態(tài),并持續(xù)120ms,經(jīng)后沿抖動(dòng)之后,進(jìn)入松開(kāi)狀態(tài)。在抖動(dòng)過(guò)程中,btn_o保持低電平,在按鍵按下持續(xù)20ms低電平之后,btn_o輸出一個(gè)脈沖信號(hào),說(shuō)明檢測(cè)到有效按鍵。步驟4:完善btn_led_cnt.v文件將程序清單4-3中的代碼輸入bta_led_cnt.v文件中,下面對(duì)關(guān)鍵語(yǔ)句進(jìn)行解釋。實(shí)驗(yàn)步驟第37至44行代碼:當(dāng)rst_n_i為0復(fù)位時(shí),計(jì)數(shù)器s_cnt清零。在s_clk_lkhz時(shí)鐘上升沿,若s_btn_after_clr_jitter為1,則s_cnt執(zhí)行一次加1操作,s_cnt按照“0000—0001—0010—0011—???—1111—0000”的順序循環(huán)計(jì)數(shù)。第46行代碼:led_o根據(jù)s_cnt輸出不同狀態(tài)值。實(shí)驗(yàn)步驟步驟5:通過(guò)Synplify綜合工程通過(guò)Synplify對(duì)工程進(jìn)行綜合,生成電路圖后,單擊面按鈕進(jìn)入clrJitter_with_fsm模塊的綜合電路中,可以看到一個(gè)名為statemachine的方框,如圖4-10所示的是Synplify通過(guò)代碼生成的狀態(tài)機(jī),使用按鈕便可查看狀態(tài)機(jī)內(nèi)的狀態(tài)轉(zhuǎn)換圖。實(shí)驗(yàn)步驟步驟6:完善引腳約束文件將程序清單4-4中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論