基于CPLD的時(shí)間控制器設(shè)計(jì)
0 引言
傳統(tǒng)時(shí)間控制器功能簡(jiǎn)單,硬件線路多,設(shè)計(jì)復(fù)雜,可靠性差。隨著CPLD(復(fù)雜可編程邏輯器件)的飛速發(fā)展,它以其編程方便、集成度高,速度快、價(jià)格低等特點(diǎn)越來(lái)越受到廣大電子設(shè)計(jì)人員的青睞。
本文介紹一種以CPLD[1]為核心、以VHDL[2]為開(kāi)發(fā)工具的時(shí)間控制器,該控制器不僅具有時(shí)間功能,而且具有定時(shí)器功能,能在00:00~23:59之間任意設(shè)定開(kāi)啟時(shí)間和關(guān)閉時(shí)間,其設(shè)置方便、靈活,廣泛應(yīng)用于路燈、廣告燈箱、霓虹燈等處的定時(shí)控制。
1 系統(tǒng)設(shè)計(jì)方案
l.l 系統(tǒng)總體結(jié)構(gòu)
時(shí)間控制器主要由CLOCK(數(shù)字時(shí)鐘)、TIMESET(定時(shí)器開(kāi)啟時(shí)間和關(guān)閉時(shí)間設(shè)置)、COMPARE(比較輸出)、FUNC-CTRL(功能控制模塊)和顯示輸出控制模塊等組成。
系統(tǒng)方框圖如圖l所示。
FUNC-CTRL模塊控制系統(tǒng)處于不同的功能狀態(tài),并產(chǎn)生不同的控制信號(hào)分別控制TIME-SET模塊和CLOCK模塊,而這3個(gè)模塊的輸出連接到COMPARE模塊,當(dāng)系統(tǒng)時(shí)間處在開(kāi)啟時(shí)間和關(guān)閉時(shí)間段時(shí),則定時(shí)器輸出端done輸出控制信號(hào),DISP_CTRL(輸出選擇模塊)根據(jù)功能模塊的控制信號(hào)選擇不同功能狀態(tài)的時(shí)間輸出,通過(guò)SELTIME(動(dòng)態(tài)掃描模塊)和DELED(七段譯碼模塊)驅(qū)動(dòng)七段數(shù)碼管顯示相應(yīng)的時(shí)間。
1.2 系統(tǒng)功能要求
a)具有數(shù)字時(shí)鐘功能,用4個(gè)數(shù)碼管分別顯示小時(shí)、分鐘,并且具有時(shí)間校對(duì)功能。
b)能方便地設(shè)定定時(shí)器的開(kāi)啟時(shí)間和關(guān)閉時(shí)間,通過(guò)比較器輸出時(shí)間控制信號(hào)。
c)具有4種功能狀態(tài):系統(tǒng)時(shí)間校對(duì)狀態(tài)、開(kāi)啟時(shí)間設(shè)定狀態(tài)、關(guān)閉時(shí)間設(shè)定狀態(tài)、時(shí)鐘正常顯示狀態(tài),通過(guò)功能轉(zhuǎn)換鍵(fun)可以使系統(tǒng)在這4種狀態(tài)之間循環(huán)變化,并且可以通過(guò)指示燈LED顯示當(dāng)前系統(tǒng)功能狀態(tài),數(shù)碼管顯示相應(yīng)功能狀態(tài)的時(shí)間,如當(dāng)前在開(kāi)啟時(shí)間設(shè)定狀態(tài)下,開(kāi)啟時(shí)間設(shè)置指示燈ledon會(huì)亮,數(shù)碼管同時(shí)顯示當(dāng)前設(shè)置的時(shí)間。
d)開(kāi)啟時(shí)間設(shè)定、關(guān)閉時(shí)間設(shè)定和時(shí)間校對(duì)采用共同的時(shí)調(diào)節(jié)鍵set_hour和分調(diào)節(jié)鍵set_min;每按一下set_hour鍵,小時(shí)就會(huì)自動(dòng)加1,采用24進(jìn)制計(jì)數(shù),當(dāng)計(jì)數(shù)到23時(shí)又會(huì)恢復(fù)為00;每按一下set_min鍵,分鐘會(huì)自動(dòng)加1;采用60進(jìn)制計(jì)數(shù),當(dāng)計(jì)數(shù)到59時(shí),又會(huì)恢復(fù)為00。
2 子模塊功能設(shè)計(jì)及仿真
2.1 CLOCK模塊
CLOCK模塊內(nèi)部整體框圖如圖2所示。
其中:SECOND為60進(jìn)制秒計(jì)數(shù)器,MINUTE為60進(jìn)制分鐘計(jì)數(shù)器,HOUR為24進(jìn)制小時(shí)計(jì)數(shù)器;clk為標(biāo)準(zhǔn)的1Hz時(shí)鐘信號(hào)作為秒計(jì)數(shù)輸入,秒計(jì)數(shù)器的進(jìn)位輸出作為分鐘MINUTE的計(jì)數(shù)時(shí)鐘,而MINUTE進(jìn)位輸出作為小時(shí)HOUR模塊的時(shí)鐘輸入;輸入端set_rain、set_hour和en_time分別為校分、校時(shí)和時(shí)間設(shè)置控制信號(hào)。模塊HOUR_MIN把小時(shí)和分鐘輸出合成時(shí)間輸出信號(hào)time[13..0](小時(shí)采用24進(jìn)制,只需6位二進(jìn)制表示,分鐘用8位二進(jìn)制表示)。
2.2 TIME_SET模塊
開(kāi)啟時(shí)問(wèn)模塊主要設(shè)置定時(shí)器殲啟時(shí)間,可以設(shè)定具體幾時(shí)幾分,而關(guān)閉時(shí)間則設(shè)定定時(shí)器關(guān)閉時(shí)間,起始時(shí)間設(shè)定模塊與結(jié)束時(shí)間設(shè)定模塊功能相同,采用同一個(gè)TIME_SET模塊。該模塊由一個(gè)24進(jìn)制小時(shí)計(jì)數(shù)器和一個(gè)60進(jìn)制分鐘計(jì)數(shù)器組成,當(dāng)控制端EN為高電平時(shí),通過(guò)調(diào)節(jié)鍵set_hour和set_min分別設(shè)置小時(shí)和分鐘信號(hào),從而設(shè)置開(kāi)啟時(shí)問(wèn)和關(guān)閉時(shí)間,并產(chǎn)生時(shí)間信號(hào)data[13..0]。仿真結(jié)果如圖3所示。
2.3 COMPARE模塊
COMPARE模塊實(shí)現(xiàn)系統(tǒng)當(dāng)前時(shí)間與設(shè)定的開(kāi)啟時(shí)間和關(guān)閉時(shí)間的比較,從而輸出定時(shí)控制輸出信號(hào)。由于系統(tǒng)時(shí)間的小時(shí)和分鐘分別采用24進(jìn)制和60進(jìn)制方式,分3種情況討論:
a)當(dāng)系統(tǒng)設(shè)定的開(kāi)啟時(shí)間小于關(guān)閉時(shí)間時(shí),只要當(dāng)前系統(tǒng)時(shí)間大于等于開(kāi)啟時(shí)間而小于關(guān)閉時(shí)間,則輸出端co的輸出信號(hào)為高電平,否則為低電平。
b)當(dāng)系統(tǒng)設(shè)定的開(kāi)啟時(shí)間大于關(guān)閉時(shí)間時(shí),則當(dāng)系統(tǒng)時(shí)間大于等于關(guān)閉時(shí)間而小于開(kāi)啟時(shí)間時(shí),輸出端co為低電平,否則為高電平。
c)如果開(kāi)啟時(shí)間等于關(guān)閉時(shí)間,則輸出端co為低電平,仿真結(jié)果如圖4。
該模塊部分VHDL源程序如下:
2.4 FUNC_CTRL模塊
利用功能轉(zhuǎn)換鍵(fun)使系統(tǒng)處在不同的功能狀態(tài):系統(tǒng)時(shí)間校對(duì)狀態(tài)、開(kāi)啟時(shí)間設(shè)定狀態(tài)、關(guān)閉時(shí)間設(shè)定狀態(tài)、正常顯示狀態(tài)。利用功能轉(zhuǎn)換鍵實(shí)現(xiàn)4個(gè)功能狀態(tài)之間循環(huán)變化,并產(chǎn)生相應(yīng)的控制信號(hào)(en_time、en_on、en_off)去控制CLOCK模塊、TIME_SET、模塊和DISP_CTRL模塊等。在調(diào)整過(guò)程中,只有被選擇到的功能狀態(tài)指示燈被點(diǎn)亮,其他燈不亮,在正常模式狀態(tài)下,狀態(tài)燈都不亮。
其部分源程序如下:
2.5 顯示控制模塊
1)DISP_CTRL模塊
該模塊根據(jù)功能控制模塊輸出的控制信號(hào)en_on、en_off的值來(lái)選擇輸出信號(hào),當(dāng)en_on=l時(shí),輸出值為定時(shí)器的開(kāi)啟時(shí)問(wèn)信號(hào),當(dāng)en_off=1時(shí),輸出值為定時(shí)器的關(guān)閉時(shí)間信號(hào),en_time=1時(shí),輸出值為系統(tǒng)時(shí)間校對(duì)信號(hào),其他情況則輸出系統(tǒng)時(shí)間。
2)SELTIME模塊及DELED模塊
時(shí)間顯示的4個(gè)數(shù)碼管采用動(dòng)態(tài)掃描[3]輸出,一般只要每個(gè)掃描頻率超過(guò)人的眼睛視覺(jué)暫留頻率24 Hz以上就可以達(dá)到點(diǎn)亮單個(gè)顯示而不閃爍,掃描頻率采用1 kHz信號(hào)。動(dòng)態(tài)掃描輸出信號(hào)通過(guò)BCD-七段顯示譯碼器[4](DELED)連接到數(shù)碼管顯示具體數(shù)字。
動(dòng)態(tài)掃描的部分程序如下(其中clk1為掃描時(shí)鐘輸入信號(hào),sel為數(shù)碼管片選信號(hào)):
2.6 1 Hz標(biāo)準(zhǔn)時(shí)鐘產(chǎn)生模塊
系統(tǒng)時(shí)鐘輸入信號(hào)CLK1K為1 kHz信號(hào),它可作為動(dòng)態(tài)掃描時(shí)鐘信號(hào),如果把1 kHz信號(hào)經(jīng)過(guò)3個(gè)10分頻器FEN10便可得到標(biāo)準(zhǔn)的1 Hz時(shí)鐘信號(hào),作為系統(tǒng)時(shí)間模塊的標(biāo)準(zhǔn)秒輸入信號(hào)。
3 系統(tǒng)部分功能仿真
各部分模塊完成后生成圖形符號(hào),在MAX+PLUSⅡ中采用圖形法把各部分連接起來(lái),如圖1所示,對(duì)系統(tǒng)部分模塊進(jìn)行功能仿真,圖5為系統(tǒng)時(shí)間設(shè)置仿真圖。
在fun功能轉(zhuǎn)換鍵上升沿來(lái)之后,系統(tǒng)時(shí)間調(diào)整指示燈ledtime變?yōu)楦咂?,系統(tǒng)當(dāng)前處在數(shù)字時(shí)鐘校正狀態(tài),set_min是分鐘設(shè)置端,sel[1..O]是片選信號(hào),led[6..0]為數(shù)碼管的輸入信號(hào),從圖中可知符合功能要求。由于篇幅限制,略去其余模塊的仿真圖。
本系統(tǒng)采用的CPLD芯片為Altera公司的EPF10KLC84-3芯片,用VHDL和MAX+PLUSⅡ10.0軟件工具開(kāi)發(fā)。設(shè)計(jì)輸入完成后,進(jìn)行整體的編譯和邏輯仿真,然后進(jìn)行轉(zhuǎn)換、延時(shí)仿真生成配置文件,最后下載至CPLD器件,完成結(jié)構(gòu)功能配置,實(shí)現(xiàn)其硬件功能。
4 結(jié)束語(yǔ)
該系統(tǒng)運(yùn)用先進(jìn)的EDA軟件和VHDL,采用模塊法白頂向下的設(shè)計(jì)原則,并借助于CPLD實(shí)現(xiàn)時(shí)間控制器的設(shè)計(jì),充分體現(xiàn)了現(xiàn)代數(shù)字電路設(shè)計(jì)系統(tǒng)芯片化,芯片設(shè)計(jì)化設(shè)計(jì)的思想突破了傳統(tǒng)電子系統(tǒng)的設(shè)計(jì)模式,使系統(tǒng)開(kāi)發(fā)速度快、成本低、系統(tǒng)性能大幅度提高。
評(píng)論