基于FPGA的多功能萬歷_第1頁
基于FPGA的多功能萬歷_第2頁
基于FPGA的多功能萬歷_第3頁
免費預(yù)覽已結(jié)束,剩余33頁可下載查看

下載本文檔

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

文檔簡介

1、基于FPGA勺多功能萬年歷1. 緒 論現(xiàn)代科技在不斷進步電子技術(shù)在不斷開展,電子產(chǎn)品設(shè)計復(fù)雜程度也在不斷增加。 而且電子產(chǎn)品勺更新?lián)Q代也越來越快, 現(xiàn)在只靠傳統(tǒng)勺純硬件勺設(shè)計方法已經(jīng)不能滿足 現(xiàn)代人們的要求。EDA就是典型的硬件設(shè)計軟件化的設(shè)計平臺。EDA是一項非常先進的技術(shù),它有許多別的技術(shù)沒有的優(yōu)點:像單片機需要先畫出 硬件圖再編寫相對應(yīng)的程序,而 EDA是先編好程序再畫圖的,而且模塊化的編程還會在 軟件中生成相應(yīng)的封裝元件, 使最后畫原理圖變的更加簡單; 可以編好程序就直接仿真, 程序出現(xiàn)錯誤可以在源文件內(nèi)部直接改;并且設(shè)計好的總系統(tǒng)可以集成在一個體積小、 功耗低、可靠性高的芯片上。本設(shè)

2、計采用VHD語言,VHD語言是一種全方位的數(shù)字系統(tǒng)設(shè)計和測試的硬件描述。 它支持原理圖輸入方法以及傳統(tǒng)的文件輸入方。對于前者適用于小規(guī)模的數(shù)字集成電 路,并進行模擬仿真。 而對于大規(guī)模的、 復(fù)雜的系統(tǒng), 如果用純原理圖設(shè)計方法的話的, 由于種種條件和環(huán)境制約,會導(dǎo)致工作效率底而且容易出錯的等缺點。在信息技術(shù)的今 天,集成電路逐漸的趨向于系統(tǒng)化、微尺寸化、低功耗高集成化,因此,高密度可編程 邏輯器件和VHD越來越得到設(shè)計者的青睞。它具有極強的描述能力,支持結(jié)構(gòu)、數(shù)據(jù)流、 行為三種描述形式的混合的設(shè)計方式, 描覆蓋面廣、 抽象能力強。 它能支持系統(tǒng)行為級、 邏輯門級和存放器傳輸級三個不同層次的設(shè)計

3、。 在本設(shè)計中用到的FPG是特殊的ASIC芯 片, ASIC是一種帶有邏輯處理的加速處理器的專用的系統(tǒng)集成電路。它具有功耗低、速 度快、集成度、設(shè)計制造本錢低等優(yōu)點。本設(shè)計是研究基于FPG舶多功能萬年歷的設(shè)計,主要實現(xiàn)以下功能:能夠顯示年、 月、日、時、分、秒,時間采用 24小時制。當(dāng)時間不準(zhǔn)確時還可以手動校準(zhǔn)。本系統(tǒng)還 能實時的顯示當(dāng)前的溫度,擴展了萬年歷的功能。我采用的是數(shù)字溫度傳感器 DS18B20 和F PGA1成的溫度采集系統(tǒng),此系統(tǒng)具有硬件電路簡單,抗干擾能力強等優(yōu)點。1.1 工程研究的背景和意義現(xiàn)在是一個科技迅速開展的時代。新的電子產(chǎn)品、電子技術(shù)日異更新。生在 21世紀(jì) 的我們應(yīng)

4、該都深深的體會到電子產(chǎn)品給我們帶來的變化,而且電子產(chǎn)品更是隨處可見。 隨著科技的開展人們的生活節(jié)奏也越來越快,時間對人們來說也是越來越珍貴。在這樣 快節(jié)奏的生活里,人們常常會忘記了時間,一旦遇到重要的會議或重要的事情而忘記了 時間,這將會帶來很大的損失。而傳統(tǒng)的鐘表已經(jīng)不能滿足這些人的要求。隨著科技的 開展和社會的進步,人們對數(shù)化日歷的要求也越來越高。數(shù)字化的日歷具有功耗低、多 功能化、一勞永逸等優(yōu)點,因此數(shù)字化的日歷必將取代傳統(tǒng)的日歷走入尋常百姓家。本設(shè)計采用的是數(shù)字溫度傳感器 DS18B20和FPGA組成的溫度采集系統(tǒng)。數(shù)字溫度 傳感器DS18B2Q可以直接與FPGA相連,構(gòu)成簡單的測量電

5、路,這樣就方便實現(xiàn)遠距離 傳輸和多點溫度測量;而且 FPGA相對于單片機來說速度快,修改方便,可以減少開發(fā) 本錢和時間,并增加了系統(tǒng)的靈活性。EDA 是一項非常先進的技術(shù),它有許多別的技術(shù)沒有的優(yōu)點:像單片機需要先畫出硬件圖再編 寫相對應(yīng)的程序, 而 EDA 是先編好程序再畫圖的, 而且模塊化的編程還會在軟件中生成相應(yīng)的封裝 元件,使最后畫原理圖變的更加簡單;可以編好程序就直接仿真,程序出現(xiàn)錯誤可以在源文件內(nèi)部 直接改;并且設(shè)計好的總系統(tǒng)可以集成在一個體積小、功耗低、可靠性高的芯片上。1.1 課題相關(guān)技術(shù)的開展現(xiàn)代電子產(chǎn)品根本上都是大量使用大規(guī)模的可編程的邏輯器件, 這樣就降低了產(chǎn)品 的功耗、

6、縮小了電子產(chǎn)品的體積、功能也越來越多樣化、產(chǎn)品的性能也得到提高?,F(xiàn)代 電腦技術(shù)在電子產(chǎn)品開發(fā)中得到了廣泛的應(yīng)用,以前需要一兩個月才能開發(fā)出來的,現(xiàn) 在只要幾個星期甚至更短的時間, 不僅僅縮短了電子產(chǎn)品的研發(fā)周期還提高了自動化程 度,降低了生產(chǎn)的本錢,增加了產(chǎn)品的競爭力。EDA電子設(shè)計自動化是最近幾年才迅速開展起來的,它是將電腦軟件、硬件、微電子技術(shù)交叉運用的現(xiàn)代電子技術(shù)?,F(xiàn)在 電子產(chǎn)品都在趨于數(shù)字化,基于 EDA的數(shù)字系統(tǒng)的設(shè)計具有很大的應(yīng)用市場??删幊踢壿嬈骷訣DA誕生以來,經(jīng)歷了 PLA、PAL、GAL、CPLD、FPGA幾個 階段?,F(xiàn)在比擬流行的可編程邏輯器件就是美國 ALTERA公司

7、的FPGA和CPLD可編程邏 輯器件采用全新的結(jié)構(gòu)和先進的技術(shù)可以根據(jù)用戶的要求來構(gòu)造邏輯功能的數(shù)字集成電路,加上Maxplusll或最新的QUARTU開發(fā)環(huán)境,不僅簡化了電路的設(shè)計,降低了 本錢,提高了系統(tǒng)的可靠性,也給數(shù)字化設(shè)計帶了了重大變革。電子設(shè)計的核心就是EDA技術(shù),EDA技術(shù)是指以電腦為開發(fā)平臺,融合應(yīng)用電子技 術(shù),電腦技術(shù)而研制成的通用軟包。EDA技術(shù)經(jīng)歷了 70年代的電腦輔助設(shè)計CAD 80 年代的電腦輔助工程CAE和電子系統(tǒng)設(shè)計自動化 ESDAE個開展階段。它的根本特征是: “自頂向下的設(shè)計方法,對整個系統(tǒng)進行方案設(shè)計和功能劃分,提高了設(shè)計的效率, 比單片機或C語言要簡單易懂

8、。本設(shè)計利用硬件描述語言結(jié)合可編程邏輯器件進行的,VHDL語言具有一下優(yōu)點:1VHDL的描述范圍寬使它成為高層次的設(shè)計的核心,將工作人員的重心提高到 了系統(tǒng)功能的實現(xiàn)與調(diào)試。2VHDL可以用簡潔的代碼來描述復(fù)雜的控制邏輯設(shè)計, 靈 活且方便。3VHDL不依賴與特定的器件,方便了工藝的轉(zhuǎn)換。4VHDL是一個標(biāo)準(zhǔn) 的語言,眾多的EDA廠商都支持,因此移植性強。1.2 課題研究的內(nèi)容本設(shè)計主要研究基于FPGA勺多功能萬年歷,要求如下:1顯示年、月、日、時、分、秒,時間以 24小時為一個周期。 2具有校準(zhǔn)以及報時功能,可以對年、月、日、時、分及秒進行單獨校對,使 其校正到標(biāo)準(zhǔn)時間。 3能夠?qū)崟r的顯示當(dāng)

9、前溫度。1.3 設(shè)計方案論證與選擇方案一:運用單片機C語言實現(xiàn)多功能萬年歷的設(shè)計 按照設(shè)計要求,系統(tǒng)軟件編程應(yīng)包含三個局部:輸入局部,選擇導(dǎo)出局部,輸出顯 示局部。相應(yīng)的系統(tǒng)硬件局部除了核心模塊單片機之外,主要的外圍部件還有按鍵、傳 感器等。其中單片機系統(tǒng)作為中央處理單元,根據(jù)邏輯開關(guān)輸入的信號轉(zhuǎn)換為顯示局部 能識別的方式傳遞給顯示局部,顯示局部接到傳來的指示信號做出相應(yīng)的顯示。此方法 運用了當(dāng)前最常見的C語言,方案較簡潔,不過C語言難以掌握,因此本設(shè)計不采用此 方法。方案二:運用數(shù)字邏輯電路實現(xiàn)多功能萬年歷的設(shè)計采用 74138、74161 和其它器件構(gòu)成實現(xiàn)對萬年歷控制功能的硬件電路。由設(shè)

10、計要 求可知,可以把電路分為按鍵控制電路,譯碼、顯示、驅(qū)動等各局部電路。開關(guān)控制電 路,譯碼與顯示驅(qū)動電路,顯示電路。這種方案是由純硬件電路實現(xiàn)的設(shè)計,優(yōu)點是省 略了軟件局部的設(shè)計,但是這種方案因為是純硬件實現(xiàn)的,本錢較高,誤差較大,不靈 活,因此在本次設(shè)計中也不予以采用。方案三:運用EDA技術(shù)實現(xiàn)多功能萬年歷的設(shè)計根據(jù)設(shè)計要求,系統(tǒng)設(shè)計依靠 EDA勺MAX+PLUSI設(shè)計軟件、VHDL硬件描述語言及 FPGA芯片實現(xiàn)多功能萬年歷的設(shè)計。即在 MAX+PLUSI軟件中用VHDL語言編寫各模塊 程序,通過編譯后分別封裝成元器件,這些元器件生成頂層文件,再畫出硬件電路圖, 這是EDA硬件軟件化的一

11、大特點。最后借助 EDA實驗箱實現(xiàn)硬件仿真的功能。軟硬件相 結(jié)合,層次清楚,結(jié)構(gòu)清晰。且 VHDL語言簡單易懂,F(xiàn)PGAS片也是當(dāng)今的流行趨勢。綜合以上三種設(shè)計方案,方案三是最為經(jīng)濟合理的,也是我們最能理解的。2. FPGA 簡介2.1 FPGA 概述FPGAField Programmable Gate Array 即現(xiàn)場可編程門陣列,它是在 PLA、 GLA、CPL等可編程器件的根底上進一步開展的產(chǎn)物。它是專用集成電路中的一種半定制電 路,具有門電路數(shù)多的優(yōu)點。2.2 FPGA 根本結(jié)構(gòu)FPG器件在結(jié)構(gòu)上,由邏輯功能塊排列為陣列,它的結(jié)構(gòu)可以分為三個局部:可編 程邏輯塊 C LB Conf

12、igurable Logic Block 可編程 I/O 模塊 Input/Output Block 和 可編程內(nèi)部連線 PIProgrammable Interconnect 。(1) .CLB是FPGA勺主要組成局部,圖2-1是CLB根本結(jié)構(gòu)框圖。B CLB CLB CLB CL可編程開關(guān)矩輸入輸出模塊互連資源 圖2-1 CLB根本結(jié)構(gòu)(2) .可編程輸入/輸出模塊IOB,編程靈活根據(jù)系統(tǒng)功能的需要可被配置為輸入、輸 出或雙向傳輸三種功能,實現(xiàn)不同的邏輯功能,滿足不同的的邏輯接口的需要。(3) .可編程內(nèi)部連線PI。XC400系列芯片的連線資源由水平和垂直的布線通道構(gòu)成,較短的線段分布于單

13、個CLE中,較長的線段跨接與兩個CLB間,而最長的線段跨越 怎個芯片??删幊涕_關(guān)用來把CLE勺輸入輸出接到其周圍的線段上,并且可以將兩個不 同的線段連接在一起。3. 多功能萬年歷總體設(shè)計方案3.1多功能萬年歷的構(gòu)成日歷實際上是一個對標(biāo)準(zhǔn)頻率1HZ進行計數(shù)的計數(shù)電路。因此標(biāo)準(zhǔn)的 1HZ時間 信號必須做到準(zhǔn)確穩(wěn)定。通常使用石英晶體振蕩器電路構(gòu)成數(shù)字鐘。同時為了保證與標(biāo) 準(zhǔn)時間的一致,需要在電路上加上一個校準(zhǔn)電路。同時圖3-1所示為日歷的一般構(gòu)成框圖。主要包括時間基準(zhǔn)電路、計數(shù)器電路、控制電路、譯碼和顯示電路。其核心的局部 就是控制邏輯電路,不斷完善它可以增加系統(tǒng)的功能。圖3-1日歷時鐘局部組成框圖

14、本設(shè)計還具有顯示年、月、日的功能,其顯示范圍為其總體框架如圖 3-23.2 多功能萬年歷工作原理日歷的核心局部就是時鐘局部,實際就是對標(biāo)準(zhǔn)的時鐘信號進行計數(shù),秒計數(shù)器對 秒脈沖信號進行計數(shù),記滿60秒后就分計數(shù)器進位同時又從0開始計數(shù);分計數(shù)器對秒 的進位信號進行計數(shù),記滿60后向時計數(shù)器進位同時又從0開始計數(shù);同理時計數(shù)器為 24進制計數(shù)器,記滿24向日計數(shù)器進位同時計數(shù)器清零,重新開始計數(shù)。由于日數(shù)根據(jù) 年、月的不同天數(shù)也不同,必須由年、月共同決定,日記滿后12個月后向年計數(shù)器進位。 各個計數(shù)器的輸出分別經(jīng)過譯碼器送數(shù)碼管顯示。當(dāng)計時出現(xiàn)錯誤時,可以用校準(zhǔn)電路 對年、月、日、時、分、秒進行

15、校準(zhǔn)。在系統(tǒng)中除了需要校準(zhǔn)的控制信號外,還需要有 時鐘的使能信號、清零信號。這些控制信號由一個 4X 4矩形鍵盤輸入。 七段譯碼器構(gòu) 成譯碼顯示電路,數(shù)碼管完成顯示功能。在此的系統(tǒng)中利用數(shù)字溫度傳感器DS18B2和FPG組成的溫度采集系統(tǒng)經(jīng)處理后送至數(shù)碼管顯示即可。4 單元電路4.1 分頻模塊電路設(shè)計與實現(xiàn)40MHz的方波信在此系統(tǒng)中晶體振蕩器的信號的穩(wěn)定性與精準(zhǔn)度直接影響到整個日歷時鐘的準(zhǔn)確 度。為了保證基準(zhǔn)時鐘的準(zhǔn)確性,所以我決定選用特性非常好的石英晶體,它只讓某一 特定頻率點的信號通過,其他頻率段的信號全部會被它衰減,而且它震蕩信號的頻率與 震蕩電路中的元器件完全無關(guān)。所以這種震蕩電路輸

16、出的是準(zhǔn)確度極高的信號,再利用 分頻電路的話就會得到標(biāo)準(zhǔn)的秒信號,其組成框圖如圖4-1。石英晶體Bk.分頻電路1振蕩電路圖4-1秒信號產(chǎn)生電路框圖秒信號本系統(tǒng)使用的晶體振蕩器電路給數(shù)字鐘提供一個頻率穩(wěn)定準(zhǔn)確的號,其輸出至分頻電路。分頻電路的邏輯框圖如圖4-2所示。圖4-2分頻電路模塊圖4-3分頻模塊電路設(shè)計其內(nèi)部結(jié)構(gòu)圖見圖4-3。電路中采用Max+plusll元器件庫中的計數(shù)器7490進行硬 件分頻。經(jīng)分頻后輸出1HZ的標(biāo)準(zhǔn)秒信號CLK1 4MHZ勺按鍵掃描信號、1KHZ的按鍵去 抖信號。該模塊的時序仿真圖如圖 4-4所示,滿足設(shè)計要求。Wine dk4CImb sd-ell*星 J誨顯耐A日

17、鹹E爭i 9眉附J 9鐵屯耳972TH事彳FmuirtJuuuuuuimviMnjwffijuiminnnmiAmmnnnnniinnmnnn熱電偶具有洌溫范圍廣(-ioovi&oot).測量精度高、便于遠距離、多 點、集中檢卿和自動控制等優(yōu)點。但是其自由端需要溫度補償,而且在 低溫常溫段其測量精度較低等缺點o鉗電阻4.2測量精度高,一般都是以鉗電阻作為標(biāo)準(zhǔn)溫度測量元件.標(biāo)椎鉗電 阻可以用一種嚴密、合理的方程來描述其電阻值與溫度的關(guān)系。但是其 龐大的休和利半導(dǎo)體熱電阻溫度測量模塊電路設(shè)計與實現(xiàn)積小、結(jié)構(gòu)簡單籌優(yōu)點。但是其互換性較差,測量在本統(tǒng)中利用數(shù)字溫度傳感器的DS18B20和FPG

18、A組成的溫度采集系統(tǒng),這樣就不需要模數(shù)轉(zhuǎn)換電路和信號放大電路,組成的硬件電路簡單,抗干擾能力強溫度傳感器的選擇溫度傳感器根據(jù)是否要與被檢測介質(zhì)接觸,分為接觸式傳感器和非接觸式傳感器兩 類。接觸式傳感器包括根據(jù)被測物體受溫度影響的膨脹度制成的傳感器;基于半導(dǎo)體或 導(dǎo)體受溫度影響電阻值或電荷數(shù)發(fā)生改變而制成的傳感器;基于熱電效應(yīng)的熱電偶傳感器等。非接觸式傳感器是根據(jù)溫度與熱輻射特性之間的關(guān)系對溫度進行測量。由于這里 測的是空氣的溫度,所以選擇用接觸式傳感器。常用的接觸式溫度傳感器有鉑電阻、熱電偶和半導(dǎo)體熱敏電阻等類型。它們的特點 如下:圖 4-5 溫度傳感器的比擬綜合上述各個傳感器的優(yōu)缺點,這里選

19、擇半導(dǎo)體熱電阻類型,在本系統(tǒng)中采用DS18B20溫度傳感器。由美國DALLAS公司生產(chǎn)DS18B20溫度傳感器是的可編程數(shù)字 溫度傳感器,具有 3 個引腳,且封裝形式多樣,體積小,質(zhì)量輕、 線性度好、耐擦耐磨, 傳輸距離遠、性能穩(wěn)定;溫度測量的范圍大概在 -55C +125C,可進行9的12位A/D 轉(zhuǎn)換精度。溫度測量的分辨率最高可到達0.0625C,溫度測量結(jié)果用帶符號的16位數(shù)字量進行串行輸出。4.2.2 Ds18b20 的主要特征1、適用的電壓范圍比擬寬,大概為3.05.5V,在特殊情況下還可以有數(shù)據(jù)線供電。2、溫度測量的范圍為-55 T+125C, A/D轉(zhuǎn)換精度為912位,精度越高那

20、么 測出的溫度也就越精確,對應(yīng)溫度分辨率為 05C、0.25C、0.125C和0.0625E,即它 可以實現(xiàn)高精度的溫度測量。3、最突出的特點在于它采用的是獨特的單線接口方式,DS18B20在與FPGA連接時僅需要一條口線即可實現(xiàn)雙向通訊。4、DS18B20在使用方便簡單,它不需要添加任何外圍元件,傳感元器件和溫度轉(zhuǎn) 電路全部集成在器件中。5、多個DS18B20能夠相互并聯(lián),組成一個測溫網(wǎng)絡(luò),并且這些DS18B20的數(shù)據(jù)線可以連在一根數(shù)據(jù)線上。6、測量結(jié)果直接輸出數(shù)字溫度信號,以數(shù)據(jù)串行方式傳送給FPGA,同時可傳送校驗碼,具有極強的抗干擾糾錯能力7、負壓特性:當(dāng)電源極性接反的時候,芯片不會因

21、發(fā)熱而燒毀,只是不能正常 工作。8、每個Ds18b20傳感器都有一個唯一的64位序列碼這樣就可以解決分布式溫度 測量中處理器與多個傳感器相連的問題。Ds18b20與FPGA的連接電路如 圖4-6, VDD端口 5V電源,GND接地,DG端口接FPGA 的一位雙向口,另外在數(shù)據(jù)連接線上還要接上一個4.7K的上拉電阻。圖4-6 Ds18b20與FPGA勺連接圖4.2.3 Ds18b20的內(nèi)部結(jié)構(gòu)DS18B20內(nèi)部結(jié)構(gòu)主要由四局部組成,如圖 4-7:電源檢測圖4-7 DS18B20內(nèi)部結(jié)構(gòu)圖1、光刻ROM其中的64位序列號是出廠前被光刻好的,它可以看作DS18B20的地址序TEMPERATTREDI

22、GITAL OUTPUT(Bin a it)DIGITAL Ol IPLT2儲,并通:式如下、溫度傳感器。該局部可以完成對溫度的測量,16過顯示器當(dāng)0 IH 00uC 0 00010血示暫顯厶口定穩(wěn)XRUCCA2其溫;進行存存儲的格-O S0000 000 0000 10000008h-U.S表4M:1DS18B20i溫度值格式表mi mum 1000OOOOhEFFShbit7 -10 bit6 bit5bit4 1 1 】bit3 1bitlhitOEh-2S.0625111 1 100110 1111FE6FI1LS Byte23 -?2221121i2i 20 22i4C90h2322

23、21202-12-22-32-4hit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8MS Byte表4-2: DS18B20溫度數(shù)據(jù)表3、配置存放器。該字節(jié)各位的意義如下:TMR1R011111低五位一直都是"1" , TM是測試模式位,用于設(shè)置 DS18B2C在工作模式還是在測 試模式。在DS18B2C出廠時該位被設(shè)置為0,用 戶不要去改動。R1和R0用來設(shè)置分辨 率,如下表所示:表4-3 :溫度分辨率設(shè)置表R1R0分辨率溫度最大轉(zhuǎn)換時間009位93.75ms0110位187.5ms1011位375ms1112位750ms4.2.4

24、溫度測量的軟件設(shè)計軟件設(shè)計是使用VHDL語言與圖形輸入相結(jié)合的方法,clkl提供了系統(tǒng)工作時鐘,data提供控制信號,DC為傳感器傳入數(shù)據(jù)的接口, TEM助輸出信號,送到顯示器顯示。軟件設(shè)計程序見附錄。圖4-8DS18B20與FPGA通信圖4.3 校時控制模塊電路設(shè)計與實現(xiàn)4.3.1鍵盤接口電路原理校時控制模塊在本系統(tǒng)中也就是鍵盤接口電路局部。下面先介紹鍵盤接口電路的工作原理,如圖4-9。本系統(tǒng)采用的就是這種行列式鍵盤接口,相對個按鍵的鍵盤接口來 說節(jié)省了 I/O接口。其中行線與列線分別與按鍵的兩端相連。在查詢工作方式中判斷是 否有按鍵按下的方法是:先有響應(yīng)的I/O接口將列線輸出為0電平,在由

25、相應(yīng)的I/O接 口將所有的行線結(jié)果讀入到控制器中。假設(shè)有行線輸入為0,那么有鍵按下,反之,那么沒有鍵按下。如果發(fā)現(xiàn)有按鍵按下界限來就是通過安檢掃描來確定是哪個按鍵被按下,鍵盤掃描的過程是依次輪流將列線輸出為 0電平,然后再檢查各行線的狀態(tài)。假設(shè)某行線輸入為 0,組對應(yīng)的該行線與該列線的按鍵被按下,即可確定對應(yīng)的鍵號。圖4-9鍵盤接口電路4.3.2 鍵盤接口的VHDL苗述(1) .按鍵消抖本系統(tǒng)采用的是軟件消抖的方法去除按鍵抖動,根本原理是:首先判斷有沒有按 鍵按下,如發(fā)現(xiàn)有按鍵按下那么延時一段時間,在判斷是否有按鍵按下的信號,如果有那么 確定有按鍵按下,就產(chǎn)生一個有按鍵按下的信號。這樣就消除了

26、按鍵的機械抖動。該模 塊的邏輯框圖如圖4-10所示。1Cl_K J-ke r _ pke1RO ME H OJS.圖4-10去抖邏輯框圖該電路的VHDI程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.stdo gic_arith.all;use ieee.std_logic_ un sig ned.all;en tity qudou isport(clk1:in std_logic;row:in std_logic_vector(3 downto 0);key_pre:out std_logic);end qudou;archite

27、cture behav of qudou issignal sig1,counter:std_logic_vector(3 downto 0);signal tmp1,sig2:std_logic;beginsig1<=row;tmp1<=sig1(0)and sig1(1)and sig1(2)and sig1(3);key_pre<=counter(0)and counter(1)and counter(2)and counter(3); process(clk1)beginif(clk1'event and clk1='1')thenif(tmp

28、1='0')thenif(sig2='0')thensig2<='1'end if;end if;if(sig2='1')thenif(counter="1111")thensig2<='0'counter<="0000"elsecoun ter<=co un ter+'1'end if;end if;end if;end process;end behav;(2) .鍵掃描模塊鍵掃描模塊的框圖如圖4-11所示AJSH:;CLKYCOM

29、E 3_ 03;G O O E |T "3?-OJn 51母-圖4-11按鍵掃描模塊CLKY是由分頻器模塊分出的4MHZ的輸入時鐘信號,因為鍵掃描是一個比擬快的過 程所以這里采用的是頻率較高的時鐘信號。Key_pre是去抖模塊輸出的有按鍵按下的信號作為啟動按鍵掃描的使能信號。ROW3.0與鍵盤的行線相連,COM3.0與鍵盤的列 線相連。SCAN_CODE7.0輸出被按下鍵的鍵碼。鍵盤掃描程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.stdo gic_arith.all;use ieee.std_logic_ un sig

30、 ned.all;en tity ajsm isport(clky,key_pre:in std_logic;row:in std_logic_vector(3 downto 0);com:out std_logic_vector(3 downto 0);scan_code:out std_logic_vector(7 downto 0); end ajsm;architecture behav of ajsm issignal sig_com:std_logic_vector(3 downto 0);signal counter:std_logic_vector(1 downto 0);si

31、gnal tmp,sig1,sig2:std_logic;beginsig2<=key_pre;tmp<=row(0) and row(1) and row(2) and row(3); process(clky) begin計數(shù)進程if(clky'event and clky='1')then-if(sig2='1')thenif(counter="11")thensig1<='0'counter<="00"elsesig1<='1'counter&l

32、t;=counter+'1'end if;end if;end if;end process;列線逐位輸出低電平process(clky) -variable jt :std_logic;beginif(clky'event and clky='1')thenif(sig1='1')thenjt:=sig_com(3);for i in 3 downto 1 loopsig_com(i)<=sig_com(i-1);end loop;sig_com(0)<=jt;elsesig_com<="1110"

33、end if;end if;end process;process(clky)beginif(clky'event and clky='1')thenif(sig1='1')thencom<=sig_com;elsecom<="0000"end if;end if;end process;process(clky) - 鍵碼信號賦值beginif(clky'event and clky='1')thenif(sig1='1')thenif(tmp='0')thensc

34、an_code<=row & sig_com;elsescan_code<="11111111"end if;elsescan_code<="11111111"end if;end if;end process;end behav;(3) . 鍵碼轉(zhuǎn)換模塊該模塊框圖如圖 4-12 所示。模塊主要完成從鍵掃描碼到按鍵編碼的轉(zhuǎn)換。JMZHKE ¥_COD£r3= -SC RM_CODE HL T-OJ乩 ii i i u an h i u tiiu n i i n 圖4-12 鍵碼轉(zhuǎn)換模塊邏輯框圖鍵碼轉(zhuǎn)換的核心程

35、序如下:library ieee;use ieee.std_logic_1164.all;use ieee.stdo gic_arith.all;use ieee.std_logic_ un sig ned.all;en tity jmzh isport(clky:in stdogic;scan_code:in std_logic_vector(7 downto 0);key_code:out stdogic_vector(3 downto 0); end jmzh;architecture behav of jmzh isbeg inprocess(clky)beg inif(clky

36、9;event and clky='1')thencase sca n_code iswhen "11101110"=>key_code<="0000"when "11101101"=>key_code<="0001"when "11101011"=>key_code<="0010"when "11100111"=>key_code<="0011"when "11

37、011110"=>key_code<="0100"when "11011101"=>key_code<="0101"when "11011011"=>key_code<="0110"when "11010111"=>key_code<="0111"when "10111110"=>key_code<="1000"when "1011110

38、1"=>key_code<="1001"when "10111011"=>key_code<="1010"when "10110111"=>key_code<="1011"when "01111110"=>key_code<="1100"when "01111101"=>key_code<="1101"when "01111011&quo

39、t;=>key_code<="1110"when others =>key_code<="1111"end case;end if;end process;end behav;程序中采用 case 語句進行按鍵編碼,也可以用 elsif 語句實現(xiàn)此段程序設(shè)計。 完整的鍵盤程序應(yīng)加上剛開始介紹的分頻模塊, 鍵盤接口電路總的邏輯連接框圖如 圖 4-13 所示。MinonME NLRER 3 . L羅B E3 - - &3MH ID DC AMDE GI-圖4-14秒計數(shù)模塊框圖4.圖4-13鍵盤接口連接框圖4.4 計數(shù)模塊的設(shè)

40、計與實現(xiàn)4.4.1 秒計數(shù)模塊秒計數(shù)模塊邏輯框圖如圖4-14所示。輸入端口 ENL是整個日歷的使能信號也是秒計數(shù)器的使能信號,高電平有效; CLK 是秒脈沖輸入端口; RES是異步清零信號;MAD和MDE是同步校時控制信號,MAD是 控制秒信號加一,MDE是控制秒信號減一;輸出端口 A3.O是秒時鐘的低位,B3.O是高位;CA端口是進位輸出端口,當(dāng)秒計數(shù)到59時輸出高電平,其它時候輸出低電平秒計數(shù)模塊的程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity miao is port

41、(enl,res,clk,madd,mdec:in std_logic;a,b:out std_logic_vector(3 downto 0); ca:out std_logic);end miao;architecture SEC of miao is beginprocess(enl,clk,res)variable m0,m1:std_logic_vector(3 downto 0); beginif res='1' then m0:="0000"m1:="0000"ca<='0'elsif clk'

42、event and clk='1' thenca<='0'if madd='1' or enl='1' then實際是第 59 個 - 脈if m0="1000" and m1="0101" then ca<='1' -end if;if m0<"1001" then m0:=m0+1;else m0:="0000"m1:=m1+1;if m1>"0101" then m0:="00

43、00"m1:="0000"ca<='0'end if;end if;elsif mdec='1' thenif m0="0000" and m1="0000" then m0:="1001"m1:="0101"elsif m0>"0000" then m0:=m0-1;else m0:="1001"m1:=m1-1;end if;end if;end if;a<=m0;b<=m1;end p

44、rocess;end SEC;秒時鐘的仿真波形圖如圖 4-15 所示,仿真圖滿足設(shè)計的要求。分計數(shù)和時計數(shù)模 第 25 頁 共 37 頁塊的設(shè)計原理與秒模塊的類似時3 i2usbh Ti-B- Il501 On?| miEWBi" |-卩呂hlarriE.電tOO.OwiBTQQ.drasBQQ Cris%0.ms1護l.luaI2US1-3USL電resMH* mcSecmaddenBH* ClkC3P bJ Q|H 43 04.4.2 日計數(shù)模塊1000-1D5wwumnnnwinnnniuuwumimnwmnjwimumnmind 山ilh . 詞*. 諭皿 生 rrf 占口

45、li h d* 斷鼻 d 局.h鼬1 £ qj圖4-15秒時鐘仿真波形由于一年中各個月份的日的長短不同,共有28、29、30和31天四種情況,可知日由年和月共同決定,如表4-1。年中0表示閏年,1表示平年;月中0表示1、2、3、5、 7、8、10和12月,1表示其它月份;二月中1表示2月,0表示其它月份。表4-1日長短邏輯表年月二月日SEL0SEL1SEL200010031010110300012910128011111日計數(shù)模塊的邏輯框圖如圖4-16所示輸入引腳SEL2.O是決定日長短的輸入信號,其它信號功能與秒計數(shù)模塊功能類似。日計數(shù)模塊的核心程序如下:library ieee;

46、use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ri isport(enl,res,clk,radd,rdec:in std_logic;sel:in std_logic_vector(2 downto 0);a,b:out std_logic_vector(3 downto 0);ca:out std_logic);end ri;architecture SEC of ri issignal sr0,sr1:std_logic_vector(3 downto 0);beginprocess(sel)begi

47、nif sel="001" then sr0<="0001"sr1<="0011"end if;if sel="011" then sr0<="0000"sr1<="0011"end if;if sel="100" then sr0<="1001"sr1<="0010"if sel="101" then sr0<="1000"sr1&l

48、t;="0010"end if;end process;process(enl,clk,res)variable r0,r1:std_logic_vector(3 downto 0); beginif res='1' then r0:="0000"r1:="0000"ca<='0'elsif clk'event and clk='1' thenca<='0'if radd='1' or enl='1' thenif r0

49、=sr0 and r1=sr1 then r0:="0001"r1:="0000"ca<='1'elsif r0<"1001" then r0:=r0+1; ca<='0'else r0:="0000"r1:=r1+1;end if;elsif rdec='1' thenif r0="0001" and r1="0000" then r0:=sr0;第 28 頁 共 37 頁r1:=sr1;elsif r0&g

50、t;"0000" then r0:=r0-1;else r0:="1001"r1:=r1-1;end if;end if;end if;a<=r0;b<=r1;end process;end SEC;程序中第一個進程主要是對日的長短的設(shè)置,sr0和sr1分別是日的低位和高位的信號,它們的值由輸入sel2.0 決定。sel0由年計數(shù)模塊輸入,sel1和sel2由月計數(shù)模塊輸入。第二個進程主要實現(xiàn)計數(shù)和加減控制。日計數(shù)模塊的時序仿真圖如圖4-17所示,仿真圖滿足設(shè)計的要求。圖4-17日計數(shù)仿真時序圖443月計數(shù)和年計數(shù)模塊(1).月計數(shù)模塊邏輯框

51、圖如圖4-18所示。輸出ERYU端口接日模塊的sel2,丫SEL 端口接sel1。其VHDLg序描述見附錄。YUE:Em 二©JREB E 3 . - OJ1C l_KE R Y UELTOE GV 5 E IL.COl=Lb J 圖4-18月計數(shù)邏輯框圖其仿真時序圖如圖4-19所示。仿真圖中有毛刺出現(xiàn),但并不會對本模塊的計數(shù) 產(chǎn)生影響,滿足本設(shè)計的需要。年計數(shù)模塊的邏輯框圖如圖 4-20所示。年計數(shù)模塊的輸出 NSEL端口接日模 塊的selO。其它端口的功能與上述模塊類似。其 VHDL苗述見附錄。其仿真時序圖如圖4-21所示,滿足設(shè)計的要求Ha:吐20C欝0;0超GOCJmGOD.

52、iys1 i- :. . . . , . . . . , .ndec-0+ n詁qe<iliA誹ImmnnmnmrLomjwinwinnRnnjinjrnnp (11«i UL2i。叩qDDDTbp :iD3o r1r2i3 aP 0D7廠:于卩三廠斤三丁:一LFT廠壬一一門口亍匸:冗廳:廳尺口二圖4-21年模塊仿真時序圖4.5 動態(tài)掃描及顯示電路設(shè)計與實現(xiàn)4.5.1 動態(tài)掃描模塊該模塊的主要功能是將計數(shù)器的輸出轉(zhuǎn)換為能夠作為數(shù)碼管的邏輯狀態(tài)碼,并且產(chǎn)生數(shù)碼管的片選信號和位選信號。動態(tài)掃描方式就是一次只顯示一位 LED顯示快的數(shù)據(jù), 其它位不顯示,然后逐一的顯示其他位的數(shù)據(jù),只

53、要每一位顯示的時間間隔不要太大, 這樣由于人眼的視覺暫留現(xiàn)象,看上去好似所有的數(shù)碼管都在同時顯示著自己相對于的 數(shù)據(jù),只是如果帶動的數(shù)碼管比擬多的話就會導(dǎo)致數(shù)碼管的亮度不高。圖4-22動態(tài)掃描邏輯框圖顯示模塊本系統(tǒng)選擇7448作為顯示譯碼電路,選擇數(shù)碼管作為顯示單元電路。計數(shù)器實現(xiàn) 了計時的功能并以 8421BCD碼的形式輸送到數(shù)碼管掃描模塊,再由其輸出的端送到 7448,將BCD碼轉(zhuǎn)換為七段碼,再由數(shù)碼管顯示出來。數(shù)碼管位選連接電路4-23所示。dllUt31:£1疋廣心rnj=F*I3NrrrpxJ/JiVl H 1"口A FF仃,5 n 屮淚6C&T0 7SO

54、doyt 訂 dy ,1_ dmr bcllef *us5trwQ Titsg吉 曬亦 Ih y'-HI hrz 朋 fifl td0廠F£C<DLINdEII審BNICSnBO iWr-匚WAB: K -sessf三4><B!|ji-l> h*r |! K bti-LOI'r圖4-23數(shù)碼管位選實現(xiàn)電路5.調(diào)試與驗證調(diào)試是驗證系統(tǒng)功能是否得以實現(xiàn)以及實現(xiàn)的情況。本次設(shè)計中綜合使用了MAX+PLUS II軟件的文本輸入方式和圖形輸入方式,在每種方式下都需要對各個步驟進 行調(diào)試以便觀察結(jié)果。在文本輸入方式下,編寫的程序需要通過編譯才能進行波形仿真

55、、 驗證功能的實現(xiàn)以及封裝成元器件。然后在圖形輸入方式下,對頂層文件進行仿真驗證, 系統(tǒng)所要求的功能得到成功實現(xiàn)后就可以下載到試驗箱上進行硬件驗證了。經(jīng)過編譯、 仿真和硬件驗證三個步驟,系統(tǒng)的調(diào)試根本完成了。5.1 編譯MAX+PLUS II的編譯器會檢測輸入文檔是否有語法或邏輯錯誤,然后配置到一個Altera器件中,所有的信息、錯誤和警告將在自動翻開的MessageProcessor信息處理窗口中顯示出來。如果發(fā)現(xiàn)錯誤,按下Locate按鈕即可選中該錯誤,并且可以看到該錯誤出現(xiàn)的位置。如果在編譯時出現(xiàn)警告,那么表示程序中某些參數(shù)設(shè)置的不合理,這需 要及時的糾正,不然就會影響后面的操作。在對文

56、本文件進行編譯時,有三個問題需要特別關(guān)注的,一是完成文本輸入后,要對文本文件進行保存,保存時文件名要與實體名相同,后綴名為.vhd。二是要注意將文件設(shè)為工程文件。三是不能將設(shè)計文件存入根目錄。在設(shè)計檢測過程中,需要對每個模塊都進行編譯。由于程序較多,很容易出現(xiàn)錯誤。除了一些顯而易見的語法錯誤,還有一些失誤。例如在設(shè)計中忘記將設(shè)計文件的后綴選 為.vhd ;忘記在建立波形仿真文件時建立工程文件了;還有在保存文本文件時沒有把文 件名設(shè)置成實體名,如實體名為 zuoz 錯存為 zuo.vhd 。當(dāng)編譯沒有錯誤,沒有警告時, 就可以建立波形仿真圖了。不要小看這些小的錯誤,可能會釀成大錯的。所以我們在編

57、 寫程序的時候就要更加小心。5.2 編程下載如果以上的仿真測試正確無誤,就將設(shè)計編程下載進選定的目標(biāo)器件 EPF10K1C中, 作進一步的硬件測試,以便最終了解設(shè)計工程的正確性。這就必須根據(jù)評估板、開發(fā)電 路系統(tǒng)或EDA實驗板的要求對設(shè)計工程輸入輸出引腳賦予確定的引腳,以便能夠?qū)ζ溥M行檢測。5.2.1 電路選擇本次設(shè)計使用GW4型EDA實驗開發(fā)系統(tǒng)。GW48型 EDA實驗開發(fā)系統(tǒng)廣泛應(yīng)用于數(shù)字電路課程設(shè)計的硬件驗證。GW48型 EDA實驗開發(fā)系統(tǒng)有以下特點:1該EDA實驗開發(fā)系統(tǒng)設(shè)有通用在系統(tǒng)編程下載 ASIC器件,可對Lattice、Xilinx、Altera、Vantis、Atmel和Cypress世界六大PLD商和各種isp編程下載方式 或現(xiàn)場配置的FPGA/CPL各系列器件進行識別、實驗或開發(fā);主系統(tǒng)板與目標(biāo)芯片板采 用接插式結(jié)構(gòu),動態(tài)電路結(jié)構(gòu)自動切換工作方式,可自動切換 12 種實驗電路結(jié)構(gòu)模式。2GW48系列具備對不同芯核電壓5V、3.3V、1.8V、1.5V的FPGA/CPL器件 進行實驗、開發(fā)和編程下載。3該實驗開發(fā)系統(tǒng)除具有豐富的實驗資源外,還擴展了 A/D、D/A、VGA視頻、 PS/2接口、RS232通信、單片機獨立用戶系統(tǒng)編程下

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論