余麗紅,龍諾春,林春景,柳貴東
(廣東白云學院 電氣與信息工程學院,廣東 廣州 510450)
超高速集成電路硬件描述語言(Very-High-Speed Integrated Circuit Hardware Description Language,VHDL)是電子產(chǎn)品設計的三大語言之一,其語法非常嚴格,是我國電子設計自動化硬件描述語言的國家統(tǒng)一標準[1]。VHDL的程序結(jié)構(gòu)特點是將設計實體包括元件、電路模塊或電路系統(tǒng)分成外部端口和內(nèi)部實體。VHDL用簡單的源代碼來描述復雜的內(nèi)部電路結(jié)構(gòu),采用分層設計、頂層統(tǒng)一的描述方法。在完成外部端口的定義和內(nèi)部實體的開發(fā)后,就可以生成能被其他系統(tǒng)設計反復利用的模塊,供電路設計人員共享,避免重復設計,提高設計效率。
VHDL模塊化的設計方法是借助庫。庫一般分為IEEE、WORK、STD、ASIC和用戶自定庫5種。庫被用來存放預先編譯好的程序代碼數(shù)據(jù),包括程序包集合定義、配置定義、實體定義和結(jié)構(gòu)體定義。庫的優(yōu)勢在于方便設計者共用已經(jīng)編譯通過的設計成果。設計者在設計電子產(chǎn)品的過程中,首先要明確電子系統(tǒng)的整體功能,并將大的功能模塊劃分為小的功能模塊,功能模塊進一步細分為功能子模塊。子模塊的設計用一個VHDL程序?qū)崿F(xiàn)。VHDL自頂向下[2]的硬件模塊化設計流程如圖1所示。
圖1 VHDL模塊化設計流程
交通燈控制器綜合了組合電路與時序電路,主要用來模擬交通路口紅黃綠燈變化和倒計時的過程。交通控制器主要包括:時鐘分頻、紅黃綠狀態(tài)轉(zhuǎn)換、紅黃綠狀態(tài)譯碼、倒計時顯示譯碼模塊。設計過程中所用實驗設備的初始時鐘為20 MHz。利用分頻模塊將20 MHz的頻率轉(zhuǎn)換為1 Hz,對應時間為1 s。分頻模塊是通過計數(shù)器來實現(xiàn),紅黃綠狀態(tài)轉(zhuǎn)換模塊用于控制交通燈的狀態(tài)依次為紅、黃、綠,重復循環(huán),并控制3種狀態(tài)的倒計時時間。顯示譯碼模塊可以顯示交通燈的狀態(tài)和時間。狀態(tài)譯碼將3種狀態(tài)譯為段碼和位碼,其中,段碼用于顯示3種狀態(tài)倒計時的時間,位碼用于控制相應數(shù)碼管的亮滅。顯示模塊需要用3個LED燈和兩個數(shù)碼管,利用動態(tài)掃描原理來完成兩個數(shù)碼管的顯示。每個時鐘周期內(nèi)掃描一個數(shù)碼管,顯示一位數(shù)據(jù),顯示的數(shù)據(jù)值由段碼來控制,由于人眼的視覺暫留現(xiàn)象,只要時鐘掃描>100 Hz,人眼觀測到的所有數(shù)碼管就是同時顯示的[3]。系統(tǒng)設計的模塊框圖如圖2所示。
圖2 系統(tǒng)設計的模塊框
完整的VHDL程序一般包括5個部分:庫、程序包、配置、結(jié)構(gòu)體和實體。庫專門用于存儲預先編譯完成的實體、結(jié)構(gòu)體、程序包集合和配置。程序包用于存放各設計模能夠共享的常數(shù)、數(shù)據(jù)類型、子程序等基礎設計單元。配置用于把特定的結(jié)構(gòu)體關(guān)聯(lián)到一個確定的實體上,為一個大型系統(tǒng)的設計提供管理和工程組織[4]。實體用于參數(shù)定義和描述模塊的外部端口。結(jié)構(gòu)體是VHDL程序的主體部分,用于描述模塊的具體行為、結(jié)構(gòu)和功能。
2.2.1 時鐘分頻模塊
根據(jù)設計要求,分頻模塊的外部端口共有4個:初始時鐘輸入端口、復位控制輸入端口、122 Hz的動態(tài)掃描脈沖輸出端口以及1 Hz的計時脈沖輸出端口。分頻模塊實體的VHDL語言描述如下:
ENTITY SZFP IS
PORT(CLK,RST: IN STD_LOGIC;
CT1,CT2: OUT STD_LOGIC);
END SZFP;
端口說明語句中,CLK是輸入端口,表示初始時鐘信號;RST是輸入端口,代表復位信號;CT1、CT2為輸出端口,表示分頻以后的時鐘信號,分別為1 Hz,100 Hz。
2.2.2 狀態(tài)轉(zhuǎn)換模塊
狀態(tài)轉(zhuǎn)換模塊的外部端口共有5個:1 Hz計時脈沖輸入端口、復位控制輸入端口、紅黃綠狀態(tài)輸出端口、個位數(shù)據(jù)輸出端口和十位數(shù)據(jù)輸出端口。該模塊實體的VHDL語言描述如下:
ENTITY ZTZH IS
PORT(CLK,RST: IN STD_LOGIC;
STATE: OUT STD_LOGIC_VECTOR(2 DOWNTO 0)
DL,DH:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ZTZH;
其中,STATE表示狀態(tài)輸出信號;DL,DH代表輸出的倒計時數(shù)據(jù)。
2.2.3 狀態(tài)譯碼模塊
狀態(tài)譯碼模塊的外部端口共有兩個:紅黃綠狀態(tài)輸入端口和LED燈控制輸出端口。該模塊實體的VHDL語言描述如下:
ENTITY ZTYM IS
PORT(STATE: IN STD_LOGIC_VECTOR(2 DOWNTO 0)
LIGHT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END ZTYM;
2.2.4 顯示譯碼模塊
顯示譯碼模塊的外部端口共有6個:122 Hz動態(tài)掃描脈沖輸入端口、復位控制輸入端口、十位數(shù)據(jù)輸入端口、個位數(shù)據(jù)輸入端口、控制數(shù)值的段碼和選擇芯片的位碼。該模塊實體的VHDL語言描述如下:
ENTITY XSYM IS
PORT(CLK,RST:IN STD_LOGIC;
DL,DH:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
EN:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END XSYM;
2.2.5 頂層系統(tǒng)模塊
頂層系統(tǒng)模塊將時鐘分頻、計數(shù)器狀態(tài)轉(zhuǎn)換、譯碼、顯示4個分模塊整合在一起。在VHDL程序中利用元件例化語句來建立頂層模塊與子模塊之間的連接關(guān)系。元件例化語句由元件聲明語句和元件例化語句[5]兩部分組成。元件聲明(component)是對頂層要調(diào)用的較低層次的實體進行端口說明,相當于完成底層元件的封裝。元件例化(port map)是在調(diào)用較低層次的實體時建立起端口之間的一一對應關(guān)系。設計最終借助元件例化實現(xiàn)交通燈控制器的功能。頂層模塊設計實體共有5個端口:20 MHz初始時鐘輸入、復位控制輸入、LED燈控制輸出端口,段碼輸出和位碼輸出,相對應的VHDL語言描述如下:
ENTITY JTD IS
PORT(CLK,RST:IN STD_LOGIC;
DT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
LIGHT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
EN:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END JTD;
元件例化語句如下:
U0:SZFP PORT MAP(CLK,RST,CT1,CT2);
U1:ZTZH PORT MAP(CT1,RST,STATE,DL,DH);
U2:ZTYM PORT MAP(STATE,LIGHT);
U3:XSYM PORT MAP(CT2,RST,DL,DH,DT,EN);
其中,DL、DH、CT1、CT2為內(nèi)部信號。
交通燈控制器的硬件實現(xiàn)選用Altera公司的MAX+PLUSⅡ軟件。硬件實現(xiàn)之前先完成4個模塊的時序仿真,接下來完成頂層模塊的時序仿真,然后在目標芯片上進行管腳分配,連接好對應引腳后就可以進行程序下載和硬件實現(xiàn)。本設計的硬件實現(xiàn)如圖3所示。
圖3 交通燈控制器
VHDL語言對于初學者來講是比較難掌握的,文章根據(jù)多年的教學經(jīng)驗設計交通燈控制器的程序,用以幫助學生掌握自上而下的模塊化程序設計思想,讓學生對VHDL語言中的順序語句、并行語句(特別是進程語句)有更深刻的理解。