版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、蟻 eda技術(shù) 荿 設(shè)計(jì)報(bào)告膆袂肁肀題 目: 芇學(xué) 院: 芄專 業(yè): 蒀班 級: 螀姓 名: 肄學(xué) 號: 莃 罿薀肆螅薃肇膇襖肂螇羄一.引言羂蒂1.1 電子密碼鎖的現(xiàn)狀蒈隨著我國對外開放的不斷深入,高檔建筑發(fā)展很快,高檔密碼鎖具市場的前景樂觀。我國密碼鎖具行業(yè)對密碼鎖具高新技術(shù)的投入正逐年增大,高檔密碼鎖的市場需求也逐年增加。在安防工程中,鎖具產(chǎn)品是關(guān)系到整個(gè)系統(tǒng)安全性的重要設(shè)備,所以鎖具產(chǎn)品的優(yōu)劣也關(guān)系了整個(gè)安防工程的質(zhì)量和驗(yàn)收。肆目前,市場上比較先進(jìn)的智能電子密碼鎖分別有:ic卡電子密碼鎖、射頻卡式電子密碼鎖、紅外遙控電子密碼鎖、指紋識別電子密碼鎖和瞳孔識別電子密碼鎖等。ic卡電子密碼鎖成
2、本低,體積小,卡片本身無須電源等優(yōu)點(diǎn)占領(lǐng)了一定的市場份額,但是由于有機(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ā)展。這幾個(gè)國家的密碼鎖識別的密碼更復(fù)雜,并且綜合性比較好
3、,已經(jīng)進(jìn)入了成熟期,出現(xiàn)了感應(yīng)卡式密碼鎖,指紋式密碼鎖,虹膜密碼鎖,面部識別密碼鎖,序列混亂的鍵盤密碼鎖等各種技術(shù)的系統(tǒng),它們在安全性,方便性,易管理性等方面都各有特長,新型的電子密碼鎖系統(tǒng)的應(yīng)用也越來越廣。袁基于fpga的電子密碼鎖是新型現(xiàn)代化安全管理系統(tǒng),它集微機(jī)自動識別技術(shù)和現(xiàn)代安全管理措施為一體,它涉及電子,機(jī)械,計(jì)算機(jī)技術(shù),通訊技術(shù),生物技術(shù)等諸多新技術(shù)。它是解決重要部門出入口實(shí)現(xiàn)安全防范管理的有效措施,適用各種場合,如銀行、賓館、機(jī)房、軍械庫、機(jī)要室、辦公間、智能化小區(qū)、工廠、家庭等。羋在數(shù)字技術(shù)網(wǎng)絡(luò)技術(shù)飛速發(fā)展的今天,電子密碼鎖技術(shù)得到了迅猛的發(fā)展。它早已超越了單純的門道及鑰匙管
4、理,逐漸發(fā)展成為一套完整的出入管理系統(tǒng)。它在工作環(huán)境安全、人事考勤管理等行政管理工作中發(fā)揮著巨大的作用。在該系統(tǒng)的基礎(chǔ)上增加相應(yīng)的輔助設(shè)備可以進(jìn)行電梯控制、車輛進(jìn)出控制,物業(yè)消防監(jiān)控、餐飲收費(fèi)、私家車庫管理等,真正實(shí)現(xiàn)區(qū)域內(nèi)一卡智能管理。肇 目前使用的電子密碼鎖大部分是基于單片機(jī)技術(shù), 以單片機(jī)為主要器件, 其編碼器與解碼器的生成為軟件方式。在實(shí)際應(yīng)用中, 由于程序容易跑飛, 系統(tǒng)的可靠性能較差?;趂pga的電子密碼鎖已經(jīng)是現(xiàn)代生活中經(jīng)常用到的工具之一,用于各類保險(xiǎn)柜、房門、防盜門等等。用電子密碼鎖代替?zhèn)鹘y(tǒng)的機(jī)械式密碼鎖,克服了機(jī)械式密碼鎖密碼量少、安全性能差的缺點(diǎn)。由于采用的是可編程邏輯器
5、件fpga,使得系統(tǒng)有相當(dāng)大的靈活性,隨時(shí)可以進(jìn)行硬件升級、擴(kuò)展,而且系統(tǒng)設(shè)計(jì)完善以后還可以將主控的fpga固化成一片asic,那么這塊asic就可以作為專用的數(shù)字密碼鎖芯片。而且由于硬件可升級,還可隨時(shí)增加密碼位數(shù)或增加新的功能,使得密碼鎖有更高的安全性、可靠性和方便性。蒃1.2 主要完成的工作莀課題主要解決系統(tǒng)硬件和軟件兩方面的問題。硬件方面要解決fpga可編程器件與其外圍電路的接口設(shè)計(jì)的問題;軟件方面主要問題是利用verilog hdl語言完成基于fpga的電子密碼鎖的編程問題。除此之外,程序還要完成基本的密碼開鎖功能,并通過揚(yáng)聲器長時(shí)間鳴叫報(bào)警。本設(shè)計(jì)是由fpga可編程邏輯器件編程實(shí)現(xiàn)
6、的控制電路,具體有按鍵指示、輸入錯(cuò)誤提示、密碼有效指示、控制開鎖、控制報(bào)警等功能。它具有安全可靠、連接方便、簡單易用、結(jié)構(gòu)緊湊、系統(tǒng)可擴(kuò)展性好等特點(diǎn)。1、2、 羈系統(tǒng)硬件設(shè)計(jì)裊2.1 設(shè)計(jì)方案裊2.1.1 功能需求分析螀本系統(tǒng)主要集中在以fpga以核心外圍擴(kuò)展設(shè)計(jì),整個(gè)電路主要電子鎖具的組成框圖是以可編程邏輯器件(fpga)為核心,配以相應(yīng)硬件電路,設(shè)計(jì)一個(gè)密碼鎖,密碼為一個(gè)4位的十進(jìn)制數(shù),密碼固化在鎖內(nèi),用戶輸入密碼正確,則開鎖(綠燈亮);若不正確,則報(bào)警(紅燈亮)若用戶輸入密碼不正確,可以按復(fù)位鍵重新輸入密碼。 蝿2.1.2 系統(tǒng)實(shí)現(xiàn)方案的論證比較羆方案一 :采樣臺灣凌陽科技有限公司推出的
7、以凌陽自主研發(fā)的spce061a芯片為主控芯片,用一條下載線連接到計(jì)算機(jī)就可以實(shí)現(xiàn)在線仿真、在線調(diào)試、在線下載,低廉的價(jià)格保證了系統(tǒng)可靠開發(fā);此外,61板具有soc概念、dsp功能和語音特色,為電子密碼鎖的語音報(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)常用到的工具之一,通過鍵盤輸入密碼,用fpga作為主控芯片,用數(shù)碼管顯示輸入的數(shù)字,如果出現(xiàn)錯(cuò)誤便通過報(bào)警電路發(fā)出報(bào)警,主控芯片又可分
8、為按鍵處理部分、控制部分和譯碼顯示部分用電子密碼鎖代替?zhèn)鹘y(tǒng)的機(jī)械式密碼鎖。由于采用的是可編程邏輯器件fpga,使得系統(tǒng)有相當(dāng)大的靈活性,隨時(shí)可以進(jìn)行硬件升級、擴(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 方案的總體設(shè)計(jì)肂原理框圖袂本系統(tǒng)由主控芯片(fpga),鍵盤,顯示電路,報(bào)警電路和開/關(guān)門電路組成,而主控芯片又可分
9、為按鍵處理部分,控制部分和譯碼顯示部分。系統(tǒng)原理框系統(tǒng)原理框圖如圖2.1.3所示:艿螅圖2.1.3 總體框架蒄節(jié)總體設(shè)計(jì)原理羀本系統(tǒng)有8個(gè)按鍵,k0,k1,k2,k3,k4,k5代表數(shù)字0-9共10個(gè)數(shù)字和1個(gè)確認(rèn)鍵,1個(gè)復(fù)位鍵。密碼長度為四位,并且固化在鎖內(nèi),輸入正確密碼后,按確認(rèn)鍵即可開門,本系統(tǒng)設(shè)置為綠燈亮。在輸入密碼的過程中,當(dāng)用戶鍵入錯(cuò)誤密碼時(shí),報(bào)警燈紅燈亮。按下復(fù)位鍵,可使報(bào)警停止,同時(shí)清除所有密碼顯示。袆每輸入一位數(shù)字,密碼在數(shù)碼管上的顯示左移一位。即上電后,按確認(rèn)鍵即可開門。門開后可通過鎖門按鈕關(guān)門,門關(guān)上后要再次輸入密碼才能開門。在輸入密碼的過程中,當(dāng)用戶鍵入錯(cuò)誤密碼時(shí),系統(tǒng)
10、就會報(bào)警,由揚(yáng)聲器發(fā)出報(bào)警聲,當(dāng)連續(xù)三次出現(xiàn)密碼錯(cuò)誤時(shí),則系統(tǒng)會長時(shí)間報(bào)警不止,這時(shí)必須按警報(bào)復(fù)位鍵方可停止。薂2.2 主控模塊螁2.2.1 主控芯片ep4ce6e22c8的介紹螀主控芯片采用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
11、輸入查找 表(lut)、一個(gè)可編程觸發(fā)器、快速進(jìn)位鏈、級連鏈組成,多個(gè)lab 和多個(gè)eab 則可通過快速通道互相連接3。eab 是cyclone iv系列器件在結(jié)構(gòu)設(shè)計(jì)上的一個(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ù)目
12、的不足。最后兩位按鍵設(shè)定為確認(rèn)輸入按鍵和復(fù)位按鍵。密碼輸入完成后可以按確認(rèn)鍵檢驗(yàn)密碼的正誤,報(bào)警、輸入錯(cuò)誤或者其他情況可以按復(fù)位按鍵重新輸入。按鍵上拉,當(dāng)io口被拉高電平,當(dāng)io口檢測到高電平時(shí),表示按鍵按下。部分按鍵控制電路如圖2.3所示:膁蒁圖2.3 蚅2.4 顯示模塊肅led顯示塊是由發(fā)光二極管顯示字段的顯示器件。在單片機(jī)應(yīng)用系統(tǒng)中通常使用的是7段led,本設(shè)計(jì)將采用共陽極。共陽極led顯示塊的發(fā)光二極管與陽極并接。薀數(shù)碼管顯示塊中共有8個(gè)發(fā)光二極管,其中7個(gè)發(fā)光二極管構(gòu)成七筆字形“8”,1個(gè)發(fā)光二極管構(gòu)成小數(shù)點(diǎn)。7段顯示塊與fpga接口非常容易。只要將一個(gè)8位并行輸出與顯示塊的發(fā)光二極
13、管引腳相連即可。8位并行輸出口輸出不同的字節(jié)數(shù)據(jù)即可獲得不同的數(shù)字或字符,如表5.1所示。通常將控制發(fā)光二極管的8位字節(jié)數(shù)據(jù)稱為段選碼。共陽極與共陰極的段選碼互為補(bǔ)數(shù)。羇螆膂罿蚇袈薄蚃蒈顯示字符蚅共陰極段選碼螞共陽極段選碼膂顯示字符膈共陰極段選碼蚆共陽極段選碼肅 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蒈
14、 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ì)是通過fpga有限狀態(tài)機(jī)來實(shí)現(xiàn),設(shè)計(jì)有限狀態(tài)機(jī)最開始的工作時(shí)要確定電路,包括哪些狀態(tài),比如某個(gè)電路包括四個(gè)狀態(tài),s0,s1,s2,s3。然后對所有狀態(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)識,保存在寄存器當(dāng)中,對于此編碼
15、形式,只需一個(gè)2位的寄存器就可以了。袃fsm encoding style 主要有: binary encoding one hot encoding gray encoding 二進(jìn)制與一位熱碼的特性比較:蕿 表3.1 二進(jìn)制與一位熱碼的特性比較螈 狀態(tài)機(jī)可以認(rèn)為是組合邏輯和寄存器邏輯的特殊租戶,它一般包括兩個(gè)部分:組合邏輯部分和寄存器邏輯部分。寄存器用于存儲狀態(tài),組合電路用于狀態(tài)譯碼和產(chǎn)生輸出信號。狀態(tài)機(jī)的下一個(gè)狀態(tài)及輸出,不僅與輸入信號有關(guān),而且還有寄存器當(dāng)前所處的狀態(tài)有關(guān)。 根據(jù)輸出信號產(chǎn)生方法的不同,狀態(tài)機(jī)可以分成兩類:mealy型和moore型。moore型狀態(tài)機(jī)的輸出只是當(dāng)前狀態(tài)
16、的函數(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ài):密碼為輸入前的等待狀態(tài)、輸入密碼時(shí)的等待狀態(tài)、輸入密碼正確時(shí)的通過狀態(tài)、輸入密碼錯(cuò)誤時(shí)的警報(bào)狀態(tài)。螂肀圖3.3 主有效狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖蚇其中當(dāng)密碼輸入時(shí)又可包括以下狀態(tài),正常輸入狀態(tài)、異常輸入狀態(tài)(包括命令狀態(tài))、輸入確認(rèn)狀態(tài)。羄下面的圖(圖是在程序編譯后,tools-netlist_vewers-rtl vewer得到的)表示了密碼輸入的時(shí)候的次狀態(tài)機(jī),表示了4個(gè)密碼輸入的順序狀態(tài),以及輸入
17、完成后的等待確認(rèn)狀態(tài)。袃腿肆圖3.4次有效狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換螄3.3 軟件設(shè)計(jì)總rtc級圖薀薁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é)省和簡化組合電路。 對于寄存器數(shù)量多而邏輯相對缺乏的fpga器件來說,采用一位獨(dú)熱編碼可以有效提高電路的速度和可靠性,也有利于提高器件資源的利用率。螞將產(chǎn)生狀態(tài)的組合邏輯電路和用于保存狀態(tài)的寄存器分別寫在不同的always塊中。其中主要包括:輸出控制部分、警報(bào)計(jì)時(shí)部分、鎖打開后的
18、計(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ò)誤或者其他情況可以按復(fù)位按鍵重新輸入。芅另外由于按鍵的時(shí)候同時(shí)會引起狀態(tài)機(jī)的轉(zhuǎn)換,所以如果按鍵的時(shí)候?qū)Π存I判斷次數(shù)過多會產(chǎn)生狀態(tài)的過快轉(zhuǎn)換,記錄的密碼和數(shù)碼管的顯示就同時(shí)會出現(xiàn)錯(cuò)誤,因此在按鍵部分加入了消除多重按鍵的程序,
19、只檢測一次按鍵的下降沿,解決了這個(gè)問題。螃3.6 密碼的記錄與比較螈程序設(shè)定了一個(gè)寄存器用來記錄輸入的密碼。當(dāng)次有效狀態(tài)機(jī)(即密碼輸入的狀態(tài)機(jī))發(fā)生轉(zhuǎn)換并且有密碼輸入時(shí),程序會記錄下輸入的密碼在寄存器的其中4位里面,最后次有效狀態(tài)轉(zhuǎn)換到確認(rèn)密碼的狀態(tài)時(shí),會將記錄下的密碼與固化在鎖內(nèi)的密碼進(jìn)行對比,正確即將主狀態(tài)機(jī)轉(zhuǎn)換到通過階段,錯(cuò)誤則將狀態(tài)機(jī)轉(zhuǎn)換到報(bào)警階段。其中正確錯(cuò)誤的狀態(tài)轉(zhuǎn)換是通過控制相應(yīng)的標(biāo)志位實(shí)現(xiàn)的。 薈3.7 密碼的顯示羅密碼顯示采用數(shù)碼管動態(tài)掃描顯示,初始時(shí)顯示密碼為4位0,當(dāng)輸入密碼后數(shù)碼管的第一位、第二位、第三位、第四位會依次顯示輸入的密碼,錯(cuò)誤后復(fù)位可以重新輸入。密碼顯示采用
20、的是記錄密碼的寄存器的數(shù)據(jù),顯示掃描的掃描時(shí)間設(shè)置為1ms左右,這樣顯示不會出現(xiàn)閃爍或者殘影。4、5、 薁程序仿真膀肈下前面的輸入cmd的編碼: /輸入的數(shù)字編碼 09,enter,cancel one=4b0001, two=4b0010,three=4b0011,four=4b0100,five=4b0101, six=4b0110,seven=4b0111,eight=4b1000,nine=4b1001, zero=4b1000,enter=4b1010,cancel=4b1011; 可以看到,在復(fù)位以后,輸入第1,2,3,4個(gè)密碼(依次為1111)后,passed變成高電平蚆 當(dāng)過了
21、一定的時(shí)間后,passed變成低電平,重新計(jì)入鍵盤讀入值,進(jìn)行下一輪的密碼辨別。 薂羋蕆蒆蚃蟻袇膇蒁蝿6、7、 芆結(jié)論蚃本次課題設(shè)計(jì)完成的是基于fpga的密碼鎖設(shè)計(jì),通過一個(gè)多星期的不斷努力、克服各種困難,最終實(shí)現(xiàn)了任務(wù)目標(biāo)。本次設(shè)計(jì)解決的主要問題是是利用verilog hdl語言完成基于fpga的電子密碼鎖的編程問題。蒂設(shè)計(jì)是理論知識與實(shí)踐的完美結(jié)合,對于現(xiàn)代大學(xué)生的實(shí)踐能力是個(gè)很好的培養(yǎng)。袈短短的一個(gè)星期的時(shí)間的設(shè)計(jì)雖然短暫,但是它給我的收獲確實(shí)難忘,不僅僅在智能儀器方面有了很大的進(jìn)步,而且在fpga、quartus軟件等方面也學(xué)到了不少在上課學(xué)不到的知識。這段時(shí)間我查閱到很多關(guān)于課程設(shè)計(jì)
22、的書籍,對我?guī)椭埠艽?。我覺得自己以前的盲目,現(xiàn)在明白了很多。也對我們專業(yè)動手實(shí)踐的興趣提高了很多。有了這些經(jīng)歷對于我日后工作一定會有很大幫助。相信這次設(shè)計(jì)中學(xué)到的種種東西一定會存在我的腦海里,令我終身受益。螅在課程設(shè)計(jì)的過程中也可以看到我的不足,如原理知識掌握不實(shí),曾經(jīng)學(xué)過的知識如今卻不會應(yīng)用,軟件的應(yīng)用也不熟練,希望日后提供給我們更多的鍛煉機(jī)會來培養(yǎng)我們的實(shí)踐能力。蒃薃參考文獻(xiàn)芀1 高移南.遙控變號電子鎖j.電子世界,1994,07:15葿2 許琦.基于fpga 的電子密碼鎖設(shè)計(jì)j . 中國科技信息, 2007 (1) : 240-241膄3 劉韜,樓興華.fpga數(shù)字電子系統(tǒng)設(shè)計(jì)與開發(fā)實(shí)
23、例導(dǎo)航m.人民郵電出版社,2005.莁4 王金明.數(shù)字系統(tǒng)設(shè)計(jì)與verilog hdl莈袈襖莂螁芇蚄蒄衿蚇蒞芁芁膆膅莂莀附 錄薆程序清單:薁module passwd_lock( 膀 clk0, /時(shí)鐘 pin_23膄 passed, /開鎖燈與警報(bào)燈 羅 zero1, /按鍵0 pin_84莂 one1, /按鍵1 pin_85羇 two1, /按鍵2 pin_86薇 three1, /按鍵3 pin_87蒄 four1, /按鍵4 pin_88肂 羈 change, /功能選擇鍵pin_89蚅 yes, /確認(rèn)按鍵pin_90襖 resetb, /重輸按鍵pin_91蕿 seg, /數(shù)碼管
24、段選【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í)鐘信號 芄output 7:0 passed; /輸出信號 /為何要是8位?實(shí)際只用了2位膂/output 1:0 passed; /輸出信號 螀output 7:0 seg;/段選 羀output 3:0 dig;/位選 蚆reg 3:0 key; /按鍵存儲器薁reg rxbuf0,rxbuf1
25、,rxbuf2,rxbuf3,rxbuf4; /緩存器,可用于按鍵消抖薀螇/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 cnt_r0; 肁reg 18:0 cnt_r1; 薆reg clk1; 芆reg 21:0 cnt_r2;肅reg clk2; 螁reg 7:0 passed; /pass 8b1000 0000 alarm 8b0000 0001 waits 8b0000 0000蚇/*輸入與輸
26、出的聲明部分,其中,clk0為輸入的時(shí)鐘信號,resetb為密碼復(fù)位的輸入信號,莄key為輸入命令, 薃需注意的時(shí),key并不是總在表示密碼,也表示密碼的間隔,如當(dāng)輸入4位密碼后需要一個(gè)確認(rèn)“enter”信號, 薂當(dāng)密碼輸入錯(cuò)誤時(shí),需要取消“cancel”信號,這些信號之間在設(shè)計(jì)中通過有限狀態(tài)轉(zhuǎn)換機(jī)膀?qū)崿F(xiàn)。*/ 芇 蒃parameter password=16b0001001100010100;/盛放密碼的參數(shù) 螃reg 15:0 password;/輸入數(shù)值盛放寄存器 羇 莆/輸入的數(shù)字編碼 袂 蒃always ( posedge clk1 ) begin /檢測線路的下降沿 肈 rxbuf
27、1 = 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; 麥檔網(wǎng)芇 two = (rxbuf2 & ( two1 ); 襖 / rxfall1=rx
28、fall; 膁 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 裊/消除多重按鍵 膂螇reg 2:0 main_state;/主狀態(tài)
29、 莇reg 2:0 next_state;/下一個(gè)狀態(tài) 芅/主有限狀態(tài)轉(zhuǎn)換機(jī)的三個(gè)狀態(tài):waits、pass、alarm 羃parameter waits=3b001, pass=3b010, alarm=3b100; /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):first、second、third、fourth、finish蚄parameter first=3b000,second=3b001,third=3b010,fourth=3b011,finish=3
30、b100; 衿 腿/通過計(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; 芃regkey_pressed_flag; / 鍵盤按下標(biāo)志 莁/以上為中間狀態(tài)的一些寄存器和一些所用到的參數(shù) 膆/主機(jī)狀態(tài)機(jī)部分 芄always (posedge clk0) 莁begin 螁 cnt_r2 = cnt_
31、r2 + 1b1; 袇 蒞 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,error聿begin 肈 case(main_state) /判斷主狀態(tài)寄存器芅 waits: /3b001芃 if(correct=1) begin/由waits轉(zhuǎn)換到pass的條件 薈next_state=pass; end/3位next_state寄存器寫入等待狀
32、態(tài)袈 else if(error=1&try_count=1) begin莇next_state=alarm; end/由waits轉(zhuǎn)換到alarm的條件 莁 else begin膂next_state=waits; end蕿 膄 pass: 螃 if(pass_count7=1) begin/由pass轉(zhuǎn)換到waits的條件 計(jì)時(shí)器時(shí)間到,由通過狀態(tài)變成等待狀態(tài)蟻 next_state=waits; end荿 else begin羈 next_state=pass; end蚈 螆 alarm: 薁 if(alarm_count10=1) begin/ 由alarm轉(zhuǎn)換到waits的條件 警告
33、時(shí)間到達(dá)時(shí)變成等待狀態(tài)羃next_state=waits; end羀 else begin芆next_state=alarm;end/否則繼續(xù)警告節(jié) 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; 蕿 else 蒄 main_state=next_state; 蒃end 蝕螈/輸出控制部分 膇always(posedge clk1 or negedge r
34、esetb) 芃begin 螁 if(!resetb)/復(fù)位時(shí),開鎖輸出與警報(bào)輸出都為零 肀 begin 蚇 passed=8b10000001; 羄/passed=2b11;蕿 end 膈 else if(main_state=pass)/當(dāng)主機(jī)狀態(tài)為pass時(shí),開鎖 肆 begin 螄 passed=8b00000001; 蝕/passed=2b01;莇 end 蒅 else if(main_state=alarm)/當(dāng)主機(jī)狀態(tài)為alarm時(shí),警報(bào) 蒄 begin 螞 passed=8b10000000; 蠆/passed=2b10;裊 end 芅 else/其它狀態(tài)復(fù)位 葿 begin
35、螇 passed=8b10000001; 莄/passed=2b11;羅 end end 薀 羆/alarm一段時(shí)間后,自動進(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狀態(tài)計(jì)時(shí)器alarm定時(shí)器加1 膅 alarm_count=alarm_count+1; 膂 else 螞 alarm_count=0; 蚈end 膆薅/鎖pass以后計(jì)數(shù)開始,當(dāng)規(guī)定的時(shí)間到達(dá)后自動上鎖,并進(jìn)入
36、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 肇 肄/從狀態(tài)機(jī),用于輸入4位密碼 薄always(posedge clk1 or negedge resetb) 蝕begin 膈 if(!resetb) 節(jié) sub_state=first; 肅 e
37、lse 莀 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為輸入了某位密碼,輸入完自動將狀態(tài)轉(zhuǎn)入下一位 肅 else if (!zero|!one|!two|!three|!four) /zero1,one1,two1,thre
38、e1,four1芁case(sub_state) 蟻first: 裊next_sub_state=second; 膄second: 螁 next_sub_state=third; 肈third: 羇 next_sub_state=fourth; 節(jié)fourth: 膀next_sub_state=finish; 袈/當(dāng)輸入完4位密碼以后狀態(tài)保持不變,等待輸入enter命令 羈蚅finish: 袃next_sub_state=finish; 薈default: next_sub_state=sub_state; 螅endcase 螃else 芃next_sub_state=sub_state; 荿
39、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 薄error=1; 蠆correct=0; 蒀end 螆else begin 莂correct=0; 羈error=0; 衿 end 薇en
40、d 莃肀/記錄密碼 羋always(posedge clk1 or negedge resetb) 羃begin 蒄if(!resetb) begin 蒂password=0; 蚈end螄else if(!zero|!one|!two|!three|!four) begin節(jié)case(sub_state) 薀first: 膇password15:12=key; 蒄second: 芃password11:8=key; 蠆third: 薆password7:4=key; 芄fourth: 蒞password3:0=key; 肁default: 羆password=password; 羅endcas
41、e 膂end腿else begin蠆password=password; 螅end芃end 薂聿/記錄錯(cuò)誤次數(shù) 蒅always(posedge clk1 or negedge resetb) 肁begin 蝕if(!resetb) begin薈try_count=0; 膆end肂else if(error=1) begin蝿try_count=try_count+1; 羇end羆else if(main_state=pass|main_state=alarm) begin膃try_count=0; 膁end莇end 蚇羈/reg key_pressed_flag; / 鍵盤按下標(biāo)志 艿 螆al
42、ways(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; end 莄 else if(!three&change) 袂begin key_pressed_flag=1;key=4b0011; end 芁else if(!four
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度汽車電子零件銷售合同規(guī)范4篇
- 企業(yè)管理制度大全(全套)
- 2025版輪胎行業(yè)智能制造項(xiàng)目合作協(xié)議4篇
- 2025年度二手房買賣合同中關(guān)于交易流程及時(shí)間節(jié)點(diǎn)把控4篇
- 二零二五版高校畢業(yè)生就業(yè)創(chuàng)業(yè)培訓(xùn)及實(shí)踐基地合作協(xié)議3篇
- 二零二五年度建筑布線施工安全生產(chǎn)合同2篇
- 二零二五年度環(huán)保項(xiàng)目融資與投資合作復(fù)雜多條款合同3篇
- 二零二五年度建筑材料采購合同實(shí)施細(xì)則6篇
- 二零二五年甲乙間商業(yè)貸款及擔(dān)保合同6篇
- 二零二五年度智慧消防系統(tǒng)住宅小區(qū)全面維保協(xié)議2篇
- 部編新改版語文一年級下冊《語文園地四》教學(xué)設(shè)計(jì)
- 2025年北京鐵路局集團(tuán)招聘筆試參考題庫含答案解析
- 《藥品招商營銷概論》課件
- 曙光磁盤陣列DS800-G10售前培訓(xùn)資料V1.0
- 寺廟祈福活動方案(共6篇)
- 2025年病案編碼員資格證試題庫(含答案)
- 企業(yè)財(cái)務(wù)三年戰(zhàn)略規(guī)劃
- 2025新譯林版英語七年級下單詞表
- 提高膿毒性休克患者1h集束化措施落實(shí)率
- 山東省濟(jì)南市天橋區(qū)2024-2025學(xué)年八年級數(shù)學(xué)上學(xué)期期中考試試題
- 主播mcn合同模板
評論
0/150
提交評論