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