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

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

圖2 同步電路和異步電路設計電路圖

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

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

兩種VHDL代碼下載到FPGA芯片中,均實現了計時和調時的功能,下載實物及顯示結果如圖4所示。六個數碼管分別顯示小時,分鐘和秒,通過兩個按鍵可以分別對小時和分鐘進行調整,使顯示的時間與實際時間相符。

圖4 VHDL代碼下載后數碼管顯示實物圖
通過拓展添加報時,鬧鐘等功能,使數字鐘的功能更加多樣化;也可以將該VHDL代碼移植到液晶顯示屏,并添加星期、日期,使其應用更加全面。
上述的兩個設計通過Quartus軟件平臺下載到FPGA芯片中,均可實現預期的功能。大部分的數字電路均會有時鐘對電路進行觸發,而時鐘控制的方式有同步和異步的區別,一般來講,同步電路設計相對簡單,易于實現和糾錯,而異步電路更需要考慮時序問題。本文通過數字鐘的VHDL設計,對兩種電路的設計思路和VHDL代碼進行了分析比較,對VHDL的學習者和硬件電路的設計開發人員提供了一定的參考。