作者:造就狂野青春
本文為明德?lián)P原創(chuàng)及錄用文章,轉(zhuǎn)載請注明出處!
一、總體設(shè)計(jì)
1.概述
本文基于明德?lián)P至簡設(shè)計(jì)法和明德?lián)P設(shè)計(jì)規(guī)范,設(shè)計(jì)了一個(gè)基于FPGA的數(shù)字密碼鎖,實(shí)現(xiàn)了在撥碼開關(guān)條件下,按鍵設(shè)置密碼、按鍵輸入解鎖密碼,密碼正確時(shí)正確指示燈亮、密碼錯(cuò)誤時(shí)或者默認(rèn)狀態(tài)錯(cuò)誤指示燈亮,密碼正確時(shí)一位數(shù)碼管顯示1,其他情況顯示0。本案例的擴(kuò)展和應(yīng)用在現(xiàn)實(shí)生活中具有重大意義。在本案例的設(shè)計(jì)過程中,應(yīng)用了至簡設(shè)計(jì)法、計(jì)數(shù)器模板應(yīng)用等,在經(jīng)過逐步改進(jìn)、調(diào)試等一系列工作之后,最終達(dá)到了設(shè)計(jì)目標(biāo)。
2. 設(shè)計(jì)目標(biāo)
1) 實(shí)現(xiàn)8位數(shù)字密碼鎖功能
2) 按鍵1、2設(shè)置密碼,按鍵1有效時(shí)設(shè)置一位密碼0,按鍵2有效時(shí)設(shè)置一位密碼1,按下8次后密碼設(shè)置完成
3) 按鍵3、4輸入密碼,按鍵3有效時(shí)輸入一位密碼0,按鍵2有效時(shí)輸入一位密碼1,按下8次后密碼輸入完成
4) 比較設(shè)置的密碼和輸入的密碼是否相同,正確時(shí)正確指示燈亮,數(shù)碼管顯示1,否則錯(cuò)誤指示燈亮,數(shù)碼管顯示0;
3. 模塊功能
1) 密碼模塊實(shí)現(xiàn)功能:
SW1有效時(shí)按鍵1、2設(shè)置密碼,按鍵1有效時(shí)設(shè)置一位密碼0,按鍵2有效時(shí)設(shè)置一位密碼1,按下8次后密碼設(shè)置完成
SW2有效時(shí)按鍵3、4輸入密碼,按鍵3有效時(shí)輸入一位密碼0,按鍵2有效時(shí)輸入一位密碼1,按下8次后密碼輸入完成
2) 數(shù)碼管顯示模塊實(shí)現(xiàn)功能
密碼正確時(shí)數(shù)碼管顯示1,否則顯示0;
3) led模塊實(shí)現(xiàn)功能:
密碼正確時(shí)led_y指示燈亮,否則led_n指示燈亮;
4) 按鍵模塊實(shí)現(xiàn)功能
將外來異步信號(hào)打兩拍處理,將異步信號(hào)同步化;
實(shí)現(xiàn)20ms按鍵消抖功能,并輸出有效按鍵信號(hào);
4. 信號(hào)定義
1)頂層模塊Lock_Top.v
2)密碼模塊password.v
3)數(shù)碼管顯示模塊sel_disp.v
4)led模塊led_flag.v
5)按鍵模塊key_module.v
5.密碼模塊核心代碼

SW1有效時(shí)按鍵1、2設(shè)置密碼,按鍵1有效時(shí)設(shè)置一位密碼0,按鍵2有效時(shí)設(shè)置一位密碼1,按下8次后密碼設(shè)置完成
SW2有效時(shí)按鍵3、4輸入密碼,按鍵3有效時(shí)輸入一位密碼0,按鍵2有效時(shí)輸入一位密碼1,按下8次后密碼輸入完成
6.數(shù)碼管顯示

參數(shù)化設(shè)置顯示0~F對應(yīng)的8位數(shù)

對比設(shè)置的密碼和輸入的密碼是否一致,密碼正確時(shí)數(shù)碼管顯示1,否則顯示0;
7.led指示燈模塊

密碼正確時(shí)led_y指示燈亮,否則led_n指示燈亮;
8.按鍵消抖代碼

利用明德?lián)P的按鍵消抖模塊,每20ms掃描一次按鍵輸入key_in,可以達(dá)到消抖的目的,再用寄存器緩存一下,按鍵為低電平有效,所以檢測當(dāng)檢測到按鍵有下降沿變化時(shí),代表該按鍵被按下,按鍵有效,輸出1;
9、Modelsim仿真驗(yàn)證

編寫測試文件,添加激勵(lì),這里避免長時(shí)間仿真,需將消抖時(shí)間縮小

按鍵2按下時(shí)設(shè)置了一位密碼1,再按鍵時(shí)設(shè)置了兩位密碼1;

按鍵4按下時(shí)輸入了一位密碼1,再按鍵時(shí)輸入了兩位密碼1;

設(shè)置的密碼和輸入的密碼是否相同,正確時(shí)正確指示燈亮,數(shù)碼管顯示1,否則錯(cuò)誤指示燈亮,數(shù)碼管顯示0;從仿真圖可以看出符合功能要求。
在這個(gè)設(shè)計(jì)案例中,至簡設(shè)計(jì)法和明德?lián)P至簡法發(fā)揮了至關(guān)重要的作用,使我能夠快速準(zhǔn)確完成設(shè)計(jì)。
本設(shè)計(jì)可以加以拓展:
1) 可以結(jié)合開發(fā)板外設(shè)和實(shí)際情況,改變設(shè)置和輸入密碼的方式、位數(shù),以及密碼正確與否的反應(yīng),如蜂鳴器報(bào)警等等。
對于初學(xué)者而言,流水燈太簡單,復(fù)雜項(xiàng)目又太難,不如嘗試一下這些相對簡單而又酷炫的案例,并一步步拓展成大項(xiàng)目。趕緊動(dòng)手嘗試吧。