【正文】
0 年代后,隨著電子鎖專用集成電路的出現(xiàn),電子鎖的體積縮小,可靠性提高,成本較高,是 適合使用在安全性要求較高的場(chǎng)合,且需要有電源提供能量,使用還局限在一定范圍,難以普及,所以對(duì)它的研究一直沒有明顯進(jìn)展。國內(nèi)的不少企業(yè)也引 進(jìn)了世界上先進(jìn)的技術(shù),發(fā)展前景非常可觀。基于現(xiàn)場(chǎng)可編程邏輯門陣列 FPGA 器件的電子密碼鎖,用 FPGA 器件構(gòu)造系統(tǒng),所有算法完全由硬件電路來實(shí)現(xiàn),使得系統(tǒng)的工作可靠性大為提高。設(shè)計(jì)充分利用了 FPGA 的資源可編程特性,可高效率的對(duì)系統(tǒng)進(jìn)行升級(jí)與改進(jìn)。有必要檢查和修改的地方有 RTL 級(jí)描述、系統(tǒng)方案、約束和測(cè)試激勵(lì)等。 在理論上,把 VLSI(Ultra Large Scale Integration,超大規(guī)模集成電路 )的設(shè)計(jì)描述為 6 個(gè)層次 [1, 2],即系統(tǒng)級(jí) (系統(tǒng)功能、參數(shù)定義 )、算法級(jí) (描述系統(tǒng)功能行為 )、 RTL級(jí)、門級(jí) (邏輯門 )、電 路級(jí) (晶體管 )、版圖級(jí) (物理工藝 )。上述的 FPGA 系統(tǒng)設(shè)計(jì)中的系統(tǒng)實(shí)際上是指系統(tǒng)級(jí)和算法級(jí),而 “RTL級(jí)描述 ”主要是指 RTL 級(jí)行為域的描述。 需要說明的是,系統(tǒng)行為仿真和 RTL 級(jí)功能仿真有時(shí)要用到某種功能模塊,例如 RAM 模型。解決的方法是系統(tǒng)行為仿真時(shí)可以使用高級(jí)語言自己建立一個(gè)模型或者調(diào)用廠家?guī)熘刑峁┑男袨榧?jí)模型,功能仿真時(shí)調(diào)用行為級(jí)模型,時(shí)序仿真時(shí)調(diào)用門級(jí)模型。 約束:指對(duì)邏輯綜合和布局布線時(shí)的約束。VHDL 的設(shè)計(jì)流程如 圖。在其對(duì)應(yīng)的初級(jí)設(shè)計(jì)單元實(shí)體說明被編譯并且被并入設(shè)計(jì)庫之后,它就可以單獨(dú)地被并入該設(shè)計(jì)庫中。 基于 FPGA 的電子密碼鎖設(shè)計(jì) 7 庫 庫是經(jīng)編譯后的實(shí)體、結(jié)構(gòu)體、包集合和配置的集合。 包集合 包集合 屬庫中的一個(gè)層次,是一種可編譯的源設(shè)計(jì)單元。通過配置技術(shù),可以選取多種不同的結(jié)構(gòu)體,以便對(duì) 一個(gè)設(shè)計(jì)任務(wù)采用仿真工具進(jìn)行多種配置的性能實(shí)驗(yàn)。邏輯綜合與所使用的邏輯綜合工具有關(guān),由邏輯綜合優(yōu)化工具生成具體的門級(jí)邏輯電路的EDIF( Electronic Design Interchange Format)網(wǎng)表。這是用 VHDL 語言設(shè)計(jì)基于 FPGA 的電子密碼鎖設(shè)計(jì) 8 系統(tǒng)硬件的最突出的優(yōu)點(diǎn)。一般包括: ① 實(shí)驗(yàn)或開發(fā)所需的各類基本信號(hào)發(fā)生模塊; ② FPGA/CPLD 輸出信息顯示模塊; ③ 監(jiān)控程序模塊; ④ 目標(biāo)芯片適配座以及上面的 FPGA/CPLD 目標(biāo)芯片和下載電路。故 NT 應(yīng)有合理的上限和下限。即: TEN=(NTLt/2n)/x 顯然若使 NT=NTL,則 TrTEN,則使分段隨機(jī)試驗(yàn)不易成功。 其中 a 為基數(shù), i 為位數(shù), a 和 i 的選取應(yīng)該滿足 NT≥NTL , a=2, 3, 4, 10,基于 FPGA 的電子密碼鎖設(shè)計(jì) 10 12, 14, 16。 誤碼輸入的保護(hù)措施 如前所述,電子密碼鎖的設(shè)計(jì)應(yīng)考慮自身的安全保密性,由于編碼和捕捉密碼的實(shí)驗(yàn)都是隨機(jī)的,若要使 P=1 NT 趨近于 0,必須采取誤碼輸入的保護(hù)措施。 雖然 采用數(shù)字密碼鎖電路的好處是設(shè)計(jì)簡(jiǎn)單 ,但是由于其是純電路實(shí)際,在系統(tǒng)運(yùn)行時(shí),延時(shí)會(huì)比較嚴(yán)重。 方案三: 利用 FPGA 設(shè)計(jì)電子密碼鎖,其成本低,設(shè)計(jì)方便(有相應(yīng)的開發(fā)板),現(xiàn)有資源充足,實(shí)現(xiàn)比較容易,更利于系統(tǒng)的維護(hù)改進(jìn)和升級(jí),可靠性更高,更安全。 ( 3)密碼更改:按下此鍵時(shí)會(huì)將目前的數(shù)字設(shè)定成新的密碼。 F P G A 控制 模 塊12 3 45 6 7890 * 確 定密 碼清 除上 鎖解 鎖揚(yáng) 聲 器 圖 電子密碼 鎖 外觀 圖 上圖為在實(shí)驗(yàn)開發(fā)板上實(shí)現(xiàn),使用開發(fā)板有十六個(gè)按鍵,分別對(duì)應(yīng)數(shù)字 0 到 9和各個(gè)功能鍵, LED 顯示為開發(fā)板上數(shù)碼管顯示。 數(shù)字電子密碼鎖的顯示信息電路可采用 LED 數(shù)碼管顯示和液晶屏幕顯示兩種。圖 為數(shù)字電子密碼鎖系統(tǒng)總體框圖。開發(fā)板鍵盤具有低成本、可靠性高、構(gòu)成 電路簡(jiǎn)單、技術(shù)成熟和應(yīng)用廣泛等特點(diǎn),因此將其應(yīng)用到通用電子密碼鎖中還是比較適宜的。如,若選 用七段數(shù)碼管顯示電路,主要將待顯示數(shù)據(jù)的 BCD 碼轉(zhuǎn)換成數(shù)碼器的七段顯示驅(qū)動(dòng)編碼。圖 是一個(gè) 34 矩陣式鍵盤的面板配置圖,其中數(shù)字 0~ 9 作為密碼數(shù)字輸入按鍵, *作為 “上鎖 ”功能按鍵, 作為 “解鎖 /清除 ”功能按鍵。若輸入時(shí)鐘為 CLK, N 位計(jì)數(shù)器的輸出為 Q[N1..0],則 Q(0)為 CLK 的 2 分頻脈沖信號(hào), Q(1)為 CLK 的 4 分頻脈沖信號(hào),Q(2)為 CLK 的 8分頻脈沖信號(hào) ……Q(N 1)為 CLK 的 2N分頻脈沖信號(hào); Q(5 DOWNTO 4)取得的是一個(gè)脈沖波形序列,其值依 00- 01- 10- 11- 00- 01 周期性變化,其變化頻率為 CLK 的 32 分頻。 按鍵輸入 CLK_SCAN: OUT STD_LOGIC_VECTOR (3 DOWNTO 0) 。 數(shù)字輸出標(biāo)志 FLAG_F: OUT STD_LOGIC 。 如果調(diào)整抽樣頻率 (如圖 所示 ),可以發(fā)現(xiàn)彈跳現(xiàn)象獲得了改善。 彈跳消除電路的實(shí)現(xiàn)原理如圖 所示,先將鍵盤的輸入信號(hào) D_IN 做為電路的輸入信號(hào), CLK 是電路的時(shí)鐘脈沖信號(hào),也就是取樣信號(hào), D_IN 經(jīng)過兩級(jí) D 觸發(fā)器延時(shí)后再使用 RS 觸發(fā)器處理。 (3) 在觸發(fā)器之前,接上 ANDNOT 之后, SR 的組態(tài)如表 所示。 USE 。 END ENTITY DEBOUNCING 。 SIGNAL VCC, INV_D : STD_LOGIC 。139。 U2: DCFQ PORT MAP (CLK = CLK, CLRN = Q0, PRN = VCC, D =VCC , Q = Q1)。 THEN D0 = NOT Q1。 DD0 = D0。 D_OUT = NOT (D1 AND NOT D0)。 USE 。 ARCHITECTURE ART OF DCFQ IS BEGIN PROCESS (CLK, CLRN, PRN) BEGIN IF CLRN=39。 THEN Q=39。 AND PRN=39。 ELSIF CLK39。 END IF 。 掃描電路的作用是用來提供鍵盤掃描信號(hào) (表 中的 KY3~ KY0)的,掃描信號(hào)變化的順序依次為 1110- 1101- 1011- 0111- 1110…… 依序的周而復(fù)始。 SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0)。 THEN Q = Q+1。 產(chǎn)生鍵掃信號(hào) ***“00011011”, 大約 16 Hz C_DEBOUNCE = Q(1) 。 CLK_DEBOUNCE=C_DEBOUNCE。 譯碼電路 在密碼輸入電路中,按鍵又分為數(shù)字按鍵和文字按鍵,每一個(gè)按鍵可能負(fù)責(zé)不同的功能,例如清除鍵、上鎖鍵和解鎖鍵等。 C 。 THEN CASE Z IS WHEN 11101 = N = 0000 。 3 WHEN 01011 = N = 0100 。 7 WHEN 10101 = N = 1000 。 END IF 。 data_n:數(shù)字輸出端口 ,為數(shù)字的輸出提供信號(hào)。 ksrclk:鍵盤輸入采樣時(shí)鐘 。 n, f:數(shù)字、功能按鍵譯碼值的寄存器 ,用于存儲(chǔ)數(shù)字、功能按鍵譯碼后的值。 基于 FPGA 的電子密碼鎖設(shè)計(jì) 23 電子密碼鎖控制模塊 控制鎖的控制模塊是整個(gè)電路的控制中心,主要 完成對(duì)數(shù)字按鍵輸入和功能按鍵輸入的相應(yīng)控制。 功能按鍵輸入的響應(yīng)控制 ( 1)清除鍵:清除所有的輸入數(shù)字 ,即作歸零動(dòng)作。但是在實(shí)際操作中,難免會(huì)有按錯(cuò)鍵的情況發(fā)生,使得 “清除輸入 ”功能是用的機(jī)率很高,所以在設(shè)計(jì)中共設(shè)置了兩個(gè)功能按鍵,其中 “接觸電鎖 ”和 “清除電鎖 ”共用一個(gè)功能按鍵,另一個(gè)功能按鍵是 “激活電鎖 ”。 USE 。 FLAG_F: IN STD_LOGIC。 END ENTITY CTRL 。 SIGNAL R1, R0: STD_LOGIC。 THEN R1=R0。 CLR=RR2。 PROCESS(FLAG_N, RST) IS BEGIN IF RST = 39。 ELSE IF FLAG_N39。 DATA_N 。 END IF 。EVENT AND CLK = 39。 THEN 上鎖控制信號(hào)有效 REG = ACC 。 QB = 39。 THEN 開鎖控制信號(hào)有效 IF REG = ACC THEN 密碼核對(duì) QA= 39。 。 。 END IF。 輸出上鎖 /開鎖控制信號(hào) ENLOCK = QA AND NOT QB 。 圖 密碼鎖控制電路仿真結(jié)果圖 基于 FPGA 的電子密碼鎖設(shè)計(jì) 27 接 通 電 源初 始 狀 態(tài)數(shù) 字 鍵 輸 入D A T A _ NK S R C L KM I M A I N功 能 鍵 輸 入D A T A _ FF L A G _ F錯(cuò) 誤 狀 態(tài)報(bào) 警 狀 態(tài)萬 能 密 碼, C Q D ’ E V E N TA N D C Q D = 0D A T A _ F = ” 0 1 0 0” S E T I N = 0O L D = 0A C C 不 等 于R E GA C C = R E GF L A G _ ND A T A _ F = ” 0 00 1 ”Y E SN OY E S Y E SY E S解 鎖 狀 態(tài)E N L O C KY E SN ON ON ON OA C C = 1 0 0 1 1 0 01 1 0 0 1 1 0 0 1 S E T I N設(shè) 置 、 清 楚密 碼Y E SN O 圖 控制模塊的 ASM 圖 的實(shí)現(xiàn) 生成符號(hào)圖 dat a_n[ 3. .0]dat a_f [3. .0]f lag_nf lag_fk s rc lkm im ains et inoldenloc kdat a_bc d[ 15. .0]c trlins t 基于 FPGA 的電子密碼鎖設(shè)計(jì) 28 圖 控制模塊電路符號(hào)圖 模塊外部信號(hào)端口: data_n:數(shù)字輸入端口 ,用于提供數(shù)字輸入信號(hào)。 ksrclk:鍵盤輸入采樣 時(shí)鐘 ,用于提供鍵盤輸入的采樣時(shí)鐘。 setin:密碼設(shè)定標(biāo)志 ,提供密碼設(shè)置信號(hào)。分段式顯示器由 7條線段圍成 8型,每一段包含一個(gè)發(fā)光二極管,外加正向電壓時(shí)二極管導(dǎo)通,發(fā)出清晰的光,有紅、黃、綠等色。若用它驅(qū)動(dòng)共陰極 LED 數(shù)碼管,則輸出應(yīng)為高有效,即輸出高 1 時(shí),相應(yīng) 顯示段發(fā)光。 USE 。 ARCHITECTURE one OF DECL7S IS BEGIN PROCESS( A ) BEGIN CASE A IS WHEN 0000 = LED7S =0111111 。 WHEN 0100 = LED7S =1100110 。 WHEN 1000 = LED7S =1111111 。 WHEN 1100 = LED7S =01。 WHEN 1010 = LED7S =1110111 。 WHEN 0110 = LED7S =1111101 。 WHEN 0010 = LED7S =1011011 。 LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) 。同理,根據(jù)組成 0~9這 10 個(gè)字形的要求可以列出 8421BCD 七段譯碼器的真值表,見表 。 圖 左邊右邊是共陰式和共陽式 LED數(shù)碼管的原理圖,以及共陰式的連接法和驅(qū)動(dòng)原理。 模塊內(nèi)部信號(hào): acc:暫存鍵盤輸入信息 reg:密碼存儲(chǔ)位置 電子密碼鎖顯示模塊 數(shù)字 顯示主要由 LED數(shù)碼管實(shí)現(xiàn)。 data_bcd:按鍵顯示輸出端口 ,用于提供按鍵顯示輸出信號(hào)。 flag_n:數(shù)字輸入標(biāo)志 ,用于識(shí)別數(shù)字是否輸入。 END ARCHITECTURE ART。 END PROCESS 。139。 ELSIF ACC = 1000100010001000 THEN 設(shè)置 “8888”為萬用密碼 QA = 39。 QB = 39。 ELSIF DATA_F(0) = 39。139。) THEN IF NC = 4 THEN IF DATA_F(2) = 39。 END BLOCK KEYIN_PROCESS 。 END IF。139。 THEN ACC = 0000000000000000 。 按鍵輸入數(shù)據(jù)的存儲(chǔ)、清零進(jìn)程 KEYIN_PROCESS : BLOCK IS SIGNAL RST, D0, D1: STD_LOGIC 。 END IF。EVE