EDA實驗教程電子鐘_第1頁
EDA實驗教程電子鐘_第2頁
EDA實驗教程電子鐘_第3頁
EDA實驗教程電子鐘_第4頁
EDA實驗教程電子鐘_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機EDA設(shè)計實驗教程實驗十一 電子日歷和電子時鐘8/10/20221內(nèi)容概要實驗?zāi)康膶嶒炓髮嶒炘韺嶒炛笇?dǎo)實驗內(nèi)容實驗報告8/10/20222實驗?zāi)康恼莆针娮尤諝v和電子時鐘的原理。 熟悉同步及異步時序電路和相應(yīng)計數(shù)器的設(shè)計方法。 綜合應(yīng)用前面的設(shè)計如計數(shù)器、分頻電路、數(shù)碼管掃描顯示等知識。 8/10/20223實驗要求設(shè)計一個電子日歷和電子時鐘 計時功能:包括對時間和日期的計時;校時功能:能用按鈕方便地設(shè)置各時間單位計數(shù)初值,且當(dāng)選擇了某對象后,所對應(yīng)的數(shù)碼管閃爍點亮; 清零功能:能用按鈕將時間清為0點0分0秒,或?qū)⑷掌谇鍨?0年1月1日,星期一;或?qū)Ⅳ[鐘定時設(shè)置清為0點0分; 8/10

2、/20224定時提醒(鬧鐘)的功能:能在設(shè)定的時間發(fā)出鬧鈴音,即持續(xù)20秒的急促的“嘀嘀”音,若按住setn鍵不放,可屏蔽鬧鈴音; 整點報時功能:每逢整點,產(chǎn)生“嘀嘀嘀嘀嘟”四短一長的報時音; 顯示功能:同時采用6個數(shù)碼管掃描顯示時間或日歷或鬧鐘定時的值。使用顯示模式切換按鈕(moden),當(dāng)按動不同的次數(shù)時,分別選擇顯示時間、日期、星期和鬧鐘定時。 8/10/20225利用GW48-SOPC+實驗開發(fā)系統(tǒng)實現(xiàn)設(shè)計的編程下載 編程器件為EP1C12Q240C8; 系統(tǒng)時鐘fclk = 20MHz; 使用實驗箱上的未防抖開關(guān)鍵9進(jìn)行顯示模式切換,使用鍵10和鍵11選擇設(shè)置計數(shù)初值對象和設(shè)置計數(shù)初

3、值; 使用數(shù)碼管數(shù)碼1、2、4、5、7、8實現(xiàn)計數(shù)值的掃描顯示; 使用揚聲器SPEAKER播放鬧鈴音和整點報時音; 使用鍵12、鍵13和鍵14實現(xiàn)對時間、日期和鬧鐘定時的清零功能 。8/10/20226實驗原理 電子日歷和電子時鐘在設(shè)計思想上并無多少差異,二者都是利用幾級分頻電路對時鐘信號分頻計數(shù),以達(dá)到計時的功能。 開發(fā)系統(tǒng)上采用的時鐘信號的頻率是20MHz,可分別設(shè)計計數(shù)器對其分頻計數(shù),包括計秒、分、小時、日、周、月以及年等。在每一級上顯示輸出,即構(gòu)成了一個電子日歷和時鐘的模型。為了可以隨意調(diào)整計數(shù)值,還應(yīng)包含設(shè)定計數(shù)初值的電路。 8/10/20227實驗指導(dǎo) 1. 信號定義及下載板資源分

4、配 輸入信號 clk:系統(tǒng)時鐘信號 20MHz,接Pin28 moden:選擇顯示時間或日歷或鬧鐘定時的顯示模式切換信號,接按鈕開關(guān)鍵9 selectn:選擇設(shè)置計數(shù)初值對象信號,接按鈕開關(guān)鍵10 setn:設(shè)置計數(shù)初值信號,接按鈕開關(guān)鍵11 clr_timen:時間復(fù)位信號,接按鈕開關(guān)鍵12 clr_daten:日期復(fù)位信號,接按鈕開關(guān)鍵13 clr_alarm_setn:清除鬧鐘定時設(shè)置信號,接按鈕開關(guān)鍵14 注意:鍵9 14輸出均為負(fù)脈沖有效! 8/10/20228輸出信號 alarm:輸出到揚聲器的信號,產(chǎn)生鬧鈴音和整點報時音; out7.0:從高到低分別對應(yīng)數(shù)碼管的p(小數(shù)點)、g、

5、f、e、d、c、b、a各段; scan_en1.8:分別驅(qū)動8個數(shù)碼管數(shù)碼18的掃描顯示控制端 。8/10/202292. 設(shè)計思路建議采用頂層圖形設(shè)計方法,為快速仿真,先不考慮下載時實際使用的系統(tǒng)時鐘是多少,假定這里的輸入時鐘周期為T=1ms。 將整個電路劃分為7個子模塊:時鐘分頻子模塊(兩個);按鈕消抖電路子模塊;選擇設(shè)置計數(shù)初值對象子模塊;分頻計數(shù)子模塊(關(guān)鍵);鬧鐘定時和整點報時子模塊(關(guān)鍵) ;數(shù)碼管掃描顯示子模塊;七段碼譯碼器子模塊。8/10/202210頂層圖形文件ecc.bdf (3)選擇設(shè)置計數(shù)初值對象(4)分頻計數(shù)(2)按鈕消抖(1)時鐘分頻8/10/202211頂層圖形文

6、件ecc.bdf(續(xù)) (6)數(shù)碼管掃描顯示(7)七段碼譯碼器(5)鬧鐘定時和整點報時8/10/202212(1)時鐘分頻子模塊 時鐘分頻子模塊有兩個clkdiv1000.v對輸入時鐘(f=1KHz,T=1ms)進(jìn)行1000分頻,獲得1Hz的時鐘,作為分頻計數(shù)子模塊fdiv_cnt.bdf的輸入時鐘。 clkout必須在計夠分頻計數(shù)值后才有一個正跳變,這樣才與實際情況相符! 8/10/202213(1)時鐘分頻子模塊(續(xù)) clkdiv.v對輸入時鐘(f=1KHz)進(jìn)行250分頻,獲得4Hz的時鐘,作為產(chǎn)生鬧鈴音,以及數(shù)碼管閃爍顯示的時鐘信號;對輸入時鐘進(jìn)行100分頻,獲得10Hz的時鐘,作為

7、設(shè)置計數(shù)初值時按下setn鍵能夠連續(xù)快速加1的時鐘信號。注意:在設(shè)計clkdiv.v時,使輸出時鐘信號clk_4Hz為方波! 8/10/202214clkdiv.v的仿真波形 8/10/202215(2)按鈕消抖電路子模塊 將按鈕開關(guān)的負(fù)脈沖信號轉(zhuǎn)換為正脈沖信號輸出(其定時寬度至少為500ms,若定時長度選得過短,抖動不能夠完全消除!)。500ms 響應(yīng)pbn信號,signal由“0”變?yōu)椤?”,并保持500ms。8/10/202216(3)選擇設(shè)置計數(shù)初值對象子模塊 功能根據(jù)顯示模式切換信號mode選擇是顯示時間,或是日歷,或是鬧鐘定時;在不同的顯示模式下,當(dāng)按動select,使計數(shù)器sel

8、1.0加1計數(shù),從而選擇不同的計數(shù)初值對象(如在顯示時間模式下,按動select,則可以選擇是設(shè)置小時,還是設(shè)置分鐘,或是設(shè)置秒);并根據(jù)顯示模式、sel1.0的值和set產(chǎn)生設(shè)置不同對象計數(shù)初值的時鐘信號。 8/10/202217(3)選擇設(shè)置計數(shù)初值對象子模塊(續(xù)) 整個子模塊可分成4個部分,包括3個always塊和一組assign連續(xù)賦值語句: mode信號控制顯示不同的輸出信號 always (posedge mode) 使選擇設(shè)置對象的計數(shù)器sel2:0加1 always (posedge select or posedge mode) 若長時間按下set鍵,則生成num1信號,用于

9、設(shè)置初值時連續(xù)快速加1 采用連續(xù)賦值語句,根據(jù)計數(shù)器disp_mode1.0 和sel1.0的值以及set確定調(diào)整時間的信號set_hr等的值例:assign set_hr= (disp_mode=0) &(sel=1) & (num1&clk_10Hz)|(!num1&set); 8/10/202218(4)分頻計數(shù)子模塊fdiv_cnt.bdf 總體設(shè)計思路由6個分頻子模塊組成。假定系統(tǒng)時鐘20MHz已被分頻為f=1Hz后送入fdiv_cnt.bdf作為輸入時鐘,則對其逐級分頻計數(shù),包括秒、分、小時、日,以及周、月和年的計數(shù)。 計數(shù)時均使用了二進(jìn)制編碼的十進(jìn)制(即BCD碼)計數(shù)并直接顯示。

10、 采用異步計數(shù)方式。選用異步清零方式。 8/10/202219fdiv_cnt.bdf的原理圖 8/10/202220fdiv_cnt.bdf的原理圖(續(xù)) 8/10/202221對日的計數(shù)子模塊功能:對輸入的日時鐘clki進(jìn)行28或31分頻,根據(jù)是否閏年和月份對天計數(shù),輸出日期;并產(chǎn)生月時鐘信號mon_clk。在計日時,必須考慮當(dāng)前的月份是幾月來確定終值;當(dāng)月份為二月時還要判斷是否為閏年。注意:當(dāng)清零信號有效時,日的初始值為1,而不是0! 8/10/202222注:關(guān)于閏年、閏日一回歸年的時間為365天5時48分46秒。陽歷把一年定為365天,所余的時間約每4年積累成一天,加在二月里。這樣的

11、方法,在歷法上叫做閏。陽歷四年一閏,在二月末加一天,這一天叫做閏日(leap day)。陽歷有閏日的一年叫做閏年(leap year),這年有366天。所以陽歷平常年份每年365天,二月為28天;閏年為366天,二月為29天。因此,每400年中有97個閏年。2000年2099年間有25個閏年。本實驗中按陽歷計時!陽歷閏年的計算方法:能被4整除、且不能被100整除的年為閏年(如1904年);能被400整除的年為閏年(如2000年)。不能被4整除的年為平年(如1901年);能被4整除、也能被100整除的年為平年(如1900年)。 8/10/202223功能:對年計數(shù),輸出年份;并根據(jù)哪年是閏年產(chǎn)生

12、leapyear信號。關(guān)鍵是對閏年的判斷法,最簡單的方法是求模(%),也可以采用枚舉的方法。注意:如果采用求模的方法,首先要聲明一個二進(jìn)制計數(shù)器(如cnt7:0),將BCD碼轉(zhuǎn)換為真正的十進(jìn)制數(shù)!然后再用cnt7:0模4,求得leapyear,否則leapyear不正確!想一想,為什么?對年計數(shù)子模塊fdivyear.v 8/10/202224功能:對輸入的月時鐘12分頻,即對月計數(shù),輸出月份;并產(chǎn)生年時鐘信號year_clk。 對月計數(shù)子模塊fdiv12.v 注意:清零后其初值應(yīng)為1而不是0。計數(shù)時必須采用非阻塞賦值語句,否則month在clki有效的第一個值為2,而不是1。 8/10/20

13、2225(5)鬧鐘定時和整點報時子模塊 主要完成功能鬧鐘定時中的小時、分設(shè)置; 在正常計時到鬧鐘設(shè)定值時產(chǎn)生持續(xù)20s的鬧鈴音,若按住set鍵不放,可屏蔽鬧鈴音; 每逢整點,產(chǎn)生“嘀嘀嘀嘀嘟”四短一長的報時音; 當(dāng)按動clr_alarm_set鍵,復(fù)位鬧鐘定時設(shè)置為0點0分。 難點 !8/10/202226輸入信號 clk_4Hz(T=250ms),來自clkdiv.v的輸出,作為鬧鈴功能和整點報時功能的基準(zhǔn)時鐘信號 clk_1KHz(T=1ms),來自clkdiv1000.v的輸出,作為產(chǎn)生鬧鈴音、報時音音調(diào)的時鐘信號 disp_mode 1:0:顯示模式,來自route.v的輸出 sec7

14、:0,min7:0,hour7:0:秒、分鐘和小時的計數(shù)值,來自fdiv_cnt.bdf的輸出 set_ahr,set_amin:設(shè)定鬧鐘定時的時鐘信號,來自route.v的輸出 set:設(shè)置計數(shù)初值信號 8/10/202227輸出信號 amin7:0,ahour7:0:鬧鐘定時計數(shù)器的輸出,送至scan_disp.v alarm:輸出到揚聲器的信號,產(chǎn)生鬧鈴音和報時音 ear:周期為1s,用于產(chǎn)生整點報時音 alarm2:整點報時信號 8/10/202228/ -(1)鬧鐘定時中的小時設(shè)置 always (posedge set_ahr or posedge clr_alarm_set)/-

15、(2)鬧鐘定時中的分設(shè)置always (posedge set_amin or posedge clr_alarm_set)/-(3)鬧鈴功能always (posedge clk_4Hz) /-(4)整點報時功能always (posedge clk_4Hz) /(a)產(chǎn)生ear信號(周期為1s),用于產(chǎn)生整點報時音 always /(b)產(chǎn)生整點報時信號alarm2 assign alarm=(alarm1)? clk_4Hz &clk_1KHz :0) | alarm2; /*(c)產(chǎn)生鬧鈴音或整點報時音。當(dāng)alarm1為1時,每0.25s產(chǎn)生一個音頻為1KHz的鬧鈴音:alarm=cl

16、k_4Hz&clk_1KHz;并持續(xù)20s。*/ 整個子模塊可分成4個部分8/10/202229(6)數(shù)碼管掃描顯示子模塊 功能當(dāng)disp_mode為不同的值3、2、1、0時,分別顯示鬧鐘定時、星期、年月日以及時分秒 。閃爍功能:當(dāng)要手動調(diào)整時間或設(shè)置鬧鐘定時時,選擇了某對象(如時間中的小時)后,所對應(yīng)的數(shù)碼管(數(shù)碼1、數(shù)碼2)閃爍點亮,以表示要對該對象初值進(jìn)行設(shè)置。 注意:數(shù)碼3、6始終不亮,鬧鐘定時只有數(shù)碼1、2、4、5亮,顯示星期只有數(shù)碼1亮。8/10/202230(6)數(shù)碼管掃描顯示子模塊(續(xù)) 設(shè)計思路: 聲明一個reg型變量state2:0作為狀態(tài)機,它有6個狀態(tài)s6s1,分別驅(qū)動

17、串行掃描控制信號scan_en8、scan_en7、scan_en5、scan_en4、scan_en2、scan_en1。當(dāng)state2:0分別為s1、s2、s6時,scan_en8:1分別為128、64、16、8、2、1,使得數(shù)碼管8、7、5、4、2、1分時點亮。 整個程序包括3個部分: / 1. 狀態(tài)機的狀態(tài)轉(zhuǎn)移 /注意使數(shù)碼6和數(shù)碼3始終不亮 /采用if-else語句描述狀態(tài)轉(zhuǎn)移 / 2. 閃爍使能信號賦值 /3. 產(chǎn)生七段碼數(shù)碼管的輸入信號和使能信號 /采用case語句的嵌套,根據(jù)disp_mode和state的值來決定串行掃描數(shù)據(jù)scan_data和掃描控制信號scan_en的值8

18、/10/202231實驗內(nèi)容1. 設(shè)計一個電子日歷和電子時鐘 2. 仿真 對兩個時鐘分頻子模塊clkdiv1000.v和clkdiv.v進(jìn)行仿真 對選擇設(shè)置計數(shù)初值對象子模塊route.v進(jìn)行仿真 對fdiv_cnt.bdf中的幾個主要子模塊進(jìn)行仿真對fdiv_cnt.bdf仿真 重點仿真alarm.v 對數(shù)碼管掃描顯示子模塊scan_disp.v仿真 對ecc.bdf仿真 8/10/2022323. 編程下載 仿真完全正確后,將原頂層圖形設(shè)計文件ecc.bdf另起名保存(如ecc_download.bdf),并在其時鐘輸入引腳后增加一個時鐘分頻模塊clkdiv1ms.v(輸出為對稱方波?。?,將輸入時鐘fclk = 20MHz分頻為f = 1KHz,即T = 1ms; 編譯,再對ecc_download.bdf進(jìn)行引腳鎖定;實驗箱設(shè)置; 下載。 8/10/2022334. 在線校驗驗證檢查步驟 設(shè)置時間初值為02小時1分00秒。 設(shè)置日期初值為04年2月1日,并接著按setn鍵,注意觀察當(dāng)增到2月28日時,再按1次setn鍵,日期將跳為2月29,還是直接跳為3月1日。 設(shè)置星期初值為6。 設(shè)置鬧鐘定時為2點3分。 驗證鬧鐘功能。 驗證清除鬧鐘定時設(shè)置功能。 驗

溫馨提示

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

評論

0/150

提交評論