版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上基于FPGA的電子密碼鎖的設(shè)計報告摘要:基于FPGA設(shè)計的電子密碼鎖是一個小型的數(shù)字系統(tǒng),與普通機械鎖相比,具有許多獨特的優(yōu)點:保密性好,防盜性強,可以不用鑰匙,記住密碼即可開鎖等。目前使用的電子密碼鎖大部分是基于單片機技術(shù),以單片機為主要器件。在實際應(yīng)用中,程序容易跑飛,系統(tǒng)的可靠性較差。本文介紹的一種基于現(xiàn)場可編輯門陣列FPGA器件的電子密碼鎖的設(shè)計方法,采用VHDL語言對系統(tǒng)進行描述,并在EP3C10E144C8上實現(xiàn)。 通過仿真調(diào)試,利用可編程邏輯器件FPGA的電子密碼鎖的設(shè)計基本達到了預期目的。當然,該系統(tǒng)在一些細節(jié)的設(shè)計上還需要不斷地完善和改進,特別是對系
2、統(tǒng)的擴展有很好的使用系統(tǒng)和設(shè)計的價值。關(guān)鍵詞:現(xiàn)場可編程門陣列;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
3、compare to ordinary 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 lo
4、ck. The VHDL 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
5、, in particular the expansion of the system have a good design and practical value.Keyword: FPGA; VHDL language; electronic password lock一、設(shè)計內(nèi)容與要求1 設(shè)計一個密碼鎖,密碼為一個4位的十進制數(shù),密碼固化在鎖內(nèi) 2 用戶輸入密碼正確,則開鎖(試驗箱D7 LED燈亮);若不正確,則報警(試驗箱D0 LED燈亮) 3 若用戶輸入密碼不正確,可以按復位鍵重新輸入密碼。 二、設(shè)計思想2.1 系統(tǒng)原理框圖本系統(tǒng)由主控芯片(FPGA),鍵盤,顯示電路,報警電路和開/
6、關(guān)門電路組成,而主控芯片又可分為按鍵處理部分,控制部分和譯碼顯示部分。系統(tǒng)原理框圖如圖2.1所示:鍵盤按鍵處理主控部分譯碼顯示顯示開/關(guān)門電路報警電路FPGA圖2.1 系統(tǒng)框圖2.2 總體實現(xiàn)原理本系統(tǒng)有8個按鍵,K0,K1,K2,K3,K4,K5代表數(shù)字0-9共10個數(shù)字和1個確認鍵,1個復位鍵。密碼長度為四位,并且固化在鎖內(nèi),輸入正確密碼后,按確認鍵即可開門,本系統(tǒng)設(shè)置為LED D7燈亮。在輸入密碼的過程中,當用戶鍵入錯誤密碼時,報警燈LED D0燈亮。按下復位鍵,可使報警停止,同時清除所有密碼顯示。三、芯片主控設(shè)計3.1 FPGA有限狀態(tài)機本設(shè)計是通過FPGA有限狀態(tài)機來實現(xiàn),設(shè)計有限狀
7、態(tài)機最開始的工作時要確定電路,包括哪些狀態(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)譯碼和產(chǎn)生輸出信號。狀態(tài)機的下一個狀態(tài)及輸出,不僅與輸入信號有關(guān),而且還有寄存器當前所處的狀態(tài)有關(guān)。根據(jù)輸出信號產(chǎn)生方法的不同,狀態(tài)機可以分成兩類:Mealy型和Moore型。Moore型狀態(tài)機的輸出只是當前狀態(tài)的函數(shù),而Moore型狀態(tài)機的輸出只是當前狀態(tài)的函數(shù),而Mealy型狀態(tài)機的輸出則是當前狀態(tài)和當前輸入狀態(tài)的函數(shù)。其原理如下兩圖:圖3.1Mealy型狀態(tài)機輸出原理圖3.2 Moore型狀態(tài)機輸出原理3.2設(shè)計流程本次密碼鎖的設(shè)計,有限狀態(tài)機應(yīng)該包括以下狀態(tài):密碼為輸入前的等待狀態(tài)、輸入密碼時的等待狀態(tài)、輸入密碼正確時的通過狀態(tài)、輸入密
9、碼錯誤時的警報狀態(tài)。圖3.3 主有效狀態(tài)機的狀態(tài)轉(zhuǎn)換圖其中當密碼輸入時又可包括以下狀態(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)轉(zhuǎn)換3.3狀態(tài)編碼狀態(tài)編碼主要有二進制編碼、格雷編碼和一位獨熱編碼等方式。格雷編碼時,相鄰狀態(tài)每次只有一個比特位產(chǎn)生變化,這樣減少了瞬變的次數(shù),也減少了產(chǎn)生毛刺和一些狀態(tài)的可能。采用一位獨熱編碼,雖然多用了觸發(fā)器,當可以有效
10、節(jié)省和簡化組合電路。對于寄存器數(shù)量多而邏輯相對缺乏的FPGA器件來說,采用一位獨熱編碼可以有效提高電路的速度和可靠性,也有利于提高器件資源的利用率。將產(chǎn)生狀態(tài)的組合邏輯電路和用于保存狀態(tài)的寄存器分別寫在不同的always塊中。其中主要包括:輸出控制部分、警報計時部分、鎖打開后的計時部分、比較密碼部分、記錄密碼部分和記錄錯誤次數(shù)的部分3.4密碼的輸入本次密碼鎖的密碼輸入采用FPGA芯片上的8位單個按鍵,考慮到按鍵數(shù)目不夠,采用了一位按鍵作為功能轉(zhuǎn)換按鍵;即前5位按鍵輸入04,同時按下功能轉(zhuǎn)換按鍵時,按鍵04即轉(zhuǎn)換為按鍵59,這就彌補了按鍵數(shù)目的不足。最后兩位按鍵設(shè)定為確認輸入按鍵和復位按鍵。密碼
11、輸入完成后可以按確認鍵檢驗密碼的正誤,報警、輸入錯誤或者其他情況可以按復位按鍵重新輸入。另外由于按鍵的時候同時會引起狀態(tài)機的轉(zhuǎn)換,所以如果按鍵的時候?qū)Π存I判斷次數(shù)過多會產(chǎn)生狀態(tài)的過快轉(zhuǎn)換,記錄的密碼和數(shù)碼管的顯示就同時會出現(xiàn)錯誤,因此在按鍵部分加入了消除多重按鍵的程序,只檢測一次按鍵的下降沿,解決了這個問題。3.5 密碼記錄與比較程序設(shè)定了一個寄存器用來記錄輸入的密碼。當次有效狀態(tài)機(即密碼輸入的狀態(tài)機)發(fā)生轉(zhuǎn)換并且有密碼輸入時,程序會記錄下輸入的密碼在寄存器的其中4位里面,最后次有效狀態(tài)轉(zhuǎn)換到確認密碼的狀態(tài)時,會將記錄下的密碼與固化在鎖內(nèi)的密碼進行對比,正確即將主狀態(tài)機轉(zhuǎn)換到通過階段,錯誤則
12、將狀態(tài)機轉(zhuǎn)換到報警階段。其中正確錯誤的狀態(tài)轉(zhuǎn)換是通過控制相應(yīng)的標志位實現(xiàn)的。3.6密碼的顯示密碼顯示采用數(shù)碼管動態(tài)掃描顯示,初始時顯示密碼為4位0,當輸入密碼后數(shù)碼管的第一位、第二位、第三位、第四位會依次顯示輸入的密碼,錯誤后復位可以重新輸入。密碼顯示采用的是記錄密碼的寄存器的數(shù)據(jù),顯示掃描的掃描時間設(shè)置為1ms左右,這樣顯示不會出現(xiàn)閃爍或者殘影。四、程序仿真下前面的輸入cmd的編碼:/輸入的數(shù)字編碼 09,enter,cancelone=4'b0001, two=4b0010,three=4'b0011,four=4'b0100,five=4'b0101,si
13、x=4'b0110,seven=4'b0111,eight=4'b1000,nine=4'b1001,zero=4'b1000,enter=4'b1010,cancel=4'b1011; 可以看到,在復位以后,輸入第1,2,3,4個密碼(依次為1111)后,passed變成高電平當過了一定的時間后,passed變成低電平,重新計入鍵盤讀入值,進行下一輪的密碼辨別。五、程序清單module passwd_lock(clk0,passed,one1,two1,three1,four1,zero1,change,yes, resetb, seg
14、, dig);input one1,two1,three1,four1,zero1,change;reg zero,one,two,three,four;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;/y
15、iwei/reg 7:0 dig;/weixuanreg 3:0 seg0;/duanxuanreg 7:0 seg;reg 12:0 CNT_R0;reg 18:0 CNT_R1;reg clk1;reg 21:0 CNT_R2;reg clk2;reg7:0passed;reg7:0alarmed;/*輸入與輸出的聲明部分,其中,clk0為輸入的時鐘信號,resetb為密碼舒服的輸入信號,key為輸入命令,需注意的時,key并不是總在表示密碼,也表示密碼的間隔,如當輸入4位密碼后需要一個確認“enter”信號,當密碼輸入錯誤時,需要取消“cancel”信號,這些信號之間在設(shè)計中通過有限狀態(tài)
16、轉(zhuǎn)換機實現(xiàn)。*/parameterPASSWORD=16'b10001;/盛放密碼的參數(shù)reg15:0password;/輸入數(shù)值盛放寄存器/輸入的數(shù)字編碼always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf1 <= one1;one <= (RXBuf1 & ( one1 );/RXFall1<=RXFall;end/消除多重按鍵always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf0 <= zero1;zero <= (RXBuf0 & ( zero1 );/RXFall
17、1<=RXFall;end/消除多重按鍵always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf2 <= two1;two <= (RXBuf2 & ( two1 );/RXFall1<=RXFall;end/消除多重按always ( posedge clk1 ) begin/檢測線路的下降沿RXBuf3 <= three1;three <= (RXBuf3 & ( three1 );/RXFall1<=RXFall;end/消除多重按鍵always ( posedge clk1 ) begin/檢測線路
18、的下降沿RXBuf4 <= four1;four <= (RXBuf4 & ( four1 );/RXFall1<=RXFall;end/消除多重按鍵reg2:0main_state;/主狀態(tài)reg2:0next_state;/下一個狀態(tài)/主有限狀態(tài)轉(zhuǎn)換機的三個狀態(tài):waits、pass、alarmparameterwaits=3'b001,pass=3'b010,alarm=3'b100;reg2:0sub_state;reg2:0next_sub_state; /主有限狀態(tài)轉(zhuǎn)換機的三個狀態(tài):first、second、third、fourth
19、、finish。parameterfirst=3'b000,second=3'b001,third=3'b010,fourth=3'b011,finish=3'b100;/通過計時寄存器reg7:0pass_count;/警報計時寄存器reg10:0alarm_count;/嘗試次數(shù)寄存器reg1:0try_count;/輸入狀態(tài)寄存器:error和correctregerror;regcorrect;/以上為中間狀態(tài)的一些寄存器和一些所用到的參數(shù)/主機狀態(tài)機部分always (posedge clk0)begin CNT_R2 <= CNT_R2
20、 + 1'b1; if(CNT_R2 < ) begin clk1 <= 1; end else begin clk1 <= 0; endendalways(main_state or correct or error)begincase(main_state)waits:if(correct=1) /由waits轉(zhuǎn)換到pass的條件next_state=pass;else if(error=1&&try_count=1)next_state=alarm; /由waits轉(zhuǎn)換到alarm的條件elsenext_state=waits;pass:if(p
21、ass_count7=1)/由pass轉(zhuǎn)換到waits的條件next_state=waits;elsenext_state=pass;alarm:if(alarm_count10=1)/ 由alarm轉(zhuǎn)換到waits的條件next_state=waits;elsenext_state=alarm;default:/默認狀態(tài):waitsnext_state=waits;endcaseend/狀態(tài)轉(zhuǎn)換always(posedge clk1 or negedge resetb)beginif(!resetb)main_state<=waits;elsemain_state<=next_s
22、tate;end/輸出控制部分always(posedge clk1 or negedge resetb)beginif(!resetb)/復位時,開鎖輸出與警報輸出都為零beginpassed<=8'b; alarmed<=8'b; endelse if(main_state=pass)/當主機狀態(tài)為pass時,開鎖beginpassed<=8'b; alarmed<=8'b;endelse if(main_state=alarm)/當主機狀態(tài)為alarm時,警報beginpassed<=8'b; alarmed<=
23、8'b;endelse/其它狀態(tài)復位beginpassed<=8'b; alarmed<=8'b;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<=alarm_count+1;elsealarm_count<=0;end/鎖pass以后計數(shù)開始,當規(guī)定的時間到達后
24、自動上鎖,并進入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(!resetb)sub_state<=first;elsesub_state<=next
25、_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)轉(zhuǎn)入下一位elseif(!zero|!one|!two|!three|!four)case(sub_state)first:next_sub_state=second;second:next_sub_state=thir
26、d;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/比較密碼,產(chǎn)生正確或者錯誤信息always(posedge clk1 or negedge resetb)beginif(!resetb)begincorrect<=0;error<=0;endelse
27、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
28、_state)first:password15:12<=key;second:password11:8<=key;third:password7:4<=key;fourth:password3:0<=key;default:password<=password;endcaseelsepassword<=password;end/記錄錯誤次數(shù)always(posedge clk1 or negedge resetb)beginif(!resetb)try_count<=0;else if(error=1)try_count<=try_count+1
29、;else if(main_state=pass|main_state=alarm)try_count<=0;end always(posedge clk1 or negedge resetb) begin if(!resetb) begin key_pressed_flag<=0; key=4'b0000; end else if(!zero&&change) begin key_pressed_flag<=1;key<=4'b0000; end else if(!one&&change) begin key_press
30、ed_flag<=1;key<=4'b0001; end else if(!two&&change) begin key_pressed_flag<=1;key<=4'b0010; end else if(!three&&change) begin key_pressed_flag<=1;key<=4'b0011; end else if(!four&&change) begin key_pressed_flag<=1;key<=4'b0100; end else i
31、f(!zero&&!change) /按下change切換輸入數(shù)的范圍 begin key_pressed_flag<=1;key<=4'b0101; end else if(!one&&!change) begin key_pressed_flag<=1;key<=4'b0110; end else if(!two&&!change) begin key_pressed_flag<=1;key<=4'b0111; end else if(!three&&!change) begin key_pressed_flag<=1;key<=4'b1000; end else if(!four&&!change) begin key_pressed_flag<=1;key<=4'
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年設(shè)備購買合同具體條款
- 2025版電子商務(wù)產(chǎn)業(yè)園數(shù)字版權(quán)入駐許可合同3篇
- 2024年貨物運輸服務(wù)合同
- 2024旅游景點與文化體驗相結(jié)合的承包經(jīng)營合同2篇
- 2024年版消防系統(tǒng)設(shè)計服務(wù)協(xié)議版
- 2024年縫紉工全職勞動合同
- 網(wǎng)絡(luò)綜藝導演合作意向書
- 體育賽事免責協(xié)議
- 施工現(xiàn)場電力安全協(xié)議
- 2025阿拉爾經(jīng)濟技術(shù)開發(fā)區(qū)電子商務(wù)平臺建設(shè)與運營合同2篇
- 2024-2030年中國蔬菜種植市場發(fā)展方向及前景需求趨勢報告
- 象棋培訓機構(gòu)合伙協(xié)議
- 2025屆貴州遵義市桐梓縣數(shù)學七年級第一學期期末經(jīng)典試題含解析
- 藍色糧倉-水產(chǎn)學專業(yè)導論智慧樹知到期末考試答案章節(jié)答案2024年中國海洋大學、山東大學、中國科學院海洋研究所、上海海洋大學、華中農(nóng)業(yè)大學、大連海洋大學、集美大學
- (高清版)JTGT D31-06-2017 季節(jié)性凍土地區(qū)公路設(shè)計與施工技術(shù)規(guī)范
- 幼兒園健康體檢活動方案及流程
- 冰箱結(jié)構(gòu)原理與維修
- 2024年交管12123學法減分考試題庫及答案大全
- 湖南省長沙市2022-2023學年二年級上學期期末數(shù)學試題
- 湖南省印刷業(yè)揮發(fā)性有機物排放標準2017
- 齊魯針灸智慧樹知到期末考試答案2024年
評論
0/150
提交評論