基于VHDL和QuartusⅡ的數(shù)字電子鐘設(shè)計(jì)與實(shí)現(xiàn)
摘要:采用FPGA進(jìn)行的數(shù)字電路設(shè)計(jì)具有更大的靈活性和通用性,已成為目前數(shù)字電路設(shè)計(jì)的主流方法之一。本文給出一種基于FPGA的數(shù)字鐘設(shè)計(jì)方案。該方案采用VHDL設(shè)計(jì)底層模塊,采用電路原理圖設(shè)計(jì)頂層系統(tǒng)。整個系統(tǒng)在QuartusⅡ開發(fā)平臺上完成設(shè)計(jì)、編譯和仿真,并在FPGA硬件實(shí)驗(yàn)箱上進(jìn)行測試。測試結(jié)果表明該設(shè)計(jì)方案切實(shí)可行。
本文引用地址:http://butianyuan.cn/article/247049.htmEDA(Electronic Design Automation)又名電子設(shè)計(jì)自動化,其基本特征是:以超大規(guī)??删幊踢壿嬈骷?,如FPGA,為設(shè)計(jì)載體,以硬件描述語言,如VHDL,為系統(tǒng)邏輯描述的主要表達(dá)方式,以計(jì)算機(jī)、大規(guī)模可編程邏輯器件的開發(fā)軟件及實(shí)驗(yàn)開發(fā)系統(tǒng)為設(shè)計(jì)工具,完成電子系統(tǒng)的設(shè)計(jì)。使用EDA進(jìn)行電子系統(tǒng)設(shè)計(jì)具有以下特點(diǎn):1)用軟件方式設(shè)計(jì)硬件;2)用軟件方式設(shè)計(jì)的系統(tǒng)到硬件系統(tǒng)的轉(zhuǎn)換是由有關(guān)開發(fā)軟件自動完成的;3)設(shè)計(jì)過程中可用有關(guān)軟件進(jìn)行各種仿真;4)系統(tǒng)可現(xiàn)場編程,在線升級;5)整個系統(tǒng)可集成在一個芯片上,體積小、功耗低、可靠性高;6)設(shè)計(jì)的移植性好、效率高;7)適合分工設(shè)計(jì)、團(tuán)隊(duì)協(xié)作。因此,EDA技術(shù)是現(xiàn)代電子設(shè)計(jì)的發(fā)展趨勢。
1 數(shù)字鐘的設(shè)計(jì)方案
本文以FPGA平臺為基礎(chǔ),采用VHDL語言在QuartusⅡ開發(fā)環(huán)境下設(shè)計(jì)開發(fā)多功能數(shù)字鐘,具有計(jì)時、校時、蜂鳴鬧鈴的功能,具體功能為:1)能夠?qū)γ?、分、小時進(jìn)行正常計(jì)時,每日按24小時計(jì)時制,能用八個七段數(shù)碼管進(jìn)行友好界面的顯示;2)具有復(fù)位功能,可以對當(dāng)前時間進(jìn)行清零;3)能夠?qū)﹄娮訒r鐘進(jìn)行時分秒設(shè)置,方便在時鐘跑錯時進(jìn)行校正;4)能夠設(shè)定電子鬧鐘,在指定的時間驅(qū)動蜂鳴器等外設(shè)工作,引起使用者注意;5)電子鐘具有溢出警報(bào)功能,當(dāng)小時數(shù)超過24時,用一個LED小燈進(jìn)行溢出警報(bào)說明,然后從00—00—00開始從新計(jì)時,此功能可以使電子鐘很方便的擴(kuò)展為萬年歷。
我們采用自頂向下的層次化設(shè)計(jì)方法進(jìn)行設(shè)計(jì),其輸入為狀態(tài)選擇信號(使用一個2位二進(jìn)制表示選擇,00正常運(yùn)行或顯示鬧鈴信息,01設(shè)置秒,10設(shè)置分,11設(shè)置時)、復(fù)位信號、鬧鈴開關(guān)(配合狀態(tài)選擇信號進(jìn)行鬧鈴的設(shè)置)、1 Hz的計(jì)時時鐘信號和1 kHz的掃描時鐘信號;輸出為時、分、秒數(shù)字顯示(這里使用了8個共陰極的七段數(shù)碼管作為顯示輸出)、鬧鐘蜂鳴、溢出信號。系統(tǒng)由狀態(tài)選擇模塊、時、分、秒計(jì)時校時模塊、顯示與鬧鈴模塊組成。數(shù)字鐘的系統(tǒng)框圖圖如圖1所示。
2 核心模塊設(shè)計(jì)
2.1 狀態(tài)選擇模塊設(shè)計(jì)
該模塊主要功能其實(shí)是對輸入端的匯總,然后根據(jù)設(shè)置方法對不同的模塊進(jìn)行使能和參數(shù)傳遞,輸出不同的信令signaling控制到各個模塊,使每個模塊工作在一個有序的狀態(tài)。狀態(tài)選擇模塊的電路描述如圖2所示,具體說明如下:當(dāng)輸入一個脈沖到復(fù)位鍵reset時,數(shù)字鐘啟動并對時間清零。鬧鈴鍵clock=0時,模塊根據(jù)狀態(tài)選擇鍵IS_SET輸出不同秒、分、時信令到秒、分、時計(jì)時校時模塊,控制這些模塊的運(yùn)行狀態(tài)。此時,當(dāng)IS_SET=00時為正常計(jì)時狀態(tài),秒、分、時的輸出信令均為80;IS_SET=01時為秒校時狀態(tài),輸出秒信令S_signaling為時間輸入Time(顯然該輸出小于60),而輸出分信令M_signaling和時信令H_signaling均為100,表示暫停分、時計(jì)時;IS_SET=10和11時則分別為分和時的校時狀態(tài)。鬧鈴鍵clock=1時,當(dāng)IS_SET=10和11時分別設(shè)置鬧鈴的分、時為時間輸入Time并將設(shè)置的鬧鈴時間輸出到“顯示與鬧鈴模塊”中保存;當(dāng)IS_SET=00時,輸出out_clock=1,控制顯示與鬧鈴模塊顯示設(shè)置的鬧鈴時間。注意,當(dāng)鬧鈴鍵clock=1時,計(jì)時正常運(yùn)行,不論IS_SET如何設(shè)置,秒、分、時的輸出信令均為80。
2.2 計(jì)時校時模塊設(shè)計(jì)
該模塊用于時、分、秒的計(jì)時校時,根據(jù)狀態(tài)選擇模塊傳輸過來的信令signaling分別進(jìn)行計(jì)時和校時。時、分、秒計(jì)時校時模塊是一樣的,只是分秒的進(jìn)位為60,而小時的進(jìn)位為24。我們在實(shí)體聲明中的使用generic變量定義一個numn,該值設(shè)置進(jìn)制為60或24,通過修改numn值就完成分、秒計(jì)時模塊到小時計(jì)時模塊的轉(zhuǎn)換。模塊的輸入為掃描時鐘、計(jì)時時鐘和信令signaling,輸出為輸出時間高位time_h和輸出時間低位time_l,以及進(jìn)位clk_jin。
計(jì)時校時模塊的電路描述如圖3所示,具體說明如下:每當(dāng)掃描時鐘上升沿時,啟動進(jìn)程,并根據(jù)信令signaling執(zhí)行不同操作,1)當(dāng)signaling
2.3 顯示、鬧鈴模塊設(shè)計(jì)
本模塊是數(shù)字鐘系統(tǒng)中的輸出模塊,用于輸出LED數(shù)字顯示和鬧鈴,其輸入為掃描時鐘,從計(jì)時校時模塊輸出的秒低位、秒高位、分低位、分高位、時低位、時高位信號和狀態(tài)選擇模塊輸出的鬧鈴顯示Nao_En鬧鈴時間Nan_In。如果Nao_En=0則正常顯示時間,當(dāng)Nao_En=1時,在LED數(shù)碼管上顯示鬧鐘時間。當(dāng)當(dāng)前時間與保存的鬧鈴時間Nan_In相同時,蜂鳴器鳴響1 min。這里我們使用了八個共陰極的七段數(shù)碼管顯示時間,當(dāng)選位信號sel=“01111111”時,第一個數(shù)碼管顯示數(shù)字,其他七位不顯示。我們通過動態(tài)掃描,輪流顯示秒低位sec_ge、秒高位sec_shi、分低位min_ge、分高位min_shi、時低位hour_ge、時高位hour_shi共6路信號,當(dāng)掃描時鐘sanc_clk頻率高于28 Hz時,由于人眼的視覺殘留效果,使得這6路信號看上去是同時顯示在6個七段數(shù)碼管上。顯示、鬧鈴模塊電路描述如圖4所示。
3 結(jié)束語
在QuartusⅡ軟件開發(fā)平臺上,采用“自頂向下設(shè)計(jì),自底向上實(shí)現(xiàn)”的方法完成了數(shù)字鐘的設(shè)計(jì)與實(shí)現(xiàn)。其基本過程如下:1)完成數(shù)字鐘的總體設(shè)計(jì);2)完成各個底層模塊的設(shè)計(jì)和波形仿真:底層模塊采用VHDL語言編寫,在編譯和仿真成功后,對其進(jìn)行封裝;3)完成數(shù)字鐘的頂層電路設(shè)計(jì):根據(jù)數(shù)字鐘的系統(tǒng)框圖(圖1)在QuartusⅡ中采用電路原理圖方式,調(diào)用封裝好的底層模塊,完成頂層電路圖的設(shè)計(jì);4)對頂層電路進(jìn)行編譯和仿真,結(jié)果表明仿真波形符合設(shè)計(jì)要求;5)進(jìn)行引腳分配,再編譯后,將下載文件下載到FPGA開發(fā)板中進(jìn)行驗(yàn)證和調(diào)試。測試結(jié)果表明數(shù)碼管能正確的顯示計(jì)時時間,能通過按鍵調(diào)整時間,能實(shí)現(xiàn)整點(diǎn)報(bào)時,完全符合設(shè)計(jì)要求。
蜂鳴器相關(guān)文章:蜂鳴器原理
評論