版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p> 本科畢業(yè)設計(論文)資料</p><p> 題 目 名 稱:基于FPGA的LED數(shù)顯時鐘 </p><p> 學 院(部):電氣與信息工程學院 </p><p> 專 業(yè):自動化 </p><p> 學 生 姓 名:</p&
2、gt;<p> 班 級:學號 </p><p> 指導教師姓名:職稱 </p><p> 最終評定成績:</p><p><b> 2014屆</b></p><p> 本科畢業(yè)設計(論文)資料</p><p>
3、第一部分 畢業(yè)論文</p><p><b> 摘 要</b></p><p> 在對當前數(shù)字電子鐘的開發(fā)手段進行了研究和對比后,最終決定選用EDA技術(shù)來實現(xiàn)這多功能的數(shù)字電子鐘,并且以FPGA芯片為核心,設計一個具有計時、定鬧、日歷、測溫等功能的單片機應用系統(tǒng),以VHDL語言為系統(tǒng)邏輯描述手段進行程序的編寫,在QuartusII工具軟件環(huán)境下,采用數(shù)字電路實現(xiàn)
4、對時、分、秒數(shù)字顯示的計時裝置仿真,使用震蕩電路構(gòu)成數(shù)字鐘的秒信號來確保標準的1HZ時間信號準確穩(wěn)定。由時基模塊、計時模塊、測溫模塊、顯示及編譯模塊共同構(gòu)成了一個基于FPGA的數(shù)字電子時鐘。這樣設計的優(yōu)點是:電路簡單、時間和溫度精度高、編程容易、操作簡單、性能可靠。</p><p> 該數(shù)字電子鐘可以應用于一般的工作和生活中,應用范圍廣,實用性強,還可以通過改裝,增加新的功能、提高性能,給人們的工作和生活帶來更
5、多的方便。</p><p> 關鍵詞:數(shù)字電子鐘,EDA技術(shù),VHDL語言</p><p><b> ABSTRACT</b></p><p> On the current development of digital electronic clock means on the basis of the comparison and r
6、esearch, finally decided to use single chip microcomputer technology to realize the multifunction digital electronic clock, and the FPGA chip as the core, to design a timing, set alarm, calendar, temperature, and other f
7、unctions of single-chip microcomputer application system, with VHDL language as the system logic description means, write in QuartusII tools software environment, adopting digital cir</p><p> The digital el
8、ectronic clock can be used in the common work and life, wide application range, strong practicability, can also through the modified, adding new features, improve performance, bring to people's work and life more con
9、venient.</p><p> Keywords: Digital electronic clock, EDA technology, the VHDL language</p><p><b> 目 錄</b></p><p><b> 摘 要I</b></p><p> A
10、BSTRACTII</p><p><b> 第1章 緒論1</b></p><p> 1.1課題的研究背景1</p><p> 1.2數(shù)字電子鐘的發(fā)展簡況1</p><p> 1.3 課題研究的內(nèi)容1</p><p> 第2章 系統(tǒng)的總體設計2</p><
11、;p> 2.1 FPGA的簡介2</p><p> 2.2.1 FPGA的基本結(jié)構(gòu)2</p><p> 2.2.2 FPGA系統(tǒng)設計流程4</p><p> 2.2 系統(tǒng)的總體結(jié)構(gòu)7</p><p> 2.3數(shù)字電子鐘的工作原理7</p><p> 2.4 綜合系統(tǒng)的總體組裝電路原理圖8&
12、lt;/p><p> 第3章 單元電路的模塊設計11</p><p> 3.1 分頻模塊電路設計與實現(xiàn)11</p><p> 3.2.計時模塊11</p><p> 3.2.1六十進制可預置計數(shù)器模塊11</p><p> 3.2.2.二十四進制可預置計數(shù)模塊13</p><p>
13、; 3.2.3定鬧模塊14</p><p> 3.3 日歷顯示模塊15</p><p> 3.3.1計星期電路15</p><p> 3.3.2計年電路16</p><p> 3.3.3計月電路18</p><p> 3.3.2計日電路19</p><p> 3.4溫度
14、顯示模塊22</p><p> 3.5顯示控制電路模塊源程序29</p><p> 3.6調(diào)整控制電路模塊34</p><p> 第4章 系統(tǒng)仿真38</p><p> 4.1計時模塊的有關仿真38</p><p> 4.1.1計分、秒模塊的仿真38</p><p> 4
15、.1.2 計時模塊的仿真39</p><p> 4.2日歷模塊的仿真39</p><p> 4.2.1 計星期電路的仿真39</p><p> 4.2.2 計年模塊的仿真40</p><p> 4.2.3 計月模塊的仿真40</p><p> 4.2.4 計日模塊的仿真40</p>
16、<p> 4.2.5整體波形的仿真:41</p><p><b> 結(jié)論42</b></p><p><b> 參考文獻43</b></p><p><b> 致 謝44</b></p><p> 附錄1 電路總原理圖I</p>&
17、lt;p><b> 第1章 緒論</b></p><p> 1.1課題的研究背景</p><p> 一寸光陰一寸金,在現(xiàn)在高科技不斷發(fā)展的時代,已經(jīng)不足以衡量當今社會的快速的發(fā)展可以賺取的社會財富值,而及時可靠的信息也成為了人們最重要的機遇,當面對這樣一個信息爆炸的時代,時間變得越來越寶貴,人們無疑需要一個良好的計劃時間表,而這就需要一個系統(tǒng)完善成熟的定時
18、系統(tǒng)來及時提醒人們。然而在這個新技術(shù)、新產(chǎn)品不斷涌現(xiàn),各類產(chǎn)品功能日益強大,這就需要我們帶著戰(zhàn)略性眼光選擇。多功能數(shù)字電子鐘無意是人們最好的選擇之一,多功能數(shù)字時鐘小巧、價格低廉,外觀造型日益精美、精確度高、功能齊全、使用方便,不僅僅可以顯示鐘表的功能也具備計時、測溫、定鬧鐘、顯示日歷、語音報表等功能,其集成化高而受到廣大人們?nèi)罕娤矏?。在人們不斷的要求下,多功能?shù)字鐘已經(jīng)成為現(xiàn)代設計時鐘研究生產(chǎn)的主導方向。</p><
19、;p> 1.2數(shù)字電子鐘的發(fā)展簡況</p><p> 在中國古代,人們通常采用日晷、圭表、銅壺滴漏、沙漏、燭光計時等方法來計時。圭表主要是用立竿見影的原理來測量,日晷是使用時,看日影落在盤的位置來確定時間,投壺滴漏是運用孔口流水來確定水位的變化,此方法應用廣泛,在歷史上遠遠早于國外的滴水計時器。而在國外,公元以前,人們也是主要利用天文現(xiàn)象來計時,比如觀察太陽日出日落、星相的轉(zhuǎn)移,此后當在德國的亨萊思創(chuàng)造
20、了小型機械鐘開始,國外的鐘表行業(yè)逐漸掀起,到了19世紀,鐘表制造業(yè)已經(jīng)成為人們必不可少的一個行業(yè),鐘表制造業(yè)也逐漸的實現(xiàn)了工業(yè)化生產(chǎn),在20世紀,隨著電子潮流的飛速發(fā)展,鐘表行業(yè)也出現(xiàn)了翻天覆地的變化,由單一的機械表轉(zhuǎn)向多元式的鐘表,有電池驅(qū)動鐘、電機械表、指針式電子鐘表、數(shù)字式電子鐘表等種類,并且功能不斷的增多如現(xiàn)在出現(xiàn)的多功能數(shù)字電子鐘,它采用的是數(shù)字電路來顯示分秒,它的作用早已不僅限于計時的功能,它還可以顯示日歷、定鬧、報時、測溫
21、等功能。它人性化的設計給人們的生活帶來了很多的方便,成為人們?nèi)粘I畹谋匦杵贰?lt;/p><p> 1.3 課題研究的內(nèi)容</p><p> 以FPGA芯片為中心,設計一個具有計時、定鬧、日歷、溫度測量功能的單片機應用系統(tǒng),具體功能如下:</p><p> ?。?)計時功能,日歷顯示功能,溫度測量顯示功能(LED顯示);</p><p>
22、?。?)定鬧功能,3點定鬧;</p><p> (3)日期、時間校對功能;</p><p> ?。?)定鬧時間設置功能;</p><p> ?。?) 完成基于VHDL語言的程序設計。</p><p> 第2章 系統(tǒng)的總體設計</p><p> 2.1 FPGA的簡介</p><p> F
23、PGA的英文全稱是Field-Programmaable Gate Array,即現(xiàn)場可編程門陣列。FPGA器件運用靜態(tài)隨機存取和邏輯單元陣列結(jié)構(gòu)器工藝、集成度高、設計靈活、可以無限反復編程,并且可以現(xiàn)場模擬調(diào)試驗證。FPGA器件它的開發(fā)系統(tǒng)是開發(fā)大規(guī)模數(shù)字集成電路新的技術(shù),它利用計算機輔助設計功能,可以繪制出實現(xiàn)用戶邏輯原理圖、用硬件描述語言等方式作為設計輸入或者編輯布爾方程;然后經(jīng)過一系列程序轉(zhuǎn)換、自動布線布局、模擬仿真的過程;生成
24、配置FPGA器件數(shù)據(jù)文件,就可以對FPGA器件初始化。這就實現(xiàn)了能滿足用戶要求專用的集成電路,真正意義上達到了用戶自行研制、自行設計和自行生產(chǎn)集成電路的目的。由于FPGA器件具有設計靈活方便、高效率、高密度、標準化、系列化、多功能、小型化、低成本、低功耗、可以無限次的反復編程,并且可以現(xiàn)場模擬調(diào)試驗證等優(yōu)點,因此,使用FPGA器件,一般可以在幾天或幾周內(nèi)可以完成一個電子系統(tǒng)的設計和制作,縮短了研制周期,達到了快速上市和降低成本的要求。&
25、lt;/p><p> 2.2.1 FPGA的基本結(jié)構(gòu)</p><p><b> 1.器件的總體結(jié)構(gòu)</b></p><p> 器件的中間是一個邏輯塊陣列,它的的四周是可編程I/O單元(簡稱PIC),在邏輯塊的行與行之間分布著嵌入式RAM塊(簡稱EBR)。器件有兩種邏輯塊:一個是可編程功能單元(簡稱PFU);另一個是無RAM的可編程功能單元(簡
26、稱PFF)。其中PFU包含用于算法、邏輯、ROM的積木塊。而優(yōu)化的PFF和PFU可以靈活、有效的實現(xiàn)復雜設計。器件中每運行一種類型的積木塊,它每三行PFF間隔就有一行PFU。</p><p> 每個PIC塊中含有兩個具有sysIO接口的PIO對,它的左邊和右邊的PIO對可以配成發(fā)送和接收對,而sysMEM EBR是大的專用快速的存儲器塊,可以用于配置成ROM或RAM。</p><p>
27、 以下是PFU、PFF、PIC、和EBR塊以行和列的形式分布呈二維網(wǎng)格狀,如圖2.1,這些塊和水平的和垂直的布線資源連接在一起,軟件的布局布線功能可以自動的分配這些布線資源。</p><p> 圖2.1 器件的總體結(jié)構(gòu)</p><p> 2.PFU和PFF塊</p><p> 器件的核心是PFF和PFU。PFF可以通過編程去實現(xiàn)邏輯和算法及ROM功能。PFU能
28、通過編程去實現(xiàn)邏輯、算法和分布式RAM及分布式ROM功能。因此,除非特別說明,以下將不再區(qū)分PFF和PFU,都簡稱為PFU。</p><p> 3.可編程I/O單元(PIC)</p><p> 每個PIC有兩個連接至相關的sysIO,再連接到焊盤PAD,PIO塊會提供輸出數(shù)據(jù)(DO)和三態(tài)控制(TO)到sysIO緩沖器,而接收輸入數(shù)據(jù)也是來自緩沖器。兩個相鄰的PIO可以組成一個差分I/
29、O對,分別是用C和T標出。</p><p> PIO內(nèi)含四個模塊:輸入寄存器塊、輸出寄存器塊、制邏輯塊和三態(tài)寄存器控塊。這些塊內(nèi)含有寄存器,可用于單數(shù)據(jù)率(SDR)和雙數(shù)據(jù)率(DDR)運行,且伴有時鐘和選擇邏輯。</p><p><b> 4.時鐘分布網(wǎng)絡</b></p><p> 器件驅(qū)動的時鐘來自于三個主時鐘源:PLL輸出和專用時鐘輸
30、入及布線輸出。有二至四個系統(tǒng)時鐘PLL,位于器件的左邊和右邊,一共是四個專用的時鐘輸入,在器件的四邊各分布了一個。如圖2.2是20個主時鐘源。</p><p> 圖2.2 器件的時鐘源</p><p> 系統(tǒng)時鐘鎖相環(huán)有綜合時鐘頻率的能力。每個PLL有四個分頻器:輸入時鐘分頻器、反饋分頻器、后定標分頻器和瓷肌時鐘分頻器。輸入時鐘分頻器用于分頻輸入時鐘信號,反饋分頻器用于倍頻輸入信號,后
31、定標分頻器允許VCO以高于輸出時鐘的頻率運行,因此擴展了頻率范圍。</p><p> 2.2.2 FPGA系統(tǒng)設計流程</p><p> 可編程邏輯器件的設計過程是利用EDA開發(fā)軟件和編程工具對器件進行開發(fā)過程。可編程邏輯器件的開發(fā)過程如圖2.3所示,包括設計準備、設計輸入、功能仿真、設計處理、時序仿真和器件編程及測試七個步驟。</p><p> 圖2.3 可
32、編程邏輯器件的一般設計流程</p><p><b> 1.設計準備</b></p><p> 在系統(tǒng)設計之前,首先要進行的是方案論證,系統(tǒng)設計和器件選擇等準備工作。設計人員需要根據(jù)任務要求,如系統(tǒng)的功能和復雜度,對工作速度和器件本身的資源、成本及連線的可布性等方面進行權(quán)衡,選擇合適的設計方案和合適的器件類型。一般采用自頂向下的設計方法。</p>&l
33、t;p><b> 2.設計輸入</b></p><p> 設計輸入是設計人員將所設計的系統(tǒng)或電路以開發(fā)軟件的要求的某種形式表現(xiàn)出來,并送入計算機的過程。設計輸入通常有以下三種形式</p><p> ?。?)原理圖輸入方式</p><p> 原理圖輸入方式是一種最直接的設計描述方式,要設計什么,就從軟件系統(tǒng)提供的元件庫中調(diào)出來,畫出原
34、理圖。這種方式要求設計人員有豐富的電路知識及對PLD的結(jié)構(gòu)比較熟悉。</p><p> ?。?)硬件描述語言輸入方式</p><p> 硬件描述語言是用文本方式描述設計的,它分為普通硬件描述語言和行為描述語言。普通硬件描述語言有ABEL、CUR和LFM等,它們支持邏輯方程。真值表、狀態(tài)機等邏輯表達方式,主要用于簡單的PLD的設計輸入。行為描述語言是目前常用的高層硬件描述語言,主要有VHD
35、L和Verilog-HDL兩個IEEE標準。</p><p><b> (3)波形輸入方式</b></p><p> 波形輸入方式主要用來建立和編輯波形文件,以及輸入仿真向量和功能測試向量。波形設計輸入適用于時序邏輯和有重復性的邏輯函數(shù)。</p><p><b> 3.功能仿真</b></p><
36、p> 功能仿真在編譯之前對用戶所設計的電路進行邏輯功能驗證,此時的仿真沒有延時信息,僅對初步的功能進行檢測。仿真前,要先利用波形編輯器和硬件描述語言建立波形文件和測試向量,仿真結(jié)果將會生成報告文件和輸出信號波形,從中便可以觀察到各點的信號變化。如發(fā)現(xiàn)錯誤則返回設計輸入中修改邏輯設計。</p><p><b> 4.設計處理</b></p><p> 設計處
37、理是器件設計的中心環(huán)節(jié)。在設計處理過程中,編譯軟件將對設計輸入文件進行邏輯簡化、綜合優(yōu)化和適配,最后產(chǎn)生編程用的編譯文件。其中包括:語法檢查和設計規(guī)則檢查、邏輯優(yōu)化和綜合、適配和分割、布局和布線。</p><p><b> 5.時序仿真</b></p><p> 時序仿真又稱為后仿真或延時仿真。由于不同器件的內(nèi)部延時不一樣,不同的布局布線方案也給延時造成不同的影響
38、。因此在設計處理后,對系統(tǒng)和各模塊進行時序仿真,分析其時序關系,估計設計的性能,以檢查和消除競爭冒險等是非常有必要的。實際上這也是與實際器件工作情況基本相同的仿真。</p><p><b> 6.器件編程測試</b></p><p> 時序仿真完成后,軟件就可 產(chǎn)生供器件編程使用的數(shù)據(jù)文件,對FPGA來說是產(chǎn)生位流數(shù)據(jù)文件,然后將編程數(shù)據(jù)放到對應的具體可編程器件中
39、去。</p><p> 器件編程需要一定的條件,如編程電壓、編程時序和編程算法等?;赟RAM的FPGA可以由EPROM或其他儲存體進行配置。在線可編程的PLD器件不需要專門的編程器,只要一根編程下載電纜就可以了。</p><p> 器件在編程完畢后,可以用編譯時產(chǎn)生的文件對器件進行校驗、加密等工作。對于支持JTAG技術(shù),具有邊界掃描測試能力和在線編程能力對器件來說,測試起來就更加方便
40、。</p><p> 2.2 系統(tǒng)的總體結(jié)構(gòu)</p><p> 根據(jù)設計要求,系統(tǒng)可分為以下模塊:二十四進制可預置計數(shù)模塊,十進制可預置計數(shù)模塊,六進制可預置計數(shù)模塊,LED譯碼模塊。系統(tǒng)組成方框圖如圖2-4所示</p><p> 圖2.4 系統(tǒng)組成方框圖</p><p> 2.3數(shù)字電子鐘的工作原理</p><p
41、> 振蕩器產(chǎn)生穩(wěn)定高頻脈沖信號作為數(shù)字鐘的時間基準,經(jīng)過分頻器輸出標準的秒脈沖。秒計數(shù)器計滿60后向分計數(shù)器進位,分計數(shù)器計滿60后向時計數(shù)器進位,時計數(shù)器24后各計數(shù)器清零,重新計數(shù)。日期部分一個星期有七天,由時計數(shù)器滿24后向日期計數(shù)器進位。計數(shù)器的輸出分別經(jīng)譯碼器送數(shù)碼管顯示。計時出現(xiàn)誤差時,可以用校時電路對時、分、秒進行校正。在控制信號中除一般的校時信號外,還有時鐘使能信號、時鐘清零信號。時基電路由石英晶體振蕩電路構(gòu)成。
42、譯碼顯示電路由七段譯碼器完成,顯示由led數(shù)碼管顯示。</p><p> 2.4 綜合系統(tǒng)的總體組裝電路原理圖</p><p> 如圖2.5為調(diào)整控制電路(ATCC),通過KEY進行調(diào)整模式的選擇;CLK_KEY進行具體調(diào)節(jié)相應的秒、分、時、日、月、年等模式。</p><p> 圖2.5 為調(diào)整控制電路</p><p> 如圖2.6為
43、整個計時系統(tǒng)的運算部分。整體由上一級進位信號作為下一級的是輸入信號。實現(xiàn)相關的關聯(lián)。由于界面過小,因此無法到完整的計數(shù)部分的原理圖。</p><p> 圖2.6 計時系統(tǒng)的運算部分</p><p> 如圖2.7是控制顯示面板上的模式選擇發(fā)光二極管部分的連線。該部分的輸入線連接的是調(diào)整控制電路的相應SEC_EN、MIN_IN等端口。表明控制調(diào)整模式的選擇。</p><
44、;p> 2.8 發(fā)光二極管部分的連線</p><p> 如圖2.8是整體電路圖中的顯示控制部分及譯碼器部分。該部分實現(xiàn)的是相關的顯示在系統(tǒng)功能面板上的一系列LED顯示管。</p><p> 圖2.8 顯示控制部分及譯碼器部分</p><p> 如圖2.9為綜合邏輯總圖:</p><p> 圖2.9電路硬件設計總原理圖<
45、/p><p> 第3章 單元電路的模塊設計</p><p> 3.1 分頻模塊電路設計與實現(xiàn)</p><p> 晶體振蕩器是構(gòu)成數(shù)字式時鐘的核心,振蕩器的穩(wěn)定度及頻率的精度決定了數(shù)字鐘計時的準確程度,它保證了時鐘的走時準確及穩(wěn)定。</p><p> 石英晶體的選頻特性非常好,只有某一頻率點的信號可以通過它,其它頻率段的信號均會被它所衰減,
46、而且,振蕩信號的頻率與振蕩電路中的R、C元件的數(shù)值無關。因此,這種振蕩電路輸出的是準確度極高的信號。然后再利用分頻電路,將其輸出信號轉(zhuǎn)變?yōu)槊胄盘?,其組成框圖如圖3.1。</p><p> 圖3.1 秒信號產(chǎn)生電路框圖</p><p> 本系統(tǒng)使用的晶體振蕩器電路給數(shù)字鐘提供一個頻率穩(wěn)定準確的方波信號,其輸出至分頻電路。分頻電路的邏輯框圖如圖3.2所示。</p><p
47、> 圖3.2 分頻電路模塊</p><p><b> 3.2.計時模塊</b></p><p> 3.2.1六十進制可預置計數(shù)器模塊</p><p> 計數(shù)模塊邏輯框圖如圖3.2所示。</p><p> 圖3.2 60進制計數(shù)模塊框圖</p><p> 時鐘由時分秒組成,分和秒都
48、是六十進制,以直接輸入秒脈沖作為計秒電路的時鐘信號,等到計數(shù)到60的瞬間進位,計分電路加1,而計秒電路清零并重新計秒。輸入端口ENL是秒時鐘使能信號,也是整個數(shù)字中的使能信號,高電平有效;RES是異步清零信號;CLK是秒脈沖輸入端口;MADD和MDEC是同步校時控制信號,MADD是控制秒信號加一,MDEC是控制秒信號減一;輸出端口A[3..0]是秒時鐘的低位,B[3..0]是高位;CA端口是進位輸出端口,當秒計數(shù)到59時輸出高電平,其它
49、時候輸出低電平。計數(shù)模塊的程序如下:</p><p> --CNT60.VHD</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENT
50、ITY CNT60 IS</p><p> PORT(LD:IN STD_LOGIC; --置位信號(低電平有效)</p><p> CLK:IN STD_LOGIC; --時鐘脈沖</p><p> DATA:IN STD_LOGIC_VECTOR(5 DOWNTO 0); --預置數(shù) </p><p> NUM:BUFFER
51、STD_LOGIC_VECTOR(5 DOWNTO 0);--計數(shù)結(jié)果</p><p> CO:OUT STD_LOGIC);--進位信號</p><p> END ENTITY CNT60;</p><p> ARCHITECTURE ART OF CNT60 IS</p><p><b> BEGIN</b>
52、</p><p> PROCESS(CLK,LD) IS</p><p><b> BEGIN</b></p><p> IF(LD='0') THEN</p><p> NUM<=DATA;</p><p> ELSIF CLK'EVENT AND CLK
53、='1' THEN</p><p> IF NUM="111011" THEN--59</p><p> NUM<="000000";CO<='1';</p><p><b> ELSE</b></p><p> NUM<=
54、NUM+1;CO<='0';</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ART;</p><p&
55、gt; 3.2.2.二十四進制可預置計數(shù)模塊</p><p> 計數(shù)模塊邏輯框圖如圖3.3所示。</p><p> 圖3.3 24進制計數(shù)模塊邏輯圖</p><p> 時鐘的小時是二十四進制的,所以必須設計一個二十四進制的可預置計數(shù)。待計分計數(shù)至60的瞬間進位,計時計數(shù)加1。計數(shù)模塊的程序如下:</p><p> --CNT24.V
56、HD</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY CNT24 IS</p><p> PORT(LD:IN STD_
57、LOGIC;--置位信號(低電平有效)</p><p> CLK:IN STD_LOGIC;--時鐘脈沖</p><p> DATA:IN STD_LOGIC_VECTOR(4 DOWNTO 0);--預置數(shù)</p><p> NUM:BUFFER STD_LOGIC_VECTOR(4 DOWNTO 0);--計數(shù)結(jié)果</p><p>
58、 CO:OUT STD_LOGIC);--進位信號</p><p> END ENTITY CNT24;</p><p> ARCHITECTURE ART OF CNT24 IS</p><p><b> BEGIN</b></p><p> PROCESS(CLK,LD) IS</p><
59、;p><b> BEGIN</b></p><p> IF(LD='0') THEN</p><p> NUM<=DATA;</p><p> ELSIF CLK'EVENT AND CLK='1' THEN</p><p> IF NUM="110
60、00" THEN--24</p><p> NUM<="00001";CO<='1';</p><p><b> ELSE</b></p><p> NUM<=NUM+1;CO<='0';</p><p><b> E
61、ND IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ART;</p><p><b> 3.2.3定鬧模塊</b></p><p> 一般
62、時鐘都應具備鬧鐘的功能,即在時間出現(xiàn)設定時間時,數(shù)字電子鐘會自動報時,以示提醒。根據(jù)要求,電路應在3:00:00報時,即當時間在3時00分00秒到3時00分09秒期間時,報時電路自動報時。鬧鐘寄存器模塊的功能是在時鐘上升沿同步下,根據(jù)LOAD-NEW-A端口的輸入信號控制ALARM_TIME端口的輸出;當控制信號高電平有效時,把NEW_ALARM_TIME端口的輸入信號值輸出;RESET端口輸入信號對ALARM_TIME端口的輸出進行異
63、步清零復位。圖3.4是鬧鐘寄存器的邏輯圖</p><p> 圖3.4 鬧鐘寄存器邏輯圖</p><p><b> VHDL源程序為</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE
64、 WORK.ALL;</p><p> ENTITY ALARMREG IS</p><p> PORT(NEW_ALARM_TIME:IN T_CLOCK_TIME;</p><p> LOAD_NEW_A:IN STD_LOGIC;</p><p> CLK,RESET:IN STD_LOGIC;</p><p
65、> ALARM_TIME:OUT T_clock_time);</p><p> END ENTITY ALARMREG;</p><p> ARCHITECTURE ART OF ALARMREG IS</p><p><b> BEGIN</b></p><p> PROCESS(CLK,RESET)
66、IS</p><p><b> BEGIN</b></p><p> IF RESET='1'THEN</p><p> ALARM_TIME(0)<=0; ALARM_TIME(1)<=0;</p><p> ALARM_TIME(2)<=0; ALARM_TIME(3)<
67、;=0;</p><p> ALARM_TIME(4)<=0; ALARM_TIME(5)<=0;</p><p><b> ELSE</b></p><p> IF RISING_EDGE(CLK)THEN</p><p> IF LOAD_NEW_A='1'THEN</p&g
68、t;<p> ALARM_TIME<=NEW_ALARM_TIME;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END P
69、ROCESS;</p><p> END ARCHITECTURE ART;</p><p> 3.3 日歷顯示模塊</p><p> 3.3.1計星期電路</p><p> 計星期電路,將計時電路產(chǎn)生的進位脈沖信號作為計星期電路的計數(shù)時鐘信號,待計數(shù)至7的瞬間,計星期電路返回1重新計數(shù)。</p><p>
70、圖3.5 星期計數(shù)模塊邏輯圖</p><p> VHDL源程序如下:</p><p> --CNT7.VHD</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.A
71、LL;</p><p> ENTITY CNT7 IS</p><p> PORT(LD:IN STD_LOGIC; --置位信號(低電平有效)</p><p> CLK:IN STD_LOGIC;--時鐘信號</p><p> DATA:IN STD_LOGIC_VECTOR(2 DOWNTO 0);--預置數(shù)</p>
72、<p> NUM:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0));--計數(shù)結(jié)果</p><p> CO:OUT STD_LOGIC);--進位信號</p><p> END ENTITY CNT7;</p><p> ARCHITECTURE ART OF CNT7 IS</p><p><
73、;b> BEGIN</b></p><p> PROCESS(CLK,LD) IS</p><p><b> BEGIN</b></p><p> IF(LD='0')THEN</p><p> NUM<=DATA;</p><p> ELSIF
74、 CLK'EVENT AND CLK='1' THEN</p><p> IF NUM="111" THEN --7</p><p> NUM<="001";</p><p><b> ELSE</b></p><p> NUM<=NU
75、M+1;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ART;</p><p><b> 3.3.2計年
76、電路</b></p><p> 計年電路將計月電路產(chǎn)生的進位脈沖信號作為計年電路的計數(shù)時鐘信號,待計數(shù)至100的瞬間,計年電路返回0重新開始計數(shù)。(由于本系統(tǒng)的計年范圍僅為2000-2099年,所以計年模塊只對年份的后兩位進行計數(shù),年份的前兩位時鐘保持為“20”。)圖3.6是年計數(shù)模塊邏輯圖:</p><p> 圖3.6 年計數(shù)模塊邏輯圖</p><p
77、> VHDL源程序如下:</p><p> --CNT100.VHD</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTI
78、TY CNT100 IS</p><p> PORT(LD:IN STD_LOGIC; --置位信號(低電平有效)</p><p> CLK:IN STD_LOGIC;--時鐘信號</p><p> DATA:IN STD_LOGIC_VECTOR(6 DOWNTO 0);--預置數(shù)</p><p> NUM:BUFFER STD_
79、LOGIC_VECTOR(6 DOWNTO 0);--計數(shù)結(jié)果</p><p> CO:OUT STD_LOGIC); --進位信號</p><p> END ENTITY CNT100;</p><p> ARCHITECTURE ART OF CNT100 IS</p><p><b> BEGIN</b>
80、</p><p> PROCESS(CLK,LD) IS</p><p><b> BEGIN</b></p><p> IF(LD='0') THEN</p><p> NUM<=DATA;</p><p> ELSIF CLK'EVENT AND CLK
81、='1' THEN</p><p> IF NUM="1100100" THEN --100</p><p> NUM<="0000001";CO<='1';</p><p><b> ELSE</b></p><p> NUM
82、<=NUM+1;CO<='0';</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ART;</p>&
83、lt;p><b> 3.3.3計月電路</b></p><p> 計月電路是將計日電路產(chǎn)生的脈沖信號作為計月電路的計數(shù)時鐘信號,待計數(shù)至12的瞬間進位,計年電路加1,而計月電路返回1重新開始計數(shù)。圖3.7為月計數(shù)模塊邏輯圖:</p><p> 圖3.7 月計數(shù)模塊邏輯圖</p><p> VHDL源程序如下:</p>
84、<p> --CNT12.VHD</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY CNT12 IS</p><
85、p> PORT(LD:IN STD_LOGIC; --置位信號(低電平有效)</p><p> CLK:IN STD_LOGIC; --時鐘信號</p><p> DATA:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--預置數(shù)</p><p> NUM:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);-
86、-計數(shù)結(jié)果</p><p> CO:OUT STD_LOGIC);--進位信號</p><p> END ENTITY CNT12;</p><p> ARCHITECTURE ART OF CNT12 IS</p><p><b> BEGIN</b></p><p> PROCESS
87、 (CLK,LD) IS</p><p><b> BEGIN</b></p><p> IF(LD='0')THEN</p><p> NUM<=DATA;</p><p> ELSIF CLK'EVENT AND CLK='1' THEN</p>&
88、lt;p> IF NUM="1100" THEN --12</p><p> NUM<="0001";CO<='1';</p><p><b> ELSE</b></p><p> NUM<=NUM+1;CO<='0';</p
89、><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ART;</p><p><b> 3.3.2計日電路</b&g
90、t;</p><p> 由于一年中各個月份的日的長短不一樣,其共有28、29、30和31日四種情況,通過系統(tǒng)辨認由年和月共同決定,如表3.1年中0表示閏年,1表示平年;月中0表示1、2、3、5、7、8、10和12月,1表示其它月份;二月中1表示2月,0表示其它月份。圖3.7為日計數(shù)模塊邏輯圖</p><p> 表3.1 日長短邏輯表</p><p> 圖3.7
91、 日計數(shù)模塊邏輯圖</p><p> VHDL源程序如下:</p><p> --CNT30.VHD</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;&
92、lt;/p><p> ENTITY CNT30 IS</p><p> PORT(LD:IN STD_LOGIC;--置位信號(低電平有效)</p><p> CLK:IN STD_LOGIC;--時鐘信號</p><p> NIAN:IN STD_LOGIC_VECTOR(6 DOWNTO 0);--當前年</p><
93、;p> YUE:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--當前月</p><p> DATA:IN STD_LOGIC_VECTOR(4 DOWNTO 0);--預置數(shù)</p><p> NUM:BUFFER STD_LOGIC_VECTOR(4 DOWNTO 0);--計數(shù)結(jié)果</p><p> MAX_DAYS:OUT S
94、TD_LOGIC_VECTOR(4 DOWNTO 0);--本月總天數(shù)</p><p> CO:OUT STD_LOGIC);--進位信號</p><p> END ENTITY CNT30;</p><p> ARCHITECTURE ART OF CNT30 IS</p><p> SIGNAL TOTAL_DAYS:STD_LO
95、GIC_VECTOR(4 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PROCESS(CLK,LD) IS</p><p> VARIABLE IS_RUNNIAN:STD_LOGIC;</p><p><b> BEGIN</b></p>
96、;<p> CASE NIAN IS</p><p> WHEN "0000000"=>IS_RUNNIAN:='1'; --0</p><p> --如當前年為00,則輸入閏年確認信號</p><p> WHEN "0000100"=>IS_RUNNIAN:='
97、1'; --4</p><p> WHEN "0001000"=>IS_RUNNIAN:='1'; --8</p><p> WHEN "0001100"=>IS_RUNNIAN:='1'; --12</p><p> WHEN "00100
98、00"=>IS_RUNNIAN:='1'; --16</p><p> WHEN "0010100"=>IS_RUNNIAN:='1'; --20</p><p> WHEN "0011000"=>IS_RUNNIAN:='1'; --24</p&
99、gt;<p> WHEN "0011100"=>IS_RUNNIAN:='1'; --28</p><p> WHEN "0100000"=>IS_RUNNIAN:='1'; --32</p><p> WHEN "0100100"=>IS_RUNN
100、IAN:='1'; --36</p><p> WHEN "0101000"=>IS_RUNNIAN:='1'; --40</p><p> WHEN "0101100"=>IS_RUNNIAN:='1'; --44</p><p> WHEN
101、 "0110000"=>IS_RUNNIAN:='1'; --48</p><p> WHEN "0110100"=>IS_RUNNIAN:='1'; --52</p><p> WHEN "0111000"=>IS_RUNNIAN:='1';
102、 --56</p><p> WHEN "0111100"=>IS_RUNNIAN:='1'; --60 </p><p> WHEN "1000000"=>IS_RUNNIAN:='1'; --64 </p><p> WHEN "1000100&quo
103、t;=>IS_RUNNIAN:='1'; --68</p><p> WHEN "1001000"=>IS_RUNNIAN:='1'; --72</p><p> WHEN "1001100"=>IS_RUNNIAN:='1'; --76 </p>
104、<p> WHEN "1010000"=>IS_RUNNIAN:='1'; --80</p><p> WHEN "1010100"=>IS_RUNNIAN:='1'; --84</p><p> WHEN "1011000"=>IS_RUNNIAN:=
105、'1'; --88</p><p> WHEN "1011100"=>IS_RUNNIAN:='1'; --92 </p><p> WHEN "1100000"=>IS_RUNNIAN:='1'; --96</p><p> WHEN OT
106、HERS =>IS_RUNNIAN:='0';</p><p><b> END CASE;</b></p><p> CASE YUE IS</p><p> WHEN "0001"=>TOTAL_DAYS<="11111"; --1</p>
107、<p> --如當前月為1,則輸出本月總天數(shù)為31</p><p> WHEN "0011"=>TOTAL_DAYS<="11111"; --3</p><p> WHEN "0101"=>TOTAL_DAYS<="11111"; --5</p>
108、<p> WHEN "0111"=>TOTAL_DAYS<="11111"; --7</p><p> WHEN "1000"=>TOTAL_DAYS<="11111"; --8</p><p> WHEN "1010"=>TOTA
109、L_DAYS<="11111"; --10</p><p> WHEN "1100"=>TOTAL_DAYS<="11111"; --12</p><p> WHEN "0100"=>TOTAL_DAYS<="11110"; --4<
110、/p><p> WHEN "0110"=>TOTAL_DAYS<="11110"; --6</p><p> WHEN "1001"=>TOTAL_DAYS<="11110"; --9</p><p> WHEN "1011"=&
111、gt;TOTAL_DAYS<="11110"; --11</p><p> WHEN "0010"=> --2</p><p> IF(IS_RUNNIAN='1')THEN</p><p> TOTAL_DAYS<="111
112、01"; --如是閏年2月則總天數(shù)為29天</p><p><b> ELSE</b></p><p> TOTAL_DAYS<="11100"; --否則。2月總天數(shù)為28天</p><p><b> END IF;</b></p><p&
113、gt; WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p> IF(LD='0')THEN</p><p> NUM<=DATA;</p><p> ELSIF CLK'EVENT AND CLK='1'
114、THEN</p><p> MAX_DAYS<=TOTAL_DAYS;</p><p> IF NUM<=TOTAL_DAYS THEN --99</p><p> NUM<="00001";CO<='1';</p><p><b> ELSE</b&g
115、t;</p><p> NUM<=NUM+1;CO<='0';</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END AR
116、CHITECTURE ART;</p><p><b> 3.4溫度顯示模塊</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p>
117、<p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> ENTITY D18B20 IS</p><p> GENERIC(LED_0:STD_LOGIC_VECTOR (7 DOWNTO 0):="00000011"; </p><p> LED_1:STD_LOGIC_VECTOR (7 DO
118、WNTO 0):="10011111";</p><p> LED_2:STD_LOGIC_VECTOR (7 DOWNTO 0):="00100101";</p><p> LED_3:STD_LOGIC_VECTOR (7 DOWNTO 0):="00001101";</p><p> LED_4
119、:STD_LOGIC_VECTOR (7 DOWNTO 0):="10011001";</p><p> LED_5:STD_LOGIC_VECTOR (7 DOWNTO 0):="01001001";</p><p> LED_6:STD_LOGIC_VECTOR (7 DOWNTO 0):="01000001";</
120、p><p> LED_7:STD_LOGIC_VECTOR (7 DOWNTO 0):="00011111";</p><p> LED_8:STD_LOGIC_VECTOR (7 DOWNTO 0):="00000001";</p><p> LED_9:STD_LOGIC_VECTOR (7 DOWNTO 0):=&qu
121、ot;00001001";</p><p> LED0:STD_LOGIC_VECTOR (7 DOWNTO 0):="00000010"; </p><p> LED1:STD_LOGIC_VECTOR (7 DOWNTO 0):="10011110";</p><p> LED2:STD_LOGIC_VEC
122、TOR (7 DOWNTO 0):="00100100";</p><p> LED3:STD_LOGIC_VECTOR (7 DOWNTO 0):="00001100";</p><p> LED4:STD_LOGIC_VECTOR (7 DOWNTO 0):="10011000";</p><p>
123、 LED5:STD_LOGIC_VECTOR (7 DOWNTO 0):="01001000";</p><p> LED6:STD_LOGIC_VECTOR (7 DOWNTO 0):="01000000";</p><p> LED7:STD_LOGIC_VECTOR (7 DOWNTO 0):="00011110";&
124、lt;/p><p> LED8:STD_LOGIC_VECTOR (7 DOWNTO 0):="00000000";</p><p> LED9:STD_LOGIC_VECTOR (7 DOWNTO 0):="00001000"); </p><p> PORT(CLK,DIP1,DIP2:IN STD_LOGIC;&l
125、t;/p><p> TEMP:IN STD_LOGIC_VECTOR(15 DOWNTO 0);</p><p> LED77:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> LED44:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> LED:OUT STD_LO
126、GIC_VECTOR(7 DOWNTO 0);</p><p> BEEP:OUT STD_LOGIC);</p><p> END ENDTITY;</p><p> ARCHITECTURE BEHAV OF D18B20 IS</p><p> SIGNAL J:STD_LOGIC_VECTOR(1 DIWNTO 0);<
127、/p><p> SIGNAL LED71:STD_LOGIC_VECTOR(7 DIWNTO 0);</p><p> SIGNAL LED72:STD_LOGIC_VECTOR(7 DIWNTO 0);</p><p> SIGNAL LED73:STD_LOGIC_VECTOR(7 DIWNTO 0);</p><p> SIGNAL
128、 LED74:STD_LOGIC_VECTOR(7 DIWNTO 0);</p><p> TYPE STATE IS(S0,S1,S2,S3);</p><p> SIGNAL STATE:STATE_TYPE;</p><p> SIGNAL R:STD_LOGIC_VECTOR(15 DOWNTO 0);</p><p> TY
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga的數(shù)字時鐘設計畢業(yè)設計論文
- 畢業(yè)設計基于fpga的多功能數(shù)字時鐘
- 畢業(yè)設計基于fpga的多功能的數(shù)字時鐘設計
- 基于數(shù)顯直流穩(wěn)壓電源的畢業(yè)設計
- 基于數(shù)顯直流穩(wěn)壓電源的畢業(yè)設計
- 畢業(yè)設計--多功能數(shù)顯鍵盤設計
- 基于數(shù)顯直流穩(wěn)壓電源的畢業(yè)設計 (2)
- 數(shù)顯電容測試儀-畢業(yè)設計
- 數(shù)顯電容測試儀-畢業(yè)設計
- 數(shù)顯電容測試儀-畢業(yè)設計
- 基于fpga數(shù)字時鐘設計-畢業(yè)論文
- 基于fpga數(shù)字時鐘的設計
- 基于fpga的數(shù)字時鐘設計設計
- 高精度大屏幕led日歷時鐘 畢業(yè)設計
- 數(shù)顯電容測試儀-畢業(yè)設計 (2)
- 畢業(yè)設計--單片機數(shù)顯計時系統(tǒng)
- 數(shù)顯多波形信號源畢業(yè)設計
- 基于fpga的數(shù)字時鐘設計
- 基于fpga的多功能時鐘設計
- 基于fpga的數(shù)字時鐘設計部分
評論
0/150
提交評論