黃衛(wèi)華
(廣西機(jī)電職業(yè)技術(shù)學(xué)院, 南寧 530007)
VHDL是超高速集成電路硬件描述語(yǔ)言的簡(jiǎn)稱,是一種用于電路設(shè)計(jì)的高級(jí)語(yǔ)言[1]。VHDL功能強(qiáng)大,設(shè)計(jì)靈活,具有強(qiáng)大的數(shù)字電路描述能力,且易于修改,方便移植,使用VHDL進(jìn)行數(shù)字電路設(shè)計(jì)目前已經(jīng)成為數(shù)字電路設(shè)計(jì)的一種先進(jìn)技術(shù)和手段[2]。通過(guò)編寫VHDL語(yǔ)言對(duì)硬件電路進(jìn)行描述從而實(shí)現(xiàn)對(duì)硬件電路的設(shè)計(jì),使得硬件電路的設(shè)計(jì)更為靈活、方便和快捷。同時(shí)將VHDL代碼現(xiàn)場(chǎng)編程下載到FPGA(現(xiàn)場(chǎng)可編程邏輯陣列)芯片中,就可以觀察所設(shè)計(jì)電路的功能及時(shí)序是否滿足實(shí)際應(yīng)用要求,從而降低成本、實(shí)現(xiàn)高效設(shè)計(jì)。本文使用VHDL代碼對(duì)數(shù)字鐘進(jìn)行了設(shè)計(jì),特別分析了秒、分鐘、小時(shí)同步計(jì)數(shù)和異步計(jì)數(shù)的設(shè)計(jì)思路及其VHDL代碼,對(duì)VHDL語(yǔ)言的學(xué)習(xí)者和FPGA開發(fā)人員有一定的借鑒意義。
數(shù)字鐘是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的鐘表,廣泛應(yīng)用于各種數(shù)字設(shè)備[3]。數(shù)字鐘的主體結(jié)構(gòu)是時(shí)鐘的正常走時(shí)及顯示,有時(shí)也會(huì)有其它功能,比如通過(guò)按鍵調(diào)整時(shí)間、整點(diǎn)報(bào)時(shí)或鬧鐘等。本文設(shè)計(jì)的數(shù)字鐘只包含基本功能及調(diào)時(shí)功能,即通過(guò)動(dòng)態(tài)數(shù)碼管顯示實(shí)時(shí)時(shí)間,并能通過(guò)按鍵實(shí)現(xiàn)對(duì)分鐘和小時(shí)的顯示進(jìn)行調(diào)整。因此,該設(shè)計(jì)的模塊劃分主要包含分頻模塊,計(jì)時(shí)模塊、按鍵模塊和動(dòng)態(tài)數(shù)碼管顯示模塊。其中分頻模塊將系統(tǒng)時(shí)鐘分頻,產(chǎn)生時(shí)鐘計(jì)時(shí)所需的1Hz時(shí)鐘,計(jì)時(shí)模塊完成基本的實(shí)時(shí)時(shí)鐘計(jì)數(shù),輸出為小時(shí)、分鐘和秒的十位和個(gè)位的4位二進(jìn)制數(shù),按鍵模塊完成對(duì)按鍵的消抖,動(dòng)態(tài)數(shù)碼管顯示模塊將計(jì)數(shù)值的4位二進(jìn)制數(shù)進(jìn)行譯碼并由數(shù)碼管進(jìn)行顯示,整個(gè)系統(tǒng)模塊劃分如圖1所示。

圖1 數(shù)字鐘功能模塊劃分
在時(shí)鐘走時(shí)模塊中,可以將該模塊分成3個(gè)小模塊,分別為小時(shí)計(jì)時(shí)、分鐘計(jì)時(shí)和秒計(jì)時(shí),在設(shè)計(jì)時(shí)需要考慮到秒向分鐘的進(jìn)位、分鐘向小時(shí)的進(jìn)位處理問(wèn)題以及按鍵調(diào)時(shí)處理問(wèn)題。可以有兩種處理方式:第一種方式是使用同步電路,即秒、分鐘和小時(shí)的計(jì)時(shí)時(shí)鐘均為1 Hz時(shí)鐘;第二種方式是使用異步電路,即秒的進(jìn)位輸出信號(hào)作為分鐘的計(jì)時(shí)時(shí)鐘,而分鐘的進(jìn)位輸出信號(hào)做為小時(shí)的計(jì)時(shí)時(shí)鐘。兩種設(shè)計(jì)方式均可以實(shí)現(xiàn)正常計(jì)時(shí)。在其中適當(dāng)加入按鍵控制電路,即可實(shí)現(xiàn)通過(guò)按鍵調(diào)時(shí)間功能。
同步電路和異步電路的設(shè)計(jì)電路原理圖如圖2所示,其仿真波形如圖3所示(原理圖只提供設(shè)計(jì)思路,實(shí)際設(shè)計(jì)為VHDL代碼)。由仿真波形可以看出,兩種電路設(shè)計(jì)均可以實(shí)現(xiàn)正常走時(shí),也可以實(shí)現(xiàn)按鍵調(diào)時(shí)功能。比較而言,同步電路由于使用同一個(gè)時(shí)鐘,電路相對(duì)簡(jiǎn)單,容易控制,且不會(huì)由于延遲產(chǎn)生誤操作,按鍵處于低電平時(shí)為調(diào)時(shí)狀態(tài),調(diào)時(shí)時(shí)鐘為1Hz,因此調(diào)時(shí)速度相對(duì)較慢。而異步電路小時(shí)、分鐘和秒電路使用不同的時(shí)鐘進(jìn)行計(jì)時(shí),電路設(shè)計(jì)上相對(duì)復(fù)雜,但是按鍵設(shè)計(jì)上,比較容易將按鍵做為調(diào)時(shí)時(shí)鐘,因此調(diào)時(shí)速度相對(duì)較快,但這時(shí)候需要給按鍵增加消抖功能模塊,圖2(b)圖原理圖中的按鍵沒(méi)有包含消抖功能。

圖2 同步電路和異步電路設(shè)計(jì)電路圖

圖3 同步電路和異步電路仿真波形圖
同步計(jì)數(shù)電路參考VHDL程序如下,將秒計(jì)數(shù)的進(jìn)位輸出端做為分鐘的計(jì)數(shù)使能端,即可實(shí)現(xiàn)由秒向分鐘的進(jìn)位,若要將按鍵因素考慮進(jìn)去,可以將按鍵信號(hào)和秒進(jìn)位信號(hào)進(jìn)行一定的邏輯運(yùn)算之后再做為分鐘的使能信號(hào),這里我們使用的是或運(yùn)算,即通過(guò)enm<=cs or (not keym);語(yǔ)句加入按鍵。此時(shí),按鍵為低電平時(shí)調(diào)時(shí)。

異步計(jì)數(shù)電路參考VHDL程序如下,將秒計(jì)數(shù)的進(jìn)位輸出端做為分鐘的計(jì)時(shí)時(shí)鐘,使用異或運(yùn)算將按鍵加入,同時(shí)實(shí)現(xiàn)計(jì)時(shí)和調(diào)時(shí)功能。此時(shí)按鍵可以作為時(shí)鐘進(jìn)行分鐘和小時(shí)的調(diào)時(shí),但是由于按鍵在按下和釋放的時(shí)候具有抖動(dòng),因此需要加按鍵消抖程序。

兩種VHDL代碼下載到FPGA芯片中,均實(shí)現(xiàn)了計(jì)時(shí)和調(diào)時(shí)的功能,下載實(shí)物及顯示結(jié)果如圖4所示。六個(gè)數(shù)碼管分別顯示小時(shí),分鐘和秒,通過(guò)兩個(gè)按鍵可以分別對(duì)小時(shí)和分鐘進(jìn)行調(diào)整,使顯示的時(shí)間與實(shí)際時(shí)間相符。

圖4 VHDL代碼下載后數(shù)碼管顯示實(shí)物圖
通過(guò)拓展添加報(bào)時(shí),鬧鐘等功能,使數(shù)字鐘的功能更加多樣化;也可以將該VHDL代碼移植到液晶顯示屏,并添加星期、日期,使其應(yīng)用更加全面。
上述的兩個(gè)設(shè)計(jì)通過(guò)Quartus軟件平臺(tái)下載到FPGA芯片中,均可實(shí)現(xiàn)預(yù)期的功能。大部分的數(shù)字電路均會(huì)有時(shí)鐘對(duì)電路進(jìn)行觸發(fā),而時(shí)鐘控制的方式有同步和異步的區(qū)別,一般來(lái)講,同步電路設(shè)計(jì)相對(duì)簡(jiǎn)單,易于實(shí)現(xiàn)和糾錯(cuò),而異步電路更需要考慮時(shí)序問(wèn)題。本文通過(guò)數(shù)字鐘的VHDL設(shè)計(jì),對(duì)兩種電路的設(shè)計(jì)思路和VHDL代碼進(jìn)行了分析比較,對(duì)VHDL的學(xué)習(xí)者和硬件電路的設(shè)計(jì)開發(fā)人員提供了一定的參考。