王真富 毛玉青
(浙江省衢州職業技術學院 信息工程學院,浙江 衢州 324000)
基于FPGA的EDA課程是電子信息類專業普遍開設的核心課程,內容涉及EDA設計流程、EDA設計工具、硬件描述語言、現場可編程邏輯器件等。為了提高教學效果,通常使用EDA實驗箱來輔助教學。實驗箱采用的是一體化結構,功能相對固定,很難加入學生自己設計的外圍電路,不利于學生的動手能力與創新能力培養;實驗箱的體積較大,攜帶不便,利用其開展課外學習不方便,因而限制了學生自主性學習。為此,對基于FPGA的EDA課程的實訓進行了形式多樣的改革[1~2]。本文以點陣字符顯示實訓為例,介紹基于FPGA最小系統板的EDA課程的實訓設計。
FPGA最小系統是指使FPGA正常工作的最簡單的系統,只包括FPGA必要的控制電路,外圍電路盡可能最少。一般FPGA最小系統主要包括:FPGA芯片、下載電路、外部時鐘、復位電路、電源、SDRAM和Flash[3~4]。本文使用的FPGA最小系統板,以Altera公司cyclone II系列芯片EP2C8Q208C8芯片作為核心,將FPGA芯片的IO引腳以插針形式引出,提供給用戶連接輸入輸出外圍電路;下載電路包括JTAG以及ASP接口,提供了EPCS4配置芯片;外部時鐘為50MHz有源晶體,提供系統工作主時鐘;具有復位電路和64Mbit SDRAM;電源部分將外部輸入5V電源,經過LT1085-3.3V穩壓后輸出3.3V電壓,提供FPGA的IO工作電壓;3.3V電壓送LT1117-1.2V穩壓,提供FPGA的內部核工作電壓。
設計基于FPGA最小系統板的點陣字符顯示實訓由簡單到復雜,可分為單點陣字符顯示、多點陣字符顯示、靜態字符顯示、動態移動字符顯示。
單字符點陣顯示實訓所需硬件器材有:FPGA最小系統板、16×16 LED(light emitting diode)點陣、連接導線。
2.1.1 點陣字符顯示原理與硬件電路連接
16×16 LED點陣是由256個發光二極管按矩陣形式排列而成,每一行上的LED有一個公共的陽極(或陰極),每一列上的LED有一個公共的陰極(或陽極)。用16×16 LED點陣顯示字符,就是控制組成字符的各個點所在位置相對應的LED器件發光。一般利用人眼的視覺暫留,采用動態分時掃描技術使LED點陣模塊顯示字符。動態分時掃描簡單地說,送出第1列各行LED亮滅的數據,同時選通該列使其點亮一定時間,然后熄滅;再送出第2列各行LED亮滅的數據,同時選通第2列使其點亮相同的時間, 然后熄滅;依此類推,完成第16列之后,又重新點亮第1列,如此反復循環。只要循環速度足夠快(24次/s以上),由于人眼的視覺暫留現象,能夠看到顯示屏上穩定的字符[5]。
FPGA引腳資源豐富,且可設置成點亮LED所需的電流驅動型,在LED點陣顯示要求不高的情況下,為了實訓電路簡單,可以不加驅動電路,直接用FPGA管腳輸出驅動16×16 LED點陣,實訓連接電路如圖1所示。點陣字符顯示可采用列掃描方法,即FPGA產生c0—c15列掃描選通信號,同時輸出對應列各行的數據;也可采用行掃描方法,即FPGA產生r0—r15行選通信號,同時輸出相對應行的各列的數據。

2.1.2 VHDL程序設計
一個16×16點陣的漢字總共需要16×16/8=32個字節表示模值,模值一般用16進制數表示。首先,用一個一維數組存儲要顯示的16×16點陣漢字取模所得的16進制數值,然后,使用VHDL程序設計一個進程,將字模信號轉換為驅動16×16LED點陣所需的信號,存儲在一個16×16的二維數組,最后,使用一個進程對這個數組按一定頻率輸出顯示點陣字符所需信號[6]。由于VHDL程序設計的是硬件,可以并發執行,所以處理顯示字符模值信號進程與輸出顯示進程可同時進行(并發執行),設計的主要程序如下:
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”是為了產生列掃描左移信號而設置的內部信號;數組“F_1_M”是存儲要顯示的字符模值的一維數組;數組“ZF_1”是存儲驅動信號的16×16的二維數組;進程“P0”用來處理顯示字符模值,產生各列每行信號存入二維數組;進程“P1”用來按照一定的頻率輸出列掃描信號和各行信號;“R_s”是VHDL程序實體列輸出端口;“LED_X”是行輸出端口。
2.1.3 單字符點陣顯示效果與實訓擴張
根據EDA設計流程,編譯設計完成的VHDL程序,載入FPGA芯片,可獲得16×16LED點陣字符顯示。如果要實現多個字符交替顯示,只要按照顯示時間長短,更新二維數組中的信號值即可。如果要實現字符左右移動或上下移動,可通過更改二維數組中的信號值,也可改變輸出列掃描和各行信號進程的輸出方式實現。
在單字符顯示實訓基礎上,可擴張到3字符點陣顯示實訓,即同時顯示3個點陣字符。它需要3片16×16 LED點陣,如果采用單字符顯示實訓的連接方式,1個點陣字符顯示控制需要16個行加16個列信號,即32個IO信號,3個字符需要96個IO信號,需要使用FPGA芯片的96個IO引腳。雖然FPGA具有豐富的管腳資源,但基于cyclone II系列芯片EP2C8Q208C8芯片的最小系統板的IO接口除了已使用的IO接口,可供用戶使用的只有80余個,顯然IO接口數量達不到要求。在不增加硬件資源的條件下,只要改變3個點陣字符的連接方式,就可實現3字符點陣同時顯示。連接方法是將3個點陣字符的行(或列)信號串聯后與FPGA的IO口相連接,而每個點陣字符的列(或行)信號直接與FPGA的IO口相連接,連接方式如圖2所示。這樣的連接方式只需要64個IO口,基于cyclone II系列芯片EP2C8Q208C8芯片最小系統板的IO接口可以達到連接的要求。實訓的VHDL程序設計,可仿照單字符的VHDL設計程序,只要改變2個數組的長度即可。

同時顯示16個點陣字符,需要16片16×16 LED點陣,如果采用顯示3個點陣字符的連接方式,16個點陣字符的行(或列)信號串聯后與FPGA的IO口相連接,而每個點陣字符的列(或行)信號直接與FPGA的IO口相連接。這樣的連接方式需要272個IO口,顯然基于cyclone II系列芯片EP2C8Q208C8芯片的最小系統板的IO接口數量達不到連接的要求。實訓時可通過增加74HC573鎖存器來實現,每個字符增加2個74HC573鎖存器[7]。其連接方式為16片LED點陣的行(或列)信號串聯后與FPGA的IO口相連接;74HC573鎖存器的數據輸出與每片LED點陣字符的列(或行)信號相連接,每個字符74HC573鎖存器輸入的數據線相串聯后與FPGA的IO口相連接;每個字符74HC573鎖存器的控制信號與FPGA的IO口直接相連接。
實訓的VHDL程序設計,可仿照單字符的VHDL設計程序,但對輸出的掃描信號要與輸出控制74HC573鎖存器的鎖存控制信號相配對,且要考慮掃描頻率的快慢,由于篇幅限制,不再列出。
設計的基于FPGA最小系統板點陣字符顯示實訓,從單字符顯示到多字符顯示,從靜態到動態,電路簡單,VHDL程序簡捷靈活,適合EDA課程學生實訓。整個實訓系統電壓低、體積小,總價200元左右,安全方便,便于攜帶。課后學生可將該實訓系統借出實訓室,在寢室或創新實訓室自己動手搭建電路并編程實現,大大提高了實訓教學的效率、水平和質量。實踐證明,基于FPGA最小系統板的EDA課程實訓,在培養學生創新意識、動手能力和創新能力方面起到了良好的作用。
參考文獻:
[1]梁洪衛,高丙坤,邸曉宇,等.“EDA技術與應用”實驗與實踐教學改革[J].實驗技術與管理,2011,28(1):147~149.
[2]黃衛華,賈歷程.基于FPGA的EDA實驗系統改革與實踐[J].實驗室研究與探索,2012,31(4):203~206.
[3]陳月強,劉星.基于Xilinx XC3S500E的FPGA最小開發板制作[J].電子器件應用,2007,9(20):22~25.
[4]章麗萍,周鳳星.基于EP1C3T144的最小系統開發板的設計[J].武漢科技大學學報:自然科學版,2007,30(3):293~295.
[5]郭寶增,鄧淳苗.基于FPGA的LED顯示屏控制系統設計[J].液晶與顯示,2010,25(3):424~428.
[6]鄧春健,傅瑜,李文生,等.點陣顯示數據內存地址分區方法[J].半導體光電,2009,30(1):121~126.
[7]文華武,汪濤.基于FPGA的LED大屏幕控制系統的設計與實現[J].電子技術應用,2010,36(9):21~23.