基于FPGA電子密碼鎖的設(shè)計.doc_第1頁
基于FPGA電子密碼鎖的設(shè)計.doc_第2頁
基于FPGA電子密碼鎖的設(shè)計.doc_第3頁
基于FPGA電子密碼鎖的設(shè)計.doc_第4頁
基于FPGA電子密碼鎖的設(shè)計.doc_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

EDA技術(shù)應(yīng)用課程論文論文題目: 基于FPGA電子密碼鎖的設(shè)計 論文類型: 論 文 設(shè) 計 學 校: 廣西師范學院 姓 名: 黃 兆 航 學 號: 1112120124 班 級: 09 自 動 化 2012 年 6 月 28 日摘要基于FPGA設(shè)計的電子密碼鎖是一個小型的數(shù)字系統(tǒng),與普通機械鎖相比,具有許多獨特的優(yōu)點:保密性好,防盜性強,可以不用鑰匙,記住密碼即可開鎖等。目前使用的電子密碼鎖大部分是基于單片機技術(shù),以單片機為主要器件。在實際應(yīng)用中,程序容易跑飛,系統(tǒng)的可靠性較差。本文介紹的一種基于現(xiàn)場可編輯門陣列FPGA器件的電子密碼鎖的設(shè)計方法,采用Verilog HDL語言對系統(tǒng)進行描述,并在EP1C6Q240C8上實現(xiàn)。本文主要闡述了一種基于現(xiàn)場可編程門陣列FPGA器件的電子密碼鎖的設(shè)計方法。用FPGA器件構(gòu)造系統(tǒng),所有算法完全由硬件電路來實現(xiàn),使得系統(tǒng)的工作可靠性大為提高。通過仿真調(diào)試,利用可編程邏輯器件FPGA的電子密碼鎖的設(shè)計基本達到了預期目的。當然,該系統(tǒng)在一些細節(jié)的設(shè)計上還需要不斷地完善和改進,特別是對系統(tǒng)的擴展有很好的使用系統(tǒng)和設(shè)計的價值。本文采用EDA技術(shù),利用Quartus II工作平臺和硬件描述語言,設(shè)計了一種電子密碼鎖,并通過一片F(xiàn)PGA芯片實現(xiàn)。關(guān)鍵詞:電子密碼鎖;FPGA;Verilog HDL語言目錄第一章 前言1.1 國內(nèi)外現(xiàn)狀及其發(fā)展1.2 電子密碼鎖的原理第二章 現(xiàn)場可編程門陣列FPGA2.1 FPGA的基本結(jié)構(gòu)2.2 FPGA的設(shè)計流程第三章 電子密碼鎖的設(shè)計思想3.1系統(tǒng)原理框圖3.2 總體實現(xiàn)原理第四章 芯片主控設(shè)計4.1 FPGA有限狀態(tài)機4.2設(shè)計流程4.3狀態(tài)編碼4.4密碼的輸入4.5 密碼記錄與比較4.6密碼的顯示第五章 編程、編譯與仿真結(jié)束語致謝參考文獻第一章 前言1.1 國內(nèi)外現(xiàn)狀及其發(fā)展隨著人們生活水平的提高和安全意識的加強,對安全的要求也就越來越高。鎖自古以來就是把守護門的鐵將軍,人們對它要求甚高,既要安全可靠的防盜,又要使用方便,這也是制鎖者長期以來研制的主題。隨著電子技術(shù)的發(fā)展,各類電子產(chǎn)品應(yīng)運而生,電子密碼鎖就是其中之一。據(jù)有關(guān)資料介紹,電子密碼鎖的研究從20世紀30年代就開始了,在一些特殊場所早就有所應(yīng)用。這種鎖是通過鍵盤輸入一組密碼完成開鎖過程。研究這種鎖的初衷,就是為提高鎖的安全性。由于電子鎖的密鑰量(密碼量)極大,可以與機械鎖配合使用,并且可以避免因鑰匙被仿制而留下安全隱患。電子鎖只需記住一組密碼,無需攜帶金屬鑰匙,免除了人們攜帶金屬鑰匙的煩惱,而被越來越多的人所欣賞。20世紀80年代后,隨著電子鎖專用集成電路的出現(xiàn),電子鎖的體積縮小,可靠性提高,成本較高,是適合使用在安全性要求較高的場合,且需要有電源提供能量,使用還局限在一定范圍,難以普及,所以對它的研究一直沒有明顯進展。目前,在西方發(fā)達國家,電子密碼鎖技術(shù)相對先進,種類齊全,電子密碼鎖已被廣泛應(yīng)用于智能門禁系統(tǒng)中,通過多種更加安全,更加可靠的技術(shù)實現(xiàn)大門的管理。在我國電子鎖整體水平尚處于國際上70年代左右,電子密碼鎖的成本還很高,市場上仍以按鍵電子鎖為主,按鍵式和卡片鑰匙式電子鎖已引進國際先進水平,現(xiàn)國內(nèi)有幾個廠生產(chǎn)供應(yīng)市場。但國內(nèi)自行研制開發(fā)的電子鎖,其市場結(jié)構(gòu)尚未形成,應(yīng)用還不廣泛。國內(nèi)的不少企業(yè)也引進了世界上先進的技術(shù),發(fā)展前景非??捎^。希望通過不斷的努力,使電子密碼鎖在我國也能得到廣泛應(yīng)用。目前使用的電子密碼鎖大部分是基于單片機技術(shù),以單片機為主要器件,其編碼器與解碼器的生成為軟件方式。在實際應(yīng)用中,由于程序容易跑飛,系統(tǒng)的可靠性能較差?;诂F(xiàn)場可編程邏輯門陣列FPGA器件的電子密碼鎖,用FPGA器件構(gòu)造系統(tǒng),所有算法完全由硬件電路來實現(xiàn),使得系統(tǒng)的工作可靠性大為提高。由于FPGA具有現(xiàn)場可編程功能,當設(shè)計需要更改時,只需更改FPGA中的控制和接口電路,利用EDA工具將更新后的設(shè)計下載到FPGA中即可,無需更改外部電路的設(shè)計,大大提高了設(shè)計的效率。1.2 電子密碼鎖的原理1.2.1 編碼制式的選擇編碼制式應(yīng)根據(jù)NT的大小選取,可分為如下三種:(1)密碼的各位都可以重碼:NT1=ai;(2)密碼的非相鄰位可以重碼:NT2=a(a-1)i;(3)密碼的任何一位都不能重碼:NT3=a(a-1)(a-i+1)。其中a為基數(shù),i為位數(shù),a和i的選取應(yīng)該滿足NTNTL , a=2,3,4,10,12,14,16?,F(xiàn)在以最常用的a=10,i=6為例,可以計算出NT2=0159NT 1,NT 3=0.15N T1,所以編碼制式考慮是否重碼對NT有很大影響。另外,相同制式下不同的基底對編碼總量NT會有影響,而且基底的選擇也會影響到硬件電路的設(shè)計。本文設(shè)計的密碼鎖采用十進制編碼,密碼各位允許重碼,為簡化電路設(shè)計,密碼鎖口令采用對串行脈沖計數(shù)的方式輸入。1.2.2 誤碼輸入的保護措施如前所述,電子密碼鎖的設(shè)計應(yīng)考慮自身的安全保密性,由于編碼和捕捉密碼的實驗都是隨機的,若要使P=1 NT趨近于0,必須采取誤碼輸入的保護措施。假定設(shè)定的誤碼輸入次數(shù)不超過三次,誤碼達到三次時系統(tǒng)應(yīng)關(guān)閉主控電路,拒絕大于三次的密碼輸入,并且系統(tǒng)進入死鎖狀態(tài)。系統(tǒng)正常狀態(tài)的恢復也可采用以下三種方式:(1)延時后輸入二級密碼管理方式,即由管理員級密碼作為正常輸入的開鎖密碼,之后重新定義新的開鎖密碼;(2)使用一個按鍵使系統(tǒng)重新恢復到正常狀態(tài);(3)系統(tǒng)掉電恢復。1.3 系統(tǒng)設(shè)計要求1.設(shè)計一個密碼鎖,密碼為一個8位的十六進制數(shù),密碼固化在鎖內(nèi)。 2.用戶有三次輸入密碼的機會,如果正確,則開鎖。 3.如果三次都輸入錯誤,密碼將報警并進入鎖定狀態(tài)。 4.用戶在較長的一段時間內(nèi)不能再次輸入密碼,警報時間過后,密碼重新回到等待狀態(tài),用戶可以再次輸入密碼。1.4 本設(shè)計的目的和意義隨著人們生活水平的提高,對家庭防盜技術(shù)的要求也是越來越高,傳統(tǒng)的機械鎖由于其構(gòu)造的簡單,被撬的事件屢見不鮮,電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的歡迎?,F(xiàn)在市場上主要是基于單片機技術(shù)的電子密碼鎖,但可靠性較差。FPGA即現(xiàn)場可編程門陣列,它是在PAL、GAL、EPLD等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物,是一種超大規(guī)模集成電路,具有對電路可重配置能力。通常FPGA都有著上萬次的重寫次數(shù),也就是說現(xiàn)在的硬件設(shè)計和軟件設(shè)計一樣靈活、方便。相對于基于單片機技術(shù)的電子密碼鎖,用FPGA器件來構(gòu)成系統(tǒng),可靠性提高,并且由于FPGA具有的現(xiàn)場可編程功能,使得電子密碼鎖的更改與升級更為方便簡單。通過本次設(shè)計掌握FPGA系統(tǒng)設(shè)計的方法,熟悉FPGA設(shè)計的相關(guān)軟件,以及硬件描述語言的使用,了解電子密碼鎖的系統(tǒng)構(gòu)成,利用FPGA實現(xiàn)電子密碼鎖的設(shè)計與實現(xiàn),可以加深自己對所學專業(yè)的認識,關(guān)聯(lián)知識,增強自己的動手能力,積累實踐經(jīng)驗,為以后的工作打好基礎(chǔ)。第二章 現(xiàn)場可編程門陣列FPGA2.1 FPGA的基本結(jié)構(gòu)FPGA的發(fā)展非常迅速,形成了各種不同的結(jié)構(gòu)。按邏輯功能塊的大小,F(xiàn)PGA可分為細粒度FPGA和粗粒度FPGA。細粒度FPGA的邏輯功能塊較小,資源可以充分利用,但連線和開關(guān)多,速度慢;粗粒度FPGA的邏輯功能塊規(guī)模大,功能強,但資源不能充分利用。從邏輯功能塊的結(jié)構(gòu)上分類,可分為查找表結(jié)構(gòu)、多路開關(guān)結(jié)構(gòu)和多級與非門結(jié)構(gòu)。根據(jù)FPGA內(nèi)部連線的結(jié)構(gòu)不同,可分為分段互聯(lián)型和連續(xù)互聯(lián)型。根據(jù)編程方式,F(xiàn)PGA可分為一次編程和可重復編程兩種。FPGA一般可由三種可編程電路和一個用于存放編程數(shù)據(jù)的SRAM組成,這三種可編程電路是:可編程邏輯塊(CLB)、輸入/輸出模塊(IOB)和互聯(lián)資源(IR)。CLB是FPGA的主要組成部分,是實現(xiàn)邏輯功能的基本單元。它主要是由邏輯函數(shù)發(fā)生器、觸發(fā)器、數(shù)據(jù)選擇器等電路組成。IOB提供了器件引腳和內(nèi)部邏輯陣列之間的連接,通常排列在芯片的四周。其主要是由輸入觸發(fā)器、輸入緩沖器、輸出觸發(fā)/鎖存器和輸出緩沖器組成。每一個IOB控制一個引腳,可被配置為輸入、輸出活雙向I/O功能。可編程互聯(lián)資源包括各種長度的金屬連線和一些可編程連接開關(guān),它們將各個CLB之間和IOB之間互相連接起來,構(gòu)成各種復雜功能的系統(tǒng)。2.2 FPGA的設(shè)計流程FPGA設(shè)計流程包括系統(tǒng)設(shè)計和設(shè)計實現(xiàn),系統(tǒng)方案完成之后即進入設(shè)計實現(xiàn)階段的工作,他以系統(tǒng)方案為輸入,進行RTL級描述、功能仿真(RTL級仿真)、邏輯綜合、布線前門級仿真、適配(布局布線)、時序仿真(布線后門級仿真)、時序分析、器件編程、系統(tǒng)驗證一系列流程的處理才能完成FPGA芯片的設(shè)計,其設(shè)計流程如圖2.4所示。需要說明的是,如果仿真驗證不對或者某一步有錯,就要返回修改。有必要檢查和修改的地方有RTL級描述、系統(tǒng)方案、約束和測試激勵等。一般情況下,對RTL級的描述即原理圖或者HDL設(shè)計代碼的修改最多也最有效。修改后要重新走一遍流程。有時要反復修改,經(jīng)過多次這樣的迭代才能完成最后的設(shè)計。在理論上,把VLSI(Ultra Large Scale Integration,超大規(guī)模集成電路)的設(shè)計描述為6個層次1,2,即系統(tǒng)級(系統(tǒng)功能、參數(shù)定義)、算法級(描述系統(tǒng)功能行為)、RTL級、門級(邏輯門)、電路級(晶體管)、版圖級(物理工藝)。每一級又都分3個側(cè)面來描述:行為域描述、結(jié)構(gòu)域描述、物理域描述。但在實際情況中往往把算法級行為域描述或者RTL級行為域描述都稱為行為級描述。系統(tǒng)設(shè)計要求時序、同步、算法測試等方案模塊劃分及其功能描述各模塊接口信號定義系統(tǒng)行為描述系統(tǒng)行為仿真系統(tǒng)設(shè)計方案圖2.4 系統(tǒng)設(shè)計流程對于FPGA的設(shè)計而言,不需要關(guān)心電路級和版圖級,只考慮系統(tǒng)級、算法級、RTL級、門級4個層次的行為域描述和結(jié)構(gòu)域描述即可。上述的FPGA系統(tǒng)設(shè)計中的系統(tǒng)實際上是指系統(tǒng)級和算法級,而“RTL級描述”主要是指RTL級行為域的描述。在門級,由綜合工具產(chǎn)生的門級網(wǎng)表來描述。FPGA的設(shè)計流程如下:(1)系統(tǒng)行為描述系統(tǒng)行為描述是指使用硬件描述語言HDL (Hard-ware Description Language)語句的全集來描述算法,模擬系統(tǒng)的行為和功能,不要求所有的語句都能夠綜合成電路。事實上,有些語句是專為描述行為而創(chuàng)建的,不能綜合(不能用電路來實現(xiàn)其功能)。也可以使用高級語言如C語言來進行描述,此時往往要配合專用的系統(tǒng)設(shè)計工具來進行描述與仿真,如SPW等。這種系統(tǒng)算法級行為域的描述可以盡量使用最簡潔的語句而不必過多地考慮其硬件實現(xiàn)的諸因素,所以能較快建立系統(tǒng)行為模型,進行行為仿真。(2)系統(tǒng)行為仿真主要用來驗證系統(tǒng)方案是否正確、是否有缺陷,并可根據(jù)仿真的結(jié)果來優(yōu)化系統(tǒng)方案和算法。他使用系統(tǒng)行為描述代碼、測試激勵、行為級模型庫等為輸入,利用專用的仿真工具或者系統(tǒng)設(shè)計軟件來進行功能仿真和優(yōu)化。(3)RTL級描述指原理圖(結(jié)構(gòu)描述)或者使用可綜合的HDL語句來描述的設(shè)計(一般是行為描述)。EDA綜合軟件只能將RTL級描述綜合成邏輯電路。利用綜合軟件可以檢查出所寫的代碼是否是RTL級代碼。對簡單的設(shè)計而言,可以直接從RTL級開始設(shè)計,但對大規(guī)模的設(shè)計,最好先寫系統(tǒng)行為級代碼進行行為仿真。如果系統(tǒng)行為仿真正確,就可以將行為級代碼轉(zhuǎn)化為RTL級代碼。這種轉(zhuǎn)化稱之為高層次綜合或者行為級綜合。(4)功能仿真也叫RTL級仿真,是指不考慮延時信息的一種仿真,只能驗證RTL級的行為描述是否能達到所要求的功能。功能仿真需要的輸入是RTL級代碼、測試激勵和庫(有時要調(diào)用工藝庫中宏功能單元的行為級模型)。可利用專用的仿真工具進行仿真,如Modelsim,VCS等工具。如果仿真不對,則需要檢查和修改RTL級代碼或者測試激勵甚至系統(tǒng)方案。仿真的過程是先對源代碼進行編譯,檢查是否有語法錯誤。如果沒有錯誤,就將源代碼轉(zhuǎn)換為一種中間格式,便于仿真工具的內(nèi)部運算。編譯的結(jié)果自動存放在一個指定的工作目錄中,仿真的結(jié)果主要以波形文件的形式存放。(5)邏輯綜合邏輯綜合是將RTL級的行為描述轉(zhuǎn)化為使用門級單元的結(jié)構(gòu)描述。門級的結(jié)構(gòu)描述稱之為網(wǎng)表。網(wǎng)表文件主要記錄的是所用工藝庫門級單元之間的互連關(guān)系(即門級結(jié)構(gòu))。綜合的輸入需要RTL級描述、約束和工藝庫。綜合時所加的約束一般比較簡單,如時鐘頻率、器件型號和其他綜合設(shè)置等。綜合的過程是translate (轉(zhuǎn)換) +map(映射) +optimize (優(yōu)化)。轉(zhuǎn)換是將RTL級行為描述轉(zhuǎn)化為RTL級結(jié)構(gòu)描述(使用與工藝無關(guān)的通用邏輯門符號表示)。映射將轉(zhuǎn)換后的結(jié)果使用工藝庫門級單元的連接關(guān)系來表示,并根據(jù)需要進行優(yōu)化,形成網(wǎng)表文件。映射是對某種目標器件而言是一種資源分配和優(yōu)化操作。一般綜合工具能將轉(zhuǎn)換后的結(jié)果顯示為RTL級原理圖,也能將網(wǎng)表顯示為門級原理圖。網(wǎng)表文件中含門級單元的延時信息,對連線延時有預估值或者為零,不同的軟件處理的方法可能不同,暫稱之為網(wǎng)表文件。網(wǎng)表文件的格式可以表示成標準格式(edif),也可以表示成VHDL或者Verilog HDL格式(在綜合工具中設(shè)置)。綜合報告文件中含所用邏輯資源、預估出的時鐘最高頻率、關(guān)鍵路徑(延時最長的路徑,可在軟件中顯示)等信息。(6)布線前門級仿真布線前門級仿真是門級功能仿真,一般不考慮延時。該仿真的輸入需要綜合后的門級網(wǎng)表、工藝庫和測試激勵。有些EDA工具不提供此仿真功能,可以不做。(7)適配(布局布線)適配就是將網(wǎng)表文件映射到目標器件中的一種操作,是對目標器件的第二次映射(第一次映射是綜合)。即對網(wǎng)表中的每一個門級單元在器件中定位(布局),并使用器件內(nèi)的連線資源按照網(wǎng)表中的連接關(guān)系連接起來(布線)同時要滿足引腳分配、時鐘線的分配等約束條件。(8)時序仿真時序仿真是最接近真實情況的一種仿真,因為該仿真含所有的延時信息和約束信息(約束信息包含在網(wǎng)表文件中)。時序仿真的輸入需要測試激勵、工藝庫門級單元模型、網(wǎng)表文件和反標文件。如果網(wǎng)表文件中含有延時信息,則不需要反標文件。時序仿真的結(jié)果跟延時關(guān)系極大。延時跟工藝有關(guān),特別是深亞微米工藝,線延時大大超過門延時,所以總延時跟布局布線關(guān)系極大。如果仿真結(jié)果不對,要從約束、綜合、布局布線、RTL級代碼等環(huán)節(jié)上找原因,也可以借助時序分析工具找原因。(9)時序分析使用EDA軟件的時序分析功能能夠分析所有時鐘的頻率、周期、關(guān)鍵路徑和其他所有時鐘路徑上的延時信息,進行建立時間和保持時間分析和輸入到輸出、輸入到寄存器、寄存器到輸出的延時分析等,從而可以找出不滿足時序關(guān)系的原因所在。時序分析是一個輔助功能,有時可以不做。(10)器件編程指將適配后產(chǎn)生的編程文件下載到FPGA/CPLD器件中。下載的過程就是一個改寫器件內(nèi)邏輯結(jié)構(gòu)的過程,故稱之為編程。下載使用專用的編程器或者下載電纜。器件的編程接口一般使用10針JTAG插座。習慣上,對CPLD器件的下載叫編程,對FPGA器件的下載叫配置。CPLD器件基于E2PROM工藝或者FLASH工藝,掉電后信息不丟失。而FGAP器件基于SRAM查找表工藝,掉電后編程信息會丟失,在下次上電后需要重新加載編程文件。配置方式有多種模式,較常用的是PS模式(調(diào)試時用)和使用配置器件模式(產(chǎn)品中使用),他是使用一個EPROM型的配置芯片,先將編程數(shù)據(jù)燒寫到配置芯片中,配置芯片跟FPGA使用專用接口引腳相連。這樣,上電后配置芯片自動給FPGA加載編程數(shù)據(jù)。也可使用單片機進行配置。(11)系統(tǒng)驗證先將FPGA芯片在測試板上進行功能驗證,然后再到實際系統(tǒng)中驗證。系統(tǒng)驗證通過后就可以在產(chǎn)品中使用。至此,F(xiàn)PGA芯片設(shè)計完成。現(xiàn)在說明系統(tǒng)設(shè)計與模塊設(shè)計的關(guān)系。上述的FPGA設(shè)計流程是一個具體設(shè)計的通用流程,對一個系統(tǒng)適用,對一個模塊也是相同的。一個模塊可以劃分為多個子模塊,子模塊又可以再分??梢詫⒛K看成一個子系統(tǒng)單獨進行描述與仿真,但模塊設(shè)計必須滿足系統(tǒng)對他的要求。模塊設(shè)計相對簡單,所以有些步驟可以省去,如系統(tǒng)行為描述與仿真等。是否可省視具體情況而定。系統(tǒng)與模塊的關(guān)系是:系統(tǒng)是頂層模塊,他調(diào)用各個模塊并將這些模塊連接起來,然后作為一個整體進行FPGA設(shè)計流程的處理。第三章 電子密碼鎖的設(shè)計思想3.1系統(tǒng)原理框圖本系統(tǒng)由主控芯片(FPGA),鍵盤,顯示電路,報警電路和開/關(guān)門電路組成,而主控芯片又可分為按鍵處理部分,控制部分和譯碼顯示部分。系統(tǒng)原理框圖如圖2.1所示:鍵盤按鍵處理主控部分譯碼顯示顯示開/關(guān)門電路報警電路FPGA圖2.1 系統(tǒng)框圖3.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è)計4.1 FPGA有限狀態(tài)機本設(shè)計是通過FPGA有限狀態(tài)機來實現(xiàn),設(shè)計有限狀態(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 表4.1 二進制與一位熱碼的特性比較狀態(tài)機可以認為是組合邏輯和寄存器邏輯的特殊租戶,它一般包括兩個部分:組合邏輯部分和寄存器邏輯部分。寄存器用于存儲狀態(tài),組合電路用于狀態(tài)譯碼和產(chǎn)生輸出信號。狀態(tài)機的下一個狀態(tài)及輸出,不僅與輸入信號有關(guān),而且還有寄存器當前所處的狀態(tài)有關(guān)。4.2設(shè)計流程本次密碼鎖的設(shè)計,有限狀態(tài)機應(yīng)該包括以下狀態(tài):密碼為輸入前的等待狀態(tài)、輸入密碼時的等待狀態(tài)、輸入密碼正確時的通過狀態(tài)、輸入密碼錯誤時的警報狀態(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)換4.3狀態(tài)編碼狀態(tài)編碼主要有二進制編碼、格雷編碼和一位獨熱編碼等方式。格雷編碼時,相鄰狀態(tài)每次只有一個比特位產(chǎn)生變化,這樣減少了瞬變的次數(shù),也減少了產(chǎn)生毛刺和一些狀態(tài)的可能。采用一位獨熱編碼,雖然多用了觸發(fā)器,當可以有效節(jié)省和簡化組合電路。對于寄存器數(shù)量多而邏輯相對缺乏的FPGA器件來說,采用一位獨熱編碼可以有效提高電路的速度和可靠性,也有利于提高器件資源的利用率。將產(chǎn)生狀態(tài)的組合邏輯電路和用于保存狀態(tài)的寄存器分別寫在不同的always塊中。其中主要包括:輸出控制部分、警報計時部分、鎖打開后的計時部分、比較密碼部分、記錄密碼部分和記錄錯誤次數(shù)的部分4.4密碼的輸入本次密碼鎖的密碼輸入采用FPGA芯片上的8位單個按鍵,考慮到按鍵數(shù)目不夠,采用了一位按鍵作為功能轉(zhuǎn)換按鍵;即前5位按鍵輸入04,同時按下功能轉(zhuǎn)換按鍵時,按鍵04即轉(zhuǎn)換為按鍵59,這就彌補了按鍵數(shù)目的不足。最后兩位按鍵設(shè)定為確認輸入按鍵和復位按鍵。密碼輸入完成后可以按確認鍵檢驗密碼的正誤,報警、輸入錯誤或者其他情況可以按復位按鍵重新輸入。另外由于按鍵的時候同時會引起狀態(tài)機的轉(zhuǎn)換,所以如果按鍵的時候?qū)Π存I判斷次數(shù)過多會產(chǎn)生狀態(tài)的過快轉(zhuǎn)換,記錄的密碼和數(shù)碼管的顯示就同時會出現(xiàn)錯誤,因此在按鍵部分加入了消除多重按鍵的程序,只檢測一次按鍵的下降沿,解決了這個問題。4.5 密碼記錄與比較程序設(shè)定了一個寄存器用來記錄輸入的密碼。當次有效狀態(tài)機(即密碼輸入的狀態(tài)機)發(fā)生轉(zhuǎn)換并且有密碼輸入時,程序會記錄下輸入的密碼在寄存器的其中4位里面,最后次有效狀態(tài)轉(zhuǎn)換到確認密碼的狀態(tài)時,會將記錄下的密碼與固化在鎖內(nèi)的密碼進行對比,正確即將主狀態(tài)機轉(zhuǎn)換到通過階段,錯誤則將狀態(tài)機轉(zhuǎn)換到報警階段。其中正確錯誤的狀態(tài)轉(zhuǎn)換是通過控制相應(yīng)的標志位實現(xiàn)的。4.6密碼的顯示密碼顯示采用數(shù)碼管動態(tài)掃描顯示,初始時顯示密碼為4位0,當輸入密碼后數(shù)碼管的第一位、第二位、第三位、第四位會依次顯示輸入的密碼,錯誤后復位可以重新輸入。密碼顯示采用的是記錄密碼的寄存器的數(shù)據(jù),顯示掃描的掃描時間設(shè)置為1ms左右,這樣顯示不會出現(xiàn)閃爍或者殘影。第五章 編程、編譯與仿真本節(jié)主要是闡述設(shè)計在Quartus II軟件中實現(xiàn)編譯與仿真。在Quartus II在輸入源程序后,我們需要建立一個工程,在工程中我們要把設(shè)計文件加入工程中;然后選擇仿真器和綜合器類型值得注意的是如果選擇默認的“NONE”,表示選擇Quartus II軟件中自帶的仿真器和綜合器,結(jié)合自己的設(shè)計,在此我選擇默認項“NONE”;最后選擇目標芯片。在“Family”欄選擇芯片系列,在此我選擇“Cyclone”系列再選擇此系列的具體芯片EP1C6Q240C8。工程建立以后,可以進行源程序的編譯。選擇“Processing”Start Compilation,啟動全程編譯。編譯后產(chǎn)生的報告如下所示:圖4.4 編譯后產(chǎn)生的統(tǒng)計報告編譯成功后,就可以進行波形的仿真。由程序得出仿真圖:參考一下前面的輸入cmd的編碼便可讀懂此圖:/輸入的數(shù)字編碼 09,enter,cancelone=5b10001, two=5b10010,three=5b10011,four=5b10100,five=5b10101,six=5b10110,seven=5b10111,eight=5b11000,nine=5b11001,zero=5b11000,enter=5b11010,cancel=5b11011;可以看到,在復位以后,輸入第1,2,3,4個密碼(依次為1234)后,passed變成高電平當過了一定的時間后,passed變成低電平,重新計入鍵盤讀入值,進行下一輪的密碼辨別。程序清單如下:module passwd_lock(clk,resetb,cmd,alarmed,passed,);inputclk;/輸入時鐘信號inputresetb;/輸入復位信號input 4:0cmd;/輸入命令信號outputalarmed;/輸出警報信號outputpassed;/輸出通過信號wireclk;wireresetb;wire4:0cmd;regalarmed;regpassed;/輸入與輸出的聲明部分,其中,clk為輸入的時鐘信號,resetb為密碼舒服的輸入信號,cmd為輸入命令,需注意的時,cmd并不是總在表示密碼,也表示密碼的間隔,如當輸入4位密碼后需要一個確認“enter”信號,當密碼輸入錯誤時,需要取消“cancel”信號,這些信號之間在設(shè)計中通過有限狀態(tài)轉(zhuǎn)換機實現(xiàn)。parameterPASSWORD=16d1234;/盛放密碼的參數(shù)reg15:0password;/輸入數(shù)值盛放寄存器/輸入的數(shù)字編碼 09,enter,cancelregone=5b10001,two=5b10010,three=5b10011,four=5b10100,five=5b10101,six=5b10110,seven=5b10111,eight=5b11000,nine=5b11001,zero=5b11000,enter=5b11010,cancel=5b11011;regcmd_t;/檢驗是否有按鍵按下reg2:0main_state;/主狀態(tài)reg2:0next_state;/下一個狀態(tài)/主有限狀態(tài)轉(zhuǎn)換機的三個狀態(tài):waits、pass、alarmparameterwaits=3b001,pass=3b010,alarm=3b100;reg2:0sub_state;reg2:0next_sub_state; /主有限狀態(tài)轉(zhuǎn)換機的三個狀態(tài):first、second、third、fourth、finish。parameterfirst=3b000,second=3b001,third=3b010,fourth=3b011,finish=3b100;/通過計時寄存器reg7:0pass_count;/警報計時寄存器reg10:0alarm_count;/嘗試次數(shù)寄存器reg1:0try_count;/輸入狀態(tài)寄存器:error和correctregerror;regcorrect;/以上為中間狀態(tài)的一些寄存器和一些所用到的參數(shù)/主機狀態(tài)機部分always(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=2)next_state=alarm; /由waits轉(zhuǎn)換到alarm的條件elsenext_state=waits;pass:if(pass_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 clk or negedge resetb)beginif(!resetb)main_state=waits;elsemain_state=next_state;end/輸出控制部分always(posedge clk or negedge resetb)beginif(!resetb)/復位時,開鎖輸出與警報輸出都為零beginpassed=0;alarmed=0;endelse if(main_state=pass)/當主機狀態(tài)為pass時,開鎖beginpassed=1;alarmed=0;endelse if(main_state=alarm)/當主機狀態(tài)為alarm時,警報beginpassed=0;alarmed=1;endelse/其它狀態(tài)復位beginpassed=0;alarmed=0;endend/alarm一段時間后,自動進入waits狀態(tài)/alarm定時器always(posedge clk 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ī)定的時間到達后自動上鎖,并進入waits狀態(tài)/pass定時器always(posedge clk 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 clk or negedge resetb)begin if(!resetb)cmd_t=0;else cmd_t=-cmd4;endalways(posedge clk or negedge resetb)beginif(!resetb)sub_state=first;elsesub_state=next_sub_state;endalways(cmd or cmd_t or sub_state)/always(cmd or sub_state)beginif(cmd_t=0&cmd4=1)case(cmd)cancel:/密碼輸入錯誤時,重復上一個狀態(tài)beginif(sub_state=first)/ 第1個密碼輸入錯誤next_sub_state=first;elsecase(sub_state)second: / 第2個密碼輸入錯誤next_sub_state=first;third: / 第3個密碼輸入錯誤next_sub_state=second;fourth: / 第4個密碼輸入錯誤next_sub_state=third;finish:next_sub_state=fourth;endcaseendenter:/4個密碼輸完時,進行確認next_sub_state=first;/以下4個命令位無效的命令,狀態(tài)保持不變5b11100:next_sub_state=next_sub_state;5b11101:next_sub_state=next_sub_state;5b11110:next_sub_state=next_sub_state;5b11111:next_sub_state=next_sub_state;/default為輸入了某位密碼,輸入完自動將狀態(tài)轉(zhuǎn)入下一位default:case(sub_state)first:next_sub_state=second;second:next_sub_state=third;third:next_sub_state=fourth;fourth:next_sub_state=finish;/當輸入完4位密碼以后狀態(tài)保持不變,等待輸入enter命/令finish:next_sub_state=finish;endcaseendcaseelsenext_sub_state=sub_state;end/比較密碼,產(chǎn)生

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論