王真富 毛玉青
(浙江省衢州職業(yè)技術(shù)學(xué)院 信息工程學(xué)院,浙江 衢州 324000)
基于FPGA的EDA課程是電子信息類專業(yè)普遍開設(shè)的核心課程,內(nèi)容涉及EDA設(shè)計流程、EDA設(shè)計工具、硬件描述語言、現(xiàn)場可編程邏輯器件等。為了提高教學(xué)效果,通常使用EDA實驗箱來輔助教學(xué)。實驗箱采用的是一體化結(jié)構(gòu),功能相對固定,很難加入學(xué)生自己設(shè)計的外圍電路,不利于學(xué)生的動手能力與創(chuàng)新能力培養(yǎng);實驗箱的體積較大,攜帶不便,利用其開展課外學(xué)習(xí)不方便,因而限制了學(xué)生自主性學(xué)習(xí)。為此,對基于FPGA的EDA課程的實訓(xùn)進行了形式多樣的改革[1~2]。本文以點陣字符顯示實訓(xùn)為例,介紹基于FPGA最小系統(tǒng)板的EDA課程的實訓(xùn)設(shè)計。
FPGA最小系統(tǒng)是指使FPGA正常工作的最簡單的系統(tǒng),只包括FPGA必要的控制電路,外圍電路盡可能最少。一般FPGA最小系統(tǒng)主要包括:FPGA芯片、下載電路、外部時鐘、復(fù)位電路、電源、SDRAM和Flash[3~4]。本文使用的FPGA最小系統(tǒng)板,以Altera公司cyclone II系列芯片EP2C8Q208C8芯片作為核心,將FPGA芯片的IO引腳以插針形式引出,提供給用戶連接輸入輸出外圍電路;下載電路包括JTAG以及ASP接口,提供了EPCS4配置芯片;外部時鐘為50MHz有源晶體,提供系統(tǒng)工作主時鐘;具有復(fù)位電路和64Mbit SDRAM;電源部分將外部輸入5V電源,經(jīng)過LT1085-3.3V穩(wěn)壓后輸出3.3V電壓,提供FPGA的IO工作電壓;3.3V電壓送LT1117-1.2V穩(wěn)壓,提供FPGA的內(nèi)部核工作電壓。
設(shè)計基于FPGA最小系統(tǒng)板的點陣字符顯示實訓(xùn)由簡單到復(fù)雜,可分為單點陣字符顯示、多點陣字符顯示、靜態(tài)字符顯示、動態(tài)移動字符顯示。
單字符點陣顯示實訓(xùn)所需硬件器材有:FPGA最小系統(tǒng)板、16×16 LED(light emitting diode)點陣、連接導(dǎo)線。
2.1.1 點陣字符顯示原理與硬件電路連接
16×16 LED點陣是由256個發(fā)光二極管按矩陣形式排列而成,每一行上的LED有一個公共的陽極(或陰極),每一列上的LED有一個公共的陰極(或陽極)。用16×16 LED點陣顯示字符,就是控制組成字符的各個點所在位置相對應(yīng)的LED器件發(fā)光。一般利用人眼的視覺暫留,采用動態(tài)分時掃描技術(shù)使LED點陣模塊顯示字符。動態(tài)分時掃描簡單地說,送出第1列各行LED亮滅的數(shù)據(jù),同時選通該列使其點亮一定時間,然后熄滅;再送出第2列各行LED亮滅的數(shù)據(jù),同時選通第2列使其點亮相同的時間, 然后熄滅;依此類推,完成第16列之后,又重新點亮第1列,如此反復(fù)循環(huán)。只要循環(huán)速度足夠快(24次/s以上),由于人眼的視覺暫留現(xiàn)象,能夠看到顯示屏上穩(wěn)定的字符[5]。
FPGA引腳資源豐富,且可設(shè)置成點亮LED所需的電流驅(qū)動型,在LED點陣顯示要求不高的情況下,為了實訓(xùn)電路簡單,可以不加驅(qū)動電路,直接用FPGA管腳輸出驅(qū)動16×16 LED點陣,實訓(xùn)連接電路如圖1所示。點陣字符顯示可采用列掃描方法,即FPGA產(chǎn)生c0—c15列掃描選通信號,同時輸出對應(yīng)列各行的數(shù)據(jù);也可采用行掃描方法,即FPGA產(chǎn)生r0—r15行選通信號,同時輸出相對應(yīng)行的各列的數(shù)據(jù)。
2.1.2 VHDL程序設(shè)計
一個16×16點陣的漢字總共需要16×16/8=32個字節(jié)表示模值,模值一般用16進制數(shù)表示。首先,用一個一維數(shù)組存儲要顯示的16×16點陣漢字取模所得的16進制數(shù)值,然后,使用VHDL程序設(shè)計一個進程,將字模信號轉(zhuǎn)換為驅(qū)動16×16LED點陣所需的信號,存儲在一個16×16的二維數(shù)組,最后,使用一個進程對這個數(shù)組按一定頻率輸出顯示點陣字符所需信號[6]。由于VHDL程序設(shè)計的是硬件,可以并發(fā)執(zhí)行,所以處理顯示字符模值信號進程與輸出顯示進程可同時進行(并發(fā)執(zhí)行),設(shè)計的主要程序如下:
P0:process(clk)
variable CNT_M:integer range 0 to 16:=0;
begin
if clk′event and clk =′1′ then
if CNT_M=16 then
CNT_M:=0;
else
ZF_1(15-CNT_M)<=conv_std_logic_vector(ZF_1_M(CNT_M),8)&
conv_std_logic_vector(ZF_1_M(CNT_M+16),8);
CNT_M:=CNT_M+1;
end if;
end if;
end process;
P1:process(clk)
variable COUNT:integer range 0 to 16:=0;
begin
if clk′event and clk =′1′then
if COUNT=16 then
COUNT:=0;R_s_T<=″11111111111111110″;
else
R_s_T<=R_s_T(15 down to 0)&′1′;R_s<=R_s_T(15 down to 0);
LED_X<=ZF_1(COUNT); COUNT:=COUNT+1;
end if;
end if;
end process;
程序說明:程序中的信號“R_s_T”是為了產(chǎn)生列掃描左移信號而設(shè)置的內(nèi)部信號;數(shù)組“F_1_M”是存儲要顯示的字符模值的一維數(shù)組;數(shù)組“ZF_1”是存儲驅(qū)動信號的16×16的二維數(shù)組;進程“P0”用來處理顯示字符模值,產(chǎn)生各列每行信號存入二維數(shù)組;進程“P1”用來按照一定的頻率輸出列掃描信號和各行信號;“R_s”是VHDL程序?qū)嶓w列輸出端口;“LED_X”是行輸出端口。
2.1.3 單字符點陣顯示效果與實訓(xùn)擴張
根據(jù)EDA設(shè)計流程,編譯設(shè)計完成的VHDL程序,載入FPGA芯片,可獲得16×16LED點陣字符顯示。如果要實現(xiàn)多個字符交替顯示,只要按照顯示時間長短,更新二維數(shù)組中的信號值即可。如果要實現(xiàn)字符左右移動或上下移動,可通過更改二維數(shù)組中的信號值,也可改變輸出列掃描和各行信號進程的輸出方式實現(xiàn)。
在單字符顯示實訓(xùn)基礎(chǔ)上,可擴張到3字符點陣顯示實訓(xùn),即同時顯示3個點陣字符。它需要3片16×16 LED點陣,如果采用單字符顯示實訓(xùn)的連接方式,1個點陣字符顯示控制需要16個行加16個列信號,即32個IO信號,3個字符需要96個IO信號,需要使用FPGA芯片的96個IO引腳。雖然FPGA具有豐富的管腳資源,但基于cyclone II系列芯片EP2C8Q208C8芯片的最小系統(tǒng)板的IO接口除了已使用的IO接口,可供用戶使用的只有80余個,顯然IO接口數(shù)量達不到要求。在不增加硬件資源的條件下,只要改變3個點陣字符的連接方式,就可實現(xiàn)3字符點陣同時顯示。連接方法是將3個點陣字符的行(或列)信號串聯(lián)后與FPGA的IO口相連接,而每個點陣字符的列(或行)信號直接與FPGA的IO口相連接,連接方式如圖2所示。這樣的連接方式只需要64個IO口,基于cyclone II系列芯片EP2C8Q208C8芯片最小系統(tǒng)板的IO接口可以達到連接的要求。實訓(xùn)的VHDL程序設(shè)計,可仿照單字符的VHDL設(shè)計程序,只要改變2個數(shù)組的長度即可。
同時顯示16個點陣字符,需要16片16×16 LED點陣,如果采用顯示3個點陣字符的連接方式,16個點陣字符的行(或列)信號串聯(lián)后與FPGA的IO口相連接,而每個點陣字符的列(或行)信號直接與FPGA的IO口相連接。這樣的連接方式需要272個IO口,顯然基于cyclone II系列芯片EP2C8Q208C8芯片的最小系統(tǒng)板的IO接口數(shù)量達不到連接的要求。實訓(xùn)時可通過增加74HC573鎖存器來實現(xiàn),每個字符增加2個74HC573鎖存器[7]。其連接方式為16片LED點陣的行(或列)信號串聯(lián)后與FPGA的IO口相連接;74HC573鎖存器的數(shù)據(jù)輸出與每片LED點陣字符的列(或行)信號相連接,每個字符74HC573鎖存器輸入的數(shù)據(jù)線相串聯(lián)后與FPGA的IO口相連接;每個字符74HC573鎖存器的控制信號與FPGA的IO口直接相連接。
實訓(xùn)的VHDL程序設(shè)計,可仿照單字符的VHDL設(shè)計程序,但對輸出的掃描信號要與輸出控制74HC573鎖存器的鎖存控制信號相配對,且要考慮掃描頻率的快慢,由于篇幅限制,不再列出。
設(shè)計的基于FPGA最小系統(tǒng)板點陣字符顯示實訓(xùn),從單字符顯示到多字符顯示,從靜態(tài)到動態(tài),電路簡單,VHDL程序簡捷靈活,適合EDA課程學(xué)生實訓(xùn)。整個實訓(xùn)系統(tǒng)電壓低、體積小,總價200元左右,安全方便,便于攜帶。課后學(xué)生可將該實訓(xùn)系統(tǒng)借出實訓(xùn)室,在寢室或創(chuàng)新實訓(xùn)室自己動手搭建電路并編程實現(xiàn),大大提高了實訓(xùn)教學(xué)的效率、水平和質(zhì)量。實踐證明,基于FPGA最小系統(tǒng)板的EDA課程實訓(xùn),在培養(yǎng)學(xué)生創(chuàng)新意識、動手能力和創(chuàng)新能力方面起到了良好的作用。
參考文獻:
[1]梁洪衛(wèi),高丙坤,邸曉宇,等.“EDA技術(shù)與應(yīng)用”實驗與實踐教學(xué)改革[J].實驗技術(shù)與管理,2011,28(1):147~149.
[2]黃衛(wèi)華,賈歷程.基于FPGA的EDA實驗系統(tǒng)改革與實踐[J].實驗室研究與探索,2012,31(4):203~206.
[3]陳月強,劉星.基于Xilinx XC3S500E的FPGA最小開發(fā)板制作[J].電子器件應(yīng)用,2007,9(20):22~25.
[4]章麗萍,周鳳星.基于EP1C3T144的最小系統(tǒng)開發(fā)板的設(shè)計[J].武漢科技大學(xué)學(xué)報:自然科學(xué)版,2007,30(3):293~295.
[5]郭寶增,鄧淳苗.基于FPGA的LED顯示屏控制系統(tǒng)設(shè)計[J].液晶與顯示,2010,25(3):424~428.
[6]鄧春健,傅瑜,李文生,等.點陣顯示數(shù)據(jù)內(nèi)存地址分區(qū)方法[J].半導(dǎo)體光電,2009,30(1):121~126.
[7]文華武,汪濤.基于FPGA的LED大屏幕控制系統(tǒng)的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2010,36(9):21~23.