2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計任務(wù)書</b></p><p>  學(xué)生姓名: 專業(yè)班級: </p><p>  題 目: 數(shù)字鐘 </p><p><b>  設(shè)計目的:</b></p>

2、<p>  1、掌握在QuartusⅡ軟件的使用方法,并能熟練的在QuartusⅡ環(huán)境中運用VHDL語言完成一些簡單程序的設(shè)計;</p><p>  2、掌握數(shù)字鐘的主要功能與在FPGA中的實現(xiàn)方法。</p><p>  要求完成的主要任務(wù): </p><p>  1、課程設(shè)計工作量:1周。</p><p><b> 

3、 2、技術(shù)要求:</b></p><p> ?。?)設(shè)計一個6位LED動態(tài)掃描顯示的數(shù)字鐘,根據(jù)一個控制鍵能選擇顯示時、分、秒或年、月、日;</p><p>  (2)通過撥碼開關(guān)可以進行時、分、年、月、日的調(diào)整,可以實現(xiàn)翻屏;</p><p>  3、查閱至少5篇參考文獻。按《武漢理工大學(xué)課程設(shè)計工作規(guī)范》要求撰寫設(shè)計報告書。全文用A4紙打印,圖紙應(yīng)符

4、合繪圖規(guī)范。</p><p><b>  時間安排:</b></p><p>  1、 2012 年 6 月 11日集中,作課設(shè)具體實施計劃與課程設(shè)計報告格式的要求說明。</p><p>  2、 2012 年 6 月 12日,查閱相關(guān)資料,學(xué)習(xí)電路的工作原理。</p><p>  2、 2012 年 6 月 12 日

5、 至 2012 年 6 月 15 日,方案選擇和電路設(shè)計。</p><p>  2、 2012 年 6 月 20 日 至 2012 年 6 月 21 日,電路調(diào)試和設(shè)計說明書撰寫。</p><p>  3、 2011 年 6 月 22日上交課程設(shè)計成果及報告,同時進行答辯。</p><p>  指導(dǎo)教師簽名:

6、 年 月 日</p><p>  系主任(或責(zé)任教師)簽名: 年 月 日</p><p>  目 錄摘 要I</p><p>  AbstractII</p><p><b>  1 緒論1</b></p><

7、p>  2 設(shè)計內(nèi)容及要求1</p><p>  2.1設(shè)計目的及主要任務(wù)1</p><p>  2.1.1設(shè)計目的1</p><p>  2.1.2 設(shè)計任務(wù)及要求1</p><p><b>  2.2設(shè)計思想1</b></p><p>  3 數(shù)字鐘的設(shè)計2</p>

8、;<p>  3.1 設(shè)計原理與方法2</p><p>  3.2 單元模塊設(shè)計2</p><p>  3.2.1時間走動與修改2</p><p>  3.2.2消抖電路3</p><p>  3.3.3 數(shù)據(jù)選擇3</p><p>  3.2.4 數(shù)碼管3</p><p&

9、gt;  4 電路仿真與硬件調(diào)試3</p><p>  4.1 電路仿真3</p><p>  4.2 硬件調(diào)試6</p><p>  5 總結(jié)與心得體會6</p><p><b>  參考文獻8</b></p><p>  附錄 實驗所用程序9</p><p>

10、;  本科生課程設(shè)計成績評定表17</p><p><b>  摘 要</b></p><p>  伴隨著計算機、集成電路和電子設(shè)計技術(shù)的發(fā)展,EDA技術(shù)在過去的幾十年里取得了巨大的進步。EDA技術(shù)使得設(shè)計者的工作僅限于利用軟件的方式,即利用硬件描述語言和EDA軟件Quartus Ⅱ等即可完成對系統(tǒng)硬件功能的實現(xiàn)。EDA技術(shù)研究的對象是電子設(shè)計的全過程,有上到下依

11、次包括了系統(tǒng)級、電路級和物理級三個層次。</p><p>  本設(shè)計是通過Quartus Ⅱ軟件、VHDL語言編程及FPGA芯片來實現(xiàn)常見的數(shù)字鐘,該數(shù)字鐘可以根據(jù)一個控制鍵能選擇顯示時、分、秒或年、月、日,并且可以顯示翻屏。本設(shè)計中用6位LED數(shù)碼管顯示時、分和秒,而用8位LED數(shù)碼管顯示年、月、日,同時可以通過撥碼開關(guān)調(diào)整時、分、年、月和日及對秒進行清零。</p><p>  關(guān)鍵詞:

12、Quartus Ⅱ;VHDL;數(shù)字鐘</p><p><b>  Abstract</b></p><p>  Along with computers, integrated circuits and electronic design technology development, EDA technology in the past few decades ha

13、s made tremendous progress. EDA technology allows designers to work is limited to the use of software methods, namely, the use of hardware description languages and EDA software, Quartus Ⅱ and other functions to complete

14、 the implementation of the system hardware. EDA technology research object is the whole process of electronic design, there are up to the next turn, in</p><p>  The design is by Quartus Ⅱ software, VHDL lang

15、uage programming and CPLD chip to achieve a common digital clock, the digital clock according to a control keys can choose to display hours, minutes and seconds or year, month, day, and can display scroll off. This desig

16、n using 6 LED digital tube display hours, minutes and seconds, but with the 8-bit LED digital tube display year, month, day, at the same time can be adjusted through the DIP switches hour, minute, year, month and day, an

17、d on the secon</p><p>  Keywords:Quartus Ⅱ;VHDL;Digital Clock</p><p><b>  1 緒論</b></p><p>  隨著數(shù)字電子技術(shù)的飛速發(fā)展,信息化得到了有力的推動和促進,從與普通百姓生活息息相關(guān)的手機、計算機、數(shù)字電視,到國家安定社會和諧的軍用設(shè)備、航天技術(shù),都采用

18、了數(shù)字電子技術(shù),它的應(yīng)用已經(jīng)滲透到人們的生活中的方方面面?,F(xiàn)代電子設(shè)計技術(shù)的核心已經(jīng)逐步轉(zhuǎn)向基于計算機的電子設(shè)計自動化技術(shù),即EDA(Electronic Design Automation)[1]。隨著EDA技術(shù)的逐漸成熟,也包括了其他的印刷版電子系統(tǒng)的設(shè)計。</p><p>  本設(shè)計是通過對數(shù)字鐘重要組成部分的VHDL源程序編程來實現(xiàn)的。在本設(shè)計中數(shù)字鐘的主要組成部分有撥碼開關(guān)模塊、計數(shù)器模塊、分頻計模塊、

19、七段譯碼器模塊和數(shù)據(jù)選擇器模塊。通過按鍵可以實現(xiàn)選擇顯示時、分、秒或年、月、日,同時可以顯示翻屏,還可以通過撥碼開關(guān)調(diào)整時、分、年、月和日及對秒進行清零。</p><p><b>  2 設(shè)計內(nèi)容及要求</b></p><p>  2.1設(shè)計目的及主要任務(wù)</p><p><b>  2.1.1設(shè)計目的</b></p

20、><p>  (1)掌握在QuartusⅡ軟件的使用方法,并能熟練的在QuartusⅡ環(huán)境中運用VHDL語言完成一些簡單程序的設(shè)計;</p><p> ?。?)掌握數(shù)字鐘的主要功能與在FPGA中的實現(xiàn)方法。</p><p>  2.1.2 設(shè)計任務(wù)及要求</p><p>  根據(jù)已知條件,完成基于Quartus Ⅱ的數(shù)字鐘的設(shè)計、連接與仿真。該數(shù)

21、字鐘須符合以下要求: </p><p>  (1)設(shè)計一個6位LED動態(tài)掃描顯示的數(shù)字鐘,根據(jù)一個控制鍵能選擇顯示時、分、秒或年、月、日;</p><p> ?。?)通過撥碼開關(guān)可以進行時、分、年、月、日的調(diào)整,可以實現(xiàn)翻屏。</p><p><b>  2.2設(shè)計思想</b></p><p>  本次設(shè)計中根據(jù)數(shù)字鐘的

22、工作原理首先進行計數(shù)器的設(shè)計,其中包括分秒60進制計數(shù)器、時24進制計數(shù)器、日30進制計數(shù)器、月12進制計數(shù)器和年10進制計數(shù)器,然后根據(jù)要求設(shè)置一數(shù)據(jù)選擇器并且通過控制鍵實現(xiàn)選擇顯示時、分、秒或年、月、日,最后再設(shè)置3個撥碼開關(guān)調(diào)整數(shù)字鐘,并且通過一個七段譯碼器和8進制計數(shù)器控制七段數(shù)碼管實現(xiàn)顯示。</p><p><b>  3 數(shù)字鐘的設(shè)計</b></p><p&g

23、t;  3.1 設(shè)計原理與方法</p><p>  根據(jù)本設(shè)計的要求,該數(shù)字鐘的程序設(shè)計由上至下分為以下幾個部分:數(shù)碼管的編碼、十位個位的函數(shù)分離、分頻、時間走動及修改、按鍵掃描與消抖、蜂鳴器報警、秒分時個位十位的分離、數(shù)據(jù)選擇和翻屏。其中計數(shù)為本數(shù)字鐘的重要組成部分,可以分為是數(shù)字鐘的主要模塊,由秒計數(shù)模塊、分計數(shù)模塊、時計數(shù)模塊。其中秒、分、時計數(shù)模塊之間通過進位進行連接,秒每計數(shù)60次產(chǎn)生一次進位至分,分每

24、計數(shù)60次產(chǎn)生一次進位至?xí)r,而秒60進制計數(shù)器的時鐘信號由分頻器產(chǎn)生的1HZ脈沖提供。分頻模塊可以產(chǎn)生1HZ、200HZ和1KHZ共3中脈沖信號,200HZ脈沖信號用來提供消抖電路的時鐘信號,通過消抖模塊和一個置數(shù)端可以對秒進行清零,對分、時進行調(diào)整。通過數(shù)據(jù)選擇模塊可以對各個計數(shù)模塊產(chǎn)生的數(shù)字逐一顯示,并顯示翻屏。通過七段譯碼模塊可以產(chǎn)生數(shù)碼管的段選碼,實現(xiàn)數(shù)碼管的動態(tài)顯示。[2]</p><p>  3.2

25、單元模塊設(shè)計</p><p>  3.2.1 時間走動與修改</p><p>  其中計時模塊有3部分構(gòu)成:秒計時器、分計時器、時計時器。     1) 秒計時器(second)是由一個60進制的計數(shù)器構(gòu)成的,具有清0功能。其中cs為高電平時,秒計時器清0;cs為低電平時,秒計數(shù)器開始計數(shù)。當(dāng)秒計數(shù)器記滿59后,下一個時鐘脈沖來臨時產(chǎn)生一個進位信號,作為下一

26、級的時鐘輸入信號。 2)分計時器(minute)是由一個60進制的計數(shù)器構(gòu)成的,具有清零和計數(shù)功能。當(dāng)cm為高電平時,分計數(shù)器根據(jù)秒計數(shù)器的輸入信號進行計數(shù),當(dāng)記滿59后下一個輸入信號脈沖來臨時產(chǎn)生一個進位信號,作為下一級的時鐘輸入信號。當(dāng)cm為低電平時,分計數(shù)器根據(jù)時鐘脈沖進行計數(shù),記滿59后下一個脈沖來臨時清零。</p><p>  3)時計時器(hour)是由一個24進制的計數(shù)器構(gòu)成的,具有清0和

27、計數(shù)功能。當(dāng)ch為高電平時,時計數(shù)器根據(jù)分計數(shù)器的輸入信號進行計數(shù),當(dāng)記滿59后下一個輸入信號脈沖來臨時產(chǎn)生一個進位信號,作為下一級的時鐘輸入信號。當(dāng)cm為低電平時,分計數(shù)器根據(jù)時鐘脈沖進行計數(shù),記滿59后下一個脈沖來臨時清零。 </p><p>  3.2.2 消抖電路</p><p>  通常的按鍵所用開關(guān)為機械彈性開關(guān),當(dāng)機械觸點斷開、閉合時,電壓信

28、號并不穩(wěn)定,由于機械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均有一連串的抖動,抖動的時間的長短有按鍵的機械特性決定,一般為5ms~10ms。[3]所以在設(shè)計程序時應(yīng)考慮到抖動的消除。消抖模塊的VHDL程序如附錄所示。</p><p>  3.2.3 數(shù)據(jù)選擇</p><p>  根據(jù)設(shè)計要求,需要將時、分、秒和年、月、日分別同

29、時顯示,同時為了實現(xiàn)翻屏,需要將該模塊加入一個選擇控制端。其程序如附錄所示。 </p><p>  3.2.4 數(shù)碼管顯示</p><p>  由于本設(shè)計需要用數(shù)碼管進行顯示,需要加入一個七段譯碼程序?qū)崿F(xiàn)轉(zhuǎn)換,該模塊的程序如附錄所示。</p><p>  4電路仿真與硬件調(diào)試</p><p><b>  4.1 電路仿真</b

30、></p><p>  由于數(shù)字鐘設(shè)計中僅僅對程序的觀察不容易發(fā)現(xiàn)一些錯誤,所以在將程序燒錄到芯片之前需要進行仿真,這樣對程序的功能有個更直觀的顯示,更便于檢查錯誤,從而對程序進行修改。[5]</p><p>  首先建立波形文件:選擇 File→New,在New窗中選中“Other File”標(biāo)簽。在出現(xiàn)的屏幕中選擇“Vector Waveform File”項出現(xiàn)一新的操作界面,

31、如圖1。</p><p>  在出現(xiàn)的新屏幕中,雙擊“Name”下方的空白處,彈出“Insert Nod or Bus”對話框,單擊該對話框的“Node Finder”。在屏幕中的 Filter 中選擇 Pins,單擊“List”。而后,單擊“>>”,所有輸入/輸出都被拷貝到右邊的一側(cè),這些正是我們希望的各個引腳,如圖2所示。也可以只選其中的的一部分,根據(jù)實際情況決定。然后單擊屏幕右上腳的 “OK”。

32、在出現(xiàn)的小屏幕上單擊“OK”,這樣我們就可以設(shè)置一系列仿真參數(shù)了,如圖3所示。 </p><p><b>  圖1 新建仿真菜單</b></p><p><b>  圖2 選擇結(jié)點</b></p><p><b>  圖3 仿真準(zhǔn)備</b></p><p>  設(shè)定仿真時間寬度

33、。選擇 Edit → End time…選項,在End time選擇窗中選擇適當(dāng)?shù)姆抡鏁r間域,以便有足夠長的觀察時間。</p><p>  波形文件存盤。選擇File→Save as 選項,直接存盤即可。</p><p>  運行仿真器。在菜單中選擇項,直到出現(xiàn),仿真結(jié)束。最終得到仿真波形如圖4所示。</p><p><b>  圖4 仿真結(jié)果</b

34、></p><p>  由上述波形可以清楚的看到:當(dāng)cs為低電平時,秒計時器開始計時,當(dāng)?shù)竭_59秒后,秒計時器sec又從0開始計時,同時分鐘min加了1,為00分;當(dāng)cs為高電平時,秒計時器清零,對其他無影響。當(dāng)cm為高電平時,分計時器開始計時,當(dāng)?shù)竭_59分后,分計時器min又從0開始計時,同時小時hour加了1,為24時。當(dāng)cm為低電平時,分計時器依靠秒計時器的輸入脈沖進行計數(shù)。當(dāng)ch為高電平時,時計時器

35、開始計時,當(dāng)?shù)竭_23時后,時計時器hour又從0開始計時;當(dāng)ch為低電平時,分計時器依靠分計時器的輸入脈沖進行計數(shù)。</p><p><b>  4.2 硬件調(diào)試</b></p><p>  1.首先將下載線把計算機的打印機口與目標(biāo)板(如開發(fā)板或?qū)嶒灠澹┻B接好,打開電源,選擇模式7。</p><p>  2.打開編輯窗和配置文件。選擇,彈出一個

36、編輯窗。在Mode欄中選擇JTAG,并在選項下的小方框打勾。注意核對下載文件路徑與文件名。如果文件沒有出現(xiàn)或者出錯,單擊左Add file側(cè)按鈕,手動選擇配置文件 clock.sof。</p><p>  3.最后單擊下載標(biāo)符Start,即進入對目標(biāo)器件 FPGA 的配置下載操作。當(dāng) Progress 顯示100%,以及在底部的處理欄中出現(xiàn) Configuration Succeeded 時,表示編程成功,如圖所

37、示。注意,如果必要時,可再次單擊 Start ,直至編程成功。[4]</p><p>  經(jīng)過調(diào)試,仿真結(jié)果正確后,可將程序下載到芯片中。連接硬件系統(tǒng)后,通上電源,經(jīng)QuartusⅡ中的PROGRAMMER菜單,調(diào)出編程器窗口。一切就緒后,按下編程器窗口中的“START”按鈕,設(shè)計的內(nèi)容就開始下載到FPGA芯片中。通過實驗箱上的撥碼開關(guān)和按鍵開關(guān)可以逐一對數(shù)字鐘的功能進行驗證。通過數(shù)碼管顯示可知本設(shè)計可以實現(xiàn)基本

38、的時、分、秒的計數(shù)與清零,通過按鍵和撥碼開關(guān)的配合可以實現(xiàn)時、分、秒的校準(zhǔn)以及年、月、日顯示翻屏。故本設(shè)計完全符合設(shè)計要求。</p><p><b>  5 總結(jié)與心得體會</b></p><p>  通過這次課設(shè),我對在QuartusⅡ環(huán)境中運用VHDL語言設(shè)計方法構(gòu)建具有一定邏輯功能的模塊的應(yīng)用更加熟練,對QuartusⅡ的應(yīng)用和對VHDL語言的使用有了進一步的加

39、強。本次設(shè)計的核心內(nèi)容就是QuartusⅡ環(huán)境中,利用VHDL語言設(shè)計出基于FPGA的數(shù)字鐘。此次EDA課程設(shè)計對我們的總體電路的設(shè)計的要求更嚴(yán)格,需要通過翻閱復(fù)習(xí)以前學(xué)過的知識確立了實驗總體設(shè)計方案,然后逐步細化進行各模塊的設(shè)計;其次,在電路仿真的過程中總會出現(xiàn)一些問題,需要我們細心解決,所以這兩周下來,我對電路故障的排查能力有了很大的提高;再次,通過此次課程設(shè)計,我對設(shè)計所用到的軟件有了更加深刻地了解,這對我們以后的工作和學(xué)習(xí)的幫助

40、都很有用處。當(dāng)然,經(jīng)過了課程設(shè)計,我也發(fā)現(xiàn)了自己的很多不足。但是通過自己的動手動腦,既增加了知識,又給了我專業(yè)知識以及專業(yè)技能上的提升,我也會更加努力,認真學(xué)習(xí),爭取在以后的課程中做得更好!</p><p>  在這次課設(shè)中,我首先要感謝學(xué)校給我們提供的機會,其次我要感謝我的老師在課程設(shè)計上給予我的指導(dǎo)、提供給我的支持和幫助,這是我能順利完成這次報告的主要原因,更重要的是老師幫我解決了許多技術(shù)上的難題,讓我能把設(shè)

41、計做得更加完善。在此期間,我不僅學(xué)到了許多新的知識,而且也開闊了視野,提高了自己的設(shè)計能力。最后,我要感謝幫助過我的同學(xué),他們也為我解決了不少我不太明白的設(shè)計上的難題。同時也感謝學(xué)院為我提供良好的做課程設(shè)計的環(huán)境。最后再一次感謝所有在設(shè)計中曾經(jīng)幫助過我的良師益友和同學(xué)。</p><p><b>  參考文獻</b></p><p>  [1] 盧毅,賴杰. VHDL與

42、數(shù)字電路設(shè)計. 科學(xué)出版社,2009.</p><p>  [2] 北京理工大學(xué)ASIC研究所.《VHDL語言100例詳解》. 清華大學(xué)出版社,2001.</p><p>  [3] 楊麗英.《電路EDA技術(shù)與應(yīng)用》. 清華大學(xué)出版社,2011.</p><p>  [4] 謝自美.《電子線路設(shè)計》(第二版).華中科技大學(xué)出版社,2000.</p>&

43、lt;p>  [5] 趙世強.《電子電路EDA技術(shù)》.西安電子科技大學(xué)出版社,2006.</p><p><b>  附錄 實驗所用程序</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std

44、_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  package my_package is</p><p>  function bcd_to_seg7(signal bcd:integer range 0 to 9) return std_logic_vector;<

45、;/p><p>  procedure sec_min_hour(signal n:in integer range 0 to 59;signal shi,ge:out integer);</p><p>  end my_package;</p><p>  package body my_package is</p><p>  functi

46、on bcd_to_seg7(signal bcd:integer range 0 to 9)return std_logic_vector is</p><p>  variable seg7:std_logic_vector(7 downto 0);</p><p><b>  begin</b></p><p>  case bcd is

47、</p><p><b>  when 0=></b></p><p>  seg7:=x"3f";</p><p><b>  when 1=></b></p><p>  seg7:=x"06";</p><p><

48、;b>  when 2=></b></p><p>  seg7:=x"5b"; </p><p><b>  when 3=></b></p><p>  seg7:=x"4f";</p><p><b>  when

49、 4=></b></p><p>  seg7:=x"66"; </p><p><b>  when 5=></b></p><p>  seg7:=x"6d"; </p><p><b>  when 6=></

50、b></p><p>  seg7:=x"7d";</p><p><b>  when 7=></b></p><p>  seg7:=x"07"; </p><p><b>  when 8=></b></p&

51、gt;<p>  seg7:=x"7f";</p><p><b>  when 9=></b></p><p>  seg7:=x"6f";</p><p>  when others=></p><p><b>  end case;<

52、/b></p><p>  return seg7;</p><p>  end bcd_to_seg7;</p><p>  procedure sec_min_hour(signal n:in integer range 0 to 59;signal shi,ge:out integer)is</p><p><b>  

53、begin</b></p><p><b>  case n is</b></p><p>  when 0|1|2|3|4|5|6|7|8|9</p><p><b>  =>shi<=0;</b></p><p>  when 10|11|12|13|14|15|16|1

54、7|18|19 </p><p><b>  =>shi<=1;</b></p><p>  when 20|21|22|23|24|25|26|27|28|29</p><p><b>  =>shi<=2;</b></p><p>  when 30|31|32|33|3

55、4|35|36|37|38|39 </p><p><b>  =>shi<=3;</b></p><p>  when 40|41|42|43|44|45|46|47|48|49</p><p><b>  =>shi<=4;</b></p><p>  when 50|5

56、1|52|53|54|55|56|57|58|59</p><p><b>  =>shi<=5;</b></p><p>  when others=></p><p><b>  null;</b></p><p><b>  end case;</b>&

57、lt;/p><p><b>  case n is</b></p><p>  when 0|10|20|30|40|50</p><p><b>  =>ge<=0;</b></p><p>  when 1|11|21|31|41|51</p><p><b

58、>  =>ge<=1;</b></p><p>  when 2|12|22|32|42|52</p><p>  =>ge<=2; </p><p>  when 3|13|23|33|43|53</p><p><b>  =>ge<=3;</b></p&

59、gt;<p>  when 4|14|24|34|44|54</p><p><b>  =>ge<=4;</b></p><p>  when 5|15|25|35|45|55</p><p><b>  =>ge<=5;</b></p><p>  when

60、 6|16|26|36|46|56</p><p><b>  =>ge<=6;</b></p><p>  when 7|17|27|37|47|57</p><p><b>  =>ge<=7;</b></p><p>  when 8|18|28|38|48|58<

61、;/p><p><b>  =>ge<=8;</b></p><p>  when 9|19|29|39|49|59</p><p><b>  =>ge<=9; </b></p><p>  when others</p><p><b>  

62、=>null;</b></p><p><b>  end case;</b></p><p>  end sec_min_hour;</p><p>  end my_package;</p><p>  ------------------------main.vhd ----------</

63、p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  use work

64、.my_package.all;</p><p>  entity digitalclock is</p><p>  port(clk:in std_logic;</p><p>  cs:in std_logic; </p><p>  cm:in std_logic;</p><p>  ch:in std_lo

65、gic;</p><p>  key_sel:in std_logic;</p><p>  buzz:inout std_logic;</p><p>  wei_sel:out std_logic_vector(2 downto 0);</p><p>  data_out:out std_logic_vector(7 downto 0)

66、</p><p><b>  );</b></p><p>  end digitalclock;</p><p>  architecture behavior of digitalclock is</p><p>  signal sec:integer range 0 to 59:=50;</p>&

67、lt;p>  signal min:integer range 0 to 59:=59;</p><p>  signal hour:integer range 0 to 23:=0;</p><p>  signal sec_ge:integer range 0 to 9;</p><p>  signal min_ge:integer range 0 to

68、 9;</p><p>  signal hour_ge:integer range 0 to 9;</p><p>  signal sec_shi:integer range 0 to 9;</p><p>  signal min_shi:integer range 0 to 9;</p><p>  signal hour_shi:i

69、nteger range 0 to 9;</p><p>  signal clk_1:std_logic;</p><p>  signal clk_1000:std_logic;</p><p>  signal buzz_freque:integer;</p><p>  signal key_value:integer;</p&

70、gt;<p>  signal cnt:integer range 0 to 7;---the scan frequence</p><p>  signal H:std_logic;</p><p><b>  begin</b></p><p>  process(clk)--divider the clk to differ

71、ent hz</p><p>  variable cnt1:integer range 0 to 5000;--9999</p><p>  variable cnt2:integer range 0 to 2;</p><p>  variable cnt3:integer range 0 to 2500;--500</p><p>&l

72、t;b>  begin</b></p><p>  if(clk'event and clk='1')then</p><p>  if(cnt1=5000)then</p><p><b>  cnt1:=0;</b></p><p>  clk_1000<=not cl

73、k_1000;--1000hz掃描按鍵</p><p>  if(cnt2=2)then</p><p><b>  cnt2:=0;</b></p><p>  if(cnt=7)then</p><p><b>  cnt<=0;</b></p><p><b

74、>  else</b></p><p>  cnt<=cnt+1;</p><p><b>  end if;</b></p><p>  if(cnt3=800)then</p><p><b>  cnt3:=0;</b></p><p>  cl

75、k_1<=not clk_1;</p><p><b>  else</b></p><p>  cnt3:=cnt3+1;</p><p><b>  end if;</b></p><p><b>  else</b></p><p>  cn

76、t2:=cnt2+1;</p><p><b>  end if;</b></p><p><b>  else</b></p><p>  cnt1:=cnt1+1;</p><p><b>  end if;</b></p><p><b>

77、;  end if;</b></p><p>  end process;</p><p>  process(clk_1,cs,cm,ch)</p><p>  variable delay:integer range 0 to 10;</p><p><b>  begin</b></p>

78、<p>  if(clk_1'event and clk_1='1')then</p><p>  if(key_value=3)then</p><p><b>  sec<=0;</b></p><p>  elsif(key_value=2)then</p><p>  if

79、(min=59)then</p><p><b>  min<=0;</b></p><p><b>  else</b></p><p>  min<=min+1;</p><p><b>  end if;</b></p><p>  e

80、lsif(key_value=1)then</p><p>  if(hour=23)then</p><p><b>  hour<=0;</b></p><p><b>  else</b></p><p>  hour<=hour+1;</p><p>&l

81、t;b>  end if;</b></p><p><b>  else</b></p><p>  if(sec=59)then</p><p><b>  sec<=0;</b></p><p>  if(min=59)then</p><p>&

82、lt;b>  min<=0;</b></p><p>  if(hour=23)then</p><p><b>  hour<=0;</b></p><p><b>  else</b></p><p>  hour<=hour+1;</p>&

83、lt;p><b>  end if;</b></p><p><b>  else</b></p><p>  min<=min+1;</p><p><b>  end if;</b></p><p><b>  else</b></p

84、><p>  sec<=sec+1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p

85、><p>  process(clk_1000,ch,cm,cs)</p><p>  variable delay:integer range 0 to 10;</p><p>  variable key:std_logic_vector(2 downto 0);</p><p><b>  begin</b></

86、p><p>  key:=ch&cm&cs;</p><p>  if(clk_1000'event and clk_1000='1')then</p><p>  case key is</p><p>  when "100"=></p><p>  i

87、f(delay=10)then</p><p><b>  delay:=0;</b></p><p>  key_value<=1;</p><p><b>  else</b></p><p>  delay:=delay+1;</p><p><b>

88、  end if;</b></p><p>  when "010"=></p><p>  if(delay=10)then</p><p><b>  delay:=0;</b></p><p>  key_value<=2;</p><p><

89、;b>  else</b></p><p>  delay:=delay+1;</p><p><b>  end if;</b></p><p>  when "001"=></p><p>  if(delay=10)then</p><p>&l

90、t;b>  delay:=0;</b></p><p>  key_value<=3;</p><p><b>  else</b></p><p>  delay:=delay+1;</p><p><b>  end if;</b></p><p&

91、gt;  when others=></p><p>  key_value<=0;</p><p><b>  end case;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  p

92、rocess(sec,min)</p><p><b>  begin</b></p><p>  if(min=0 and sec=0)then</p><p>  buzz_freque<=20000;</p><p>  elsif(min=59)then</p><p>  if (

93、sec=50 or sec=52 or sec=54 or sec=56 or sec=58)then</p><p>  buzz_freque<=10000;</p><p><b>  else</b></p><p>  buzz_freque<=0;</p><p><b>  end i

94、f;</b></p><p><b>  else</b></p><p>  buzz_freque<=0;</p><p><b>  end if;</b></p><p>  end process;</p><p>  process(clk,bu

95、zz_freque)</p><p>  variable cnt:integer:=0;</p><p><b>  begin</b></p><p>  if(buzz_freque/=0)then</p><p>  if(clk'event and clk='1')then</p&

96、gt;<p>  if(cnt=buzz_freque)then</p><p><b>  cnt:=0;</b></p><p>  buzz<=not buzz;</p><p><b>  else</b></p><p>  cnt:=cnt+1;</p>

97、<p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  else</b></p><p>  buzz<='1';-----1 no beep 0 beep</p><p>

98、<b>  end if;</b></p><p>  end process;</p><p>  sec_min_hour(sec,sec_shi,sec_ge);</p><p>  sec_min_hour(min,min_shi,min_ge);</p><p>  sec_min_hour(hour,hour

99、_shi,hour_ge);</p><p>  process(cnt,sec_shi,sec_ge,min_shi,min_ge,hour_shi,hour_ge,clk_1,key_sel)</p><p>  variable H:std_logic;</p><p><b>  begin</b></p><p&g

100、t;  if(key_sel='1')then</p><p>  case cnt is</p><p><b>  when 0=></b></p><p>  wei_sel<="000";</p><p>  data_out<=bcd_to_seg7(sec

101、_ge);</p><p><b>  when 1=></b></p><p>  wei_sel<="001";</p><p>  data_out<=bcd_to_seg7(sec_shi);</p><p><b>  when 2=></b>&

102、lt;/p><p>  wei_sel<="010";</p><p>  data_out<="01000000";</p><p><b>  when 3=></b></p><p>  wei_sel<="011";</p>

103、;<p>  data_out<=bcd_to_seg7(min_ge);</p><p><b>  when 4=></b></p><p>  wei_sel<="100";</p><p>  data_out<=bcd_to_seg7(min_shi);</p>

104、<p><b>  when 5=></b></p><p>  wei_sel<="101";</p><p>  data_out<="01000000";</p><p><b>  when 6=></b></p><p&

105、gt;  wei_sel<="110";</p><p>  data_out<=bcd_to_seg7(hour_ge);</p><p><b>  when 7=></b></p><p>  wei_sel<="111";</p><p>  dat

106、a_out<=bcd_to_seg7(hour_shi);</p><p>  when others=></p><p><b>  null;</b></p><p><b>  end case;</b></p><p><b>  else</b></

107、p><p>  case cnt is</p><p><b>  when 0=></b></p><p>  wei_sel<="000";</p><p>  data_out<=x"7f";</p><p><b>  whe

108、n 1=></b></p><p>  wei_sel<="001";</p><p>  data_out<=x"06";</p><p><b>  when 2=></b></p><p>  wei_sel<="010&q

109、uot;;</p><p>  data_out<="01000000";</p><p><b>  when 3=></b></p><p>  wei_sel<="011";</p><p>  data_out<=x"7d";&l

110、t;/p><p><b>  when 4=></b></p><p>  wei_sel<="100";</p><p>  data_out<=x"3f";</p><p><b>  when 5=></b></p>&

111、lt;p>  wei_sel<="101";</p><p>  data_out<="01000000";</p><p><b>  when 6=></b></p><p>  wei_sel<="110";</p><p>

112、  data_out<=x"5b";</p><p><b>  when 7=></b></p><p>  wei_sel<="111";</p><p>  data_out<=x"06";</p><p>  when other

113、s=></p><p><b>  null;</b></p><p><b>  end case;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  end behav

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論