第一篇:多功能數(shù)字鐘課程設(shè)計報告
課題名稱 姓名 學(xué)號 院、系、部 專業(yè) 指導(dǎo)教師
電子技術(shù)課程設(shè)計報告書
2016年6月12日
一、設(shè)計任務(wù)及要求:
用中小規(guī)模集成芯片設(shè)計并制作多功能數(shù)字鐘,具體要求如下:
1、準(zhǔn)確及時,以數(shù)字形式顯示時(00~23)、分(00~59)、秒(00~59)的時間。
2、具有校時功能。指導(dǎo)教師簽名:
2016
二、指導(dǎo)教師評語:
指導(dǎo)教師簽名:
2016
三、成績
指導(dǎo)教師簽名:
2016年6月年6月年6月日
日
日
多功能數(shù)字鐘課程設(shè)計報告 設(shè)計目的
一、設(shè)計原理與技術(shù)方法:
包括:電路工作原理分析與原理圖、元器件選擇與參數(shù)計算、電路調(diào)試方法與結(jié)果說明; 軟件設(shè)計說明書與流程圖、軟件源程序代碼、軟件調(diào)試方法與運(yùn)行結(jié)果說明。
1、電路工作原理分析與原理圖
數(shù)字鐘實際上是一個對標(biāo)準(zhǔn)頻率(1Hz)進(jìn)行計數(shù)的計數(shù)電路。由于標(biāo)準(zhǔn)的1Hz 時間信號必須做到準(zhǔn)確穩(wěn)定,所以通常使用輸出頻率穩(wěn)定的石英晶體振蕩器電路構(gòu)成數(shù)字鐘的振源。又由于計數(shù)的起始時間不可能與標(biāo)準(zhǔn)時間(如北京時間)一致,故需要在電路上加一個校時電路。因此一個具有計時、校時、報時、顯示等基本功能的數(shù)字鐘主要由振蕩器、分頻器、計數(shù)器、譯碼器、顯示器、校時電路、報時電路等七部分組成。石英晶體振蕩器產(chǎn)生的信號經(jīng)過分頻器得到秒脈沖后,秒脈沖送入計數(shù)器計數(shù),計數(shù)結(jié)果通過“時”、“分”、“秒”譯碼器譯碼,并通過顯示器顯示時間。由以上分析可得到原理框圖如下圖
圖1 實驗原理框圖
2、元器件選擇與參數(shù)計算
(1)晶體振蕩電路:產(chǎn)生秒脈沖既可以采用555脈沖發(fā)生電路也可以采用晶振脈沖發(fā)生電路。若由集成電路定時器555與RC組成的多諧振蕩器作為時間標(biāo)準(zhǔn)信號源,可使555與RC組成多諧振蕩器,產(chǎn)生頻率 f=1kHz的方波信號,再通過分頻則可得到秒脈沖信號。晶體振蕩器電路則可以給數(shù)字鐘提供一個頻率穩(wěn)定準(zhǔn)確的32768Hz的方波信號,可保證數(shù)字鐘的走時準(zhǔn)確及穩(wěn)定。相比二者的穩(wěn)定性,晶振電路比555電路能夠產(chǎn)生更加穩(wěn)定的脈沖,數(shù)字電路中的時鐘是由振蕩器產(chǎn)生的,振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精度決定了數(shù)字鐘計時的準(zhǔn)確程度,所以最后決定采用晶振脈沖發(fā)生電路。石英晶體振蕩器的特點(diǎn)是振蕩頻率準(zhǔn)確、電路結(jié)構(gòu)簡單、頻率易調(diào)整,它是電子鐘的核心,用它產(chǎn)生標(biāo)準(zhǔn)頻率信號,再由分頻器分成秒時間脈沖。
所以秒脈沖晶體振蕩選用32768Hz的晶振,該元件專為數(shù)字鐘電路而設(shè)計,其頻率較低,有利于減少分頻器級數(shù)。從有關(guān)手冊中,可查得C1、C2均為20pF。當(dāng)要求頻率準(zhǔn)確度和穩(wěn)定度更高時,還可接入校正電容并采取溫度補(bǔ)償措施。由于CMOS電路的輸入阻抗極高,因此反饋電阻R1可選為20MΩ。
(2)分頻器電路:分頻器電路將32768Hz的高頻方波信號經(jīng)32768(152)次分頻后得到1Hz的方波信號供秒計數(shù)器進(jìn)行計數(shù)。分頻器實際上也就是計數(shù)器。該電路可通過CD4060與雙D觸發(fā)器74LS74共同實現(xiàn)。
(3)時間計數(shù)器電路:時間計數(shù)電路由秒個位和秒十位計數(shù)器、分個位和分十位計數(shù)器及時個位和時十位計數(shù)器電路構(gòu)成,其中秒個位和秒十位計數(shù)器、分個位和分十位計數(shù)器為60進(jìn)制計數(shù)器,而根據(jù)設(shè)計要求,時個位和時十位計數(shù)器為24進(jìn)制計數(shù)器。計數(shù)器可以使用十進(jìn)制的74LS160。
(4)譯碼驅(qū)動電路:譯碼驅(qū)動電路將計數(shù)器輸出的8421BCD碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且為保證數(shù)碼管正常工作提供足夠的工作電流。譯碼器可以使用CD4511。
(5)校時電路:可以通過基本的門器件、電阻與開關(guān)實現(xiàn)。由設(shè)計的電路圖可選擇與非門74LS00。(6)整點(diǎn)報時電路:一般時鐘都應(yīng)具備整點(diǎn)報時電路功能,即在時間出現(xiàn)整點(diǎn)前數(shù)秒內(nèi),數(shù)字鐘會自動報時,以示提醒.其作用方式是發(fā)出連續(xù)的或有節(jié)奏的音頻聲波。
3、電路調(diào)試方法與結(jié)果說明(1)電路調(diào)試方法 ①數(shù)碼管的調(diào)試:可以用萬用表的負(fù)極接數(shù)碼管的3或8腳,正極依次接數(shù)碼管剩余的管腳所接電阻的另一端,并將萬用表調(diào)至測發(fā)光二極管檔位,從而測試數(shù)碼管的顯示是否正確。②“時”“分”“秒”電路的調(diào)試:將“時”“分”“秒”電路連接完成后,可以用函數(shù)信號發(fā)生器產(chǎn)生的1Hz方波信號分別作為“時”、“分”、“秒”的個位74LS160的計數(shù)脈沖,從而測試“時”是否為24進(jìn)制,“分”和“秒”是否為60進(jìn)制。③校時電路的調(diào)試:先將電路外接用函數(shù)信號發(fā)生器產(chǎn)生的2Hz方波信號,再分別通過校時、校分電路開關(guān)的斷開、閉合以及開關(guān)閉合后電路的工作情況判斷電路的校時、校分功能是否正確。
④秒脈沖產(chǎn)生電路的調(diào)試:將電路產(chǎn)生的秒時間脈沖接入示波器,觀察并計算電路是否產(chǎn)生1Hz方波信號。(2)結(jié)果說明
①數(shù)碼管的調(diào)試:當(dāng)正極依次接1、2、4、5、7、9、10管腳時,數(shù)碼管依次是G、F、A、B、C、D、E亮。②“時”“分”“秒”電路的調(diào)試:“時”為24進(jìn)制(從“00”到“23”),“分”和“秒”都為60進(jìn)制(從“00”到“59”)。
③校時電路的調(diào)試:開關(guān)斷開時電路處于正常工作狀態(tài),開關(guān)閉合時電路處于校時、校分狀態(tài)。
④秒脈沖產(chǎn)生電路的調(diào)試:電路產(chǎn)生1Hz方波信號。
4、軟件設(shè)計說明書與流程圖(1)秒脈沖產(chǎn)生電路
晶體振蕩器是構(gòu)成數(shù)字式時鐘的核心,它保證了時鐘的走時準(zhǔn)確及穩(wěn)定。由于晶體具有較高的頻率穩(wěn)定性及準(zhǔn)確性,從而保證了輸出頻率的穩(wěn)定和準(zhǔn)確。晶體XTAL的頻率選為32768HZ。該元件專為數(shù)字鐘電路而設(shè)計,其頻率較低,有利于減少分頻器級數(shù)。從有關(guān)手冊中,可查得C1、C2均為20pF。當(dāng)要求頻率準(zhǔn)確度和穩(wěn)定度更高時,還可接入校正電容并采取溫度補(bǔ)償措施。由于CMOS電路的輸入阻抗極高,因此反饋電阻R1可選為22MΩ。較高的反饋電阻有利于提高振蕩頻率的穩(wěn)定性。通常,數(shù)字鐘的晶體振蕩器輸出頻率較高,為了得到1Hz的秒信號輸入,需要對振蕩器的輸出信號進(jìn)行分頻。通常實現(xiàn)分頻器的電路是計數(shù)器電路,一般采用多級2進(jìn)制計數(shù)器來實現(xiàn)。
本實驗中采用CD4060來構(gòu)成分頻電路。管腳圖見圖2。CD4060在數(shù)字集成電路中可實現(xiàn)的分頻次數(shù)最高,而且CD4060還包含振蕩電路所需的非門,使用更為方便。CD4060計數(shù)為14級2進(jìn)制計數(shù)器,可以將32768Hz的信號分頻為2Hz,再經(jīng)過74LS74即可獲得1Hz的方波信號。原理電路圖如圖3所示,圖4為仿真電路圖。
圖2 D4060管腳圖
圖3 CD4060秒脈沖振蕩發(fā)生器
圖 4 產(chǎn)生1Hz時間脈沖的電路圖
(2)時間計數(shù)器電路 ①“秒”“分”電路
根據(jù)題目要求,“秒”和“分”都是60進(jìn)制的,而且是從“00”到“59”,可以使用十進(jìn)制的74LS160來實現(xiàn)這個功能。首先將兩片74LS160通過串行進(jìn)位方式接成百進(jìn)制計數(shù)器,即分別將“秒”和“分”個位的進(jìn)位輸出信號經(jīng)非門作為“秒”和“分”十位的計數(shù)輸入脈沖。當(dāng)計數(shù)器從全0狀態(tài)開始計數(shù),計入59個脈沖時,經(jīng)與非門譯碼產(chǎn)生低電平信號立刻將兩片74LS160同時置零,于是便得到了60進(jìn)制的計數(shù)器。74160的邏輯功能示意圖、引腳圖及功能表如下所示。
圖5 a)74160邏輯功能示意圖
b)74160引腳圖
圖6 74160邏輯功能表 ②“時”電路 根據(jù)題目要求,“時”是24進(jìn)制的,而且是從“00”到“23”,可以使用十進(jìn)制的74LS160來實現(xiàn)這個功能。首先將兩片74LS160通過串行進(jìn)位方式接成百進(jìn)制計數(shù)器,當(dāng)計數(shù)器從全0狀態(tài)開始計數(shù),計入23個脈沖時,經(jīng)與非門譯碼產(chǎn)生低電平信號立刻將兩片74LS160同時置零,于是便得到了24進(jìn)制的計數(shù)器。(3)譯碼驅(qū)動電路
計數(shù)器實現(xiàn)了對時間的累計以8421BCD碼形式輸出,選用顯示譯碼電路將計數(shù)器的輸出數(shù)碼轉(zhuǎn)換為數(shù)碼顯示器件所需要的輸出邏輯和一定的電流,選用CD4511作為顯示譯碼電路,選用LED數(shù)碼管作為顯示單元電路。由于CD4511是輸出高電平有效,所以選用七段共陰極LED數(shù)碼管。若將“秒”、“分”、“時”計數(shù)器的每位輸出分別接到相應(yīng)七段譯碼器的輸入端,便可進(jìn)行不同數(shù)字的顯示。“秒”用數(shù)碼管顯示如圖7所示。
圖7 “秒”的譯碼及驅(qū)動顯示電路圖(4)校時電路
數(shù)字種啟動后,每當(dāng)數(shù)字鐘顯示與實際時間不符合,需要根據(jù)標(biāo)準(zhǔn)時間進(jìn)行校時。通常,校正時間的方法是:首先截斷正常的計數(shù)通路,然后再進(jìn)行人工觸發(fā)計數(shù)或?qū)㈩l率較高的方波信號加到需要校正的計數(shù)單元的輸入端,校正好后,再轉(zhuǎn)入正常計時狀態(tài)即可。?!懊搿睍r,采用等待校時。?!胺帧?、“時”的原理比較簡單,采用加速校時。對校時電路的要求是 : 1.在小時校正時不影響分和秒的正常計數(shù)。2.在分校正時不影響秒和小時的正常計數(shù)。當(dāng)開關(guān)斷開時,因為校正信號和0相與的輸出為0,而開關(guān)的另一端接高電平,正常輸入信號可以順利通過與或門,故校時電路處于正常計時狀態(tài);當(dāng)開關(guān)閉合時,情況正好與上述相反,這時校時電路處于校時狀態(tài)。與非門可選74LS00,非門則可用與非門2個輸入端并接來代替從而節(jié)省芯片。校時電路圖見圖8。
校時電路圖(5)整點(diǎn)報時電路
一般時鐘都應(yīng)具備整點(diǎn)報時電路功能,即在時間出現(xiàn)整點(diǎn)前數(shù)秒內(nèi),數(shù)字鐘會自動報時,以示提醒。其作用方式是發(fā)出連續(xù)的或有節(jié)奏的音頻聲波。當(dāng)時間在59分50秒到59分59秒期間時,分十位、分個位和秒十位均保持不變,分別為5、9和5,因此可將分計數(shù)器十位的QC和QA、個位的QD和QA及秒計數(shù)器十位的QC 和QA相與。電路在整點(diǎn)前6秒鐘內(nèi)開始整點(diǎn)報時,即當(dāng)時間在59分54秒到59分59秒期間時,報時電路產(chǎn)生報時控制信號,控制小喇叭產(chǎn)生低音;當(dāng)時間為00分00秒時,報時電路產(chǎn)生報時控制信號,控制小喇叭產(chǎn)生高音。
5、軟件調(diào)試方法與運(yùn)行結(jié)果說明(1)軟件調(diào)試方法
由于仿真時晶振不能正常工作,所以通過外接1KHz方波信號來調(diào)試電路?!皶r”“分”“秒”電路的調(diào)試:“時”為24進(jìn)制(從“00”到“23”),“分”和“秒”都為60進(jìn)制(從“00”到“59”)。校時電路的調(diào)試:可以通過校時、校分電路的開關(guān)來校對時間,并判斷電路的“時”“分”“秒”的進(jìn)制是否正確。開關(guān)斷開時電路處于正常工作狀態(tài),開關(guān)閉合時電路處于校時、校分狀態(tài)。(2)運(yùn)行結(jié)果說明
數(shù)碼管的各部分可以正確顯示,電路的“時”為24進(jìn)制(從“00”到“23”),“分”和“秒”都為60進(jìn)制(從“00”到“59”)。開關(guān)斷開時電路處于正常工作狀態(tài),開關(guān)閉合時電路處于校時、校分狀態(tài),通過控制開關(guān)及輸入信號可以達(dá)到校時功能。
三、設(shè)計體會與建議 1.設(shè)計體會
我覺得此次的數(shù)字鐘設(shè)計實驗,電路原理相對來比較簡單,但電路圖比較復(fù)雜,所用芯片比較多,相應(yīng)的連線也多,這就給焊接電路增加了較大的難度。不過通過此次實驗,使我更進(jìn)一步地熟悉了芯片的結(jié)構(gòu),掌握了實驗中所用各芯片的工作原理和其具體的使用方法,同時還接觸到了一些新認(rèn)識的芯片,增長了見識。這次課程設(shè)計是一次難得的鍛煉機(jī)會,讓我們能夠充分運(yùn)用所學(xué)過的理論知識和自己動手實際操作的能力,另外還讓我們學(xué)習(xí)查找資料的方法,以及自己設(shè)計電路、焊接電路、分析解決電路存在的問題的能力。這對于我來說是很好的提高,填補(bǔ)了平日理論學(xué)習(xí)后實踐方面的空白。參考文獻(xiàn)
[1] 閻石.數(shù)字電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2001年
[2] 楊素行.模擬電子技術(shù)基礎(chǔ)簡明教程[M].北京:高等教育出版社,2005年 [3]康華光.電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,1999年 [4]彭華林等編.數(shù)字電子技術(shù)[M].長沙:湖南大學(xué)出版社,2004年 [5]金唯香等編.電子測試技術(shù)[M].長沙:湖南大學(xué)出版社,2004年
第二篇:多功能數(shù)字鐘課程設(shè)計
多功能數(shù)字鐘
朱安煙
(安陽師范學(xué)院 物電學(xué)院, 河南 安陽 455002)
摘要:時鐘相比具有更高的準(zhǔn)確性和直觀性
因此得到了更加廣泛的使用。數(shù)字鐘從原理上講是一種典型的數(shù)字電路,其中
本設(shè)計采用六位LED
24小時計時方式根據(jù)數(shù)碼管動態(tài)顯示原理來進(jìn)行顯示。用晶振產(chǎn)生振蕩脈加以分頻得到所需的鐘表秒脈沖,利用純數(shù)字電路,實現(xiàn)數(shù)字電子時鐘功能,時間重置功能。此次數(shù)字鐘的理圖設(shè)計,PCB圖的制作主要是基于altium designer軟件,利用proteus7.7軟件進(jìn)行仿真,最終本設(shè)計實現(xiàn)24小時的時鐘計時、時間重置功能。
關(guān)鍵詞:LED數(shù)碼管
時序電路
邏輯電路
時鐘
校時引言
僅向。方案論證:
2.1方案一
由于是數(shù)字鐘的設(shè)計,可以用單片機(jī)AT89C51來實現(xiàn)計數(shù)功能,相對于純數(shù)字電路來講它具有功耗低、體積小、使用方便等優(yōu)點(diǎn)。但在大二下半學(xué)期初期,對單片機(jī)方面的內(nèi)容知識還不夠完善,加上用單片機(jī)為核心來做數(shù)字鐘還需做編程,對自身來說又是一難點(diǎn)。不過此法可以待以后,學(xué)習(xí)知識完善后再考慮。
2.2 方案二
繼而考慮到用原先學(xué)過的純數(shù)字電路來做,以74Ls160來做為計數(shù)的芯片,用六片分別實現(xiàn) 數(shù)字鐘的小時、分、秒、的計數(shù),并用晶振加以分頻產(chǎn)生數(shù)字鐘所需的秒脈沖。
從以上兩種方案,很容易看出,采用方案二,用此法做即可以復(fù)習(xí)回顧早期學(xué)習(xí)的數(shù)電模電知識,又避免了單片機(jī)知識不足的問題,故用此法。結(jié)果與討論
3.1.1數(shù)字鐘主要計數(shù)芯片為74ls160其引腳圖如下:
這種同步可預(yù)置十進(jìn)計數(shù)器是由四個D型觸發(fā)器和若干個門電路構(gòu)成,內(nèi)部有超前進(jìn)位,具有計數(shù)、置數(shù)、禁止、直接(異步)清零等功能。對所有觸發(fā)器同時加上時鐘,使得當(dāng)計數(shù)使能輸入和內(nèi)部門發(fā)出指令時輸出變化彼此協(xié)調(diào)一致而實現(xiàn)同步工作。這種工作方式消除了非同步(脈沖時鐘)計數(shù)器中常有的輸出計數(shù)尖峰。緩沖時鐘輸入將在時鐘輸入上升沿觸發(fā)四個觸發(fā)器。這種計數(shù)器是可全編程的,即輸出可預(yù)置到任何電平。當(dāng)預(yù)置是同步時,在置數(shù)輸入上將建立一低電平,禁止計數(shù),并在下一個時鐘之后不管使能輸入是何電平,輸出都與建立數(shù)據(jù)一致。清除是異步的(直接清零),不管時鐘輸入、置數(shù)輸入、使能輸入為何電平,清除輸入端的低電平把所有四個觸發(fā)器的輸出直接置為低電平。超前進(jìn)位電路無須另加門,即可級聯(lián)出n位同步應(yīng)用的計數(shù)器。它是借助于兩個計數(shù)使能輸入和一個動態(tài)進(jìn)位輸出來實現(xiàn)的。兩個計數(shù)使能輸入(ENP和ENT)計數(shù)時必須是高電平,且輸入ENT必須正反饋,以便使能動態(tài)進(jìn)位輸出。因而被使能的動態(tài)進(jìn)位輸出將產(chǎn)生一個高電平輸出脈沖,其寬度近似等于QA輸出高電平。此高電平溢出進(jìn)位脈沖可用來使能其后的各個串聯(lián)級。使能ENP和ENT輸入的跳變不受時鐘輸入的影響。電路有全獨(dú)立的時鐘電路。改變工作模式的控制輸入(使能ENP、ENT或清零)縱使發(fā)生變化,直到時鐘發(fā)生為止,都沒有什么影響。計數(shù)器的功能(不管使能、不使能、置數(shù)或計數(shù))完全由穩(wěn)態(tài)建立時間和保持時間所要求的條件來決定。
管腳說明: CLR:清零復(fù)位端
當(dāng)輸入為低電平時有效
CLK:時鐘信號接收端
A~D:讀入
QA~QD:輸出
ENT、ENP置一時芯片正常工作
LOAD:置數(shù)端
RCO:信號輸出端
GND:接地
Vcc:接高
工作方式:
3.1.2 7段LED數(shù)碼管
3.1.3 32.768KHZ晶振
32.768KHZ是一個標(biāo)準(zhǔn)的頻率,晶振頻率的應(yīng)用主要有以下幾個方面的參數(shù):尺寸、負(fù)載電容、頻率偏差、應(yīng)用范圍。按尺寸外形來分主要分為插件和貼片的;插件的主要有2*
6、3*
8、49s 等,貼片的就有很多種了,跟據(jù)各公司的設(shè)計可的型號有很多,例如:日本KDS晶振就有49SMD、DST310S、SM—14J、DST520、DST410S等。
3.1.4 CD4060分頻器
CD4060由一振蕩器和14級二進(jìn)制串行計數(shù)器位組成,振蕩器的結(jié)構(gòu)可以是RC或晶振電路,CR為高電平時,計數(shù)器清零且振蕩器使用無效。所有的計數(shù)器位均為主從觸發(fā)器。在CP1(和CP0)的下降沿計數(shù)器以二進(jìn)制進(jìn)行計數(shù)。在時鐘脈沖線上使用斯密特觸發(fā)器對時鐘上升和下降時間無限制 引腳功能:
/CP1:時鐘輸入端
/CP0:時鐘輸出端
/CP0:反相時鐘輸出端
Q4~Q10,Q12~Q14:計數(shù)器輸出端
/Q14:第14級計數(shù)器反相輸出端
VDD:電源正
VSS:電源負(fù)
CR:清零端 3.1.5 74ls48
功能介紹:
74LS48除了有實現(xiàn)7段顯示譯碼器基本功能的輸入(DCBA)和輸出(Ya~Yg)端外,7448還引入了燈測試輸入端(LT)和動態(tài)滅零輸入端(RBI),以及既有輸入功能又有輸出功能的消隱輸入/動態(tài)滅零輸出(BI/RBO)端。
由7448真值表可獲知7448所具有的邏輯功能:
(1)7段譯碼功能(LT=1,RBI=1)
在燈測試輸入端(LT)和動態(tài)滅零輸入端(RBI)都接無效電平時,輸入DCBA經(jīng)7448譯碼,輸出高電平有效的7段字符顯示器的驅(qū)動信號,顯示相應(yīng)字符。除DCBA = 0000外,RBI也可以接低電平,見表1中1~16行。
(2)消隱功能(BI=0)
此時BI/RBO端作為輸入端,該端輸入低電平信號時,表1倒數(shù)第3行,無論LT 和RBI輸入什么電平信號,不管輸入DCBA為什么狀態(tài),輸出全為“0”,7段顯示器熄滅。該功能主要用于多顯示器的動態(tài)顯示。
(3)燈測試功能(LT = 0)
此時BI/RBO端作為輸出端,端輸入低電平信號時,表1最后一行,與 及DCBA輸入無關(guān),輸出全為“1”,顯示器7個字段都點(diǎn)亮。該功能用于7段顯示器測試,判別是否有損壞的字段。
(4)動態(tài)滅零功能(LT=1,RBI=1)
此時BI/RBO端也作為輸出端,LT 端輸入高電平信號,RBI 端輸入低電平信號,若此時DCBA = 0000,表1倒數(shù)第2行,輸出全為“0”,顯示器熄滅,不顯示這個零。DCBA≠0,則對顯示無影響。該功能主要用于多個7段顯示器同時顯示時熄滅高位的零。
3.2 原理設(shè)計
整體電路設(shè)計方案:
3.2.1 振蕩電路設(shè)計
振蕩電路由振蕩器產(chǎn)生的脈沖,振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精度決定了數(shù)字鐘的精確程度,次處有555定時器和晶振兩種產(chǎn)生秒脈沖的方法:555振蕩器做振蕩源一般用于精確度要求不高的場合,由門電路組成的多諧振蕩器的振蕩周期不僅與時間常數(shù)RC有關(guān),而且還取決于門電路的閾值電壓VTH,由于VTH容易受到溫度、電源電壓及干擾的影響,因此頻率穩(wěn)定性較差,只能用于對頻率穩(wěn)定性要求不高的場合??紤]到振蕩頻率的精確度與穩(wěn)定性固采用晶振做為振蕩源來實現(xiàn)振蕩電路,得時鐘脈沖更穩(wěn)定,時間走的更準(zhǔn)37.268KHz晶振 通過cd4060分頻器進(jìn)行十四分頻得到0.5s的脈沖信號,再進(jìn)行一個SN74LS74進(jìn)行二分頻得到所需的秒脈沖信號:
3.2.2 校時電路設(shè)計
根據(jù)電路設(shè)計所知需要在分處和小時處需要校時,分別在分和時個位向十位進(jìn)位處各加一開關(guān),另一端接地并且在與地之間接100pf電容為防止按鍵抖動。
電路設(shè)計如下:
當(dāng)開關(guān)處于自然位置時分十位clk端所接為高電平,當(dāng)開關(guān)按下時則引入一低電平實其clk端有一個下降沿脈沖接入,使其產(chǎn)生了校時功能。
3.2.3顯示電路設(shè)計
顯示電路是用74ls48驅(qū)動七段共陰數(shù)碼管來作為時鐘顯示器。
電路設(shè)計如下:
3.2.4 計時電路設(shè)計
數(shù)字鐘的秒和分位都是從0到60循環(huán)計數(shù)的,所以可以用用異步清零法設(shè)計60進(jìn)制計數(shù)器作為秒和分的計數(shù)器。用異步置數(shù)法設(shè)計小時所用的24進(jìn)制計數(shù)器。秒、分位設(shè)計電路如下:
3.3 程序調(diào)試過程
在板子焊接好以后通上5V電源發(fā)現(xiàn)六Led燈只有三個能完整亮出來,其余的都不亮或是亮的不全,而且秒位不走,校時按鍵不管用。問題很多。
開始調(diào)試:
1、首先調(diào)試的是秒位為何不走,先測晶振石否起振,測量后發(fā)現(xiàn)晶振正常起振,然后從74ls160的clk端用示波器測試一下沒有脈沖信號輸入,則找74ls74的輸出口也無脈沖,以次往前推,最后測量出從74ls74輸入端有正確的脈沖輸入,輸出端卻無脈沖輸出。觀察后沒有連接錯誤,故用萬用表測vcc.end端都有正確的電平接入,再測量兩點(diǎn)間是否有漏焊現(xiàn)象,最后測出一處漏焊點(diǎn)使D端與Q端沒有接通。重新焊接后秒位正常計時。
2、秒位正常計時,但向秒的十位進(jìn)位時總是顯示從8到19,查閱資料可知,在第一個160芯片到第二個160芯片中缺一個非門,充當(dāng)延時作用,使個位計數(shù)到9再來一個脈沖下計數(shù)時再向前進(jìn)位。加上非門進(jìn)位正常了。
3、秒位向分位進(jìn)位正常,但校時按鍵不能用,且分位向十分位不能進(jìn)位,通過觀察焊接對比原理圖與pcb圖后發(fā)現(xiàn),開關(guān)接地的一端弄反了,應(yīng)是開關(guān)與接電容端相側(cè)對著的端接地。這個錯誤導(dǎo)致開關(guān)不能用,亦使分的十位端的74ls160芯片clk段一直接了地,故不能使其正常進(jìn)位。修改過后則可以正常進(jìn)位,且兩開關(guān)都能用了。
4、顯示小時位的第一個數(shù)碼管一直不亮,通過測量發(fā)現(xiàn)led數(shù)碼管沒有燒壞,能正常工作,通過對比PCB圖觀察沒有焊接錯誤,用萬用表測量則發(fā)現(xiàn)驅(qū)動次led的74ls48管沒有正常接地,連接跳線處有一虛焊,重新焊接后恢復(fù)正常。
5、但分向小時不能進(jìn)位,由示波器觀察發(fā)現(xiàn)74ls160芯片clk端無脈沖輸入,但十分位有脈沖輸出,且導(dǎo)線也導(dǎo)通了,就觀察原理圖發(fā)現(xiàn)原理圖一處錯誤,分向時進(jìn)位時是分滿60向前進(jìn)一個脈沖,故分的TC端不用再接到時的CLK端了。找到錯誤后用鑷子將板上的銅線劃段,則正常進(jìn)位了。
6、小時進(jìn)位正常但顯示的不是24進(jìn)制,顯示的是44進(jìn)制,則推測可能是跳線連接錯誤,將顯示小時的十位 74ls160芯片接B端連接成接C端了,故使其顯示44進(jìn)制,通過觀察、對比pcb圖,最后發(fā)現(xiàn)果然如此。修改過后小時為正常24進(jìn)制了。
7、最后一個數(shù)碼管有三段老是不亮,觀察連接沒有錯誤,測量焊接也正常,最后用萬用表測量發(fā)現(xiàn)芯片沒有問題,那三段不亮的數(shù)碼管燒了。
8、調(diào)試好后在后來的觀察中發(fā)現(xiàn)從秒向分進(jìn)位時有時一下進(jìn)兩位,自己找不出來原因。問過老師后,老師說是由于防抖電容所致。嘗試著將電容先劃斷試了一下就沒有那種情況了。但此時校時開關(guān)由于抖動緣故,按一下有時跳3、4個位,校時不穩(wěn)定了。結(jié)論
此數(shù)字鐘相對于機(jī)械鐘來說有低功耗,高精度,數(shù)字化顯示和不易損壞等特點(diǎn)。符合人們?nèi)粘<揖蛹稗k公對鐘表的要求,可以作為家居、辦公等用表。
參考文獻(xiàn)
[1] 佘新平數(shù)學(xué)電子技術(shù)基礎(chǔ) 華中科技大學(xué)出版社 2009年
[2] 許樹玲 丁電寬 王晉 電子技術(shù)及實驗 內(nèi)蒙古大學(xué)出版社2005年
[3] 佘新平數(shù)字電路設(shè)計·仿真·測試 華中大學(xué)出版社 2010年
附圖: 電路原理圖:
第三篇:多功能數(shù)字鐘課程設(shè)計報告(最終版)
電子時鐘課程設(shè)計
電子時鐘課程
設(shè)計報告
班級:文通 0741 姓名:***
學(xué)號:2007905121**
共
頁
第頁
電子時鐘課程設(shè)計 多功能數(shù)字鐘課程設(shè)計報告
一、課程設(shè)計題目: 多功能數(shù)字鐘
二、實驗?zāi)康模?/p>
☆ 了解多功能數(shù)字電子鐘的工作原理?!?學(xué)習(xí)數(shù)字系統(tǒng)設(shè)計中自頂向下的設(shè)計方法?!?加深利用EDA技術(shù)實現(xiàn)數(shù)字系統(tǒng)的理解。
三、課程設(shè)計任務(wù)和基本要求: ☆ 設(shè)計任務(wù)
采用中規(guī)模集成電路設(shè)計一臺可以顯示時、分、秒的數(shù)字鐘。☆ 基本要求
1、能夠正確的連線及下載。
2、能夠完成以秒為最小及時單位的時鐘設(shè)計。
3、設(shè)計完成后的時鐘能夠正常調(diào)整時、分、秒。
三、課程設(shè)計題目分析: ☆ 設(shè)計要點(diǎn)
●設(shè)計一個精確的秒脈沖信號產(chǎn)生電路 ●設(shè)計60進(jìn)制、24進(jìn)制計數(shù)器 ●設(shè)計譯碼顯示電路 ●設(shè)計整點(diǎn)報時電路 ☆ 工作原理
數(shù)字電子鐘由信號發(fā)生器、“時、分、秒”計數(shù)器、譯碼器及顯示器、校時電路、整點(diǎn)報時電路等組成。秒信號產(chǎn)生器是整個系統(tǒng)的時基信號,它直接決定計時系統(tǒng)的精度,一般用555構(gòu)成的振蕩器加分頻器來實現(xiàn)。將標(biāo)準(zhǔn)秒脈沖信號送入“秒計數(shù)器”,該計數(shù)器采用60進(jìn)制計數(shù)器,每累計60秒發(fā)出一個“分脈沖”信號,該信號將作為“分計數(shù)器”的時鐘脈沖。“分計數(shù)器”也采用60進(jìn)制計數(shù)器,每累計60分,發(fā)出一個“時脈沖”信號,該信號將被送到“時計數(shù)器”?!皶r計數(shù)器”采用24進(jìn)制計數(shù)器,可以實現(xiàn)一天24h的累計。譯碼顯示電路將“時、分、秒”計數(shù)器的輸出狀態(tài)經(jīng)七段顯示譯碼器譯碼,通過六位LED顯示器顯示出來。整點(diǎn)報時電路是根據(jù)計時系統(tǒng)的輸出狀態(tài)產(chǎn)生一個脈沖信號,然后去觸發(fā)音頻發(fā)生器實現(xiàn)報時。校時電路是來對“時、分、秒”顯示數(shù)字進(jìn)行校對調(diào)整。其數(shù)字電子鐘系統(tǒng)框圖如下:
四、課程設(shè)計的電路設(shè)計部分:
共
頁
第頁
電子時鐘課程設(shè)計
☆
秒、分、時計時器電路設(shè)計
秒、分計數(shù)器為60進(jìn)制計數(shù)器,小時計數(shù)器為24進(jìn)制計數(shù)器。實現(xiàn)這兩種模數(shù)的計數(shù)器采用中規(guī)模集成計數(shù)器74LS90構(gòu)成。
●
60進(jìn)制計數(shù)器
由74162構(gòu)成的60進(jìn)制計數(shù)器,將一片74162設(shè)計成10進(jìn)制加法計數(shù)器,另一片設(shè)置6進(jìn)制加法計數(shù)器。兩片74LS90按反饋清零法串接而成。秒計數(shù)器的十位和個位,輸出脈沖除用作自身清零外,同時還作為分計數(shù)器的輸入脈沖CP1。下圖電路即可作為秒計數(shù)器,也可作為分計數(shù)器。
進(jìn) 制 計 數(shù) 器
●
24進(jìn)制計數(shù)器
由74162構(gòu)成的二十進(jìn)制計數(shù)器,將一片74162設(shè)計成4進(jìn)制加法計數(shù)器,另一片設(shè)置2進(jìn)制加法計數(shù)器。既個位計數(shù)狀態(tài)為Qd Qc Qb Qa = 0100十位計數(shù)狀態(tài)為Qd Qc Qb Qa = 0010時,要求計數(shù)器歸零。通過把個位Qc、十位Qb相與后的信號送到個位、十位計數(shù)器的清零端,使計數(shù)器清零,從而構(gòu)成24進(jìn)制計數(shù)器。電路圖如下:
共
頁
第頁
電子時鐘課程設(shè)計 進(jìn) 制 計 數(shù) 器
☆
譯碼顯示電路
譯碼電路的功能是將秒、分、時計數(shù)器的輸出代碼進(jìn)行翻譯,變成相應(yīng)的數(shù)字。用與驅(qū)動LED七段數(shù)碼管的譯碼器常用的有7448。7448是BCD-7段譯碼器/驅(qū)動器,輸出低電平有效,專用于驅(qū)動LED七段共陰極顯示數(shù)碼管。若將秒、分、時計數(shù)器的每位輸出分別送到相應(yīng)七段譯嗎管的輸入端,便可以進(jìn)行不同數(shù)字的顯示。在譯碼管輸出與數(shù)碼管之間串聯(lián)電阻R作為限流電阻。
譯碼顯示電路 共
頁
第頁
電子時鐘課程設(shè)計
☆
整點(diǎn)報時電路
仿廣播電臺整點(diǎn)報時電路設(shè)計,每當(dāng)數(shù)字鐘計時快到整點(diǎn)時發(fā)出響聲,四低一高并且以最后一聲高音結(jié)束的時刻為整點(diǎn)時刻。
整點(diǎn)報時電路
☆計時功能模塊:
它是由兩個60進(jìn)制計數(shù)器和一個24進(jìn)制計數(shù)器連接成的。構(gòu)成了時鐘正常的計時功能。當(dāng)?shù)竭_(dá)59秒鐘的時候,當(dāng)再來一個CP脈沖的時候,將自動進(jìn)位,使分針上加一。分針也是一樣。當(dāng)時針到達(dá)23點(diǎn)59分59秒的時候,當(dāng)再次來一個CP脈沖時候,又轉(zhuǎn)化為0點(diǎn)0分0秒。
計時與整點(diǎn)報時模塊 共
頁
第頁
電子時鐘課程設(shè)計
☆數(shù)據(jù)選擇器模塊:
數(shù)據(jù)選擇器
共
頁
第頁
電子時鐘課程設(shè)計
☆總電路圖
五、課程設(shè)計心得體會: 這次數(shù)字鐘的設(shè)計與制作,我做的很辛苦。對于以前的數(shù)字電子技術(shù)軟件操作淡忘了,所以開始的時候需要對系統(tǒng)軟件進(jìn)一步熟悉,通過自己慢慢深入學(xué)習(xí),讓我對于操作軟件有了大概的思路。在實際操作中,了解了設(shè)計電路的程序,同時也讓我了解了關(guān)于數(shù)字鐘的原理與設(shè)計理念??粗鴱?fù)雜的程序被我設(shè)計完成,倍感欣慰。當(dāng)設(shè)計電路完成還要實際接線。我在做這項工作的時候,犯了這樣一個錯誤,連線時找不到相應(yīng)的標(biāo)示符號,其實老師已將標(biāo)示的符號寫在黑板上了,我卻在疑惑。這其實也考驗了實驗者的細(xì)心與動手能力,遇到自己不懂的除了先發(fā)動大腦細(xì)胞想想之外,詢問老師同學(xué)的卻也受益匪淺,通過討論,綜合幾個人的見解,能發(fā)現(xiàn)更多的知識。
共
頁
第頁
電子時鐘課程設(shè)計
通過這次學(xué)習(xí),讓我的視野從課本之外延伸。多看書是好的。可是要想學(xué)好一門課光看書是不行的,還要在課外進(jìn)行多多的實際操作。對于以前遺忘的知識,要抽時間復(fù)習(xí),這樣才會有更深刻的體會。
共
頁第頁
第四篇:EDA課程設(shè)計——多功能數(shù)字鐘
哈爾濱工業(yè)大學(xué)(威海)電子學(xué)課程設(shè)計報告
帶有整點(diǎn)報時的數(shù)字鐘設(shè)計與制作
姓名: 蔣棟棟 班級: 0802503 學(xué)號: 080250331 指導(dǎo)教師:
井巖
目錄
一、課程設(shè)計的性質(zhì)、目的和任務(wù)????????????3
二、課程設(shè)計基本要求?????????????????3
三、設(shè)計課題要求???????????????????3
四、課程設(shè)計所需要儀器????????????????4
五、設(shè)計步驟?????????????????????4
1、整體設(shè)計框圖???????????????????4
2、各個模塊的設(shè)計與仿真???????????????4
2.1分頻模塊???????????????????????4
2.2計數(shù)器模塊??????????????????????6
2.3控制模塊??????????????????????10
2.4數(shù)碼管分配?????????????????????13
2.5顯示模塊??????????????????????14
2.6報時模塊??????????????????????16
六、調(diào)試中遇到的問題及解決的方法???????????18
七、心得體會?????????????????????18
一、課程設(shè)計的性質(zhì)、目的和任務(wù)
創(chuàng)新精神和實踐能力二者之中,實踐能力是基礎(chǔ)和根本。這是由于創(chuàng)新基于實踐、源于實踐,實踐出真知,實踐檢驗真理。實踐活動是創(chuàng)新的源泉,也是人才成長的必由之路。
通過課程設(shè)計的鍛煉,要求學(xué)生掌握電路的一般設(shè)計方法,具備初步的獨(dú)立設(shè)計能力,提高綜合運(yùn)用所學(xué)的理論知識獨(dú)立分析和解決問題的能力,培養(yǎng)學(xué)生的創(chuàng)新精神。
二、課程設(shè)計基本要求
掌握現(xiàn)代大規(guī)模集成數(shù)字邏輯電路的應(yīng)用設(shè)計方法,進(jìn)一步掌握電子儀器的正確使用方法,以及掌握利用計算機(jī)進(jìn)行電子設(shè)計自動化(EDA)的基本方法。
三、設(shè)計課題要求
(1)構(gòu)造一個24小時制的數(shù)字鐘。要求能顯示時、分、秒。(2)要求時、分、秒能各自獨(dú)立的進(jìn)行調(diào)整。
(3)能利用喇叭作整點(diǎn)報時。從59分50秒時開始報時,每隔一秒報時一秒,到達(dá)00分00秒時,整點(diǎn)報時。整點(diǎn)報時聲的頻率應(yīng)與其它的報時聲頻有明顯區(qū)別。
#設(shè)計提示(僅供參考):(1)對頻率輸入的考慮
數(shù)字鐘內(nèi)所需的時鐘頻率有:基準(zhǔn)時鐘應(yīng)為周期一秒的標(biāo)準(zhǔn)信號。報時頻率可選用1KHz和2KHz左右(兩種頻率相差八度音,即頻率相差一倍)。另外,為防止按鍵反跳、抖動,微動開關(guān)輸入應(yīng)采用寄存器輸入形式,其時鐘應(yīng)為幾十赫茲。
(2)計時部分計數(shù)器設(shè)計的考慮 分、秒計數(shù)器均為模60計數(shù)器。
小時計數(shù)為模24計數(shù)器,同理可建一個24進(jìn)制計數(shù)器的模塊。(3)校時設(shè)計的考慮
數(shù)字鐘校準(zhǔn)有3個控制鍵:時校準(zhǔn)、分校準(zhǔn)和秒校準(zhǔn)。
微動開關(guān)不工作,計數(shù)器正常工作。按下微動開關(guān)后,計數(shù)器以8Hz頻率連續(xù)計數(shù)(若只按一下,則計數(shù)器增加一位),可調(diào)用元件庫中的邏輯門建一個控制按鍵的模塊,即建立開關(guān)去抖動電路(見書70頁)。
(4)報時設(shè)計的考慮
可以將高頻時鐘分頻得到約2KHz和1KHz的音頻,作為數(shù)字鐘的報時頻率。當(dāng)電子鐘顯示XX:59:50時,數(shù)字鐘開始報時“DO“,持續(xù)一秒,而且每隔一秒報一下,直至顯示XX:00:00時報“DI”,持續(xù)一秒后停止。最后輸出至喇叭。應(yīng)調(diào)用元件庫中的邏輯門建一個控制報時的模塊。
(5)建一個七段譯碼的模塊
因在系統(tǒng)可編程器件實驗箱上的數(shù)碼管沒有經(jīng)過譯碼,故要用AHDL語言寫一個七段譯碼的模塊,且應(yīng)考慮數(shù)碼管為共陽極。數(shù)碼管上的點(diǎn)(D2、D4、D6)應(yīng)置Vcc。
四、課程設(shè)計所需要儀器
1、計算機(jī)一臺
2、quartusⅡ軟件
3、FPGA開發(fā)板
五、設(shè)計步驟
1、模塊介紹
(1)分頻模塊:產(chǎn)生1Hz、1KHz、2KHz頻率(2)計數(shù)器模塊:生成60進(jìn)制、24進(jìn)制計數(shù)器(3)控制模塊:按鍵控制、按鍵消抖
(4)顯示模塊:7段數(shù)碼管顯示器,分別顯示小時、分鐘、秒(5)報時模塊:進(jìn)行整點(diǎn)報時
2、各個模塊的設(shè)計與仿真
2.1分頻模塊
CLK晶振頻率50MHZ,分成2KHZ,1KHZ,1HZ的信號?;鶞?zhǔn)1HZ信號作為時鐘計時的秒計數(shù)時鐘信號;分頻的1KHZ,2KHZ信號用于報時電路的不同聲訊。
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity fre is port(clk ,sel: in std_logic;clk1hz,clk1khz,clk2khz:out std_logic);end fre;architecture beh of fre is signal data1khz,data2khz,data1hz : std_logic := '0';begin clk1hz <= data1hz;clk1khz <= data1khz;clk2khz <= data2khz;clk1khz_pro : process(clk)--產(chǎn)生1khz信號 variable cnt : integer range 0 to 24999;begin if clk'event and clk='1' then if cnt = 24999 then cnt := 0;data1khz <= not data1khz;else cnt := cnt + 1;end if;end if;end process clk1khz_pro;clk2khz_pro : process(clk)--variable cnt : integer range 0 to 12499;begin if clk'event and clk='1' then if cnt = 12499 then cnt := 0;data2khz <= not data2khz;else cnt := cnt + 1;end if;end if;end process clk2khz_pro;clk1hz_pro : process(data1khz)--variable cnt : integer range 0 to 499;begin if data1khz'event and data1khz='1' then if sel='0' then cnt:=0;else if cnt = 499 then cnt := 0;data1hz <= not data1hz;else cnt := cnt + 1;end if;end if;end if;end process clk1hz_pro;end beh;
輸入模塊電路圖:
產(chǎn)生2khz信號 產(chǎn)生1hz 信號 5 freclkclk1hzclk2khzinst selclk1khz2.2計數(shù)器模塊
由秒計數(shù)器,分計數(shù)器,時計數(shù)器組成了最基本的數(shù)字鐘計時電路,兩個六十進(jìn)制計數(shù)器與二十四進(jìn)制計數(shù)器組合構(gòu)成。
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;
entity shuzizhong is port(clk_change : in std_logic;s_en,m_en,h_en:in std_logic;sel:in std_logic;secout,minout,hourout :out std_logic;sl,sh,ml,mh,hl,hh:out std_logic_vector(3 downto 0);a:out std_logic_vector(15downto 0));end shuzizhong;architecture behav of shuzizhong is
signal low_rega,high_rega,low_regb,high_regb,low_regc,high_regc :std_logic_vector(3 downto 0):=“0000”;signal sout,mout,hout :std_logic :='0';begin--秒的60進(jìn)制進(jìn)制 counter_sec_l : process(clk_change,s_en)begin
sl<=low_rega;sh<=high_rega;ml<=low_regb;mh<=high_regb;hl<=low_regc;hh<=high_regc;6 if clk_change'event and clk_change='1' then if s_en='1' then if low_rega=“1001” then low_rega <= “0000”;else low_rega <= low_rega+'1';end if;end if;end if;end process counter_sec_l;counter_sec_h : process(clk_change,s_en,low_rega)begin if clk_change'event and clk_change='1' then if s_en='1' then if low_rega=“1001” then if high_rega =“0101”then high_rega <= “0000”;else high_rega <= high_rega+'1';end if;end if;end if;end if;end process counter_sec_h;sout <= '1' when low_rega=“1001” and high_rega=“0101” else '0';
----分鐘的60進(jìn)制設(shè)置 counter_min_l : process(clk_change,m_en)begin if clk_change'event and clk_change='1' then if m_en='1' then if sout='1'or sel='0' then if low_regb=“1001” then low_regb <= “0000”;else low_regb <= low_regb+'1';end if;end if;end if;end if;end process counter_min_l;counter_min_h : process(clk_change,m_en,low_regb)begin if clk_change'event and clk_change='1' then 7 if sout='1'or sel='0' then if m_en='1' then if low_regb=“1001” then
if high_regb =“0101”then
high_regb <= “0000”;else high_regb <= high_regb+'1';end if;end if;end if;end if;end if;end process counter_min_h;mout <= '1' when low_regb=“1001” and high_regb=“0101”and sout='1' else '0';--小時的24進(jìn)制設(shè)置 counter_hour_l : process(clk_change,h_en)begin if clk_change'event and clk_change='1' then if h_en='1' then if mout='1'or sel='0' then if low_regc=“1001”or hout='1' then low_regc <= “0000”;else low_regc <= low_regc+'1';end if;end if;end if;end if;end process counter_hour_l;counter_hour_h : process(clk_change,h_en,hout)begin if clk_change'event and clk_change='1' then if mout='1'or sel='0' then if h_en='1' then if hout='1' then high_regc<=“0000”;else if low_regc=“1001” then high_regc <= high_regc+'1';end if;end if;end if;8 end if;end if;end process counter_hour_h;hout <= '1' when low_regc=“0011” and high_regc=“0010” else '0';secout<=sout;minout<=mout;hourout<=hout;a<=high_regb&low_regb&high_rega&low_rega;end behav;
輸入模塊電路圖:
shuzizhongclk_changes_enm_enh_enselsecoutminouthouroutsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]a[15..0]inst
2.3控制模塊
分五個狀態(tài)0狀態(tài)正常計時,按下按鍵進(jìn)入下一狀態(tài)開始調(diào)時模式1,按下按鍵進(jìn)入調(diào)秒模式2,按下按鍵進(jìn)入調(diào)分模式3,按下按鍵進(jìn)入調(diào)小時模式4.按下按鍵恢復(fù)正常計時模式。
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key_press is port(set ,mode: in std_logic;clk1khz,clk1hz: in std_logic;secout,minout: in std_logic;clk_change,clk2hz_en:out std_logic;sel,s_ce,m_ce,h_ce:out std_logic;s_en,m_en,h_en:out std_logic);end key_press;architecture beh of key_press is 9 signal key1,key2:std_logic;signal sce_reg, mce_reg ,hce_reg:std_logic;signal ssl,ssen,mmen,hhen:std_logic;signal con : integer range 0 to 4 :=0;--按鍵按下(延時)begin
key_press2 : process(set,clk1khz)variable cnt :integer range 0 to 999;begin if set='0' then if clk1khz'event and clk1khz='1'then if cnt=50 and set='0' then cnt :=cnt+1;key2 <= '1';else cnt:=cnt+1;key2 <= '0';end if;end if;else cnt:=0;key2<='0';end if;end process key_press2;key_press1 : process(mode,clk1khz)variable cnt :integer range 0 to 999;begin if mode='0' then if clk1khz'event and clk1khz='1'then if cnt=50 and mode='0' then cnt :=cnt+1;key1 <= '1';else cnt:=cnt+1;key1 <= '0';end if;end if;else cnt:=0;key1<='0';end if;end process key_press1;count : process(key1,key2)begin if key1'event and key1='1' then if con=4 then con<=0;else con<=con+1;end if;end if;10 end process count;con_pro : process(con)begin case con is when 0 => ssl<='1';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='0';when 1 => ssl<='0';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='1';when 2 => ssl<='0';sce_reg <= '1';ssen <='1';mce_reg <= '0';mmen <='0';hce_reg <= '0';hhen <='0';clk2hz_en <='1';when 3 => ssl<='0';sce_reg <= '0';ssen <='0';mce_reg <= '1';mmen <='1';hce_reg <= '0';hhen <='0';clk2hz_en <='1';when 4 => ssl<='0';sce_reg <= '0';ssen <='0';mce_reg <= '0';mmen <='0';hce_reg <= '1';hhen <='1';clk2hz_en <='1';when others => ssl<='0';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='0';end case;end process con_pro;sel_pro : process(ssl)begin case ssl is when '0'=> s_ce<=sce_reg;m_ce<=mce_reg;h_ce<=hce_reg;clk_change<=key2;when '1'=> s_ce<=ssen;11 m_ce<=mmen;h_ce<=hhen;clk_change<=clk1hz;when others=> s_ce<=ssen;m_ce<=secout;h_ce<=minout;clk_change<=clk1hz;end case;end process sel_pro;sel<=ssl;s_en<=ssen;m_en<=mmen;h_en<=hhen;end beh;
輸入模塊電路圖: key_presssetclk_changemodeclk2hz_enclk1khzselclk1hzs_cesecoutm_ceminouth_ces_enm_enh_eninst
2.4數(shù)碼管分配
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity display is port(datain : in std_logic_vector(3 downto 0);dataout : out std_logic_vector(7 downto 0));end display;architecture duan of display is begin process(datain)begin case datain is 12 when “0000” => dataout <=“11000000”;--dp,g,f,e,d,c,b,a when “0001” => dataout <=“11111001”;when “0010” => dataout <=“10100100”;when “0011” => dataout <=“10110000”;when “0100” => dataout <=“10011001”;when “0101” => dataout <=“10010010”;when “0110” => dataout <=“10000010”;when “0111” => dataout <=“11111000”;when “1000” => dataout <=“10000000”;when “1001” => dataout <=“10010000”;when “1010” => dataout <=“10111111”;when “1011” => dataout <=“10000011”;when “1100” => dataout <=“10100111”;when “1101” => dataout <=“10100001”;when “1110” => dataout <=“10000110”;when “1111” => dataout <=“10001110”;when others => null;end case;end process;end;
輸入模塊電路圖:
displaydatain[3..0]dataout[7..0]inst
2.5顯示模塊
使用七段數(shù)碼管顯示小時、分鐘與秒
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity scan is port(clk1khz : in std_logic;sl,sh,ml,mh,hl,hh : in std_logic_vector(3 downto 0);clk2hz_en : in std_logic;s_ce,m_ce,h_ce : in std_logic;en_out : out std_logic_vector(7 downto 0);13 dataout : out std_logic_vector(3 downto 0));end scan;architecture beh of scan is signal cnt : integer range 0 to 7;signal en : std_logic_vector(7 downto 0);signal clk2hz : std_logic;signal h_ce_reg,m_ce_reg,s_ce_reg : std_logic;begin h_ce_reg <= not h_ce;m_ce_reg <= not m_ce;s_ce_reg <= not s_ce;cnt_pro : process(clk1khz)begin if clk1khz'event and clk1khz='1' then if cnt = 7 then cnt <= 0;else cnt <= cnt + 1;end if;end if;end process cnt_pro;clk2hz_pro :process(clk1khz)variable c : integer range 0 to 499 := 0;begin if clk1khz'event and clk1khz='1' then if clk2hz_en ='1' then if c =499 then c := 0;clk2hz <= not clk2hz;else c := c + 1;end if;else clk2hz <= '0';end if;end if;end process clk2hz_pro;scan_pro : process(cnt,sl,sh,ml,mh,hl,hh)begin case cnt is when 0 => dataout <= sl;en <= “11111110”;when 1 => dataout <= sh;en <= “11111101”;when 2 => dataout <= ml;en <= “11110111”;when 3 => dataout <= mh;en <= “11101111”;when 4 => dataout <= hl;en <= “10111111”;14 when 5 => dataout <= hh;en <= “01111111”;when 6 => dataout <= “1010”;en <= “11111011”;when 7 => dataout <= “1010”;en <= “11011111”;when others => null;end case;end process scan_pro;
en_out <= en or((clk2hz & clk2hz)or(h_ce_reg & h_ce_reg))& clk2hz &((clk2hz & clk2hz)or(m_ce_reg & m_ce_reg))& clk2hz &((clk2hz & clk2hz)or(s_ce_reg & s_ce_reg));end beh;
輸入模塊電路圖:
scanclk1khzen_out[7..0]sl[3..0]dataout[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]clk2hz_ens_cem_ceh_ceinst
2.6報時模塊
利用蜂鳴器進(jìn)行整點(diǎn)報時
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;--整點(diǎn)報時 entity baoshi is port(clk1khz,clk2khz : in std_logic;a:in std_logic_vector(15 downto 0);sel:in std_logic;bell:out std_logic);end baoshi;architecture zhong of baoshi is signal c1,ring:std_logic;begin ring_bell :process(clk1khz,clk2khz)15 begin case a is when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk2khz;when “***0” => c1<=clk2khz;when others => c1<='0';end case;end process ring_bell;
bs: process(c1)begin if sel='1' then if c1='1' then ring<='0';else ring<='1';end if;end if;end process bs;bell<=ring;
end zhong;
輸入模塊電路圖:
baoshiclk1khzbellclk2khza[15..0]selinst
整體模塊電路圖
displayshuzizhongs_enm_enh_enselclk_changes_enm_enh_enselsecoutminouthouroutsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]setmodefreclkINPUTVCCINPUTVCCdata[3..0]datain[3..0]secoutminoutinst1scanclk1khzclk1khzsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]a[15..0]dataout[7..0]OUTPUTdataout[7..0]en_out[7..0]dataout[3..0]OUTPUTen_out[7..0]data[3..0]key_presssetclk1khzmodeclk1khzclk1hzsecoutminoutclk_changeclk2hz_ensels_cem_ceh_ces_enm_enh_eninst6s_enm_enh_enselinst7a[15..0]INPUTVCChh[3..0]clk2hz_ens_cem_ceh_ceinst4baoshiclk1khzclk2khza[15..0]selclk1khzbellclk2khza[15..0]sel++selclkclk1hzselclk1khzclk2khzinst2clk1khzclk2khzsecoutminoutOUTPUTbellinst
六、調(diào)試中遇到的問題及解決的方法:
1、編程時,經(jīng)常導(dǎo)致語法錯誤,如:“;”沒有寫上,變量類型沒有預(yù)先標(biāo)明,前后變量名字由于缺少一個或多一個字母而導(dǎo)致出錯。解決辦法:對照錯誤,認(rèn)真檢查程序,看哪個地方的標(biāo)點(diǎn),變量沒有寫上或標(biāo)明。
2、進(jìn)行編譯或波形仿真時,經(jīng)常得到的不是預(yù)想中的結(jié)果。
解決辦法:將需要編譯或進(jìn)行仿真的實體文件置頂,經(jīng)檢錯無誤后,進(jìn)行波形仿真,在仿真之前需要合理設(shè)置仿真結(jié)束時間和信號周期。
3、在控制時間的顯示的時候,由于變量太多多發(fā)現(xiàn)不能完全的控制住變量,導(dǎo)致顯示的時候出現(xiàn)了亂碼,數(shù)碼管顯示不正常 解決辦法:減少變量,仔細(xì)推敲,合理命名。
七、心得體會
一個多星期的課程設(shè)計讓我受益匪淺,也讓我真正明白理論與實踐相結(jié)合的重要性。通過具體實踐才能讓自己清楚哪些知識已經(jīng)掌握,哪些知識仍需鞏固加強(qiáng)。與此同時,我也對EDA以及VHDL語言有了進(jìn)一步了解,對于其結(jié)構(gòu)、語法、功能等認(rèn)識不少。當(dāng)然,我目前所做的還僅僅只是一些基本操作,要想真正將其融會貫通還需要今后更多的學(xué)習(xí)與實踐。雖然只是一個小設(shè)計,我卻也從中學(xué)到了不少設(shè)計流程和一些相關(guān)問題。設(shè)計是一個十分嚴(yán)謹(jǐn)?shù)倪^程,容不得隨意和馬虎。要想快速而高效地完成一項設(shè)計,必須先有一個清晰明了的設(shè)計思路,設(shè)想好一個整體框架,然后在此基礎(chǔ)上,逐漸將各個部分功能進(jìn)行完善。在設(shè)計的過程中,也曾遇到不少困難,但正所謂堅持就是勝利,要想取得成功,必須要有努力付出,這樣所取得的結(jié)果才更有意義。
第五篇:FPGA課程設(shè)計多功能數(shù)字鐘講解
多功能數(shù)字鐘
開課學(xué)期:2014—2015 學(xué)年第二學(xué)期 課程名稱: FPGA課程設(shè)計
學(xué) 院: 信息科學(xué)與工程學(xué)院
專 業(yè): 集成電路設(shè)計與集成系統(tǒng)
班 級: 學(xué) 號: 姓 名:
任課教師:
2015 年 7 月 21 日
說 明
一、論文書寫要求與說明
1.嚴(yán)格按照模板進(jìn)行書寫。自己可以自行修改標(biāo)題的題目 2.關(guān)于字體:
a)題目:三號黑體加粗。
b)正文:小四號宋體,行距為1.25倍。
3.嚴(yán)禁抄襲和雷同,一經(jīng)發(fā)現(xiàn),成績即判定為不及格??!
二、設(shè)計提交說明
1.設(shè)計需要提交“電子稿”和“打印稿”;
2.“打印稿”包括封面、說明(即本頁內(nèi)容)、設(shè)計內(nèi)容三部分;訂書機(jī)左邊裝訂。
3.“電子稿”上交:文件名為 “FPGA課程設(shè)計報告-班級-學(xué)號-姓名.doc”,所有報告發(fā)送給班長,由班長統(tǒng)一打包后統(tǒng)一發(fā)送到付小倩老師。
4.“打印稿”由班長收齊后交到:12教305辦公室; 5.上交截止日期:2015年7月31日17:00之前。
第一章
緒論....................................................................................................................3 關(guān)鍵詞:FPGA,數(shù)字鐘....................................................................................................3 第二章 FPGA的相關(guān)介紹...............................................................................................4 2.1 FPGA概述........................................................................................................4 2.2 FPGA特點(diǎn)...........................................................................................................4 2.3 FPGA設(shè)計注意...................................................................................................5 第三章 Quartus II與Verilog HDL相關(guān)介紹..................................................................7 3.1 Quartus II..............................................................................................................7 3.2 Verilog HDL......................................................................................................7 第四章 設(shè)計方案..............................................................................................................8 4.1數(shù)字鐘的工作原理..............................................................................................8 4.2 按鍵消抖.............................................................................................................8 4.3時鐘復(fù)位..............................................................................................................8 4.4時鐘校時..............................................................................................................8 4.5數(shù)碼管顯示模塊。..............................................................................................8 第五章 方案實現(xiàn)與驗證..................................................................................................9 5.1產(chǎn)生秒脈沖..........................................................................................................9 5.2秒個位進(jìn)位..........................................................................................................9 5.3按鍵消抖..............................................................................................................9 5.4復(fù)位按鍵設(shè)置....................................................................................................10 5.5 數(shù)碼管顯示。...................................................................................................10 5.6 RTL結(jié)構(gòu)總圖....................................................................................................11 第六章 實驗總結(jié)............................................................................................................14 第七章 Verilog HDL源代碼附錄..................................................................................15
第一章
緒論
現(xiàn)代社會的標(biāo)志之一就是信息產(chǎn)品的廣泛使用,而且是產(chǎn)品的性能越來越強(qiáng),復(fù)雜程度越來越高,更新步伐越來越快。支撐信息電子產(chǎn)品高速發(fā)展的基礎(chǔ)就是微電子制造工藝水平的提高和電子產(chǎn)品設(shè)計開發(fā)技術(shù)的發(fā)展。前者以微細(xì)加工技術(shù)為代表,而后者的代表就是電子設(shè)計自動化(electronic design automatic, EDA)技術(shù)。
本設(shè)計采用的VHDL是一種全方位的硬件描述語言,具有極強(qiáng)的描述能力,能支持系統(tǒng)行為級、寄存器傳輸級和邏輯門級這三個不同層次的設(shè)計;支持結(jié)構(gòu)、數(shù)據(jù)流、行為三種描述形式的混合描述,覆蓋面廣,抽象能力強(qiáng),因此在實際應(yīng)用中越來越廣泛。ASIC是專用的系統(tǒng)集成電路,是一種帶有邏輯處理的加速處理器;而FPGA是特殊的ASIC芯片,與其它的ASIC芯片相比,它具有設(shè)計開發(fā)周期短、設(shè)計制造成本低、開發(fā)工具先進(jìn)、標(biāo)準(zhǔn)產(chǎn)品無需測試、質(zhì)量穩(wěn)定以及可實時在線檢測等優(yōu)點(diǎn)。
在控制系統(tǒng)中,鍵盤是常用的人機(jī)交換接口,當(dāng)所設(shè)置的功能鍵或數(shù)字鍵按下的時候,系統(tǒng)應(yīng)該完成該鍵所對應(yīng)的功能。因此,按鍵信息輸入是與軟件結(jié)構(gòu)密切相關(guān)的過程。根據(jù)鍵盤結(jié)構(gòu)的不同,采用不同的編碼方法,但無論有無編碼以及采用什么樣的編碼,最后都要轉(zhuǎn)換成為相應(yīng)的鍵值,以實現(xiàn)按鍵功能程序的轉(zhuǎn)移。[1] 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴(kuò)展了鐘表原先的報時功能。諸如定時自動報警、定時啟閉電路、定時開關(guān)烘箱、通斷動力設(shè)備,甚至各種定時電氣的自動啟用等,所有這些都是以鐘表數(shù)字化為基礎(chǔ)的。因此研究數(shù)字鐘以及擴(kuò)大其應(yīng)用有著非?,F(xiàn)實的意義。
關(guān)鍵詞:FPGA,數(shù)字鐘
第二章 FPGA的相關(guān)介紹
FPGA(Field-Programmable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。
2.1 FPGA概述
系統(tǒng)設(shè)計師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計者而改變,所以FPGA可以完成所需要的邏輯功能。
FPGA一般由3種可編程電路和一個用于存放編程數(shù)據(jù)的靜態(tài)存儲器SRAM組成。這3種可編程電路是:可編程邏輯模塊(CLB--Configurable Logic Block)、輸入/輸出模塊(IOB--I/O Block)和互連資源(IR—Interconnect Resource)??删幊踢壿嬆KCLB是實現(xiàn)邏輯功能的基本單元,它們通常規(guī)則的排列成一個陣列,散布于整個芯片;可編程輸入/輸出模塊(IOB)主要完成芯片上的邏輯與外部封裝腳的接口,它通常排列在芯片的四周;可編程互連資源包括各種長度的連接線段和一些可編程連接開關(guān),它們將各個CLB之間或CLB、IOB之間以及IOB之間連接起來,構(gòu)成特定功能的電路。
FPGA一般來說比ASIC(專用集成芯片)的速度要慢,無法完成復(fù)雜的設(shè)計,而且消耗更多的電能。但是他們也有很多的優(yōu)點(diǎn)比如可以快速成品,可以被修改來改正程序中的錯誤和更便宜的造價。廠商也可能會提供便宜的但是編輯能力差的FPGA。因為這些芯片有比較差的可編輯能力,所以這些設(shè)計的開發(fā)是在普通的FPGA上完成的,然后將設(shè)計轉(zhuǎn)移到一個類似于ASIC的芯片上。另外一種方法是用CPLD(復(fù)雜可編程邏輯器件備)。
2.2 FPGA特點(diǎn)
FPGA的基本特點(diǎn)主要有:
1)采用FPGA設(shè)計ASIC電路,用戶不需要投片生產(chǎn),就能得到合用的芯片。
2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。3)FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳。
4)FPGA是ASIC電路中設(shè)計周期最短、開發(fā)費(fèi)用最低、風(fēng)險最小的器件之一。5)FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容??梢哉f,F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。編程互連資源IR可以將FPGA內(nèi)部的CLB和CLB之間、CLB和IOB之間連接起來,構(gòu)成各種具有復(fù)雜功能的系統(tǒng)。
FPGA是由存放在片內(nèi)RAM中的程序來設(shè)置其工作狀態(tài)的,因此,工作時需要對片內(nèi)的RAM進(jìn)行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。
加電時,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的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時,只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。
FPGA有多種配置模式:并行主模式為一片F(xiàn)PGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片F(xiàn)PGA;串行模式可以采用串行PROM編程FPGA;外設(shè)模式可以將FPGA作為微處理器的外設(shè),由微處理器對其編程。
2.3 FPGA設(shè)計注意
不管你是一名邏輯設(shè)計師、硬件工程師或系統(tǒng)工程師,甚或擁有所有這些頭銜,只要你在任何一種高速和多協(xié)議的復(fù)雜系統(tǒng)中使用了FPGA,你就很可能需要努力解決好器件配置、電源管理、IP集成、信號完整性和其他的一些關(guān)鍵設(shè)計問題。不過,你不必獨(dú)自面對這些挑戰(zhàn),因為在當(dāng)前業(yè)內(nèi)領(lǐng)先的FPGA公司里工作的應(yīng)用工程師每天都會面對這些問題,而且他們已經(jīng)提出了一些將令你的設(shè)計工作變得更輕松的設(shè)計指導(dǎo)原則和解決方案。
本次實驗所采用的FPGA器件是Altera Cyclone V 5CSEMA5F31C6N
FPGA實物圖
FPGA數(shù)碼管介紹,每節(jié)數(shù)碼管低電平點(diǎn)亮高電平熄滅。LED序號如下圖所示:
根據(jù)上圖所示的順序,可以得出顯示的數(shù)組代碼。
4'd0: HEX0=7'b1000000;4'd1: HEX0=7'b1111001;4'd2: HEX0=7'b0100100;4'd3: HEX0=7'b0110000;4'd4: HEX0=7'b0011001;4'd5: HEX0=7'b0010010;4'd6: HEX0=7'b0000010;4'd7: HEX0=7'b1111000;4'd8: HEX0=7'b0000000;4'd9: HEX0=7'b0010000;
//0 低電平點(diǎn)亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9 default: HEX0=7'b1111111;//不符合條件的顯示零
第三章 Quartus II與Verilog HDL相關(guān)介紹
3.1 Quartus II Quartus II 是Altera公司的綜合性PLD/FPGA開發(fā)軟件,原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多種設(shè)計輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計輸入到硬件配置的完整PLD設(shè)計流程。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設(shè)計的復(fù)雜性、加快了設(shè)計速度。對第三方EDA工具的良好支持也使用戶可以在設(shè)計流程的各個階段使用熟悉的第三方EDA工具。
Quartus II 軟件擁有友好的界面,使用便捷,功能強(qiáng)大,當(dāng)中可編程邏輯設(shè)計環(huán)境采用完成集成化,是先進(jìn)的EDA工具軟件。該軟件具備諸多特點(diǎn)(例如:開放性,與結(jié)構(gòu)無聯(lián)系,多平臺設(shè)計,完全集成化,設(shè)計庫豐富、工具模塊化等),支持原理圖、VHDL、VerilogHDL以及AHDL等多種設(shè)計輸入形式。Quartus II能夠在多系統(tǒng)上使用,為用戶的設(shè)計方式提供了完善的圖形界面。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,學(xué)用簡單等特點(diǎn)。
圖形或HDL編輯Analysis & Synthesis(分析與綜合)Filter(適配器)Assembler(編程文件匯編)編輯器Timing Analyzer(時序分析器)設(shè)計輸入綜合或編譯適配器件下載仿真
3.2 Verilog HDL
Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。Verilog HDL和VHDL是世界上最流行的兩種硬件描述語言,都是在20世紀(jì)80年代中期開發(fā)出來的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購)開發(fā)。兩種HDL均為IEEE標(biāo)準(zhǔn)。
第四章 設(shè)計方案
4.1數(shù)字鐘的工作原理
振蕩器產(chǎn)生穩(wěn)定的高頻脈沖信號,作為數(shù)字鐘的時間基準(zhǔn),然后經(jīng)過分頻器輸出標(biāo)準(zhǔn)秒脈沖。秒計數(shù)器滿60后向分計數(shù)器進(jìn)位,分計數(shù)器滿60后向小時計數(shù)器進(jìn)位,小時計數(shù)器按照“24翻0”規(guī)律計數(shù)。計數(shù)滿后各計數(shù)器清零,重新計數(shù)。計數(shù)器的輸出分別經(jīng)譯碼器送數(shù)碼管顯示。計時出現(xiàn)誤差時,可以用校時電路校時、校分??刂菩盘栍扇齻€獨(dú)立按鍵輸入。輸入信號選擇FPGA器件上的50MHZ時鐘信號。
4.2 按鍵消抖
因為按鍵的物理結(jié)構(gòu)并非理想式開關(guān),在按鍵按下后會在一個很短的時間內(nèi)出現(xiàn)電平抖動的情況,因此需要對按鍵進(jìn)行消抖處理。這里的按鍵消抖與單片機(jī)中的按鍵消抖問題有所不同,不能采用延時的方法進(jìn)行按鍵消抖,這里我選用對時鐘脈沖計數(shù)的方式來判斷按鍵是否按下。采用50MHZ時鐘信號,實測160ms的消抖時長較為合適,即8000000個時鐘上升沿。
4.3時鐘復(fù)位
按下復(fù)位按鍵后,所有位清零。
4.4時鐘校時
時鐘計時過程中,可對時鐘進(jìn)行校時。本次設(shè)計不考慮對秒位進(jìn)行校時,分鐘的個位和小時的個位加到10時會自動進(jìn)位,因此只對分鐘的個位和小時的個位設(shè)置可以加1的校時按鈕,即可實現(xiàn)校時功能。整體比較容易實現(xiàn)。
4.5數(shù)碼管顯示模塊。
選擇需要顯示的時鐘位數(shù)作為敏感詞,用上述給出的顯示代碼對時鐘的每一位分別進(jìn)行顯示處理。
第五章 方案實現(xiàn)與驗證
5.1產(chǎn)生秒脈沖
always@(posedge clk)。。。
如代碼展現(xiàn),當(dāng)計數(shù)器count記到50000000個時鐘上升沿的時候,向秒個位進(jìn)1.count=count+1;
begin
end count=0;count_s0=count_s0+1;
//秒個位計數(shù)
if(count==32'd50000000)
//產(chǎn)生一個一秒的脈沖,//敏感詞為50MHZ時鐘上升沿
5.2秒個位進(jìn)位
當(dāng)秒的個位計數(shù)到10的時候,向秒的十位進(jìn)位。
if(count_s0==4'd10)
begin
end count_s0=0;count_s1=count_s1+1;
//產(chǎn)生秒十位進(jìn)位
5.3按鍵消抖
if(!inrst_m0)
count0=count0+1;if(count0==32'd8000000 &&!inrst_m0)
begin count0=0;count_m0=count_m0+1;end
對時鐘秒沖進(jìn)行計數(shù),計數(shù)達(dá)到8000000時,判斷此時的電平是否為0,若還是為0,則判斷按鍵按下,執(zhí)行分鐘個位加1操作。
5.4復(fù)位按鍵設(shè)置
begin
if(!reset)
begin
count=0;
count_s0=0;count_s1=0;
count_m0=0;count_m1=0;
count_h0=0;count_h1=0;
end else
復(fù)位按鍵按下后所有位置零。
5.5 數(shù)碼管顯示。
always@(count_s0)
begin
case(count_s0)
4'd0: HEX0=7'b1000000;
4'd1: HEX0=7'b1111001;
4'd2: HEX0=7'b0100100;
4'd3: HEX0=7'b0110000;
4'd4: HEX0=7'b0011001;
4'd5: HEX0=7'b0010010;
4'd6: HEX0=7'b0000010;
4'd7: HEX0=7'b1111000;
4'd8: HEX0=7'b0000000;
4'd9: HEX0=7'b0010000;
default: HEX0=7'b1111111;
endcase end
//按鍵按下為邏輯0
//復(fù)位置零
//秒個位顯示
//0 低電平點(diǎn)亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
5.6 RTL結(jié)構(gòu)總圖
顯示部分如下圖:
判斷主體如下圖:
部分引腳圖展現(xiàn)
最終實驗現(xiàn)象:
第六章 實驗總結(jié)
其實本次的多功能數(shù)字鐘設(shè)計其實應(yīng)該還有很多其他的方法,比如用到外部中斷功能進(jìn)行時鐘的校時,采用按鍵輸入加數(shù)碼管閃爍的方式進(jìn)行校時位的選擇,但限于時間較短,這部分知識空白,所以本次設(shè)計實有所缺陷。
經(jīng)歷了本次FPGA的設(shè)計,有很多感受,首先就是看了一點(diǎn)數(shù)字鐘設(shè)計方面的資料,遇到很多不理解的地方,于是就需要再和同學(xué)進(jìn)行研究討論,在討論的過程中,能聽到其他人的思路,感覺特別有意思,同樣的功能,實現(xiàn)的方法有許許多多,努力把自己的想法實現(xiàn),或是選擇一種你喜歡的設(shè)計借鑒一下,兩者都是很好的選擇。
通過這次設(shè)計實驗,著實培養(yǎng)了我們獨(dú)立思考、解決問題的能力,從最一開始的一籌莫展,沒有一點(diǎn)思路,感覺像平底拔樓一樣,從兩手空空到產(chǎn)生一個控制電路,從無到有,這是創(chuàng)造的力量。同時,和其他同學(xué)討論的過程也很重要,要說的還有就是最后實驗成功的喜悅是無可替代的,就好像你親手種的果樹長出了果實,養(yǎng)的雞下了雞蛋,是一種創(chuàng)造的喜悅,整個心就像是一個大箱子里面放著一塊糖,隱隱約約總能感覺到一絲甜蜜。
數(shù)碼管顯示的數(shù)字鐘是常見的技術(shù),這次基于FPGA的多功能數(shù)字鐘設(shè)計具有很高的工程價值和現(xiàn)實意義。讓我們將知識服務(wù)于生活,將知識用于實踐,鍛煉了我們發(fā)現(xiàn)問題解決問題的能力。
這次FPGA的多功能數(shù)字鐘設(shè)計,加深了我們對FPGA設(shè)計的理解,培養(yǎng)了我們的邏輯思維和動手操作能力,使我們將知識與技能鏈接起來,使我們每個人的都在不斷進(jìn)步,提高了專業(yè)技能,提高了動手實踐的綜合能力。
第七章 Verilog HDL源代碼附錄
module clock(reset,inrst_m0,inrst_h0,clk,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5);input clk,reset,inrst_m0,inrst_h0;output reg [6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;reg [31:0] count=0,count0=0,count1=0;reg [3:0] count_s0=0,count_s1=0,count_m0=0,count_m1=0, count_h0=0,count_h1=0;
//實際寬度為25 always@(posedge clk)begin
if(!inrst_m0)
count0=count0+1;if(count0==32'd8000000 &&!inrst_m0)//按鍵消抖
begin count0=0;count_m0=count_m0+1;end if(!inrst_h0)count1=count1+1;if(count1==32'd8000000 &&!inrst_h0)
begin count1=0;count_h0=count_h0+1;end
//按鍵按下為邏輯0
//復(fù)位置零 if(!reset)begin count=0;count_s0=0;count_s1=0;count_m0=0;count_m1=0;count_h0=0;count_h1=0;end count=count+1;begin else
if(count==32'd50000000)
//產(chǎn)生一個一秒的脈沖,end count=0;count_s0=count_s0+1;
//秒個位計數(shù)
else if(count_s0==4'd10)
begin
end count_s0=0;count_s1=count_s1+1;
//產(chǎn)生秒十位進(jìn)位
else if(count_s1==4'd6)
begin
end
//分個位計數(shù) count_s1=0;count_m0=count_m0+1;else if(count_m0==4'd10)
begin
end
//分十位計數(shù) count_m0=0;count_m1=count_m1+1;else if(count_m1==4'd6)
begin
end
//時個位計數(shù) count_m1=0;count_h0=count_h0+1;else if(count_h0==4'd10)
begin
end
//滿24判斷 count_h0=0;count_h1=count_h1+1;else if(count_h0==4 && count_h1==2)
begin
count_h0=0;
count_h1=0;end
end
always@(count_s0)
begin
case(count_s0)
4'd0: HEX0=7'b1000000;
4'd1: HEX0=7'b1111001;
4'd2: HEX0=7'b0100100;
4'd3: HEX0=7'b0110000;
4'd4: HEX0=7'b0011001;
4'd5: HEX0=7'b0010010;
4'd6: HEX0=7'b0000010;
4'd7: HEX0=7'b1111000;
4'd8: HEX0=7'b0000000;
4'd9: HEX0=7'b0010000;
default: HEX0=7'b1111111;
endcase end
always@(count_s1)
begin
case(count_s1)
4'd0: HEX1=7'b1000000;
4'd1: HEX1=7'b1111001;
4'd2: HEX1=7'b0100100;
4'd3: HEX1=7'b0110000;
4'd4: HEX1=7'b0011001;
4'd5: HEX1=7'b0010010;
default: HEX1=7'b1111111;endcase
//秒個位顯示
//0 低電平點(diǎn)亮高電平熄滅//1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//秒十位顯示
//0 低電平點(diǎn)亮高電平熄滅//1 //2 //3 //4 //5
//不符合條件的顯示零
end
always@(count_m0)
begin
case(count_m0)
4'd0: HEX2=7'b1000000;
4'd1: HEX2=7'b1111001;
4'd2: HEX2=7'b0100100;
4'd3: HEX2=7'b0110000;
4'd4: HEX2=7'b0011001;
4'd5: HEX2=7'b0010010;
4'd6: HEX2=7'b0000010;
4'd7: HEX2=7'b1111000;
4'd8: HEX2=7'b0000000;
4'd9: HEX2=7'b0010000;
default: HEX2=7'b1111111;
endcase end always@(count_m1)
begin
case(count_m1)
4'd0: HEX3=7'b1000000;
4'd1: HEX3=7'b1111001;
4'd2: HEX3=7'b0100100;
4'd3: HEX3=7'b0110000;
4'd4: HEX3=7'b0011001;
4'd5: HEX3=7'b0010010;
default: HEX3=7'b1111111;
endcase end always@(count_h0)
begin
case(count_h0)
4'd0: HEX4=7'b1000000;4'd1: HEX4=7'b1111001;
//分個位顯示
//0 低電平點(diǎn)亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//分十位顯示
//0 低電平點(diǎn)亮高電平熄滅 //1 //2 //3 //4 //5
//不符合條件的顯示零
//時個位顯示
//0 低電平點(diǎn)亮高電平熄滅 //1
4'd2: HEX4=7'b0100100;
4'd3: HEX4=7'b0110000;
4'd4: HEX4=7'b0011001;
4'd5: HEX4=7'b0010010;
4'd6: HEX4=7'b0000010;
4'd7: HEX4=7'b1111000;
4'd8: HEX4=7'b0000000;
4'd9: HEX4=7'b0010000;
default: HEX4=7'b1111111;endcase End
always@(count_h1)
begin
case(count_h1)
4'd0: HEX5=7'b1000000;
4'd1: HEX5=7'b1111001;
4'd2: HEX5=7'b0100100;
default: HEX5=7'b1111111;
endcase end
endmodule
//2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//時十位顯示
//0 低電平點(diǎn)亮高電平熄滅//1 //2
//不符合條件的顯示零