蔣中榮 甘俊杰 歐偉明
摘 要:為了研制基于FPGA的LED點陣顯示系統(tǒng),文中論述顯示系統(tǒng)的硬件設(shè)計方案,給出16x16 LED點陣與FPGA芯片的接口電路,詳細(xì)介紹FPGA的基于IP核的設(shè)計方法。顯示數(shù)據(jù)存放在FPGA片內(nèi),其內(nèi)部的控制邏輯單元與ROM存儲器分別進(jìn)行設(shè)計,很方便地實現(xiàn)了22個字符的左移動態(tài)掃描顯示。充分利用了FPGA運行速度快、I/O引腳多、設(shè)計靈活的特點,該文提出的LED點陣顯示控制方法具有較好的實際應(yīng)用價值。
關(guān)鍵詞:LED;點陣顯示;硬件設(shè)計;動態(tài)掃描;存儲機制;硬件調(diào)試
中圖分類號:TN873.3-34
文獻(xiàn)標(biāo)識碼:A
文章編號:1004-373X(2019)24-0016-04
0 引言
隨著科學(xué)技術(shù)的發(fā)展進(jìn)步,現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)作為嵌入式的一種,被廣泛應(yīng)用于各個領(lǐng)域[1-2]。FPGA擁有豐富的硬件資源,具有較強的可重配置能力和靈活的設(shè)計方式,已經(jīng)成為嵌入式系統(tǒng)設(shè)計的主流硬件平臺之一。與數(shù)字信號處理器(Digital Signal Processor,DSP)相比,F(xiàn)PGA能夠?qū)崿F(xiàn)數(shù)字信號處理算法硬件流水或復(fù)雜的數(shù)字控制,可以滿足高速數(shù)字控制和硬件系統(tǒng)高度集成化的需求;與單片機( Micro-Controller Unit,MCU)或者是ARM相比[3-4],F(xiàn)PGA具有更豐富的I/0引腳和更高速的性能,并且FPGA是純硬件電路實現(xiàn),工作時沒有CPU程序運行,從而可以提高系統(tǒng)可靠性和工作速度。
LED點陣顯示屏是隨著計算機技術(shù)、半導(dǎo)體微電子技術(shù)、光電子技術(shù)的迅猛發(fā)展而形成的一種新型信息顯示媒體,它利用發(fā)光二極管構(gòu)成的點陣模塊或像素單元組成可變面積的顯示屏幕,以可靠性高、使用壽命長、環(huán)境適應(yīng)能力強、性價比高、使用成本低等特點,迅速成長為平板顯示的主流產(chǎn)品,在信息顯示領(lǐng)域得到了廣泛的應(yīng)用[5-10l。近幾年有關(guān)LED點陣顯示屏的研究論文,主要基于MCU和ARM實現(xiàn)[3-4],存在運行速度慢、控制單元與LED點陣顯示屏的接口電路復(fù)雜等不足。本文研究基于FPGA的LED點陣顯示控制方法,充分利用FPGA運行速度快、I/0引腳多、設(shè)計靈活的特點,以FPGA控制16x16 LED點陣實現(xiàn)左移字符串顯示為例,介紹系統(tǒng)的整體結(jié)構(gòu)、FPGA芯片與LED點陣的接口電路、FPGA基于IP核的設(shè)計方法。
1 系統(tǒng)硬件設(shè)計方案
1.1 系統(tǒng)整體結(jié)構(gòu)圖
基于FPGA的LED點陣字符和圖像顯示系統(tǒng),由FPGA和LED點陣兩部分組成,如圖1所示。FPGA向LED點陣發(fā)送顯示數(shù)據(jù)和掃描信號,控制LED點陣的工作,實現(xiàn)字符和圖像的顯示。
FPGA芯片內(nèi)部由3個單元電路組成:時鐘邏輯單元產(chǎn)生起同步作用的系統(tǒng)時鐘脈沖信號;存儲器ROM單元用于存放顯示數(shù)據(jù),是基于FPGA的IP核而實現(xiàn)的,其中的顯示數(shù)據(jù)決定于所顯示的內(nèi)容,顯示內(nèi)容包括字符或者圖像;控制邏輯單元產(chǎn)生讀取存儲器ROM的地址信號和控制LED點陣的掃描信號,是基于FPGA的文本設(shè)計輸入方法實現(xiàn)的,如何完成其設(shè)計取決于LED點陣的顯示內(nèi)容和顯示方式,LED點陣的顯示方式分為靜態(tài)顯示和移動顯示。
1.2 FPGA與LED點陣的接口電路
一般而言,LED點陣采用低電壓掃描控制方式來完成顯示,為了敘述的方便,本文采用16x16 LED點陣,并且采用列掃描控制方式。FPGA芯片與16x16 LED點陣的接口電路如圖2所示,U1是FPGA芯片,其型號為EPIK30TC144;U2-U3是8 bit總線驅(qū)動器,其型號為74HC245;16x16 LED點陣是由4塊8x8 LED點陣模塊拼接而成的。需要說明一下,本文選用的8x8 LED點陣模塊是行共陽、列共陰的。
由圖2可知,接口電路由4片總線驅(qū)動器U2-U5組成,其中,U2和U3接收FPGA提供的行顯示數(shù)據(jù)Line[15:0],并控制16x16 LED點陣的16行,行顯示數(shù)據(jù)是高電平有效;U4和U5接收FPGA提供的列掃描信號Scan[15:0],并控制16x16 LED點陣的16列,列掃描信號是低電平有效。
芯片U2和U3的每一個輸出引腳,最多提供1個發(fā)光二極管的陽極電流,所以U2和U3的驅(qū)動能力是足夠的。芯片U4和U5的每一個輸出引腳,最多提供16個發(fā)光二極管的陰極電流之和,U4和U5的驅(qū)動能力也是足夠的,但是當(dāng)LED點陣顯示屏增大時,需要提供的最大陰極電流之和隨之增大,這時U4和U5的驅(qū)動能力不足,這種情況下可以在U4和U5的輸出端添加達(dá)林頓晶體管來滿
圖2所示接口電路的特點是,在每一個時鐘周期,在FPGA提供列掃描信號Scan[15:0]的同時,行顯示數(shù)據(jù)Line[15:0]也送到了LED點陣的行引腳,無論是行顯示數(shù)據(jù),還是列掃描信號,F(xiàn)PGA是直接送達(dá)LED點陣引腳的,不需要FPGA外部芯片進(jìn)行串并轉(zhuǎn)換和地址譯碼,因此,充分發(fā)揮了FPGA芯片的運行速度快和1/0引腳多的特點,即使LED點陣顯示屏增大時,接口電路也只是增加8 bit總線驅(qū)動器和達(dá)林頓晶體管,從而簡化了接口電路,完全能夠保證LED點陣顯示屏的刷新率和顯示亮度。
2 FPGA片內(nèi)邏輯電路的設(shè)計
2.1 FPGA芯片內(nèi)部電路框圖
由圖1可知,F(xiàn)PGA芯片內(nèi)部由3個單元電路組成:時鐘邏輯單元、存儲器ROM單元和控制邏輯單元。FPGA片內(nèi)邏輯電路的設(shè)計,是在FPGA開發(fā)環(huán)境Quar-tusⅡ下完成的,時鐘邏輯單元的設(shè)計很簡單,下面主要介紹控制邏輯單元、存儲器ROM單元的設(shè)計方法。
2.2 控制邏輯單元設(shè)計方法
如何完成控制邏輯單元的設(shè)計,取決于LED點陣的顯示內(nèi)容和顯示方式,為了敘述的方便,擬定顯示內(nèi)容為字符串,顯示方式為左移動態(tài)掃描顯示方式。因此,控制邏輯單元的功能是:產(chǎn)生讀取存儲器ROM的地址信號;產(chǎn)生LED點陣的列掃描信號。使用FPGA的VHDL硬件描述語言文本設(shè)計輸入方法,完成控制邏輯單元的設(shè)計,VHDL程序關(guān)鍵代碼如下:
Entity ControILogic is
Port(
clk:in std_logic;
//1 kHz,同步時鐘信號
ROM_Addr: out std_logic_vector(9 downto O) ;
//ROM地址信號
Scan : out std_logic_vector( 15 downto O )
//LED點陣列掃描信n號 );End Entity ControlLogic ;Architecture Artl of ControlLogic is Signal counter : std_logic_vector( 3 downto O) : = B"II11" ; Signal f_slow : std_logic ; Signal x: natural range O t0 287 := O; Signal y: natural range O t0 271 := O;
//271=287-16 , y控制左移Begin ROM_Addr <= conv_std_logic_vector( x , 10) ;
//存儲器 ROM的地址信號pl : Process ( clk) Begin if rising_edge(clk) then
if counter = B"OOOO" then
counter <= B"11lI";
else
counter <= counter- I ;
end if; end if; End Process pl ;p2 : Process( clk)
//256分頻器 Variable tmp: natural range O t0 255; Begin if rising_edge( clk) then
if (tmp=10#255#) then
tmp := O;
else
tmp := tmp +1;
end if; end if; End Process p2 ;p3 :
Process ( f_slow )
//y控制左移 Begin if rising_edge ( f_slow ) then
if (y=10#271#) then
else
end if; end if; End Process p3 ;p4 : Process ( counter)
//產(chǎn)生列掃描信n號 Begin Scan <= ( others => ' I ' ) ; case counter is
when B"0000" => Scan(0) <= 'O' ;
when B"0001I" => Scan( 1) <= 'O' ;
when B"O010"=> Scan(2)<='O';
when B"0011"=>Scan(3)<='0':
when B"0100"=>Scan(4) <='O':
when B"0101"=>Scan(5)<='O':
when B"0110"=>Scan(6)<='O';
when B."0111"=>Scan(7)<='0':
when B"1000"=>Scan(8)<='0':
when B"1001"=>Scan(9)<='0';
when B"1010"=>Scan(10)<='0':
when B."1011""=>Scan(11)<='O,:
when B"1100『t=>Scan(12)<='0,;
when B"1101"=> Scan( 13)<='0':
when B"111101t=>Scan(14)<='0';
when B"1111.t=>Scan( 15)<='0':
when others=>Scan<=(others=>1):
end case:
End Process p4;
End Artl;
2.3 創(chuàng)建只讀存儲器初始化數(shù)據(jù)文件
在FPGA芯片內(nèi)部開發(fā)的存儲器ROM單元用于存放顯示數(shù)據(jù),其中的顯示數(shù)據(jù)決定于所顯示的內(nèi)容,首先根據(jù)顯示內(nèi)容變換成顯示數(shù)據(jù),再由顯示數(shù)據(jù)創(chuàng)建只讀存儲器的初始化數(shù)據(jù)文件。
顯示內(nèi)容變換成顯示數(shù)據(jù)的過程,是在取字模數(shù)據(jù)軟件中完成的。例如,取字模數(shù)據(jù)的軟件有“PC-toLCD2002完美版”,其是一個綠色軟件。文章前面已述及,顯示內(nèi)容為字符串“歐偉明指導(dǎo)數(shù)字系統(tǒng)設(shè)計2018年11月28日”,在取字模數(shù)據(jù)的軟件PCtoLCD2002完美版中,可以很方便地獲取字符串對應(yīng)的字模數(shù)據(jù)(即顯示數(shù)據(jù)),當(dāng)然也可以很方便地獲取顯示內(nèi)容為圖像的字模數(shù)據(jù)。
根據(jù)得到的字模數(shù)據(jù)(即顯示數(shù)據(jù)),在開發(fā)環(huán)境QuartusⅡ中,就可以創(chuàng)建只讀存儲器的初始化數(shù)據(jù)文件ROM_data.mif.只要將字模數(shù)據(jù)拷貝到ROM_data.mif文件中即可。
2.4 創(chuàng)建只讀存儲器
本文在FPGA芯片內(nèi)部實現(xiàn)存儲器ROM單元的設(shè)計,是基于FPGA的免費IP核而實現(xiàn)的。在開發(fā)環(huán)境QuartusⅡ中,利用開發(fā)商提供的免費IP核,設(shè)計了一個包含1 024個字,字長為16 bit的只讀存儲器ROM_1024_ 16。需要提醒的是,在設(shè)計過程中,要選中前面已經(jīng)創(chuàng)建好的只讀存儲器初始化數(shù)據(jù)文件ROM_data.mif這樣就很方便地在FPGA芯片中,完成了存儲單元中存放有顯示數(shù)據(jù)的只讀存儲器ROM_1024_16的設(shè)計。
3 硬件調(diào)試結(jié)果
為了驗證本文所討論的LED點陣顯示系統(tǒng)實際效果,本文按照圖2所示電路,制作了基于FPGA的16x16LED點陣顯示系統(tǒng),實現(xiàn)了在16x16 LED點陣上,向左移動顯示由22個字符組成的字符串“歐偉明指導(dǎo)數(shù)字系統(tǒng)設(shè)計2018年11月28日”。調(diào)試結(jié)果表明,LED點陣顯示穩(wěn)定、清晰、亮度適中、無閃爍感,如果改變控制邏輯單元的時鐘脈沖頻率,就可以改變字符串向左移動顯示的速度。硬件調(diào)試效果如圖3所示。
3.1 硬件系統(tǒng)結(jié)構(gòu)特點
對于采用MCU或ARM的LED點陣顯示系統(tǒng)而言[3-4],由MCU或ARM發(fā)送的顯示數(shù)據(jù)一般是串行傳送給具有鎖存功能的移位寄存器,比如8 bit的移位寄存器74HC595,如果要將一個8 bit的顯示數(shù)據(jù)送到74HC595芯片,就需要8個時鐘周期。然而一屏完整的顯示數(shù)據(jù)往往是遠(yuǎn)大于8 bit,所以就需要更多的時鐘周期;而且移位寄存器中的顯示數(shù)據(jù)送達(dá)LED點陣,是在鎖存時鐘脈沖信號控制下完成的,所以還需要一個時鐘周期,因此,這樣嚴(yán)重制約了系統(tǒng)的整體工作速度,并影響LED點陣顯示屏的刷新率和顯示亮度。本研究的硬件系統(tǒng)主要由FPGA,LED點陣及其驅(qū)動器74HC245組成,結(jié)構(gòu)非常簡單。由于采用FPGA芯片,一屏完整的顯示數(shù)據(jù)并行地由FPGA發(fā)送給驅(qū)動器74HC245,經(jīng)其驅(qū)動后送達(dá)LED點陣,只需要一個時鐘周期。
3.2 FPGA的設(shè)計靈活性
系統(tǒng)中的FPGA芯片內(nèi)部電路結(jié)構(gòu)清晰且結(jié)構(gòu)簡單,F(xiàn)PGA芯片內(nèi)部電路的設(shè)計,是在開發(fā)環(huán)境QuartusⅡ下完成的,控制邏輯單元的設(shè)計采用VHDL硬件描述語言,可以利用VHDL語言很強的行為描述能力,從而實現(xiàn)復(fù)雜的數(shù)字控制算法。存儲器ROM單元的設(shè)計采用基于FPGA的IP核設(shè)計方法,這樣可以簡化設(shè)計過程,很容易獲得任意字長、包括任意多個字的只讀存儲器,并將顯示數(shù)據(jù)以初始化文件的方式融合到存儲器ROM單元的創(chuàng)建過程中。另外,設(shè)計完成后,F(xiàn)PGA是純硬件電路,工作時沒有CPU程序運行,從而可以提高系統(tǒng)可靠性和穩(wěn)定性。
4 結(jié)論
本文以16x16 LED點陣為例,論述了基于FPGA的LED點陣顯示控制方法。實驗結(jié)果對于本技術(shù)領(lǐng)域的技術(shù)人員而言,很容易將這種控制方法用于更大的LED點陣。實驗結(jié)果表明本文介紹的基于FPGA的LED點陣顯示控制方法,充分利用了FPGA運行速度快、1/0引腳多、設(shè)計靈活的特點,具有較好的實際應(yīng)用價值。
注:本文通訊作者為歐偉明。
參考文獻(xiàn)
[1]歐偉明,聶輝,李圣清.基于FPGA的機械抖動測量方法[J]核電子學(xué)與探測技術(shù),2014,34(8):998-1001.
OU Weiming, NIE Hui, LI Shengqing. Measurement methodof mechanical dither based on FPGA [J]. Nuclear electronics&detection technology, 2014. 34(8): 998-1001.
[2]李銳,田帆,鄧賢君,等.基于FPGA的全數(shù)字延時鎖相環(huán)的設(shè)計[J]現(xiàn)代電子技術(shù),2019,42(6):69-75.
LI Rui, TIAN Fan. DENG Xianjun, et al.Design of all-digitaldelay-locked loop based on FPGA [J]. Modern electronics tech-nique, 2019, 42(6): 69-75.
[3]歐偉明,劉歡,李圣清.燃弧時間傳感器的研制[J]電子測量與儀器學(xué)報,2014,28(4):441-446.
OU Weiming, LIU Huan. LI Shengqing. Development of anarc time sensor [J]. Journal of electronic measurement and in-strument. 2014. 28(4): 441-446.
[4]張學(xué)成.基于電力線載波模塊的LED點陣圖文顯示系統(tǒng)[J]液晶與顯示,2011,26(3):350-353.
ZHANG Xuecheng. LED dot matrix graphics and text displaysystem based on power line carrier module [J]. Chinese journalof liquid crystals and displays, 2011. 26(3): 350-353.
[5]鄭爭兵.基于FPGA的圖形點陣液晶顯示系統(tǒng)設(shè)計與實現(xiàn)[J]液晶與顯示,2013,28(3):403-407.
ZHENG Zhengbing. Design and implementation of graphic dotmatrix LCD display system based on FPGA [J]. Chinese journalof liquid crystals and displays, 2013, 28(3): 403-407.
[6]朱曉青,馬定寰,李圣清,等,于BP神經(jīng)網(wǎng)絡(luò)的微電網(wǎng)蓄電池荷電狀態(tài)估計[J].電子測量與儀器學(xué)報,2017,31(12):2042-2048.
ZHU Xiaoqing, MA Dinghuan, LI Shengqing, et al.Estima-tion of state of charge for micro-grid battery based on BP neu-ral network[J].Journal of electronic measurement and instru-ment, 2017. 31(12): 2042-2048.
[7]袁謙,黃波,張多英,等,基于FPGA的可見光波段便攜式光譜儀的設(shè)計[J],現(xiàn)代電子技術(shù),2019.42(6):100-104.
YUAN Qian, HUANG Bo. ZHANG Duoying,et al.Design ofFPGA - based portable spectrometer working in visible lightband [J]. Modern electronics technique, 2019, 42 (6): 100-104.
[8]劉歡.基于FPGA的多路溫度開關(guān)檢測系統(tǒng)的設(shè)計[D].株洲:湖南工業(yè)大學(xué),2015.
LIU Huan. Design of multichannel temperature switch detec-tion svstem based on FPGA [D]. Zhuzhou: Hunan University ofTechnology, 2015.
[9]歐偉明,聶輝,張婷,電氣開關(guān)接點機械抖動次數(shù)的測量[J]電子測量與儀器學(xué)報,2014,28( 11):1268-1273.
OU Weiming, NIE Hui, ZHANG Ting. Measurement of themechanical dithering number of electric switch contact [J]. Jour-nal of electronic measurement and instrument, 2014, 28( 11):1268-1273.
[10]歐偉明,凌云,李圣清.基于同步串行通信的汽車TPMS低功耗設(shè)計[J]汽車安全與節(jié)能學(xué)報,2018,9(4):427-432.
OU Weiming, LING Yun. LI Shengqing. Low power consump-tion design of automobile TPMS based on synchronous serialcommunication [J]. Journal of automotive safety and energy,2018. 9(4):427-432.
作者簡介:蔣中榮(1964-),男,副教授,主要研究方向為PLC控制技術(shù)與嵌入式系統(tǒng)應(yīng)用。
歐偉明(1962-),男,碩士,教授,碩士生導(dǎo)師,主要研究方向為信號處理、嵌入式系統(tǒng)。