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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

12、 2.4 顯示模塊LED顯示塊是由發(fā)光二極管顯示字段的顯示器件。在單片機(jī)應(yīng)用系統(tǒng)常使用的是7段LED,本設(shè)計將采用共陽極。共陽極LED顯示塊的發(fā)光二極管與陽極并接。數(shù)碼管顯示塊中共有8個發(fā)光二極管,其中7個發(fā)光二極管構(gòu)成七筆字形"8,1個發(fā)光二極管構(gòu)成小數(shù)點。7段顯示塊與FPGA接口非常容易。只要將一個8位并行輸出與顯示塊的發(fā)光二極管引腳相連即可。8位并行輸出口輸出不同的字節(jié)數(shù)據(jù)即可獲得不同的數(shù)字或字符,如表5.1所示。通常將控制發(fā)光二極管的8位字節(jié)數(shù)據(jù)稱為段選碼。共陽極與共陰極的段選碼互為補(bǔ)數(shù)。顯示字符共陰極段選碼共陽極段選碼顯示字符共陰極段選碼共陽極段選碼 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顯示塊功能表三、芯片主控設(shè)計3.1 FPGA有限狀態(tài)機(jī)本設(shè)計是通過FPGA有限狀態(tài)機(jī)來實現(xiàn),設(shè)計有限狀態(tài)機(jī)最開場的工作時要確定電路,包括哪些狀態(tài),比方*個電路包括四個狀態(tài),S0,S1,S2,S3。然后對所有狀

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

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

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

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

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

19、0,當(dāng)輸入密碼后數(shù)碼管的第一位、第二位、第三位、第四位會依次顯示輸入的密碼,錯誤后復(fù)位可以重新輸入。密碼顯示采用的是記錄密碼的存放器的數(shù)據(jù),顯示掃描的掃描時間設(shè)置為1ms左右,這樣顯示不會出現(xiàn)閃爍或者殘影。4、 程序仿真下前面的輸入cmd的編碼: /輸入的數(shù)字編碼 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; 可以看到,在復(fù)位以后,輸入第1,2,3,4個密碼依次為1111后,passed變成高電平 當(dāng)過了一定的時間后,passed變成低電平,重新計入鍵盤讀入值,進(jìn)展下一輪的密碼區(qū)分。 5、 結(jié)論本次課題設(shè)計完成的是基于FPGA的密碼鎖設(shè)計,通過一個多星期的不斷努力、克制各種困難,最終實現(xiàn)了任務(wù)目標(biāo)。本次設(shè)計解決的主要問題是是利用verilog HDL語言完成基于FPGA的電子密碼鎖的編程問題。設(shè)計是理論知識與實踐的完美結(jié)合,對于現(xiàn)代大學(xué)生的實踐能力是個很好的培養(yǎng)。短短的一個星期的時間的設(shè)計雖

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

22、,07:152 許琦.基于FPGA 的電子密碼鎖設(shè)計J . 中國科技信息, 2007 (1) : 240-2413 韜,樓興華.FPGA數(shù)字電子系統(tǒng)設(shè)計與開發(fā)實例導(dǎo)航M.人民郵電,2005.4 王金明.數(shù)字系統(tǒng)設(shè)計與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、 /確認(rèn)按鍵pin_90 resetb, /重輸按鍵pin_91 seg, /數(shù)碼管段選【7:0】 dig /數(shù)碼管位選【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;/哪一位亮,用于數(shù)碼管數(shù)字移位reg 3:0 dig;/位選reg 3:0 seg0;/存儲按鍵按下的數(shù)字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為密碼復(fù)位的輸入信號,key為輸入命令, 需注意的時,key并不是總在表示密碼,也表示密碼的間隔,如當(dāng)輸入4位密碼后需要一個確認(rèn)"enter信號, 當(dāng)密碼輸入錯誤時,需要取消"cancel信號,這些信號之間在設(shè)計過有限狀態(tài)轉(zhuǎn)換機(jī)實現(xiàn)。*/ parameter PASSWORD=16'b10100;/盛放密碼的參數(shù) reg 15:0 password;/輸入數(shù)值盛放存放器 /輸入的數(shù)字編碼 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;/主狀態(tài) reg 2:0 ne*t_state;/下一個狀態(tài) /主有限狀態(tài)轉(zhuǎn)換機(jī)的三個狀態(tài):waits、pass、alarm parameter waits=3'b001, pass=3'b010, alarm=3'b100; /3個狀態(tài)編碼reg 2:0 sub_state; /從狀態(tài)機(jī)現(xiàn)狀態(tài)reg 2:0 ne*t_sub_state; /從狀態(tài)機(jī)下一個狀態(tài)/從有限狀態(tài)轉(zhuǎn)換機(jī)的五個狀態(tài):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狀態(tài)/警報計時存放器 reg 10:0 alarm_count; /alarm計時完后回到wait狀態(tài)/嘗試次數(shù)存放器 reg 1:0 try_count; /輸入狀態(tài)存放器:error和correct reg error; reg correct; regkey_pressed_flag; / 鍵盤按下標(biāo)志 /以上為中間狀態(tài)的一些存放器和一些所用到的參數(shù) /主機(jī)狀態(tài)機(jī)局部 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位主狀態(tài)存放器,1位輸入狀態(tài)存放器correct,errorbegin case(main_state) /判斷主狀態(tài)存放器 waits: /3b'001 if(correct=1) begin/由waits轉(zhuǎn)換到pass的條件 ne*t_sta

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

32、in/ 由alarm轉(zhuǎn)換到waits的條件 警告時間到達(dá)時變成等待狀態(tài)ne*t_state=waits; end else beginne*t_state=alarm;end/否則繼續(xù)警告 default:/默認(rèn)狀態(tài):waits ne*t_state=waits; endcase end /狀態(tài)轉(zhuǎn)換 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)/復(fù)位時,開鎖輸出與警報輸出都為零 begin passed<=8'b10000001; /passed<=2b'11; end else if(main_state=pass)/當(dāng)主機(jī)狀態(tài)為pass時,開鎖 begin passed<=8'b00000001; /passed<=2'b01; end else if(main_state=alarm)/當(dāng)主機(jī)狀態(tài)為alarm時,警報 begin passed<=8'b10000000; /passed<=2&

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

35、; end /鎖pass以后計數(shù)開場,當(dāng)規(guī)定的時間到達(dá)后自動上鎖,并進(jìn)入waits狀態(tài) /pass定時器 always(posedge clk1 or negedge resetb) begin if(!resetb) pass_count<=0; else if(main_state=pass) /pass狀態(tài)計時器pass定時器加1 pass_count<=pass_count+1; else pass_count<=0; end /從狀態(tài)機(jī),用于輸入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個密碼輸完時,進(jìn)展確認(rèn) ne*t_sub_state=first; /default為輸入了*位密碼,輸入完自動將狀態(tài)轉(zhuǎn)入下一位 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; /當(dāng)輸入完4位密碼以后狀態(tài)保持不變,等待輸入enter命令 finish: ne*t_sub_state=finish; default: ne*t_sub_state=sub_state; endcase else ne*t_sub_state=sub_state; end /比擬密碼,產(chǎn)

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 /記錄錯誤次數(shù) 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; / 鍵盤按下標(biāo)志 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論