畢業(yè)論文 基于cpld的多功能數(shù)字鐘設(shè)計(jì)_第1頁
畢業(yè)論文 基于cpld的多功能數(shù)字鐘設(shè)計(jì)_第2頁
畢業(yè)論文 基于cpld的多功能數(shù)字鐘設(shè)計(jì)_第3頁
畢業(yè)論文 基于cpld的多功能數(shù)字鐘設(shè)計(jì)_第4頁
畢業(yè)論文 基于cpld的多功能數(shù)字鐘設(shè)計(jì)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 目錄1 前言12 總體方案設(shè)計(jì)22.1 方案論述22.2 設(shè)計(jì)方式33 單元模塊電路設(shè)計(jì)43.1時(shí)間顯示電路模塊設(shè)計(jì)43.2按鍵及指示燈電路模塊的設(shè)計(jì)63.3蜂鳴器及有源晶振電路的設(shè)計(jì)83.4 cpld編程下載電路的設(shè)計(jì)93.5電源電路電路的設(shè)計(jì)103.6 epm7128slc84器件介紹114 cpld 編程設(shè)計(jì)124.1系統(tǒng)信號的定義及頂層模塊124.2 時(shí)鐘節(jié)拍產(chǎn)生模塊134.3模式選擇功能模塊154.4快速時(shí)間設(shè)置功能模塊174.5秒、分、時(shí)計(jì)時(shí)與時(shí)間調(diào)整模塊174.6鬧鈴時(shí)間設(shè)置模塊194.7鬧鈴與整點(diǎn)報(bào)時(shí)模塊204.8 7段顯示譯碼模塊214.9 led顯示模塊235 系統(tǒng)功能及

2、功能仿真255.1系統(tǒng)功能255.2功能仿真265.2.1 時(shí)鐘節(jié)拍產(chǎn)生模塊的仿真波形265.2.2 模式選擇功能模塊的仿真波形285.2.3 鬧鈴設(shè)置功能模塊的仿真波形295.2.4 7段譯碼功能模塊的仿真波形305.2.5 led顯示功能模塊的仿真波形315.2.6 系統(tǒng)總體功能仿真波形326 設(shè)計(jì)總結(jié)337 參考文獻(xiàn)34附錄:基于cpld的多功能數(shù)字鐘電路圖351 前言我們已經(jīng)進(jìn)入了數(shù)字化和信息化的時(shí)代,其特點(diǎn)是各種數(shù)字產(chǎn)品的廣泛應(yīng)用?,F(xiàn)代數(shù)字產(chǎn)品在性能提高、復(fù)雜度增大的同時(shí),其更新?lián)Q代的步伐也越來越快,實(shí)現(xiàn)這種進(jìn)步的因素在于生產(chǎn)制造技術(shù)和電子設(shè)計(jì)技術(shù)的進(jìn)步。生產(chǎn)制造技術(shù)以微細(xì)加工技術(shù)為

3、代表,目前已進(jìn)展到深亞微米階段,可以在幾平方厘米的芯片上集成數(shù)千萬個(gè)晶體管。pld器件和eda技術(shù)的出現(xiàn),改變了這種傳統(tǒng)的設(shè)計(jì)思路,使人們可以立足于pld芯片來實(shí)現(xiàn)各種不同的功能,新的設(shè)計(jì)方法能夠由設(shè)計(jì)者自己定義器件內(nèi)部邏輯和管腳,將原來由電路板設(shè)計(jì)完成的工作大部分放在芯片的設(shè)計(jì)中進(jìn)行。這樣不僅可以通過芯片設(shè)計(jì)實(shí)現(xiàn)各種邏輯功能,而且由于管腳定義的靈活性,減輕了原理圖和印制板設(shè)計(jì)的工作量和難度,增加了設(shè)計(jì)的自由度,提高了效率。同時(shí)這種設(shè)計(jì)減少了所需芯片的種類和數(shù)量,縮小了體積,降低了功耗,提高了系統(tǒng)的可靠性。本設(shè)計(jì)是基于cpld的多功能數(shù)字鐘設(shè)計(jì)。硬件界面為一個(gè)6位的led數(shù)碼管,時(shí)間顯示方式為

4、6位同時(shí)顯示,即顯示狀態(tài)為:88:88:88。顯示的時(shí)間制為24小時(shí)制。三個(gè)時(shí)間設(shè)定按鍵,分別為mode模式選擇鍵,set設(shè)定鍵和change數(shù)值修改鍵。按鍵功能介紹:mode按鍵用來選擇當(dāng)前數(shù)字鐘的工作模式,系統(tǒng)正常工作在模式0下,即模式0為正常時(shí)鐘模式。當(dāng)在正常時(shí)鐘模式下第一次按下mode鍵時(shí),系統(tǒng)進(jìn)入模式1,即鬧鈴模式,在此模式下可以通過set和change按鍵的配合使用來設(shè)定所需要的鬧鈴時(shí)間。當(dāng)再一次按下mode按鍵后系統(tǒng)進(jìn)入手動(dòng)校時(shí)模式,在此模式下通過set和change按鍵的配合使用,可以改變當(dāng)前時(shí)間。set按鍵則用于在不同的模式下選擇當(dāng)前設(shè)定的位置,比如當(dāng)前設(shè)定的位置是小時(shí),則再

5、一次按下set按鍵后當(dāng)前設(shè)定的位置變?yōu)榉昼?。change按鍵用來將當(dāng)前設(shè)定位置的時(shí)間值加1,當(dāng)長時(shí)間按下change按鍵時(shí),當(dāng)前設(shè)定值為連續(xù)快速加1,此功能用于快速設(shè)定時(shí)間。系統(tǒng)帶四個(gè)指示燈電路,一個(gè)為電源指示燈,其他三個(gè)為工作狀態(tài)指示燈,即分別為led_alarm、led_hour和led_min。led_alarm用于指示當(dāng)前是否設(shè)有鬧鈴,當(dāng)led_alarm指示燈亮?xí)r表明當(dāng)前設(shè)有鬧鈴。led_hour和led_min用于指示當(dāng)前設(shè)定的是時(shí)間的小時(shí)還是分鐘,當(dāng)led_hour指示燈亮?xí)r表明此時(shí)設(shè)定的是時(shí)間的小時(shí)值,當(dāng)led_min指示燈亮?xí)r表明此時(shí)設(shè)定的是時(shí)間的分鐘值。鬧鈴的功能是實(shí)現(xiàn)當(dāng)?shù)?/p>

6、達(dá)預(yù)設(shè)的時(shí)間點(diǎn)時(shí)產(chǎn)生為時(shí)20s的“嘀嘀嘀嘀”急促短音。整點(diǎn)報(bào)時(shí)的功能是實(shí)現(xiàn)在每個(gè)整點(diǎn)的5秒鐘前產(chǎn)生整點(diǎn)報(bào)時(shí)音,報(bào)時(shí)音為“嘀嘀嘀-嘟”4短一長音。2 總體方案設(shè)計(jì)2.1 方案論述本設(shè)計(jì)是基于cpld的多功能數(shù)字鐘設(shè)計(jì)。硬件界面為一個(gè)6位的led數(shù)碼管,時(shí)間顯示方式為6位同時(shí)顯示,即顯示狀態(tài)為:88:88:88。顯示的時(shí)間制為24小時(shí)制。三個(gè)時(shí)間設(shè)定按鍵,分別為mode模式選擇鍵,set設(shè)定鍵和change數(shù)值修改鍵。按鍵功能介紹:mode按鍵用來選擇當(dāng)前數(shù)字鐘的工作模式,系統(tǒng)正常工作在模式0下,即模式0為正常時(shí)鐘模式。當(dāng)在正常時(shí)鐘模式下第一次按下mode鍵時(shí),系統(tǒng)進(jìn)入模式1,即鬧鈴模式,在此模式

7、下可以通過set和change按鍵的配合使用來設(shè)定所需要的鬧鈴時(shí)間。當(dāng)再一次按下mode按鍵后系統(tǒng)進(jìn)入手動(dòng)校時(shí)模式,在此模式下通過set和change按鍵的配合使用,可以改變當(dāng)前時(shí)間。set按鍵則用于在不同的模式下選擇當(dāng)前設(shè)定的位置,比如當(dāng)前設(shè)定的位置是小時(shí),則再一次按下set按鍵后當(dāng)前設(shè)定的位置變?yōu)榉昼?。change按鍵用來將當(dāng)前設(shè)定位置的時(shí)間值加1,當(dāng)長時(shí)間按下change按鍵時(shí),當(dāng)前設(shè)定值為連續(xù)快速加1,此功能用于快速設(shè)定時(shí)間。系統(tǒng)帶四個(gè)指示燈電路,一個(gè)為電源指示燈,其他三個(gè)為工作狀態(tài)指示燈,即分別為led_alarm、led_hour和led_min。led_alarm用于指示當(dāng)前是否

8、設(shè)有鬧鈴,當(dāng)led_alarm指示燈亮?xí)r表明當(dāng)前設(shè)有鬧鈴。led_hour和led_min用于指示當(dāng)前設(shè)定的是時(shí)間的小時(shí)還是分鐘,當(dāng)led_hour指示燈亮?xí)r表明此時(shí)設(shè)定的是時(shí)間的小時(shí)值,當(dāng)led_min指示燈亮?xí)r表明此時(shí)設(shè)定的是時(shí)間的分鐘值。電源采用+5v供電。整個(gè)設(shè)計(jì)的設(shè)計(jì)方式采用top-down設(shè)計(jì)方法。多功能數(shù)字鐘設(shè)計(jì)分為1個(gè)頂層模塊和8個(gè)功能子模塊。頂層模塊名稱為clock.v。各功能子模塊分別為:系統(tǒng)分頻功能模塊clk_generate.v、模式選擇功能模塊mode_select.v、快速時(shí)間設(shè)置功能模塊fast_settime.v、秒、分、時(shí)計(jì)時(shí)與時(shí)間調(diào)整模塊time_mode0

9、.v、鬧鈴時(shí)間設(shè)置模塊alarm_set.v、鬧鈴與整點(diǎn)報(bào)時(shí)模塊alarm.v、7段顯示譯碼模塊decoder_7seg.v以及l(fā)ed顯示功能模塊display.v。2.2 設(shè)計(jì)方式 topdown設(shè)計(jì),即自頂向下的設(shè)計(jì)。這種設(shè)計(jì)方法首先從系統(tǒng)設(shè)計(jì)入手,在頂層進(jìn)行功能方框圖的劃分和結(jié)構(gòu)設(shè)計(jì)。在功能級進(jìn)入仿真和糾錯(cuò),并用硬件描述語言對高層次的系統(tǒng)行為進(jìn)行描述,然后用綜合工具將設(shè)計(jì)轉(zhuǎn)化為具體門電路網(wǎng)表,其對應(yīng)的物理實(shí)現(xiàn)可以是pld器件或?qū)S眉呻娐贰S捎谠O(shè)計(jì)的主要仿真和調(diào)試過程是在高層次上完成的,這一方面有利于早期發(fā)現(xiàn)結(jié)構(gòu)上的錯(cuò)誤,避免設(shè)計(jì)工作的浪費(fèi),同時(shí)也減少了邏輯功能仿真的工作量,提高了設(shè)計(jì)的

10、一次成功率。整個(gè)設(shè)計(jì)的設(shè)計(jì)方式采用top-down設(shè)計(jì)方法。多功能數(shù)字鐘設(shè)計(jì)分為1個(gè)頂層模塊和8個(gè)功能子模塊。頂層模塊名稱為clock.v。各功能子模塊分別為:系統(tǒng)分頻功能模塊clk_generate.v、模式選擇功能模塊mode_select.v、快速時(shí)間設(shè)置功能模塊fast_settime.v、秒、分、時(shí)計(jì)時(shí)與時(shí)間調(diào)整模塊time_mode0.v、鬧鈴時(shí)間設(shè)置模塊alarm_set.v、鬧鈴與整點(diǎn)報(bào)時(shí)模塊alarm.v、7段顯示譯碼模塊decoder_7seg.v以及l(fā)ed顯示功能模塊display.v。clk_generate.vmode_select.vclock.vfast_sett

11、ime.vtime_mode0.valarm_set.valarm.vdecoder_7seg.vdisplay.v 圖2.1 整個(gè)系統(tǒng)的模塊劃分3 單元模塊電路設(shè)計(jì)3.1時(shí)間顯示電路模塊設(shè)計(jì)時(shí)間顯示電路主要由兩部分組成,如圖3.1所示。其中一部分為六位led數(shù)碼管的驅(qū)動(dòng)電路,另一部分為led數(shù)碼管電路。led驅(qū)動(dòng)電路由q1、q2、q3、q4、q5、q6六支三級管和r5、r6、r7、r8、r9、r10基極偏置電阻組成。驅(qū)動(dòng)三級管為pnp型三極管,用于開關(guān)電路中。當(dāng)三級管q1的基極(即cpld的led0輸出端)為低電平時(shí),q1的發(fā)射結(jié)正向偏置,集電結(jié)反向偏置,因此三極管處于導(dǎo)通狀態(tài),此時(shí)有vce

12、0.20.3v。反之當(dāng)q1的基極為高電平時(shí)q1截止。q1、q2、q3q6的基極(led0led5)分別接cpld的pin74、pin73、pin70、pin69、pin68、pin67,分別作為led數(shù)碼管的位選端。 圖3.1 led顯示電路led的顯示方式有靜態(tài)顯示和動(dòng)態(tài)方式兩種工作方式。led顯示器工作于靜態(tài)顯示方式時(shí),各位的共陰極(或共陽極)連接在一起并接地(或+5v);每位的段碼線(adp)分別與一個(gè)8位的鎖存器輸出相連。之所以為靜態(tài)顯示,是因?yàn)楦鱾€(gè)led的顯示字符的字符一經(jīng)確定,相應(yīng)鎖存器鎖存的段碼輸出將維持不變,直到送入另一個(gè)字符的段碼為止。正因?yàn)槿绱?,靜態(tài)顯示器的亮度都較高。但是

13、因?yàn)殪o態(tài)顯示方式下,各位led的段碼線都是獨(dú)立的,因此一個(gè)6位的led顯示器需要占用6*8+6=54個(gè)i/o口,在這種情況下為了簡化接線,因此在本設(shè)計(jì)中采用的是動(dòng)態(tài)掃描方式來顯示距離。在動(dòng)態(tài)顯示方式下,通常將所有位的段碼線相應(yīng)并聯(lián)在一起,由一個(gè)8位的i/o口控制,形成段碼線的多路復(fù)用,而各位的共陽極或共陰極分別由相應(yīng)的i/o口線控制,形成各位的分時(shí)選通。圖3.1所示的電路是一個(gè)六位的led顯示電路。其中段碼線占用1個(gè)8位i/o口,而位選線占用六位i/o口。由于各段碼線并聯(lián),8位i/o口輸出的段碼對各個(gè)顯示位來說都是相同的。因此,在同一時(shí)刻,如果各位位選線都處于選通狀態(tài)的話六位led將顯示相同的

14、字符。若要各位led能同時(shí)顯示出與本位相應(yīng)的顯示字符,就必須采用動(dòng)態(tài)顯示方式,即在某一時(shí)刻,只讓某一位的位選線處于選能狀態(tài),而其他各位的位選處于關(guān)閉狀態(tài),同時(shí),段碼線上輸出相應(yīng)的要顯示的字符段碼。這樣,在同一時(shí)刻,六位led中只有選通的那一位顯示出字任,而其它四位則是熄滅的。同樣在下一時(shí)刻,只讓下一位的位選線處于選通狀態(tài),而其它各位的位選線處于關(guān)閉狀態(tài),在段碼線上輸出將要顯示字符的段碼,則同一時(shí)刻,只有選通位顯示相應(yīng)的字符。而其它各位是熄滅的。如此循環(huán)下去,就可以使各位顯示出將要顯示的字符。 圖3.1所示三位數(shù)碼顯示管,常用的led顯示器為8段。每一個(gè)段對應(yīng)一個(gè)發(fā)光二極管。這種顯示器有共陽極和

15、共陰極2種。共陰極led顯示器的發(fā)光二極管的陰極連接在一起,通常此公共陰極接地。當(dāng)某個(gè)發(fā)光二極管的陽極為高電平時(shí),發(fā)光二極管點(diǎn)亮,相應(yīng)的段被顯示。同樣,共陽極led顯示器的發(fā)光二極管的陽極連接在一起,通常此公共陽極接正電壓,當(dāng)某個(gè)發(fā)光二極管的陰極接低電平時(shí),發(fā)光二極管被點(diǎn)亮,相應(yīng)的段被顯示。六位led顯示器有6位位選線和48根段碼線。段碼線控制顯示字符的字型,而位選線為各個(gè)led顯示位中各段的公共端,它控制該led顯示位的亮或暗。led顯示器工作于靜態(tài)顯示方式時(shí),各位的共陰極或共陽極連接在一起并接地或+5v。在多位顯示時(shí),為簡化硬件電路,通常將所有位的段碼線相應(yīng)段并聯(lián)在一起,由一個(gè)8位i/o口

16、控制,形成段碼線的多路復(fù)用。由于各位段碼線并聯(lián),8位i/o口輸出的段碼對各個(gè)顯示字符來說都是相同的,因此,在同一時(shí)刻,如果各位位選線都外于選通狀態(tài)的話,6位led將顯示相同的字符,就必需采用動(dòng)態(tài)顯示方式,即在某一時(shí)刻,只讓某一位的位選線外于選通狀態(tài),而其他各位的位選線外于關(guān)閉狀態(tài),同時(shí)段碼線上輸出相應(yīng)位要顯示字符的段碼。這樣在同一時(shí)刻,6位led中只有選通的那一位顯示出字符,而其他5位是熄滅的。同樣在下一時(shí)刻,只讓下一位的位選線外于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),在段碼線上輸出將要顯示字符的段碼,則同一時(shí)刻,只有選通位顯示出相應(yīng)的字任,而其他各位剛是熄滅的。如此循環(huán)下去,就可以使各位

17、顯示出將要顯示的字符。雖然這些字符是在不同時(shí)刻出現(xiàn)的,但由于人的視覺暫留作用而感到同時(shí)顯示。3.2按鍵及指示燈電路模塊的設(shè)計(jì) 根據(jù)電子電路常識,采用灌電流工作方式的電路的功耗要比采用拉電流方式工作的電路小。因此本設(shè)計(jì)中所有的外部鍵盤,指示二極管均采用灌電流的工作方式。當(dāng)多功能數(shù)字鐘的按鍵未按下時(shí)按鍵的輸出(即cpld的輸入)為低電平,當(dāng)按鍵按下時(shí)輸出(即cpld的輸入)為高電平。 在本設(shè)計(jì)中只有三個(gè)按鍵,分別為mode、set、change。mode按鍵用于模式選擇,按下一次mode按鍵后電路進(jìn)入鬧鈴設(shè)置模式,在該模式下可以用set鍵來選擇當(dāng)前是設(shè)置小時(shí)還是設(shè)置分鐘,而用change鍵可以改變

18、當(dāng)前設(shè)置鬧鈴的小時(shí)或分鐘(向上加一)。再按一次mode鍵則進(jìn)入手動(dòng)校時(shí)功能模式。按鍵電路如圖3.2所示。 圖3.2 按鍵電路在本設(shè)計(jì)中共有四個(gè)指示燈,一個(gè)為電源指示燈,其它三個(gè)是工作狀態(tài)指示燈,d1為鬧鈴報(bào)警指示電路,當(dāng)設(shè)置鬧鈴后鬧鈴指示電路就工作在點(diǎn)亮狀態(tài),指示當(dāng)前設(shè)有鬧鈴。d2和d3用來指示當(dāng)前設(shè)置狀態(tài)。當(dāng)在鬧鈴設(shè)置模式和手動(dòng)校時(shí)模式下,d2或d3會有一個(gè)在點(diǎn)亮狀態(tài),當(dāng)d2亮?xí)r表示當(dāng)前設(shè)置的是小時(shí),當(dāng)d3亮?xí)r表示當(dāng)前設(shè)置的是分鐘。指示燈電路如圖3.3所示。 圖3.3 指示燈電路 引腳的連接為,d1接cpld的pin61,d2接cpld的pin63,d3接cpld的pin64。當(dāng)cpld的引

19、腳輸出為高電平時(shí)相應(yīng)的指示燈就點(diǎn)亮。3.3蜂鳴器及有源晶振電路的設(shè)計(jì) 在本設(shè)計(jì)中由于有音調(diào)的變換,所以必需采用交流蜂鳴器。由于cpld管腳的驅(qū)動(dòng)能力有限,因此通過連接一個(gè)三極管來增強(qiáng)驅(qū)動(dòng)能力,從而提高蜂鳴器的響度。二極管d9起到續(xù)流保護(hù)的作用,蜂鳴器電路如圖3.4所示。 圖3.4蜂鳴器電路 系統(tǒng)時(shí)鐘采用2.048mhz的有源晶體振蕩器。為了使有源晶振能輸出較好的波形,必需保證供電的穩(wěn)定。所以在晶振電路的前端加了兩個(gè)小電容對電源進(jìn)行濾波,在時(shí)鐘輸出端加了一個(gè)小電阻,能有效地抑制高次諧波和實(shí)現(xiàn)阻抗匹配。有源晶振電路如圖3.5所示。 圖3.5有源晶振電路3.4 cpld編程下載電路的設(shè)計(jì)cpld器件

20、多采用jtag編程方式,jtag編程方式是在線編程,傳統(tǒng)生產(chǎn)流程中先對芯片進(jìn)行預(yù)編程現(xiàn)再裝到板上因此而改變,簡化的流程為先固定器件到電路板上,再用jtag編程,從而大大加快工程進(jìn)度。jtag接口可對psd芯片內(nèi)部的所有部件進(jìn)行編程。在硬件結(jié)構(gòu)上,jtag 接口包括兩部分:jtag 端口和控制器。與jtag 接口兼容的器件可以是微處理器(mpu)、微控制器(mcu)、pld、cpl、fpga、asic 或其它符合ieee1149.1 規(guī)范的芯片。ieee1149.1 標(biāo)準(zhǔn)中規(guī)定對應(yīng)于數(shù)字集成電路芯片的每個(gè)引腳都設(shè)有一個(gè)移位寄存單元,稱為邊界掃描單元bsc。它將jtag 電路與內(nèi)核邏輯電路聯(lián)系起來

21、,同時(shí)隔離內(nèi)核邏輯電路和芯片引腳。由集成電路的所有邊界掃描單元構(gòu)成邊界掃描寄存器bsr。邊界掃描寄存器電路僅在進(jìn)行jtag 測試時(shí)有效,在集成電路正常工作時(shí)無效,不影響集成電路的功能。jtag編程方式對cpld和fpga器件都支持,用于cpld器件的下載文件是pof文件。jtag下載電路如圖3.6所示。 圖3.6 jtag下載電路jtag下載電路的10針接口引腳定義為。1引腳為tck時(shí)鐘,2引腳接地,3引腳tdo為測試數(shù)據(jù)輸出(數(shù)據(jù)輸出,來自器件),4引腳接電源電壓,5引腳tms為測試模式選擇(編程使能),nc為no-connect。9引腳tdi為測試數(shù)據(jù)輸入(數(shù)據(jù)輸入到器件),10引腳接地。

22、3.5電源電路電路的設(shè)計(jì) 本設(shè)計(jì)中的核心器件為max7000s系列的epm7128slc84,i/o口電壓vccio和核心電壓vccint均支持正5v,因此在本設(shè)計(jì)中統(tǒng)一給i/o端口和內(nèi)核提供+5v的電壓。 圖3.7 電源電路電源電路是由電源變壓器t、橋堆、濾波電容c11、c13、c15、c17及集成三端穩(wěn)壓電路7805以及保險(xiǎn)絲組成,其電路圖如圖3.7所示。電源的輸出為+5v輸出。本系統(tǒng)采用7805穩(wěn)壓電路下面介紹電原各部分參數(shù)的整定方法:1變壓器次極電壓估算(以便選取合適的變壓器):由于穩(wěn)壓管要正常工作時(shí)輸入端的電壓必需要比輸出端高2.5v時(shí)才能使穩(wěn)壓管穩(wěn)定工作??紤]到市網(wǎng)交流電壓的波動(dòng)情

23、況,在市網(wǎng)電壓為200v時(shí)也能正常工作,則有220/200*vac要大于8.0,所以vac必需要大于8.8v,即交流變壓器的負(fù)邊輸出電壓應(yīng)該高于8.8v,在本設(shè)計(jì)中選取9v。2變壓器輸入功率的計(jì)算:1 假設(shè)負(fù)載電流為500ma,若輸出電壓為5v,則有效功率為5v*0.5a=2.5w。2 正常情況下變壓器輸出功率約為9v*1.2*1.5a=5.4w,當(dāng)市網(wǎng)電壓升到250v時(shí),變壓器的輸出功率為5.4w*250/220=6.2w。3 小型電源變壓器的效率一般為75%左右。因此電源變壓器的輸入功率為6.2w/0.75=8.27w。3慮波電容參數(shù)的選取:1 假設(shè)負(fù)載電流為500ma,若輸出電壓為7.5

24、v,則等效負(fù)載電阻為15。2 電源頻率為50hz,則t=0。02s,根據(jù)crl=(35)t/2,則c=(35)t/2/rl=20003300uf。在本設(shè)計(jì)中取2200uf。 3. 電容耐壓應(yīng)大于1.42*vac即vc=1.42*9*250/220=14.5v(其中250/220是考慮市網(wǎng)電源電壓過高時(shí)的情況。在本設(shè)計(jì)中電容耐壓值取16v。3.6 epm7128slc84器件介紹本次設(shè)計(jì)的核心器件采用altera公司的cpld可編程器件。altera公司的max7000s系列cpld有著較高的性價(jià)比。max7000s系列是基于altera第二代max架構(gòu)的高密度、高性能的pld器件。max700

25、0器件包含32256個(gè)可聯(lián)結(jié)成16個(gè)宏單元組的邏輯陣列塊的宏單元。epm7128slc84是max7000s家族成員之一,它有如下的特點(diǎn):可用邏輯門個(gè)數(shù)為2500門,128個(gè)宏單元,8個(gè)邏輯陳列塊,最大用戶可用i/o口100個(gè),支持5v在系統(tǒng)編程和符合ieee.std.1179r的jtag下載接口,內(nèi)建邊界掃描測試電路,支持片上調(diào)試epm7128slc84-15的封裝圖如圖3.8所示 圖3.8 epm7128slc的plcc封裝4 cpld 編程設(shè)計(jì)4.1系統(tǒng)信號的定義及頂層模塊整個(gè)系統(tǒng)輸入、輸出信號的定義:sysclk:系統(tǒng)的時(shí)鐘信號,由外部有源晶振產(chǎn)生,頻率為2.048mhz;mode:外

26、接按鍵,模式選擇信號,mode=0時(shí)為時(shí)鐘模式,mode=1時(shí)為設(shè)定鬧鐘模式,mode=2時(shí)為手動(dòng)設(shè)定時(shí)間模式;set:外接按鍵,用于在手動(dòng)設(shè)置時(shí)間時(shí)選擇是調(diào)整小時(shí)還是分鐘;若長時(shí)間按住該鍵,還可以使秒信號清零,用于精確調(diào)整時(shí)間;change:外接按鍵,手動(dòng)調(diào)整時(shí)間,每按一次計(jì)數(shù)器加1;若長時(shí)間按住則連續(xù)快速加1,用于快速調(diào)時(shí)和定時(shí);alarm:接蜂鳴器,輸出到蜂鳴器的信號,用于產(chǎn)生鬧鈴音和報(bào)時(shí)音;鬧鈴音為持續(xù)20s的急促的“嘀嘀嘀”音,整點(diǎn)報(bào)時(shí)音為“嘀嘀嘀-嘟”四短一長音;dataout:輸出信號,輸出顯示時(shí)間的數(shù)碼管顯示的段碼。include clk_generate.v include

27、time_mode0.vinclude mode_select.vinclude fast_settime.vinclude alarm_set.vinclude alarm.vinclude decoder_7seg.vinclude display.vmodule clock;clk_generate clk_generate(); /調(diào)用時(shí)鐘節(jié)拍產(chǎn)生模塊time_mode0 time_mode0(); / 秒、分、時(shí)計(jì)時(shí)與時(shí)間調(diào)整模塊mode_select mode_select(); /調(diào)用模式選擇功能模塊fast_settime fast_settime(); /調(diào)用快速時(shí)間設(shè)置功能

28、模塊alarm_set alarm_set(); /調(diào)用鬧鈴時(shí)間設(shè)置模塊alarm alarm(); /調(diào)用鬧鈴與整點(diǎn)報(bào)時(shí)模塊decoder_7seg decoder_7seg(); /調(diào)用7段譯碼模塊display display(); /調(diào)用顯示模塊endmodule4.2 時(shí)鐘節(jié)拍產(chǎn)生模塊 由于整個(gè)系統(tǒng)只有一個(gè)晶體振蕩器,但是設(shè)計(jì)需要不同的時(shí)鐘信號,因此需要設(shè)計(jì)一個(gè)分頻進(jìn)程,對系的的有源晶振產(chǎn)生的2.048mhz時(shí)鐘進(jìn)行分頻,產(chǎn)生需要的時(shí)鐘節(jié)拍。在本設(shè)計(jì)中總共用到如下幾個(gè)時(shí)鐘節(jié)拍:1hz的時(shí)鐘clk,4hz的時(shí)鐘clk_4hz,1khz的時(shí)鐘信號clk_1k,和50hz的時(shí)鐘displa

29、yclk。其中clk節(jié)拍用于產(chǎn)生秒計(jì)時(shí)信號,在每個(gè)clk的上升沿到來時(shí)秒計(jì)數(shù)器加1。clk_4hz節(jié)拍用于快速調(diào)整時(shí)間,當(dāng)長時(shí)間按下chang按鍵時(shí),當(dāng)前設(shè)置的時(shí)鐘快速增加。clk_1k節(jié)拍用于鬧鈴音的產(chǎn)生,displayclk時(shí)鐘節(jié)拍是頻率為50hz的信號,由于本設(shè)計(jì)中顯示部分采用led動(dòng)態(tài)顯示的方式,因此必需要有一個(gè)掃描信號對6位的led的每個(gè)位進(jìn)行輪流選通點(diǎn)亮。分頻進(jìn)程的原理是在cpld內(nèi)部設(shè)置一個(gè)分頻計(jì)數(shù)器和一個(gè)觸發(fā)器,當(dāng)計(jì)數(shù)到分頻值時(shí)觸發(fā)器進(jìn)行翻轉(zhuǎn),因此只要設(shè)置不同的分頻計(jì)數(shù)器的計(jì)數(shù)值就可以得到不同的時(shí)鐘節(jié)拍。在cpld內(nèi)部設(shè)置分頻計(jì)數(shù)器的缺點(diǎn)是,cpld的觸發(fā)器資源有限,設(shè)置計(jì)數(shù)器

30、對資源的占用比較大,因此盡量可能少用一些時(shí)鐘節(jié)拍,或者盡量使需要使用的時(shí)鐘節(jié)拍相同,還有一種方法是利用兩個(gè)已有的時(shí)鐘信號進(jìn)行邏輯運(yùn)算從面獲得想要的時(shí)鐘節(jié)拍。系統(tǒng)的分頻進(jìn)程如下:module clk_generate(reset,sysclk,clk,clk_4hz,clk_1k,displayclk);input sysclk,reset;output clk,clk_4hz,clk_1k,displayclk;reg clk,clk_4hz,clk_1k,displayclk;reg 20:0div_count1; /分頻時(shí)鐘計(jì)數(shù)器,用于產(chǎn)生周期為1s的時(shí)鐘信號reg 19:0div_cou

31、nt2; /分頻時(shí)鐘計(jì)數(shù)器,用于產(chǎn)生頻率為4hz的時(shí)鐘信號reg 11:0div_count3; /分頻時(shí)鐘計(jì)數(shù)器,用于產(chǎn)生頻率為1khz的時(shí)鐘信號reg 14:0divclk_cnt; /分頻時(shí)鐘計(jì)數(shù)器,用于產(chǎn)生50hz的數(shù)碼管掃描信號displayclkalways (posedge sysclk)begin if (reset) div_count1=21d0000000; if (div_count1=21d1024000) /1024000/2048000=0.5s begin clk=clk; /clk為周期為1s的時(shí)鐘信號 div_count1=21d0000000; end e

32、lse begin div_count1=div_count1+1b1; endendalways (posedge sysclk)begin if (reset) div_count2=20d000000; if (div_count2=20d256000) /512000/2048000=0.25s begin clk_4hz=clk_4hz; /clk_4hz為4hz的時(shí)鐘信號 div_count2=20d000000; end else begin div_count2=div_count2+1b1; endendalways (posedge sysclk)begin /產(chǎn)生周期為5

33、0hz和1khz的時(shí)鐘節(jié)拍endendmodule4.3模式選擇功能模塊 本設(shè)計(jì)是多功能數(shù)字鐘,實(shí)現(xiàn)的功能是以數(shù)字形式顯示時(shí)、分、秒的時(shí)間, 能進(jìn)行手動(dòng)快校時(shí)、快校分或慢校時(shí)、慢校分。該多功能電子共有3種模式。分別為:模式0為正常時(shí)鐘模式,模式1為設(shè)置鬧鈴功能,模式2為手動(dòng)校時(shí)功能。多功能電子鐘共有三個(gè)按鍵,一個(gè)mode模式選擇鍵,用于選擇相應(yīng)的模式,一個(gè)set時(shí)間選擇鍵,用于選擇當(dāng)前設(shè)定的是分鐘或者是小時(shí),一個(gè)change鍵,用于給當(dāng)前值加1,當(dāng)長時(shí)間按住change時(shí)當(dāng)前值連續(xù)快速加1,用于快速設(shè)定時(shí)間。模式選擇進(jìn)程如下所示。module mode_select( clk,mode,set

34、,change,count1,counta,count2,countb,led_min,led_hour,m);input mode,set,change,clk;output count1,counta,count2,countb,led_min,led_hour,m;regbool,count1,counta,count2,countb;reg 1:0m;reg led_min,led_hour;always (posedge mode) begin if (m=2) m=0; else m=m+1; endalways (posedge set)bool=bool;always (pos

35、edge clk)begin case(m) 2: begin if (bool) begin /手動(dòng)設(shè)定分鐘 count1=change; led_min,led_hour=2b10; end else begin /手動(dòng)設(shè)定小時(shí) counta=change; led_min,led_hour=2b01; end count2,countb=2b00; end 1:begin if (bool) begin /設(shè)定鬧鈴分鐘 count2=change; led_min,led_hour=2b10; end else begin /設(shè)定鬧鈴小時(shí) countb=change; led_min,l

36、ed_hour=2b01; end count2,countb=2b00; end default: ount1,count2,counta,countb,led_min,led_hour=0; /正常時(shí)鐘狀態(tài) endcaseendendmodule4.4快速時(shí)間設(shè)置功能模塊 多功能數(shù)字鐘要求有快速時(shí)間設(shè)置功能和慢設(shè)置功能。所謂快速時(shí)間設(shè)置功能是指一直按住按鍵不放時(shí),當(dāng)前值能夠快速的增加;而慢設(shè)置是指每按一次按鍵則當(dāng)前值向上增一。快速時(shí)間設(shè)置進(jìn)程如下所示。快速時(shí)間設(shè)置進(jìn)程,功能描述:長時(shí)間按下“change”鍵,則分別生成num1、num2、num3、num4信號用于連續(xù)快速加1。當(dāng)長時(shí)間按下

37、change按鍵后,利用系統(tǒng)的clk_4hz對計(jì)數(shù)器進(jìn)行快速加一處理。如果不是長時(shí)間按下change按鍵的話則每按一次change按建鍵就對相應(yīng)的寄存器的值加一處理。(本段的veriloghdl代碼詳見符件)4.5秒、分、時(shí)計(jì)時(shí)與時(shí)間調(diào)整模塊秒計(jì)時(shí)程序采用周期為1s的基準(zhǔn)時(shí)鐘信號clk,在每個(gè)clk時(shí)鐘信號的上升沿對秒寄存器加1,當(dāng)長時(shí)間按下set按鍵后對秒寄存器進(jìn)行清零,該功能用于準(zhǔn)確校時(shí)。ct1為分計(jì)時(shí)的同步時(shí)鐘,在每個(gè)ct1時(shí)鐘信號的上升沿對分寄存器加1。當(dāng)未長時(shí)間按下change按鍵時(shí),ct1時(shí)鐘是周期為60秒的時(shí)鐘信號。當(dāng)長時(shí)間按下change后,ct1時(shí)鐘變?yōu)橹芷跒?hz的時(shí)鐘信號

38、,該信號用于快速時(shí)間校準(zhǔn)功能。cta時(shí)鐘是周期為60分鐘的時(shí)鐘信號,在每個(gè)cta時(shí)鐘信號的上升沿對小時(shí)寄存器加1,當(dāng)當(dāng)前設(shè)置值為小時(shí)且長時(shí)間按下change按鍵后,cta時(shí)鐘變?yōu)橹芷跒?hz的時(shí)鐘信號,該信號用于快速時(shí)間校準(zhǔn)功能。module time_mode0(clk,set,m,count1,ct1,counta,m_clk,h_clk,cta,sec1,min1,hour1);input clk,set,m,count1,counta,ct1,cta,m_clk,h_clk;inout 7:0sec1,min1,hour1;reg minclk,hclk;reg 7:0sec1,min

39、1,hour1;wire m_clk,h_clk;always (posedge clk)begin if (!(sec1 8d59) | set & (!m) /按住set鍵一段時(shí)間,秒信號自動(dòng)清零 sec1 7:0 = 8h00; if (!(set & (!m) minclk =1b1; else begin if (sec13:0=4b1001) begin sec13:0=4b0000; sec17:4=sec17:4 + 1b1; end else begin sec13:0 = sec13:0 + 1b1; minclk=1b0; end endendalways (posedg

40、e ct1) /分鐘計(jì)時(shí)進(jìn)程begin if (min1 = 8d59) begin min1 = 0; hclk = 1; end else begin if (min13:0 =9) begin min13:0 =0; min17:4=min17:4 + 1; end else begin min13:0 =min13:0 +1; hclk =0; end endendalways (posedge cta) /小時(shí)計(jì)時(shí)與調(diào)整進(jìn)程beginif (hour1=8h23) hour1=0;else begin /此段源碼見附件 endendendmodule4.6鬧鈴時(shí)間設(shè)置模塊module

41、 alarm_set(ct2,ctb,amin,ahour);input ct2,ctb;output 7:0amin,ahour;reg 7:0amin,ahour;always (posedge ct2)beginif (amin=8d59) amin=0;else if (amin3:0=9) begin amin3:0=0; amin7:4=amin7:4 + 1; end else amin3:0=amin3:0 + 1;endalways (posedge ctb)beginif (ahour=8d23) ahour=0;else if (ahour3:0=9) begin aho

42、ur3:0=0; ahour7:4=ahour7:4 + 1; end else ahour3:0=ahour3:0 + 1; endendmodule4.7鬧鈴與整點(diǎn)報(bào)時(shí)模塊鬧鈴的功能是實(shí)現(xiàn)當(dāng)?shù)竭_(dá)預(yù)設(shè)的時(shí)間點(diǎn)時(shí)產(chǎn)生為時(shí)20s的“嘀嘀嘀嘀”急促短音。整點(diǎn)報(bào)時(shí)的功能是實(shí)現(xiàn)在每個(gè)整點(diǎn)的5秒鐘前產(chǎn)生整點(diǎn)報(bào)時(shí)音,報(bào)時(shí)音為“嘀嘀嘀-嘟”4短一長音。module alarm(sysclk,clk_1k,min1,hour1,amin,ahour,alarm1,alarm2);input sysclk,clk_1k;input 7:0min1,hour1,amin,ahour;output alarm1,a

43、larm2;reg alarm1,alarm2;reg 7:0sec1;always (posedge sysclk)beginif (min1=amin)&(hour1=ahour) if (sec18d20) alarm1=1; else alarm1=0;else alarm18d54)|(!(min1|sec1) if (sec18d54) alarm2=clk_1k; / 產(chǎn)生長音 else alarm2=clk_1k; /產(chǎn)生短音else alarm2=0;endendmodule4.8 7段顯示譯碼模塊由于時(shí)鐘計(jì)數(shù)模式采用的是bcd碼計(jì)數(shù)方式,而顯示采用的8段發(fā)光二極管,每個(gè)段代

44、表一位二進(jìn)制數(shù),在本系統(tǒng)中采用的是共陽極接法,因此7段碼為共陽編碼。因此在數(shù)碼管上正常顯示時(shí)間的話,必需要對在三個(gè)模式下的時(shí)、分、秒進(jìn)行譯碼才能得到正常的顯示。module decoder_7seg(sysclk,clk,clk_4hz,clk_1k,m,alarm1,alarm2,ahour,amin,min1,hour1,sec1,hour_msb,hour_lsb,min_msb,min_lsb,sec_msb,sec_lsb);input sysclk,clk,clk_4hz,clk_1k, alarm1,alarm2;input 7:0ahour,amin,min1,hour1,se

45、c1;input 1:0m;output 7:0hour_msb,hour_lsb,min_msb,min_lsb,sec_msb,sec_lsb;reg 7:0hour,min,sec,hour_msb,hour_lsb,min_msb,min_lsb,sec_msb,sec_lsb;wire led_alarm;always (posedge sysclk)begin case(m) 3b00: /在模式0下,將正常計(jì)數(shù)值賦值給寄存器,等待譯碼 begin hour=hour1; min=min1; sec=sec1; end 3b01: /在模式1下,將鬧鈴時(shí)間設(shè)置值賦值給寄存器,等待譯

46、碼 begin hour=ahour; min=amin; sec=8hzz; end 3b10: /在模式2下,將手動(dòng)計(jì)數(shù)值賦值給寄存器,等待譯碼 begin hour=hour1; min=min1; sec=8hzz; end endcaseassign led_alarm=(ahour|amin)?1:0; /指示是否進(jìn)行了鬧鈴定時(shí)assign alarm=(alarm1)?clk_1k&clk_4hz:0)|alarm2;/產(chǎn)生鬧鈴音或整點(diǎn)報(bào)時(shí)音endalways ( sysclk )begincase (hour7:4)4b0000 : hour_msb=8hc0; /數(shù)字0的共陽

47、編碼賦值給小時(shí)的十位4b0001 : hour_msb=8hf9; /數(shù)字1的共陽編碼賦值給小時(shí)的十位4b0010 : hour_msb=8ha4; /數(shù)字2的共陽編碼賦值給小時(shí)的十位4b0011 : hour_msb=8hb0; /數(shù)字3的共陽編碼賦值給小時(shí)的十位4b0100 : hour_msb=8h99; /數(shù)字4的共陽編碼賦值給小時(shí)的十位4b0101 : hour_msb=8h92; /數(shù)字5的共陽編碼賦值給小時(shí)的十位4b0110 : hour_msb=8h82; /數(shù)字6的共陽編碼賦值給小時(shí)的十位4b0111 : hour_msb=8hf8; /數(shù)字7的共陽編碼賦值給小時(shí)的十位4b1000 : hour_msb=8h80; /數(shù)字8的共陽編碼賦值給小時(shí)的十位4b1001 : hour_msb=8h90; /數(shù)字9的共陽編碼賦值給小時(shí)的十位endcasecase (hour3:0)4b0000 : hour_lsb=8hc0; /數(shù)字0的共陽編碼賦值給小時(shí)的個(gè)位4b0001 : hour_lsb=8hf9; /數(shù)字1的共陽編碼賦值給小時(shí)的個(gè)位4b0010 : hour_lsb=8ha4; /數(shù)字2的共陽編碼賦值給小時(shí)的個(gè)位4b0011 : hour_lsb=8hb0; /數(shù)字3的共陽編碼賦值給小時(shí)的個(gè)

溫馨提示

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

評論

0/150

提交評論