版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
基于FPGA的數(shù)字時鐘設(shè)計目錄TOC\o"1-4"\h\u摘要 1Abstract 2第一章 緒論 11.1. 選題意義與研究現(xiàn)實狀況 11.2. 國內(nèi)外研究及趨勢 11.3. 論文構(gòu)造 2第二章 編程軟件及語言簡介 32.1 QuartersII編程環(huán)境簡介 32.1.1 菜單欄 32.1.2 工具欄 82.1.3 功能仿真流程 92.2 VerilogHDL語言介 102.2.1 什么是verilogHDL語言 102.2.2 重要功能 11第三章 數(shù)字化時鐘系統(tǒng)硬件設(shè)計 133.1 系統(tǒng)關(guān)鍵板電路分析 133.2 系統(tǒng)主板電路分析 153.2.1 時鐘模塊電路 153.2.2 顯示電路 153.2.3 鍵盤控制電路 173.2.4 蜂鳴電路設(shè)計 17第四章 數(shù)字化時鐘系統(tǒng)軟件設(shè)計 184.1 整體方案簡介 184.1.1 整體設(shè)計描述 184.1.2 整體信號定義 194.1.3 模塊框圖 204.2 分頻模塊實現(xiàn) 204.2.1 分頻模塊描述 204.2.2 分頻模塊設(shè)計 204.2.3 分頻模塊仿真 214.3 計時模塊實現(xiàn) 214.3.1 計時模塊描述與實現(xiàn) 214.3.2 計時模塊仿真 234.4 按鍵處理模塊實現(xiàn) 234.4.1 按鍵處理模塊描述 234.4.2 按鍵去抖處理模塊設(shè)計 244.4.3 按鍵模塊去抖仿真 244.5 鬧鐘模塊實現(xiàn) 254.5.1 鬧鐘模塊設(shè)計 254.5.2 鬧鐘設(shè)定模塊仿真 254.6 蜂鳴器模塊實現(xiàn) 254.6.1 蜂鳴器模塊描述 254.6.2 蜂鳴器模塊實現(xiàn) 264.6.3 蜂鳴器模塊仿真 274.7 顯示模塊實現(xiàn) 274.7.1 顯示模塊描述 274.7.2 顯示模塊實現(xiàn) 274.7.3 顯示模塊仿真 29第五章 系統(tǒng)調(diào)試及運行成果分析 305.1 硬件調(diào)試 305.2 軟件調(diào)試 315.3 調(diào)試過程及成果 315.4 調(diào)試注意事項 33第六章 總結(jié)和展望 345.5 總結(jié) 345.6 展望 34參照文獻(xiàn) 35致謝 36附錄 37緒論選題意義與研究現(xiàn)實狀況在這個時間就是金錢的年代里,數(shù)字電子鐘已成為人們生活中的必需品。目前應(yīng)用的數(shù)字鐘不僅可以實現(xiàn)對年、月、日、時、分、秒的數(shù)字顯示,還能實現(xiàn)對電子鐘所在地點的溫度顯示和智能鬧鐘功能,廣泛應(yīng)用于車站、醫(yī)院、機(jī)場、碼頭、廁所等公共場所的時間顯示。伴隨現(xiàn)場可編程門陣列(fieldprogram-mablegatearray,F(xiàn)PGA)的出現(xiàn),電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展的趨勢愈加明顯,作為可編程的集成度較高的ASIC,可在芯片級實現(xiàn)任意數(shù)字邏輯電路,從而可以簡化硬件電路,提高系統(tǒng)工作速度,縮短產(chǎn)品研發(fā)周期。故運用FPGA這一新的技術(shù)手段來研究電子鐘有重要的現(xiàn)實意義。設(shè)計采用FPGA現(xiàn)場可編程技術(shù),運用自頂向下的設(shè)計思想設(shè)計電子鐘。防止了硬件電路的焊接與調(diào)試,并且由于FPGA的I/O端口豐富,內(nèi)部邏輯可隨意更改,使得數(shù)字電子鐘的實現(xiàn)較為以便。本課題使用CycloneEP1C6Q240的FPGA器件,完畢實現(xiàn)一種可以計時的數(shù)字時鐘。該系統(tǒng)具有顯示時、分、秒,智能鬧鐘,按鍵實現(xiàn)校準(zhǔn)時鐘,整點報時等功能。滿足人們得到精確時間以及時間提醒的需求,以便人們生活。國內(nèi)外研究及趨勢伴隨人們生活水平的提高和生活節(jié)奏的加緊,對時間的規(guī)定越來越高,精確數(shù)字計時的消費需求也是越來越多。二十一世紀(jì)的今天,最具代表性的計時產(chǎn)品就是電子時鐘,它是近代世界鐘表業(yè)界的第三次革命。第一次是擺和擺輪游絲的發(fā)明,相對穩(wěn)定的機(jī)械振蕩頻率源使鐘表的走時差從分級縮小到秒級,代表性的產(chǎn)品就是帶有擺或擺輪游絲的機(jī)械鐘或表。第二次革命是石英晶體振蕩器的應(yīng)用,發(fā)明了走時精度更高的石英電子鐘表,使鐘表的走時月差從分級縮小到秒級。第三次革命就是單片機(jī)數(shù)碼計時技術(shù)的應(yīng)用,使計時產(chǎn)品的走時日差從分級縮小到1/600萬秒,從原有老式指針計時的方式發(fā)展為人們平常更為熟悉的夜光數(shù)字顯示方式,直觀明了,并增長了全自動日期、星期的顯示功能,它更符合消費者的生活需求!因此,電子時鐘的出現(xiàn)帶來了鐘表計時業(yè)界跨躍性的進(jìn)步。我國生產(chǎn)的電子時鐘有諸多種,總體上來說以研究多功能電子時鐘為主,使電子時鐘除了原有的顯示時間基本功能外,還具有鬧鈴,報警等功能。商家生產(chǎn)的電子時鐘更從質(zhì)量,價格,實用上考慮,不停的改善電子時鐘的設(shè)計,使其愈加的具有市場。論文構(gòu)造第一章詳細(xì)論述了近些年來,數(shù)字化時鐘系統(tǒng)研究領(lǐng)域的動態(tài)及整個數(shù)字化時鐘系統(tǒng)的發(fā)展?fàn)顩r,同步分析了所面臨的問題與處理方案,從而提出了本論文的研究任務(wù)。第二章從研究任務(wù)著手,選擇符合設(shè)計規(guī)定的常用芯片及其他元器件,詳細(xì)論述了各接口電路的設(shè)計與連接,以模塊化的形式,整合數(shù)字化時鐘硬件的設(shè)計從小到大,從局部到整體,循序漸進(jìn),最終實現(xiàn)一種功能齊全的數(shù)字化時鐘系統(tǒng)。第三章根據(jù)系統(tǒng)設(shè)計規(guī)定,著手對數(shù)字化時鐘系統(tǒng)軟件進(jìn)行功能的實現(xiàn),將各功能模塊有機(jī)結(jié)合,實現(xiàn)時鐘走時,實現(xiàn)鬧鈴、整點報時附加功能。第四章按照設(shè)計思緒,在聯(lián)機(jī)調(diào)試過程中,對時鐘系統(tǒng)的局限性和缺陷進(jìn)行分析,將調(diào)試過程作重點的記錄。第五章對全文的總結(jié),對本系統(tǒng)功能實現(xiàn)以及制作過程中需要注意的方面,及整個系統(tǒng)軟件編寫中所吸取的經(jīng)驗教訓(xùn)進(jìn)行論述,同步,也對整個研究應(yīng)用進(jìn)行展望。
編程軟件及語言簡介QuartersII編程環(huán)境簡介運行環(huán)境設(shè)計采用quartusII軟件實現(xiàn),因此針對軟件需要用到的某些功能在這里進(jìn)行描述.QuartusII軟件界面簡樸易操作,如下圖2.1:圖2.1QuartusII軟件界面圖菜單欄【File】菜單QuartusII的【File】菜單除具有文獻(xiàn)管理的功能外,尚有許多其他選項圖2.2QuartusII菜單欄圖(1)【New】選項:新建工程或文獻(xiàn),其下尚有子菜單 【NewQuartusIIProject】選項:新建工程。 【DesignFile】選項:新建設(shè)計文獻(xiàn),常用的有:AHDL文本文獻(xiàn)、VHDL文本文獻(xiàn)、VerilogHDL文本文獻(xiàn)、原理圖文獻(xiàn)等。 【VectorWaveformFive】選項:矢量波形文獻(xiàn)。(2)【Open】選項:打開一種文獻(xiàn)。(3)【NewProjectWizard】選項:創(chuàng)立新工程。點擊后彈出對話框。單擊對話框最上第一欄右側(cè)的“…”按鈕,找到文獻(xiàn)夾已存盤的文獻(xiàn),再單擊打開按鈕,既出現(xiàn)如圖所示的設(shè)置狀況。對話框中第一行表達(dá)工程所在的工作庫文獻(xiàn)夾,第二行表達(dá)此項工程的工程名,第三行表達(dá)頂層文獻(xiàn)的實體名,一般與工程名相似。圖2.3QuartusII新建工程圖(4)【creat/update】選項:生成元件符號??梢詫⒃O(shè)計的電路封裝成一種元件符號,供后來在原理圖編輯器下進(jìn)行層次設(shè)計時調(diào)用?!綱iew】菜單:進(jìn)行全屏顯示或?qū)Υ翱谶M(jìn)行切換,包括層次窗口、狀態(tài)窗口、消息窗口等。圖2.4QuartusII菜單欄全屏切換圖【Assignments】菜單(1)【Device】選項:為目前設(shè)計選擇器件。(2)【Pin】選項:為目前層次樹的一種或多種邏輯功能塊分派芯片引腳或芯片內(nèi)的位置。(3)【TimingAnanlysisSetting】選項:為目前設(shè)計的tpd、tco、tsu、fmax等時間參數(shù)設(shè)定期序規(guī)定。(4)【EDAtoolsetting】選項:EDA設(shè)置工具。使用此工具可以對工程進(jìn)行綜合、仿真、時序分析,等等。EDA設(shè)置工具屬于第三方工具。(5)【Setting】選項:設(shè)置控制。可以使用它對工程、文獻(xiàn)、參數(shù)等進(jìn)行修改,還可以設(shè)置編譯器、仿真器、時序分析、功耗分析等。(6)【assignmenteditor】選項:任務(wù)編輯器。(7)【pinplanner】選項:可以使用它將所設(shè)計電路的I/O引腳合理的分派到已設(shè)定器件的引腳上。圖2.5QuartusII菜單欄設(shè)定引腳下拉圖【processing】菜單【processing】菜單的功能是對所設(shè)計的電路進(jìn)行編譯和檢查設(shè)計的對的性。(1)【Stopprocess】選項:停止編譯設(shè)計項目。(2)【StartCompilation】選項:開始完全編譯過程,這里包括分析與綜合、適配、裝配文獻(xiàn)、定期分析、網(wǎng)表文獻(xiàn)提取等過程。(3)【analyzecurrentfile】選項:分析目前的設(shè)計文獻(xiàn),重要是對目前設(shè)計文件的語法、語序進(jìn)行檢查。(4)【compilationreport】選項:適配信息匯報,通過它可以查看詳細(xì)的適配信息,包括設(shè)置和適配成果等。(5)【startsimulation】選項:開始功能仿真。(6)【simulationreport】選項:生成功能仿真匯報。(7)【compilertool】選項:它是一種編譯工具,可以有選擇對項目中的各個文件進(jìn)行分別編譯。(8)【simulationtool】選項:對編譯過電路進(jìn)行功能仿真和時序仿真。(9)【classictiminganalyzertool】選項:classic時序仿真工具。(10)【powerplaypoweranalyzertool】選項:PowerPlay功耗分析工具。圖2.6QuartusII菜單欄運行下拉圖【tools】菜單【tools】菜單的功能是(1)【runEDAsimulationtool】選項:運行EDA仿真工具,EDA是第三方仿真工具。(2)【runEDAtiminganalyzertool】選項:運行EDA時序分析工具,EDA是第三方仿真工具。(3)【Programmer】選項:打開編程器窗口,以便對Altera的器件進(jìn)行下載編程。圖2.7QuartusII仿真菜單下拉圖工具欄工具欄緊鄰菜單欄下方,它其實是各菜單功能的快捷按鈕組合區(qū)。2.8QuartusII菜單欄圖圖2.9QuartusII菜單欄按鍵功能圖功能仿真流程新建仿真文獻(xiàn)圖2.10QuartusII菜單欄新建文獻(xiàn)夾圖功能方正操作在菜單上點processing在下拉菜單中,如下圖:圖2.11QuartusII菜單欄processing下拉圖VerilogHDL語言介什么是verilogHDL語言VerilogHDL是一種硬件描述語言,用于從算法級、門級到開關(guān)級的多種抽象設(shè)計層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對象的復(fù)雜性可以介于簡樸的門和完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)可以按層次描述,并可在相似描述中顯式地進(jìn)行時序建模。VerilogHDL語言具有下述描述能力:設(shè)計的行為特性、設(shè)計的數(shù)據(jù)流特性、設(shè)計的構(gòu)造構(gòu)成以及包括響應(yīng)監(jiān)控和設(shè)計驗證方面的時延和波形產(chǎn)生機(jī)制。所有這些都使用同一種建模語言。此外,VerilogHDL語言提供了編程語言接口,通過該接口可以在模擬、驗證期間從設(shè)計外部訪問設(shè)計,包括模擬的詳細(xì)控制和運行。VerilogHDL語言不僅定義了語法,并且對每個語法構(gòu)造都定義了清晰的模擬、仿真語義。因此,用這種語言編寫的模型可以使用Verilog仿真器進(jìn)行驗證。語言從C編程語言中繼承了多種操作符和構(gòu)造。VerilogHDL提供了擴(kuò)展的建模能力,其中許多擴(kuò)展最初很難理解。不過,VerilogHDL語言的關(guān)鍵子集非常易于學(xué)習(xí)和使用,這對大多數(shù)建模應(yīng)用來說已經(jīng)足夠。當(dāng)然,完整的硬件描述語言足以對從最復(fù)雜的芯片到完整的電子系統(tǒng)進(jìn)行描述。重要功能下面列出的是Verilog硬件描述語言的重要能力:基本邏輯門,例如and、or和nand等都內(nèi)置在語言中。顧客定義原語(UP)創(chuàng)立的靈活性。顧客定義的原語既可以是組合邏輯原語,也可以是時序邏輯原語。開關(guān)級基本構(gòu)造模型,例如pmos和nmos等也被內(nèi)置在語言中。提供顯式語言構(gòu)造指定設(shè)計中的端口到端口的時延及途徑時延和設(shè)計的時序檢查。可采用三種不一樣方式或混合方式對設(shè)計建模。這些方式包括:行為描述方式—使用過程化構(gòu)造建模;數(shù)據(jù)流方式—使用持續(xù)賦值語句方式建模;構(gòu)造化方式—使用門和模塊實例語句描述建模。VerilogHDL中有兩類數(shù)據(jù)類型:線網(wǎng)數(shù)據(jù)類型和寄存器數(shù)據(jù)類型。線網(wǎng)類型表達(dá)構(gòu)件間的物理連線,而寄存器類型表達(dá)抽象的數(shù)據(jù)存儲元件??梢悦枋鰧哟卧O(shè)計,可使用模塊實例構(gòu)造描述任何層次。設(shè)計的規(guī)??梢允侨我獾?;語言不對設(shè)計的規(guī)模(大小)施加任何限制。VerilogHDL不再是某些企業(yè)的專有語言而是IEEE原則。人和機(jī)器都可閱讀Verilog語言,因此它可作為EDA的工具和設(shè)計者之間的交互語言。VerilogHDL語言的描述能力可以通過使用編程語言接口(PLI)機(jī)制深入擴(kuò)展。PLI是容許外部函數(shù)訪問Verilog模塊內(nèi)信息、容許設(shè)計者與模擬器交互的例程集合。設(shè)計可以在多種層次上加以描述,從開關(guān)級、門級、寄存器傳送級(RTL)到算法級,包括進(jìn)程和隊列級??梢允褂脙?nèi)置開關(guān)級原語在開關(guān)級對設(shè)計完整建模。同一語言可用于生成模擬鼓勵和指定測試的驗證約束條件,例如輸入值的指定。VerilogHDL可以監(jiān)控模擬驗證的執(zhí)行,即模擬驗證執(zhí)行過程中設(shè)計的值可以被監(jiān)控和顯示。這些值也可以用于與期望值比較,在不匹配的狀況下,打印匯報消息。在行為級描述中,VerilogHDL不僅可以在RTL級上進(jìn)行設(shè)計描述,并且可以在體系構(gòu)造級描述及其算法級行為上進(jìn)行設(shè)計描述。可以使用門和模塊實例化語句在構(gòu)造級進(jìn)行構(gòu)造描述。如圖顯示了VerilogHDL的混合方式建模能力,即在一種設(shè)計中每個模塊均可以在不一樣設(shè)計層次上建模。VerilogHDL還具有內(nèi)置邏輯函數(shù),例如&(按位與)和|(按位或)。對高級編程語言構(gòu)造,例如條件語句、狀況語句和循環(huán)語句,語言中都可以使用。可以顯式地對并發(fā)和定期進(jìn)行建模。提供強(qiáng)有力的文獻(xiàn)讀寫能力。語言在特定狀況下是非確定性的,即在不一樣的模擬器上模型可以產(chǎn)生不一樣的成果;例如,事件隊列上的事件次序在原則中沒有定義。圖2.12混合設(shè)計層次圖
數(shù)字化時鐘系統(tǒng)硬件設(shè)計系統(tǒng)關(guān)鍵板電路分析本系統(tǒng)采用的開發(fā)平臺標(biāo)配的關(guān)鍵板是QuickSOPC,可以實現(xiàn)EDA、SOP和DSP的試驗及研發(fā)。本系統(tǒng)采用QuickSOPC原則配置為Altera企業(yè)的EP1C6Q240C8芯片。關(guān)鍵板的硬件資源關(guān)鍵板采用4層板精心設(shè)計,采用120針接口。QuickSOPC關(guān)鍵板的硬件原理框圖如圖2-1所示:圖3.1QuickSOPC硬件方塊圖FPGA電路關(guān)鍵板QuickSOPC上所用的FPGA為Altera企業(yè)Cyclone系列的EP1C6Q240。EP1C6Q240包具有5980個邏輯單元和92Kbit的片上RAM。EP1C6Q240有185個顧客I/O口,封裝為240-PinPQFP。關(guān)鍵板EP1C6Q240器件特性如表2-1。表3-1關(guān)鍵EP1C6Q240器件特性:特性關(guān)鍵板EP1C6Q240器件邏輯單元(LE)5980M4KRAM塊20RAM總量(bit)92160PLL(個)2最大顧客I/O數(shù)(個)185配置二進(jìn)制文獻(xiàn)(.rbf)大?。╞it)1167216可選串行積極配置器件EPCS1/EPCS4/EPCS16配置電路CycloneFPGA的配置方式包括:積極配置模式、被動配置模式以及JTAG配置模式。本系統(tǒng)采用的是JTAG配置模式下載配置數(shù)據(jù)到FPGA。通過JTAG成果,運用QuartusII軟件可以直接對FPGA進(jìn)行單獨的硬件重新配置。QuartusII軟件在編譯時會自動生成用于JTAG配置的.sof文獻(xiàn)。CycloneFPGA設(shè)計成的JTAG指令比其他任何器件操作模式的優(yōu)先級都高,因此JTAG配置可隨時進(jìn)行而不用等待其他配置模式完畢。JTAG模式使用4個專門的信號引腳:TDI、TDO、TMS以及TCK。JTAG的3個輸入腳TDI、TMS和TCK具有內(nèi)部弱上拉,上拉電阻大概為25kΩ。在JGTA進(jìn)行配置的時候,所有顧客I/O扣都為高阻態(tài)。時鐘電路FPGA內(nèi)部沒振蕩電路,使用有源晶振是比較理想的選擇。EP1C6Q240C8的輸入的時鐘頻率范圍為15.625~387MHz,通過內(nèi)部的PLL電路后可輸出15.625~275MHz的系統(tǒng)時鐘。當(dāng)輸入時鐘頻率較低時,可以使用FPGA的內(nèi)部PLL調(diào)整FPGA所需的系統(tǒng)時鐘,使系統(tǒng)運行速度更快。關(guān)鍵板包括一種48MHz的有源晶振作為系統(tǒng)的時鐘源。如圖2-2所示。為了得到一種穩(wěn)定、精確的時鐘頻率,有源晶振的供電電源通過了LC濾波。本系統(tǒng)硬件整體設(shè)計框圖如圖2-3所示:圖3.2數(shù)字時鐘系統(tǒng)硬件電路總體框圖系統(tǒng)主板電路分析時鐘模塊電路FPGA內(nèi)部沒振蕩電路,使用有源晶振是比較理想的選擇。EP1C6Q240C8的輸入的時鐘頻率范圍為15.625~387MHz,通過內(nèi)部的PLL電路后可輸出15.625~275MHz的系統(tǒng)時鐘。當(dāng)輸入時鐘頻率較低時,可以使用FPGA的內(nèi)部PLL調(diào)整FPGA所需的系統(tǒng)時鐘,使系統(tǒng)運行速度更快。關(guān)鍵板包括一種50MHz的有源晶振作為系統(tǒng)的時鐘源。為了得到一種穩(wěn)定、精確的時鐘頻率,有源晶振的供電電源通過了LC濾波。圖3.3系統(tǒng)時鐘電路圖顯示電路由于本設(shè)計需要顯示時間信息包括:時、分、秒,顯因此采用主板上七段數(shù)碼管顯示電路與系統(tǒng)連接實現(xiàn)顯示模塊的功能。主板上七段數(shù)碼管顯示電路如圖2-4所示,RP4和RP6是段碼上的限流電阻,位碼由于電流較大,采用了三極管驅(qū)動。圖3.4七段數(shù)碼管顯示電路圖數(shù)碼管LED顯示是工程項目中使用較廣的一種輸出顯示屏件。常見的數(shù)管有共陰和共陽2種。共陰數(shù)碼管是將8個發(fā)光二極管的陰極連接在一起作為公共端,而共陽數(shù)碼管是將8個發(fā)光二極管的陽極連接在一起作為公共端。公共端常被稱作位碼,而將其他的8位稱作段碼。如圖2-5所示為共陽數(shù)碼管及其電路,數(shù)碼管有8個段分別為:h、g、f、e、d、c、b和a(h為小數(shù)點),只要公共端為高電平“1”,某個段輸出低電平“0”則對應(yīng)的段就亮。圖3.5七段數(shù)碼管顯示電路圖從電路可以看出,數(shù)碼管是共陽的,當(dāng)位碼驅(qū)動信號為0時,對應(yīng)的數(shù)碼管才能操作;當(dāng)段碼驅(qū)動信號為0時,對應(yīng)的段碼點亮。鍵盤控制電路鍵盤控制電路要實現(xiàn)時鐘系統(tǒng)調(diào)時的功能和鬧鈴開關(guān)的功能。本設(shè)計采用主板上的獨立鍵盤來實現(xiàn)這兩個功能。當(dāng)鍵盤被按下是為“0”,未被按下是為“1”。電路連接圖如圖2-6所示。電路中為了防止FPGA的I/O設(shè)為輸出且為高電平在按鍵下直接對地短路,電阻RP9、RP10對此都能起到保護(hù)作用。圖3.6鍵盤電路圖蜂鳴電路設(shè)計如圖2-7所示,蜂鳴器使用PNP三極管進(jìn)行驅(qū)動控制,蜂鳴器使用的是交流蜂鳴器。當(dāng)在BEEP輸入一定頻率的脈沖時,蜂鳴器蜂鳴,變化輸入頻率可以變化蜂鳴器的響聲。因此可以運用一種PWM來控制BEEP,通過變化PWM的頻率來得到不一樣的聲響,也可以用來播放音樂。若把JP7斷開,Q4截止,蜂鳴器停止蜂鳴。圖3.7蜂鳴電路圖
數(shù)字化時鐘系統(tǒng)軟件設(shè)計整體方案簡介整體設(shè)計描述設(shè)計中的數(shù)字時鐘,帶有按鍵校準(zhǔn),定點報時,數(shù)碼管顯示等功能。因此數(shù)字時鐘所包括的模塊可分為,分頻模塊,按鍵模塊,計時校準(zhǔn)模塊,鬧鐘模塊,LED顯示模塊,模塊之間的關(guān)系下圖:圖4.1整體模塊框圖針對框圖流程,設(shè)定出各個模塊的需求:分頻電路:針對計時器模塊與鬧鐘設(shè)定模塊的需求,可以懂得分頻模塊需要生成一種1Hz的頻率信號,保證計時模塊可以正常計數(shù)。計時器模塊:計數(shù)模塊的作用是收到分頻模塊1Hz頻率的信號線,能進(jìn)行對的計時,并且可以通過按鍵進(jìn)行時間的修改,且當(dāng)整點時,給蜂鳴器產(chǎn)生使能信號,進(jìn)行整點報時,播放音樂。鬧鐘設(shè)定模塊:可根據(jù)按鍵的設(shè)定鬧鐘的時間,當(dāng)計時模塊的時間與鬧鐘設(shè)定模塊的時間相等的時候,給蜂鳴器一種使能信號,蜂鳴器鬧鈴。。蜂鳴器模塊:根據(jù)計時模塊,鬧鐘模塊給出的使能信號,鑒定蜂鳴器是整點報時,還是鬧鐘響鈴。整點報時會播放音樂,鬧鐘時嘀嘀嘀報警。LED顯示模塊:根據(jù)實際的需求顯示計時模塊的時間,還是鬧鐘設(shè)定模塊的時間,8個七段碼LED數(shù)碼管,進(jìn)行掃描方式顯示數(shù)據(jù)。整體信號定義對整個模塊進(jìn)行信號定義。接口及寄存器定義moduleclock(clk,key,dig,seg,beep);//模塊名clockinputclk; //輸入時鐘input[4:0]key; //輸入按鍵,key[3:0]分別為秒,分鐘,小時的增長按鍵。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; //定義計數(shù)寄存器reg[14:0]count; //定義計數(shù)中間寄存器reg[23:0]hour=24'h235956; //定義目前時刻寄存器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秒時鐘regclk1; //1ms時鐘regbeep_r; //寄存器wirebeepen; //鬧鐘使能信號模塊框圖通過quartusII的creatsymbleforcurrentfile功能生成框圖如下:圖4.2生成的符號圖分頻模塊實現(xiàn),計數(shù)電路所需時鐘信號為1HZ,而系統(tǒng)時鐘為48MHZ,因此要對系統(tǒng)時鐘進(jìn)行分頻以來滿足電路的需要。分頻模塊實現(xiàn)分頻模塊描述對于分頻模塊,關(guān)鍵是生成個1Hz的時鐘信號??紤]到仿真的需要,模塊中間生成1個1kHz的時鐘信號。1Hz的信號的產(chǎn)生用來產(chǎn)生時鐘的秒脈沖,框圖如下圖4.2:圖4.3分頻模塊圖分頻模塊設(shè)計本系統(tǒng)程序設(shè)計時鐘的精確與否重要取決于秒脈沖的精確度。為了保證計時精確,我們對系統(tǒng)時鐘48MHz進(jìn)行了48000分頻生成1kHz信號clk1,在通過1kHz信號,生成1Hz信號clk。//1ms信號產(chǎn)生部分always@(posedgeclk) //定義clock上升沿觸發(fā)begin count=count+1'b1; if(count==15'd24000) //0.5mS到了嗎? begin count=15'd0; //計數(shù)器清零 clk1=~clk1; //置位秒標(biāo)志 endend//秒信號產(chǎn)生部分always@(posedgeclk1) //定義clock上升沿觸發(fā)begin count1=count1+1'b1; if(count1==9'd500) //0.5S到了嗎? begin count1=9'd0; //計數(shù)器清零 sec=~sec; //置位秒標(biāo)志 endEnd分頻模塊仿真通過設(shè)置功能仿真,檢查代碼的對的性仿真成果圖4.4分頻模塊波形仿真圖右上圖可以懂得,計數(shù)寄存器count累加到23999時,重新變?yōu)?,合計數(shù)了24000個值。觸發(fā)clk1跳變,使得count1加一,count1累加到499的時候,下一種數(shù)據(jù)為0,共技術(shù)500個值。因此,sec信號的頻率為1Hz,滿足設(shè)計規(guī)定。計時模塊實現(xiàn)計時模塊描述與實現(xiàn)計時模塊是采用16進(jìn)制來實現(xiàn)的,將hour[23,0]定義為其時分秒,其中hour[3,0]為其秒鐘上的個位數(shù)值,hour[4,7]為其秒鐘上的十位數(shù)值,以此類推分鐘、時鐘的個位和十位。當(dāng)clk脈沖過來時,秒個位hour[3,0]便開始加1,當(dāng)加到9時,秒十位加1,與此同步秒個位清零,繼續(xù)加1。當(dāng)秒十位hour[7,4]為5秒個位為9時(即59秒),分個位hour[11,8]加1,與此同步秒個位和秒十位都清零。以此類推,當(dāng)分十位hour[15,12]為5和分個位為9時(即59分),時個位加1,與此同步分個位hour[19,16]和分十位都清零。當(dāng)時分十位[23,20]為2和分個位為4,所有清零,開始重新計時。從功能上講分別為模60計數(shù)器,模60計數(shù)器和模24計數(shù)器。//時間計算及校準(zhǔn)部分always@(negedgesec)//計時處理 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; //分個位加一 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; //時個位加一 if(hour[19:16]>=4'ha) //加到10,復(fù)位 begin hour[19:16]=4'h0; hour[23:20]=hour[23:20]+1'b1; //時十位加一 end if(hour[23:16]>=8'h24) //加到24,復(fù)位 hour[23:16]=8'h0; end end end end endend計時模塊仿真對計時模塊進(jìn)行仿真,記錄仿真波形圖4.5計時模塊仿真圖由上圖可見,當(dāng)sec信號下降沿跳變時,hour寄出去會加1,也就相稱于跳了一秒鐘時間。當(dāng)hour的時間為235959是,下一種計數(shù)器的值為000000,hour寄存器歸零,相稱于午夜0點的時刻。仿真的成果到達(dá)預(yù)期,通過。按鍵處理模塊實現(xiàn)按鍵處理模塊描述框圖如下圖4.4:圖4.6按鍵控制功能圖模塊講計時部分和時間調(diào)整部分整合到一起,正常態(tài)的時候,時間正常運行,當(dāng)key[5]被按下時,進(jìn)入時間校準(zhǔn),可以通過key[2:0]三個鍵,分別對秒,分,時進(jìn)行加1操作,從而進(jìn)行時間校準(zhǔn)。當(dāng)key[3]被按下時,進(jìn)入鬧鐘設(shè)定,可以通過key[2:0]三個鍵,分別對秒,分,時進(jìn)行加1操作,從而進(jìn)行鬧鐘的設(shè)定。圖4.7按鍵模塊仿真圖通過按鍵key進(jìn)行仿真控制,可以發(fā)現(xiàn)clktime會伴隨按鍵的按下,分別有時鐘,分鐘秒鐘加1,仿真成果滿足設(shè)計規(guī)定。按鍵去抖處理模塊設(shè)計按鍵模塊實現(xiàn)去抖處理,及乒乓按鍵設(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按鍵模塊去抖仿真對于按鍵去抖動仿真,同樣才用功能仿真方式,這里不再反復(fù)設(shè)置與操作,如同上面的分頻模塊進(jìn)行設(shè)置并進(jìn)行仿真。Key寄存器為輸入按鍵,初始化電路為高電平,當(dāng)有按鍵按下去的時候,變?yōu)榈碗娖?。因此變化key的值,觀測仿真成果與否對的。功能仿真,記錄仿真成果,如下圖:圖4.8按鍵模塊仿真圖通過上圖可以懂得,key_done會伴隨key的變化而發(fā)生對應(yīng)的變化,并有消除噪聲的作用,功能仿真對的,到達(dá)設(shè)計目的。鬧鐘模塊實現(xiàn)鬧鐘模塊設(shè)計本設(shè)計中,判斷鬧鈴時間到,是通過鑒定期鐘系統(tǒng)實時時間的時鐘與分鐘與否分別等于設(shè)定的鬧鈴時間的時鐘、分鐘、秒鐘。當(dāng)時間(hour[23:0])等于設(shè)定的鬧鐘時間(clktime[23:0])時,鬧鐘觸發(fā)時,播放嘀嘀嘀報警聲,鬧鐘會響10秒的時間(clktime[23:0]+10>=hour[23:0])。正常狀況下,鬧鈴時間到會進(jìn)行為時1分鐘的蜂鳴報時,可以通過按下鬧鐘按鍵key[3]使其停止。當(dāng)鬧鈴設(shè)置為整點是,會先進(jìn)行整點報時,然后進(jìn)入鬧鈴。圖4.9鬧鐘控制鍵功能圖鬧鐘設(shè)定模塊仿真圖4.10鬧鐘模塊仿真圖通過按鍵key進(jìn)行仿真控制,可以發(fā)現(xiàn)clktime會伴隨按鍵的按下,分別有時鐘,分鐘秒鐘加1,仿真成果滿足設(shè)計規(guī)定。蜂鳴器模塊實現(xiàn)蜂鳴器模塊描述蜂鳴器模塊負(fù)責(zé)整點報時,和鬧鈴的時候進(jìn)行出聲的作用。整點報時的時候,播放音樂,10秒音樂播報完后停止整點報時。鬧鐘觸發(fā)時,播放嘀嘀嘀報警聲。當(dāng)鬧鈴設(shè)置為整點是,會先進(jìn)行整點報時,然后進(jìn)入鬧鈴。當(dāng)鬧鐘設(shè)定鍵被按下,響起的蜂鳴聲會被屏蔽。模塊框圖如下圖4.9:蜂鳴器模塊實現(xiàn)//蜂鳴器的計數(shù)定期器always@(posedgeclk)beginbeep_count=beep_count+1'b1; //計數(shù)器加1if((beep_count==beep_count_end)&&(!(beep_count_end==16'hffff))) begin beep_count=16'h0; //計數(shù)器清零 beep_r=~beep_r; //取反輸出信號 endendalways@(posedgeclk)beginif(!beepen)case(hour[3:0]) //整點報時音樂內(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; //鬧鈴響起后,需要手動關(guān)閉鬧鈴 elseif((clktime[23:0]<=hour[23:0])&(clktime[23:0]+10>=hour[23:0])) //鬧鈴過一點時間,自動關(guān)閉。 clktime_en=1'b0;end蜂鳴器模塊仿真功能仿真,記錄波形圖:圖4.11蜂鳴器模塊仿真圖通過上圖可以看出來,當(dāng)hour與clktime相等時,鬧鈴被觸發(fā),通過一段時間后,鬧鈴?fù)V构ぷ鳎O(shè)計滿足規(guī)定。顯示模塊實現(xiàn)顯示模塊描述此設(shè)計中的LED七段數(shù)碼管顯示模塊重要顯示時間的時、分、秒信息,數(shù)碼管為共陽的。在此設(shè)計中占非常重要的地位,它是保證時間能直觀展現(xiàn)的橋梁。在設(shè)計過程中,首先進(jìn)行程序編寫和調(diào)試的應(yīng)當(dāng)是顯示模塊。下面輸入的端口為鬧鐘設(shè)定鍵被按下,七段數(shù)碼管會顯示鬧鐘設(shè)定狀況下數(shù)碼管所對應(yīng)的數(shù)字。正常時間狀況、鬧鐘設(shè)定以及查看鬧鐘所設(shè)定好的時間都是同樣的原理,當(dāng)他們被按下數(shù)碼管會顯示對應(yīng)的模式對應(yīng)的數(shù)字。圖4.12顯示模塊圖顯示模塊實現(xiàn)//數(shù)碼管顯示內(nèi)容always@(posedgeclk)begin case({keyen[0],count1[3:1]}) //選擇掃描顯示數(shù)據(jù) 4'd0:disp_dat=clktime[3:0]; //秒個位 4'd1:disp_dat=clktime[7:4]; //秒十位 4'd2:disp_dat=4'ha; //顯示"-" 4'd3:disp_dat=clktime[11:8]; //分個位 4'd4:disp_dat=clktime[15:12]; //分十位 4'd5:disp_dat=4'ha; //顯示"-" 4'd6:disp_dat=clktime[19:16]; //時個位 4'd7:disp_dat=clktime[23:20]; //時十位 4'd8:disp_dat=hour[3:0]; //秒個位 4'd9:disp_dat=hour[7:4]; //秒十位 4'd10:disp_dat=4'ha; //顯示"-" 4'd11:disp_dat=hour[11:8]; //分個位 4'd12:disp_dat=hour[15:12]; //分十位 4'd13:disp_dat=4'ha; //顯示"-" 4'd14:disp_dat=hour[19:16]; //時個位 4'd15:disp_dat=hour[23:20]; //時十位 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; //選擇第二個數(shù)碼管顯示 3'd2:dig_r=8'b11111011; //選擇第三個數(shù)碼管顯示 3'd3:dig_r=8'b11110111; //選擇第四個數(shù)碼管顯示 3'd4:dig_r=8'b11101111; //選擇第五個數(shù)碼管顯示 3'd5:dig_r=8'b11011111; //選擇第六個數(shù)碼管顯示 3'd6:dig_r=8'b10111111; //選擇第七個數(shù)碼管顯示 3'd7:dig_r=8'b01111111; //選擇第八個數(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ù)碼管是通過掃描的方式實現(xiàn)數(shù)據(jù)更新,通過dig,seg寄存器的數(shù)據(jù)可以懂得,數(shù)據(jù)能正常顯示,滿足設(shè)計規(guī)定。
系統(tǒng)調(diào)試及運行成果分析硬件調(diào)試在軟件聯(lián)機(jī)調(diào)試之前,首先要確定硬件與否完全對的。檢查方面重要包括:(1)PC機(jī)的接口和關(guān)鍵板上的JTAG下載口與否連接對的;(2)蜂鳴器的電路與否為通路;(3)檢查接地、電源線與否連接對的;(4)用示波器檢測關(guān)鍵板的各個引腳與否有信號輸出;(5)LED七段數(shù)碼管顯示正常。引腳分布如下表5-1:表5-1引腳分布圖:信號引腳闡明信號引腳闡明seg[0]169數(shù)碼管斷信號選擇dig[0]160數(shù)碼管片選信號控制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時鐘信號key[1]122分加1控制Beep175蜂鳴器信號key[2]123時加1控制key[3]124鬧鐘控制key[4]143時間校準(zhǔn)控制軟件調(diào)試在確定好硬件系統(tǒng)對的之后,我對本設(shè)計進(jìn)行分模塊的軟件調(diào)試。功能模塊先后調(diào)試次序為:顯示模塊→時間模塊→鍵盤模塊→時間設(shè)定及其顯示模塊→鬧鈴、整點報時設(shè)定及其顯示模塊。每完畢一種模塊就與前一種已完畢的模塊結(jié)合起來調(diào)試,直至實現(xiàn)對應(yīng)功能,再編寫下一模塊程序。在與主程序銜接時,主程序和各子程序也需作對應(yīng)的改動,以便與子程序更好的銜接,尤其是顯示子程序需作較大改動,以便對不一樣內(nèi)容進(jìn)行顯示。軟件編譯后的成果:圖5.1軟件編譯成果圖通過上圖5.1可以懂得,整個設(shè)計值用了383個邏輯單元,占用很少的資源。調(diào)試過程及成果調(diào)試過程按照:顯示模塊→時間模塊→鍵盤模塊→時間設(shè)定及其顯示模塊→鬧鈴、整點報時設(shè)定及其顯示模塊的次序進(jìn)行調(diào)試。(1)顯示模塊調(diào)試本系統(tǒng)功能完整運行離不開對的顯示,因此顯示模塊的實現(xiàn)非常重要,在聯(lián)機(jī)調(diào)試第一步就要確定系統(tǒng)的顯示與否可以正常運行。將需要顯示的內(nèi)容編寫在程序內(nèi),單獨得進(jìn)行仿真。此模塊調(diào)試成果如圖4-1所示:圖5.2顯示模塊調(diào)試圖(2)時間系統(tǒng)模塊調(diào)試確定系統(tǒng)顯示成功后,進(jìn)行時間系統(tǒng)的調(diào)試。時間系統(tǒng)需要實現(xiàn)時、分、秒的對的走時。顯示成果為時、分、秒,其中秒鐘可以正常走動。此模塊調(diào)試成果如圖4-2所示:圖5.3時間系統(tǒng)模塊調(diào)試圖(3)按鍵模塊調(diào)試key1按鍵被按下進(jìn)入校時狀態(tài),key2按鍵被按下進(jìn)入調(diào)鬧鐘狀態(tài)(在鬧鈴響時按此鍵能屏蔽鬧鈴音),在兩個不一樣狀態(tài)下,key3、key4、key5三個按鍵的功能是相似的,當(dāng)被按下時,時、分、秒的數(shù)值加1。(由于圖片限制校時狀態(tài)下和鬧鐘設(shè)定類似不予以截圖。)圖5.4時間調(diào)整/鬧鐘設(shè)定模塊調(diào)試圖調(diào)試注意事項軟件設(shè)計時,需要確定好軟件設(shè)計的思緒,即先確定各個功能需要實現(xiàn)的先后,再將各功能模塊單獨進(jìn)行編寫調(diào)試,待各模塊功能完善后,再進(jìn)行總體聯(lián)合調(diào)試。調(diào)試過程中出現(xiàn)了某些問題,并一一處理:(1)在進(jìn)行系統(tǒng)聯(lián)機(jī)調(diào)試時,要注意電源與否接通,PC機(jī)的接口和關(guān)鍵板上的JTAG下載口與否連接對的。確定將未使用的引腳設(shè)置為三態(tài)輸入,否則也許會損壞芯片。(2)顯示模塊對的調(diào)試之后,進(jìn)行時鐘系統(tǒng)的調(diào)試過程中,出現(xiàn)時間信息并沒有顯示在屏幕上,而在對應(yīng)時間信息的位置上顯示的是“-”。出現(xiàn)此問題時候,首先對硬件進(jìn)行再次檢查,用示波器檢查引腳兩端與否有信號的輸入輸出。成果發(fā)現(xiàn)硬件電路連接對的,問題出目前引腳設(shè)置的方面。在設(shè)定引腳時,沒有選擇對的的輸出引腳。通過查找書本,修改輸出引腳,處理了這個問題。(3)時鐘模塊時,出現(xiàn)秒鐘走的過快的現(xiàn)象。最終發(fā)現(xiàn)是分頻程序中沒有對的的對時鐘脈沖信號進(jìn)行對的的分頻。通過在網(wǎng)絡(luò)資源和書籍的學(xué)習(xí)對的的改善了這個問題。(4)鍵盤調(diào)整時間程序中,出現(xiàn)了無法正常調(diào)時狀況,按鍵盤后,時間信息沒有變化或者變化過多。通過檢查,找到原因是沒有給按鍵進(jìn)行按鍵去抖動。這闡明在編寫程序時候要充足理解各芯片內(nèi)容資料,減少編寫小錯誤引起對整個程序?qū)е碌挠绊?。?)鬧鐘報時和整點報時蜂鳴時間問題。鬧鐘報時中,假如鬧鐘時間到就會鬧鈴1分鐘,考慮到實際生活中,鬧鐘都是可以手動關(guān)閉的,于是設(shè)定了一種鬧鐘開關(guān)鍵,為了減少系統(tǒng)硬件的繁雜,當(dāng)系統(tǒng)時間抵達(dá)鬧鈴時間和整點報時的時間,蜂鳴器才會響起。
總結(jié)和展望總結(jié)在FPGA上設(shè)計和調(diào)試都需要耐心,時鐘設(shè)計在生活中無處不在,設(shè)計的過程要考慮到應(yīng)用的習(xí)慣,設(shè)計更人性化的體驗,才會是一種好的設(shè)計。在VerilogHDL語言的學(xué)習(xí)上還存在某些問題,沒有深入的學(xué)習(xí),對于有些語法錯誤,還需要仔細(xì)的查找。假如將這個數(shù)字時鐘應(yīng)用于現(xiàn)實生活中,還存在些許的問題。例如按鍵太多,操作起來沒那么的以便等等。展望針對數(shù)字時鐘的設(shè)計,通過以上的驗證,我們可以懂得,對數(shù)字時鐘來說,其實占用很少邏輯資源,也就意味著假如一點制作成SOC的話,成本會非常的低,因此基于這點,整個模塊完全可以依附在其他功能產(chǎn)品(如CPU內(nèi)部)上,給整個產(chǎn)品增長的優(yōu)勢。參照文獻(xiàn)劉君,常明,秦娟,基于硬件描述語言(VHDL)的數(shù)字時鐘設(shè)計,天津理工大學(xué)學(xué)報,,第23卷第4期,40-41廖日坤,CPLD/FPGA嵌入式應(yīng)用開發(fā)技術(shù)白金手冊,中國電力出版社,,212-218。王開軍,姜宇柏,面向CPLD/FPGA的VHDL設(shè)計,機(jī)械工業(yè)出版社,,28-65。趙保經(jīng),中國集成電路大全,國防工業(yè)出版社,1985。高吉祥,電子技術(shù)基礎(chǔ)試驗與課程設(shè)計,電子工業(yè)出版社,。呂思忠,數(shù)子電路試驗與課程設(shè)計,哈爾濱工業(yè)大學(xué)出版社,。謝自美,電子線路設(shè)計、試驗、測試,華中理工大學(xué)出版社,。趙志杰,集成電路應(yīng)用識圖措施,機(jī)械工業(yè)出版社,,35-40。張慶雙,電子元器件的選用與檢測,機(jī)械工業(yè)出版社,。譚會生,張昌凡,EDA技術(shù)及應(yīng)用,西安電子科技大學(xué)出版社,。李可,數(shù)字鐘電路及應(yīng)用[M],北京:電子工業(yè)出版社,1996。康華先,電子技術(shù)基礎(chǔ)(數(shù)字部分)第四版[M].北京:高等教育出版社,.213-224。集成電路手冊分編委會編,中外集成電路簡要速查手冊,TTL、CMOS電路[M],北京:電子工業(yè)出版社,1997??等A光,電子技術(shù)基礎(chǔ),高等教育出版社,宋春榮,通用集成電路速查手冊,山東科學(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è)計過程中指導(dǎo)和協(xié)助過我的人。首先,我要感謝我的指導(dǎo)嚴(yán)格規(guī)定。本論文的選題和撰寫都是在她的指導(dǎo)下完畢的。從開始對verilogHDL語言不懂的狀況下,慢慢學(xué)習(xí),通過一段時間的探索,開始學(xué)著在試驗板上進(jìn)行練習(xí)操作,才有了長足的進(jìn)步,最終調(diào)試成功;老師對于問題思緒的指導(dǎo),都將成為此后工作、學(xué)習(xí)的寶貴精神財富。在我走向社會,走向工作崗位的過程中,老師予以我的教導(dǎo)、協(xié)助和殷切期望,促使我愈加積極追求新的人生目的。感謝父母一直默默地予以我關(guān)懷和支持,父母的悉心關(guān)懷,永遠(yuǎn)是鼓勵我積極向上的不竭動力。最終,還要感謝和我同樣即將畢業(yè)的同班同學(xué);感謝大學(xué)四年的同寢室室友;感謝那些沒有提及姓名,但也同樣予以我協(xié)助的老師、同學(xué)和朋友!附錄moduleclock(clk,key,dig,seg,beep);//模塊名clockinputclk; //輸入時鐘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; //定義計數(shù)寄存器reg[14:0]count; //定義計數(shù)中間寄存器reg[23:0]hour=24'h235956; //定義目前時刻寄存器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秒時鐘regclk1; //1ms時鐘regbeep_r; //寄存器wirebeepen;assignbeep=beep_r; //輸出音樂assigndig=dig_r; //輸出數(shù)碼管選擇assignseg=seg_r; //輸出數(shù)碼管譯碼成果assignbeepen=|hour[15:4];assignkey_done=key|dout3;//按鍵消抖輸出//1ms信號產(chǎn)生部分always@(posedgeclk) //定義clock上升沿觸發(fā)begin count=count+1'b1; if(count==15'd24000) //0.5mS到了嗎? begin count=15'd0; //計數(shù)器清零 clk1=~clk1; //置位秒標(biāo)志 endend//秒信號產(chǎn)生部分always@(posedgeclk1) //定義clock上升沿觸發(fā)begin count1=count1+1'b1; if(count1==9'd500) //0.5S到了嗎? begin count1=9'd0; //計數(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; //時個位加一 if(clktime[19:16]==4'ha) begin clktime[19:16]=4'h0; clktime[23:20]=clktime[23:20]+1'b1; //時十位加一 end if(clktime[23:16]==8'h24) clktime[23:16]=8'h0; end 3'b101: begin clktime[11:8]=clktime[11:8]+1'b1; //分個位加一 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; //秒個位加一 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]; //秒個位 4'd1:disp_dat=clktime[7:4]; //秒十位 4'd2:disp_dat=4'ha; //顯示"-" 4'd3:disp_dat=clktime[11:8]; //分個位 4'd4:disp_dat=clktime[15:12]; //分十位 4'd5:disp_dat=4'ha; //顯示"-" 4'd6:disp_dat=clktime[19:16]; //時個位 4'd7:disp_dat=clktime[23:20]; //時十位 4'd8:disp_dat=hour[3:0]; //秒個位 4'd9:disp_dat=hour[7:4]; //秒十位 4'd10:disp_dat=4'ha; //顯示"-" 4'd11:disp_dat=hour[11:8]; //分個位 4'd12:disp_dat=hour[15:12]; //分十位 4'd13:disp_dat=4'ha; //顯示"-" 4'd14:disp_dat=hour[19:16]; //時個位 4'd15:disp_dat=hour[23:20]; //時十位 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;//選擇第二個數(shù)碼管顯示 3'd2:dig_r=8'b11111011;//選擇第三個數(shù)碼管顯示 3'd3:dig_r=8'b11110111;//選擇第四個數(shù)碼管顯示 3'd4:dig_r=8'b11101111;//選擇第五個數(shù)碼管顯示 3'd5:dig_r=8'b11011111;//選擇第六個數(shù)碼管顯示 3'd6:dig_r=8'b10111111;//選擇第七個數(shù)碼管顯示 3'd7:dig_r=8'b01111111;//選擇第八個數(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//時間計算及校準(zhǔn)部分always@(negedgesec)//計時處理begin if(!keyen[1])//校準(zhǔn)鍵與否有
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 某高中副校長在11月升旗活動上的講話
- 2023年中考地理模擬卷(四)
- 湛江-PEP-2024年10版小學(xué)三年級下冊英語第5單元寒假試卷
- 《管理學(xué)原理》期末考試復(fù)習(xí)題庫(含答案)
- 骨盆骨折護(hù)理常規(guī)
- 云南省大理市2024-2025學(xué)年高三年級上冊規(guī)?;y(tǒng)一檢測地理試題(含答案)
- 2023年群路密碼機(jī)系列投資申請報告
- 2024年密封墊及類似接合襯墊項目資金籌措計劃書代可行性研究報告
- 強(qiáng)化財政投融資體制促進(jìn)積極財政政策的實施
- 耐高溫自潤滑聚酰亞胺復(fù)合材料
- 2024新高考英語1卷試題及答案(含聽力原文)
- 項目轉(zhuǎn)量產(chǎn)管理流程模板
- 幼兒園課件:獨孤癥譜系障礙兒童融合教育的特殊教育需要
- 《高延性混凝土加固技術(shù)規(guī)程》DB64-T1746-2020
- 淀粉發(fā)酵工藝的優(yōu)化與控制
- DL/T 5352-2018 高壓配電裝置設(shè)計規(guī)范
- 化驗室安全操作
- MOOC 攝影藝術(shù)創(chuàng)作-中國傳媒大學(xué) 中國大學(xué)慕課答案
- MOOC 電子線路設(shè)計、測試與實驗(一)-華中科技大學(xué) 中國大學(xué)慕課答案
- 勞務(wù)外包服務(wù) 投標(biāo)方案(技術(shù)方案)
- 快消品品牌推廣方案
評論
0/150
提交評論