基于FPGA的verilog的電子密碼鎖設(shè)計(jì)_第1頁(yè)
基于FPGA的verilog的電子密碼鎖設(shè)計(jì)_第2頁(yè)
基于FPGA的verilog的電子密碼鎖設(shè)計(jì)_第3頁(yè)
基于FPGA的verilog的電子密碼鎖設(shè)計(jì)_第4頁(yè)
基于FPGA的verilog的電子密碼鎖設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1、 概述1.1 電子密碼鎖的現(xiàn)狀隨著我國(guó)對(duì)外開(kāi)放的不斷深入,高檔建筑發(fā)展很快,高檔密碼鎖具市場(chǎng)的前景樂(lè)觀。我國(guó)密碼鎖具行業(yè)對(duì)密碼鎖具高新技術(shù)的投入正逐年增大,高檔密碼鎖的市場(chǎng)需求也逐年增加。在安防工程中,鎖具產(chǎn)品是關(guān)系到整個(gè)系統(tǒng)安全性的重要設(shè)備,所以鎖具產(chǎn)品的優(yōu)劣也關(guān)系了整個(gè)安防工程的質(zhì)量和驗(yàn)收。目前,市場(chǎng)上比較先進(jìn)的智能電子密碼鎖分別有:IC卡電子密碼鎖、射頻卡式電子密碼鎖、紅外遙控電子密碼鎖、指紋識(shí)別電子密碼鎖和瞳孔識(shí)別電子密碼鎖等。IC卡電子密碼鎖成本低,體積小,卡片本身無(wú)須電源等優(yōu)點(diǎn)占領(lǐng)了一定的市場(chǎng)份額,但是由于有機(jī)械接觸,會(huì)產(chǎn)生接觸磨損,而且使用不太方便,在一定程度上限制了它的應(yīng)用

2、;射頻卡式電子密碼鎖是非接觸式電子密碼鎖,成本也不太高,體積跟IC卡密碼鎖相當(dāng),卡片使用感應(yīng)電源,重量很輕,技術(shù)成熟,受到了廣泛的歡迎,但是與IC卡電子密碼鎖相比,成本偏高;指紋識(shí)別電子密碼鎖和瞳孔識(shí)別電子密碼鎖可靠性很高,安全性是目前應(yīng)用系統(tǒng)中最高的,但是成本高昂,還沒(méi)進(jìn)入大眾化使用階段。在國(guó)外,美國(guó)、日本、德國(guó)的電子密碼鎖保密性較好,并結(jié)合感應(yīng)卡技術(shù),生物識(shí)別技術(shù),使電子密碼鎖系統(tǒng)得到了飛躍式的發(fā)展。這幾個(gè)國(guó)家的密碼鎖識(shí)別的密碼更復(fù)雜,并且綜合性比較好,已經(jīng)進(jìn)入了成熟期,出現(xiàn)了感應(yīng)卡式密碼鎖,指紋式密碼鎖,虹膜密碼鎖,面部識(shí)別密碼鎖,序列混亂的鍵盤密碼鎖等各種技術(shù)的系統(tǒng),它們?cè)诎踩?,方?/p>

3、性,易管理性等方面都各有特長(zhǎng),新型的電子密碼鎖系統(tǒng)的應(yīng)用也越來(lái)越廣。基于FPGA的電子密碼鎖是新型現(xiàn)代化安全管理系統(tǒng),它集微機(jī)自動(dòng)識(shí)別技術(shù)和現(xiàn)代安全管理措施為一體,它涉及電子,機(jī)械,計(jì)算機(jī)技術(shù),通訊技術(shù),生物技術(shù)等諸多新技術(shù)。它是解決重要部門出入口實(shí)現(xiàn)安全防范管理的有效措施,適用各種場(chǎng)合,如銀行、賓館、機(jī)房、軍械庫(kù)、機(jī)要室、辦公間、智能化小區(qū)、工廠、家庭等。在數(shù)字技術(shù)網(wǎng)絡(luò)技術(shù)飛速發(fā)展的今天,電子密碼鎖技術(shù)得到了迅猛的發(fā)展。它早已超越了單純的門道及鑰匙管理,逐漸發(fā)展成為一套完整的出入管理系統(tǒng)。它在工作環(huán)境安全、人事考勤管理等行政管理工作中發(fā)揮著巨大的作用。在該系統(tǒng)的基礎(chǔ)上增加相應(yīng)的輔助設(shè)備可以進(jìn)

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

5、可以作為專用的數(shù)字密碼鎖芯片。而且由于硬件可升級(jí),還可隨時(shí)增加密碼位數(shù)或增加新的功能,使得密碼鎖有更高的安全性、可靠性和方便性。1.2 論文主要完成的工作課題主要解決系統(tǒng)硬件和軟件兩方面的問(wèn)題。硬件方面要解決FPGA可編程器件與其外圍電路的接口設(shè)計(jì)的問(wèn)題;軟件方面主要問(wèn)題是利用Verilog HDL語(yǔ)言完成基于FPGA的電子密碼鎖的編程問(wèn)題。除此之外,程序還要完成基本的密碼開(kāi)鎖功能,并通過(guò)揚(yáng)聲器長(zhǎng)時(shí)間鳴叫報(bào)警。本設(shè)計(jì)是由FPGA可編程邏輯器件編程實(shí)現(xiàn)的控制電路,具體有按鍵指示、輸入錯(cuò)誤提示、密碼有效指示、控制開(kāi)鎖、控制報(bào)警等功能。它具有安全可靠、連接方便、簡(jiǎn)單易用、結(jié)構(gòu)緊湊、系統(tǒng)可擴(kuò)展性好等特

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

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

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

9、,K4,K5代表數(shù)字0-9共10個(gè)數(shù)字和1個(gè)確認(rèn)鍵,1個(gè)復(fù)位鍵。密碼長(zhǎng)度為四位,并且固化在鎖內(nèi),輸入正確密碼后,按確認(rèn)鍵即可開(kāi)門,本系統(tǒng)設(shè)置為綠燈亮。在輸入密碼的過(guò)程中,當(dāng)用戶鍵入錯(cuò)誤密碼時(shí),報(bào)警燈紅燈亮。按下復(fù)位鍵,可使報(bào)警停止,同時(shí)清除所有密碼顯示。每輸入一位數(shù)字,密碼在數(shù)碼管上的顯示左移一位。即上電后,按確認(rèn)鍵即可開(kāi)門。門開(kāi)后可通過(guò)鎖門按鈕關(guān)門,門關(guān)上后要再次輸入密碼才能開(kāi)門。在輸入密碼的過(guò)程中,當(dāng)用戶鍵入錯(cuò)誤密碼時(shí),系統(tǒng)就會(huì)報(bào)警,由揚(yáng)聲器發(fā)出報(bào)警聲,當(dāng)連續(xù)三次出現(xiàn)密碼錯(cuò)誤時(shí),則系統(tǒng)會(huì)長(zhǎng)時(shí)間報(bào)警不止,這時(shí)必須按警報(bào)復(fù)位鍵方可停止。2.2 主控模塊2.2.1 主控芯片EP4CE6E22C8

10、的介紹主控芯片采用ACEX1K 系列的EP4CE6E22C8。Cyclone IV系列是當(dāng)今Altera CPLD 中應(yīng) 用前景最好的器件系列之一,該系列的FPGA 由邏輯陣列塊LAB(Logic array block)、 嵌入式陣列塊EAB(embedded array block)、快速互聯(lián)以及IO 單元構(gòu)成,每個(gè)邏輯陣列塊 包含8 個(gè)邏輯單元LE(logic element)和一個(gè)局部互聯(lián)。每個(gè)邏輯單元?jiǎng)t由一個(gè)4 輸入查找 表(LUT)、一個(gè)可編程觸發(fā)器、快速進(jìn)位鏈、級(jí)連鏈組成,多個(gè)LAB 和多個(gè)EAB 則可通過(guò)快速通道互相連接3。EAB 是Cyclone IV系列器件在結(jié)構(gòu)設(shè)計(jì)上的一

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

12、口檢測(cè)到高電平時(shí),表示按鍵按下。部分按鍵控制電路如圖2.3所示:圖2.3 2.4 顯示模塊LED顯示塊是由發(fā)光二極管顯示字段的顯示器件。在單片機(jī)應(yīng)用系統(tǒng)中通常使用的是7段LED,本設(shè)計(jì)將采用共陽(yáng)極。共陽(yáng)極LED顯示塊的發(fā)光二極管與陽(yáng)極并接。數(shù)碼管顯示塊中共有8個(gè)發(fā)光二極管,其中7個(gè)發(fā)光二極管構(gòu)成七筆字形“8”,1個(gè)發(fā)光二極管構(gòu)成小數(shù)點(diǎn)。7段顯示塊與FPGA接口非常容易。只要將一個(gè)8位并行輸出與顯示塊的發(fā)光二極管引腳相連即可。8位并行輸出口輸出不同的字節(jié)數(shù)據(jù)即可獲得不同的數(shù)字或字符,如表5.1所示。通常將控制發(fā)光二極管的8位字節(jié)數(shù)據(jù)稱為段選碼。共陽(yáng)極與共陰極的段選碼互為補(bǔ)數(shù)。顯示字符共陰極段選碼

13、共陽(yáng)極段選碼顯示字符共陰極段選碼共陽(yáng)極段選碼 0 3FH C0H C 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è)計(jì)3.1 FPGA有限狀態(tài)機(jī)本設(shè)計(jì)是通過(guò)FPGA有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn),設(shè)計(jì)有限狀態(tài)機(jī)最開(kāi)始的工作時(shí)要確定電路,包括哪些

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

15、,組合電路用于狀態(tài)譯碼和產(chǎn)生輸出信號(hào)。狀態(tài)機(jī)的下一個(gè)狀態(tài)及輸出,不僅與輸入信號(hào)有關(guān),而且還有寄存器當(dāng)前所處的狀態(tài)有關(guān)。 根據(jù)輸出信號(hào)產(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è)計(jì)流程本次密碼鎖的設(shè)計(jì),有限狀態(tài)機(jī)應(yīng)該包括以下?tīng)顟B(tài):密碼為輸入前的等待狀態(tài)、輸入密碼時(shí)的等待狀態(tài)、輸入密碼正確時(shí)的通過(guò)狀態(tài)、輸入密碼錯(cuò)誤時(shí)的警報(bào)狀態(tài)。圖3.3 主有效狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖其中當(dāng)密碼輸入時(shí)又可包括以下?tīng)顟B(tài),正常輸入狀

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

17、件來(lái)說(shuō),采用一位獨(dú)熱編碼可以有效提高電路的速度和可靠性,也有利于提高器件資源的利用率。將產(chǎn)生狀態(tài)的組合邏輯電路和用于保存狀態(tài)的寄存器分別寫在不同的always塊中。其中主要包括:輸出控制部分、警報(bào)計(jì)時(shí)部分、鎖打開(kāi)后的計(jì)時(shí)部分、比較密碼部分、記錄密碼部分和記錄錯(cuò)誤次數(shù)的部分3.5 密碼的輸入本次密碼鎖的密碼輸入采用FPGA芯片上的8位單個(gè)按鍵,考慮到按鍵數(shù)目不夠,采用了一位按鍵作為功能轉(zhuǎn)換按鍵;即前5位按鍵輸入04,同時(shí)按下功能轉(zhuǎn)換按鍵時(shí),按鍵04即轉(zhuǎn)換為按鍵59,這就彌補(bǔ)了按鍵數(shù)目的不足。最后兩位按鍵設(shè)定為確認(rèn)輸入按鍵和復(fù)位按鍵。密碼輸入完成后可以按確認(rèn)鍵檢驗(yàn)密碼的正誤,報(bào)警、輸入錯(cuò)誤或者其他

18、情況可以按復(fù)位按鍵重新輸入。另外由于按鍵的時(shí)候同時(shí)會(huì)引起狀態(tài)機(jī)的轉(zhuǎn)換,所以如果按鍵的時(shí)候?qū)Π存I判斷次數(shù)過(guò)多會(huì)產(chǎn)生狀態(tài)的過(guò)快轉(zhuǎn)換,記錄的密碼和數(shù)碼管的顯示就同時(shí)會(huì)出現(xiàn)錯(cuò)誤,因此在按鍵部分加入了消除多重按鍵的程序,只檢測(cè)一次按鍵的下降沿,解決了這個(gè)問(wèn)題。3.6 密碼的記錄與比較程序設(shè)定了一個(gè)寄存器用來(lái)記錄輸入的密碼。當(dāng)次有效狀態(tài)機(jī)(即密碼輸入的狀態(tài)機(jī))發(fā)生轉(zhuǎn)換并且有密碼輸入時(shí),程序會(huì)記錄下輸入的密碼在寄存器的其中4位里面,最后次有效狀態(tài)轉(zhuǎn)換到確認(rèn)密碼的狀態(tài)時(shí),會(huì)將記錄下的密碼與固化在鎖內(nèi)的密碼進(jìn)行對(duì)比,正確即將主狀態(tài)機(jī)轉(zhuǎn)換到通過(guò)階段,錯(cuò)誤則將狀態(tài)機(jī)轉(zhuǎn)換到報(bào)警階段。其中正確錯(cuò)誤的狀態(tài)轉(zhuǎn)換是通過(guò)控制相

19、應(yīng)的標(biāo)志位實(shí)現(xiàn)的。 3.7 密碼的顯示密碼顯示采用數(shù)碼管動(dòng)態(tài)掃描顯示,初始時(shí)顯示密碼為4位0,當(dāng)輸入密碼后數(shù)碼管的第一位、第二位、第三位、第四位會(huì)依次顯示輸入的密碼,錯(cuò)誤后復(fù)位可以重新輸入。密碼顯示采用的是記錄密碼的寄存器的數(shù)據(jù),顯示掃描的掃描時(shí)間設(shè)置為1ms左右,這樣顯示不會(huì)出現(xiàn)閃爍或者殘影。4、 程序仿真下前面的輸入cmd的編碼: /輸入的數(shù)字編碼 09,enter,cancel one=4'b0001, two=4b0010,three=4'b0011,four=4'b0100,five=4'b0101, six=4'b0110,seven=4&#

20、39;b0111,eight=4'b1000,nine=4'b1001, zero=4'b1000,enter=4'b1010,cancel=4'b1011; 可以看到,在復(fù)位以后,輸入第1,2,3,4個(gè)密碼(依次為1111)后,passed變成高電平 當(dāng)過(guò)了一定的時(shí)間后,passed變成低電平,重新計(jì)入鍵盤讀入值,進(jìn)行下一輪的密碼辨別。 5、 結(jié)論本次課題設(shè)計(jì)完成的是基于FPGA的密碼鎖設(shè)計(jì),通過(guò)一個(gè)多星期的不斷努力、克服各種困難,最終實(shí)現(xiàn)了任務(wù)目標(biāo)。本次設(shè)計(jì)解決的主要問(wèn)題是是利用verilog HDL語(yǔ)言完成基于FPGA的電子密碼鎖的編程問(wèn)題。設(shè)計(jì)是

21、理論知識(shí)與實(shí)踐的完美結(jié)合,對(duì)于現(xiàn)代大學(xué)生的實(shí)踐能力是個(gè)很好的培養(yǎng)。短短的一個(gè)星期的時(shí)間的設(shè)計(jì)雖然短暫,但是它給我的收獲確實(shí)難忘,不僅僅在智能儀器方面有了很大的進(jìn)步,而且在FPGA、Quartus軟件等方面也學(xué)到了不少在上課學(xué)不到的知識(shí)。這段時(shí)間我查閱到很多關(guān)于課程設(shè)計(jì)的書籍,對(duì)我?guī)椭埠艽?。我覺(jué)得自己以前的盲目,現(xiàn)在明白了很多。也對(duì)我們專業(yè)動(dòng)手實(shí)踐的興趣提高了很多。有了這些經(jīng)歷對(duì)于我日后工作一定會(huì)有很大幫助。相信這次設(shè)計(jì)中學(xué)到的種種東西一定會(huì)存在我的腦海里,令我終身受益。在課程設(shè)計(jì)的過(guò)程中也可以看到我的不足,如原理知識(shí)掌握不實(shí),曾經(jīng)學(xué)過(guò)的知識(shí)如今卻不會(huì)應(yīng)用,軟件的應(yīng)用也不熟練,希望日后提供給我

22、們更多的鍛煉機(jī)會(huì)來(lái)培養(yǎng)我們的實(shí)踐能力。參考文獻(xiàn)1 高移南.遙控變號(hào)電子鎖J.電子世界,1994,07:152 許琦.基于FPGA 的電子密碼鎖設(shè)計(jì)J . 中國(guó)科技信息, 2007 (1) : 240-2413 劉韜,樓興華.FPGA數(shù)字電子系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)實(shí)例導(dǎo)航M.人民郵電出版社,2005.4 王金明.數(shù)字系統(tǒng)設(shè)計(jì)與Verilog HDL附 錄程序清單:module passwd_lock( clk0, /時(shí)鐘 pin_23 passed, /開(kāi)鎖燈與警報(bào)燈 zero1, /按鍵0 pin_84 one1, /按鍵1 pin_85 two1, /按鍵2 pin_86 three1, /按鍵3

23、pin_87 four1, /按鍵4 pin_88 change, /功能選擇鍵pin_89 yes, /確認(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; /輸入時(shí)鐘信號(hào) output 7:0 passed; /輸出信號(hào) /為何要是8位?實(shí)際只用了2位/output 1:0 passed; /輸出信

24、號(hào) output 7:0 seg;/段選 output 3:0 dig;/位選 reg 3:0 key; /按鍵存儲(chǔ)器reg RXBuf0,RXBuf1,RXBuf2,RXBuf3,RXBuf4; /緩存器,可用于按鍵消抖/display reg clk0_div; reg 2:0 digyi;/哪一位亮,用于數(shù)碼管數(shù)字移位reg 3:0 dig;/位選reg 3:0 seg0;/存儲(chǔ)按鍵按下的數(shù)字reg 7:0 seg; /段選reg 12:0 CNT_R0; reg 18:0 CNT_R1; reg clk1; reg 21:0 CNT_R2;reg clk2; reg 7:0 passe

25、d; /pass 8b'1000 0000 alarm 8b'0000 0001 waits 8b'0000 0000/*輸入與輸出的聲明部分,其中,clk0為輸入的時(shí)鐘信號(hào),resetb為密碼復(fù)位的輸入信號(hào),key為輸入命令, 需注意的時(shí),key并不是總在表示密碼,也表示密碼的間隔,如當(dāng)輸入4位密碼后需要一個(gè)確認(rèn)“enter”信號(hào), 當(dāng)密碼輸入錯(cuò)誤時(shí),需要取消“cancel”信號(hào),這些信號(hào)之間在設(shè)計(jì)中通過(guò)有限狀態(tài)轉(zhuǎn)換機(jī)實(shí)現(xiàn)。*/ parameter PASSWORD=16'b0001001100010100;/盛放密碼的參數(shù) reg 15:0 password

26、;/輸入數(shù)值盛放寄存器 /輸入的數(shù)字編碼 always ( posedge clk1 ) begin /檢測(cè)線路的下降沿 RXBuf1 <= one1; one <= (RXBuf1 & ( one1 ); / RXFall1<=RXFall; end /消除多重按鍵 always ( posedge clk1 ) begin /檢測(cè)線路的下降沿 RXBuf0 <= zero1; zero <= (RXBuf0 & ( zero1 ); / RXFall1<=RXFall; end /消除多重按鍵 always ( posedge clk1

27、) begin /檢測(cè)線路的下降沿 RXBuf2 <= two1; two <= (RXBuf2 & ( two1 ); / RXFall1<=RXFall; end /消除多重按 always ( posedge clk1 ) begin /檢測(cè)線路的下降沿 RXBuf3 <= three1; three <= (RXBuf3 & ( three1 ); / RXFall1<=RXFall; end /消除多重按鍵 always ( posedge clk1 ) begin /檢測(cè)線路的下降沿 RXBuf4 <= four1; fou

28、r <= (RXBuf4 & ( four1 ); / RXFall1<=RXFall; end /消除多重按鍵 reg 2:0 main_state;/主狀態(tài) reg 2:0 next_state;/下一個(gè)狀態(tài) /主有限狀態(tài)轉(zhuǎn)換機(jī)的三個(gè)狀態(tài):waits、pass、alarm parameter waits=3'b001, pass=3'b010, alarm=3'b100; /3個(gè)狀態(tài)編碼reg 2:0 sub_state; /從狀態(tài)機(jī)現(xiàn)狀態(tài)reg 2:0 next_sub_state; /從狀態(tài)機(jī)下一個(gè)狀態(tài) /從有限狀態(tài)轉(zhuǎn)換機(jī)的五個(gè)狀態(tài):firs

29、t、second、third、fourth、finishparameter first=3'b000,second=3'b001,third=3'b010,fourth=3'b011,finish=3'b100; /通過(guò)計(jì)時(shí)寄存器 reg 7:0 pass_count; /pass計(jì)時(shí)完后回到wait狀態(tài)/警報(bào)計(jì)時(shí)寄存器 reg 10:0 alarm_count; /alarm計(jì)時(shí)完后回到wait狀態(tài)/嘗試次數(shù)寄存器 reg 1:0 try_count; /輸入狀態(tài)寄存器:error和correct reg error; reg correct; reg

30、key_pressed_flag; / 鍵盤按下標(biāo)志 /以上為中間狀態(tài)的一些寄存器和一些所用到的參數(shù) /主機(jī)狀態(tài)機(jī)部分 always (posedge clk0) begin CNT_R2 <= CNT_R2 + 1'b1; if(CNT_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) /判斷主狀

31、態(tài)寄存器 waits: /3b'001 if(correct=1) begin/由waits轉(zhuǎn)換到pass的條件 next_state=pass; end/3位next_state寄存器寫入等待狀態(tài) else if(error=1&&try_count=1) beginnext_state=alarm; end/由waits轉(zhuǎn)換到alarm的條件 else beginnext_state=waits; end pass: if(pass_count7=1) begin/由pass轉(zhuǎn)換到waits的條件 計(jì)時(shí)器時(shí)間到,由通過(guò)狀態(tài)變成等待狀態(tài) next_state=wait

32、s; end else begin next_state=pass; end alarm: if(alarm_count10=1) begin/ 由alarm轉(zhuǎn)換到waits的條件 警告時(shí)間到達(dá)時(shí)變成等待狀態(tài)next_state=waits; end else beginnext_state=alarm;end/否則繼續(xù)警告 default:/默認(rèn)狀態(tài):waits next_state=waits; endcase end /狀態(tài)轉(zhuǎn)換 always(posedge clk1 or negedge resetb) begin if(!resetb) main_state<=waits; e

33、lse main_state<=next_state; end /輸出控制部分 always(posedge clk1 or negedge resetb) begin if(!resetb)/復(fù)位時(shí),開(kāi)鎖輸出與警報(bào)輸出都為零 begin passed<=8'b10000001; /passed<=2b'11; end else if(main_state=pass)/當(dāng)主機(jī)狀態(tài)為pass時(shí),開(kāi)鎖 begin passed<=8'b00000001; /passed<=2'b01; end else if(main_state=al

34、arm)/當(dāng)主機(jī)狀態(tài)為alarm時(shí),警報(bào) begin passed<=8'b10000000; /passed<=2'b10; end else/其它狀態(tài)復(fù)位 begin passed<=8'b10000001; /passed<=2b'11; end end /alarm一段時(shí)間后,自動(dòng)進(jìn)入waits狀態(tài) /alarm定時(shí)器 always(posedge clk1 or negedge resetb) begin if(!resetb) alarm_count<=0; else if(main_state=alarm)/alarm

35、狀態(tài)計(jì)時(shí)器alarm定時(shí)器加1 alarm_count<=alarm_count+1; else alarm_count<=0; end /鎖pass以后計(jì)數(shù)開(kāi)始,當(dāng)規(guī)定的時(shí)間到達(dá)后自動(dòng)上鎖,并進(jìn)入waits狀態(tài) /pass定時(shí)器 always(posedge clk1 or negedge resetb) begin if(!resetb) pass_count<=0; else if(main_state=pass) /pass狀態(tài)計(jì)時(shí)器pass定時(shí)器加1 pass_count<=pass_count+1; else pass_count<=0; end /從

36、狀態(tài)機(jī),用于輸入4位密碼 always(posedge clk1 or negedge resetb) begin if(!resetb) sub_state<=first; else sub_state<=next_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個(gè)密碼輸完時(shí),進(jìn)行確認(rèn) next_sub_state=first; /default為輸入了某

37、位密碼,輸入完自動(dòng)將狀態(tài)轉(zhuǎn)入下一位 else if (!zero|!one|!two|!three|!four) /zero1,one1,two1,three1,four1case(sub_state) first: next_sub_state=second; second: next_sub_state=third; third: next_sub_state=fourth; fourth: next_sub_state=finish; /當(dāng)輸入完4位密碼以后狀態(tài)保持不變,等待輸入enter命令 finish: next_sub_state=finish; default: next_su

38、b_state=sub_state; endcase else next_sub_state=sub_state; end /比較密碼,產(chǎn)生正確或者錯(cuò)誤信息 always(posedge clk1 or negedge resetb) begin if(!resetb) begin correct<=0; error<=0; end else if(!key_pressed_flag&&!yes) if(password=PASSWORD)/密碼正確時(shí)begin correct<=1; error<=0; end else/密碼錯(cuò)誤時(shí) begin err

39、or<=1; correct<=0; end else begin correct<=0; error<=0; end 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:

40、4<=key; fourth: password3:0<=key; default: password<=password; endcase endelse beginpassword<=password; endend /記錄錯(cuò)誤次數(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=

41、alarm) begintry_count<=0; endend /reg key_pressed_flag; / 鍵盤按下標(biāo)志 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

42、_pressed_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

43、else if(!zero&&!change) 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'b1001; end else if(!y

溫馨提示

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

評(píng)論

0/150

提交評(píng)論