多功能標(biāo)準時鐘設(shè)計_第1頁
多功能標(biāo)準時鐘設(shè)計_第2頁
多功能標(biāo)準時鐘設(shè)計_第3頁
多功能標(biāo)準時鐘設(shè)計_第4頁
多功能標(biāo)準時鐘設(shè)計_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、word.多功能標(biāo)準時鐘設(shè)計摘要時鐘對人們的日常工作、生活、學(xué)習(xí)都有著非常重要的作用,有了統(tǒng)一的時間,才能使生活井然有序。多功能時鐘能更加準確提供標(biāo)準的時間。完整的顯示定時、倒計時、校時、日歷等多功能為人們的生活提供方便。具體設(shè)計要求如下:用單片機編程來實現(xiàn)輸入信號的計時、驅(qū)動顯示等功能,具有年、月、日、星期、時、分、秒顯示功能。關(guān)鍵詞設(shè)計譯碼 驅(qū)動 數(shù)碼管顯示電路.word.目錄1.引言123.多功能標(biāo)準時鐘及FPGA簡介33.1時鐘的開展33.2 FPGA簡介33.3電子時鐘的工作原理34.多功能標(biāo)準時鐘各功能模塊實現(xiàn)54.1時鐘問題54.2時鐘的控制系統(tǒng)64.3主控制模塊 maincon

2、trol64.4時間及其設(shè)置模塊 time_auto_and_set74.5秒表模塊 stopwatch144.6日期顯示與設(shè)置模塊 date_main144.7鬧鐘模塊alarmclock154.8分頻模塊 fdiv164.9頂層模塊圖165.附錄1932參考文獻33.word.1. 引 言隨著科學(xué)技術(shù)的迅猛開展,電子工業(yè)界經(jīng)歷了巨大的飛躍。集成電路的設(shè)計正朝著速度快、性能高、容量大、體積小和微功耗的方向開展?;谶@種情況,可編程邏輯器件的出現(xiàn)和開展大大改變了傳統(tǒng)的系統(tǒng)設(shè)計方法??删幊踢壿嬈骷拖鄳?yīng)的設(shè)計技術(shù)表達在三個主要方面:一是可編程邏輯器件的芯片技術(shù);二是適用于可邏輯編程器件的硬件編程

3、技術(shù),三是可編程邏輯器件設(shè)計的EDA開發(fā)工具,它主要用來進行可編程邏輯器件應(yīng)用的具體實現(xiàn)。在本實驗中采用了集成度較高的FPGA 可編程邏輯器件, 選用了VHDL硬件描述語言和MAX + p lus開發(fā)軟件。VHDL硬件描述語言在電子設(shè)計自動化( EDA)中扮演著重要的角色。由于采用了具有多層次描述系統(tǒng)硬件功能的能力的“自頂向下( Top - Down)和基于庫(L ibrary - Based)的全新設(shè)計方法,它使設(shè)計師們擺脫了大量的輔助設(shè)計工作,而把精力集中于創(chuàng)造性的方案與概念構(gòu)思上,用新的思路來開掘硬件設(shè)備的潛力,從而極大地提高了設(shè)計效率,縮短了產(chǎn)品的研制周期。MAX + p lus是集成

4、了編輯器、仿真工具、檢查/分析工具和優(yōu)化/綜合工具的這些所有開發(fā)工具的一種集成的開發(fā)環(huán)境,通過該開發(fā)環(huán)境能夠很方便的檢驗設(shè)計的仿真結(jié)果以及建立起與可編程邏輯器件的管腳之間對應(yīng)的關(guān)系。.word.2. 方案論證方案1.利用可編程邏輯器件PLD實現(xiàn)??删幊踢壿嬈骷LD具有集成度高、速度快、功耗小、可靠性高等優(yōu)點,且EDA軟件的功能和時序仿真功能使得電路的調(diào)試變得十分方便,可以很好的完成時鐘的功能。方案2.利用單片機內(nèi)部具有的計數(shù)器實現(xiàn)時鐘功能。以12MHZ晶振為例,通過計算可知,使定時器每50ms產(chǎn)生一次中斷,當(dāng)產(chǎn)生20次中斷后秒單元將加一,以此類推,從而實現(xiàn)時分秒的實現(xiàn),并加以顯示,這種方法存

5、在由于系統(tǒng)晶振誤差、溫漂、中斷響應(yīng)時間的不確定性。斷電也會出現(xiàn)時間的停止。通過以上兩種方案的比擬,決定采用方案1,因為方案一實現(xiàn)簡單,且易于調(diào)試,方便。.word.鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能,諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時播送、定時啟閉路燈等。所有這些,都是以鐘表數(shù)字化為根底的。因此,研究電子時鐘及擴大其應(yīng)用,有非?,F(xiàn)實的意義。數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命,因此得到了廣泛的使用。電子時鐘從原理上講是一種典型的數(shù)字電路,其中

6、包括了組合邏輯電路和時序電路。因此,我們此次設(shè)計與制做電子時鐘就是為了了解數(shù)字鐘的原理,從而學(xué)會制作數(shù)字鐘。而且通過時鐘的制作進一步了解各種在制作中用到的中小規(guī)模集成電路的作用及使用方法,且由于電子時鐘包括組合邏輯電路和時序電路,通過它可以進一步學(xué)習(xí)與掌握各種組合邏輯電路與時序電路的原理與使用方法。3.2 FPGA簡介PLD/FPGA是近幾年集成電路中開展最快的產(chǎn)品。由于PLD性能的高速開展以及設(shè)計人員自身能力的提高,可編程邏輯器件供給商將進一步擴大可編程芯片的領(lǐng)地,將復(fù)雜的專用芯片擠向高端和超復(fù)雜應(yīng)用。據(jù)IC Insights的數(shù)據(jù)顯示,PLD市場從1999年的29億美元增長到去年的56億美

7、元,幾乎翻了一番。Matas預(yù)計這種高速增長局面以后很難出現(xiàn),但可編程邏輯器件依然是集成電路中最具活力和前途的產(chǎn)業(yè)。可編程邏輯器件的兩種主要類型是現(xiàn)場可編程門陣列FPGA和復(fù)雜可編程邏輯CPLD。 在這兩類可編程邏輯器件中,F(xiàn)PGA提供了最高的邏輯密度、最豐富的特性和最高的性能。 現(xiàn)在最新的FPGA器件,如Xilinx Virtex"系列中的局部器件,可提供八百萬"系統(tǒng)門"相對邏輯密度。這些先進的器件還提供諸如內(nèi)建的硬連線處理器如IBM Power PC、大容量存儲器、時鐘管理系統(tǒng)等特性,并支持多種最新的超快速器件至器件device-to-device信號技術(shù).F

8、PGA被應(yīng)用于范圍廣泛的應(yīng)用中,從數(shù)據(jù)處理和存儲,以及到儀器儀表、電信和數(shù)字信號處理等。3.3電子時鐘的工作原理按鍵消抖 可 編功能鍵 程調(diào)整鍵1 邏調(diào)整鍵2 輯 器 件 CPLD/FPGA LED顯示模塊圖3-1電子時鐘的工作原理功能鍵用來選擇不同的工作模式:時間正常顯示功能、時間調(diào)整與顯示、秒表功能、鬧鐘設(shè)置與查看、日期顯示、日期調(diào)整與設(shè)置。調(diào)整鍵1:主要用于鬧鐘設(shè)置、日期顯示與調(diào)整、秒表、時間調(diào)整與設(shè)置中的位置選擇按鈕,與功能鍵配合使用。2號鍵功能模式,即時間調(diào)整與設(shè)置時,用作時、分、秒的移位,按一下,將會實現(xiàn)“時-分-秒的依次移位,便于在特定位置進行調(diào)整;4號鍵功能模式,即鬧鐘設(shè)置與查

9、看時,同樣用作時、分、秒的移位,按一下,將會實現(xiàn)“時-分-秒的依次移位,便于在特定位置進行調(diào)整;6號鍵功能模式,即日期調(diào)整與設(shè)置時,用作月、日的移位,按一下,將會實現(xiàn)“月-日的依次移位,便于在特定位置進行調(diào)整。調(diào)整鍵2:主要用于鬧鐘設(shè)置、日期顯示與調(diào)整、秒表、時間調(diào)整與設(shè)置中的調(diào)整按鈕,與功能鍵配合使用。2號鍵功能模式,即時間調(diào)整與設(shè)置時,用作時、分、秒的調(diào)整,按一下,將會使得當(dāng)前調(diào)整鍵1選擇的位置數(shù)字增加1;4號鍵功能模式,即鬧鐘設(shè)置與查看時,同樣用作時、分、秒的調(diào)整,按一下,將會使得當(dāng)前調(diào)整鍵1選擇的位置數(shù)字增加1;6號鍵功能模式,即日期調(diào)整與設(shè)置時,用作月、日的移位,按一下,將會使得當(dāng)前

10、調(diào)整鍵1選擇的位置數(shù)字增加1。4.1時鐘問題無論是用離散邏輯、可編程邏輯,還是用全定制器件實現(xiàn)任何數(shù)字電路,設(shè)計不良的時鐘在極限溫度、電壓或制造工藝存在偏差的情況下將導(dǎo)致系統(tǒng)錯誤的行為,所以可靠的時鐘設(shè)計是非常關(guān)鍵的。在FPGA設(shè)計時通常采用四種時鐘:全局時鐘、門控時鐘、多級邏輯時鐘和波動式時鐘,多時鐘系統(tǒng)是這四種時鐘類型的任意組合。全局時鐘:對于一個設(shè)計工程來說,全局時鐘或同步時鐘是最簡單和最可預(yù)測的時鐘。在FPGA設(shè)計中最好的時鐘方案是:由專用的全局時鐘輸入引腳驅(qū)動單個主時鐘去控制設(shè)計工程中的每一個觸發(fā)器。FPGA一般都具有專門的全局時鐘引腳,在設(shè)計工程時應(yīng)盡量采用全局時鐘,它能夠提供器件

11、中最短的時鐘到輸出的延時。門控時鐘:在許多應(yīng)用中,整個設(shè)計工程都采用外部的全局時鐘是不可能或不實際的,所以通常用陣列時鐘構(gòu)成門控時鐘。門控時鐘常常同微處理器接口有關(guān),例如用地址線去控制寫脈沖。每當(dāng)用組合邏輯來控制觸發(fā)器時,通常都存在著門控時鐘。在使用門控時鐘時,應(yīng)仔細分析時鐘函數(shù),以防止毛刺的影響。如果設(shè)計滿足下述兩個條件,那么可以保證時鐘信號不出現(xiàn)危險的毛刺,門控時鐘就可以像全局時鐘一樣可靠工作:驅(qū)動時鐘的邏輯必須只包含一個“與門或一個“或門,如果采用任何附加邏輯,就會在某些工作狀態(tài)下出現(xiàn)由于邏輯競爭而產(chǎn)生的毛刺。邏輯門的一個輸入作為實際的時鐘,而該邏輯門的所有其他輸入必須當(dāng)成地址或控制線,

12、它們遵守相對于時鐘的建立和保持時間的約束。多級邏輯時鐘:當(dāng)產(chǎn)生門控時鐘的組合邏輯超過一級,即超過單個的“與門或“或門時,該設(shè)計工程的可靠性將變得很差。在這種情況下,即使樣機或仿真結(jié)果沒有顯示出靜態(tài)險象,但實際上仍然可能存在危險,所以我們不應(yīng)該用多級組合邏輯區(qū)作為觸發(fā)器的時鐘端。不同的系統(tǒng) 需要采用不同的方法消除多級時鐘,并沒有一個固定的模式。波動式時鐘:許多系統(tǒng)要求在同一設(shè)計內(nèi)采用多時鐘,最常見的例子是兩個異步微處理器之間的接口,或微處理器和異步通信通道的接口。由于兩個時鐘信號之間要求一定的建立和保持時間,所以上述應(yīng)用引進了附加的定時約束條件,它們會要求將某些異步信號同步化。而在許多應(yīng)用中只將

13、異步信號同步化還是不夠的,當(dāng)系統(tǒng)中有兩個或兩個以上非同源時鐘時,數(shù)據(jù)的建立和保持時間很難得到保證,設(shè)計人員將面臨復(fù)雜的時間分析問題。最好的方法是將所有非同源時鐘同步化。使用FPGA內(nèi)部的鎖相環(huán)PLL是一個效果很好的方法,但并不是所有FPGA都帶有PLL,而且?guī)в蠵LL功能的芯片大多價格昂貴。這時就需要使用帶使能端的D觸發(fā)器,并引入一個高頻時鐘來實現(xiàn)信號的同步化。穩(wěn)定可靠的時鐘是保證系統(tǒng)可靠工作的重要條件,設(shè)計中不能夠?qū)⑷魏慰赡芎忻痰妮敵鲎鳛闀r鐘信號,并且盡可能只使用一個全局時鐘,對多時鐘系統(tǒng)要特別注意異步信號和非同源時鐘的同步問題。為了獲得高驅(qū)動能、低抖動時延、穩(wěn)定的占空比的時鐘信號,一般

14、使用FPGA內(nèi)部的專用時鐘資源產(chǎn)生同步時序電路的主工作時鐘。專用時鐘資源主要指兩局部,一局部是布線資源,包括全局時鐘布線資源和長線資源等,另一局部那么是FPGA內(nèi)部的PLL。4.2電子時鐘的控制系統(tǒng)此電子時鐘系統(tǒng)主要有8個模塊分別設(shè)計仿真,分別是以下8個模塊:主控制模塊 maincontrol時間及其設(shè)置模塊 timepiece_main時間顯示動態(tài)位選模塊 time_disp_select顯示模塊 disp_data_mux秒表模塊 stopwatch日期顯示與設(shè)置模塊 date_main鬧鐘模塊 alarmclock分頻模塊 fdiv4.3主控制模塊 maincontrol該模塊實現(xiàn)對各個

15、功能模塊的整體控制,包括對時間顯示與調(diào)整、日期顯示與調(diào)整、鬧鐘顯示與調(diào)整、秒表操作等的控制,結(jié)構(gòu)功能圖如4-1所示,波形仿真圖如4-2所示。圖4-1 主控制模塊的結(jié)構(gòu)功能圖 圖4-2 主控制模塊的波形仿真圖SW3是功能鍵,從波形圖中可知,SW3每出現(xiàn)一次上升沿,輸出都會發(fā)生相應(yīng)的變化,即按照Timepiece_EN時鐘自動顯示使能,TimeSet_EN時鐘設(shè)置與調(diào)整使能,Stopwatch_EN秒表功能使能,Alarmclock_EN鬧鐘時間設(shè)置使能,Date_EN日期顯示使能,DateSet_EN日期顯示與設(shè)置使能的順序依次輸出有效波形“1,對相應(yīng)的模塊輸入有效使能,從而實現(xiàn)相應(yīng)的功能。4.

16、4時間及其設(shè)置模塊 time_auto_and_set時間及其設(shè)置模塊主要完成時間的自動正常運行與顯示,以及在相應(yīng)的功能號下,實現(xiàn)時間的調(diào)整與設(shè)置。時間模塊 timepiece_main:該模塊主要完成時間的自動增加與顯示功能,即為正常的自動模式運行,其結(jié)構(gòu)功能圖如4-3所示,波形仿真圖如4-4所示。圖4-3 時間及其設(shè)置模塊的結(jié)構(gòu)功能圖圖4-4 時間模塊的結(jié)構(gòu)功能圖秒自動計時子模塊 second_counter,結(jié)構(gòu)功能圖如4-5所示,圖4-5 秒自動計時子模塊的結(jié)構(gòu)功能圖分自動計時子模塊 minute_counter,結(jié)構(gòu)功能圖如4-6示。圖4-6 分自動計時子模塊的結(jié)構(gòu)功能圖小時自動計時

17、子模塊 hour_counter,結(jié)構(gòu)功能圖如4-7所示。圖4-7小時自動計時子模塊的結(jié)構(gòu)功能圖圖4-8 時間模塊的波形仿真圖當(dāng)Timepiece_EN為1時,即處于時間自開工作狀態(tài),即每出現(xiàn)一次時鐘信號clk,計數(shù)一次,先計數(shù)second0,當(dāng)計數(shù)到1001即十進制的9時,向second1發(fā)出一個計數(shù)信號,此時second1進行一次計數(shù),類推,second1計數(shù)到0101即十進制的5,且second0計數(shù)到1001即十進制的9時,minute0那么進行一次計數(shù),按照此規(guī)律進行時間的計數(shù)。當(dāng)計滿24小時,向day_EN發(fā)出一個計數(shù)信號,即此使能端輸出有效信號1,進行日期的計數(shù)。 時間設(shè)置模塊

18、timeset:該模塊主要完成對時間的設(shè)置相關(guān)的閃爍顯示控制以及時間中的小時、分鐘、秒等數(shù)據(jù)的改變,流程圖如4-9所示,結(jié)構(gòu)功能圖如4-10所示,波形仿真圖如4-11所示。 開 始disp_drive<=3b0結(jié) 束初始化,將當(dāng)前時間賦予設(shè)置后的時間Timeset_EN=1?disp_drive<3b101disp_drive<= disp_drive+3b1依SW2,按位進行數(shù)字調(diào)整 圖 4-9 時間設(shè)置模塊的流程圖圖4-10 時間設(shè)置模塊的結(jié)構(gòu)功能圖圖4-11 時間設(shè)置模塊的波形仿真圖表4-12 時間設(shè)置模塊的端口說明輸入端口 功能TimeSet_EN 時間設(shè)置使能,當(dāng)其

19、電平為高時,時間設(shè)置有效 SW1,SW2 調(diào)整鍵1與調(diào)整鍵2輸入信號hour1,hour0 當(dāng)前時間的小時數(shù)輸入minute1,minute0 當(dāng)前時間的分鐘數(shù)輸入second0,second1 當(dāng)前時間的秒數(shù)輸入輸出端口 功能hour_set1,hour_set0 設(shè)置時間后的小時數(shù)minute_set1,minute_set0 設(shè)置時間后的分鐘數(shù)second_set1,second_set0 設(shè)置時間后的秒數(shù)disp_drive 設(shè)置中的閃爍顯示設(shè)置 當(dāng)Timeset_EN為1時,即實現(xiàn)時間設(shè)置功能。SW1實現(xiàn)時間格式中小時高、低位,分鐘高、低位,秒鐘高、低位的位選,即每出現(xiàn)一個SW1上升

20、沿,disp_drive的相應(yīng)數(shù)值加1選擇具體的需要調(diào)整的位置。SW2實現(xiàn)相應(yīng)得位的數(shù)值得調(diào)整,即每出現(xiàn)一個SW2上升沿,相應(yīng)位的數(shù)值增加1。 時間數(shù)據(jù)與時間設(shè)置數(shù)據(jù)多路選擇模塊 time_mux:該模塊用來分時向顯示單元傳輸顯示數(shù)據(jù),流程圖如4-13所示,結(jié)構(gòu)功能圖如4-14所示,波形仿真圖如4-15所示。圖4-13 多路選擇模塊的結(jié)構(gòu)功能圖開 始依輸入條件,判斷是自動顯示時間,或顯示調(diào)整后的時間Timeset_EN=1?顯示設(shè)置后的時間顯示自動模式時的時間結(jié) 束圖 4-14 多路選擇模塊的流程圖圖4-15 多路選擇模塊的波形仿真圖輸入端口 功能TimeSet_EN 時間設(shè)置使能信號 hou

21、r1,hour0 自動模式中當(dāng)前時間的小時數(shù)輸入minute1,minute0 自動模式中當(dāng)前時間的分鐘數(shù)輸入second0,second1 自動模式中當(dāng)前時間的秒數(shù)輸入hour_set1,hour_set0 時間設(shè)置后的小時數(shù)輸入 minute_set1,minute_set0 時間設(shè)置后的分鐘數(shù)輸入second_set1,second_set0 時間設(shè)置后的秒數(shù)輸入輸入端口 功能hour_1,hour_0 當(dāng)前需要顯示的小時輸出minute_1,minute_0 當(dāng)前需要顯示的分鐘輸出second_0,second_1 當(dāng)前需要顯示的秒輸出表4-16 多路選擇模塊的端口說明 時間顯示動態(tài)位

22、選模塊 time_disp_select:該模塊用來分時顯示時間數(shù)據(jù),但是在選擇適宜的時間間隔下,人眼并不能分辨出是分時顯示的,這樣顯示的方式可以降低功耗,結(jié)構(gòu)功能圖如4-17所示,波形仿真圖如4-18所示。圖4-17 時間顯示動態(tài)位選模塊的結(jié)構(gòu)功能圖圖4-18(a) 時間顯示動態(tài)位選模塊的波形仿真圖圖4-18(b) 時間顯示動態(tài)位選模塊的波形仿真圖TimeSet_EN表示時間設(shè)置使能,Time_EN表示時間自動顯示使能,clk_1kHz用于動態(tài)顯示時間,clk_200Hz用于閃爍顯示時間,timeset_disp_drive表示時間設(shè)置數(shù)據(jù)顯示的同步信號,time_disp_select表示

23、顯示動態(tài)位選輸出信號。當(dāng)TimeSet_EN為0,Time_EN為1時,以clk_1kHz為是時鐘信號,輸出自動顯示的時間,按位依次顯示;當(dāng)TimeSet_EN為1,Time_EN為0時,那么以clk_200Hz為時鐘信號,輸出以timeset_disp_drive對應(yīng)的位置。顯示模塊是時間、日期等數(shù)據(jù)用數(shù)碼管顯示的控制與數(shù)據(jù)傳輸模塊,包括數(shù)據(jù)的傳輸以及BCD碼的譯碼等,結(jié)構(gòu)功能圖如4-19所示,波形仿真圖如4-21所示。圖4-19 顯示模塊的結(jié)構(gòu)功能圖 顯示原理采用的是七段數(shù)碼管的現(xiàn)實原理,如4-20所示:圖4-20 七段數(shù)碼管的顯示原理圖4-21 顯示模塊的波形仿真圖4.5秒表模

24、塊 stopwatch該模塊實現(xiàn)秒表的功能,在實際中,可以通過改變自開工作模式下的時間的計數(shù)時鐘的頻率來實現(xiàn)秒表的功能,結(jié)構(gòu)功能圖如4-22所示,波形仿真圖如4-23所示。圖4-22 秒表模塊的結(jié)構(gòu)功能圖圖4-23 秒表功能的波形仿真圖EN表示秒表使能控制信號,clk1表示自開工作模式的時鐘信號,clk2表示秒表工作模式的時鐘信號,故當(dāng)EN為有效信號1時,輸出F_out與clk2同,即處于秒表工作狀態(tài),同理EN為0時,輸出F_out與clk1同,即處于自開工作狀態(tài)。4.6日期顯示與設(shè)置模塊 date_main該模塊實現(xiàn)日期的顯示和日期的調(diào)整與設(shè)置,日期自開工作模塊 autodate:該模塊實現(xiàn)

25、的是日期的自開工作功能,結(jié)構(gòu)功能圖如4-24所示,波形仿真圖如4-25所示。圖4-24 日期自開工作模塊的結(jié)構(gòu)功能圖圖4-25(a) 日期自開工作模塊的波形仿真圖圖4-25(b) 日期自開工作模塊的波形仿真圖日期設(shè)置模塊 setdate:該模塊用于日期,結(jié)構(gòu)功能圖如4-26所示。圖4-26 日期設(shè)置模塊的結(jié)構(gòu)功能圖4.7鬧鐘模塊alarmclock該模塊實現(xiàn)的功能包括鬧鐘的設(shè)置以及鬧鐘時間到后的提示,結(jié)構(gòu)功能圖如4-27所示,波形仿真圖如4-28所示。 圖4-27 鬧鐘模塊的結(jié)構(gòu)功能圖圖4-28 鬧鐘模塊的波形仿真圖EN為鬧鐘設(shè)置使能,clk_200Hz用于設(shè)置中的閃爍顯示的時鐘,其中還定義了

26、hour_set1,hour_set0,minute_set1,minute_set0,second_set1,second_set0,用來表示已經(jīng)設(shè)置好的鬧鐘時間。鬧鐘一直處于工作狀態(tài),當(dāng)前時間hour1,hour0,minute1,minute0,second1,second0與設(shè)置的鬧鐘時間相比擬,當(dāng)小時、分鐘、秒鐘的時間完全相同時,那么鬧鈴響,輸出信號alarm為有效信號1。SW1和SW2是調(diào)整鍵,分別控制位選和數(shù)值的調(diào)整。4.8分頻模塊 fdiv該模塊完成全局時鐘信號分頻輸出200Hz、60Hz、1Hz的三種時鐘信號,結(jié)構(gòu)功能圖如4-29所示,波形仿真圖如4-30所示。圖4-29 分

27、頻模塊的結(jié)構(gòu)功能圖圖4-30分頻模塊的波形仿真圖4.9頂層模塊將各個主模塊綜合成電子時鐘系統(tǒng),其包括:fdiv分頻模塊,maincontrol主控制模塊,stopwatch秒表模塊,time_auto_and_set時間及其設(shè)置模塊,date_main日期及其設(shè)置模塊,alarmclock鬧鐘模塊,time_disp_select時間顯示動態(tài)位選模塊及disp_data_mux顯示模塊,該頂層電路Top如圖4-31所示。圖4-31 頂層電路Top.word.電子時鐘系統(tǒng)的Verilog HDL語言程序設(shè)計局部代碼 主控制模塊module maincontrol(clk,SW3,Timepiec

28、e_EN,TimeSet_EN,Stopwatch_EN,Alarmclock_EN,Date_EN,DateSet_EN);output Timepiece_EN; /時間自動顯示使能output TimeSet_EN; /時間調(diào)整與設(shè)置使能output Stopwatch_EN; /秒鐘功能使能output Alarmclock_EN; /鬧鐘時間設(shè)置使能output Date_EN; /時期顯示使能output DateSet_EN; /日期調(diào)整與設(shè)置使能input SW3; /功能號選擇input clk;reg Timepiece_EN; reg TimeSet_EN; reg St

29、opwatch_EN; reg Alarmclock_EN; reg Date_EN; reg DateSet_EN; reg 2:0 Function;reg 31:0 cnt;reg q1,q2,q3;reg CLK;always(posedge clk)begin if(cnt<49999) begin cnt=cnt+1; CLK<=0; end else begin cnt=0; CLK<=1'b1; end endalways(posedge CLK)begin begin q2<=q1; q1<=SW3; end begin q3<=q

30、1&(q2); endendalways(posedge q3 ) /*實現(xiàn)對時間顯示與調(diào)整,日期顯示與 調(diào)整,鬧鐘顯示與調(diào)整,秒表操作等的控制*/ begin /功能號的產(chǎn)生以及其自動循環(huán) if(Function<3'b101 && SW3=1'b1) Function<=Function+3'b1; else Function<=3'b0; case(Function) /各個分功能的控制和實現(xiàn) /時鐘自動顯示 3'b000:begin Timepiece_EN<=1'b1; TimeSet_E

31、N<=1'b0; Stopwatch_EN<=1'b0; Alarmclock_EN<=1'b0; Date_EN<=1'b0; DateSet_EN<=1'b0; end /時鐘調(diào)整與設(shè)置 3'b001:begin end /秒表 3'b010:begin end /鬧鐘時間設(shè)置 3'b011:begin end /日期顯示 3'b100:begin end /日期調(diào)整與設(shè)置 3'b101:begin end default:begin end endcase endendmodul

32、e 秒自動計時子模塊module second_counter(EN,clk,second_data1,second_data0,E0);output 3:0 second_data1,second_data0;output E0;input clk,EN;reg 3:0 second_data1,second_data0;reg E0;always(posedge clk) begin if(EN=1'b1) begin if(second_data0<4'b1001) second_data0<=second_data0+4'b1; else begin

33、 E0<=1'b0; second_data0<=4'b0; if(second_data1<4'b0101) second_data1<= second_data1+4'b1; else begin second_data1<=4'b0; E0<=1'b1; end end end endendmodule時間自開工作控制module timepiece_main(CLK,Timepiece_EN,day_EN,hour0,hour1,minute0,minute1,second0,second1);inpu

34、t CLK;input Timepiece_EN;output day_EN;output 3:0 hour1,hour0;output 3:0 minute1,minute0;output 3:0 second1,second0;wire SYNTHESIZED_WIRE_0;wire SYNTHESIZED_WIRE_1;hour_counter /*小時計時*/b2v_inst(.clk(SYNTHESIZED_WIRE_0),.EN(Timepiece_EN),.E0(day_EN),.hour_data0(hour0),.hour_data1(hour1);minute_counte

35、r /*分鐘計時*/b2v_inst1(.clk(SYNTHESIZED_WIRE_1),.EN(Timepiece_EN),.E0(SYNTHESIZED_WIRE_0),.minute_data0(minute0),.minute_data1(minute1);second_counter /*秒計時*/b2v_inst2(.clk(CLK),.EN(Timepiece_EN),.E0(SYNTHESIZED_WIRE_1),.second_data0(second0),.second_data1(second1);endmodule時間數(shù)據(jù)與時間設(shè)置數(shù)據(jù)多路選擇模塊module time

36、_mux(TimeSet_EN,hour1,hour0,minute1,minute0,second1,second0,hour_set1,hour_set0,minute_set1,minute_set0,second_set1,second_set0,hour_1,hour_0,minute_1,minute_0,second_1,second_0);output 3:0 hour_1,hour_0; /當(dāng)前需要顯示的小時輸出output 3:0 minute_1,minute_0; /當(dāng)前需要顯示的分鐘輸出output 3:0 second_1,second_0; /當(dāng)前需要顯示的秒輸出

37、input TimeSet_EN; /時間設(shè)置使能信號input 3:0 hour1,hour0; /自動模式中當(dāng)前時間的小時輸入input 3:0 minute1,minute0; /自動模式中當(dāng)前時間的分鐘輸入input 3:0 second1,second0; /自動模式中當(dāng)前時間的秒輸入input 3:0 hour_set1,hour_set0; /時間設(shè)置后的小時輸入input 3:0 minute_set1,minute_set0; /時間設(shè)置后的分鐘輸入input 3:0 second_set1,second_set0; /時間設(shè)置后的秒輸入reg 3:0 hour_1,hour

38、_0;reg 3:0 minute_1,minute_0;reg 3:0 second_1,second_0;/*時間自動顯示與時間調(diào)整與設(shè)置中顯示數(shù)據(jù)的多路選擇*/always(TimeSet_EN,hour1,hour0,minute1,minute0,second1,second0,hour_set1,hour_set0,minute_set1,minute_set0,second_set1,second_set0) begin if(TimeSet_EN=1'b1) begin hour_1<=hour_set1; hour_0<=hour_set0; minute

39、_1<=minute_set1; minute_0<=minute_set0; second_1<=second_set1; second_0<=second_set0; end else begin hour_1<=hour1; hour_0<=hour0; minute_1<=minute1; minute_0<=minute0; second_1<=second1; second_0<=second0; end endendmodule 時間及其設(shè)置模塊 module time_auto_and_set(CLK,Timepiec

40、e_EN,TimeSet_EN,SW1,SW2,Day_EN,hour_0,hour_1,minute_0,minute_1,second_0,second_1,TimeSet_disp_drive);input CLK;input Timepiece_EN;input TimeSet_EN;input SW1;input SW2;output Day_EN;output 3:0 hour_1,hour_0;output 3:0 minute_1,minute_0;output 3:0 second_1,second_0;output 2:0 TimeSet_disp_drive;reg 3:

41、0 hour_1,hour_0;reg 3:0 minute_1,minute_0;reg 3:0 second_1,second_0;reg 2:0 TimeSet_disp_drive;wire 3:0 SYNTHESIZED_WIRE_18;wire 3:0 SYNTHESIZED_WIRE_19;wire 3:0 SYNTHESIZED_WIRE_2;wire 3:0 SYNTHESIZED_WIRE_3;wire 3:0 SYNTHESIZED_WIRE_20;wire 3:0 SYNTHESIZED_WIRE_21;wire 3:0 SYNTHESIZED_WIRE_6;wire

42、3:0 SYNTHESIZED_WIRE_7;wire 3:0 SYNTHESIZED_WIRE_22;wire 3:0 SYNTHESIZED_WIRE_23;wire 3:0 SYNTHESIZED_WIRE_10;wire 3:0 SYNTHESIZED_WIRE_11;時間顯示動態(tài)位選模塊module time_disp_select(clk_1kHz,clk_200Hz,Time_EN,TimeSet_EN,timeset_disp_drive,time_disp_select);output 5:0 time_disp_select;input clk_1kHz;input clk

43、_200Hz;input Time_EN;input TimeSet_EN;input 2:0 timeset_disp_drive;reg 5:0 time_disp_select;reg 2:0 auto_disp_drive;reg clk;reg 2:0 disp_drive;always(posedge clk_1kHz) /*實現(xiàn)自動運行模式中的動態(tài)顯示“位選的驅(qū)動*/ begin if(auto_disp_drive<3'b101) auto_disp_drive<=auto_disp_drive+3'b1; else auto_disp_drive&

44、lt;=3'b0; endalways /*實現(xiàn)自動運行模式中時間動態(tài)顯示位選驅(qū)動與時間設(shè)置中的時間動態(tài)顯示位選驅(qū)動的二選一*/ begin if(Time_EN=1'b1) begin clk<=clk_1kHz; disp_drive<=auto_disp_drive; end else if(TimeSet_EN=1'b1) begin clk<=clk_200Hz; disp_drive<=timeset_disp_drive; end endalways(posedge clk) /*實現(xiàn)時間的動態(tài)位選*/ begin case(dis

45、p_drive) 3'b000:time_disp_select<=6'b100000; 3'b001:time_disp_select<=6'b010000; 3'b010:time_disp_select<=6'b001000; 3'b011:time_disp_select<=6'b000100; 3'b100:time_disp_select<=6'b000010; 3'b101:time_disp_select<=6'b000001; default:t

46、ime_disp_select<=6'b000000; endcase endendmodule 秒表模塊module stopwatch(clk1,clk2,EN,F_out);output F_out;input EN;input clk1,clk2;reg F_out;always(EN,clk1,clk2) begin case(EN) 1'b0:F_out<=clk1; 1'b1:F_out<=clk2; default:F_out<=1'b0; endcase endendmodule分頻模塊module fdiv(clk,f200Hz,f60Hz,f1Hz);

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論