基于FPGA的電子密碼鎖的研制
隨著(zhù)社會(huì )物質(zhì)財富的日益增長(cháng),安全防盜已成為人們所關(guān)注的焦點(diǎn)。然而傳統機械彈子鎖安全性低,密碼量少且需時(shí)刻攜帶鑰匙使其無(wú)法滿(mǎn)足一些特定場(chǎng)合的應用要求,特別是在人員經(jīng)常變動(dòng)的公共場(chǎng)所,如辦公室、賓館、汽車(chē)、銀行柜員機等地方。由于電子密碼鎖具有語(yǔ)音提示、防盜報警、易于系統升級與功能擴展的優(yōu)勢,越來(lái)越受到人們的青睞。目前使用的電子密碼鎖主要有兩個(gè)方案:一是基于單片機用分立元件實(shí)現的,二是通過(guò)現代人體生物特征識別技術(shù)實(shí)現的,前者電路較復雜且靈活性差,無(wú)法滿(mǎn)足應用要求;后者有其先進(jìn)性但需考慮成本和安全性等諸多因素?;诖?,本文設計了一種新型電子密碼鎖,采用FPGA芯片,利用先進(jìn)的EDA技術(shù)、ALTERA公司的QUATUSII軟件開(kāi)發(fā)平臺進(jìn)行設計。系統采用VHDL硬件編程語(yǔ)言對系統建模,并利用狀態(tài)機(FSM)實(shí)現對消抖電路及主控模塊的設計[1]。
1 系統功能描述
本設計主要實(shí)現以下六個(gè)功能:
(1)初始密碼設置:系統上電后輸入4位數字并按“*”后密碼設置成功系統進(jìn)入上鎖狀態(tài)。為了實(shí)際需要,系統另設置了一個(gè)4位數的優(yōu)先級密碼,當用戶(hù)忘記密碼或被他人更改密碼后,可以用優(yōu)先級密碼清除所設密碼。
(2)密碼更改:為了密碼安全及避免誤操作,只能在開(kāi)鎖狀態(tài)下先輸入舊密碼后才能更改系統密碼,然后輸入4位新密碼后按“*”。
(3)解鎖:輸入密碼或優(yōu)先級密碼后按“#”,系統即解鎖。
(4)密碼保護:密碼輸入錯誤時(shí),系統自動(dòng)記錄一次錯誤輸入,當錯誤輸入次數等于3次時(shí),系統報警并使鍵盤(pán)失效5分鐘,以免密碼被盜。
(5)清除輸入錯誤:當輸入數位小于4位時(shí)可以按“*”清除前面所有的輸入值,清除為“0000”。
(6)系統復位:按“*”和“#”后系統即復位到初始狀態(tài)??紤]到實(shí)際情況,系統只在密碼更改狀態(tài)和系統初始狀態(tài)下才能復位。
2 系統設計思路
本文采用自頂向下的模塊化設計方法,先對系統級進(jìn)行功能描述,再進(jìn)行功能模塊的劃分,最后分別對各個(gè)子模塊進(jìn)行VHDL建模。所設計的電子密碼鎖系統結構如圖1所示。
2.1 時(shí)鐘產(chǎn)生模塊
此模塊主要功能是產(chǎn)生時(shí)鐘信號和鍵盤(pán)掃描信號。主要產(chǎn)生三個(gè)時(shí)鐘信號(16 Hz、64 Hz、100 kHz),分別為系統各個(gè)功能模塊提供時(shí)鐘驅動(dòng)信號。其中鍵盤(pán)掃描模塊包括在時(shí)鐘產(chǎn)生模塊中,用來(lái)產(chǎn)生掃描信號。由于要產(chǎn)生多個(gè)時(shí)鐘信號,因此該模塊的VHDL程序分別用三個(gè)進(jìn)程來(lái)處理。
密碼輸入一般采用機械式和觸摸式兩種鍵盤(pán)。由于機械式鍵盤(pán)具有成本低、結構簡(jiǎn)單、可靠性高、應用廣泛等優(yōu)點(diǎn),本設計采用機械式3×4鍵盤(pán)矩陣。其按鍵分布及鍵值編碼如圖2所示。其中‘*’、‘#’為多功能組合鍵。鍵盤(pán)掃描電路用來(lái)產(chǎn)生掃描信號KH[3..0],其按照1110-1101-1011-0111...的規律循環(huán)變化,并通過(guò)KC[2..0]來(lái)檢測是否有鍵按下。例如,當掃描信號為1011時(shí),鍵6、7、8所對應的行為低電平,此時(shí)若8鍵被按下,則KC2為低電平,KC[2..0]輸出為011。如果沒(méi)有鍵被按下,則KC[2..0]輸出為111。其他鍵也是類(lèi)似原理。特別值得注意的是鍵盤(pán)掃描電路掃描時(shí)鐘的確立,如果掃描時(shí)鐘不合適,將產(chǎn)生鍵按下時(shí)反應太慢,或KC[2..0]產(chǎn)生錯誤的輸出。一般為20 Hz,本設計通過(guò)實(shí)驗證明掃描時(shí)鐘取16 Hz較為合適。
2.2 按鍵消抖模塊
本設計采用機械鍵盤(pán),其缺點(diǎn)是易產(chǎn)生抖動(dòng),因此鍵盤(pán)輸出KC[2..0]必須經(jīng)過(guò)消抖電路后才能加入到鍵盤(pán)編碼模塊,以避免多次識別。此模塊采用狀態(tài)機設計,其狀態(tài)轉換圖如圖3所示。只有當連續檢測到3次低電平輸入,模塊才輸出一次低電平。消抖電路的時(shí)鐘選擇很關(guān)鍵,選擇不當則不能正常工作。因為鍵盤(pán)掃描電路的時(shí)鐘是16 Hz且掃描信號為4組循環(huán)輸出,所以消抖電路要能夠在4個(gè)鍵盤(pán)掃描時(shí)鐘內檢測出是否有鍵按下就必須設置其時(shí)鐘信號至少為鍵盤(pán)掃描時(shí)鐘的4倍。本設計采用64 Hz作為消抖模塊的時(shí)鐘驅動(dòng)信號,實(shí)驗證明能達到設計要求。
2.3 鍵盤(pán)編碼模塊
上述的鍵盤(pán)中可分為數字鍵和功能鍵,其中數字鍵用來(lái)輸入數字,但鍵盤(pán)所產(chǎn)生的信號KC[2..0]并不能直接用于鍵盤(pán)輸入處理模塊,因此必須由鍵盤(pán)編碼電路對數字按鍵的輸出形式進(jìn)行規劃。同時(shí)多功能鍵‘*’、‘#’也分別被規劃為“1010”和“1011”。另外,在系統規劃時(shí),也將系統復位電路規劃在此模塊內,復位信號是由鍵盤(pán)編碼模塊和系統主控模塊輸出的系統復位輔助信號mm共同作用產(chǎn)生,從而實(shí)現只能在密碼更改狀態(tài)和系統初始狀態(tài)下才能進(jìn)行系統復位,確保系統安全可靠。
2.4 按鍵輸入處理模塊
按鍵輸入處理模塊用來(lái)儲存每次按鍵產(chǎn)生的值,以免覆蓋前面輸入的數據,此模塊使用串行移位寄存器對依次輸入的4位十進(jìn)制數字進(jìn)行存儲。按鍵輸入超過(guò)4位時(shí),后面的輸入將被忽略。
2.5 顯示模塊
為了節省I/O管腳和芯片內部資源,本設計采用動(dòng)態(tài)掃描的方法進(jìn)行顯示。模塊用100 kHz時(shí)鐘信號和人眼的視覺(jué)暫留效應使4位數碼管看起來(lái)像是同時(shí)點(diǎn)亮。圖4是根據VHDL代碼所繪制的顯示模塊框圖。其中多路數據選擇器是由按鍵次數(NC)控制選擇哪一個(gè)數碼管和哪一組輸入數據。
2.6 系統主控模塊
此模塊是系統的核心控制模塊,系統的所有控制行為都是由它完成的,采用狀態(tài)機(FSM)來(lái)描述系統的控制行為。由于多進(jìn)程編程狀態(tài)機的輸出是由組合電路發(fā)出的,因此在一些特定情況下容易產(chǎn)生毛刺現象。如果這些輸出信號被用作時(shí)鐘信號,則極易產(chǎn)生錯誤的驅動(dòng)。因此本設計采用單進(jìn)程來(lái)實(shí)現狀態(tài)機,其優(yōu)勢是由時(shí)序器件同步輸出,輸出信號不會(huì )出現毛刺現象,從而很好地避免了競爭冒險的發(fā)生。缺點(diǎn)是與多進(jìn)程狀態(tài)機相比,輸出信號要晚一個(gè)時(shí)鐘周期[2]。通過(guò)反復試驗在VHDL編程時(shí)將輸出信號與狀態(tài)轉換同步進(jìn)行,從而很好地解決了輸出信號滯后的問(wèn)題。圖5為主控模塊的狀態(tài)轉換圖。其中S0為系統上電初始化狀態(tài),也是系統復位后所轉入的狀態(tài)。此狀態(tài)下系統未設置密碼。本設計設置S0狀態(tài)的另一主要原因是考慮到一個(gè)完備的狀態(tài)機(健壯性強)應該具備初始化狀態(tài)和默認狀態(tài)。當芯片加電或者復位后,狀態(tài)機應該能夠自動(dòng)將所有判斷條件復位,并進(jìn)入初始化狀態(tài)。但需要強調的是,大多數FPGA有GSR(Global Set/Reset)信號,當FPGA加電后,GSR信號拉高,對所有的寄存器,RAM等單元復位/置位,這時(shí)配置于FPGA的邏輯并未生效;不能保證正確地進(jìn)入初始化狀態(tài)。所以使用GSR企圖進(jìn)入FPGA的初始化狀態(tài),常常會(huì )產(chǎn)生種種不必要的麻煩[3]。S1為上鎖狀態(tài),S2為解鎖狀態(tài),S3為解鎖錯誤次數記錄狀態(tài),S4為系統報警狀態(tài),S5為開(kāi)鎖狀態(tài),S6為密碼更改狀態(tài)。以S5狀態(tài)為例給出S5狀態(tài)的VHDL代碼:
When s5=>
clr_nc=‘0’;
MMA=‘0’;
ED=‘1’;
EA=‘1’;
EB=‘1’;
alarma=‘0’;
unen_keya=‘0’;
if NC=4 and keyout_fun=1011 then
if REGS=ACC or PW=ACC then
states=s1;
clr_nc=‘1’;
else
clr_nc=‘1’;
end if;
elsif NC=4 and keyout_fun=1010 then
--transfer to the state of changing PW-
if REGS=ACC or REGS=PW then
--after entering the right previous PW.
states=s6;
clr_nc=‘1’;
else
clr_nc=‘1’;
end if;
end if;
3 主要功能模塊的仿真
圖6是鍵盤(pán)編碼模塊的時(shí)序仿真圖。其中信號mm是主控模塊,用來(lái)限制復位條件,即只在S0和S6狀態(tài)下產(chǎn)生復位信號RR;信號rst_key和unen_key共同控制鍵盤(pán),也是來(lái)自主控模塊;sn是模塊輸出信號,為高電平時(shí)表示有數字鍵被按下;sf為高電平時(shí)表示有功能鍵被按下。從仿真圖上可知,模塊設計滿(mǎn)足要求。
圖7是主控模塊的時(shí)序仿真圖。其中信號NC等于4表示連續輸入了4個(gè)數字,信號nn記錄密碼輸入錯誤次數。由圖可知,系統初始狀態(tài)為S0,設置密碼后為S1,經(jīng)過(guò)3次輸入錯誤的密碼時(shí)系統進(jìn)入S4,再輸入密碼后返回S1。在S1時(shí)輸入密碼后經(jīng)過(guò)S2進(jìn)入開(kāi)鎖狀態(tài)S5,再輸入密碼后則進(jìn)入密碼更改狀態(tài)S6,然后設置新密碼,設置成功后返回S1,滿(mǎn)足系統設計要求。在S6時(shí),系統新密碼要在S5轉入S6后的下一時(shí)鐘上升沿時(shí)才被系統接受,這主要是因為在S5轉S6狀態(tài)時(shí)需要輸入舊密碼或優(yōu)先級密碼進(jìn)行確認的原故。在工程實(shí)踐中,考慮到實(shí)際按鍵要比系統時(shí)鐘慢,所以在此期間,不可能輸入4位數字,因而系統不會(huì )出現密碼遺漏的問(wèn)題。而其他狀態(tài)下,輸出信號與狀態(tài)轉換是一致的,這樣就克服了輸出信號比多進(jìn)程晚一個(gè)時(shí)鐘周期的缺點(diǎn)。
本文介紹了在FPGA可編程邏輯器件上利用狀態(tài)機(FSM)實(shí)現的電子密碼鎖,從實(shí)際工程設計角度闡述了其工作原理、系統結構、軟件設計方法、系統調試及設計注意點(diǎn)。實(shí)現了對密碼設置、密碼更改、上鎖、解鎖、密碼防盜報警等功能。文中對主要模塊的程序進(jìn)行了時(shí)序仿真,并在FPGA(EP1C6Q240C8)上下載實(shí)現,仿真與實(shí)測結果都表明該密碼鎖滿(mǎn)足功能設計要求,且系統工作穩定。此電子密碼鎖是以實(shí)際需求為出發(fā)點(diǎn)來(lái)完成研制的,具有很好的實(shí)用價(jià)值和市場(chǎng)前景。
評論