黃衛(wèi)華
(廣西機(jī)電職業(yè)技術(shù)學(xué)院, 南寧 530007)
VHDL是超高速集成電路硬件描述語言的簡稱,是一種用于電路設(shè)計(jì)的高級語言[1]。VHDL功能強(qiáng)大,設(shè)計(jì)靈活,具有強(qiáng)大的數(shù)字電路描述能力,且易于修改,方便移植,使用VHDL進(jìn)行數(shù)字電路設(shè)計(jì)目前已經(jīng)成為數(shù)字電路設(shè)計(jì)的一種先進(jìn)技術(shù)和手段[2]。通過編寫VHDL語言對硬件電路進(jìn)行描述從而實(shí)現(xiàn)對硬件電路的設(shè)計(jì),使得硬件電路的設(shè)計(jì)更為靈活、方便和快捷。同時(shí)將VHDL代碼現(xiàn)場編程下載到FPGA(現(xiàn)場可編程邏輯陣列)芯片中,就可以觀察所設(shè)計(jì)電路的功能及時(shí)序是否滿足實(shí)際應(yīng)用要求,從而降低成本、實(shí)現(xiàn)高效設(shè)計(jì)。本文使用VHDL代碼對數(shù)字鐘進(jìn)行了設(shè)計(jì),特別分析了秒、分鐘、小時(shí)同步計(jì)數(shù)和異步計(jì)數(shù)的設(shè)計(jì)思路及其VHDL代碼,對VHDL語言的學(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ì)有其它功能,比如通過按鍵調(diào)整時(shí)間、整點(diǎn)報(bào)時(shí)或鬧鐘等。本文設(shè)計(jì)的數(shù)字鐘只包含基本功能及調(diào)時(shí)功能,即通過動(dòng)態(tài)數(shù)碼管顯示實(shí)時(shí)時(shí)間,并能通過按鍵實(shí)現(xiàn)對分鐘和小時(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ù),按鍵模塊完成對按鍵的消抖,動(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)位處理問題以及按鍵調(diào)時(shí)處理問題??梢杂袃煞N處理方式:第一種方式是使用同步電路,即秒、分鐘和小時(shí)的計(jì)時(shí)時(shí)鐘均為1 Hz時(shí)鐘;第二種方式是使用異步電路,即秒的進(jìn)位輸出信號作為分鐘的計(jì)時(shí)時(shí)鐘,而分鐘的進(jìn)位輸出信號做為小時(shí)的計(jì)時(shí)時(shí)鐘。兩種設(shè)計(jì)方式均可以實(shí)現(xiàn)正常計(jì)時(shí)。在其中適當(dāng)加入按鍵控制電路,即可實(shí)現(xiàn)通過按鍵調(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í)鐘,電路相對簡單,容易控制,且不會(huì)由于延遲產(chǎn)生誤操作,按鍵處于低電平時(shí)為調(diào)時(shí)狀態(tài),調(diào)時(shí)時(shí)鐘為1Hz,因此調(diào)時(shí)速度相對較慢。而異步電路小時(shí)、分鐘和秒電路使用不同的時(shí)鐘進(jìn)行計(jì)時(shí),電路設(shè)計(jì)上相對復(fù)雜,但是按鍵設(shè)計(jì)上,比較容易將按鍵做為調(diào)時(shí)時(shí)鐘,因此調(diào)時(shí)速度相對較快,但這時(shí)候需要給按鍵增加消抖功能模塊,圖2(b)圖原理圖中的按鍵沒有包含消抖功能。
圖2 同步電路和異步電路設(shè)計(jì)電路圖
圖3 同步電路和異步電路仿真波形圖
同步計(jì)數(shù)電路參考VHDL程序如下,將秒計(jì)數(shù)的進(jìn)位輸出端做為分鐘的計(jì)數(shù)使能端,即可實(shí)現(xiàn)由秒向分鐘的進(jìn)位,若要將按鍵因素考慮進(jìn)去,可以將按鍵信號和秒進(jìn)位信號進(jìn)行一定的邏輯運(yùn)算之后再做為分鐘的使能信號,這里我們使用的是或運(yùn)算,即通過enm<=cs or (not keym);語句加入按鍵。此時(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í),分鐘和秒,通過兩個(gè)按鍵可以分別對小時(shí)和分鐘進(jìn)行調(diào)整,使顯示的時(shí)間與實(shí)際時(shí)間相符。
圖4 VHDL代碼下載后數(shù)碼管顯示實(shí)物圖
通過拓展添加報(bào)時(shí),鬧鐘等功能,使數(shù)字鐘的功能更加多樣化;也可以將該VHDL代碼移植到液晶顯示屏,并添加星期、日期,使其應(yīng)用更加全面。
上述的兩個(gè)設(shè)計(jì)通過Quartus軟件平臺下載到FPGA芯片中,均可實(shí)現(xiàn)預(yù)期的功能。大部分的數(shù)字電路均會(huì)有時(shí)鐘對電路進(jìn)行觸發(fā),而時(shí)鐘控制的方式有同步和異步的區(qū)別,一般來講,同步電路設(shè)計(jì)相對簡單,易于實(shí)現(xiàn)和糾錯(cuò),而異步電路更需要考慮時(shí)序問題。本文通過數(shù)字鐘的VHDL設(shè)計(jì),對兩種電路的設(shè)計(jì)思路和VHDL代碼進(jìn)行了分析比較,對VHDL的學(xué)習(xí)者和硬件電路的設(shè)計(jì)開發(fā)人員提供了一定的參考。