熊 軍 洲
(重慶電子工程職業(yè)學(xué)院 電子與物聯(lián)網(wǎng)學(xué)院,重慶 401331)
隨著社會的進步和生活水平的提高,人們的安全防范意識日益增強,在安防領(lǐng)域,具有報警防盜功能的電子密碼正逐漸受到人們的青睞.與傳統(tǒng)密碼鎖相比,電子密碼鎖具有安全性高、成本低、易操作等優(yōu)點[1].電子密碼鎖的功能可以通過基于單片機的軟件編程和基于FPGA(Field-Programmable Gate Array,現(xiàn)場可編程門陣列)[2]的硬件編程來實現(xiàn).在實際應(yīng)用中,基于單片機的電子密碼鎖運行過程中程序容易跑飛,導(dǎo)致系統(tǒng)的可靠性比較差.基于FPGA的電子密碼鎖的所有算法由硬件電路并行執(zhí)行,且不存在程序跑飛的風(fēng)險,使得系統(tǒng)的可靠性大為提高[3].Verilog HDL和VHDL是目前最流行的兩種硬件描述語言,相比VHDL,Verilog HDL具有設(shè)計靈活,可讀性好等特點.本文采用Verilog HDL來設(shè)計電子密碼鎖的控制電路.
設(shè)計一個具有較高安全性和較低成本的通用電子密碼鎖,具體功能要求如下:
(1)密碼設(shè)置
在解鎖狀態(tài)下,按下預(yù)置鍵,可設(shè)置密碼,輸入4位十進制數(shù)字后按確認(rèn)鍵,即可設(shè)置新密碼,密碼為一個4位的十進制數(shù).
(2)密碼輸入
輸入密碼的過程中,短暫顯示輸入的數(shù)值,1 s后不再顯示數(shù)值,數(shù)碼管顯示為“-”.
(3)清除輸入
按下清除鍵可清除前面所有的輸入值,清除為“0000”狀態(tài).
(4)正確解鎖
按下確認(rèn)鍵會檢查輸入的密碼是否正確,密碼正確即解鎖.
(5)錯誤提示
確認(rèn)輸入后,如密碼錯誤,則產(chǎn)生1 s的錯誤提示,而后可重新輸入密碼.
(6)電路報警
如果3次輸入錯誤,則產(chǎn)生報警、鎖死、禁止輸入現(xiàn)象。按下復(fù)位鍵后,報警解除或報警時間結(jié)束,報警解除后恢復(fù)初始狀態(tài)等待重新輸入.
根據(jù)電子密碼鎖的設(shè)計目標(biāo)及要求,電子密碼鎖控制電路整體設(shè)計如圖1所示.設(shè)計的內(nèi)容為虛線框中的部分,虛線框外則為附加的外圍電路.實際的電子密碼鎖是由控制電路、附加的外圍電路及其他機械裝置構(gòu)成.其中,控制電路的主要作用是接收鍵盤輸入密碼及其他控制信號并對輸入的密碼進行驗證、修改或產(chǎn)生報警信號等.外圍電路則用來輸入密碼和時鐘信號,顯示密碼、解鎖及啟動報警裝置等.
外圍時鐘信號經(jīng)分頻器分頻后,產(chǎn)生新的時鐘信號,分別提供給輸入處理、控制模塊、處理計算和顯示驅(qū)動等模塊.輸入處理模塊接收來自鍵盤的輸入信號,處理后產(chǎn)生控制信號和密碼,輸出給控制模塊.控制模塊接收來自輸入處理的信號,控制電子密碼鎖的實際運行,產(chǎn)生的信號輸出給處理計算模塊.處理計算模塊存儲設(shè)置的密碼并產(chǎn)生解鎖信號、報警信號和數(shù)字顯示等.顯示驅(qū)動根據(jù)處理計算模塊提供的顯示數(shù)字進行七段數(shù)碼管譯碼,從而驅(qū)動外圍的數(shù)碼管.
圖1電子密碼鎖控制電路整體設(shè)計框圖
電子密碼鎖主要由分頻模塊、輸入處理模塊、控制模塊、處理計算模塊及顯示驅(qū)動模塊組成.
此模塊采用載有EP2C20F484C7芯片的Altera DE1開發(fā)板,外部時鐘頻率為50 MHz,經(jīng)分頻模塊分頻后,產(chǎn)生1 kHz的時鐘信號,提供給輸入處理模塊、控制模塊、處理計算模塊和顯示驅(qū)動模塊.
此模塊對輸入的信號進行處理,使之變?yōu)檫m合其他模塊的信號.Altera DE1開發(fā)板上的10個開關(guān)鍵SW[0]-SW[9]構(gòu)成十進制數(shù)字信號0~9,4個按鍵KEY[0]-KEY[3]分別為清除鍵、確認(rèn)鍵、預(yù)置鍵和復(fù)位鍵.4個按鍵要做防抖處理.需要將開關(guān)鍵SW[0]-SW[9]變換為相應(yīng)的十進制數(shù)字信號0~9,檢測到開關(guān)有效(為“1”)時,除了產(chǎn)生相應(yīng)的十進制數(shù)字外,還產(chǎn)生啟動輸入信號,用于指示控制模塊進入密碼輸入狀態(tài),并且開關(guān)有效時產(chǎn)生一個輸入有效信號.該信號為一個時鐘周期,指示輸入數(shù)字為一個時鐘周期有效.
控制模塊是整個設(shè)計的控制中心,控制電子密碼鎖的運行,通過有限狀態(tài)機來實現(xiàn),狀態(tài)轉(zhuǎn)移如圖2.狀態(tài)機的狀態(tài)采用獨熱碼進行編碼,控制模塊根據(jù)當(dāng)前狀態(tài)和輸入產(chǎn)生下一個狀態(tài),通過不同的狀態(tài)控制各功能的有序運行.
圖2控制模塊狀態(tài)轉(zhuǎn)移圖
狀態(tài)機一共有7個狀態(tài):空閑狀態(tài)、密碼輸入狀態(tài)、確認(rèn)輸入狀態(tài)、正常解鎖狀態(tài)、密碼設(shè)置狀態(tài)、密碼錯誤狀態(tài)和報警狀態(tài).電子密碼鎖啟動后,控制模塊狀態(tài)機處于空閑狀態(tài),有密碼輸入時進入密碼輸入狀態(tài),密碼輸入完成后按下確認(rèn)鍵,進入確認(rèn)輸入狀態(tài),如果在按下確認(rèn)鍵前按下清除鍵則重新回到空閑狀態(tài).在確認(rèn)輸入狀態(tài)下對比輸入的密碼和設(shè)置的密碼是否一致,如果一致則進入正常解鎖狀態(tài);如果不一致則判斷是否錯誤.錯誤少于3次進入密碼錯誤狀態(tài),錯誤3次則進入報警狀態(tài).正常解鎖狀態(tài)下,如果需要修改密碼,可按下預(yù)置鍵進入密碼設(shè)置狀態(tài),否則10 s后進入空閑狀態(tài),等待下一次的輸入解鎖.在密碼設(shè)置狀態(tài)下,可以修改密碼,連續(xù)輸入4位密碼并銨下確認(rèn)鍵,即可修改密碼,若輸入小于4位密碼并按下確認(rèn)鍵則修改不成功;若輸入大于4位密碼并按下確認(rèn)鍵則前4位即為修改后的密碼.在密碼錯誤狀態(tài)下,控制模塊提示輸入的密碼出錯,并重新回到空閑狀態(tài)等待下一次的密碼輸入.在報警狀態(tài)下,控制模塊產(chǎn)生報警信號,并且電路鎖死,在此期間輸入無效,按下復(fù)位鍵或計時30 min后結(jié)束報警狀態(tài)后,可重新返回空閑狀態(tài),等待下一次密碼輸入.
處理計算模塊根據(jù)控制模塊的狀態(tài)存儲設(shè)置的密碼產(chǎn)生電子密碼鎖的各種輸出信號.處理計算模塊在密碼設(shè)置狀態(tài)下將需要設(shè)置的密碼存儲在內(nèi)部的ROM中,在確認(rèn)狀態(tài)下對比輸入的密碼和存儲在ROM中的密碼,如果相同則產(chǎn)生解鎖信號,在密碼錯誤狀態(tài)下產(chǎn)生錯誤信號,在報警狀態(tài)下產(chǎn)生報警信號保持30 min或直到狀態(tài)切換為止.在密碼輸入和密碼設(shè)置狀態(tài)下,產(chǎn)生數(shù)字顯示提供給顯示驅(qū)動模塊.
顯示驅(qū)動模塊共驅(qū)動4位數(shù)碼管,在密碼輸入和密碼設(shè)置時顯示輸入的數(shù)字提示,通過計時只顯示1 s,然后顯示變?yōu)椤?”,每輸入一位數(shù)字,數(shù)碼管的顯示向右移動一位.
本文采用Quartus II+Modelsim[4]方式對密碼鎖的各項功能進行仿真驗證,并通過Quartus II軟件將實現(xiàn)的電路下載到裝有EP2C20F484C7芯片的Altera DE1開發(fā)板,進行硬件測試驗證.
密碼設(shè)置的仿真波形如圖3所示.
圖3密碼設(shè)置仿真波形
在UNLOCK(解鎖)狀態(tài)下預(yù)置密碼,此時set(預(yù)置鍵)低電平有效,current_state(當(dāng)前狀態(tài))轉(zhuǎn)為SET(密碼設(shè)置)狀態(tài).在SET狀態(tài)下din(輸入密碼)“2018”,且每一位十進制密碼保持din_val(一個時鐘周期)有效,輸入4位十進制密碼后按下finish(確認(rèn)鍵),finish低電平有效,輸入的密碼被固化在rom3-rom0中,為“2018”,此時密碼設(shè)置成功,current_state轉(zhuǎn)為IDLE(空閑)狀態(tài).
密碼輸入正確的解鎖仿真波形如圖4所示.
圖4密碼正確解鎖成功仿真波形
current_state處于IDLE狀態(tài)時輸入密碼,current_state轉(zhuǎn)為INPUT(密碼輸入)狀態(tài),此狀態(tài)下din“2018”,由圖4可知din依次與rom3~rom0中設(shè)置的密碼相同,按下finish鍵,current_state轉(zhuǎn)為UNLOCK(解鎖)狀態(tài),在此狀態(tài)下輸出unlock_en(解鎖信號).圖4還顯示了在密碼輸入過程中數(shù)碼管disp3-disp0的顯示信息,disp3-disp0分別顯示din的數(shù)字,并且1 s后數(shù)碼管驅(qū)動電路輸出為“0111111”,顯示符號為“-”.
清除輸入密碼的仿真波形如圖5所示.
圖5 清除輸入仿真波形
current_state處于IDLE狀態(tài)時,輸入密碼,current_state轉(zhuǎn)為INPUT(密碼輸入)狀態(tài),此狀態(tài)下din“123”后,按下clear(清除鍵),clear為低電平有效,current_state轉(zhuǎn)為IDLE狀態(tài),清除之前輸入的密碼.
密碼輸入錯誤時的仿真波形如圖6所示.
圖6 密碼錯誤仿真波形
current_state處于IDLE狀態(tài)時,輸入密碼,current_state轉(zhuǎn)為INPUT狀態(tài),此狀態(tài)下din“9527”,由圖6可以看出依次din與rom3-rom0中設(shè)置的密碼不同.按下finish后,current_state轉(zhuǎn)為ERROR(密碼錯誤)狀態(tài),并且在此狀態(tài)下發(fā)出error_en(錯誤信號).current_state保持1 s的ERROR狀態(tài)后,轉(zhuǎn)為IDLE狀態(tài),等待下一次的din.
電路報警的仿真如圖7所示.
圖7電路報警仿真波形
當(dāng)密碼錯誤輸入3次后,電路產(chǎn)生報警.由圖7可以看出,電路產(chǎn)生了2次error_en后,current_state在INPUT狀態(tài)下進行第3次密碼輸入,密碼輸入錯誤,當(dāng)按下finish后,current_state轉(zhuǎn)為ALARM(報警)狀態(tài),并且產(chǎn)生alarm_en(報警信號).按下rst_n(復(fù)位鍵)后,current_state轉(zhuǎn)為IDLE狀態(tài),報警解除.
高可靠性是電子密碼鎖的重要設(shè)計指標(biāo).本文基于FPGA的硬件編程,采用硬件描述語言Verilog HDL對電子密碼鎖的控制電路進行設(shè)計,所有的功能均由硬件電路實現(xiàn).由于FPGA具有重復(fù)編程的能力,當(dāng)控制電路需要修改時,利用現(xiàn)有的接口,修改內(nèi)部電路,驗證通過后下載到配置芯片即可.該電子密碼鎖采用4位十進制密碼設(shè)計,實現(xiàn)了密碼設(shè)置、密碼輸入、清除設(shè)置、正確解鎖、錯誤提示和電路報警等功能,滿足設(shè)計要求和正常的用戶需求.仿真結(jié)果表明,設(shè)計的電子密碼鎖控制電路靈活可靠,操作簡單,后續(xù)還可進一步升級為安全系數(shù)更高的密碼鎖.