![數(shù)字鐘的設(shè)計_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/1/10f7d278-3ccf-4ab4-aba9-d2d7628c1392/10f7d278-3ccf-4ab4-aba9-d2d7628c13921.gif)
![數(shù)字鐘的設(shè)計_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/1/10f7d278-3ccf-4ab4-aba9-d2d7628c1392/10f7d278-3ccf-4ab4-aba9-d2d7628c13922.gif)
![數(shù)字鐘的設(shè)計_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/1/10f7d278-3ccf-4ab4-aba9-d2d7628c1392/10f7d278-3ccf-4ab4-aba9-d2d7628c13923.gif)
![數(shù)字鐘的設(shè)計_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/1/10f7d278-3ccf-4ab4-aba9-d2d7628c1392/10f7d278-3ccf-4ab4-aba9-d2d7628c13924.gif)
![數(shù)字鐘的設(shè)計_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/1/10f7d278-3ccf-4ab4-aba9-d2d7628c1392/10f7d278-3ccf-4ab4-aba9-d2d7628c13925.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、武漢理工大學(xué)EDA課程設(shè)計說明書課程設(shè)計任務(wù)書 學(xué)生姓名: 專業(yè)班級: 指導(dǎo)教師: 工作單位: 信息工程學(xué)院 題 目: 數(shù)字鐘 設(shè)計目的:1、掌握在Quartus軟件的使用方法,并能熟練的在Quartus環(huán)境中運用VHDL語言完成一些簡單程序的設(shè)計;2、掌握數(shù)字鐘的主要功能與在FPGA中的實現(xiàn)方法。 要求完成的主要任務(wù): 1、課程設(shè)計工作量:1周。2、技術(shù)要求:(1)設(shè)計一個6位LED動態(tài)掃描顯示的數(shù)字鐘,根據(jù)一個控制鍵能選擇顯示時、分、秒或年、月、日;(2)通過撥碼開關(guān)可以進行時、分、年、月、日的調(diào)整,可以實現(xiàn)翻屏;3、查閱至少5篇參考文獻。按武漢理工大學(xué)課程設(shè)計工作規(guī)范要求撰寫設(shè)計報告書。
2、全文用A4紙打印,圖紙應(yīng)符合繪圖規(guī)范。時間安排:1、 2015 年 6 月 11日集中,作課設(shè)具體實施計劃與課程設(shè)計報告格式的要求說明。2、 2012 年 6 月 12日至 2012 年 6 月 15日查閱相關(guān)資料,學(xué)習(xí)電路的工作原理。3、 2012 年 6 月 17 日 至 2012 年 6 月 19 日,方案選擇和電路設(shè)計。4、 2012 年 6 月 20 日 至 2012 年 6 月 21 日,電路調(diào)試和設(shè)計說明書撰寫。5、 2011 年 6 月 22日上交課程設(shè)計成果及報告,同時進行答辯。指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日目 錄摘 要IAbstractII
3、1 緒論12 設(shè)計內(nèi)容及要求12.1設(shè)計目的及主要任務(wù)12.1.1設(shè)計目的12.1.2 設(shè)計任務(wù)及要求12.2設(shè)計思想23 數(shù)字鐘的設(shè)計43.1 設(shè)計原理與方法43.2 單元模塊設(shè)計43.2.1 分頻計模塊設(shè)計43.2.2 消抖電路模塊設(shè)計53.2.3 計數(shù)器模塊設(shè)計53.2.4 鬧鐘及蜂鳴器設(shè)計73.2.5 多路復(fù)用器模塊設(shè)計83.2.6 八段譯碼模塊設(shè)計83.3 數(shù)字鐘設(shè)計總原理圖84 編譯報告84.1 設(shè)計原理與方法85 電路仿真與硬件調(diào)試95.1 電路仿真95.2 硬件調(diào)試106 總結(jié)與心得體會10參考文獻11附錄121 摘 要 EDA是電子設(shè)計自動化(Electronic Desig
4、nAutomation)的縮寫,在20世紀(jì)90年代初從計算機輔助設(shè)計(CAD)、計算機輔助制造(CAM)、計算機輔助測試(CAT)和計算機輔助工程(CAE)的概念發(fā)展而來的。 20世紀(jì)90年代,國際上電子和計算機技術(shù)較先進的國家,一直在積極探索新的電子電路設(shè)計方法,并在設(shè)計方法、工具等方面進行了徹底的變革,取得了巨大成功。 在電子技術(shù)設(shè)計領(lǐng)域,可編程邏輯器件(如CPLD、FPGA)的應(yīng)用,已得到廣泛的普及,這些器件為數(shù)字系統(tǒng)的設(shè)計帶來了極大的靈活性。這些器件可以通過軟件編程而對其硬件結(jié)構(gòu)和工作方式進行重構(gòu),從而使得硬件的設(shè)計可以如同軟件設(shè)計那樣方便快捷。這一切極大地改變了傳統(tǒng)的數(shù)字系統(tǒng)設(shè)計方法
5、、設(shè)計過程和設(shè)計觀念,促進了EDA技術(shù)的迅速發(fā)展。 EDA技術(shù)就是以計算機為工具,設(shè)計者在EDA軟件平臺上,用硬件描述語言VHDL完成設(shè)計文件,然后由計算機自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計的效率和可操作性,減輕了設(shè)計者的勞動強度。 本設(shè)計是通過Quartus 軟件、VHDL語言編程及FPGA芯片來實現(xiàn)常見的數(shù)字鐘,該數(shù)字鐘可以根據(jù)一個控制鍵能選擇顯示時、分、秒或年、月、日。本設(shè)計中用8位LED數(shù)碼管顯示時、分和秒,年、月、日,同時可以通過按鍵調(diào)整時、分、及對秒進行清零。
6、關(guān)鍵詞:Quartus ;VHDL;數(shù)字鐘;1 緒論 FPGA(FieldProgrammable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點??梢哉f,F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。FPGA是由存放在片內(nèi)RAM中的程序來設(shè)置其工作狀態(tài)的,因此,工作時需要對片內(nèi)的RAM進行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。加電時,F(xiàn)PGA芯片將EPROM中數(shù)據(jù)讀入片
7、內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時,只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。本設(shè)計是通過對數(shù)字鐘個組要組成部分的VHDL源程序編程和頂層文件的生成來實現(xiàn)的。在本設(shè)計中數(shù)字鐘的主要組成部分有撥碼開關(guān)模塊、按鍵修改模塊,計數(shù)器模塊、分頻計模塊、七段譯碼器模塊和數(shù)據(jù)選擇器模塊。通過按鍵可以實現(xiàn)選擇顯示時、分、秒或年、月、日,同時
8、可以顯示翻屏,還可以通過按鍵調(diào)整時、分及對秒進行清零。2 設(shè)計內(nèi)容及要求2.1設(shè)計目的及主要任務(wù)2.1.1設(shè)計目的(1)初步掌握Quartus軟件的使用方法,提高運用硬件描述語言VHDL的能力,初步 了解時序電路的設(shè)計。(2)利用對生活中熟悉的電子表,用語言設(shè)計相似功能的數(shù)字鐘。 2.1.2 設(shè)計任務(wù)及要求 完成以下基本要求及進行提高:(1)設(shè)計一個6位LED動態(tài)掃描顯示的數(shù)字鐘,根據(jù)一個控制鍵能選擇顯示時、分、秒或年、月、日;(2)通過按鍵可以進行時、分、年、月、日的調(diào)整,可以實現(xiàn)翻屏;(3)可以設(shè)置鬧鐘時間及整點報時,鬧鈴蜂鳴器頻率為1000Hz,整點報時頻率為2000Hz;(4)具有定時
9、翻屏功能,每隔54s,顯示一次年月日;(5)運用圖形設(shè)計方法完成頂層原理圖的設(shè)計。2.2設(shè)計思想 該數(shù)字鐘可以實現(xiàn)3個功能:計時功能、整點報時功能和重置時間功能,因此有3個子模塊:計時、報時、重置時間。其中計時模塊有4部分構(gòu)成:秒計時器、分計時器和時計時器。其中包括分秒60進制計數(shù)器、時24進制計數(shù)器、日30進制計數(shù)器、月12進制計數(shù)器和年10進制計數(shù)器,然后根據(jù)要求設(shè)置一個6選1的數(shù)據(jù)選擇器并且通過控制鍵實現(xiàn)選擇顯示時、分、秒或年、月、日,最后再設(shè)置3個按鍵調(diào)整數(shù)字鐘,并且通過一個七段譯碼器和8進制計數(shù)器控制七段數(shù)碼管實現(xiàn)顯示。3 數(shù)字鐘的設(shè)計3.1 設(shè)計原理與方法 數(shù)字計時器基本功能是計時
10、,因此首先需要獲得具有精確振蕩時間的脈振信號,以此作為計時電路的時序基礎(chǔ),實驗中可以使用的振蕩頻率源為4KHZ,通過分頻獲得所需脈沖頻率1Hz,1KHz,500Hz。為產(chǎn)生秒位,設(shè)計一個模60計數(shù)器,對1HZ的脈沖進行秒計數(shù)產(chǎn)生秒位,為產(chǎn)生分位,通過秒位的進位產(chǎn)生分計數(shù)脈沖,分位也由模60計數(shù)器構(gòu)成為產(chǎn)生時位,用一個模24計數(shù)器對分位的進位脈沖進行計數(shù)。整個數(shù)字計時器的計數(shù)部分共包括六位時十位、時個位、分十位、分個位、秒十位和秒個位。顯示功能是通過數(shù)選器、譯碼器、碼轉(zhuǎn)換器和7段顯示管實現(xiàn)的。因為實驗中只用一個譯碼顯示單元,7個7段碼,6個用于顯示時分秒,一個顯示星期,所以通過4個7選一MUX和
11、一個3-8譯碼器配合根據(jù)計數(shù)器的信號進行數(shù)碼管的動態(tài)顯示。清零功能是通過控制計數(shù)器清零端的電平高低來實現(xiàn)的。只需使清零開關(guān)按下時各計數(shù)器的清零端均可靠接入有效電平,本實驗中是低電平,而清零開關(guān)斷開時各清零端均接入無效電平即可。 校分校時功能由防抖動開關(guān)、邏輯門電路實現(xiàn)。其基本原理是通過邏輯門電路控制分計數(shù)器的計數(shù)脈沖。當(dāng)校分校時開關(guān)斷開時,計數(shù)脈沖由低位計數(shù)器提供,當(dāng)按下校分校時開通時,既可以手動觸發(fā)出發(fā)式開關(guān)給進位脈沖,也可以有恒定的1Hz脈沖提供恒定的進位信號,計數(shù)器在此脈沖驅(qū)動下可快速計數(shù)。為實現(xiàn)可靠調(diào)時,采用防抖動開關(guān),由D觸發(fā)器實現(xiàn),克服開關(guān)接通或斷開過程中產(chǎn)生的一串脈沖式振動。 保
12、持功能是通過邏輯門控制秒計數(shù)器輸入端的1Hz脈沖實現(xiàn)的。正常情況下,開關(guān)不影響脈沖輸入即秒正常計數(shù),當(dāng)按下開關(guān)后,使脈沖無法進入計數(shù)端,從而實現(xiàn)計時保持功能。整點報時功能可以通過組合邏輯電路實現(xiàn)。當(dāng)計數(shù)器的各位呈現(xiàn)特定的電平時,可以選通特定的與門和或門將指定的頻率信號送入蜂鳴器中實現(xiàn)在規(guī)定的時刻以指定頻發(fā)音報時。 3.2 單元模塊設(shè)計3.2.1 按鍵消抖電路模塊通常的按鍵所用開關(guān)為機械彈性開關(guān),當(dāng)機械觸點斷開、閉合時,電壓信號并不穩(wěn)定,由于機械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。4因而在閉合及斷開的瞬間均有一連串的抖動,抖動的時間的長短有按鍵的機械
13、特性決定,一般為5ms10ms。完成程序后可以創(chuàng)建元件。3.2.2 分頻器模塊設(shè)計根據(jù)設(shè)計要求,需要將開發(fā)板的50MHZ信號分出1HZ和1KHZ共2種時鐘信號,1HZ脈沖信號用來提供計數(shù)模塊的時鐘信號在1HZ的脈沖下,每隔一秒,秒自加一次,1KHZ脈沖信號用來提供消抖電路的時鐘信號,cnt用于數(shù)碼管掃描。完成程序后可以創(chuàng)建原理圖元件,其元件符號如圖3-1 所示。圖3-1 分頻器3.2.3 計數(shù)器模塊設(shè)計計數(shù)器模塊主要由秒60進制計數(shù)模塊、分60進制計數(shù)模塊、時24進制計數(shù)模塊、日30進制計數(shù)模塊、月12進制計數(shù)模塊、年計數(shù)模塊和8進制計數(shù)器。下圖3-3 是將60進制計數(shù)模塊、分60進制計數(shù)模塊
14、、時24進制計數(shù)模塊融合為一個模塊。圖3-3 時鐘電路 圖3-4 日30進制計數(shù)器 圖3-5 月12進制計數(shù)器秒60進制計數(shù)模塊的時鐘信號為1HZ的脈沖信號,每計數(shù)到59便會產(chǎn)生一次進位作為分60進制計數(shù)模塊的時鐘信號,該模塊加入一個清零端,當(dāng)CS為1時,秒計數(shù)模塊中的個位和十位同時為零,當(dāng)CS為1時正常計數(shù).分60進制計數(shù)模塊的時鐘信號為秒計數(shù)模塊的進位信號,其通過一個增加鍵CM對其調(diào)整。時24進制計數(shù)模塊的時鐘信號為分計數(shù)模塊的進位信號,其通過一個增加鍵CH對其調(diào)整。其中UP,CHANGE信號說明如下,當(dāng)UP 信號為高時時,表示數(shù)碼管翻屏了,即顯示年月日的時間為6ms。UP信號為低電平時,
15、顯示時分秒。在UP有效時,CHANGE為低電平,所有數(shù)碼管上部分熄滅,下部分顯示年月日的下半部分,CHANGE為高電平時,正常顯示年月日部分,直到UP 為低。5日30進制計數(shù)模塊的時鐘信號為時計數(shù)模塊的進位信號,其通過一個置數(shù)端load對其調(diào)整。日30進制計數(shù)器的VHDL程序如附錄所示,完成程序后可以創(chuàng)建元件,其元件符號如圖3-4所示。月12進制計數(shù)模塊的時鐘信號為日計數(shù)模塊的進位信號,其通過一個置數(shù)端對其調(diào)整。月12進制計數(shù)器的VHDL程序如附錄所示,完成程序后可以創(chuàng)建元件,其元件符號如圖3-5所示。年進制計數(shù)模塊的時鐘信號由月計數(shù)模塊的進位信號產(chǎn)生,年計數(shù)模塊又由四個十進制計數(shù)器組成,分別
16、是個位、十位、百位和千位計數(shù)模塊組成,中間由進位信號連接。其VHDL程序如附錄所示,完成程序后可以創(chuàng)建元件,其元件符號分別如圖3-6、圖3-7、圖3-8和圖3-9所示。 圖3-6 年個位計數(shù)器 圖3-7 年十位計數(shù)器 圖3-8 年百位計數(shù)器元件 圖3-9 年千位計數(shù)器元件符號 同時,本設(shè)計中還需要設(shè)計一個8進制計數(shù)器用來提供七段數(shù)碼管的位選碼和數(shù)據(jù)選擇器的狀態(tài)信號。其程序如附錄所示,其元件符號如圖3-2-10所示。圖3-10 8進制計數(shù)器3.2.4 鬧鐘及蜂鳴器設(shè)計本設(shè)計只針對時分秒進行定時,并可任意設(shè)定定時時間。整點報時蜂鳴器的頻率是2000Hz,鬧鐘是1000Hz。元件符號如圖3-11所示
17、。圖3-11 鬧鐘及蜂鳴器3.2.5 八段譯碼模塊設(shè)計一個數(shù)碼管是由8段LED顯示的,0-9對應(yīng)著不同的字形。數(shù)碼管是共陽的,使用共陽字型碼。需要將BCD碼轉(zhuǎn)換成數(shù)碼管可以顯示的碼,該模塊的程序如附錄所示,其元件符號如圖3-13所示。圖3-13 八段譯碼3.3 數(shù)字鐘設(shè)計總原理圖利用至頂向下的設(shè)計方法,新建一個Block Diagram,在Quartus 環(huán)境下連接各模塊組成數(shù)字鐘的總原理圖如圖3-14所示。圖3-14 數(shù)字鐘總原理圖4 編譯報告4.1 數(shù)字鐘設(shè)計編譯報告將各模塊正確連線后,編譯無警告,生成編譯報告如圖。發(fā)現(xiàn),總的邏輯單元使用了184,其中組合邏輯使用184,時序邏輯使用98,
18、由此看出,在Alter的EP2C5Q208芯片中,一個LE包括一個Combination logic和一個Timing logic。如圖4-1。圖4-1 數(shù)字鐘編譯報告5 電路仿真與硬件調(diào)試5.1 電路仿真經(jīng)過嘗試,發(fā)現(xiàn)數(shù)字鐘的設(shè)計用波形仿真看到與實際相符的數(shù)據(jù)很困難,因為50M的時鐘要分成1HZ的時鐘,1000HZ的時鐘,分在秒跳動60才跳一次,時在分跳動60才跳一次,受到simulator tool 工作界面的限制,并不能完整的觀察到時分秒,年月日的信息,因此只選擇的clock模塊的進行了仿真。如下圖。圖5-1 計數(shù)模塊仿真波形圖七段數(shù)碼顯示譯碼器LED的仿真,其中Din3.0為BCD碼輸
19、入,LED7S6.0為七段譯碼輸出(高電平有效)。其仿真輸出波形如圖5-2所示。圖5-2 七段譯碼模塊仿真波形圖5.2 硬件調(diào)試經(jīng)過調(diào)試,仿真結(jié)果正確后,將sof文件轉(zhuǎn)換成固化到芯片的適合JTAG下載的jic文件。連接硬件系統(tǒng)后,通上電源,經(jīng)Quartus中的PROGRAMMER菜單,調(diào)出編程器窗口,刪掉sof文件,現(xiàn)在轉(zhuǎn)換成功的jic文件。一切就緒后,按下編程器窗口中的“START”按鈕,設(shè)計的內(nèi)容就開始下載到FPGA芯片中。通過實驗箱上的撥碼開關(guān)和按鍵開關(guān)可以逐一對數(shù)字鐘的功能進行驗證。通過數(shù)碼管顯示可知本設(shè)計可以實現(xiàn)基本的時、分、秒及年、月、日的計數(shù),通過按鍵和撥碼開關(guān)的配合可以實現(xiàn)時、
20、分、秒和年、月、日的校準(zhǔn)以及顯示翻屏。故本設(shè)計完全符合設(shè)計要求。6 總結(jié)與心得體會由于一直在學(xué)習(xí)FPGA,所以拿到課程設(shè)計的題目時胸有成竹,我想對于我來說,設(shè)計出來毫無困難,所以就想在題目的要求上上一個高度。之前都是用VHDL語言生成模塊直接例化,這次我選擇了利用更直觀的原理圖設(shè)計方法。連線時也遇到過小小的麻煩,比如剛開始總線不知怎么解決,PIN_NAME不知道怎么命名。圖連完后,編譯通過,對原理圖設(shè)計有了整題把握,以后做設(shè)計的時候,對于接口比較復(fù)雜的還是用原理圖設(shè)計比較方便。后來就考慮如何玩點花樣,畢竟單調(diào)的顯示時分秒還是駕輕就熟的。改動如下:1.將區(qū)分時分秒,年月日的-改成動態(tài)的了,隨著1
21、HZ的時鐘兩滅,看著形象多了。2.在利用按鍵手動翻屏的基礎(chǔ)上,加了個自動翻屏,畢竟有時候并不想動手去看日期,自動翻屏的目的是想讓日期從下往上浮動,可惜不是16*16的點陣,效果不佳。路漫漫其修遠(yuǎn)兮,吾將上下而求索。參考文獻1 盧毅,賴杰. VHDL與數(shù)字電路設(shè)計. 科學(xué)出版社,2009.2 北京理工大學(xué)ASIC研究所.VHDL語言100例詳解. 清華大學(xué)出版社,2001.3 楊麗英.電路EDA技術(shù)與應(yīng)用. 清華大學(xué)出版社,2011.4 謝自美.電子線路設(shè)計(第二版).華中科技大學(xué)出版社,2000.5 趙世強.電子電路EDA技術(shù).西安電子科技大學(xué)出版社,2006.附錄 library ieee;
22、use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;package my_package isfunction bcd_to_seg7(signal bcd:integer range 0 to 9) return std_logic_vector;procedure sec_min_hour(signal n:in integer range 0 to 59;signal shi,ge:out integer);end my_package;package body
23、my_package isfunction bcd_to_seg7(signal bcd:integer range 0 to 9)return std_logic_vector isvariable seg7:std_logic_vector(7 downto 0);begincase bcd iswhen 0=> seg7:=x"c0"when 1=> seg7:=x"f9"when 2=> seg7:=x"a4" when 3=> seg7:=x"b0"when 4=> seg7
24、:=x"99" when 5=> seg7:=x"92" when 6=> seg7:=x"82"when 7=> seg7:=x"f8" when 8=> seg7:=x"80"when 9=>seg7:=x"90"when others=>end case;return seg7;end bcd_to_seg7;procedure sec_min_hour(signal n:in integer range 0 to 59;signal
25、 shi,ge:out integer)isbegincase n iswhen 0|1|2|3|4|5|6|7|8|9=>shi<=0;when 10|11|12|13|14|15|16|17|18|19 =>shi<=1;when 20|21|22|23|24|25|26|27|28|29=>shi<=2;when 30|31|32|33|34|35|36|37|38|39 =>shi<=3;when 40|41|42|43|44|45|46|47|48|49=>shi<=4;when 50|51|52|53|54|55|56|5
26、7|58|59=>shi<=5;when others=>null;end case;case n iswhen 0|10|20|30|40|50=>ge<=0;when 1|11|21|31|41|51=>ge<=1;when 2|12|22|32|42|52=>ge<=2; when 3|13|23|33|43|53=>ge<=3;when 4|14|24|34|44|54=>ge<=4;when 5|15|25|35|45|55=>ge<=5;when 6|16|26|36|46|56=>ge
27、<=6;when 7|17|27|37|47|57=>ge<=7;when 8|18|28|38|48|58=>ge<=8;when 9|19|29|39|49|59=>ge<=9; when others=>null;end case;end sec_min_hour;end my_package;-main.vhd -library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;use work.my_
28、package.all;entity digitalclock isport(clk:in std_logic; rst_n:in std_logic; cs:in std_logic; cm:in std_logic; ch:in std_logic; key_sel:in std_logic; buzz:inout std_logic; wei_sel:out std_logic_vector(7 downto 0); data_out:out std_logic_vector(7 downto 0);end digitalclock;architecture behavior of di
29、gitalclock issignal sec:integer range 0 to 59:=50;signal min:integer range 0 to 59:=59;signal hour:integer range 0 to 23:=0;signal sec_ge:integer range 0 to 9;signal min_ge:integer range 0 to 9;signal hour_ge:integer range 0 to 9;signal sec_shi:integer range 0 to 9;signal min_shi:integer range 0 to
30、9;signal hour_shi:integer range 0 to 9;signal clk_1:std_logic;signal clk_1000:std_logic;signal buzz_freque:integer;signal key_value:integer;signal cnt:integer range 0 to 7;-the scan frequencesignal H:std_logic;signal up,change:std_logic;beginprocess(clk,rst_n)-divider the clk to different hzvariable
31、 cnt1:integer range 0 to 5000;-9999variable cnt2:integer range 0 to 2;variable cnt3:integer range 0 to 1500;-2500beginif(rst_n='0')then elsif(clk'event and clk='1')thenif(cnt1=5000)thencnt1:=0;clk_1000<=not clk_1000;-1000hzif(cnt2=2)thencnt2:=0;if(cnt=7)thencnt<=0;elsecnt&l
32、t;=cnt+1;end if;if(cnt3=1500)thencnt3:=0;clk_1<=not clk_1;elsecnt3:=cnt3+1;end if;elsecnt2:=cnt2+1;end if;elsecnt1:=cnt1+1;end if;end if;end process;process(clk_1,rst_n,key_value)variable delay:integer range 0 to 10;beginif(rst_n='0')then sec<=0;min<=0;hour<=0;elsif(clk_1'eve
33、nt and clk_1='1')thencase key_value iswhen 3=>sec<=0;when 2=>if(min=59)thenmin<=0;elsemin<=min+1;end if;when 1=>if(hour=23)thenhour<=0;elsehour<=hour+1;end if; when 0=>if(sec=59)thensec<=0;if(min=59)thenmin<=0;if(hour=23)thenhour<=0;elsehour<=hour+1;end
34、 if;elsemin<=min+1;end if;elsesec<=sec+1;if(sec>=54 and sec<=59)thenup<='1'if(sec=55)thenchange<='0'elsif(sec<=59)thenchange<='1'end if;elseup<='0'end if;end if; when others=>null; end case;end if;end process;process(clk_1000,ch,cm,cs)var
35、iable delay:integer range 0 to 10;variable key:std_logic_vector(2 downto 0);beginkey:=ch&cm&cs;if(clk_1000'event and clk_1000='1')thencase key iswhen "011"=>if(delay=10)thendelay:=0;key_value<=1;elsedelay:=delay+1;end if;when "101"=>if(delay=10)thende
36、lay:=0;key_value<=2;elsedelay:=delay+1;end if;when "110"=>if(delay=10)thendelay:=0;key_value<=3;elsedelay:=delay+1;end if;when others=>key_value<=0;end case;end if;end process;process(sec,min)beginif(min=0 and sec=0)thenbuzz_freque<=20000;elsif(min=59)thenif (sec=50 or se
37、c=52 or sec=54 or sec=56 or sec=58)thenbuzz_freque<=10000;elsebuzz_freque<=0;end if;elsebuzz_freque<=0;end if;end process;process(clk,buzz_freque)variable cnt:integer:=0;beginif(buzz_freque/=0)thenif(clk'event and clk='1')thenif(cnt=buzz_freque)thencnt:=0;buzz<=not buzz;elsec
38、nt:=cnt+1;end if;end if;elsebuzz<='1'-1 no beep 0 beepend if;end process;sec_min_hour(sec,sec_shi,sec_ge);sec_min_hour(min,min_shi,min_ge);sec_min_hour(hour,hour_shi,hour_ge);process(cnt,sec_shi,sec_ge,min_shi,min_ge,hour_shi,hour_ge,clk_1,key_sel,up,change)variable H:std_logic;beginif(ke
39、y_sel='1')thencase cnt iswhen 0=>wei_sel<="11111110"if(up='1')thenif(change='0')thendata_out<=x"a3"elsedata_out<=x"80"end if;elsedata_out<=bcd_to_seg7(sec_ge);end if;when 1=>wei_sel<="11111101"if(up='1')then
40、if(change='0')thendata_out<=x"fb"elsedata_out<=x"f9"end if;elsedata_out<=bcd_to_seg7(sec_shi);end if;when 2=>wei_sel<="11111011"if(clk_1='1')thenH:='1'elseH:='0'end if;data_out<='1'&H&"111111"wh
41、en 3=>wei_sel<="11110111"if(up='1')thenif(change='0')thendata_out<=x"a7"elsedata_out<=x"82"end if;elsedata_out<=bcd_to_seg7(min_ge);end if;when 4=>wei_sel<="11101111"if(up='1')thenif(change='0')thendata_out<=x"ab"elsedata_out<=x"c0"end if;elsedata_out<=bcd_to_seg7(min_shi);end if;when 5=>wei_sel<="11011111&qu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國太空球市場調(diào)查研究報告
- 2025年電加熱不銹鋼反應(yīng)釜項目可行性研究報告
- 2025至2031年中國拉制紫銅棒行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年軟尺門項目投資價值分析報告
- 2025至2030年火箭筒音箱項目投資價值分析報告
- 2025至2030年中國真皮開邊珠錢包數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年外墻保溫粘結(jié)砂漿核心料項目投資價值分析報告
- 室內(nèi)裝修設(shè)計合同規(guī)范
- 臨建道路工程分包協(xié)議書范本
- ui設(shè)計外包合同范本
- 顳下頜關(guān)節(jié)盤復(fù)位固定術(shù)后護理查房
- 新版藥品管理法培訓(xùn)完整版本課件
- 醫(yī)院信息系統(tǒng)HIS知識培訓(xùn)教學(xué)課件-HIS的主要內(nèi)容
- 硝苯地平控釋片
- 合成聚氨酯原料及助劑生產(chǎn)項目
- 四川省瀘州市2019年中考物理考試真題與答案解析
- 部編版語文六年級下冊全套單元基礎(chǔ)??紲y試卷含答案
- 2023年保險養(yǎng)老地產(chǎn)行業(yè)分析報告
- 保險公司防火應(yīng)急預(yù)案
- 動物檢疫技術(shù)-動物檢疫的分類(動物防疫與檢疫技術(shù))
- 2024醫(yī)師資格考試考生誠信考試承諾書
評論
0/150
提交評論