基于VHDL的數(shù)字時鐘設(shè)計(jì)和時序仿真_第1頁
基于VHDL的數(shù)字時鐘設(shè)計(jì)和時序仿真_第2頁
基于VHDL的數(shù)字時鐘設(shè)計(jì)和時序仿真_第3頁
基于VHDL的數(shù)字時鐘設(shè)計(jì)和時序仿真_第4頁
基于VHDL的數(shù)字時鐘設(shè)計(jì)和時序仿真_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于VHDL的數(shù)字時鐘設(shè)計(jì)和時序仿真畢業(yè)設(shè)計(jì)基于VHDL的數(shù)字時鐘設(shè)計(jì)和時序仿真學(xué)生姓名: 學(xué) 院: 專 業(yè): 指導(dǎo)教師: 年 月目 錄1 引言12 設(shè)計(jì)概述23 開發(fā)工具簡介43.1 VHDL語言簡介43.1.1 VHDL發(fā)展史43.1.2 VHDL設(shè)計(jì)特點(diǎn)43.1.3 VHDL設(shè)計(jì)結(jié)構(gòu)53.1.4 VHDL設(shè)計(jì)步驟63.2 Quartus II軟件簡介63.2.1 Quartus II軟件介紹 63.2.2 Quartus II軟件設(shè)計(jì)流程64 數(shù)字時鐘的設(shè)計(jì)要求和原理84.1 設(shè)計(jì)要求84.2 設(shè)計(jì)原理85 數(shù)字時鐘模塊化設(shè)計(jì)105.1 分頻模塊115.2 計(jì)時模塊135.2.1 秒計(jì)時

2、模塊135.2.2 分計(jì)時模塊155.2.3 時計(jì)時模塊175.3 報警模塊185.4 數(shù)據(jù)選擇模塊205.5 譯碼顯示模塊226 數(shù)字時鐘模塊化仿真246.1 計(jì)時模塊仿真圖246.1.1 秒模塊仿真圖246.1.2 分模塊仿真圖246.1.3 時模塊仿真圖 256.2 報警模塊仿真圖256.3 數(shù)據(jù)選擇模塊仿真圖266.4 譯碼模塊仿真圖266.5 數(shù)字時鐘整體仿真圖277 FPGA開發(fā)板實(shí)驗(yàn)287.1 芯片和器件選擇 287.2 外部電路接線 287.2 硬件實(shí)物圖 288 結(jié)論30附錄31參考文獻(xiàn)42致謝431 引言 隨著科學(xué)技術(shù)的迅猛發(fā)展,在計(jì)算機(jī)技術(shù)的推動下電子技術(shù)獲得了飛速的發(fā)展

3、。電子產(chǎn)品幾乎滲透到了工業(yè)、生活的各個領(lǐng)域,其中集成電路的設(shè)計(jì)正朝著速度快、性能高、容量大、體積小和微功耗的方向發(fā)展?;谶@種情況,可編程邏輯器件的出現(xiàn)和發(fā)展大大改變了傳統(tǒng)的系統(tǒng)設(shè)計(jì)方法??删幊踢壿嬈骷拖鄳?yīng)的設(shè)計(jì)技術(shù)主要體現(xiàn)在三個方面:一是可編程邏輯器件的芯片技術(shù);二是適用于可邏輯編程器件的硬件編程技術(shù),三是可編程邏輯器件設(shè)計(jì)的EDA開發(fā)工具,它主要用來進(jìn)行可編程邏輯器件應(yīng)用的具體實(shí)現(xiàn)1。在本設(shè)計(jì)中采用了集成度較高的FPGA 可編程邏輯器件,選用了VHDL硬件描述語言和Quartus II開發(fā)軟件進(jìn)行設(shè)計(jì)。VHDL硬件描述語言在電子設(shè)計(jì)自動化( EDA)中扮演著重要的角色,由于采用了具有多層

4、次描述系統(tǒng)硬件功能的“自頂向下”(Top -Down)的全新設(shè)計(jì)方法,使設(shè)計(jì)師們擺脫了大量的輔助設(shè)計(jì)工作,而把精力集中于創(chuàng)造性的方案與概念構(gòu)思上,用新的思路來發(fā)掘硬件設(shè)備的潛力,從而極大地提高了設(shè)計(jì)效率,縮短了產(chǎn)品的研制周期2。Quartus II軟件是集成了編輯器、仿真工具、檢查/分析工具和優(yōu)化/綜合工具的這些所有開發(fā)工具的一種集成的開發(fā)環(huán)境,通過該開發(fā)環(huán)境能夠很方便的檢驗(yàn)設(shè)計(jì)的仿真結(jié)果以及建立起與可編程邏輯器件的管腳之間對應(yīng)的關(guān)系3。 EDA技術(shù)是以計(jì)算機(jī)為工具,根據(jù)硬件描述語言HDL完成的設(shè)計(jì)文件,自動地完成邏輯編譯、化簡、分割、綜合及優(yōu)化、布局布線。仿真以及對于特定目標(biāo)芯片的適配編譯和

5、編程下載等工作。典型的EDA工具中必須包含兩個特殊的軟件包,即綜合器和適配器。綜合器的功能就是將設(shè)計(jì)者在EDA平臺上完成的針對某個系統(tǒng)項(xiàng)目的HDL、原理圖或狀態(tài)圖形描述,針對給定的硬件系統(tǒng)組件,進(jìn)行編譯、優(yōu)化、轉(zhuǎn)換和綜合,最終獲得我們欲實(shí)現(xiàn)功能的描述文件。綜合器在工作前,必須給定所要實(shí)現(xiàn)的硬件結(jié)構(gòu)參數(shù),它的功能就是將軟件描述與給定的硬件結(jié)構(gòu)用一定的方式聯(lián)系起來。綜合過程就是將電路的高級語言描述轉(zhuǎn)換低級的。可與目標(biāo)器件FPGA/CPLD相映射的網(wǎng)表文件。適配器的功能是將由綜合器產(chǎn)生的王表文件配置與指定的目標(biāo)器件中,產(chǎn)生最終的下載文件,如JED文件。適配所選定的目標(biāo)器件(FPGA/CPLD芯片)必

6、須屬于在綜合器中已指定的目標(biāo)器件系列。2 設(shè)計(jì)概述 數(shù)字時鐘是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時、分、秒計(jì)時的裝置,與機(jī)械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機(jī)械裝置,具有更長的使用壽命,數(shù)字時鐘可植入自動控制、測試等系統(tǒng)內(nèi)部,作為系統(tǒng)的時鐘源,可為系統(tǒng)提供定時信號或中斷控制的時間基準(zhǔn),具有廣泛的用途。由于數(shù)字集成電路的發(fā)展使得數(shù)字時鐘的精度遠(yuǎn)遠(yuǎn)超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴(kuò)展了鐘表原先的單一報時功能4。加入了一些諸如自動報時、定時鬧鐘等功能。這些都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字時鐘及擴(kuò)大其應(yīng)用,有著非常現(xiàn)實(shí)的意義。數(shù)字時鐘的設(shè)計(jì)方法有很多種,包括基于

7、單片機(jī)的硬件設(shè)計(jì)、基于各種描述語言的軟件設(shè)計(jì),本設(shè)計(jì)采用VHDL語言來設(shè)計(jì)數(shù)字時鐘有著多方面的優(yōu)越性,通過把整個設(shè)計(jì)分為多個模塊依次來實(shí)現(xiàn),減少了眾多重復(fù)性步驟,合理化了設(shè)計(jì)過程,使得設(shè)計(jì)更加省時、快捷,提高了設(shè)計(jì)效率。目前,電子系統(tǒng)的EDA技術(shù)正從著眼與數(shù)字邏輯向模擬電路和數(shù)模混合電路的方向發(fā)展,21世紀(jì)是EDA技術(shù)飛速發(fā)展的時期,可以預(yù)見EDA技術(shù)將會對今后電子設(shè)計(jì)的發(fā)展產(chǎn)生重大的影響。隨著電子技術(shù)的發(fā)展,集成電路經(jīng)歷了從小規(guī)模、中規(guī)模到大規(guī)模和超大規(guī)模集成的過程,應(yīng)用系統(tǒng)向小型化、快速化、大容量、重量輕的方向發(fā)展5;數(shù)字系統(tǒng)的設(shè)計(jì)也已從芯片組合化設(shè)計(jì)走向單片系的設(shè)計(jì)。隨著微電子和計(jì)算機(jī)領(lǐng)

8、域的原理創(chuàng)新、技術(shù)創(chuàng)新、應(yīng)用創(chuàng)新層出不窮,許多特定功能的專用集成電路應(yīng)用日益廣泛,用戶迫切希望根據(jù)自身設(shè)計(jì)要求自行構(gòu)造邏輯功能的數(shù)字電路,復(fù)雜可編程邏輯器件FPGA順應(yīng)了這一新的需要。它能將大量邏輯功能集成于一個芯片中,其規(guī)??蛇_(dá)幾十萬或上百門以上,從而電子設(shè)計(jì)自動化EDA技術(shù)應(yīng)運(yùn)而生,它是電子產(chǎn)品及系統(tǒng)開發(fā)領(lǐng)域中一場革命性變革,EDA技術(shù)極大地推動了科學(xué)技術(shù)的發(fā)展6。EDA技術(shù)的發(fā)展使硬件電路設(shè)計(jì)軟件化,降低了硬件電路設(shè)計(jì)的難度,使設(shè)計(jì)周期和產(chǎn)品的開發(fā)時間縮短,設(shè)計(jì)更新變成了程序的修改,適應(yīng)了千變?nèi)f化的市場潮流。它的設(shè)計(jì)輸入可以使用硬件描述語言(HDL),采用“自頂向下”的設(shè)計(jì)方法7,為設(shè)計(jì)

9、者提供了一個高效、便捷的設(shè)計(jì)環(huán)境,同時也為充分發(fā)揮設(shè)計(jì)人員的創(chuàng)造性提供了條件。EDA技術(shù)主要應(yīng)用于數(shù)字電路的設(shè)計(jì),目前它在中國的應(yīng)用多數(shù)是用在FPGA的設(shè)計(jì)中。 EDA技術(shù)是現(xiàn)代電子信息工程領(lǐng)域的一門新技術(shù),它是在先進(jìn)的計(jì)算機(jī)工作平臺上開發(fā)出來的一套電子系統(tǒng)設(shè)計(jì)的軟硬件工具,并提供了先進(jìn)的電子系統(tǒng)設(shè)計(jì)方法8。20世紀(jì)90年代,國際上電子和計(jì)算機(jī)技術(shù)較先進(jìn)的國家,一直在積極探索新的電子電路設(shè)計(jì)方法,并在設(shè)計(jì)方法、工具等方面進(jìn)行了徹底的變革,取得了巨大成功。在電子技術(shù)設(shè)計(jì)領(lǐng)域,可編程邏輯器件的應(yīng)用,已得到廣泛的普及,這些器件為數(shù)字系統(tǒng)的設(shè)計(jì)帶來了極大的靈活性。這些器件可以通過軟件編程而對其硬件結(jié)構(gòu)

10、和工作方式進(jìn)行重構(gòu),從而使得硬件的設(shè)計(jì)可以如同軟件設(shè)計(jì)那樣方便快捷。這一切極大地改變了傳統(tǒng)的數(shù)字系統(tǒng)設(shè)計(jì)方法、設(shè)計(jì)過程和設(shè)計(jì)觀念,促進(jìn)了EDA技術(shù)的迅速發(fā)展9。目前,電子系統(tǒng)的EDA技術(shù)正從著眼與數(shù)字邏輯向模擬電路和數(shù)?;旌想娐返姆较虬l(fā)展,21世紀(jì)是EDA技術(shù)飛速發(fā)展的時期,EDA技術(shù)將會對今后電子設(shè)計(jì)的發(fā)展產(chǎn)生重大的影響10。3 開發(fā)工具簡介 3.1 VHDL語言簡介3.1.1 VHDL發(fā)展史 VHDL語言誕生于1982年,翻譯成中文就是超高速集成電路硬件描述語言。最初是由美國國防部開發(fā)出來供美軍用來提高設(shè)計(jì)的可靠性和縮減開發(fā)周期的一種使用范圍較小的設(shè)計(jì)語言。1987年底,VHDL被IEEE

11、和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。自IEEE公布了VHDL的標(biāo)準(zhǔn)版本,IEEE-1076之后,各EDA公司相繼推出了自己的VHDL設(shè)計(jì)環(huán)境,或宣布自己的設(shè)計(jì)工具可以和VHDL接口。此后VHDL在電子設(shè)計(jì)領(lǐng)域得到了廣泛的接受,并逐步取代了原有的非標(biāo)準(zhǔn)的硬件描述語言11。1993年,IEEE對VHDL進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展VHDL的內(nèi)容,公布了新版本的VHDL,主要是應(yīng)用在數(shù)字電路的設(shè)計(jì)中?,F(xiàn)在,VHDL和Verilog HDL作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,又得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語言。有專家認(rèn)為在新的世紀(jì)中,VHDL

12、與Verilog語言將承擔(dān)起大部分的數(shù)字系統(tǒng)設(shè)計(jì)任務(wù)12。 目前,它在中國的應(yīng)用多數(shù)是用FPGA/CPLD的設(shè)計(jì)中。 VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風(fēng)格與句法是十分類似于一般的計(jì)算機(jī)高級語言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可是部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實(shí)體的內(nèi)部功能和算法完成部分。在對一個設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個實(shí)體13。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系

13、統(tǒng)設(shè)計(jì)的基本點(diǎn)。3.1.2 VHDL設(shè)計(jì)特點(diǎn) 應(yīng)用VHDL語言進(jìn)行系統(tǒng)設(shè)計(jì),有以下幾方面的特點(diǎn): 1)功能強(qiáng)大:VHDL具有功能強(qiáng)大的語言結(jié)構(gòu)。它可以用明確的代碼描述復(fù)雜的控制邏輯設(shè)計(jì)。并且具有多層次的設(shè)計(jì)描述功能,支持設(shè)計(jì)庫和可重復(fù)使用的元件生成。VHDL是一種設(shè)計(jì)、仿真和綜合的標(biāo)準(zhǔn)硬件描述語言。 2)可移植性:VHDL語言是一個標(biāo)準(zhǔn)語言,其設(shè)計(jì)描述可以為不同的EDA工具支持。它可以從一個仿真工具移植到另一個仿真工具,從一個綜合工具移植到另一個綜合工具,從一個工作平臺移植到另一個工作平臺14。此外,通過更換庫再重新綜合很容易移植為ASIC設(shè)計(jì)。 3)獨(dú)立性:VHDL的硬件描述與具體的工藝技術(shù)

14、和硬件結(jié)構(gòu)無關(guān)。設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必管最終設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)器件是什么,而進(jìn)行獨(dú)立的設(shè)計(jì)。程序設(shè)計(jì)的硬件目標(biāo)器件有廣闊的選擇范圍,可以是各系列的CPLD、FPGA及各種門陣列器件。 4)可操作性:由于VHDL具有類屬描述語句和子程序調(diào)用等功能,對于已完成的設(shè)計(jì),在不改變源程序的條件下,只需改變端口類屬參量或函數(shù),就能輕易地改變設(shè)計(jì)的規(guī)模和結(jié)構(gòu)。 5)靈活性:VHDL最初是作為一種仿真標(biāo)準(zhǔn)格式出現(xiàn)的,有著豐富的仿真語句和庫函數(shù)。使其在任何大系統(tǒng)的設(shè)計(jì)中,隨時可對設(shè)計(jì)進(jìn)行仿真模擬。所以,即使在遠(yuǎn)離門級的高層次,設(shè)計(jì)者就能夠?qū)φ麄€工程設(shè)計(jì)的結(jié)構(gòu)和功能的可行性進(jìn)行查驗(yàn),并做出決策。3.1.3

15、VHDL設(shè)計(jì)結(jié)構(gòu) VHDL描述數(shù)字電路系統(tǒng)設(shè)計(jì)的行為、功能、輸入和輸出。它在語法上與現(xiàn)代編程語言相似,但包含了許多與硬件有特殊關(guān)系的結(jié)構(gòu)。VHDL將一個設(shè)計(jì)稱為一個實(shí)體Entity(元件電路或者系統(tǒng)),并且將它分成外部的可見部分(實(shí)體名連接)和內(nèi)部的隱藏部分(實(shí)體算法實(shí)現(xiàn))。當(dāng)定義了一個設(shè)計(jì)的實(shí)體之后,其他實(shí)體可以利用該實(shí)體,也可以開發(fā)一個實(shí)體庫。所以,內(nèi)部和外部的概念對系統(tǒng)設(shè)計(jì)的VHDL是十分重要的。外部的實(shí)體名或連接由實(shí)體聲明來描述。而內(nèi)部的實(shí)體算法或?qū)崿F(xiàn)則由結(jié)構(gòu)體來描述15。結(jié)構(gòu)體可以包含相連的多個進(jìn)程或者組建等其他并行結(jié)構(gòu),需要說明的是它們在硬件中都是并行運(yùn)行的。3.1.4 VHDL設(shè)

16、計(jì)步驟 采用VHDL的系統(tǒng)設(shè)計(jì),一般有以下6個步驟:1)按照要求的功能模塊劃分;2)VHDL的設(shè)計(jì)描述(設(shè)計(jì)輸入);3)代碼仿真模擬(前仿真);4)計(jì)綜合、優(yōu)化和布局布線;5)布局布線后的仿真模擬(后仿真);6)設(shè)計(jì)的實(shí)現(xiàn)(下載到目標(biāo)器件)。3.2 Quartus II軟件簡介3.2.1 Quartus II軟件介紹 Quartus II 是Alera公司推出的一款功能強(qiáng)大,兼容性最好的EDA工具軟件。該軟件界面友好、使用便捷、功能強(qiáng)大,是一個完全集成化的可編程邏輯設(shè)計(jì)環(huán)境,具有開放性、與結(jié)構(gòu)無關(guān)、多平臺完全集成化豐富的設(shè)計(jì)庫、模塊化工具、支持多種硬件描述語言及有多種高級編程語言接口等特點(diǎn)16

17、。Quartus II 支持原理圖輸入與 Verilog HDL 和VHDL輸入混合設(shè)計(jì),它除了承接原來的Max+Plus II 軟件的全部設(shè)計(jì)功能和器件對象外,還增加了許多新功能和新的FPGA器件系列。它可對設(shè)計(jì)進(jìn)行功能仿真,對數(shù)字電路的設(shè)計(jì)實(shí)現(xiàn)同步模擬分析和時序仿真。這種同步模擬分析、時序仿真在數(shù)字電路的教學(xué)中可以起到很好的輔助作用。 Quartus II是Altera公司推出的CPLD/FPGA開發(fā)工具,Quartus II提供了完全集成且與電路結(jié)構(gòu)無關(guān)的開發(fā)包環(huán)境,具有數(shù)字邏輯設(shè)計(jì)的全部特性,包括:可利用原理圖、結(jié)構(gòu)框圖、VerilogHDL、AHDL和VHDL完成電路描述,并將其保存

18、為設(shè)計(jì)實(shí)體文件;芯片(電路)平面布局連線編輯;功能強(qiáng)大的邏輯綜合工具;完備的電路功能仿真與時序邏輯仿真工具;定時/時序分析與關(guān)鍵路徑延時分析;可使用SignalTap II邏輯分析工具進(jìn)行嵌入式的邏輯分析;支持軟件源文件的添加和創(chuàng)建,并將它們鏈接起來生成編程文件;使用組合編譯方式可一次完成整體設(shè)計(jì)流程;自動定位編譯錯誤;高效的期間編程與驗(yàn)證工具;可讀入標(biāo)準(zhǔn)的EDIF網(wǎng)表文件、VHDL網(wǎng)表文件和Verilog網(wǎng)表文件;能生成第三方EDA軟件使用的VHDL網(wǎng)表文件和Verilog網(wǎng)表文件。3.2.2 Quartus II軟件設(shè)計(jì)流程 1)設(shè)計(jì)輸入:設(shè)計(jì)文件的輸入方法有原理圖輸入、文本輸入、內(nèi)存編輯

19、以及由第三方EDA工具產(chǎn)生的網(wǎng)表輸入、格式輸入,生成方法不同,生成的文件格式也有所不同。在圖形設(shè)計(jì)文件中,Quartus II軟件為了實(shí)現(xiàn)不同的邏輯功能提供了大量的基本單元符號和宏功能模塊,在圖形編輯器中可以直接調(diào)用;為了適應(yīng)自頂向下的設(shè)計(jì),設(shè)計(jì)者可以使用和Verilog HDL以及Tcl腳本輸入文本型設(shè)計(jì)17。 2)項(xiàng)目編譯:項(xiàng)目編譯主要完成設(shè)計(jì)項(xiàng)目的檢查和邏輯綜合,將項(xiàng)目最終設(shè)計(jì)結(jié)果生成器件的下載文件,并為模擬和編程產(chǎn)生輸出文件。 3)仿真驗(yàn)證和時序分析:在把經(jīng)過編譯的輸入設(shè)計(jì)編程或配置到器件之前,可以通過Quartus II軟件的仿真器對文件進(jìn)行全面測試,保證設(shè)計(jì)在各種可能的條件下都有正

20、確的響應(yīng)。根據(jù)所需的信息類型,可以進(jìn)行功能仿真和時序仿真。Quartus II時序分析器允許分析設(shè)計(jì)中所有邏輯的性能,得出時序分析結(jié)果,如建立時間、保持時間、引腳到引腳延遲、最大時鐘頻率、延遲時間及其它時序特征,并協(xié)助引導(dǎo)適配器滿足設(shè)計(jì)中的時序要求。 4)器件編程:成功編譯了設(shè)計(jì)工程之后,編譯器的Assembler模塊自動將適配過程的器件、邏輯單元和引腳分配信息轉(zhuǎn)換為器件的編程圖像,并以.sof形式保存,Quartus II軟件的編程器(programmer)使用該文件就可對器件進(jìn)行編程配置。4 數(shù)字時鐘設(shè)計(jì)要求和原理4.1 設(shè)計(jì)要求 在Quartus II軟件開發(fā)環(huán)境下,使用VHDL描述語言

21、、結(jié)合FPGA開發(fā)板編譯和仿真數(shù)字時鐘;要求時鐘能進(jìn)行基本的計(jì)時功能,按照:“時:分:秒”來顯示時間;并且能進(jìn)行時間設(shè)置,具有整點(diǎn)報時功能,可對所有顯示的內(nèi)容進(jìn)行調(diào)節(jié)設(shè)定。4.2 設(shè)計(jì)原理 根據(jù)設(shè)計(jì)要求,采用自頂向下的方法,層次化設(shè)計(jì)概念,將此任務(wù)分成若干模塊,設(shè)計(jì)時首先用VHDL語言編寫各個功能模塊,在 Quartus II開發(fā)環(huán)境下分別進(jìn)行編譯、仿真,然后再用頂層文件將各功能模塊連接起來。規(guī)定某一模塊的功能和各模塊之間的接口然后將各模塊組合起來構(gòu)成系統(tǒng)框圖。根據(jù)設(shè)計(jì)要求可以把整體設(shè)計(jì)分為:分頻模塊、計(jì)時模塊、數(shù)據(jù)掃描模塊、報警模塊和數(shù)據(jù)選擇模塊,然后再根據(jù)總體方案對各模塊進(jìn)行分別設(shè)計(jì)和仿真

22、下載18。根據(jù)總體方案對各模塊分別進(jìn)行設(shè)計(jì)、仿真和下載,數(shù)字時鐘的總體框圖如圖5.1所示, 報警模塊 聲音輸出24進(jìn)制計(jì)數(shù)器控 制 信 號6位數(shù)碼顯示管 時間 數(shù)據(jù) 動態(tài) 掃描 模塊譯 碼 電 路 setmin 60進(jìn)制計(jì)數(shù)器 reset 60進(jìn)制計(jì)數(shù)器 sethour 分頻模塊 50MHz 圖4.1 數(shù)字時鐘基本框圖 系統(tǒng)的基本功能模塊可劃分為:分頻模塊、計(jì)數(shù)模塊(包括秒、分、時) 、譯碼模塊、數(shù)據(jù)掃描模塊和報警模塊。計(jì)數(shù)模塊由兩個60進(jìn)制計(jì)數(shù)器和一個24進(jìn)制計(jì)數(shù)器組成,分別對秒、分、小時進(jìn)行計(jì)數(shù)。整個計(jì)數(shù)模塊從00點(diǎn)00分00秒開始計(jì)時,當(dāng)計(jì)數(shù)到23點(diǎn)59分59秒的時候,一天結(jié)束,計(jì)數(shù)器清

23、零,新的一天重新開始計(jì)數(shù)。秒計(jì)數(shù)器的計(jì)數(shù)時鐘信號為1Hz 的標(biāo)準(zhǔn)信號,可以由系統(tǒng)板上提供的50MHz 信號通過分頻得到。秒計(jì)數(shù)器的進(jìn)位輸出信號作為分鐘計(jì)數(shù)器的計(jì)數(shù)信號,分鐘計(jì)數(shù)器的進(jìn)位輸出信號又作為小時計(jì)數(shù)器的計(jì)數(shù)信號。要設(shè)計(jì)一個同時顯示時、分、秒6個數(shù)字的數(shù)字時鐘,則需要6個七段數(shù)碼顯示管。若同時點(diǎn)亮這6個七段數(shù)碼顯示顯示管,則電路中會產(chǎn)生一個比較大的電流,很容易造成電路燒壞,我們通過掃描電路來解決這一問題,通過產(chǎn)生一個掃描信號來控制6個七段顯示器,依次點(diǎn)亮6個七段數(shù)碼顯示管,也就是每次只點(diǎn)亮一個七段顯示器。只要掃描信號的頻率超過人的眼睛視覺暫留頻率24Hz以上,就可以達(dá)到盡管每次點(diǎn)亮單個七

24、段數(shù)碼顯示管,卻能具有6個同時顯示的視覺效果,而且顯示也不致閃爍抖動。其中6位掃描信號一方面控制七段顯示器依次點(diǎn)亮,一方面控制6選1選擇器輸出相應(yīng)顯示數(shù)字。時間數(shù)據(jù)選擇模塊的作用是將時鐘產(chǎn)生的秒、分鐘、小時信號集合起來,然后驅(qū)動六位七段數(shù)碼管的片選驅(qū)動信號輸出。5 數(shù)字時鐘模塊化設(shè)計(jì) 需要設(shè)計(jì)的數(shù)字時鐘由上述7個模塊組成,設(shè)計(jì)時,首先用VHDL語言編寫各個底層功能模塊,然后在Quartus II開發(fā)環(huán)境下分別進(jìn)行編譯、仿真, 然后再用頂層文件將各功能模塊連接起來,再進(jìn)行進(jìn)一步編譯、仿真、下載。以下介紹系統(tǒng)中各模塊的具體功能和設(shè)計(jì)方法。5.1 分頻模塊 本設(shè)計(jì)使用的FPGA開發(fā)板中使用的芯片是C

25、yclone EP1C6Q240C8,使用的是50MHz的時鐘脈沖輸入,根據(jù)電路的具體設(shè)計(jì)需要,對其進(jìn)行分頻設(shè)計(jì)。 如圖5.2所示,其為系統(tǒng)的分頻模塊,其中模塊clk1管腳輸出為1hz的時鐘脈沖,得出用于計(jì)數(shù)模塊和報警模塊正常工作的時鐘信號,在clk1k管腳輸出為一個1khz的時鐘脈沖,作用與動態(tài)掃描模塊的正常工作。輸入管腳:clk為50Mhz脈沖輸入;輸出管腳:clk1為1hz脈沖輸出; clk1k為1khz脈沖輸出. 圖5.2源代碼如下:library ieee;use ieee.std_logic_1164.all;entity fp is port( clk:in std_logic;

26、 q1:out std_logic q1k:out std_logic);end fp;architecture fp_arc of fp issignal x:std_logic;signal y:std_logic;begin process(clk) variable cnt:integer range 0 to 24999999; begin if clk'event and clk='1'then if cnt<24999999 then cnt:=cnt+1; else cnt:=0; x<=not x; end if; end if; q1&l

27、t;=x; end process;process(clk) variable cnt:integer range 0 to 24999; begin if clk'event and clk='1'then if cnt<24999 then cnt:=cnt+1; else cnt:=0; y<=not y; end if; end if; q1k<=y; end process;end fp_arc;5.2 計(jì)時模塊5.2.1 秒計(jì)時模塊 如圖5.3所示,計(jì)數(shù)電路的第一個模塊為秒計(jì)數(shù)模塊,其實(shí)質(zhì)是一個六十進(jìn)制計(jì)數(shù)器,其中輸入管腳: clk為1hz

28、的時鐘脈沖; reset為秒模塊清零復(fù)位鍵; setmin為調(diào)分鐘按鍵輸出管腳:enmin為分模塊的進(jìn)位信號; dout6.0為秒模塊輸出的計(jì)數(shù)信號. 圖5.3源代碼如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second is port( clk: in std_logic; reset: in std_logic; setmin: in std_logic; enmin: out std_logic; daout: out std_logic_vector(6 down

29、to 0);end entity second;architecture fun of second is signal count:std_logic_vector(6 downto 0); signal enmin_1,enmin_2:std_logic; begin daout<=count; enmin_2<=(setmin and clk); enmin<=(enmin_1 or enmin_2); process( clk,reset,setmin) begin if(reset='0')then count<="0000000&q

30、uot; elsif(clk'event and clk='1')then if(count(3 downto 0)="1001")then if(count<16#60#)then if(count="1011001")then enmin_1<='1'count<="0000000" else count<=count+7; end if; else count<="0000000" end if; elsif(count<16#60#

31、)then count<=count+1; enmin_1<='0'after 100ns; else count<="0000000" end if; end if; end process;end fun;5.2.2 分計(jì)時模塊 如圖5.4所示,計(jì)數(shù)模塊的第二個模塊為分計(jì)時模塊,其實(shí)質(zhì)是一個六十進(jìn)制計(jì)數(shù)器,其中:輸入管腳:clk為秒模塊輸出的進(jìn)位信號;clk1為1hz的時鐘控制脈沖; reset管腳的作用為分模塊的清零、復(fù)位; sethour為調(diào)小時按鍵。輸出管腳:enhour輸出為時模塊的進(jìn)位信號; dout6.0為分鐘模塊輸出的計(jì)數(shù)

32、信號. 圖5.4源代碼如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute is port( clk: in std_logic; clk1: in std_logic; reset: in std_logic; sethour: in std_logic; enhour: out std_logic; daout: out std_logic_vector(6 downto 0);end entity minute;architecture fun of minute

33、 is signal count:std_logic_vector(6 downto 0); signal enhour_1,enhour_2:std_logic; begin daout<=count; enhour_2<=(sethour and clk1); enhour<=(enhour_1 or enhour_2); process(clk,reset,sethour) begin if(reset='0')then count<="0000000" elsif(clk'event and clk='1

34、9;)then if(count(3 downto 0)="1001")then if(count<16#60#)then if(count="1011001")then enhour_1<='1' count<="0000000" else count<=count+7; end if; else count<="0000000" end if; elsif(count<16#60#)then count<=count+1; enhour_1<=&#

35、39;0'after 100 ns; else count<="0000000" end if; end if; end process;end fun;5.2.3 時計(jì)時模塊 如圖5.5所示,此模塊的第三個模塊為小時計(jì)數(shù)模塊,其實(shí)質(zhì)是一個二十四進(jìn)制計(jì)數(shù)器,其中:輸入管腳:clk為分模塊輸出的進(jìn)位信號; Reset為小時模塊的清零、復(fù)位管腳.輸出模塊:dout5.0為小時模塊輸出的計(jì)數(shù)信號. 圖5.5源代碼如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;en

36、tity hour is port( clk,reset: in std_logic; daout: out std_logic_vector(5 downto 0);end entity hour;architecture fun of hour is signal count:std_logic_vector(5 downto 0); begin daout<=count; process(clk,reset) begin if(reset='0')then count<="000000" elsif(clk'event and cl

37、k='1')then if(count(3 downto 0)="1001")then if(count<16#23#)then count<=count+7; else count<="000000" end if; elsif(count<16#23#)then count<=count+1; else count<="000000" end if; end if; end process;end fun;5.3 報警模塊 如圖5.6所示,報警模塊的作用是在時鐘整點(diǎn)的時候輸出一個

38、報時信號,信號作用用開發(fā)板上,產(chǎn)生外部響聲,起到報時的作用,同時可以選擇在開發(fā)板的LED上顯示出整點(diǎn)報時的LED花樣顯示,其中:輸出管腳:clk為1hz的脈沖信號; dain6.0是分鐘的輸入信號;輸出管腳:speak為整點(diǎn)報時的聲音輸出; lamp2.0為整點(diǎn)報時的LED輸出; 圖5.6源代碼如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alert is port( clk: in std_logic; dain: in std_logic_vector(6 downto

39、0); speak: out std_logic; lamp: out std_logic_vector(2 downto 0);end alert;architecture fun of alert is signal count1: std_logic_vector(1 downto 0); signal count: std_logic_vector(1 downto 0);begin speaker:process(clk) begin speak<=count1(1); if(clk'event and clk='1')then if(dain=&quo

40、t;0000000")then if(count1>="10")then count1<="00" else count1<=count1+1; end if; end if; end if; end process speaker; lamper:process(clk) begin if(rising_edge(clk)then if(count<="10")then if(count<="00")then lamp<="001" elsif(c

41、ount="01")then lamp<="010" elsif(count="10")then lamp<="100" end if; count<=count+1; else count<="00" end if; end if; end process lamper;end fun;5.4 時間數(shù)據(jù)選擇模塊 如圖5.7所示,該模塊的作用是將時鐘產(chǎn)生的秒、分鐘、小時信號集合起來,然后驅(qū)動六位八段共陰數(shù)碼管的片選驅(qū)動信號輸出。輸入管腳:clk1為1khz的時鐘脈沖; R

42、eset為數(shù)據(jù)選擇模塊的清零、復(fù)位信號; Sec6.0為秒模塊計(jì)數(shù)的輸入信號; Min6.0為分鐘模塊計(jì)數(shù)的輸入信號; Hour5.0為小時模塊計(jì)數(shù)的輸入信號;輸出管腳:dout3.0為選擇信號的輸出; Dp為八段數(shù)碼管小數(shù)點(diǎn)的輸出管腳; Sel2.0為位選后的輸出信號. 源代碼如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime is port( clk1,reset: in std_logic; sec,m

43、in: in std_logic_vector(6 downto 0); hour: in std_logic_vector(5 downto 0); daout: out std_logic_vector(3 downto 0); dp: out std_logic; sel: out std_logic_vector(2 downto 0);end seltime;architecture fun of seltime is signal count:std_logic_vector(2 downto 0); begin sel<=count; process(clk1,reset)

44、 begin if(reset='0')then count<="000" elsif(clk1'event and clk1='1')then if(count>="101")then count<="000" else count<=count+1; end if; end if; case count is when"000"=>daout<=sec(3 downto 0);dp<='0' when"0

45、01"=>daout(3)<='0' daout(2 downto 0)<=sec(6 downto 4); dp<='0' when"010"=>daout<=min(3 downto 0);dp<='1' when"011"=>daout(3)<='0' daout(2 downto 0)<=min(6 downto 4); dp<='0' when"100"=>daout<=hour(3 downto 0);dp<='1' when others=>daout(3 downto 2)<="00" daout(1 downto 0)<=hour(5 downto 4); dp<='0' end case; end process;end fun;5.5 譯碼顯示模塊 如圖5.8所示,此模塊為數(shù)字時鐘的譯碼顯示輸出模塊,其中:輸入管腳:num3.0為數(shù)據(jù)選擇模塊

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論