畢業(yè)設(shè)計(jì)論文基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)_第1頁(yè)
畢業(yè)設(shè)計(jì)論文基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)_第2頁(yè)
畢業(yè)設(shè)計(jì)論文基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)_第3頁(yè)
畢業(yè)設(shè)計(jì)論文基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)_第4頁(yè)
畢業(yè)設(shè)計(jì)論文基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)目錄TOC\o"1-4"\h\u摘要 1Abstract 2第一章 緒論 11.1. 選題意義與研究現(xiàn)實(shí)狀況 11.2. 國(guó)內(nèi)外研究及趨勢(shì) 11.3. 論文構(gòu)造 2第二章 編程軟件及語(yǔ)言簡(jiǎn)介 32.1 QuartersII編程環(huán)境簡(jiǎn)介 32.1.1 菜單欄 32.1.2 工具欄 82.1.3 功能仿真流程 92.2 VerilogHDL語(yǔ)言介 102.2.1 什么是verilogHDL語(yǔ)言 102.2.2 重要功能 11第三章 數(shù)字化時(shí)鐘系統(tǒng)硬件設(shè)計(jì) 133.1 系統(tǒng)關(guān)鍵板電路分析 133.2 系統(tǒng)主板電路分析 153.2.1 時(shí)鐘模塊電路 153.2.2 顯示電路 153.2.3 鍵盤控制電路 173.2.4 蜂鳴電路設(shè)計(jì) 17第四章 數(shù)字化時(shí)鐘系統(tǒng)軟件設(shè)計(jì) 184.1 整體方案簡(jiǎn)介 184.1.1 整體設(shè)計(jì)描述 184.1.2 整體信號(hào)定義 194.1.3 模塊框圖 204.2 分頻模塊實(shí)現(xiàn) 204.2.1 分頻模塊描述 204.2.2 分頻模塊設(shè)計(jì) 204.2.3 分頻模塊仿真 214.3 計(jì)時(shí)模塊實(shí)現(xiàn) 214.3.1 計(jì)時(shí)模塊描述與實(shí)現(xiàn) 214.3.2 計(jì)時(shí)模塊仿真 234.4 按鍵處理模塊實(shí)現(xiàn) 234.4.1 按鍵處理模塊描述 234.4.2 按鍵去抖處理模塊設(shè)計(jì) 244.4.3 按鍵模塊去抖仿真 244.5 鬧鐘模塊實(shí)現(xiàn) 254.5.1 鬧鐘模塊設(shè)計(jì) 254.5.2 鬧鐘設(shè)定模塊仿真 254.6 蜂鳴器模塊實(shí)現(xiàn) 254.6.1 蜂鳴器模塊描述 254.6.2 蜂鳴器模塊實(shí)現(xiàn) 264.6.3 蜂鳴器模塊仿真 274.7 顯示模塊實(shí)現(xiàn) 274.7.1 顯示模塊描述 274.7.2 顯示模塊實(shí)現(xiàn) 274.7.3 顯示模塊仿真 29第五章 系統(tǒng)調(diào)試及運(yùn)行成果分析 305.1 硬件調(diào)試 305.2 軟件調(diào)試 315.3 調(diào)試過程及成果 315.4 調(diào)試注意事項(xiàng) 33第六章 總結(jié)和展望 345.5 總結(jié) 345.6 展望 34參照文獻(xiàn) 35致謝 36附錄 37緒論選題意義與研究現(xiàn)實(shí)狀況在這個(gè)時(shí)間就是金錢的年代里,數(shù)字電子鐘已成為人們生活中的必需品。目前應(yīng)用的數(shù)字鐘不僅可以實(shí)現(xiàn)對(duì)年、月、日、時(shí)、分、秒的數(shù)字顯示,還能實(shí)現(xiàn)對(duì)電子鐘所在地點(diǎn)的溫度顯示和智能鬧鐘功能,廣泛應(yīng)用于車站、醫(yī)院、機(jī)場(chǎng)、碼頭、廁所等公共場(chǎng)所的時(shí)間顯示。伴隨現(xiàn)場(chǎng)可編程門陣列(fieldprogram-mablegatearray,F(xiàn)PGA)的出現(xiàn),電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展的趨勢(shì)愈加明顯,作為可編程的集成度較高的ASIC,可在芯片級(jí)實(shí)現(xiàn)任意數(shù)字邏輯電路,從而可以簡(jiǎn)化硬件電路,提高系統(tǒng)工作速度,縮短產(chǎn)品研發(fā)周期。故運(yùn)用FPGA這一新的技術(shù)手段來研究電子鐘有重要的現(xiàn)實(shí)意義。設(shè)計(jì)采用FPGA現(xiàn)場(chǎng)可編程技術(shù),運(yùn)用自頂向下的設(shè)計(jì)思想設(shè)計(jì)電子鐘。防止了硬件電路的焊接與調(diào)試,并且由于FPGA的I/O端口豐富,內(nèi)部邏輯可隨意更改,使得數(shù)字電子鐘的實(shí)現(xiàn)較為以便。本課題使用CycloneEP1C6Q240的FPGA器件,完畢實(shí)現(xiàn)一種可以計(jì)時(shí)的數(shù)字時(shí)鐘。該系統(tǒng)具有顯示時(shí)、分、秒,智能鬧鐘,按鍵實(shí)現(xiàn)校準(zhǔn)時(shí)鐘,整點(diǎn)報(bào)時(shí)等功能。滿足人們得到精確時(shí)間以及時(shí)間提醒的需求,以便人們生活。國(guó)內(nèi)外研究及趨勢(shì)伴隨人們生活水平的提高和生活節(jié)奏的加緊,對(duì)時(shí)間的規(guī)定越來越高,精確數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來越多。二十一世紀(jì)的今天,最具代表性的計(jì)時(shí)產(chǎn)品就是電子時(shí)鐘,它是近代世界鐘表業(yè)界的第三次革命。第一次是擺和擺輪游絲的發(fā)明,相對(duì)穩(wěn)定的機(jī)械振蕩頻率源使鐘表的走時(shí)差從分級(jí)縮小到秒級(jí),代表性的產(chǎn)品就是帶有擺或擺輪游絲的機(jī)械鐘或表。第二次革命是石英晶體振蕩器的應(yīng)用,發(fā)明了走時(shí)精度更高的石英電子鐘表,使鐘表的走時(shí)月差從分級(jí)縮小到秒級(jí)。第三次革命就是單片機(jī)數(shù)碼計(jì)時(shí)技術(shù)的應(yīng)用,使計(jì)時(shí)產(chǎn)品的走時(shí)日差從分級(jí)縮小到1/600萬(wàn)秒,從原有老式指針計(jì)時(shí)的方式發(fā)展為人們平常更為熟悉的夜光數(shù)字顯示方式,直觀明了,并增長(zhǎng)了全自動(dòng)日期、星期的顯示功能,它更符合消費(fèi)者的生活需求!因此,電子時(shí)鐘的出現(xiàn)帶來了鐘表計(jì)時(shí)業(yè)界跨躍性的進(jìn)步。我國(guó)生產(chǎn)的電子時(shí)鐘有諸多種,總體上來說以研究多功能電子時(shí)鐘為主,使電子時(shí)鐘除了原有的顯示時(shí)間基本功能外,還具有鬧鈴,報(bào)警等功能。商家生產(chǎn)的電子時(shí)鐘更從質(zhì)量,價(jià)格,實(shí)用上考慮,不停的改善電子時(shí)鐘的設(shè)計(jì),使其愈加的具有市場(chǎng)。論文構(gòu)造第一章詳細(xì)論述了近些年來,數(shù)字化時(shí)鐘系統(tǒng)研究領(lǐng)域的動(dòng)態(tài)及整個(gè)數(shù)字化時(shí)鐘系統(tǒng)的發(fā)展?fàn)顩r,同步分析了所面臨的問題與處理方案,從而提出了本論文的研究任務(wù)。第二章從研究任務(wù)著手,選擇符合設(shè)計(jì)規(guī)定的常用芯片及其他元器件,詳細(xì)論述了各接口電路的設(shè)計(jì)與連接,以模塊化的形式,整合數(shù)字化時(shí)鐘硬件的設(shè)計(jì)從小到大,從局部到整體,循序漸進(jìn),最終實(shí)現(xiàn)一種功能齊全的數(shù)字化時(shí)鐘系統(tǒng)。第三章根據(jù)系統(tǒng)設(shè)計(jì)規(guī)定,著手對(duì)數(shù)字化時(shí)鐘系統(tǒng)軟件進(jìn)行功能的實(shí)現(xiàn),將各功能模塊有機(jī)結(jié)合,實(shí)現(xiàn)時(shí)鐘走時(shí),實(shí)現(xiàn)鬧鈴、整點(diǎn)報(bào)時(shí)附加功能。第四章按照設(shè)計(jì)思緒,在聯(lián)機(jī)調(diào)試過程中,對(duì)時(shí)鐘系統(tǒng)的局限性和缺陷進(jìn)行分析,將調(diào)試過程作重點(diǎn)的記錄。第五章對(duì)全文的總結(jié),對(duì)本系統(tǒng)功能實(shí)現(xiàn)以及制作過程中需要注意的方面,及整個(gè)系統(tǒng)軟件編寫中所吸取的經(jīng)驗(yàn)教訓(xùn)進(jìn)行論述,同步,也對(duì)整個(gè)研究應(yīng)用進(jìn)行展望。

編程軟件及語(yǔ)言簡(jiǎn)介QuartersII編程環(huán)境簡(jiǎn)介運(yùn)行環(huán)境設(shè)計(jì)采用quartusII軟件實(shí)現(xiàn),因此針對(duì)軟件需要用到的某些功能在這里進(jìn)行描述.QuartusII軟件界面簡(jiǎn)樸易操作,如下圖2.1:圖2.1QuartusII軟件界面圖菜單欄【File】菜單QuartusII的【File】菜單除具有文獻(xiàn)管理的功能外,尚有許多其他選項(xiàng)圖2.2QuartusII菜單欄圖(1)【New】選項(xiàng):新建工程或文獻(xiàn),其下尚有子菜單 【NewQuartusIIProject】選項(xiàng):新建工程。 【DesignFile】選項(xiàng):新建設(shè)計(jì)文獻(xiàn),常用的有:AHDL文本文獻(xiàn)、VHDL文本文獻(xiàn)、VerilogHDL文本文獻(xiàn)、原理圖文獻(xiàn)等。 【VectorWaveformFive】選項(xiàng):矢量波形文獻(xiàn)。(2)【Open】選項(xiàng):打開一種文獻(xiàn)。(3)【NewProjectWizard】選項(xiàng):創(chuàng)立新工程。點(diǎn)擊后彈出對(duì)話框。單擊對(duì)話框最上第一欄右側(cè)的“…”按鈕,找到文獻(xiàn)夾已存盤的文獻(xiàn),再單擊打開按鈕,既出現(xiàn)如圖所示的設(shè)置狀況。對(duì)話框中第一行表達(dá)工程所在的工作庫(kù)文獻(xiàn)夾,第二行表達(dá)此項(xiàng)工程的工程名,第三行表達(dá)頂層文獻(xiàn)的實(shí)體名,一般與工程名相似。圖2.3QuartusII新建工程圖(4)【creat/update】選項(xiàng):生成元件符號(hào)??梢詫⒃O(shè)計(jì)的電路封裝成一種元件符號(hào),供后來在原理圖編輯器下進(jìn)行層次設(shè)計(jì)時(shí)調(diào)用?!綱iew】菜單:進(jìn)行全屏顯示或?qū)Υ翱谶M(jìn)行切換,包括層次窗口、狀態(tài)窗口、消息窗口等。圖2.4QuartusII菜單欄全屏切換圖【Assignments】菜單(1)【Device】選項(xiàng):為目前設(shè)計(jì)選擇器件。(2)【Pin】選項(xiàng):為目前層次樹的一種或多種邏輯功能塊分派芯片引腳或芯片內(nèi)的位置。(3)【TimingAnanlysisSetting】選項(xiàng):為目前設(shè)計(jì)的tpd、tco、tsu、fmax等時(shí)間參數(shù)設(shè)定期序規(guī)定。(4)【EDAtoolsetting】選項(xiàng):EDA設(shè)置工具。使用此工具可以對(duì)工程進(jìn)行綜合、仿真、時(shí)序分析,等等。EDA設(shè)置工具屬于第三方工具。(5)【Setting】選項(xiàng):設(shè)置控制??梢允褂盟鼘?duì)工程、文獻(xiàn)、參數(shù)等進(jìn)行修改,還可以設(shè)置編譯器、仿真器、時(shí)序分析、功耗分析等。(6)【assignmenteditor】選項(xiàng):任務(wù)編輯器。(7)【pinplanner】選項(xiàng):可以使用它將所設(shè)計(jì)電路的I/O引腳合理的分派到已設(shè)定器件的引腳上。圖2.5QuartusII菜單欄設(shè)定引腳下拉圖【processing】菜單【processing】菜單的功能是對(duì)所設(shè)計(jì)的電路進(jìn)行編譯和檢查設(shè)計(jì)的對(duì)的性。(1)【Stopprocess】選項(xiàng):停止編譯設(shè)計(jì)項(xiàng)目。(2)【StartCompilation】選項(xiàng):開始完全編譯過程,這里包括分析與綜合、適配、裝配文獻(xiàn)、定期分析、網(wǎng)表文獻(xiàn)提取等過程。(3)【analyzecurrentfile】選項(xiàng):分析目前的設(shè)計(jì)文獻(xiàn),重要是對(duì)目前設(shè)計(jì)文件的語(yǔ)法、語(yǔ)序進(jìn)行檢查。(4)【compilationreport】選項(xiàng):適配信息匯報(bào),通過它可以查看詳細(xì)的適配信息,包括設(shè)置和適配成果等。(5)【startsimulation】選項(xiàng):開始功能仿真。(6)【simulationreport】選項(xiàng):生成功能仿真匯報(bào)。(7)【compilertool】選項(xiàng):它是一種編譯工具,可以有選擇對(duì)項(xiàng)目中的各個(gè)文件進(jìn)行分別編譯。(8)【simulationtool】選項(xiàng):對(duì)編譯過電路進(jìn)行功能仿真和時(shí)序仿真。(9)【classictiminganalyzertool】選項(xiàng):classic時(shí)序仿真工具。(10)【powerplaypoweranalyzertool】選項(xiàng):PowerPlay功耗分析工具。圖2.6QuartusII菜單欄運(yùn)行下拉圖【tools】菜單【tools】菜單的功能是(1)【runEDAsimulationtool】選項(xiàng):運(yùn)行EDA仿真工具,EDA是第三方仿真工具。(2)【runEDAtiminganalyzertool】選項(xiàng):運(yùn)行EDA時(shí)序分析工具,EDA是第三方仿真工具。(3)【Programmer】選項(xiàng):打開編程器窗口,以便對(duì)Altera的器件進(jìn)行下載編程。圖2.7QuartusII仿真菜單下拉圖工具欄工具欄緊鄰菜單欄下方,它其實(shí)是各菜單功能的快捷按鈕組合區(qū)。2.8QuartusII菜單欄圖圖2.9QuartusII菜單欄按鍵功能圖功能仿真流程新建仿真文獻(xiàn)圖2.10QuartusII菜單欄新建文獻(xiàn)夾圖功能方正操作在菜單上點(diǎn)processing在下拉菜單中,如下圖:圖2.11QuartusII菜單欄processing下拉圖VerilogHDL語(yǔ)言介什么是verilogHDL語(yǔ)言VerilogHDL是一種硬件描述語(yǔ)言,用于從算法級(jí)、門級(jí)到開關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對(duì)象的復(fù)雜性可以介于簡(jiǎn)樸的門和完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)可以按層次描述,并可在相似描述中顯式地進(jìn)行時(shí)序建模。VerilogHDL語(yǔ)言具有下述描述能力:設(shè)計(jì)的行為特性、設(shè)計(jì)的數(shù)據(jù)流特性、設(shè)計(jì)的構(gòu)造構(gòu)成以及包括響應(yīng)監(jiān)控和設(shè)計(jì)驗(yàn)證方面的時(shí)延和波形產(chǎn)生機(jī)制。所有這些都使用同一種建模語(yǔ)言。此外,VerilogHDL語(yǔ)言提供了編程語(yǔ)言接口,通過該接口可以在模擬、驗(yàn)證期間從設(shè)計(jì)外部訪問設(shè)計(jì),包括模擬的詳細(xì)控制和運(yùn)行。VerilogHDL語(yǔ)言不僅定義了語(yǔ)法,并且對(duì)每個(gè)語(yǔ)法構(gòu)造都定義了清晰的模擬、仿真語(yǔ)義。因此,用這種語(yǔ)言編寫的模型可以使用Verilog仿真器進(jìn)行驗(yàn)證。語(yǔ)言從C編程語(yǔ)言中繼承了多種操作符和構(gòu)造。VerilogHDL提供了擴(kuò)展的建模能力,其中許多擴(kuò)展最初很難理解。不過,VerilogHDL語(yǔ)言的關(guān)鍵子集非常易于學(xué)習(xí)和使用,這對(duì)大多數(shù)建模應(yīng)用來說已經(jīng)足夠。當(dāng)然,完整的硬件描述語(yǔ)言足以對(duì)從最復(fù)雜的芯片到完整的電子系統(tǒng)進(jìn)行描述。重要功能下面列出的是Verilog硬件描述語(yǔ)言的重要能力:基本邏輯門,例如and、or和nand等都內(nèi)置在語(yǔ)言中。顧客定義原語(yǔ)(UP)創(chuàng)立的靈活性。顧客定義的原語(yǔ)既可以是組合邏輯原語(yǔ),也可以是時(shí)序邏輯原語(yǔ)。開關(guān)級(jí)基本構(gòu)造模型,例如pmos和nmos等也被內(nèi)置在語(yǔ)言中。提供顯式語(yǔ)言構(gòu)造指定設(shè)計(jì)中的端口到端口的時(shí)延及途徑時(shí)延和設(shè)計(jì)的時(shí)序檢查??刹捎萌N不一樣方式或混合方式對(duì)設(shè)計(jì)建模。這些方式包括:行為描述方式—使用過程化構(gòu)造建模;數(shù)據(jù)流方式—使用持續(xù)賦值語(yǔ)句方式建模;構(gòu)造化方式—使用門和模塊實(shí)例語(yǔ)句描述建模。VerilogHDL中有兩類數(shù)據(jù)類型:線網(wǎng)數(shù)據(jù)類型和寄存器數(shù)據(jù)類型。線網(wǎng)類型表達(dá)構(gòu)件間的物理連線,而寄存器類型表達(dá)抽象的數(shù)據(jù)存儲(chǔ)元件??梢悦枋鰧哟卧O(shè)計(jì),可使用模塊實(shí)例構(gòu)造描述任何層次。設(shè)計(jì)的規(guī)??梢允侨我獾?;語(yǔ)言不對(duì)設(shè)計(jì)的規(guī)模(大?。┦┘尤魏蜗拗啤erilogHDL不再是某些企業(yè)的專有語(yǔ)言而是IEEE原則。人和機(jī)器都可閱讀Verilog語(yǔ)言,因此它可作為EDA的工具和設(shè)計(jì)者之間的交互語(yǔ)言。VerilogHDL語(yǔ)言的描述能力可以通過使用編程語(yǔ)言接口(PLI)機(jī)制深入擴(kuò)展。PLI是容許外部函數(shù)訪問Verilog模塊內(nèi)信息、容許設(shè)計(jì)者與模擬器交互的例程集合。設(shè)計(jì)可以在多種層次上加以描述,從開關(guān)級(jí)、門級(jí)、寄存器傳送級(jí)(RTL)到算法級(jí),包括進(jìn)程和隊(duì)列級(jí)??梢允褂脙?nèi)置開關(guān)級(jí)原語(yǔ)在開關(guān)級(jí)對(duì)設(shè)計(jì)完整建模。同一語(yǔ)言可用于生成模擬鼓勵(lì)和指定測(cè)試的驗(yàn)證約束條件,例如輸入值的指定。VerilogHDL可以監(jiān)控模擬驗(yàn)證的執(zhí)行,即模擬驗(yàn)證執(zhí)行過程中設(shè)計(jì)的值可以被監(jiān)控和顯示。這些值也可以用于與期望值比較,在不匹配的狀況下,打印匯報(bào)消息。在行為級(jí)描述中,VerilogHDL不僅可以在RTL級(jí)上進(jìn)行設(shè)計(jì)描述,并且可以在體系構(gòu)造級(jí)描述及其算法級(jí)行為上進(jìn)行設(shè)計(jì)描述。可以使用門和模塊實(shí)例化語(yǔ)句在構(gòu)造級(jí)進(jìn)行構(gòu)造描述。如圖顯示了VerilogHDL的混合方式建模能力,即在一種設(shè)計(jì)中每個(gè)模塊均可以在不一樣設(shè)計(jì)層次上建模。VerilogHDL還具有內(nèi)置邏輯函數(shù),例如&(按位與)和|(按位或)。對(duì)高級(jí)編程語(yǔ)言構(gòu)造,例如條件語(yǔ)句、狀況語(yǔ)句和循環(huán)語(yǔ)句,語(yǔ)言中都可以使用??梢燥@式地對(duì)并發(fā)和定期進(jìn)行建模。提供強(qiáng)有力的文獻(xiàn)讀寫能力。語(yǔ)言在特定狀況下是非確定性的,即在不一樣的模擬器上模型可以產(chǎn)生不一樣的成果;例如,事件隊(duì)列上的事件次序在原則中沒有定義。圖2.12混合設(shè)計(jì)層次圖

數(shù)字化時(shí)鐘系統(tǒng)硬件設(shè)計(jì)系統(tǒng)關(guān)鍵板電路分析本系統(tǒng)采用的開發(fā)平臺(tái)標(biāo)配的關(guān)鍵板是QuickSOPC,可以實(shí)現(xiàn)EDA、SOP和DSP的試驗(yàn)及研發(fā)。本系統(tǒng)采用QuickSOPC原則配置為Altera企業(yè)的EP1C6Q240C8芯片。關(guān)鍵板的硬件資源關(guān)鍵板采用4層板精心設(shè)計(jì),采用120針接口。QuickSOPC關(guān)鍵板的硬件原理框圖如圖2-1所示:圖3.1QuickSOPC硬件方塊圖FPGA電路關(guān)鍵板QuickSOPC上所用的FPGA為Altera企業(yè)Cyclone系列的EP1C6Q240。EP1C6Q240包具有5980個(gè)邏輯單元和92Kbit的片上RAM。EP1C6Q240有185個(gè)顧客I/O口,封裝為240-PinPQFP。關(guān)鍵板EP1C6Q240器件特性如表2-1。表3-1關(guān)鍵EP1C6Q240器件特性:特性關(guān)鍵板EP1C6Q240器件邏輯單元(LE)5980M4KRAM塊20RAM總量(bit)92160PLL(個(gè))2最大顧客I/O數(shù)(個(gè))185配置二進(jìn)制文獻(xiàn)(.rbf)大?。╞it)1167216可選串行積極配置器件EPCS1/EPCS4/EPCS16配置電路CycloneFPGA的配置方式包括:積極配置模式、被動(dòng)配置模式以及JTAG配置模式。本系統(tǒng)采用的是JTAG配置模式下載配置數(shù)據(jù)到FPGA。通過JTAG成果,運(yùn)用QuartusII軟件可以直接對(duì)FPGA進(jìn)行單獨(dú)的硬件重新配置。QuartusII軟件在編譯時(shí)會(huì)自動(dòng)生成用于JTAG配置的.sof文獻(xiàn)。CycloneFPGA設(shè)計(jì)成的JTAG指令比其他任何器件操作模式的優(yōu)先級(jí)都高,因此JTAG配置可隨時(shí)進(jìn)行而不用等待其他配置模式完畢。JTAG模式使用4個(gè)專門的信號(hào)引腳:TDI、TDO、TMS以及TCK。JTAG的3個(gè)輸入腳TDI、TMS和TCK具有內(nèi)部弱上拉,上拉電阻大概為25kΩ。在JGTA進(jìn)行配置的時(shí)候,所有顧客I/O扣都為高阻態(tài)。時(shí)鐘電路FPGA內(nèi)部沒振蕩電路,使用有源晶振是比較理想的選擇。EP1C6Q240C8的輸入的時(shí)鐘頻率范圍為15.625~387MHz,通過內(nèi)部的PLL電路后可輸出15.625~275MHz的系統(tǒng)時(shí)鐘。當(dāng)輸入時(shí)鐘頻率較低時(shí),可以使用FPGA的內(nèi)部PLL調(diào)整FPGA所需的系統(tǒng)時(shí)鐘,使系統(tǒng)運(yùn)行速度更快。關(guān)鍵板包括一種48MHz的有源晶振作為系統(tǒng)的時(shí)鐘源。如圖2-2所示。為了得到一種穩(wěn)定、精確的時(shí)鐘頻率,有源晶振的供電電源通過了LC濾波。本系統(tǒng)硬件整體設(shè)計(jì)框圖如圖2-3所示:圖3.2數(shù)字時(shí)鐘系統(tǒng)硬件電路總體框圖系統(tǒng)主板電路分析時(shí)鐘模塊電路FPGA內(nèi)部沒振蕩電路,使用有源晶振是比較理想的選擇。EP1C6Q240C8的輸入的時(shí)鐘頻率范圍為15.625~387MHz,通過內(nèi)部的PLL電路后可輸出15.625~275MHz的系統(tǒng)時(shí)鐘。當(dāng)輸入時(shí)鐘頻率較低時(shí),可以使用FPGA的內(nèi)部PLL調(diào)整FPGA所需的系統(tǒng)時(shí)鐘,使系統(tǒng)運(yùn)行速度更快。關(guān)鍵板包括一種50MHz的有源晶振作為系統(tǒng)的時(shí)鐘源。為了得到一種穩(wěn)定、精確的時(shí)鐘頻率,有源晶振的供電電源通過了LC濾波。圖3.3系統(tǒng)時(shí)鐘電路圖顯示電路由于本設(shè)計(jì)需要顯示時(shí)間信息包括:時(shí)、分、秒,顯因此采用主板上七段數(shù)碼管顯示電路與系統(tǒng)連接實(shí)現(xiàn)顯示模塊的功能。主板上七段數(shù)碼管顯示電路如圖2-4所示,RP4和RP6是段碼上的限流電阻,位碼由于電流較大,采用了三極管驅(qū)動(dòng)。圖3.4七段數(shù)碼管顯示電路圖數(shù)碼管LED顯示是工程項(xiàng)目中使用較廣的一種輸出顯示屏件。常見的數(shù)管有共陰和共陽(yáng)2種。共陰數(shù)碼管是將8個(gè)發(fā)光二極管的陰極連接在一起作為公共端,而共陽(yáng)數(shù)碼管是將8個(gè)發(fā)光二極管的陽(yáng)極連接在一起作為公共端。公共端常被稱作位碼,而將其他的8位稱作段碼。如圖2-5所示為共陽(yáng)數(shù)碼管及其電路,數(shù)碼管有8個(gè)段分別為:h、g、f、e、d、c、b和a(h為小數(shù)點(diǎn)),只要公共端為高電平“1”,某個(gè)段輸出低電平“0”則對(duì)應(yīng)的段就亮。圖3.5七段數(shù)碼管顯示電路圖從電路可以看出,數(shù)碼管是共陽(yáng)的,當(dāng)位碼驅(qū)動(dòng)信號(hào)為0時(shí),對(duì)應(yīng)的數(shù)碼管才能操作;當(dāng)段碼驅(qū)動(dòng)信號(hào)為0時(shí),對(duì)應(yīng)的段碼點(diǎn)亮。鍵盤控制電路鍵盤控制電路要實(shí)現(xiàn)時(shí)鐘系統(tǒng)調(diào)時(shí)的功能和鬧鈴開關(guān)的功能。本設(shè)計(jì)采用主板上的獨(dú)立鍵盤來實(shí)現(xiàn)這兩個(gè)功能。當(dāng)鍵盤被按下是為“0”,未被按下是為“1”。電路連接圖如圖2-6所示。電路中為了防止FPGA的I/O設(shè)為輸出且為高電平在按鍵下直接對(duì)地短路,電阻RP9、RP10對(duì)此都能起到保護(hù)作用。圖3.6鍵盤電路圖蜂鳴電路設(shè)計(jì)如圖2-7所示,蜂鳴器使用PNP三極管進(jìn)行驅(qū)動(dòng)控制,蜂鳴器使用的是交流蜂鳴器。當(dāng)在BEEP輸入一定頻率的脈沖時(shí),蜂鳴器蜂鳴,變化輸入頻率可以變化蜂鳴器的響聲。因此可以運(yùn)用一種PWM來控制BEEP,通過變化PWM的頻率來得到不一樣的聲響,也可以用來播放音樂。若把JP7斷開,Q4截止,蜂鳴器停止蜂鳴。圖3.7蜂鳴電路圖

數(shù)字化時(shí)鐘系統(tǒng)軟件設(shè)計(jì)整體方案簡(jiǎn)介整體設(shè)計(jì)描述設(shè)計(jì)中的數(shù)字時(shí)鐘,帶有按鍵校準(zhǔn),定點(diǎn)報(bào)時(shí),數(shù)碼管顯示等功能。因此數(shù)字時(shí)鐘所包括的模塊可分為,分頻模塊,按鍵模塊,計(jì)時(shí)校準(zhǔn)模塊,鬧鐘模塊,LED顯示模塊,模塊之間的關(guān)系下圖:圖4.1整體模塊框圖針對(duì)框圖流程,設(shè)定出各個(gè)模塊的需求:分頻電路:針對(duì)計(jì)時(shí)器模塊與鬧鐘設(shè)定模塊的需求,可以懂得分頻模塊需要生成一種1Hz的頻率信號(hào),保證計(jì)時(shí)模塊可以正常計(jì)數(shù)。計(jì)時(shí)器模塊:計(jì)數(shù)模塊的作用是收到分頻模塊1Hz頻率的信號(hào)線,能進(jìn)行對(duì)的計(jì)時(shí),并且可以通過按鍵進(jìn)行時(shí)間的修改,且當(dāng)整點(diǎn)時(shí),給蜂鳴器產(chǎn)生使能信號(hào),進(jìn)行整點(diǎn)報(bào)時(shí),播放音樂。鬧鐘設(shè)定模塊:可根據(jù)按鍵的設(shè)定鬧鐘的時(shí)間,當(dāng)計(jì)時(shí)模塊的時(shí)間與鬧鐘設(shè)定模塊的時(shí)間相等的時(shí)候,給蜂鳴器一種使能信號(hào),蜂鳴器鬧鈴。。蜂鳴器模塊:根據(jù)計(jì)時(shí)模塊,鬧鐘模塊給出的使能信號(hào),鑒定蜂鳴器是整點(diǎn)報(bào)時(shí),還是鬧鐘響鈴。整點(diǎn)報(bào)時(shí)會(huì)播放音樂,鬧鐘時(shí)嘀嘀嘀報(bào)警。LED顯示模塊:根據(jù)實(shí)際的需求顯示計(jì)時(shí)模塊的時(shí)間,還是鬧鐘設(shè)定模塊的時(shí)間,8個(gè)七段碼LED數(shù)碼管,進(jìn)行掃描方式顯示數(shù)據(jù)。整體信號(hào)定義對(duì)整個(gè)模塊進(jìn)行信號(hào)定義。接口及寄存器定義moduleclock(clk,key,dig,seg,beep);//模塊名clockinputclk; //輸入時(shí)鐘input[4:0]key; //輸入按鍵,key[3:0]分別為秒,分鐘,小時(shí)的增長(zhǎng)按鍵。Key[4]為鬧鐘設(shè)置按鍵,key[5]為校準(zhǔn)設(shè)置按鍵。output[7:0]dig; //數(shù)碼管選擇輸出引腳aoutput[7:0]seg; //數(shù)碼管段輸出引腳outputbeep; //蜂鳴器輸出端reg[7:0]seg_r=8'h0; //定義數(shù)碼管輸出寄存器reg[7:0]dig_r; //定義數(shù)碼管選擇輸出寄存器reg[3:0]disp_dat; //定義顯示數(shù)據(jù)寄存器reg[8:0]count1; //定義計(jì)數(shù)寄存器reg[14:0]count; //定義計(jì)數(shù)中間寄存器reg[23:0]hour=24'h235956; //定義目前時(shí)刻寄存器reg[23:0]clktime=24'h000000; //定義設(shè)定鬧鐘reg[1:0]keyen=2'b11; //定義標(biāo)志位reg[4:0]dout1=5'b11111;reg[4:0]dout2=5'b11111;reg[4:0]dout3=5'b11111; //寄存器wire[4:0]key_done; //按鍵消抖輸出reg[15:0]beep_count=16'h0; //蜂鳴器寄存器reg[15:0]beep_count_end=16'hffff;//蜂鳴器截止寄存器regclktime_en=1'b1; //鬧鐘使能寄存器regsec; //1秒時(shí)鐘regclk1; //1ms時(shí)鐘regbeep_r; //寄存器wirebeepen; //鬧鐘使能信號(hào)模塊框圖通過quartusII的creatsymbleforcurrentfile功能生成框圖如下:圖4.2生成的符號(hào)圖分頻模塊實(shí)現(xiàn),計(jì)數(shù)電路所需時(shí)鐘信號(hào)為1HZ,而系統(tǒng)時(shí)鐘為48MHZ,因此要對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻以來滿足電路的需要。分頻模塊實(shí)現(xiàn)分頻模塊描述對(duì)于分頻模塊,關(guān)鍵是生成個(gè)1Hz的時(shí)鐘信號(hào)??紤]到仿真的需要,模塊中間生成1個(gè)1kHz的時(shí)鐘信號(hào)。1Hz的信號(hào)的產(chǎn)生用來產(chǎn)生時(shí)鐘的秒脈沖,框圖如下圖4.2:圖4.3分頻模塊圖分頻模塊設(shè)計(jì)本系統(tǒng)程序設(shè)計(jì)時(shí)鐘的精確與否重要取決于秒脈沖的精確度。為了保證計(jì)時(shí)精確,我們對(duì)系統(tǒng)時(shí)鐘48MHz進(jìn)行了48000分頻生成1kHz信號(hào)clk1,在通過1kHz信號(hào),生成1Hz信號(hào)clk。//1ms信號(hào)產(chǎn)生部分always@(posedgeclk) //定義clock上升沿觸發(fā)begin count=count+1'b1; if(count==15'd24000) //0.5mS到了嗎? begin count=15'd0; //計(jì)數(shù)器清零 clk1=~clk1; //置位秒標(biāo)志 endend//秒信號(hào)產(chǎn)生部分always@(posedgeclk1) //定義clock上升沿觸發(fā)begin count1=count1+1'b1; if(count1==9'd500) //0.5S到了嗎? begin count1=9'd0; //計(jì)數(shù)器清零 sec=~sec; //置位秒標(biāo)志 endEnd分頻模塊仿真通過設(shè)置功能仿真,檢查代碼的對(duì)的性仿真成果圖4.4分頻模塊波形仿真圖右上圖可以懂得,計(jì)數(shù)寄存器count累加到23999時(shí),重新變?yōu)?,合計(jì)數(shù)了24000個(gè)值。觸發(fā)clk1跳變,使得count1加一,count1累加到499的時(shí)候,下一種數(shù)據(jù)為0,共技術(shù)500個(gè)值。因此,sec信號(hào)的頻率為1Hz,滿足設(shè)計(jì)規(guī)定。計(jì)時(shí)模塊實(shí)現(xiàn)計(jì)時(shí)模塊描述與實(shí)現(xiàn)計(jì)時(shí)模塊是采用16進(jìn)制來實(shí)現(xiàn)的,將hour[23,0]定義為其時(shí)分秒,其中hour[3,0]為其秒鐘上的個(gè)位數(shù)值,hour[4,7]為其秒鐘上的十位數(shù)值,以此類推分鐘、時(shí)鐘的個(gè)位和十位。當(dāng)clk脈沖過來時(shí),秒個(gè)位hour[3,0]便開始加1,當(dāng)加到9時(shí),秒十位加1,與此同步秒個(gè)位清零,繼續(xù)加1。當(dāng)秒十位hour[7,4]為5秒個(gè)位為9時(shí)(即59秒),分個(gè)位hour[11,8]加1,與此同步秒個(gè)位和秒十位都清零。以此類推,當(dāng)分十位hour[15,12]為5和分個(gè)位為9時(shí)(即59分),時(shí)個(gè)位加1,與此同步分個(gè)位hour[19,16]和分十位都清零。當(dāng)時(shí)分十位[23,20]為2和分個(gè)位為4,所有清零,開始重新計(jì)時(shí)。從功能上講分別為模60計(jì)數(shù)器,模60計(jì)數(shù)器和模24計(jì)數(shù)器。//時(shí)間計(jì)算及校準(zhǔn)部分always@(negedgesec)//計(jì)時(shí)處理 begin hour[3:0]=hour[3:0]+1'b1; //秒加1 if(hour[3:0]>=4'ha) //加到10,復(fù)位 begin hour[3:0]=4'h0; hour[7:4]=hour[7:4]+1'b1; //秒的十位加一 if(hour[7:4]>=4'h6) //加到6,復(fù)位 begin hour[7:4]=4'h0; hour[11:8]=hour[11:8]+1'b1; //分個(gè)位加一 if(hour[11:8]>=4'ha) //加到10,復(fù)位 begin hour[11:8]=4'h0; hour[15:12]=hour[15:12]+1'b1; //分十位加一 if(hour[15:12]>=4'h6) //加到6,復(fù)位 begin hour[15:12]=4'h0; hour[19:16]=hour[19:16]+1'b1; //時(shí)個(gè)位加一 if(hour[19:16]>=4'ha) //加到10,復(fù)位 begin hour[19:16]=4'h0; hour[23:20]=hour[23:20]+1'b1; //時(shí)十位加一 end if(hour[23:16]>=8'h24) //加到24,復(fù)位 hour[23:16]=8'h0; end end end end endend計(jì)時(shí)模塊仿真對(duì)計(jì)時(shí)模塊進(jìn)行仿真,記錄仿真波形圖4.5計(jì)時(shí)模塊仿真圖由上圖可見,當(dāng)sec信號(hào)下降沿跳變時(shí),hour寄出去會(huì)加1,也就相稱于跳了一秒鐘時(shí)間。當(dāng)hour的時(shí)間為235959是,下一種計(jì)數(shù)器的值為000000,hour寄存器歸零,相稱于午夜0點(diǎn)的時(shí)刻。仿真的成果到達(dá)預(yù)期,通過。按鍵處理模塊實(shí)現(xiàn)按鍵處理模塊描述框圖如下圖4.4:圖4.6按鍵控制功能圖模塊講計(jì)時(shí)部分和時(shí)間調(diào)整部分整合到一起,正常態(tài)的時(shí)候,時(shí)間正常運(yùn)行,當(dāng)key[5]被按下時(shí),進(jìn)入時(shí)間校準(zhǔn),可以通過key[2:0]三個(gè)鍵,分別對(duì)秒,分,時(shí)進(jìn)行加1操作,從而進(jìn)行時(shí)間校準(zhǔn)。當(dāng)key[3]被按下時(shí),進(jìn)入鬧鐘設(shè)定,可以通過key[2:0]三個(gè)鍵,分別對(duì)秒,分,時(shí)進(jìn)行加1操作,從而進(jìn)行鬧鐘的設(shè)定。圖4.7按鍵模塊仿真圖通過按鍵key進(jìn)行仿真控制,可以發(fā)現(xiàn)clktime會(huì)伴隨按鍵的按下,分別有時(shí)鐘,分鐘秒鐘加1,仿真成果滿足設(shè)計(jì)規(guī)定。按鍵去抖處理模塊設(shè)計(jì)按鍵模塊實(shí)現(xiàn)去抖處理,及乒乓按鍵設(shè)計(jì),保證背面的計(jì)時(shí)模塊與鬧鐘模塊的功能實(shí)現(xiàn)。assignkey_done=key|dout3; //按鍵消抖輸出always@(posedgecount1[5]) //按鍵去噪聲begindout1<=key;dout2<=dout1;dout3<=dout2; //持續(xù)賦值endalways@(negedgekey_done[4])beginkeyen[1]=~keyen[1]; //校準(zhǔn)按鍵轉(zhuǎn)換乒乓按鍵endalways@(negedgekey_done[3])begin keyen[0]=~keyen[0]; //定期按鍵轉(zhuǎn)換乒乓按鍵End按鍵模塊去抖仿真對(duì)于按鍵去抖動(dòng)仿真,同樣才用功能仿真方式,這里不再反復(fù)設(shè)置與操作,如同上面的分頻模塊進(jìn)行設(shè)置并進(jìn)行仿真。Key寄存器為輸入按鍵,初始化電路為高電平,當(dāng)有按鍵按下去的時(shí)候,變?yōu)榈碗娖?。因此變化key的值,觀測(cè)仿真成果與否對(duì)的。功能仿真,記錄仿真成果,如下圖:圖4.8按鍵模塊仿真圖通過上圖可以懂得,key_done會(huì)伴隨key的變化而發(fā)生對(duì)應(yīng)的變化,并有消除噪聲的作用,功能仿真對(duì)的,到達(dá)設(shè)計(jì)目的。鬧鐘模塊實(shí)現(xiàn)鬧鐘模塊設(shè)計(jì)本設(shè)計(jì)中,判斷鬧鈴時(shí)間到,是通過鑒定期鐘系統(tǒng)實(shí)時(shí)時(shí)間的時(shí)鐘與分鐘與否分別等于設(shè)定的鬧鈴時(shí)間的時(shí)鐘、分鐘、秒鐘。當(dāng)時(shí)間(hour[23:0])等于設(shè)定的鬧鐘時(shí)間(clktime[23:0])時(shí),鬧鐘觸發(fā)時(shí),播放嘀嘀嘀報(bào)警聲,鬧鐘會(huì)響10秒的時(shí)間(clktime[23:0]+10>=hour[23:0])。正常狀況下,鬧鈴時(shí)間到會(huì)進(jìn)行為時(shí)1分鐘的蜂鳴報(bào)時(shí),可以通過按下鬧鐘按鍵key[3]使其停止。當(dāng)鬧鈴設(shè)置為整點(diǎn)是,會(huì)先進(jìn)行整點(diǎn)報(bào)時(shí),然后進(jìn)入鬧鈴。圖4.9鬧鐘控制鍵功能圖鬧鐘設(shè)定模塊仿真圖4.10鬧鐘模塊仿真圖通過按鍵key進(jìn)行仿真控制,可以發(fā)現(xiàn)clktime會(huì)伴隨按鍵的按下,分別有時(shí)鐘,分鐘秒鐘加1,仿真成果滿足設(shè)計(jì)規(guī)定。蜂鳴器模塊實(shí)現(xiàn)蜂鳴器模塊描述蜂鳴器模塊負(fù)責(zé)整點(diǎn)報(bào)時(shí),和鬧鈴的時(shí)候進(jìn)行出聲的作用。整點(diǎn)報(bào)時(shí)的時(shí)候,播放音樂,10秒音樂播報(bào)完后停止整點(diǎn)報(bào)時(shí)。鬧鐘觸發(fā)時(shí),播放嘀嘀嘀報(bào)警聲。當(dāng)鬧鈴設(shè)置為整點(diǎn)是,會(huì)先進(jìn)行整點(diǎn)報(bào)時(shí),然后進(jìn)入鬧鈴。當(dāng)鬧鐘設(shè)定鍵被按下,響起的蜂鳴聲會(huì)被屏蔽。模塊框圖如下圖4.9:蜂鳴器模塊實(shí)現(xiàn)//蜂鳴器的計(jì)數(shù)定期器always@(posedgeclk)beginbeep_count=beep_count+1'b1; //計(jì)數(shù)器加1if((beep_count==beep_count_end)&&(!(beep_count_end==16'hffff))) begin beep_count=16'h0; //計(jì)數(shù)器清零 beep_r=~beep_r; //取反輸出信號(hào) endendalways@(posedgeclk)beginif(!beepen)case(hour[3:0]) //整點(diǎn)報(bào)時(shí)音樂內(nèi)容 4'h0:beep_count_end=16'h6a88; //中音6的分頻系數(shù)值 4'h1:beep_count_end=16'h8637; //中音4的分頻系數(shù)值 4'h2:beep_count_end=16'h7794; //中音5的分頻系數(shù)值 4'h3:beep_count_end=16'hb327; //中音1的分頻系數(shù)值 4'h5:beep_count_end=16'hb327; //中音1的分頻系數(shù)值 4'h6:beep_count_end=16'h7794; //中音5的分頻系數(shù)值 4'h7:beep_count_end=16'h6a88; //中音6的分頻系數(shù)值 4'h8:beep_count_end=16'h8637; //中音4的分頻系數(shù)值 default:beep_count_end=16'hffff; //其他狀況無聲endcaseelseif(!clktime_en)begin case(count1[8:5]) //鬧鐘嘀嘀嘀聲內(nèi)容 4'h0,4'h2,4'h6,4'h8:beep_count_end=16'h2f74; //高音7的分頻系數(shù)值 default:beep_count_end=16'hffff; //其他狀況不出聲 endcaseendelse beep_count_end=16'hffff;end//鬧鈴使能控制always@(posedgeclk)begin if(!keyen[0]) //判斷鬧鈴與否有取消 clktime_en=1'b1; //鬧鈴響起后,需要手動(dòng)關(guān)閉鬧鈴 elseif((clktime[23:0]<=hour[23:0])&(clktime[23:0]+10>=hour[23:0])) //鬧鈴過一點(diǎn)時(shí)間,自動(dòng)關(guān)閉。 clktime_en=1'b0;end蜂鳴器模塊仿真功能仿真,記錄波形圖:圖4.11蜂鳴器模塊仿真圖通過上圖可以看出來,當(dāng)hour與clktime相等時(shí),鬧鈴被觸發(fā),通過一段時(shí)間后,鬧鈴?fù)V构ぷ?,設(shè)計(jì)滿足規(guī)定。顯示模塊實(shí)現(xiàn)顯示模塊描述此設(shè)計(jì)中的LED七段數(shù)碼管顯示模塊重要顯示時(shí)間的時(shí)、分、秒信息,數(shù)碼管為共陽(yáng)的。在此設(shè)計(jì)中占非常重要的地位,它是保證時(shí)間能直觀展現(xiàn)的橋梁。在設(shè)計(jì)過程中,首先進(jìn)行程序編寫和調(diào)試的應(yīng)當(dāng)是顯示模塊。下面輸入的端口為鬧鐘設(shè)定鍵被按下,七段數(shù)碼管會(huì)顯示鬧鐘設(shè)定狀況下數(shù)碼管所對(duì)應(yīng)的數(shù)字。正常時(shí)間狀況、鬧鐘設(shè)定以及查看鬧鐘所設(shè)定好的時(shí)間都是同樣的原理,當(dāng)他們被按下數(shù)碼管會(huì)顯示對(duì)應(yīng)的模式對(duì)應(yīng)的數(shù)字。圖4.12顯示模塊圖顯示模塊實(shí)現(xiàn)//數(shù)碼管顯示內(nèi)容always@(posedgeclk)begin case({keyen[0],count1[3:1]}) //選擇掃描顯示數(shù)據(jù) 4'd0:disp_dat=clktime[3:0]; //秒個(gè)位 4'd1:disp_dat=clktime[7:4]; //秒十位 4'd2:disp_dat=4'ha; //顯示"-" 4'd3:disp_dat=clktime[11:8]; //分個(gè)位 4'd4:disp_dat=clktime[15:12]; //分十位 4'd5:disp_dat=4'ha; //顯示"-" 4'd6:disp_dat=clktime[19:16]; //時(shí)個(gè)位 4'd7:disp_dat=clktime[23:20]; //時(shí)十位 4'd8:disp_dat=hour[3:0]; //秒個(gè)位 4'd9:disp_dat=hour[7:4]; //秒十位 4'd10:disp_dat=4'ha; //顯示"-" 4'd11:disp_dat=hour[11:8]; //分個(gè)位 4'd12:disp_dat=hour[15:12]; //分十位 4'd13:disp_dat=4'ha; //顯示"-" 4'd14:disp_dat=hour[19:16]; //時(shí)個(gè)位 4'd15:disp_dat=hour[23:20]; //時(shí)十位 default:disp_dat=4'ha; //顯示"-" endcase//數(shù)碼管選擇 case(count1[3:1]) //選擇數(shù)碼管顯示位 3'd0:dig_r=8'b11111110; //選擇第一種數(shù)碼管顯示 3'd1:dig_r=8'b11111101; //選擇第二個(gè)數(shù)碼管顯示 3'd2:dig_r=8'b11111011; //選擇第三個(gè)數(shù)碼管顯示 3'd3:dig_r=8'b11110111; //選擇第四個(gè)數(shù)碼管顯示 3'd4:dig_r=8'b11101111; //選擇第五個(gè)數(shù)碼管顯示 3'd5:dig_r=8'b11011111; //選擇第六個(gè)數(shù)碼管顯示 3'd6:dig_r=8'b10111111; //選擇第七個(gè)數(shù)碼管顯示 3'd7:dig_r=8'b01111111; //選擇第八個(gè)數(shù)碼管顯示 endcaseend//數(shù)碼管顯示always@(posedgeclk)begincase(disp_dat)4'h0:seg_r=8'hc0; //顯示04'h1:seg_r=8'hf9; //顯示14'h2:seg_r=8'ha4; //顯示24'h3:seg_r=8'hb0; //顯示34'h4:seg_r=8'h99; //顯示44'h5:seg_r=8'h92; //顯示54'h6:seg_r=8'h82; //顯示64'h7:seg_r=8'hf8; //顯示74'h8:seg_r=8'h80; //顯示84'h9:seg_r=8'h90; //顯示94'ha:seg_r=8'hbf; //顯示-default:seg_r=8'hff; //不顯示endcaseif((count1[3:1]==3'd2)&sec)seg_r=8'hff;End顯示模塊仿真編譯程序,進(jìn)行功能仿真,記錄仿真圖形:圖4.13顯示模塊仿真圖通過上面的圖可以懂得,LED數(shù)碼管是通過掃描的方式實(shí)現(xiàn)數(shù)據(jù)更新,通過dig,seg寄存器的數(shù)據(jù)可以懂得,數(shù)據(jù)能正常顯示,滿足設(shè)計(jì)規(guī)定。

系統(tǒng)調(diào)試及運(yùn)行成果分析硬件調(diào)試在軟件聯(lián)機(jī)調(diào)試之前,首先要確定硬件與否完全對(duì)的。檢查方面重要包括:(1)PC機(jī)的接口和關(guān)鍵板上的JTAG下載口與否連接對(duì)的;(2)蜂鳴器的電路與否為通路;(3)檢查接地、電源線與否連接對(duì)的;(4)用示波器檢測(cè)關(guān)鍵板的各個(gè)引腳與否有信號(hào)輸出;(5)LED七段數(shù)碼管顯示正常。引腳分布如下表5-1:表5-1引腳分布圖:信號(hào)引腳闡明信號(hào)引腳闡明seg[0]169數(shù)碼管斷信號(hào)選擇dig[0]160數(shù)碼管片選信號(hào)控制seg[1]170dig[1]159seg[2]167dig[2]162seg[3]168dig[3]161seg[4]165dig[4]215seg[5]166dig[5]216seg[6]163dig[6]213seg[7]164dig[7]214key[0]121秒加1控制clk28時(shí)鐘信號(hào)key[1]122分加1控制Beep175蜂鳴器信號(hào)key[2]123時(shí)加1控制key[3]124鬧鐘控制key[4]143時(shí)間校準(zhǔn)控制軟件調(diào)試在確定好硬件系統(tǒng)對(duì)的之后,我對(duì)本設(shè)計(jì)進(jìn)行分模塊的軟件調(diào)試。功能模塊先后調(diào)試次序?yàn)椋猴@示模塊→時(shí)間模塊→鍵盤模塊→時(shí)間設(shè)定及其顯示模塊→鬧鈴、整點(diǎn)報(bào)時(shí)設(shè)定及其顯示模塊。每完畢一種模塊就與前一種已完畢的模塊結(jié)合起來調(diào)試,直至實(shí)現(xiàn)對(duì)應(yīng)功能,再編寫下一模塊程序。在與主程序銜接時(shí),主程序和各子程序也需作對(duì)應(yīng)的改動(dòng),以便與子程序更好的銜接,尤其是顯示子程序需作較大改動(dòng),以便對(duì)不一樣內(nèi)容進(jìn)行顯示。軟件編譯后的成果:圖5.1軟件編譯成果圖通過上圖5.1可以懂得,整個(gè)設(shè)計(jì)值用了383個(gè)邏輯單元,占用很少的資源。調(diào)試過程及成果調(diào)試過程按照:顯示模塊→時(shí)間模塊→鍵盤模塊→時(shí)間設(shè)定及其顯示模塊→鬧鈴、整點(diǎn)報(bào)時(shí)設(shè)定及其顯示模塊的次序進(jìn)行調(diào)試。(1)顯示模塊調(diào)試本系統(tǒng)功能完整運(yùn)行離不開對(duì)的顯示,因此顯示模塊的實(shí)現(xiàn)非常重要,在聯(lián)機(jī)調(diào)試第一步就要確定系統(tǒng)的顯示與否可以正常運(yùn)行。將需要顯示的內(nèi)容編寫在程序內(nèi),單獨(dú)得進(jìn)行仿真。此模塊調(diào)試成果如圖4-1所示:圖5.2顯示模塊調(diào)試圖(2)時(shí)間系統(tǒng)模塊調(diào)試確定系統(tǒng)顯示成功后,進(jìn)行時(shí)間系統(tǒng)的調(diào)試。時(shí)間系統(tǒng)需要實(shí)現(xiàn)時(shí)、分、秒的對(duì)的走時(shí)。顯示成果為時(shí)、分、秒,其中秒鐘可以正常走動(dòng)。此模塊調(diào)試成果如圖4-2所示:圖5.3時(shí)間系統(tǒng)模塊調(diào)試圖(3)按鍵模塊調(diào)試key1按鍵被按下進(jìn)入校時(shí)狀態(tài),key2按鍵被按下進(jìn)入調(diào)鬧鐘狀態(tài)(在鬧鈴響時(shí)按此鍵能屏蔽鬧鈴音),在兩個(gè)不一樣狀態(tài)下,key3、key4、key5三個(gè)按鍵的功能是相似的,當(dāng)被按下時(shí),時(shí)、分、秒的數(shù)值加1。(由于圖片限制校時(shí)狀態(tài)下和鬧鐘設(shè)定類似不予以截圖。)圖5.4時(shí)間調(diào)整/鬧鐘設(shè)定模塊調(diào)試圖調(diào)試注意事項(xiàng)軟件設(shè)計(jì)時(shí),需要確定好軟件設(shè)計(jì)的思緒,即先確定各個(gè)功能需要實(shí)現(xiàn)的先后,再將各功能模塊單獨(dú)進(jìn)行編寫調(diào)試,待各模塊功能完善后,再進(jìn)行總體聯(lián)合調(diào)試。調(diào)試過程中出現(xiàn)了某些問題,并一一處理:(1)在進(jìn)行系統(tǒng)聯(lián)機(jī)調(diào)試時(shí),要注意電源與否接通,PC機(jī)的接口和關(guān)鍵板上的JTAG下載口與否連接對(duì)的。確定將未使用的引腳設(shè)置為三態(tài)輸入,否則也許會(huì)損壞芯片。(2)顯示模塊對(duì)的調(diào)試之后,進(jìn)行時(shí)鐘系統(tǒng)的調(diào)試過程中,出現(xiàn)時(shí)間信息并沒有顯示在屏幕上,而在對(duì)應(yīng)時(shí)間信息的位置上顯示的是“-”。出現(xiàn)此問題時(shí)候,首先對(duì)硬件進(jìn)行再次檢查,用示波器檢查引腳兩端與否有信號(hào)的輸入輸出。成果發(fā)現(xiàn)硬件電路連接對(duì)的,問題出目前引腳設(shè)置的方面。在設(shè)定引腳時(shí),沒有選擇對(duì)的的輸出引腳。通過查找書本,修改輸出引腳,處理了這個(gè)問題。(3)時(shí)鐘模塊時(shí),出現(xiàn)秒鐘走的過快的現(xiàn)象。最終發(fā)現(xiàn)是分頻程序中沒有對(duì)的的對(duì)時(shí)鐘脈沖信號(hào)進(jìn)行對(duì)的的分頻。通過在網(wǎng)絡(luò)資源和書籍的學(xué)習(xí)對(duì)的的改善了這個(gè)問題。(4)鍵盤調(diào)整時(shí)間程序中,出現(xiàn)了無法正常調(diào)時(shí)狀況,按鍵盤后,時(shí)間信息沒有變化或者變化過多。通過檢查,找到原因是沒有給按鍵進(jìn)行按鍵去抖動(dòng)。這闡明在編寫程序時(shí)候要充足理解各芯片內(nèi)容資料,減少編寫小錯(cuò)誤引起對(duì)整個(gè)程序?qū)е碌挠绊?。?)鬧鐘報(bào)時(shí)和整點(diǎn)報(bào)時(shí)蜂鳴時(shí)間問題。鬧鐘報(bào)時(shí)中,假如鬧鐘時(shí)間到就會(huì)鬧鈴1分鐘,考慮到實(shí)際生活中,鬧鐘都是可以手動(dòng)關(guān)閉的,于是設(shè)定了一種鬧鐘開關(guān)鍵,為了減少系統(tǒng)硬件的繁雜,當(dāng)系統(tǒng)時(shí)間抵達(dá)鬧鈴時(shí)間和整點(diǎn)報(bào)時(shí)的時(shí)間,蜂鳴器才會(huì)響起。

總結(jié)和展望總結(jié)在FPGA上設(shè)計(jì)和調(diào)試都需要耐心,時(shí)鐘設(shè)計(jì)在生活中無處不在,設(shè)計(jì)的過程要考慮到應(yīng)用的習(xí)慣,設(shè)計(jì)更人性化的體驗(yàn),才會(huì)是一種好的設(shè)計(jì)。在VerilogHDL語(yǔ)言的學(xué)習(xí)上還存在某些問題,沒有深入的學(xué)習(xí),對(duì)于有些語(yǔ)法錯(cuò)誤,還需要仔細(xì)的查找。假如將這個(gè)數(shù)字時(shí)鐘應(yīng)用于現(xiàn)實(shí)生活中,還存在些許的問題。例如按鍵太多,操作起來沒那么的以便等等。展望針對(duì)數(shù)字時(shí)鐘的設(shè)計(jì),通過以上的驗(yàn)證,我們可以懂得,對(duì)數(shù)字時(shí)鐘來說,其實(shí)占用很少邏輯資源,也就意味著假如一點(diǎn)制作成SOC的話,成本會(huì)非常的低,因此基于這點(diǎn),整個(gè)模塊完全可以依附在其他功能產(chǎn)品(如CPU內(nèi)部)上,給整個(gè)產(chǎn)品增長(zhǎng)的優(yōu)勢(shì)。參照文獻(xiàn)劉君,常明,秦娟,基于硬件描述語(yǔ)言(VHDL)的數(shù)字時(shí)鐘設(shè)計(jì),天津理工大學(xué)學(xué)報(bào),,第23卷第4期,40-41廖日坤,CPLD/FPGA嵌入式應(yīng)用開發(fā)技術(shù)白金手冊(cè),中國(guó)電力出版社,,212-218。王開軍,姜宇柏,面向CPLD/FPGA的VHDL設(shè)計(jì),機(jī)械工業(yè)出版社,,28-65。趙保經(jīng),中國(guó)集成電路大全,國(guó)防工業(yè)出版社,1985。高吉祥,電子技術(shù)基礎(chǔ)試驗(yàn)與課程設(shè)計(jì),電子工業(yè)出版社,。呂思忠,數(shù)子電路試驗(yàn)與課程設(shè)計(jì),哈爾濱工業(yè)大學(xué)出版社,。謝自美,電子線路設(shè)計(jì)、試驗(yàn)、測(cè)試,華中理工大學(xué)出版社,。趙志杰,集成電路應(yīng)用識(shí)圖措施,機(jī)械工業(yè)出版社,,35-40。張慶雙,電子元器件的選用與檢測(cè),機(jī)械工業(yè)出版社,。譚會(huì)生,張昌凡,EDA技術(shù)及應(yīng)用,西安電子科技大學(xué)出版社,。李可,數(shù)字鐘電路及應(yīng)用[M],北京:電子工業(yè)出版社,1996??等A先,電子技術(shù)基礎(chǔ)(數(shù)字部分)第四版[M].北京:高等教育出版社,.213-224。集成電路手冊(cè)分編委會(huì)編,中外集成電路簡(jiǎn)要速查手冊(cè),TTL、CMOS電路[M],北京:電子工業(yè)出版社,1997??等A光,電子技術(shù)基礎(chǔ),高等教育出版社,宋春榮,通用集成電路速查手冊(cè),山東科學(xué)技術(shù)出版社,1995。閻石,數(shù)字電子技術(shù)基礎(chǔ)(第四版)[M],北京:高等教育出版社,1998。KawasakiHiroaki,SakuradaHiroshi,NarushimaShinichi,etalDouble-facedvacuumfluorescentdisplay[P].USPatent:5463276,1995致謝在我進(jìn)行此畢業(yè)論文撰寫的過程中,我的導(dǎo)師給了我極大的協(xié)助。在這里,我要感謝在這些在我畢業(yè)設(shè)計(jì)過程中指導(dǎo)和協(xié)助過我的人。首先,我要感謝我的指導(dǎo)嚴(yán)格規(guī)定。本論文的選題和撰寫都是在她的指導(dǎo)下完畢的。從開始對(duì)verilogHDL語(yǔ)言不懂的狀況下,慢慢學(xué)習(xí),通過一段時(shí)間的探索,開始學(xué)著在試驗(yàn)板上進(jìn)行練習(xí)操作,才有了長(zhǎng)足的進(jìn)步,最終調(diào)試成功;老師對(duì)于問題思緒的指導(dǎo),都將成為此后工作、學(xué)習(xí)的寶貴精神財(cái)富。在我走向社會(huì),走向工作崗位的過程中,老師予以我的教導(dǎo)、協(xié)助和殷切期望,促使我愈加積極追求新的人生目的。感謝父母一直默默地予以我關(guān)懷和支持,父母的悉心關(guān)懷,永遠(yuǎn)是鼓勵(lì)我積極向上的不竭動(dòng)力。最終,還要感謝和我同樣即將畢業(yè)的同班同學(xué);感謝大學(xué)四年的同寢室室友;感謝那些沒有提及姓名,但也同樣予以我協(xié)助的老師、同學(xué)和朋友!附錄moduleclock(clk,key,dig,seg,beep);//模塊名clockinputclk; //輸入時(shí)鐘input[4:0]key; //輸入按鍵output[7:0]dig; //數(shù)碼管選擇輸出引腳aoutput[7:0]seg; //數(shù)碼管段輸出引腳outputbeep; //蜂鳴器輸出端reg[7:0]seg_r=8'h0; //定義數(shù)碼管輸出寄存器reg[7:0]dig_r; //定義數(shù)碼管選擇輸出寄存器reg[3:0]disp_dat; //定義顯示數(shù)據(jù)寄存器reg[8:0]count1; //定義計(jì)數(shù)寄存器reg[14:0]count; //定義計(jì)數(shù)中間寄存器reg[23:0]hour=24'h235956; //定義目前時(shí)刻寄存器reg[23:0]clktime=24'h000000; //定義設(shè)定鬧鐘reg[1:0]keyen=2'b11; //定義標(biāo)志位reg[4:0]dout1=5'b11111;reg[4:0]dout2=5'b11111;reg[4:0]dout3=5'b11111; //寄存器wire[4:0]key_done; //按鍵消抖輸出reg[15:0]beep_count=16'h0; //蜂鳴器寄存器reg[15:0]beep_count_end=16'hffff;//蜂鳴器截止寄存器regclktime_en=1'b1; //鬧鐘使能寄存器regsec; //1秒時(shí)鐘regclk1; //1ms時(shí)鐘regbeep_r; //寄存器wirebeepen;assignbeep=beep_r; //輸出音樂assigndig=dig_r; //輸出數(shù)碼管選擇assignseg=seg_r; //輸出數(shù)碼管譯碼成果assignbeepen=|hour[15:4];assignkey_done=key|dout3;//按鍵消抖輸出//1ms信號(hào)產(chǎn)生部分always@(posedgeclk) //定義clock上升沿觸發(fā)begin count=count+1'b1; if(count==15'd24000) //0.5mS到了嗎? begin count=15'd0; //計(jì)數(shù)器清零 clk1=~clk1; //置位秒標(biāo)志 endend//秒信號(hào)產(chǎn)生部分always@(posedgeclk1) //定義clock上升沿觸發(fā)begin count1=count1+1'b1; if(count1==9'd500) //0.5S到了嗎? begin count1=9'd0; //計(jì)數(shù)器清零 sec=~sec; //置位秒標(biāo)志 endendalways@(posedgecount1[5]) //按鍵去噪聲begindout1<=key;dout2<=dout1;dout3<=dout2;endalways@(negedgekey_done[4])beginkeyen[1]=~keyen[1]; //校準(zhǔn)按鍵轉(zhuǎn)換endalways@(negedgekey_done[3])begin keyen[0]=~keyen[0]; //定期按鍵轉(zhuǎn)換end//鬧鐘定期部分always@(negedgesec) begin if(!keyen[0]) //假如有鬧鐘設(shè)置鍵按下 begin case(key_done[2:0]) 3'b110: begin clktime[19:16]=clktime[19:16]+1'b1; //時(shí)個(gè)位加一 if(clktime[19:16]==4'ha) begin clktime[19:16]=4'h0; clktime[23:20]=clktime[23:20]+1'b1; //時(shí)十位加一 end if(clktime[23:16]==8'h24) clktime[23:16]=8'h0; end 3'b101: begin clktime[11:8]=clktime[11:8]+1'b1; //分個(gè)位加一 if(clktime[11:8]==4'ha) begin clktime[11:8]=4'h0; clktime[15:12]=clktime[15:12]+1'b1; //分十位加一 end if(clktime[15:8]==8'h60) clktime[15:8]=8'h0; end 3'b011: begin clktime[3:0]=clktime[3:0]+1'b1; //秒個(gè)位加一 if(clktime[3:0]==4'ha) begin clktime[3:0]=4'h0; clktime[7:4]=clktime[15:12]+1'b1; //秒十位加一 end if(clktime[7:0]==8'h60) clktime[7:0]=8'h0; end default: clktime=clktime; endcase endend//數(shù)碼管顯示內(nèi)容always@(posedgeclk)begin case({keyen[0],count1[3:1]}) //選擇掃描顯示數(shù)據(jù) 4'd0:disp_dat=clktime[3:0]; //秒個(gè)位 4'd1:disp_dat=clktime[7:4]; //秒十位 4'd2:disp_dat=4'ha; //顯示"-" 4'd3:disp_dat=clktime[11:8]; //分個(gè)位 4'd4:disp_dat=clktime[15:12]; //分十位 4'd5:disp_dat=4'ha; //顯示"-" 4'd6:disp_dat=clktime[19:16]; //時(shí)個(gè)位 4'd7:disp_dat=clktime[23:20]; //時(shí)十位 4'd8:disp_dat=hour[3:0]; //秒個(gè)位 4'd9:disp_dat=hour[7:4]; //秒十位 4'd10:disp_dat=4'ha; //顯示"-" 4'd11:disp_dat=hour[11:8]; //分個(gè)位 4'd12:disp_dat=hour[15:12]; //分十位 4'd13:disp_dat=4'ha; //顯示"-" 4'd14:disp_dat=hour[19:16]; //時(shí)個(gè)位 4'd15:disp_dat=hour[23:20]; //時(shí)十位 default:disp_dat=4'ha; //顯示"-" endcase //數(shù)碼管選擇 case(count1[3:1])//選擇數(shù)碼管顯示位 3'd0:dig_r=8'b11111110;//選擇第一種數(shù)碼管顯示 3'd1:dig_r=8'b11111101;//選擇第二個(gè)數(shù)碼管顯示 3'd2:dig_r=8'b11111011;//選擇第三個(gè)數(shù)碼管顯示 3'd3:dig_r=8'b11110111;//選擇第四個(gè)數(shù)碼管顯示 3'd4:dig_r=8'b11101111;//選擇第五個(gè)數(shù)碼管顯示 3'd5:dig_r=8'b11011111;//選擇第六個(gè)數(shù)碼管顯示 3'd6:dig_r=8'b10111111;//選擇第七個(gè)數(shù)碼管顯示 3'd7:dig_r=8'b01111111;//選擇第八個(gè)數(shù)碼管顯示 endcaseend//數(shù)碼管顯示always@(posedgeclk)begincase(disp_dat)4'h0:seg_r=8'hc0; //顯示04'h1:seg_r=8'hf9; //顯示14'h2:seg_r=8'ha4; //顯示24'h3:seg_r=8'hb0; //顯示34'h4:seg_r=8'h99; //顯示44'h5:seg_r=8'h92; //顯示54'h6:seg_r=8'h82; //顯示64'h7:seg_r=8'hf8; //顯示74'h8:seg_r=8'h80; //顯示84'h9:seg_r=8'h90; //顯示94'ha:seg_r=8'hbf; //顯示-default:seg_r=8'hff; //不顯示endcaseif((count1[3:1]==3'd2)&sec)seg_r=8'hff;end//時(shí)間計(jì)算及校準(zhǔn)部分always@(negedgesec)//計(jì)時(shí)處理begin if(!keyen[1])//校準(zhǔn)鍵與否有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論