基于VHDL的電子密碼鎖的設(shè)計(jì)(1)_第1頁(yè)
基于VHDL的電子密碼鎖的設(shè)計(jì)(1)_第2頁(yè)
基于VHDL的電子密碼鎖的設(shè)計(jì)(1)_第3頁(yè)
基于VHDL的電子密碼鎖的設(shè)計(jì)(1)_第4頁(yè)
基于VHDL的電子密碼鎖的設(shè)計(jì)(1)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、EDA仿真與實(shí)踐實(shí)習(xí) 學(xué) 院: 信息科學(xué)與工程學(xué)院 課題名稱(chēng): 硬件描述語(yǔ)言設(shè)計(jì) 基于VHDL的電子密碼鎖的設(shè)計(jì) 班 級(jí): 學(xué) 生: 學(xué) 號(hào): 指導(dǎo)教師: 1 引言在日常的生活和工作中, 住宅與部門(mén)的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來(lái)解決。若使用傳統(tǒng)的機(jī)械式鑰匙開(kāi)鎖,人們常需攜帶多把鑰匙, 使用極不方便, 且鑰匙丟失后安全性即大打折扣。隨著科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安全保險(xiǎn)器件的要求越來(lái)越高。為滿(mǎn)足人們對(duì)鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生?;贓DA技術(shù)設(shè)計(jì)的電子密碼鎖。以其價(jià)格便宜、使用方便、安全性高、成本低、功耗低、

2、易操作等優(yōu)點(diǎn),受到了人們的普遍關(guān)注。而以可編程邏輯器件(FBDA)為設(shè)計(jì)載體,以硬件描述語(yǔ)言(VHDL)為主要表達(dá)方式,以Quartus5.1開(kāi)發(fā)軟件等為設(shè)計(jì)工具設(shè)計(jì)的電子密碼鎖,由于其能夠?qū)崿F(xiàn)密碼輸入、密碼校驗(yàn)、密碼設(shè)置和更改等功能,因此,能夠滿(mǎn)足社會(huì)對(duì)安全防盜的需求。本設(shè)計(jì)的各個(gè)模塊由相應(yīng)的VHDL程序具體實(shí)現(xiàn),并在Quartus5.1環(huán)境下進(jìn)行了整體電路的模擬仿真,最終實(shí)現(xiàn)“密碼鎖控制器設(shè)計(jì)”的要求。2 設(shè)計(jì)內(nèi)容和要求2.1 設(shè)計(jì)內(nèi)容:題目:電子密碼鎖內(nèi)容:設(shè)計(jì)一個(gè)4位串行數(shù)字鎖。(1)開(kāi)鎖代碼為4位二進(jìn)制,當(dāng)輸入代碼的位數(shù)與鎖內(nèi)給定的密碼一致,且按規(guī)定程序開(kāi)鎖時(shí),方可開(kāi)鎖,并點(diǎn)亮一個(gè)指

3、示燈。否則進(jìn)入“錯(cuò)誤”狀態(tài),并發(fā)出報(bào)警信號(hào)。(2)鎖內(nèi)的密碼可調(diào),且預(yù)置方便,保密性好。(3)串行數(shù)字鎖的報(bào)警由點(diǎn)亮一個(gè)燈,直到按下復(fù)位開(kāi)關(guān),報(bào)警才停下。此時(shí),數(shù)字鎖又自動(dòng)等待下一個(gè)開(kāi)鎖狀態(tài)。要求:(1)通過(guò)查閱相關(guān)技術(shù)資料,詳細(xì)描述電子密碼鎖的基本原理。(2)編寫(xiě)電子密碼鎖的Verilog HDL或VHDL程序,并仿真編譯下載驗(yàn)證。(3)給出完整的系統(tǒng)頂層模塊圖與波形仿真圖。3 設(shè)計(jì)分案 密碼鎖控制器是硬件與軟件的結(jié)合。根據(jù)設(shè)計(jì)要求,決定以FBDA芯片和VHDL語(yǔ)言設(shè)計(jì)此電子密碼鎖。用一片F(xiàn)BDA芯片實(shí)現(xiàn),從而大大簡(jiǎn)化了系統(tǒng)結(jié)構(gòu),降低了成本,提高了系統(tǒng)的保密性和可靠性。這種設(shè)計(jì)不僅簡(jiǎn)化了系統(tǒng)

4、結(jié)構(gòu),降低了成本,更提高了系統(tǒng)的可靠性和保密性。另外,采用可編程邏輯器件開(kāi)發(fā)的數(shù)字系統(tǒng),方便地升級(jí)和改進(jìn)。3.1 系統(tǒng)總框圖本系統(tǒng)的硬件部分主要由密碼鎖控制電路、密碼鎖顯示電路、LED顯示電路、報(bào)警電路、密碼更改與設(shè)置電路組成。整體系統(tǒng)框圖如下圖2.1所示。密碼鎖顯示電路密碼鎖顯示電路報(bào)警電路密碼鎖控制電路LED顯示電路密碼鎖總框圖3.2 密碼鎖的內(nèi)部結(jié)構(gòu)及主要功能3.2.1密碼鎖的主要功能密碼鎖控制器的主要功能有:(1)密碼輸入:有二個(gè)按鍵來(lái)控制(分別代表0和1),每按下一個(gè)鍵,要求在數(shù)碼管上顯示,并依次左移。(2)密碼校驗(yàn):如果有按鍵按下,直到松開(kāi)該按鍵;紅綠燈指示門(mén)的狀態(tài),也就是密碼校驗(yàn)

5、結(jié)果,如果密碼校驗(yàn)正確,綠亮起,否則如果密碼校驗(yàn)錯(cuò)誤紅燈亮,并鳳鳴器響,表明密碼錯(cuò)誤。(3)錯(cuò)誤報(bào)警:密碼輸入錯(cuò)誤開(kāi)始報(bào)警。(4)密碼修改:輸入密碼正確后4秒內(nèi)按按鍵輸入要設(shè)置和更改的密碼,按按鍵確認(rèn)密碼設(shè)置與更改,則密碼設(shè)置成功4 系統(tǒng)硬件電路4.1 密碼鎖的顯示模塊段數(shù)碼管是電子開(kāi)發(fā)過(guò)程中常用的輸出顯示設(shè)備。在本設(shè)計(jì)中使用的是8個(gè)四位一體、共陰極型七段數(shù)碼管。其單個(gè)靜態(tài)數(shù)碼管如下圖所示。由于七段數(shù)碼管公共端連接到GND(共陰極型),當(dāng)數(shù)碼管的中的一個(gè)段被輸入高電平,則相應(yīng)的這一段被點(diǎn)亮。反之則不亮。共陽(yáng)極性的數(shù)碼管與之相反。四位一體的七段數(shù)碼管在單個(gè)靜態(tài)數(shù)碼管的基礎(chǔ)上加入了用于選擇哪一位數(shù)

6、碼管的位選信號(hào)端口。八個(gè)數(shù)碼管的a、b、c、d、e、f、g、h、dp都連在了一起,8個(gè)數(shù)碼管分別由各自的位選信號(hào)來(lái)控制,被選通的數(shù)碼管顯示數(shù)據(jù),其余關(guān)閉。4.2 密碼鎖控制模塊 該模塊的作用是將輸入的密碼 (暫時(shí)寄存于 ACC中)跟已經(jīng)存儲(chǔ)的密碼(REG中的密碼信息)進(jìn)行對(duì)比,如果一樣,則密碼鎖開(kāi)鎖。而在通過(guò)密碼驗(yàn)證后可以按按鍵設(shè)定密碼。在這里值得注意的是有一個(gè)密碼“0000”為開(kāi)始密碼,如果改名密碼了但是又忘記了密碼,重新下載之后的初始密碼只要輸入的密碼為“0000”則都可通過(guò)密碼鎖。模塊lock是整個(gè)設(shè)計(jì)的核心 ,它實(shí)現(xiàn)密碼鎖的邏輯功能。在任何時(shí)候按動(dòng)密碼初始化按鍵內(nèi)密碼設(shè)置為程序初始化密

7、碼值(在本模塊程序中此值為 “0000”代碼為 4 位二進(jìn)制數(shù) ,當(dāng)輸入代碼的位數(shù)和位值與鎖內(nèi)給定的密碼一致 ,且按規(guī)定程序開(kāi)鎖時(shí) ,方可開(kāi)鎖 ,并點(diǎn)亮開(kāi)鎖指示燈(緑燈)亮。否則 ,系統(tǒng)進(jìn)入 “錯(cuò)誤”狀態(tài) ,并發(fā)出報(bào)警信號(hào)。串行數(shù)字鎖的報(bào)警方式是點(diǎn)亮指示燈(紅燈) ,并使喇叭鳴叫 ,直到按下復(fù)位開(kāi)關(guān) ,報(bào)警才停止。此時(shí) ,數(shù)字鎖又自動(dòng)進(jìn)入等待下一次開(kāi)鎖的狀態(tài)。該 4 位串行電子密碼鎖設(shè)置 4 位二進(jìn)制密碼 ,要求鎖內(nèi)給定的密碼是可調(diào)的 ,且設(shè)置方便 ,保密性好。其具體操作分為輸入密碼和修改密碼兩部分4.2.1輸入密碼密碼輸入值的比較主要有兩部分 ,密碼位數(shù)和內(nèi)容 ,任何一個(gè)條件不滿(mǎn)足 ,都不能

8、打開(kāi)鎖。若鎖內(nèi)密碼為 “0000” , key2 和 key1 置低電平 ,分別表示輸入 “1” 和 “0” 。輸入密碼前先進(jìn)行復(fù)位操作 ,再按著從密碼最低位到最高位的順序依次正確輸入0000,會(huì)在數(shù)碼管逐一顯示。經(jīng)檢驗(yàn) ,輸入的密碼 等于鎖內(nèi)預(yù)先設(shè)置的密碼密碼鎖開(kāi)啟信號(hào),鎖開(kāi)啟。同時(shí),密碼修改控制信號(hào)rw置低電平。若在輸入密碼的過(guò)程中 ,4 位二進(jìn)制密碼出現(xiàn)輸入錯(cuò)誤 ,那么鎖不能開(kāi)啟 ,同時(shí) ,指示燈紅燈 亮 ,發(fā)出報(bào)警信號(hào) 。直到按下復(fù)位開(kāi)關(guān) ,報(bào)警才停止。此時(shí) ,數(shù)字鎖又自動(dòng)進(jìn)入等待下一次開(kāi)鎖的狀態(tài)。4.2.2修改密碼為防止任意進(jìn)行密碼修改 ,必須在正確輸入密碼后 ,才能重新設(shè)置密碼。輸

9、入正確密碼后 ,鎖打開(kāi) ,同時(shí) ,密碼修改控制信號(hào)按鍵rw 置低電平 ,就可直接進(jìn)行修改密碼的操作。修改密碼實(shí)質(zhì)就是用輸入的新密碼去取代原來(lái)的舊密碼, 按確定按鍵ok, 存儲(chǔ)新密碼時(shí).5 VHDL程序設(shè)計(jì)密碼鎖控制器的各個(gè)功能模塊都是通過(guò)VHDL語(yǔ)言來(lái)完成的。本設(shè)計(jì)由密碼鎖顯示顯示模塊、分頻模塊、密碼輸入及校驗(yàn)?zāi)K、報(bào)警模塊、密碼更改與設(shè)置模塊幾部分組成,各模塊分工合作,最后達(dá)到密碼鎖控制器設(shè)計(jì)的要求。表4-1 程序的管腳分配表端口名對(duì)應(yīng)FBGA管腳說(shuō)明clkP2時(shí)鐘為50HzKey1AC23按下按鍵代表為“0”Key2AB21按下按鍵代表為“1”startY14開(kāi)始輸入密碼okAA13確定輸

10、入密碼resetAC15復(fù)位rwV23該密碼clrU23清零redM19密碼錯(cuò)誤紅燈亮greenT22密碼正確緑燈亮beepA14蜂鳴器Seg7.0D16,D17,G13,D15,C15,C16,G15,J13代表數(shù)碼管的片內(nèi)顯示Dig7.0E15,K18,E22,C17,H15,K16,H12,D18代表數(shù)碼管的片外顯示VHDL程序總代碼library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity lock isport(key1,key

11、2:in std_logic; clk,start,ok,reset,rw,clr: in std_logic; red,green,beep:out std_logic:='1' dig:out std_logic_vector(7 downto 0); seg:out std_logic_vector(7 downto 0) );end lock;architecture rt1 of lock issignal keyin,password:std_logic_vector(3 downto 0):="0000"signal open1:std_log

12、ic:='0'signal beep1:std_logic:='1'signal a,shuru:std_logic;signal count: std_logic_vector(2 downto 0):="000"signal temp: std_logic_vector(1 downto 0):="00"beginprocess(clk)variable m:integer range 0 to 10; begin if clk'event and clk='1'then if m=9 then

13、 m:=0; a<='1' else m:=m+1; a<='0' end if; end if;end process;process(clk,start,ok,clr,rw,reset) begin if clk'event and clk='1'then if reset='0' then red<='1'green<='1'beep1<='1'open1<='0'keyin<="0000"s

14、huru<='0'count<="000" end if; if start='0' then shuru<='1' end if; if rw='0' and open1='1'then shuru<='1'count<="000" end if; if clr='0' then keyin<="0000"count<="000"shuru<='1

15、' elsif a='1' and shuru='1' then if key1='0' then keyin<=keyin(2 downto 0)&'0' elsif key2='0' then keyin<=keyin(2 downto 0)&'1' end if; if count="011" then shuru<='0' count<=count+1; else count<=count+1; end

16、 if; end if; if ok='0'and open1='0' then if (keyin=password)then red<='1'green<='0'open1<='1' else red<='0'green<='1'beep1<='0'open1<='0' end if; end if; if ok='0'and open1='1'then password&l

17、t;=keyin; end if; end if;end process;process(clk,start,ok,clr,rw,reset)variable g:integer range 0 to 49999999; begin if clk'event and clk='1'then if g=49999999 then g:=0; else g:=g+1; end if; if g<=24999999 and beep1='0' then beep<='0' else beep<='1' end

18、if; end if; end process;process(clk)variable n:integer range 0 to 50000; beginif clk'event and clk='1'then if n=49999 then n:=0; if temp="11"then temp<="00" else temp<=temp+1; end if; else n:=n+1; end if; if count="001" then case temp is when "00&

19、quot; => dig<="01111111" ; if keyin(0)='0'then seg<="11000000" else seg<="11111001"end if; when others =>seg<="11111111" ; end case ; elsif count="010" then case temp is when "00" => dig<="01111111"

20、 ; if keyin(1)='0'then seg<="11000000" else seg<="11111001"end if; when "01" => dig<="10111111" ; if keyin(0)='0'then seg<="11000000" else seg<="11111001"end if; when others =>seg<="11111111"

21、; ; end case ; elsif count="011" then case temp is when "00" => dig<="01111111" ; if keyin(2)='0'then seg<="11000000" else seg<="11111001"end if; when "01" => dig<="10111111" ; if keyin(1)='0'then

22、 seg<="11000000" else seg<="11111001"end if; when "10" => dig<="11011111" ; if keyin(0)='0'then seg<="11000000" else seg<="11111001"end if; when others =>seg<="11111111" ; end case ; elsif count=&qu

23、ot;100" then case temp is when "00" => dig<="01111111" ; if keyin(3)='0'then seg<="11000000" else seg<="11111001"end if; when "01" => dig<="10111111" ; if keyin(2)='0'then seg<="11000000"

24、else seg<="11111001"end if; when "10" => dig<="11011111" ; if keyin(1)='0'then seg<="11000000" else seg<="11111001"end if; when "11" => dig<="11101111" ; if keyin(0)='0'then seg<="11000

25、000" else seg<="11111001"end if; when others =>null; end case ; else dig<="11111111" ;seg<="11111111" end if;end if;end process ;end rt1; 6 系統(tǒng)仿真當(dāng)各個(gè)模塊分別編譯成功后 ,則創(chuàng)建一個(gè)個(gè)元件符號(hào)。再用圖形編輯器將各元件模塊組裝起來(lái) ,這就是本設(shè)計(jì)中最頂層的圖形設(shè)計(jì)文件。頂層圖形設(shè)計(jì)文件 lock. gdf 如圖所示 ,這個(gè)結(jié)構(gòu)框圖說(shuō)明了整個(gè)系統(tǒng)的外部輸入和輸出情況。為了獲得與目標(biāo)器件對(duì)應(yīng)的、 精確的時(shí)序仿真文件譯了。編譯成功后進(jìn)行仿真。首先建立波形文件。波形文件 lock. scf 建好并存盤(pán)后 ,選擇菜單 “new” “Vector Waveform File”,啟動(dòng)仿真操作 ,結(jié)束后觀察仿真波形。本設(shè)計(jì)中 ,仿真波形如圖所示。當(dāng)給初始密碼輸入信號(hào) LC 一個(gè)低電平時(shí) ,就將程序預(yù)先設(shè)定的密碼( “0000” )裝入 lock 中 。按下 reset 后,系統(tǒng)復(fù)位 ,處于輸入密碼狀態(tài)。輸入的開(kāi)鎖密碼串行順

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論