基于Verilog的FPGA的電子密碼鎖的設計_第1頁
基于Verilog的FPGA的電子密碼鎖的設計_第2頁
基于Verilog的FPGA的電子密碼鎖的設計_第3頁
基于Verilog的FPGA的電子密碼鎖的設計_第4頁
基于Verilog的FPGA的電子密碼鎖的設計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于FPGA的電子密碼鎖的設計報告摘要:基于FPGA設計的電子密碼鎖是一個小型的數字系統(tǒng),與普通機械鎖相比,具有許多獨特的優(yōu)點:保密性好,防盜性強,可以不用鑰匙,記住密碼即可開鎖等。目前使用的電子密碼鎖大部分是基于單片機技術,以單片機為主要器件。在實際應用中,程序容易跑飛,系統(tǒng)的可靠性較差。本文介紹的一種基于現場可編輯門陣列FPGA器件的電子密碼鎖的設計方法,采用VHDL語言對系統(tǒng)進行描述,并在EP3C10E144C8上實現。 通過仿真調試,利用可編程邏輯器件FPGA的電子密碼鎖的設計基本達到了預期目的。當然,該系統(tǒng)在一些細節(jié)的設計上還需要不斷地完善和改進,特別是對系統(tǒng)的擴展有很好的使用系統(tǒng)和

2、設計的價值。關鍵詞:現場可編程門陣列;VHDL語言;電子密碼鎖The Report Of Electronic Code Lock DesignAbstract:FPGA-based design of the electronic code lock is a small digital system. It has many unique advantages:good privacy and security , it do not need the key but remember password to unlock, and so on while it compare to or

3、dinary mechanical locks. At present, the electronic code lock is most used of SCM technology .In practice, however, the process easy run to fly. So the reliability of this system is poor. The paper introduced a field programmable gate arrays FPGA devices to design electronic password lock. The VHDL

4、language is used to describe the system and achieved in EP3C10E144C8. Though the simulation tests, using FPGA-based design of the electronic code lock can achieve the expected goal. Of course, some of the details of the system in the design of the need to constantly refined and improved, in particul

5、ar the expansion of the system have a good design and practical value.Keyword: FPGA; VHDL language; electronic password lock一、設計內容與要求1 設計一個密碼鎖,密碼為一個4位的十進制數,密碼固化在鎖內 2 用戶輸入密碼正確,則開鎖(試驗箱D7 LED燈亮);若不正確,則報警(試驗箱D0 LED燈亮) 3 若用戶輸入密碼不正確,可以按復位鍵重新輸入密碼。 二、設計思想2.1 系統(tǒng)原理框圖本系統(tǒng)由主控芯片(FPGA),鍵盤,顯示電路,報警電路和開/關門電路組成,而主控芯片又

6、可分為按鍵處理部分,控制部分和譯碼顯示部分。系統(tǒng)原理框圖如圖2.1所示:鍵盤按鍵處理主控部分譯碼顯示顯示開/關門電路報警電路FPGA圖2.1 系統(tǒng)框圖2.2 總體實現原理本系統(tǒng)有8個按鍵,K0,K1,K2,K3,K4,K5代表數字0-9共10個數字和1個確認鍵,1個復位鍵。密碼長度為四位,并且固化在鎖內,輸入正確密碼后,按確認鍵即可開門,本系統(tǒng)設置為LED D7燈亮。在輸入密碼的過程中,當用戶鍵入錯誤密碼時,報警燈LED D0燈亮。按下復位鍵,可使報警停止,同時清除所有密碼顯示。三、芯片主控設計3.1 FPGA有限狀態(tài)機本設計是通過FPGA有限狀態(tài)機來實現,設計有限狀態(tài)機最開始的工作時要確定電

7、路,包括哪些狀態(tài),比如某個電路包括四個狀態(tài),S0,S1,S2,S3。然后對所有狀態(tài)給出一個狀態(tài)編碼,比如為狀態(tài)S0賦予編碼00,為狀態(tài)S1賦予編碼01,為狀態(tài)S2賦予編碼10,為狀態(tài)S3賦予編碼11。狀態(tài)編碼是狀態(tài)的標識,保存在寄存器當中,對于此編碼形式,只需一個2位的寄存器就可以了。FSM Encoding Style 主要有:Binary Encoding One Hot Encoding Gray Encoding 二進制與一位熱碼的特性比較:表3.1 二進制與一位熱碼的特性比較狀態(tài)機可以認為是組合邏輯和寄存器邏輯的特殊租戶,它一般包括兩個部分:組合邏輯部分和寄存器邏輯部分。寄存器用于存

8、儲狀態(tài),組合電路用于狀態(tài)譯碼和產生輸出信號。狀態(tài)機的下一個狀態(tài)及輸出,不僅與輸入信號有關,而且還有寄存器當前所處的狀態(tài)有關。根據輸出信號產生方法的不同,狀態(tài)機可以分成兩類:Mealy型和Moore型。Moore型狀態(tài)機的輸出只是當前狀態(tài)的函數,而Moore型狀態(tài)機的輸出只是當前狀態(tài)的函數,而Mealy型狀態(tài)機的輸出則是當前狀態(tài)和當前輸入狀態(tài)的函數。其原理如下兩圖:圖3.1Mealy型狀態(tài)機輸出原理圖3.2 Moore型狀態(tài)機輸出原理3.2設計流程本次密碼鎖的設計,有限狀態(tài)機應該包括以下狀態(tài):密碼為輸入前的等待狀態(tài)、輸入密碼時的等待狀態(tài)、輸入密碼正確時的通過狀態(tài)、輸入密碼錯誤時的警報狀態(tài)。圖3.

9、3 主有效狀態(tài)機的狀態(tài)轉換圖其中當密碼輸入時又可包括以下狀態(tài),正常輸入狀態(tài)、異常輸入狀態(tài)(包括命令狀態(tài))、輸入確認狀態(tài)。下面的圖(圖是在程序編譯后,tools-Netlist_Vewers-RTL Vewer得到的)表示了密碼輸入的時候的次狀態(tài)機,表示了4個密碼輸入的順序狀態(tài),以及輸入完成后的等待確認狀態(tài)。圖3.4次有效狀態(tài)機的狀態(tài)轉換3.3狀態(tài)編碼狀態(tài)編碼主要有二進制編碼、格雷編碼和一位獨熱編碼等方式。格雷編碼時,相鄰狀態(tài)每次只有一個比特位產生變化,這樣減少了瞬變的次數,也減少了產生毛刺和一些狀態(tài)的可能。采用一位獨熱編碼,雖然多用了觸發(fā)器,當可以有效節(jié)省和簡化組合電路。對于寄存器數量多而邏輯

10、相對缺乏的FPGA器件來說,采用一位獨熱編碼可以有效提高電路的速度和可靠性,也有利于提高器件資源的利用率。將產生狀態(tài)的組合邏輯電路和用于保存狀態(tài)的寄存器分別寫在不同的always塊中。其中主要包括:輸出控制部分、警報計時部分、鎖打開后的計時部分、比較密碼部分、記錄密碼部分和記錄錯誤次數的部分3.4密碼的輸入本次密碼鎖的密碼輸入采用FPGA芯片上的8位單個按鍵,考慮到按鍵數目不夠,采用了一位按鍵作為功能轉換按鍵;即前5位按鍵輸入04,同時按下功能轉換按鍵時,按鍵04即轉換為按鍵59,這就彌補了按鍵數目的不足。最后兩位按鍵設定為確認輸入按鍵和復位按鍵。密碼輸入完成后可以按確認鍵檢驗密碼的正誤,報警

11、、輸入錯誤或者其他情況可以按復位按鍵重新輸入。另外由于按鍵的時候同時會引起狀態(tài)機的轉換,所以如果按鍵的時候對按鍵判斷次數過多會產生狀態(tài)的過快轉換,記錄的密碼和數碼管的顯示就同時會出現錯誤,因此在按鍵部分加入了消除多重按鍵的程序,只檢測一次按鍵的下降沿,解決了這個問題。3.5 密碼記錄與比較程序設定了一個寄存器用來記錄輸入的密碼。當次有效狀態(tài)機(即密碼輸入的狀態(tài)機)發(fā)生轉換并且有密碼輸入時,程序會記錄下輸入的密碼在寄存器的其中4位里面,最后次有效狀態(tài)轉換到確認密碼的狀態(tài)時,會將記錄下的密碼與固化在鎖內的密碼進行對比,正確即將主狀態(tài)機轉換到通過階段,錯誤則將狀態(tài)機轉換到報警階段。其中正確錯誤的狀態(tài)

12、轉換是通過控制相應的標志位實現的。3.6密碼的顯示密碼顯示采用數碼管動態(tài)掃描顯示,初始時顯示密碼為4位0,當輸入密碼后數碼管的第一位、第二位、第三位、第四位會依次顯示輸入的密碼,錯誤后復位可以重新輸入。密碼顯示采用的是記錄密碼的寄存器的數據,顯示掃描的掃描時間設置為1ms左右,這樣顯示不會出現閃爍或者殘影。四、程序仿真下前面的輸入cmd的編碼:/輸入的數字編碼 09,enter,cancelone=4b0001, two=4b0010,three=4b0011,four=4b0100,five=4b0101,six=4b0110,seven=4b0111,eight=4b1000,nine=4

13、b1001,zero=4b1000,enter=4b1010,cancel=4b1011; 可以看到,在復位以后,輸入第1,2,3,4個密碼(依次為1111)后,passed變成高電平當過了一定的時間后,passed變成低電平,重新計入鍵盤讀入值,進行下一輪的密碼辨別。五、程序清單module passwd_lock(clk0,passed,one1,two1,three1,four1,zero1,change,yes, resetb, seg, dig);input one1,two1,three1,four1,zero1,change;reg zero,one,two,three,four

14、;input yes; inputresetb;/輸入復位信號inputclk0;/輸入時鐘信號output7:0passed;/輸出信號output 7:0 seg;/段選output 7:0 dig;/位選 reg key_pressed_flag; / 鍵盤按下標志reg 3:0 key;reg RXBuf0,RXBuf1,RXBuf2,RXBuf3,RXBuf4;/displayreg clk0_div;reg 2:0 digyi;/yiwei/reg 7:0 dig;/weixuanreg 3:0 seg0;/duanxuanreg 7:0 seg;reg 12:0 CNT_R0;r

15、eg 18:0 CNT_R1;reg clk1;reg 21:0 CNT_R2;reg clk2;reg7:0passed;reg7:0alarmed;/*輸入與輸出的聲明部分,其中,clk0為輸入的時鐘信號,resetb為密碼舒服的輸入信號,key為輸入命令,需注意的時,key并不是總在表示密碼,也表示密碼的間隔,如當輸入4位密碼后需要一個確認“enter”信號,當密碼輸入錯誤時,需要取消“cancel”信號,這些信號之間在設計中通過有限狀態(tài)轉換機實現。*/parameterPASSWORD=16b0001000100010001;/盛放密碼的參數reg15:0password;/輸入數值盛

16、放寄存器/輸入的數字編碼always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf1 = one1;one = (RXBuf1 & ( one1 );/RXFall1=RXFall;end/消除多重按鍵always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf0 = zero1;zero = (RXBuf0 & ( zero1 );/RXFall1=RXFall;end/消除多重按鍵always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf2 = two1;two = (RXBuf2 & ( two1 );/R

17、XFall1=RXFall;end/消除多重按always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf3 = three1;three = (RXBuf3 & ( three1 );/RXFall1=RXFall;end/消除多重按鍵always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf4 = four1;four = (RXBuf4 & ( four1 );/RXFall1=RXFall;end/消除多重按鍵reg2:0main_state;/主狀態(tài)reg2:0next_state;/下一個狀態(tài)/主有限狀態(tài)轉換機的三個狀態(tài):wai

18、ts、pass、alarmparameterwaits=3b001,pass=3b010,alarm=3b100;reg2:0sub_state;reg2:0next_sub_state; /主有限狀態(tài)轉換機的三個狀態(tài):first、second、third、fourth、finish。parameterfirst=3b000,second=3b001,third=3b010,fourth=3b011,finish=3b100;/通過計時寄存器reg7:0pass_count;/警報計時寄存器reg10:0alarm_count;/嘗試次數寄存器reg1:0try_count;/輸入狀態(tài)寄存器:

19、error和correctregerror;regcorrect;/以上為中間狀態(tài)的一些寄存器和一些所用到的參數/主機狀態(tài)機部分always (posedge clk0)begin CNT_R2 = CNT_R2 + 1b1; if(CNT_R2 4000000) begin clk1 = 1; end else begin clk1 = 0; endendalways(main_state or correct or error)begincase(main_state)waits:if(correct=1) /由waits轉換到pass的條件next_state=pass;else if(

20、error=1&try_count=1)next_state=alarm; /由waits轉換到alarm的條件elsenext_state=waits;pass:if(pass_count7=1)/由pass轉換到waits的條件next_state=waits;elsenext_state=pass;alarm:if(alarm_count10=1)/ 由alarm轉換到waits的條件next_state=waits;elsenext_state=alarm;default:/默認狀態(tài):waitsnext_state=waits;endcaseend/狀態(tài)轉換always(posedge

21、 clk1 or negedge resetb)beginif(!resetb)main_state=waits;elsemain_state=next_state;end/輸出控制部分always(posedge clk1 or negedge resetb)beginif(!resetb)/復位時,開鎖輸出與警報輸出都為零beginpassed=8b00000000; alarmed=8b00000000; endelse if(main_state=pass)/當主機狀態(tài)為pass時,開鎖beginpassed=8b00000001; alarmed=8b00000000;endelse

22、 if(main_state=alarm)/當主機狀態(tài)為alarm時,警報beginpassed=8b00000000; alarmed=8b00000001;endelse/其它狀態(tài)復位beginpassed=8b00000000; alarmed=8b00000000;endend/alarm一段時間后,自動進入waits狀態(tài)/alarm定時器always(posedge clk1 or negedge resetb)beginif(!resetb)alarm_count=0;else if(main_state=alarm)/alarm狀態(tài)計時器alarm定時器加1alarm_count

23、=alarm_count+1;elsealarm_count=0;end/鎖pass以后計數開始,當規(guī)定的時間到達后自動上鎖,并進入waits狀態(tài)/pass定時器always(posedge clk1 or negedge resetb)beginif(!resetb)pass_count=0;else if(main_state=pass) /pass狀態(tài)計時器pass定時器加1pass_count=pass_count+1;elsepass_count=0;end/從狀態(tài)機,用于輸入4位密碼always(posedge clk1 or negedge resetb)beginif(!res

24、etb)sub_state=first;elsesub_state=next_sub_state;endalways(!zero|!one|!two|!three|!four|!yes or sub_state)/always(key or sub_state)beginif(key_pressed_flag|!yes)if(!yes)/4個密碼輸完時,進行確認next_sub_state=first;/default為輸入了某位密碼,輸入完自動將狀態(tài)轉入下一位elseif(!zero|!one|!two|!three|!four)case(sub_state)first:next_sub_s

25、tate=second;second:next_sub_state=third;third:next_sub_state=fourth;fourth:next_sub_state=finish;/當輸入完4位密碼以后狀態(tài)保持不變,等待輸入enter命/令finish:next_sub_state=finish;default: next_sub_state=sub_state;endcaseelsenext_sub_state=sub_state;end/比較密碼,產生正確或者錯誤信息always(posedge clk1 or negedge resetb)beginif(!resetb)b

26、egincorrect=0;error=0;endelse if(!key_pressed_flag&!yes)if(password=PASSWORD)/密碼正確時begincorrect=1;error=0;endelse/密碼錯誤時beginerror=1;correct=0;endelsebegincorrect=0;error=0;endend/記錄密碼always(posedge clk1 or negedge resetb)beginif(!resetb)password=0;else if(!zero|!one|!two|!three|!four)case(sub_state)

27、first:password15:12=key;second:password11:8=key;third:password7:4=key;fourth:password3:0=key;default:password=password;endcaseelsepassword=password;end/記錄錯誤次數always(posedge clk1 or negedge resetb)beginif(!resetb)try_count=0;else if(error=1)try_count=try_count+1;else if(main_state=pass|main_state=ala

28、rm)try_count=0;end always(posedge clk1 or negedge resetb) begin if(!resetb) begin key_pressed_flag=0; key=4b0000; end else if(!zero&change) begin key_pressed_flag=1;key=4b0000; end else if(!one&change) begin key_pressed_flag=1;key=4b0001; end else if(!two&change) begin key_pressed_flag=1;key=4b0010;

29、 end else if(!three&change) begin key_pressed_flag=1;key=4b0011; end else if(!four&change) begin key_pressed_flag=1;key=4b0100; end else if(!zero&!change) /按下change切換輸入數的范圍 begin key_pressed_flag=1;key=4b0101; end else if(!one&!change) begin key_pressed_flag=1;key=4b0110; end else if(!two&!change) begin key_pressed_flag=1;key=4b0111; end else if(!three&!change) begin key_pressed_flag=1;key=4b1000; end else if

溫馨提示

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

評論

0/150

提交評論