基于-FPGAverilog電子密碼鎖設計_第1頁
基于-FPGAverilog電子密碼鎖設計_第2頁
基于-FPGAverilog電子密碼鎖設計_第3頁
基于-FPGAverilog電子密碼鎖設計_第4頁
基于-FPGAverilog電子密碼鎖設計_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、-"EDA技術"設計報告題目:學院:專業:班級:*:*:一.引言1.1 電子密碼鎖的現狀隨著我國對外開放的不斷深入,高檔建筑開展很快,高檔密碼鎖具市場的前景樂觀。我國密碼鎖具行業對密碼鎖具高新技術的投入正逐年增大,高檔密碼鎖的市場需求也逐年增加。在安防工程中,鎖具產品是關系到整個系統平安性的重要設備,所以鎖具產品的優劣也關系了整個安防工程的質量和驗收。目前,市場上比擬先進的智能電子密碼鎖分別有:IC卡電子密碼鎖、射頻卡式電子密碼鎖、紅外遙控電子密碼鎖、指紋識別電子密碼鎖和瞳孔識別電子密碼鎖等。IC卡電子密碼鎖本錢低,體積小,卡片本身無須電源等優點占領了一定的市場份額,但是由

2、于有機械接觸,會產生接觸磨損,而且使用不太方便,在一定程度上限制了它的應用;射頻卡式電子密碼鎖是非接觸式電子密碼鎖,本錢也不太高,體積跟IC卡密碼鎖相當,卡片使用感應電源,重量很輕,技術成熟,受到了廣泛的歡送,但是與IC卡電子密碼鎖相比,本錢偏高;指紋識別電子密碼鎖和瞳孔識別電子密碼鎖可靠性很高,平安性是目前應用系統中最高的,但是本錢高昂,還沒進入群眾化使用階段。在國外,美國、日本、德國的電子密碼鎖性較好,并結合感應卡技術,生物識別技術,使電子密碼鎖系統得到了飛躍式的開展。這幾個國家的密碼鎖識別的密碼更復雜,并且綜合性比擬好,已經進入了成熟期,出現了感應卡式密碼鎖,指紋式密碼鎖,虹膜密碼鎖,面

3、部識別密碼鎖,序列混亂的鍵盤密碼鎖等各種技術的系統,它們在平安性,方便性,易管理性等方面都各有特長,新型的電子密碼鎖系統的應用也越來越廣。基于FPGA的電子密碼鎖是新型現代化平安管理系統,它集微機自動識別技術和現代平安管理措施為一體,它涉及電子,機械,計算機技術,通訊技術,生物技術等諸多新技術。它是解決重要部門出入口實現平安防管理的有效措施,適用各種場合,如銀行、賓館、機房、軍械庫、機要室、辦公間、智能化小區、工廠、家庭等。在數字技術網絡技術飛速開展的今天,電子密碼鎖技術得到了迅猛的開展。它早已超越了單純的門道及鑰匙管理,逐漸開展成為一套完整的出入管理系統。它在工作環境平安、人事考勤管理等行政

4、管理工作中發揮著巨大的作用。在該系統的根底上增加相應的輔助設備可以進展電梯控制、車輛進出控制,物業消防監控、餐飲收費、私家車庫管理等,真正實現區域一卡智能管理。 目前使用的電子密碼鎖大局部是基于單片機技術, 以單片機為主要器件, 其編碼器與解碼器的生成為軟件方式。在實際應用中, 由于程序容易跑飛, 系統的可靠性能較差。基于FPGA的電子密碼鎖已經是現代生活中經常用到的工具之一,用于各類保險柜、房門、防盜門等等。用電子密碼鎖代替傳統的機械式密碼鎖,克制了機械式密碼鎖密碼量少、平安性能差的缺點。由于采用的是可編程邏輯器件FPGA,使得系統有相當大的靈活性,隨時可以進展硬件升級、擴展,而且系統設計完

5、善以后還可以將主控的FPGA固化成一片ASIC,則這塊ASIC就可以作為專用的數字密碼鎖芯片。而且由于硬件可升級,還可隨時增加密碼位數或增加新的功能,使得密碼鎖有更高的平安性、可靠性和方便性。1.2 主要完成的工作課題主要解決系統硬件和軟件兩方面的問題。硬件方面要解決FPGA可編程器件與其外圍電路的接口設計的問題;軟件方面主要問題是利用Verilog HDL語言完成基于FPGA的電子密碼鎖的編程問題。除此之外,程序還要完成根本的密碼開鎖功能,并通過揚聲器長時間鳴叫報警。本設計是由FPGA可編程邏輯器件編程實現的控制電路,具體有按鍵指示、輸入錯誤提示、密碼有效指示、控制開鎖、控制報警等功能。它具

6、有平安可靠、連接方便、簡單易用、構造緊湊、系統可擴展性好等特點。1、 系統硬件設計2.1 設計方案功能需求分析本系統主要集中在以FPGA以核心外圍擴展設計,整個電路主要電子鎖具的組成框圖是以可編程邏輯器件FPGA為核心,配以相應硬件電路,設計一個密碼鎖,密碼為一個4位的十進制數,密碼固化在鎖,用戶輸入密碼正確,則開鎖綠燈亮);假設不正確,則報警紅燈亮假設用戶輸入密碼不正確,可以按復位鍵重新輸入密碼。 系統實現方案的論證比擬方案一 :采樣凌陽科技推出的以凌陽自主研發的SPCE061A芯片為主控芯片,用一條下載線連接到計算機就可以實現在線仿真、在線調試、在線下載,低廉的價格保證了系統可靠開發;此外

7、,61板具有SOC概念、DSP功能和語音特色,為電子密碼鎖的語音報警提供了方便,但是基于單片機設計的密碼鎖外圍電路比擬復雜,系統可靠性差,密碼的數量少,尤其是系統的程序不夠穩定,功率較大,需要專門的電源供電,所以不采用這個方案。 方案二:設計一種基于FPGA的電子密碼鎖的設計,用FPGA設計的系統已經是現代生活中經常用到的工具之一,通過鍵盤輸入密碼,用FPGA作為主控芯片,用數碼管顯示輸入的數字,如果出現錯誤便通過報警電路發出報警,主控芯片又可分為按鍵處理局部、控制局部和譯碼顯示局部用電子密碼鎖代替傳統的機械式密碼鎖。由于采用的是可編程邏輯器件FPGA,使得系統有相當大的靈活性,隨時可以進展硬

8、件升級、擴展。而且系統設計完善以后還可以將主控的FPGA固化成一片ASIC,則這塊ASIC就可以作為專用的數字密碼鎖芯片。方案的論證比擬在實際應用中, 由于程序容易跑飛, 系統的可靠性能較差,而基于FPGA設計的電子密碼鎖克制了基于單片機設計密碼鎖的缺點。基于上述比擬以上兩種方案,根據系統設計要求,采用方案二。方案的總體設計原理框圖本系統由主控芯片FPGA,鍵盤,顯示電路,報警電路和開/關門電路組成,而主控芯片又可分為按鍵處理局部,控制局部和譯碼顯示局部。系統原理框系統原理框圖如圖所示:圖 總體框架總體設計原理本系統有8個按鍵,K0,K1,K2,K3,K4,K5代表數字0-9共10個數字和1個

9、確認鍵,1個復位鍵。密碼長度為四位,并且固化在鎖,輸入正確密碼后,按確認鍵即可開門,本系統設置為綠燈亮。在輸入密碼的過程中,當用戶鍵入錯誤密碼時,報警燈紅燈亮。按下復位鍵,可使報警停頓,同時去除所有密碼顯示。每輸入一位數字,密碼在數碼管上的顯示左移一位。即上電后,按確認鍵即可開門。門開后可通過鎖門按鈕關門,門關上后要再次輸入密碼才能開門。在輸入密碼的過程中,當用戶鍵入錯誤密碼時,系統就會報警,由揚聲器發出報警聲,當連續三次出現密碼錯誤時,則系統會長時間報警不止,這時必須按警報復位鍵方可停頓。2.2 主控模塊 主控芯片EP4CE6E22C8的介紹主控芯片采用ACE*1K 系列的EP4CE6E22

10、C8。Cyclone IV系列是當今Altera CPLD 中應 用前景最好的器件系列之一,該系列的FPGA 由邏輯陣列塊LABLogic array block、 嵌入式陣列塊EABembedded array block、快速互聯以及IO 單元構成,每個邏輯陣列塊 包含8 個邏輯單元LElogic element和一個局部互聯。每個邏輯單元則由一個4 輸入查找 表LUT、一個可編程觸發器、快速進位鏈、級連鏈組成,多個LAB 和多個EAB 則可通過快速通道互相連接3。EAB 是Cyclone IV系列器件在構造設計上的一個重要部件,他是輸入 端口和輸出端口都帶有觸發器的一種靈活的RAM 塊,

11、其主要功能是實現一些規模不太大的 FIFO、ROM、RAM 和雙端口RAM 等。2.3 鍵盤模塊按鍵方式分為8個獨立按鍵,K0,K1,K2,K3,K4,K5代表數字0-9共10個數字和1個確認鍵,1個復位鍵。考慮到按鍵數目不夠,采用了一位按鍵作為功能轉換按鍵;即前5位按鍵輸入04,同時按下功能轉換按鍵時,按鍵04即轉換為按鍵59,這就彌補了按鍵數目的缺乏。最后兩位按鍵設定為確認輸入按鍵和復位按鍵。密碼輸入完成后可以按確認鍵檢驗密碼的正誤,報警、輸入錯誤或者其他情況可以按復位按鍵重新輸入。按鍵上拉,當IO口被拉高電平,當IO口檢測到高電平時,表示按鍵按下。局部按鍵控制電路如圖2.3所示:圖2.3

12、 2.4 顯示模塊LED顯示塊是由發光二極管顯示字段的顯示器件。在單片機應用系統常使用的是7段LED,本設計將采用共陽極。共陽極LED顯示塊的發光二極管與陽極并接。數碼管顯示塊中共有8個發光二極管,其中7個發光二極管構成七筆字形"8,1個發光二極管構成小數點。7段顯示塊與FPGA接口非常容易。只要將一個8位并行輸出與顯示塊的發光二極管引腳相連即可。8位并行輸出口輸出不同的字節數據即可獲得不同的數字或字符,如表5.1所示。通常將控制發光二極管的8位字節數據稱為段選碼。共陽極與共陰極的段選碼互為補數。顯示字符共陰極段選碼共陽極段選碼顯示字符共陰極段選碼共陽極段選碼 0 3FH C0H C

13、 39H C6H 1 06H F9H D 5EH A1H 2 5BH A4H E 79H 86H 3 4FH B0H B 7CH 83H 4 66H 99H F 71H 8EH 5 6DH 92H P 73H 8CH 6 7DH 82H U 3EH C1H 7 07H F8H L 31H CEH 8 7FH 80H Y 6EH 91H 9 6FH 90H A 77H 88H表2.4 LED顯示塊功能表三、芯片主控設計3.1 FPGA有限狀態機本設計是通過FPGA有限狀態機來實現,設計有限狀態機最開場的工作時要確定電路,包括哪些狀態,比方*個電路包括四個狀態,S0,S1,S2,S3。然后對所有狀

14、態給出一個狀態編碼,比方為狀態S0賦予編碼00,為狀態S1賦予編碼01,為狀態S2賦予編碼10,為狀態S3賦予編碼11。狀態編碼是狀態的標識,保存在存放器當中,對于此編碼形式,只需一個2位的存放器就可以了。FSM Encoding Style 主要有: Binary Encoding One Hot Encoding Gray Encoding 二進制與一位熱碼的特性比擬: 表3.1 二進制與一位熱碼的特性比擬 狀態機可以認為是組合邏輯和存放器邏輯的特殊租戶,它一般包括兩個局部:組合邏輯局部和存放器邏輯局部。存放器用于存儲狀態,組合電路用于狀態譯碼和產生輸出信號。狀態機的下一個狀態及輸出,不僅

15、與輸入信號有關,而且還有存放器當前所處的狀態有關。 根據輸出信號產生方法的不同,狀態機可以分成兩類:Mealy型和Moore型。Moore型狀態機的輸出只是當前狀態的函數,而Moore型狀態機的輸出只是當前狀態的函數,而Mealy型狀態機的輸出則是當前狀態和當前輸入狀態的函數。其原理如下兩圖:3.2 設計流程本次密碼鎖的設計,有限狀態機應該包括以下狀態:密碼為輸入前的等待狀態、輸入密碼時的等待狀態、輸入密碼正確時的通過狀態、輸入密碼錯誤時的警報狀態。圖3.3 主有效狀態機的狀態轉換圖其中當密碼輸入時又可包括以下狀態,正常輸入狀態、異常輸入狀態包括命令狀態、輸入確認狀態。下面的圖圖是在程序編譯后

16、,tools->Netlist_Vewers->RTL Vewer得到的表示了密碼輸入的時候的次狀態機,表示了4個密碼輸入的順序狀態,以及輸入完成后的等待確認狀態。圖3.4次有效狀態機的狀態轉換3.3軟件設計總RTC級圖3.4狀態編碼狀態編碼主要有二進制編碼、格雷編碼和一位獨熱編碼等方式。格雷編碼時,相鄰狀態每次只有一個比特位產生變化,這樣減少了瞬變的次數,也減少了產生毛刺和一些狀態的可能。采用一位獨熱編碼,雖然多用了觸發器,當可以有效節省和簡化組合電路。 對于存放器數量多而邏輯相對缺乏的FPGA器件來說,采用一位獨熱編碼可以有效提高電路的速度和可靠性,也有利于提高器件資源的利用率

17、。將產生狀態的組合邏輯電路和用于保存狀態的存放器分別寫在不同的always塊中。其中主要包括:輸出控制局部、警報計時局部、鎖翻開后的計時局部、比擬密碼局部、記錄密碼局部和記錄錯誤次數的局部3.5 密碼的輸入本次密碼鎖的密碼輸入采用FPGA芯片上的8位單個按鍵,考慮到按鍵數目不夠,采用了一位按鍵作為功能轉換按鍵;即前5位按鍵輸入04,同時按下功能轉換按鍵時,按鍵04即轉換為按鍵59,這就彌補了按鍵數目的缺乏。最后兩位按鍵設定為確認輸入按鍵和復位按鍵。密碼輸入完成后可以按確認鍵檢驗密碼的正誤,報警、輸入錯誤或者其他情況可以按復位按鍵重新輸入。另外由于按鍵的時候同時會引起狀態機的轉換,所以如果按鍵的

18、時候對按鍵判斷次數過多會產生狀態的過快轉換,記錄的密碼和數碼管的顯示就同時會出現錯誤,因此在按鍵局部參加了消除多重按鍵的程序,只檢測一次按鍵的下降沿,解決了這個問題。3.6 密碼的記錄與比擬程序設定了一個存放器用來記錄輸入的密碼。當次有效狀態機即密碼輸入的狀態機發生轉換并且有密碼輸入時,程序會記錄下輸入的密碼在存放器的其中4位里面,最后次有效狀態轉換到確認密碼的狀態時,會將記錄下的密碼與固化在鎖的密碼進展比照,正確即將主狀態機轉換到通過階段,錯誤則將狀態機轉換到報警階段。其中正確錯誤的狀態轉換是通過控制相應的標志位實現的。 3.7 密碼的顯示密碼顯示采用數碼管動態掃描顯示,初始時顯示密碼為4位

19、0,當輸入密碼后數碼管的第一位、第二位、第三位、第四位會依次顯示輸入的密碼,錯誤后復位可以重新輸入。密碼顯示采用的是記錄密碼的存放器的數據,顯示掃描的掃描時間設置為1ms左右,這樣顯示不會出現閃爍或者殘影。4、 程序仿真下前面的輸入cmd的編碼: /輸入的數字編碼 09,enter,cancel one=4'b0001, two=4b0010,three=4'b0011,four=4'b0100,five=4'b0101, si*=4'b0110,seven=4'b0111,eight=4'b1000,nine=4'b1001,

20、zero=4'b1000,enter=4'b1010,cancel=4'b1011; 可以看到,在復位以后,輸入第1,2,3,4個密碼依次為1111后,passed變成高電平 當過了一定的時間后,passed變成低電平,重新計入鍵盤讀入值,進展下一輪的密碼區分。 5、 結論本次課題設計完成的是基于FPGA的密碼鎖設計,通過一個多星期的不斷努力、克制各種困難,最終實現了任務目標。本次設計解決的主要問題是是利用verilog HDL語言完成基于FPGA的電子密碼鎖的編程問題。設計是理論知識與實踐的完美結合,對于現代大學生的實踐能力是個很好的培養。短短的一個星期的時間的設計雖

21、然短暫,但是它給我的收獲確實難忘,不僅僅在智能儀器方面有了很大的進步,而且在FPGA、Quartus軟件等方面也學到了不少在上課學不到的知識。這段時間我查閱到很多關于課程設計的書籍,對我幫助也很大。我覺得自己以前的盲目,現在明白了很多。也對我們專業動手實踐的興趣提高了很多。有了這些經歷對于我日后工作一定會有很大幫助。相信這次設計中學到的種種東西一定會存在我的腦海里,令我終身受益。在課程設計的過程中也可以看到我的缺乏,如原理知識掌握不實,曾經學過的知識如今卻不會應用,軟件的應用也不熟練,希望日后提供應我們更多的鍛煉時機來培養我們的實踐能力。參考文獻1 高移南.遙控變號電子鎖J.電子世界,1994

22、,07:152 許琦.基于FPGA 的電子密碼鎖設計J . 中國科技信息, 2007 (1) : 240-2413 韜,樓興華.FPGA數字電子系統設計與開發實例導航M.人民郵電,2005.4 王金明.數字系統設計與Verilog HDL附 錄程序清單:module passwd_lock( clk0, /時鐘 pin_23 passed, /開鎖燈與警報燈 zero1, /按鍵0 pin_84 one1, /按鍵1 pin_85 two1, /按鍵2 pin_86 three1, /按鍵3 pin_87 four1, /按鍵4 pin_88 change, /功能選擇鍵pin_89 yes,

23、 /確認按鍵pin_90 resetb, /重輸按鍵pin_91 seg, /數碼管段選【7:0】 dig /數碼管位選【3:0】); input one1,two1,three1,four1,zero1,change; reg zero,one,two,three,four; input yes; input resetb; input clk0; /輸入時鐘信號 output 7:0 passed; /輸出信號 /為何要是8位.實際只用了2位/output 1:0 passed; /輸出信號 output 7:0 seg;/段選 output 3:0 dig;/位選 reg 3:0 key

24、; /按鍵存儲器reg R*Buf0,R*Buf1,R*Buf2,R*Buf3,R*Buf4; /緩存器,可用于按鍵消抖/display reg clk0_div; reg 2:0 digyi;/哪一位亮,用于數碼管數字移位reg 3:0 dig;/位選reg 3:0 seg0;/存儲按鍵按下的數字reg 7:0 seg; /段選reg 12:0 T_R0; reg 18:0 T_R1; reg clk1; reg 21:0 T_R2;reg clk2; reg 7:0 passed; /pass 8b'1000 0000 alarm 8b'0000 0001 waits 8b

25、'0000 0000/*輸入與輸出的聲明局部,其中,clk0為輸入的時鐘信號,resetb為密碼復位的輸入信號,key為輸入命令, 需注意的時,key并不是總在表示密碼,也表示密碼的間隔,如當輸入4位密碼后需要一個確認"enter信號, 當密碼輸入錯誤時,需要取消"cancel信號,這些信號之間在設計過有限狀態轉換機實現。*/ parameter PASSWORD=16'b10100;/盛放密碼的參數 reg 15:0 password;/輸入數值盛放存放器 /輸入的數字編碼 always ( posedge clk1 ) begin /檢測線路的下降沿 R

26、*Buf1 <= one1; one <= (R*Buf1 & ( one1 ); / R*Fall1<=R*Fall; end /消除多重按鍵 always ( posedge clk1 ) begin /檢測線路的下降沿 R*Buf0 <= zero1; zero <= (R*Buf0 & ( zero1 ); / R*Fall1<=R*Fall; end /消除多重按鍵 always ( posedge clk1 ) begin /檢測線路的下降沿 R*Buf2 <= two1; two <= (R*Buf2 & (

27、 two1 ); / R*Fall1<=R*Fall; end /消除多重按 always ( posedge clk1 ) begin /檢測線路的下降沿 R*Buf3 <= three1; three <= (R*Buf3 & ( three1 ); / R*Fall1<=R*Fall; end /消除多重按鍵 always ( posedge clk1 ) begin /檢測線路的下降沿 R*Buf4 <= four1; four <= (R*Buf4 & ( four1 ); / R*Fall1<=R*Fall; end /消除

28、多重按鍵 reg 2:0 main_state;/主狀態 reg 2:0 ne*t_state;/下一個狀態 /主有限狀態轉換機的三個狀態:waits、pass、alarm parameter waits=3'b001, pass=3'b010, alarm=3'b100; /3個狀態編碼reg 2:0 sub_state; /從狀態機現狀態reg 2:0 ne*t_sub_state; /從狀態機下一個狀態/從有限狀態轉換機的五個狀態:first、second、third、fourth、finishparameter first=3'b000,second=3

29、'b001,third=3'b010,fourth=3'b011,finish=3'b100; /通過計時存放器 reg 7:0 pass_count; /pass計時完后回到wait狀態/警報計時存放器 reg 10:0 alarm_count; /alarm計時完后回到wait狀態/嘗試次數存放器 reg 1:0 try_count; /輸入狀態存放器:error和correct reg error; reg correct; regkey_pressed_flag; / 鍵盤按下標志 /以上為中間狀態的一些存放器和一些所用到的參數 /主機狀態機局部 alw

30、ays (posedge clk0) begin T_R2 <= T_R2 + 1'b1; if(T_R2 < 4000000) begin clk1 <= 1; end else begin clk1 <= 0; end end always(main_state or correct or error) /3位主狀態存放器,1位輸入狀態存放器correct,errorbegin case(main_state) /判斷主狀態存放器 waits: /3b'001 if(correct=1) begin/由waits轉換到pass的條件 ne*t_sta

31、te=pass; end/3位ne*t_state存放器寫入等待狀態 else if(error=1&&try_count=1) beginne*t_state=alarm; end/由waits轉換到alarm的條件 else beginne*t_state=waits; end pass: if(pass_count7=1) begin/由pass轉換到waits的條件 計時器時間到,由通過狀態變成等待狀態 ne*t_state=waits; end else begin ne*t_state=pass; end alarm: if(alarm_count10=1) beg

32、in/ 由alarm轉換到waits的條件 警告時間到達時變成等待狀態ne*t_state=waits; end else beginne*t_state=alarm;end/否則繼續警告 default:/默認狀態:waits ne*t_state=waits; endcase end /狀態轉換 always(posedge clk1 or negedge resetb) begin if(!resetb) main_state<=waits; else main_state<=ne*t_state; end /輸出控制局部 always(posedge clk1 or neg

33、edge resetb) begin if(!resetb)/復位時,開鎖輸出與警報輸出都為零 begin passed<=8'b10000001; /passed<=2b'11; end else if(main_state=pass)/當主機狀態為pass時,開鎖 begin passed<=8'b00000001; /passed<=2'b01; end else if(main_state=alarm)/當主機狀態為alarm時,警報 begin passed<=8'b10000000; /passed<=2&

34、#39;b10; end else/其它狀態復位 begin passed<=8'b10000001; /passed<=2b'11; end end /alarm一段時間后,自動進入waits狀態 /alarm定時器 always(posedge clk1 or negedge resetb) begin if(!resetb) alarm_count<=0; else if(main_state=alarm)/alarm狀態計時器alarm定時器加1 alarm_count<=alarm_count+1; else alarm_count<=0

35、; end /鎖pass以后計數開場,當規定的時間到達后自動上鎖,并進入waits狀態 /pass定時器 always(posedge clk1 or negedge resetb) begin if(!resetb) pass_count<=0; else if(main_state=pass) /pass狀態計時器pass定時器加1 pass_count<=pass_count+1; else pass_count<=0; end /從狀態機,用于輸入4位密碼 always(posedge clk1 or negedge resetb) begin if(!resetb)

36、 sub_state<=first; else sub_state<=ne*t_sub_state; end always(!zero|!one|!two|!three|!four|!yes or sub_state) /always(key or sub_state) begin if(key_pressed_flag|!yes) if(!yes)/4個密碼輸完時,進展確認 ne*t_sub_state=first; /default為輸入了*位密碼,輸入完自動將狀態轉入下一位 else if (!zero|!one|!two|!three|!four) /zero1,one1,

37、two1,three1,four1case(sub_state) first: ne*t_sub_state=second; second: ne*t_sub_state=third; third: ne*t_sub_state=fourth; fourth: ne*t_sub_state=finish; /當輸入完4位密碼以后狀態保持不變,等待輸入enter命令 finish: ne*t_sub_state=finish; default: ne*t_sub_state=sub_state; endcase else ne*t_sub_state=sub_state; end /比擬密碼,產

38、生正確或者錯誤信息 always(posedge clk1 or negedge resetb) begin if(!resetb) begin correct<=0; error<=0; end else if(!key_pressed_flag&&!yes) if(password=PASSWORD)/密碼正確時begin correct<=1; error<=0; end else/密碼錯誤時 begin error<=1; correct<=0; end else begin correct<=0; error<=0; e

39、nd end /記錄密碼 always(posedge clk1 or negedge resetb) begin if(!resetb) begin password<=0; endelse if(!zero|!one|!two|!three|!four) begincase(sub_state) first: password15:12<=key; second: password11:8<=key; third: password7:4<=key; fourth: password3:0<=key; default: password<=passwor

40、d; endcase endelse beginpassword<=password; endend /記錄錯誤次數 always(posedge clk1 or negedge resetb) begin if(!resetb) begintry_count<=0; endelse if(error=1) begintry_count<=try_count+1; endelse if(main_state=pass|main_state=alarm) begintry_count<=0; endend /reg key_pressed_flag; / 鍵盤按下標志 a

41、lways(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_pressed_flag<=1;key<=4'b0001; end else if(!two&&ch

42、ange) 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 if(!zero&&!change) begin key_pressed_flag<=1;key<=

43、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'b1001; end else if(!yes

溫馨提示

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

評論

0/150

提交評論