【正文】
基于FPGA的數(shù)字時(shí)鐘的設(shè)計(jì)課 題: 基于FPGA的數(shù)字時(shí)鐘的設(shè)計(jì) 綜 述近年來(lái)隨著數(shù)字技術(shù)的迅速發(fā)展,各種中、大規(guī)模集成電路在數(shù)字系統(tǒng)、控制系統(tǒng)、信號(hào)處理等方面都得到了廣泛的應(yīng)用。這就迫切要求理工科大學(xué)生熟悉和掌握常用中、大規(guī)模集成電路功能及其在實(shí)際中的應(yīng)用方法,除通過(guò)實(shí)驗(yàn)教學(xué)培養(yǎng)數(shù)字電路的基本實(shí)驗(yàn)方法、分析問(wèn)題和故障檢查方法以及雙蹤示波器等常用儀器使用方法等基本電路的基本實(shí)驗(yàn)技能外,還必須培養(yǎng)大學(xué)生工程設(shè)計(jì)和組織實(shí)驗(yàn)?zāi)芰?。本次課程設(shè)計(jì)的目的在于培養(yǎng)學(xué)生對(duì)基本電路的應(yīng)用和掌握,使學(xué)生在實(shí)驗(yàn)原理的指導(dǎo)下,初步具備基本電路的分析和設(shè)計(jì)能力,并掌握其應(yīng)用方法;自行擬定實(shí)驗(yàn)步驟,檢查和排除故障 、分析和處理實(shí)驗(yàn)結(jié)果及撰寫實(shí)驗(yàn)報(bào)告的能力。綜合實(shí)驗(yàn)的設(shè)計(jì)目的是培養(yǎng)學(xué)生初步掌握小型數(shù)字系統(tǒng)的設(shè)計(jì)能力,包括選擇設(shè)計(jì)方案,進(jìn)行電路設(shè)計(jì)、安裝、調(diào)試等環(huán)節(jié),運(yùn)用所學(xué)知識(shí)進(jìn)行工程設(shè)計(jì)、提高實(shí)驗(yàn)技能的實(shí)踐。數(shù)字電子鐘是一種計(jì)時(shí)裝置,它具有時(shí)、分、秒計(jì)時(shí)功能和顯示時(shí)間功能;具有整點(diǎn)報(bào)時(shí)功能。本次設(shè)計(jì)我查閱了大量的文獻(xiàn)資料,學(xué)到了很多關(guān)于數(shù)字電路方面的知識(shí),并且更加鞏固和掌握了課堂上所學(xué)的課本知識(shí),使自己對(duì)數(shù)字電子技術(shù)有了更進(jìn)一步的認(rèn)識(shí)和了解。 課題要求本課程是電子與信息類專業(yè)的專業(yè)的專業(yè)基礎(chǔ)必修課——“數(shù)字電路”的配套實(shí)驗(yàn)課程。目的在于培養(yǎng)學(xué)生的理論聯(lián)系實(shí)際,分析和解決問(wèn)題的能力。通過(guò)本課程設(shè)計(jì),使學(xué)生在理論設(shè)計(jì)、計(jì)算機(jī)仿真、指標(biāo)調(diào)測(cè)、故障排除等方面得到進(jìn)一步的訓(xùn)練,加強(qiáng)學(xué)生的實(shí)踐能力。學(xué)生通過(guò)設(shè)計(jì)、仿真、調(diào)試、撰寫設(shè)計(jì)報(bào)告等過(guò)程,培養(yǎng)學(xué)生的動(dòng)手能力和嚴(yán)謹(jǐn)?shù)墓ぷ髯黠L(fēng)。1)根據(jù)課題要求,復(fù)習(xí)鞏固數(shù)字電路有關(guān)專業(yè)基礎(chǔ)知識(shí);2)掌握數(shù)字電路的設(shè)計(jì)方法,特別是熟悉模塊化的設(shè)計(jì)思想;3) 掌握QUARTUS2軟件的使用方法。4) 熟練掌握EDA工具的使用,特別是原理圖輸入,波形仿真,能對(duì)仿真波形進(jìn)行分析;5) 具備EDA技術(shù)基礎(chǔ),能夠熟練使用VHDL語(yǔ)言進(jìn)行編程,掌握層次化設(shè)計(jì)方法。6) 掌握多功能數(shù)字鐘的工作原理,學(xué)會(huì)不同進(jìn)制計(jì)數(shù)器及時(shí)鐘控制電路的設(shè)計(jì)方法。7) 能根據(jù)設(shè)計(jì)要求對(duì)設(shè)計(jì)電路進(jìn)行仿真和測(cè)試。8) 掌握將所設(shè)計(jì)軟件下載到FPGA芯片的下載步驟等等。9) 將硬件與軟件連接起來(lái),調(diào)試電路的功能?;竟δ埽耗苓M(jìn)行正常的時(shí)、分、秒計(jì)時(shí)功能,分別由6個(gè)數(shù)碼管顯示24小時(shí),60分鐘,60秒鐘的計(jì)數(shù)器顯示。附加功能:1)能利用硬件部分按鍵實(shí)現(xiàn)“校時(shí)”“校分”“清零”功能; 2)能利用蜂鳴器做整點(diǎn)報(bào)時(shí):當(dāng)計(jì)時(shí)到達(dá)59’59’’時(shí)開始報(bào)時(shí),鳴叫時(shí)間1秒鐘; 3)定時(shí)鬧鈴:本設(shè)計(jì)中設(shè)置的是在七點(diǎn)時(shí)進(jìn)行鬧鐘功能,鳴叫過(guò)程中,能夠進(jìn)行中斷鬧鈴工作。本人工作:負(fù)責(zé)軟件的編程與波形的仿真分析。 方案設(shè)計(jì)與分析 時(shí)鐘功能,具有顯示時(shí)、分、秒的功能; 具有整點(diǎn)報(bào)時(shí)功能,在整點(diǎn)時(shí)使用蜂鳴器進(jìn)行報(bào)時(shí),具有鬧鐘功能,鳴叫過(guò)程中,具有中斷鬧鈴功能。數(shù)字鐘一般是由振蕩器、分頻器、計(jì)數(shù)器、譯碼器、顯示器等幾部分組成。這些都是數(shù)字電路中應(yīng)用最廣泛的基本電路,本設(shè)計(jì)分模塊設(shè)計(jì)實(shí)現(xiàn)各部分功能,采用軟件編程控制FPGA芯片內(nèi)部產(chǎn)生振動(dòng)周期為1s的脈沖。并將信號(hào)送入計(jì)數(shù)器進(jìn)行計(jì)算,并把累加的結(jié)果以“時(shí)”、“分”、“秒”的數(shù)字顯示出來(lái)?!懊搿钡娘@示由兩級(jí)計(jì)數(shù)器和譯碼器組成的六十進(jìn)制計(jì)數(shù)電路實(shí)現(xiàn);“分”的顯示電路“秒”相同,“時(shí)”的顯示由兩級(jí)計(jì)數(shù)器和譯碼器組成的二十四進(jìn)制電路來(lái)實(shí)現(xiàn)。所有計(jì)時(shí)結(jié)果由六位數(shù)碼管顯示。數(shù)字電子鐘由振蕩器、分頻器 計(jì)數(shù)器、譯碼顯示、報(bào)時(shí)等電路組成。振蕩器產(chǎn)生穩(wěn)定的高頻脈沖信號(hào),作為數(shù)字鐘的時(shí)間基準(zhǔn),然后經(jīng)過(guò)分頻器輸出標(biāo)準(zhǔn)秒脈沖。秒計(jì)數(shù)器滿60后向分計(jì)數(shù)器進(jìn)位,分計(jì)數(shù)器滿60后向小時(shí)計(jì)數(shù)器進(jìn)位,小時(shí)計(jì)數(shù)器按照“24翻1”規(guī)律計(jì)數(shù)。計(jì)滿后各計(jì)數(shù)器清零,重新計(jì)數(shù)。計(jì)數(shù)器的輸出分別經(jīng)譯碼器送數(shù)碼管顯示,計(jì)時(shí)出現(xiàn)誤差時(shí),可以用校時(shí)電路“校時(shí)”“校分”“清零”。秒脈沖可以通過(guò)分頻電路得到。通過(guò)報(bào)時(shí)設(shè)計(jì)模塊可以實(shí)現(xiàn)整點(diǎn)報(bào)時(shí)及定時(shí)鬧鈴,譯碼顯示由七段譯碼器完成,顯示由數(shù)碼管構(gòu)成,采用的是動(dòng)態(tài)顯示方式。數(shù)碼管動(dòng)態(tài)顯示:動(dòng)態(tài)掃描電路將計(jì)數(shù)器輸出的8421BGD碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且輸出數(shù)碼管的片選信號(hào)和為選信號(hào)。所謂動(dòng)態(tài)掃描顯示方式是在顯示某一位LED 顯示塊的數(shù)據(jù)的時(shí)候,讓其它位不顯示,然后再顯示下一位的數(shù)據(jù)。只要保證每一位顯示的時(shí)間間隔不要太大,利用人眼的視覺(jué)暫留的現(xiàn)象,就可以造成各位數(shù)據(jù)同時(shí)顯示的假象。一般每一位的顯示時(shí)間為1~10ms。 單元電路的設(shè)計(jì),仿真與分析(1)分頻模塊(fenpin)1)程序:library ieee。use 。entity fenpin is port(clk6:in std_logic。 q1000,q5,q1:out std_logic)。end fenpin。architecture ccc_arc of fenpin issignal x:std_logic。begin process(clk6) variable t:integer range 0 to 24999。 begin if clk639。event and clk6=39。139。 then if t24999 then t:=t+1。 else t:=0。 x=not x。 end if。 end if。end process。q1000=x。process(x)variable t2:integer range 0 to 999。variable y:std_logic。begin if x39。event and x=39。139。 then if t2999 then t2:=t2+1。 q1=39。039。