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