《數(shù)字鐘的設(shè)計(jì)》word版
《《數(shù)字鐘的設(shè)計(jì)》word版》由會(huì)員分享,可在線閱讀,更多相關(guān)《《數(shù)字鐘的設(shè)計(jì)》word版(18頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、課程設(shè)計(jì)任務(wù)書 學(xué)生姓名:專業(yè)班級(jí): 指導(dǎo)教師:工作單位:信息工程學(xué)院 題 目: 數(shù)字鐘 設(shè)計(jì)目的: 1、掌握在QuartusⅡ軟件的使用方法,并能熟練的在QuartusⅡ環(huán)境中運(yùn)用VHDL語(yǔ)言完成一些簡(jiǎn)單程序的設(shè)計(jì); 2、掌握數(shù)字鐘的主要功能與在FPGA中的實(shí)現(xiàn)方法。 要求完成的主要任務(wù): 1、課程設(shè)計(jì)工作量:1周。 2、技術(shù)要求: (1)設(shè)計(jì)一個(gè)6位LED動(dòng)態(tài)掃描顯示的數(shù)字鐘,根據(jù)一個(gè)控制鍵能選擇顯示時(shí)、分、秒或年、月、日; (2)通過(guò)撥碼開關(guān)可以進(jìn)行時(shí)、分、年、月、日的調(diào)整,可以實(shí)現(xiàn)翻屏; 3
2、、查閱至少5篇參考文獻(xiàn)。按《武漢理工大學(xué)課程設(shè)計(jì)工作規(guī)范》要求撰寫設(shè)計(jì)報(bào)告書。全文用A4紙打印,圖紙應(yīng)符合繪圖規(guī)范。 時(shí)間安排: 1、 2015年6月11日集中,作課設(shè)具體實(shí)施計(jì)劃與課程設(shè)計(jì)報(bào)告格式的要求說(shuō)明。 2、 2012年6月12日至 2012年6月15日查閱相關(guān)資料,學(xué)習(xí)電路的工作原理。 3、 2012年6月17日至 2012年6月19日,方案選擇和電路設(shè)計(jì)。 4、 2012年6月20日至 2012 年6月21日,電路調(diào)試和設(shè)計(jì)說(shuō)明書撰寫。 5、 2011年6月22日上交課程設(shè)計(jì)成果及報(bào)告,同時(shí)進(jìn)行答辯。 指導(dǎo)教師簽名:年 月日系主任(或責(zé)任教師)簽名:年月日 目
3、錄摘 要I AbstractII 1 緒論1 2 設(shè)計(jì)內(nèi)容及要求1 2.1設(shè)計(jì)目的及主要任務(wù)1 2.1.1設(shè)計(jì)目的1 2.1.2 設(shè)計(jì)任務(wù)及要求1 2.2設(shè)計(jì)思想2 3 數(shù)字鐘的設(shè)計(jì)4 3.1 設(shè)計(jì)原理與方法4 3.2 單元模塊設(shè)計(jì)4 3.2.1 分頻計(jì)模塊設(shè)計(jì)4 3.2.2 消抖電路模塊設(shè)計(jì)5 3.2.3 計(jì)數(shù)器模塊設(shè)計(jì)5 3.2.4 鬧鐘及蜂鳴器設(shè)計(jì)7 3.2.5 多路復(fù)用器模塊設(shè)計(jì)8 3.2.6八段譯碼模塊設(shè)計(jì)8 3.3 數(shù)字鐘設(shè)計(jì)總原理圖8 4 編譯報(bào)告8 4.1 設(shè)計(jì)原理與方法8 5 電路仿真與硬件調(diào)試9 5.1 電路仿真9 5.2 硬件
4、調(diào)試10 6 總結(jié)與心得體會(huì)10 參考文獻(xiàn)11 附錄12 摘 要 EDA是電子設(shè)計(jì)自動(dòng)化(Electronic DesignAutomation)的縮寫,在20世紀(jì)90年代初從計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、計(jì)算機(jī)輔助制造(CAM)、計(jì)算機(jī)輔助測(cè)試(CAT)和計(jì)算機(jī)輔助工程(CAE)的概念發(fā)展而來(lái)的。 20世紀(jì)90年代,國(guó)際上電子和計(jì)算機(jī)技術(shù)較先進(jìn)的國(guó)家,一直在積極探索新的電子電路設(shè)計(jì)方法,并在設(shè)計(jì)方法、工具等方面進(jìn)行了徹底的變革,取得了巨大成功。 在電子技術(shù)設(shè)計(jì)領(lǐng)域,可編程邏輯器件(如CPLD、FPGA)的應(yīng)用,已得到廣泛的普及,這些器件為數(shù)字系統(tǒng)的設(shè)計(jì)帶來(lái)了極大的靈活性。這些
5、器件可以通過(guò)軟件編程而對(duì)其硬件結(jié)構(gòu)和工作方式進(jìn)行重構(gòu),從而使得硬件的設(shè)計(jì)可以如同軟件設(shè)計(jì)那樣方便快捷。這一切極大地改變了傳統(tǒng)的數(shù)字系統(tǒng)設(shè)計(jì)方法、設(shè)計(jì)過(guò)程和設(shè)計(jì)觀念,促進(jìn)了EDA技術(shù)的迅速發(fā)展。 EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺(tái)上,用硬件描述語(yǔ)言VHDL完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合、優(yōu)化、布局、布線和仿真,直至對(duì)于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動(dòng)強(qiáng)度。 本設(shè)計(jì)是通過(guò)Quartus Ⅱ軟件、VHDL語(yǔ)言編程及FPGA芯片來(lái)實(shí)現(xiàn)常見的數(shù)字鐘,該數(shù)字鐘可
6、以根據(jù)一個(gè)控制鍵能選擇顯示時(shí)、分、秒或年、月、日。本設(shè)計(jì)中用8位LED數(shù)碼管顯示時(shí)、分和秒,年、月、日,同時(shí)可以通過(guò)按鍵調(diào)整時(shí)、分、及對(duì)秒進(jìn)行清零。 關(guān)鍵詞:Quartus Ⅱ;VHDL;數(shù)字鐘; 1 緒論 FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)??梢哉f(shuō),F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。FPGA是由存放在片內(nèi)RA
7、M中的程序來(lái)設(shè)置其工作狀態(tài)的,因此,工作時(shí)需要對(duì)片內(nèi)的RAM進(jìn)行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。 加電時(shí),F(xiàn)PGA芯片將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進(jìn)入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無(wú)須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時(shí),只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。 本設(shè)計(jì)是通過(guò)對(duì)數(shù)字鐘個(gè)組要組成部分的VHDL源程序編程和頂層文件的生成來(lái)實(shí)現(xiàn)的
8、。在本設(shè)計(jì)中數(shù)字鐘的主要組成部分有撥碼開關(guān)模塊、按鍵修改模塊,計(jì)數(shù)器模塊、分頻計(jì)模塊、七段譯碼器模塊和數(shù)據(jù)選擇器模塊。通過(guò)按鍵可以實(shí)現(xiàn)選擇顯示時(shí)、分、秒或年、月、日,同時(shí)可以顯示翻屏,還可以通過(guò)按鍵調(diào)整時(shí)、分及對(duì)秒進(jìn)行清零。 2 設(shè)計(jì)內(nèi)容及要求 2.1設(shè)計(jì)目的及主要任務(wù) 2.1.1設(shè)計(jì)目的 (1)初步掌握Quartus軟件的使用方法,提高運(yùn)用硬件描述語(yǔ)言VHDL的能力,初步 了解時(shí)序電路的設(shè)計(jì)。 (2)利用對(duì)生活中熟悉的電子表,用語(yǔ)言設(shè)計(jì)相似功能的數(shù)字鐘。 2.1.2 設(shè)計(jì)任務(wù)及要求 完成以下基本要求及進(jìn)行提高: (1)設(shè)計(jì)一個(gè)6位LED動(dòng)態(tài)掃描顯示的數(shù)字鐘,根據(jù)一個(gè)控
9、制鍵能選擇顯示時(shí)、分、秒或年、月、日; (2)通過(guò)按鍵可以進(jìn)行時(shí)、分、年、月、日的調(diào)整,可以實(shí)現(xiàn)翻屏; (3)可以設(shè)置鬧鐘時(shí)間及整點(diǎn)報(bào)時(shí),鬧鈴蜂鳴器頻率為1000Hz,整點(diǎn)報(bào)時(shí)頻率為 2000Hz; (4)具有定時(shí)翻屏功能,每隔54s,顯示一次年月日; (5)運(yùn)用圖形設(shè)計(jì)方法完成頂層原理圖的設(shè)計(jì)。 2.2設(shè)計(jì)思想 該數(shù)字鐘可以實(shí)現(xiàn)3個(gè)功能:計(jì)時(shí)功能、整點(diǎn)報(bào)時(shí)功能和重置時(shí)間功能,因此有3個(gè)子模塊:計(jì)時(shí)、報(bào)時(shí)、重置時(shí)間。其中計(jì)時(shí)模塊有4部分構(gòu)成:秒計(jì)時(shí)器、分計(jì)時(shí)器和時(shí)計(jì)時(shí)器。其中包括分秒60進(jìn)制計(jì)數(shù)器、時(shí)24進(jìn)制計(jì)數(shù)器、日30進(jìn)制計(jì)數(shù)器、月12進(jìn)制計(jì)數(shù)器和年10進(jìn)制計(jì)數(shù)器,然后根
10、據(jù)要求設(shè)置一個(gè)6選1的數(shù)據(jù)選擇器并且通過(guò)控制鍵實(shí)現(xiàn)選擇顯示時(shí)、分、秒或年、月、日,最后再設(shè)置3個(gè)按鍵調(diào)整數(shù)字鐘,并且通過(guò)一個(gè)七段譯碼器和8進(jìn)制計(jì)數(shù)器控制七段數(shù)碼管實(shí)現(xiàn)顯示。 3 數(shù)字鐘的設(shè)計(jì) 3.1 設(shè)計(jì)原理與方法 數(shù)字計(jì)時(shí)器基本功能是計(jì)時(shí),因此首先需要獲得具有精確振蕩時(shí)間的脈振信號(hào),以此作為計(jì)時(shí)電路的時(shí)序基礎(chǔ),實(shí)驗(yàn)中可以使用的振蕩頻率源為4KHZ,通過(guò)分頻獲得所需脈沖頻率1Hz,1KHz,500Hz。為產(chǎn)生秒位,設(shè)計(jì)一個(gè)模60計(jì)數(shù)器,對(duì)1HZ的脈沖進(jìn)行秒計(jì)數(shù)產(chǎn)生秒位,為產(chǎn)生分位,通過(guò)秒位的進(jìn)位產(chǎn)生分計(jì)數(shù)脈沖,分位也由模60計(jì)數(shù)器構(gòu)成為產(chǎn)生時(shí)位,用一個(gè)模24計(jì)數(shù)器對(duì)分位的進(jìn)位脈沖進(jìn)行計(jì)數(shù)
11、。整個(gè)數(shù)字計(jì)時(shí)器的計(jì)數(shù)部分共包括六位時(shí)十位、時(shí)個(gè)位、分十位、分個(gè)位、秒十位和秒個(gè)位。顯示功能是通過(guò)數(shù)選器、譯碼器、碼轉(zhuǎn)換器和7段顯示管實(shí)現(xiàn)的。因?yàn)閷?shí)驗(yàn)中只用一個(gè)譯碼顯示單元,7個(gè)7段碼,6個(gè)用于顯示時(shí)分秒,一個(gè)顯示星期,所以通過(guò)4個(gè)7選一MUX和一個(gè)3-8譯碼器配合根據(jù)計(jì)數(shù)器的信號(hào)進(jìn)行數(shù)碼管的動(dòng)態(tài)顯示。清零功能是通過(guò)控制計(jì)數(shù)器清零端的電平高低來(lái)實(shí)現(xiàn)的。只需使清零開關(guān)按下時(shí)各計(jì)數(shù)器的清零端均可靠接入有效電平,本實(shí)驗(yàn)中是低電平,而清零開關(guān)斷開時(shí)各清零端均接入無(wú)效電平即可。 校分校時(shí)功能由防抖動(dòng)開關(guān)、邏輯門電路實(shí)現(xiàn)。其基本原理是通過(guò)邏輯門電路控制分計(jì)數(shù)器的計(jì)數(shù)脈沖。當(dāng)校分校時(shí)開關(guān)斷開時(shí),計(jì)數(shù)脈沖由低
12、位計(jì)數(shù)器提供,當(dāng)按下校分校時(shí)開通時(shí),既可以手動(dòng)觸發(fā)出發(fā)式開關(guān)給進(jìn)位脈沖,也可以有恒定的1Hz脈沖提供恒定的進(jìn)位信號(hào),計(jì)數(shù)器在此脈沖驅(qū)動(dòng)下可快速計(jì)數(shù)。為實(shí)現(xiàn)可靠調(diào)時(shí),采用防抖動(dòng)開關(guān),由D觸發(fā)器實(shí)現(xiàn),克服開關(guān)接通或斷開過(guò)程中產(chǎn)生的一串脈沖式振動(dòng)。 保持功能是通過(guò)邏輯門控制秒計(jì)數(shù)器輸入端的1Hz脈沖實(shí)現(xiàn)的。正常情況下,開關(guān)不影響脈沖輸入即秒正常計(jì)數(shù),當(dāng)按下開關(guān)后,使脈沖無(wú)法進(jìn)入計(jì)數(shù)端,從而實(shí)現(xiàn)計(jì)時(shí)保持功能。整點(diǎn)報(bào)時(shí)功能可以通過(guò)組合邏輯電路實(shí)現(xiàn)。當(dāng)計(jì)數(shù)器的各位呈現(xiàn)特定的電平時(shí),可以選通特定的與門和或門將指定的頻率信號(hào)送入蜂鳴器中實(shí)現(xiàn)在規(guī)定的時(shí)刻以指定頻發(fā)音報(bào)時(shí)。 3.2 單元模塊設(shè)計(jì) 3.2
13、.1按鍵消抖電路模塊 通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),當(dāng)機(jī)械觸點(diǎn)斷開、閉合時(shí),電壓信號(hào)并不穩(wěn)定,由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開時(shí)也不會(huì)一下子斷開。[4]因而在閉合及斷開的瞬間均有一連串的抖動(dòng),抖動(dòng)的時(shí)間的長(zhǎng)短有按鍵的機(jī)械特性決定,一般為5ms~10ms。完成程序后可以創(chuàng)建元件。 3.2.2分頻器模塊設(shè)計(jì) 根據(jù)設(shè)計(jì)要求,需要將開發(fā)板的50MHZ信號(hào)分出1HZ和1KHZ共2種時(shí)鐘信號(hào),1HZ脈沖信號(hào)用來(lái)提供計(jì)數(shù)模塊的時(shí)鐘信號(hào)——在1HZ的脈沖下,每隔一秒,秒自加一次,1KHZ脈沖信號(hào)用來(lái)提供消抖電路的時(shí)鐘信號(hào),cnt用于數(shù)碼管掃描。完成程序后可以創(chuàng)建
14、原理圖元件,其元件符號(hào)如圖3-1 所示。 圖3-1 分頻器 3.2.3 計(jì)數(shù)器模塊設(shè)計(jì) 計(jì)數(shù)器模塊主要由秒60進(jìn)制計(jì)數(shù)模塊、分60進(jìn)制計(jì)數(shù)模塊、時(shí)24進(jìn)制計(jì)數(shù)模塊、日30進(jìn)制計(jì)數(shù)模塊、月12進(jìn)制計(jì)數(shù)模塊、年計(jì)數(shù)模塊和8進(jìn)制計(jì)數(shù)器。下圖3-3是將60進(jìn)制計(jì)數(shù)模塊、分60進(jìn)制計(jì)數(shù)模塊、時(shí)24進(jìn)制計(jì)數(shù)模塊融合為一個(gè)模塊。 圖3-3時(shí)鐘電路 圖3-4 日30進(jìn)制計(jì)數(shù)器 圖3-5月12進(jìn)制計(jì)數(shù)器 秒60進(jìn)制計(jì)數(shù)模塊的時(shí)鐘信號(hào)為1HZ的脈沖信號(hào),每計(jì)數(shù)到59便會(huì)產(chǎn)生一次進(jìn)位作為分60進(jìn)制計(jì)數(shù)模塊的時(shí)鐘信號(hào),該模塊加入一個(gè)清零端,當(dāng)CS為1時(shí),秒計(jì)數(shù)模塊中的個(gè)位和十位同時(shí)為零,當(dāng)CS
15、為1時(shí)正常計(jì)數(shù).分60進(jìn)制計(jì)數(shù)模塊的時(shí)鐘信號(hào)為秒計(jì)數(shù)模塊的進(jìn)位信號(hào),其通過(guò)一個(gè)增加鍵CM對(duì)其調(diào)整。時(shí)24進(jìn)制計(jì)數(shù)模塊的時(shí)鐘信號(hào)為分計(jì)數(shù)模塊的進(jìn)位信號(hào),其通過(guò)一個(gè)增加鍵CH對(duì)其調(diào)整。其中UP,CHANGE信號(hào)說(shuō)明如下,當(dāng)UP 信號(hào)為高時(shí)時(shí),表示數(shù)碼管翻屏了,即顯示年月日的時(shí)間為6ms。UP信號(hào)為低電平時(shí),顯示時(shí)分秒。在UP有效時(shí),CHANGE為低電平,所有數(shù)碼管上部分熄滅,下部分顯示年月日的下半部分,CHANGE為高電平時(shí),正常顯示年月日部分,直到UP 為低。[5] 日30進(jìn)制計(jì)數(shù)模塊的時(shí)鐘信號(hào)為時(shí)計(jì)數(shù)模塊的進(jìn)位信號(hào),其通過(guò)一個(gè)置數(shù)端load對(duì)其調(diào)整。日30進(jìn)制計(jì)數(shù)器的VHDL程序如附錄所示,
16、完成程序后可以創(chuàng)建元件,其元件符號(hào)如圖3-4所示。 月12進(jìn)制計(jì)數(shù)模塊的時(shí)鐘信號(hào)為日計(jì)數(shù)模塊的進(jìn)位信號(hào),其通過(guò)一個(gè)置數(shù)端對(duì)其調(diào)整。月12進(jìn)制計(jì)數(shù)器的VHDL程序如附錄所示,完成程序后可以創(chuàng)建元件,其元件符號(hào)如圖3-5所示。 年進(jìn)制計(jì)數(shù)模塊的時(shí)鐘信號(hào)由月計(jì)數(shù)模塊的進(jìn)位信號(hào)產(chǎn)生,年計(jì)數(shù)模塊又由四個(gè)十進(jìn)制計(jì)數(shù)器組成,分別是個(gè)位、十位、百位和千位計(jì)數(shù)模塊組成,中間由進(jìn)位信號(hào)連接。其VHDL程序如附錄所示,完成程序后可以創(chuàng)建元件,其元件符號(hào)分別如圖3-6、圖3-7、圖3-8和圖3-9所示。 圖3-6 年個(gè)位計(jì)數(shù)器 圖3-7 年十位計(jì)數(shù)器 圖3-8 年百位計(jì)數(shù)器元件 圖3-9 年千
17、位計(jì)數(shù)器元件符號(hào) 同時(shí),本設(shè)計(jì)中還需要設(shè)計(jì)一個(gè)8進(jìn)制計(jì)數(shù)器用來(lái)提供七段數(shù)碼管的位選碼和數(shù)據(jù)選擇器的狀態(tài)信號(hào)。其程序如附錄所示,其元件符號(hào)如圖3-2-10所示。 圖3-108進(jìn)制計(jì)數(shù)器 3.2.4鬧鐘及蜂鳴器設(shè)計(jì) 本設(shè)計(jì)只針對(duì)時(shí)分秒進(jìn)行定時(shí),并可任意設(shè)定定時(shí)時(shí)間。整點(diǎn)報(bào)時(shí)蜂鳴器的頻率是2000Hz,鬧鐘是1000Hz。元件符號(hào)如圖3-11所示。 圖3-11鬧鐘及蜂鳴器 3.2.5八段譯碼模塊設(shè)計(jì) 一個(gè)數(shù)碼管是由8段LED顯示的,0-9對(duì)應(yīng)著不同的字形。數(shù)碼管是共陽(yáng)的,使用共陽(yáng)字型碼。需要將BCD碼轉(zhuǎn)換成數(shù)碼管可以顯示的碼,該模塊的程序如附錄所示,其元件符號(hào)如圖3-13所示。 圖3
18、-13八段譯碼 3.3 數(shù)字鐘設(shè)計(jì)總原理圖 利用至頂向下的設(shè)計(jì)方法,新建一個(gè)Block Diagram,在Quartus Ⅱ環(huán)境下連接各模塊組成數(shù)字鐘的總原理圖如圖3-14所示。 圖3-14 數(shù)字鐘總原理圖 4編譯報(bào)告 4.1 數(shù)字鐘設(shè)計(jì)編譯報(bào)告 將各模塊正確連線后,編譯無(wú)警告,生成編譯報(bào)告如圖。發(fā)現(xiàn),總的邏輯單元使用了184,其中組合邏輯使用184,時(shí)序邏輯使用98,由此看出,在Alter的EP2C5Q208芯片中,一個(gè)LE包括一個(gè)Combination logic和一個(gè)Timing logic。如圖4-1。 圖4-1 數(shù)字鐘編譯報(bào)告 5 電路仿真與硬件調(diào)試 5.1 電路仿
19、真 經(jīng)過(guò)嘗試,發(fā)現(xiàn)數(shù)字鐘的設(shè)計(jì)用波形仿真看到與實(shí)際相符的數(shù)據(jù)很困難,因?yàn)?0M的時(shí)鐘要分成1HZ的時(shí)鐘,1000HZ的時(shí)鐘,分在秒跳動(dòng)60才跳一次,時(shí)在分跳動(dòng)60才跳一次,受到simulator tool 工作界面的限制,并不能完整的觀察到時(shí)分秒,年月日的信息,因此只選擇的clock模塊的進(jìn)行了仿真。如下圖。 圖5-1 計(jì)數(shù)模塊仿真波形圖 七段數(shù)碼顯示譯碼器LED的仿真,其中Din[3..0]為BCD碼輸入,LED7S[6..0]為七段譯碼輸出(高電平有效)。其仿真輸出波形如圖5-2所示。 圖5-2 七段譯碼模塊仿真波形圖 5.2 硬件調(diào)試 經(jīng)過(guò)調(diào)試,仿真結(jié)果正確后,將so
20、f文件轉(zhuǎn)換成固化到芯片的適合JTAG下載的jic文件。連接硬件系統(tǒng)后,通上電源,經(jīng)QuartusⅡ中的PROGRAMMER菜單,調(diào)出編程器窗口,刪掉sof文件,現(xiàn)在轉(zhuǎn)換成功的jic文件。一切就緒后,按下編程器窗口中的“START”按鈕,設(shè)計(jì)的內(nèi)容就開始下載到FPGA芯片中。通過(guò)實(shí)驗(yàn)箱上的撥碼開關(guān)和按鍵開關(guān)可以逐一對(duì)數(shù)字鐘的功能進(jìn)行驗(yàn)證。通過(guò)數(shù)碼管顯示可知本設(shè)計(jì)可以實(shí)現(xiàn)基本的時(shí)、分、秒及年、月、日的計(jì)數(shù),通過(guò)按鍵和撥碼開關(guān)的配合可以實(shí)現(xiàn)時(shí)、分、秒和年、月、日的校準(zhǔn)以及顯示翻屏。故本設(shè)計(jì)完全符合設(shè)計(jì)要求。 6 總結(jié)與心得體會(huì) 由于一直在學(xué)習(xí)FPGA,所以拿到課程設(shè)計(jì)的題目時(shí)胸有成竹,我想對(duì)于我
21、來(lái)說(shuō),設(shè)計(jì)出來(lái)毫無(wú)困難,所以就想在題目的要求上上一個(gè)高度。之前都是用VHDL語(yǔ)言生成模塊直接例化,這次我選擇了利用更直觀的原理圖設(shè)計(jì)方法。連線時(shí)也遇到過(guò)小小的麻煩,比如剛開始總線不知怎么解決,PIN_NAME不知道怎么命名。圖連完后,編譯通過(guò),對(duì)原理圖設(shè)計(jì)有了整題把握,以后做設(shè)計(jì)的時(shí)候,對(duì)于接口比較復(fù)雜的還是用原理圖設(shè)計(jì)比較方便。后來(lái)就考慮如何玩點(diǎn)花樣,畢竟單調(diào)的顯示時(shí)分秒還是駕輕就熟的。改動(dòng)如下:1.將區(qū)分時(shí)分秒,年月日的--改成動(dòng)態(tài)的了,隨著1HZ的時(shí)鐘兩滅,看著形象多了。2.在利用按鍵手動(dòng)翻屏的基礎(chǔ)上,加了個(gè)自動(dòng)翻屏,畢竟有時(shí)候并不想動(dòng)手去看日期,自動(dòng)翻屏的目的是想讓日期從下往上浮動(dòng),可
22、惜不是16*16的點(diǎn)陣,效果不佳。路漫漫其修遠(yuǎn)兮,吾將上下而求索。 參考文獻(xiàn) [1] 盧毅,賴杰. VHDL與數(shù)字電路設(shè)計(jì). 科學(xué)出版社,2009. [2] 北京理工大學(xué)ASIC研究所.《VHDL語(yǔ)言100例詳解》. 清華大學(xué)出版社,2001. [3] 楊麗英.《電路EDA技術(shù)與應(yīng)用》. 清華大學(xué)出版社,2011. [4] 謝自美.《電子線路設(shè)計(jì)》(第二版).華中科技大學(xué)出版社,2000. [5] 趙世強(qiáng).《電子電路EDA技術(shù)》.西安電子科技大學(xué)出版社,2006. 附錄 library ieee; use ieee.std_logic_1164.all; use ieee.
23、std_logic_arith.all; use ieee.std_logic_unsigned.all; package my_package is function 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 my_package is functio
24、n bcd_to_seg7(signal bcd:integer range 0 to 9)return std_logic_vector is variable seg7:std_logic_vector(7 downto 0); begin case bcd is when 0=> seg7:=x"c0"; when 1=> seg7:=x"f9"; when 2=> seg7:=x"a4"; when 3=> seg7:=x"b0"; when 4=>
25、 seg7:=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
26、 integer range 0 to 59;signal shi,ge:out integer)is begin case n is when 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
27、 40|41|42|43|44|45|46|47|48|49 =>shi<=4; when 50|51|52|53|54|55|56|57|58|59 =>shi<=5; when others=> null; end case; case n is when 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
28、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<=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 other
29、s =>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_package.all; entity digitalclock is port(clk:in std_logic;
30、 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 digitalclock is sig
31、nal 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
32、0 to 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 frequence signal H:std_logic; signal up,change:std_logic; begin process(clk,rst_n)--di
33、vider the clk to different hz variable cnt1:integer range 0 to 5000;--9999 variable cnt2:integer range 0 to 2; variable cnt3:integer range 0 to 1500;--2500 begin if(rst_n='0')then elsif(clk'event and clk='1')then if(cnt1=5000)then cnt1:=0; clk_1000<=not clk_1000;-
34、-1000hz if(cnt2=2)then cnt2:=0; if(cnt=7)then cnt<=0; else cnt<=cnt+1; end if; if(cnt3=1500)then cnt3:=0; clk_1<=not clk_1; else cnt3:=cnt3+1; end if; else cnt2:=cnt2+1; end if; els
35、e cnt1:=cnt1+1; end if; end if; end process; process(clk_1,rst_n,key_value) variable delay:integer range 0 to 10; begin if(rst_n='0')then sec<=0; min<=0; hour<=0; elsif(clk_1'event and clk_1='1')then case key_value is when 3=> sec<=0;
36、 when 2=> if(min=59)then min<=0; else min<=min+1; end if; when 1=> if(hour=23)then hour<=0; else hour<=hour+1; end if; when 0=> if(sec=59)then sec<=0; if(min=59)then min<=0;
37、 if(hour=23)then hour<=0; else hour<=hour+1; end if; else min<=min+1; end if; else sec<=sec+1; if(sec>=54 and sec<=59)then up<='1'; if(sec=55)then change<='0';
38、 elsif(sec<=59)then change<='1'; end if; else up<='0'; end if; end if; when others=> null; end case; end if; end process; process(clk_1000,ch,cm,cs) variable delay:integer range 0 to 10; variable key:std_
39、logic_vector(2 downto 0); begin key:=ch&cm&cs; if(clk_1000'event and clk_1000='1')then case key is when "011"=> if(delay=10)then delay:=0; key_value<=1; else delay:=delay+1; end if; when "101"=> if(delay=10)then delay:=0;
40、 key_value<=2; else delay:=delay+1; end if; when "110"=> if(delay=10)then delay:=0; key_value<=3; else delay:=delay+1; end if; when others=> key_value<=0; end case; end if; end process; process(sec,min) be
41、gin if(min=0 and sec=0)then buzz_freque<=20000; elsif(min=59)then if (sec=50 or sec=52 or sec=54 or sec=56 or sec=58)then buzz_freque<=10000; else buzz_freque<=0; end if; else buzz_freque<=0; end if; end process; process(clk,buzz_freque) variable cnt:
42、integer:=0; begin if(buzz_freque/=0)then if(clk'event and clk='1')then if(cnt=buzz_freque)then cnt:=0; buzz<=not buzz; else cnt:=cnt+1; end if; end if; else buzz<='1';-----1 no beep 0 beep end if; end process; sec_min_hour(sec,sec_shi,sec_
43、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; begin if(key_sel='1')then case cnt is when 0=> wei_sel<="11111110"; if(up='1')then
44、 if(change='0')then data_out<=x"a3"; else data_out<=x"80"; end if; else data_out<=bcd_to_seg7(sec_ge); end if; when 1=> wei_sel<="11111101"; if(up='1')then if(change='0')then data_out<=x"fb"; else d
45、ata_out<=x"f9"; end if; else data_out<=bcd_to_seg7(sec_shi); end if; when 2=> wei_sel<="11111011"; if(clk_1='1')then H:='1'; else H:='0'; end if; data_out<='1'&H&"111111"; when 3=> wei_sel<="11110111"; if(up=
46、'1')then if(change='0')then data_out<=x"a7"; else data_out<=x"82"; end if; else data_out<=bcd_to_seg7(min_ge); end if; when 4=> wei_sel<="11101111"; if(up='1')then if(change='0')then data_out<=x"ab"; else
47、 data_out<=x"c0"; end if; else data_out<=bcd_to_seg7(min_shi); end if; when 5=> wei_sel<="11011111"; if(clk_1='1')then H:='1'; else H:='0'; end if; data_out<='1'&H&"111111"; when 6=> wei_sel<="10111111";
48、 if(up='1')then if(change='0')then data_out<=x"b3"; else data_out<=x"a4"; end if; else data_out<=bcd_to_seg7(hour_ge); end if; when 7=> wei_sel<="01111111"; if(up='1')then if(change='0')then data_out<=x"fb";
49、 else data_out<=x"f9"; end if; else data_out<=bcd_to_seg7(hour_shi); end if; when others=> null; end case; else case cnt is when 0=> wei_sel<="11111110"; data_out<=x"80"; when 1=> wei_sel<="11111101"; data
50、_out<=x"f9"; when 2=> wei_sel<="11111011"; if(clk_1='1')then H:='1'; else H:='0'; end if; data_out<='1'&H&"111111"; when 3=> wei_sel<="11110111"; data_out<=x"82"; when 4=> wei_sel<="11101111"; data_out<=x"c0"; wh
51、en 5=> wei_sel<="11011111"; if(clk_1='1')then H:='1'; else H:='0'; end if; data_out<='1'&H&"111111"; when 6=> wei_sel<="10111111"; data_out<=x"a4"; when 7=> wei_sel<="01111111"; data_out<=x"f9"; when others=> null; end case; end if; end process; end behavior;
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 植樹問題講課
- 小小圖書館賈世喜
- 小班數(shù)學(xué):變得一樣多
- 蘇教版三年級(jí)數(shù)學(xué)上冊(cè)教學(xué)ppt課件58:解決問題的策略復(fù)習(xí)
- 小學(xué)科學(xué)六下《拓展與應(yīng)用》-公開課一等獎(jiǎng)ppt課件
- 高中英語(yǔ)人教版選修七Unit-2-Robots-ppt課件
- 第九章長(zhǎng)期負(fù)債課件
- 皮膚免疫系統(tǒng)課件
- 辦公樓施工現(xiàn)場(chǎng)消防安全管理要求規(guī)范課件
- freeroi在功能磁共振roi分析中的應(yīng)用
- 《永遇樂&#183;京口北固亭懷古》用典講解課件
- 《秋天的雨》微課課件
- 護(hù)患溝通技巧-課件
- 《高等數(shù)學(xué)B》第十章___微分方程與差分方程__第6節(jié)__差分與差分方程的概念_、……課件
- 英語(yǔ)(人教版)九年級(jí)總復(fù)習(xí)題型訓(xùn)練補(bǔ)全對(duì)話(含最新原創(chuàng)題)課件