課程設(shè)計fpga密碼鎖_第1頁
課程設(shè)計fpga密碼鎖_第2頁
課程設(shè)計fpga密碼鎖_第3頁
課程設(shè)計fpga密碼鎖_第4頁
免費預(yù)覽已結(jié)束,剩余20頁可下載查看

下載本文檔

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

文檔簡介

1、FPGA 實驗報告實驗名稱:FPGA課程設(shè)計實驗日期:2013年6月3日姓名:學(xué)號:一、實驗?zāi)康?設(shè)計一個密碼鎖2. 加深 FPGA電路原理的理解3. 掌握 VHDL語言的使用,學(xué)會用 VHDI語言來編程解決實際問題4. 學(xué)會使用 EDA開發(fā)軟件設(shè)計小型綜合電路,掌握仿真的技巧5. 學(xué)會應(yīng)用開發(fā)系統(tǒng)實現(xiàn)硬件電路,檢驗電路的功能精選資料,歡迎下載二、實驗內(nèi)容題目:電子密碼鎖內(nèi)容:設(shè)計一個4 位串行數(shù)字鎖1. 開鎖代碼為4 位二進制,當輸入代碼的位數(shù)與鎖內(nèi)給定的密碼一致,且按規(guī)定程序開鎖時,方可開鎖。否則進入“錯誤”狀態(tài),發(fā)出報警信號。2. 鎖內(nèi)的密碼可調(diào),且預(yù)置方便,保密性好。3. 串行數(shù)字鎖的

2、報警,直到按下復(fù)位開關(guān),才停下。此時,數(shù)字鎖 又自動等待下一個開鎖狀態(tài)。三、實驗步驟1.系統(tǒng)總框圖本系統(tǒng)的硬件部分主要由密碼鎖按鍵消抖模塊,密碼輸入比較更改模塊,密碼顯示模塊、報警模塊組成。整體系統(tǒng)框圖如下圖所示。2. 密碼鎖的主要功能密碼鎖控制器的主要功能有:(1)密碼輸入:有二個按鍵來控制(分別代表0 和 1), 每按下一個鍵,要求在數(shù)碼管上顯示,并依次左移。精選資料,歡迎下載(2)密碼校驗:如果有按鍵按下,直到松開該按鍵,如果密碼校驗正確,無變化,否則如果密碼校驗錯誤蜂鳴器響,表明密碼錯誤。( 3) 錯誤報警:密碼輸入錯誤開始報警。( 4) 密碼修改:輸入密碼正確后按按鍵輸入要設(shè)置和更改

3、的密碼,按按鍵確認密碼設(shè)置與更改,則密碼設(shè)置成功。3. 密碼鎖的各個模塊( 1) 按鍵消抖。每按下一個鍵,僅產(chǎn)生一個信號脈沖,作為按鍵的使能信號,使能信號控制顯示的數(shù)字。(2)密碼輸入比較密碼輸入值的比較主要有兩部分,密碼位數(shù)和內(nèi)容 ,任何一個 條件不滿足,都不能打開鎖。鎖內(nèi)密碼為0000”,key2 和 keyl 置 低電平,分別表示輸入T 和 0”。輸入密碼前先按start鍵, 再依次正確輸入 0000, 會在數(shù)碼管逐一顯示,按確認鍵,經(jīng)檢驗, 輸入的密碼等于鎖內(nèi)預(yù)先設(shè)置的密碼密碼鎖開啟信號 , 鎖開啟。同時, 可 以進行密碼修改。若在輸入密碼的過程中,4位二進制密碼出現(xiàn)輸入錯誤 , 那么

4、鎖不能開啟, 同時,蜂鳴器發(fā)出報警信號。直到按下復(fù)位開關(guān) ,報警才停止。此時, 數(shù)字鎖又自動進入等待下一次開鎖的狀 態(tài)。(3)密碼修改為防止任意進行密碼修改,必須在正確輸入密碼后,才能重新設(shè)置密碼。輸入正確密碼后,鎖打開,就可直接進行修改密碼的操作。修改密碼實質(zhì)就是用輸入的新密碼去取代原來的舊密碼,按確 定按鍵 ok,存儲新密碼。精選資料,歡迎下載( 4)報警對 50M晶振進行分頻,實現(xiàn)對蜂鳴器的控制( 5)數(shù)碼顯示 八段數(shù)碼管是電子開發(fā)過程中常用的輸出顯示設(shè)備。在本設(shè)計 中使用的是 8 個四位一體、共陰極型八段數(shù)碼管。 其單個靜態(tài)數(shù)碼管 如下圖所示。由于八段數(shù)碼管公共端連接到VCC(共陽極型

5、),當數(shù)碼管的中的一個段被輸入低電平,則相應(yīng)的這一段被點亮。反之則不亮。四位一體的八段數(shù)碼管在單個靜態(tài)數(shù)碼管的基礎(chǔ)上加入了用于選擇哪一 位數(shù)碼管的位選信號端口。八個數(shù)碼管的 a、b、c、d、e、f 、g、h、 dp 都連在了一起, 8 個數(shù)碼管分別由各自的位選信號來控制, 被選通 的數(shù)碼管顯示數(shù)據(jù),其余關(guān)閉。精選資料,歡迎下載10( 細2<f )Nd)單個數(shù)碼管管腳示意圖本實驗通過計數(shù)信號count 控制數(shù)碼管亮的個數(shù),用temp 信號控制數(shù)碼管的動態(tài)掃描顯示,以實現(xiàn)每輸入一位密碼,數(shù)碼管顯示 左移一位。4. 軟件仿真(1)密碼輸入正確時,蜂鳴器不響, beep=1。(默認密碼為 000

6、0),仿真圖如下:(2)密碼輸入錯誤時( 0001),蜂鳴器響, beep=0。(默認密碼為0000),仿真圖如下 :精選資料,歡迎下載四、實驗總結(jié)這次密碼鎖的設(shè)計過程表明,用VHDL可以快速、靈活地設(shè)計出符合要求的密碼鎖控制器,而且操作簡單??梢詫崿F(xiàn)密碼輸入、密碼校驗、密碼設(shè)置和更改等功能。設(shè)計過程能夠在設(shè)計完成后在QuartusH 環(huán)境下進行電路的模擬仿真,反饋結(jié)果可以驗證程序設(shè)計的可行性與可靠性。本密碼鎖控制器設(shè)置的是4 位密碼,在系統(tǒng)復(fù)位后,輸入一個完整的密碼串,輸入完后,系統(tǒng)會進行比對,如果發(fā)現(xiàn)密碼吻合,則開門,如果輸入的密碼串都是錯誤的,則系統(tǒng)報警。這樣的設(shè)計可以很好的滿足人們的日

7、常需求。同時,密碼鎖還具有密碼修改功能,方便操作,使得密碼鎖的使用更加安全、便捷。在軟件、硬件設(shè)計和仿真過程中間我們也遇到不少問題,但最終還是把它們解決了,使得設(shè)計符合要求。除了自己思考設(shè)計之外,這與和同學(xué)的同心協(xié)力的合作與討論是分不開的的。相互的探討使得我們的思路更加開闊,解決問題的辦法也更多。總之,此次課程設(shè)計讓我收益良多,同時因為有了實踐操作,對EDA技術(shù)能夠更好的掌握和應(yīng)用了。精選資料,歡迎下載附:VHD 程序總代碼library ieee;entity lock isport(key1,key2:in std_logic;clk,start,ok: in std_logic; bee

8、p:outstd_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_logic:='0' -signal beep1,keyen1,keyen2:std_logic:='1' -si

9、gnal shuru:std_logic; -signal count: std_logic_vector(2 downto 0):="000"-數(shù)signal temp: std_logic_vector(1 downto 0):="00" begin process(clk,key1)variable m:integer range 0 to 250000; -beginif clk'event and clk='1'thenif key1='0' thenif m=250000 then m:=m;else

10、m:=m+1;end if;if m=249999 then keyen1<='0'else keyen1<='1'end if;else m:=0;end if;end if;end process;process(clk,key2)variable a:integer range 0 to 250000;按鍵時鐘,開始,確定,復(fù)位 正確,蜂鳴器信號數(shù)碼管片選信號數(shù)碼管片內(nèi)顯示輸入密碼,密碼開鎖信號蜂鳴器信號輸入信號計數(shù)輸入密碼的位按鍵消抖按鍵消抖精選資料,歡迎下載beginif clk'event and clk='1't

11、henif key2='0' thenif a=250000 then a:=a;else a:=a+1;end if;if a=249999 then keyen2<='0'else keyen2<='1'end if;else a:=0;end if;end if;end process;process(clk,start,ok) -密碼輸入, 比較, 修改模塊beginif clk'event and clk='1'thenif start='0' then shuru<='

12、1'count<="000"keyin<="0000" open1<='0'beep1<='1' end if;if shuru='1' thenif count="000" thenif keyen1='0' thenkeyin(0)<='0' ;count<=count+1;elsif keyen2='0' thenkeyin(0)<='1' ;count<=cou

13、nt+1;end if;end if;if count="001" thenif keyen1='0' then keyin(1)<='0' ;count<=count+1;elsif keyen2='0' then keyin(1)<='1' ;count<=count+1;end if;end if;if count="010" thenif keyen1='0' thenkeyin(2)<='0' ;count<=co

14、unt+1;elsif keyen2='0' then keyin(2)<='1' ; count<=count+1;end if;end if;精選資料,歡迎下載if count="011" thenif keyen1='0' then keyin(3)<='0' ; count<=count+1; shuru<='0'elsif keyen2='0' thenkeyin(3)<='1' ; count<=count+1

15、;shuru<='0'end if;end if;end if;if ok='0'and open1='0' thenif (keyin=password) and count="100" thenopen1<='1' shuru<='1'elsebeep1<='0'open1<='0'end if;end if;if ok='0'and open1='1'thencount<="000

16、" password<=keyin;end if;end if;end process;process(clk,start,ok) -塊報警模variable g:integer range 0 to 25000;beginif clk'event and clk='1'thenif g=25000 theng:=0;elseg:=g+1;end if;if g<=12500 and beep1='0' thenbeep<='0' elsebeep<='1' end if; end if;

17、 end process;process(clk)variable n:integer range 0 to 2500;- 計數(shù)模塊beginif clk'event and clk='1'thenif n=2500 thenn:=0;if temp="11"then temp<="00" else temp<=temp+1;end if;精選資料,歡迎下載elsen:=n+1;end if;end if;end process;process(clk) -數(shù)碼管顯示模塊beginif clk'event an

18、d clk='1'thenif count="001" thencase temp iswhen "00" => dig<="01111111" ;if keyin(0)='0'then seg<="11000000"else seg<="11111001"end if;when others =>seg<="11111111" ;end case ;elsif count="010" t

19、hencase temp iswhen "00" => dig<="01111111" ;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<="11

20、111001"end if;when others =>seg<="11111111" ;end case ;elsif count="011" thencase temp iswhen "00" => dig<="01111111" ;if keyin(2)='0'then seg<="11000000" else seg<="11111001"end if;when "01" => d

21、ig<="10111111" ; if keyin(1)='0'then 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="100" thencase temp iswhen "00" => dig<="01111111" ;if keyin(3)='0'the

溫馨提示

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

評論

0/150

提交評論