,,,
(青島大學(xué) 電子信息學(xué)院,青島266071)
隨著微電子技術(shù)及生產(chǎn)工藝的不斷發(fā)展,20世紀90年代產(chǎn)生了可編程邏輯器件FPGA[1],其具有集成度高、可靠性強、處理速度快、功耗低等特點,得到了廣大系統(tǒng)工程師的青睞。FPGA的在系統(tǒng)可編程特性,使硬件系統(tǒng)設(shè)計像軟件設(shè)計一樣靈活方便。VGA(Video Graphic Array)作為一種標(biāo)準視頻信息與顯示器之間的通信接口,被廣泛應(yīng)用于各種顯示系統(tǒng)的終端。
傳統(tǒng)的圖像顯示系統(tǒng)多數(shù)是采用專用處理芯片或微處理器系統(tǒng),其系統(tǒng)存在處理速度慢、功能單一、擴展能力差等問題。使用FPGA器件實現(xiàn)顯示控制是當(dāng)前的一個研究熱點[2-8]。南京航天航空大學(xué)關(guān)珊珊等以美國的Xilinx Spartan-6 xc6slx4-tqg144為核心,外接數(shù)據(jù)采集芯片和數(shù)據(jù)存儲芯片設(shè)計了VGA控制系統(tǒng),將外接的圖像數(shù)據(jù)在LCD顯示器上顯示[9]。西安電子科技大學(xué)魏曉輝將CMOS(Complementary Metal Oxide Semiconductor)攝像頭采集來的圖像信息經(jīng)過視頻編碼芯片SAA7113H對該模擬視頻信號進行編碼,輸出數(shù)字視頻信號和相應(yīng)的控制信號,然后通過FPGA對視頻信號進行提取和緩存,再將圖像信號經(jīng)過D/A轉(zhuǎn)換送入到外部VGA顯示器上進行顯示[10]。
本系統(tǒng)針對FPGA特點,采用圖像陣列存儲與顯示的方法,將VGA顯示的同步控制、圖像顯示地址、像素存儲單元、動圖延遲器、顏色產(chǎn)生等模塊集成在一塊可編程FPGA芯片上,提高了顯示系統(tǒng)的集成度和電路的可靠性。由于FPGA的在系統(tǒng)可編程特性,所設(shè)計的參數(shù)可通過現(xiàn)場編程調(diào)整,增強了顯示系統(tǒng)設(shè)計電路適配的靈活性。在顯示的效果上,提高了顯示圖片的趣味性。
VGA顯示器以逐行掃描的方式顯示圖像[11],掃描從屏幕左上方開始,從左到右,從上到下,進行掃描。每掃完一行,在行同步信號的作用下,掃描點回掃到下一行的起始位置,掃描完所有行,在場同步信號作用下,掃描點回掃到屏幕的左上方。
在行回掃和場回掃期間,由控制信號VGA_BLANK對像素進行消隱。當(dāng)VGA_BLANK有效時,若顏色數(shù)字信號輸出無效,則該掃描像素?zé)o顏色顯示;當(dāng)VGA_BLANK無效時,該掃描像素點顯示由VGA輸送過來RGB電壓值所代表的相應(yīng)的顏色決定。行回掃和場回掃都是在行同步和場同步信號控制下進行,當(dāng)行、場同步脈沖下降沿到來時開始行、場的回掃。根據(jù)VGA顯示工業(yè)標(biāo)準,不同的分辨率會有不同的同步信號驅(qū)動時序要求。以648×480為例,行同步信號在工作時鐘信號的控制下,與模擬信號RGB有如圖1所示的時序關(guān)系。
圖1 行同步信號的時序關(guān)系
行同步信號的時序關(guān)系如圖1所示,要有效顯示一行信號時間需要800個像素的時間,其中顯示一行圖像像素點需要640個像素的時間,行同步負脈沖寬度為96個像素的時間,行消隱前沿需要16個像素點時間,行消隱后沿需要48個像素點時間。場同步信號在工作時鐘信號的控制下,與模擬信號RGB有如圖2所示的時序關(guān)系。
有效顯示一場信號需要525行時間,其中顯示一場圖像需要480個行時間,場同步負脈沖寬度為2個行時間,場消隱前沿需要10個行時間,場消隱后沿需要33個行時間。
圖2 場同步信號的時序關(guān)系
同時,場同步信號與行同步信號之間也存在著一定的時序關(guān)系,如圖3所示。場同步信號的下降沿應(yīng)位于行同步信號的步頭前沿,在最后一行行消隱開始的時候進行場回掃,且場回掃脈沖寬度為2個行時間。本設(shè)計采用的分辨率為640×480,VGA的顯示模式為:640×480×60 Hz,該模式下像素頻率為 25 MHz(實際為25.125 MHz),當(dāng)顯示不同的分辨率時,同步信號的頻率不同,但是行同步信號和場同步信號的時序分析是相同的。
圖3 場同步信號與行同步信號的時序關(guān)系
采用美國Altera公司生產(chǎn)的DE2-70 系列,F(xiàn)PGA的芯片型號為CycloneII EP2C35F672C6N,具有多達70 000個邏輯單元和豐富的應(yīng)用接口,為使用者提供了便捷的邏輯設(shè)計功能。
系統(tǒng)的總體結(jié)構(gòu)框圖如圖4所示,將圖片數(shù)據(jù)源信號轉(zhuǎn)換成二進制數(shù)據(jù)存儲到FPGA芯片中,通過內(nèi)部信號控制送給數(shù)模轉(zhuǎn)換芯片ADV7123,將R、G、B 數(shù)字信號轉(zhuǎn)換成R、G、B 模擬信號,在行、場同步信號控制下,在VGA顯示器上得到顯示。實驗板上的50 MHz時鐘信號經(jīng)過FPGA分頻處理產(chǎn)生數(shù)模轉(zhuǎn)換,ADV7123芯片需要的視頻同步控制信號、消隱信號以及工作時鐘,為整個顯示系統(tǒng)的正常運行提供脈沖信號。
圖4 總體結(jié)構(gòu)框圖
ADV7123芯片是一款高速、高精度數(shù)模轉(zhuǎn)換芯片,擁有3路、10位視頻數(shù)模轉(zhuǎn)換器,可以轉(zhuǎn)換產(chǎn)生紅、綠、藍三基色模擬信號。VGA接口連接到FPGA主板的端口信號有行同步信號VGA_HS和場同步信號VGA_VS,這兩個同步信號需要滿足圖1、圖2的時序關(guān)系,控制圖像在顯示屏中的顯示。
VGA_CLOCK是芯片ADV7123的工作時鐘,VGA_R[0:9]、VGA_G[0:9]、VGA_B[0:9] 是紅、綠、藍三顏色的數(shù)字輸入信號,轉(zhuǎn)換后的三基色模擬信號通過端口IOR、IOG、IOB輸出。VGA_BLANK是消隱控制信號, VGA_BLANK為低電平時,R0~R9、G0~G9、B0~B9的數(shù)字輸入信號無效,VGA_BLANK信號由行同步信號和場同步信號邏輯與得到。VGA_SYNC是視頻同步控制信號,低電平有效。
圖5 程序設(shè)計流程圖
主要在軟件開發(fā)平臺Quartus II上運用硬件描述語言Verilog進行相關(guān)信號的設(shè)計。設(shè)計流程圖如圖5所示,分為8個模塊:分頻器模塊、同步信號設(shè)計模塊、地址生成器模塊、延遲模塊、選擇控制模塊、存儲器模塊、三選一電路模塊、顏色產(chǎn)生器模塊。
實驗板上的50 MHz時鐘信號經(jīng)過分頻器分頻可得到工程需要的各種頻段的脈沖信號,在脈沖信號的控制下,實現(xiàn)滿足圖1、圖2中時序關(guān)系的同步時序脈沖信號。同步時序脈沖信號控制著圖片數(shù)據(jù)地址的生成,生成地址作為三個圖片存儲器地址,存儲器1、存儲器2、存儲器3中分別存儲著圖片數(shù)據(jù)。
圖片數(shù)據(jù)在選擇控制模塊的控制之下,經(jīng)過三選一電路選出需要的圖片數(shù)據(jù),再賦值給顏色產(chǎn)生器。選擇控制模塊的工作脈沖由延遲模塊提供。顏色產(chǎn)生器的顏色數(shù)據(jù)輸出給ADV7123芯片,進行數(shù)模轉(zhuǎn)換后送到VGA顯示器。
根據(jù)VGA顯示原理可知,行同步信號要有效顯示一行信號需要800個像素的時間,因此需要對25 MHz的工作時鐘進行800分頻,得到31 kHz的行同步信號HS;同理再對HS進行525分頻,將得到59 Hz的場同步信號VS。HS與VS將連接到VGA端口的VGA_HS、VGA_VS上來同步控制顏色模擬信號的輸出。
系統(tǒng)設(shè)計了水平計數(shù)器hcnt和垂直計數(shù)器vcnt來實現(xiàn)圖1和圖2行、場同步信號HS、VS的時序關(guān)系。當(dāng)(hcnt≥Td+ Te +Tf) 且 (hcnt≤Td+Te +Tf+Ta)) 時, HS被賦值0,否則HS被賦值1,以滿足行同步時序要求;當(dāng)(vcnt≥Td+ Te +Tf) 且 (vcnt≤Td+Te +Tf+Ta) 時,VS被賦值0,否則VS被賦值1,以滿足場同步時序要求。消隱信號VGA_BLANK由HS、VS的邏輯與得到;同步信號VGA_SYNC低電平0有效賦值。經(jīng)過軟件開發(fā)平臺上的邏輯分析儀Signal Tap II,觀察該設(shè)計的主要信號波形及其之間的邏輯關(guān)系,仿真結(jié)果如圖6所示。
圖6 程序設(shè)計VGA接口時序仿真圖(a)
由圖6可知,當(dāng)水平計數(shù)器hcnt計數(shù)到640+8+8=656 時,行同步信號HS由高電平變?yōu)榈碗娖?,進入下一行的行消隱期。為保證VS的邊沿時序要求,每當(dāng)hcnt=648時,vcnt值加1。ADV7123芯片的消隱信號BLANK滿足HS邏輯與VS 的邏輯關(guān)系。當(dāng)消隱信號BLANK為低電平時,即便圖片數(shù)據(jù)data_rgb有值,VGA接口的數(shù)據(jù)信號R,G,B為低電平,液晶顯示屏上也無圖像顯示。
圖7 程序設(shè)計VGA接口時序仿真圖(b)
由圖7 可知,當(dāng)水平計數(shù)器hcnt計數(shù)到640+8+8+96=752 時,行同步信號HS由低電平變?yōu)楦唠娖?,完成行消隱。
圖8 程序設(shè)計VGA接口時序仿真圖(c)
由圖8可知,當(dāng)水平計數(shù)器hcnt計數(shù)到799時,計數(shù)歸零,重新計數(shù),開始又一行的像素計數(shù)。當(dāng)BLANK信號為高電平且SYNC有效時,圖片數(shù)據(jù)data_rgb值為111,顏色信號R、G、B分別為1、1、1,液晶顯示屏上有圖片顯示。
該設(shè)計采用的圖片像素是128×128的,設(shè)計了中間信號addl、addh分別代表圖片的長和寬,且位寬都為7位,那么圖片的地址則由addl、addh共同來表示addr={addh, addl}。
圖片地址的產(chǎn)生由計數(shù)器hcnt、vcnt共同控制,addl=hcnt, addh=vcnt。由圖9可以看出,低7位圖片數(shù)據(jù)地址addl由低7位的水平計數(shù)器hcnt提供,高7位圖片數(shù)據(jù)地址addh由低7位的場計數(shù)器vcnt提供,總的圖片地址addr由addh、addl并接得到。
圖9 地址生成器的時序仿真圖
本設(shè)計要動態(tài)顯示3張圖片,需要設(shè)計3個存儲器,分別用來存儲3張圖片數(shù)據(jù)。圖片分辨率為128×128,故存儲數(shù)組有16 384個數(shù)組,3位的字寬。地址生成器的地址輸出addr作為存儲器rom_image的14位地址輸入,由地址決定輸出位寬為3位的圖片數(shù)據(jù)。
設(shè)計延遲模塊是為了讓人的眼睛能夠捕捉到圖片的閃動變化。將25 MHz的時鐘信號1000萬分頻來控制圖片的閃爍,大約0.4 s變動一張,從而讓人眼能觀察到有趣的圖片變動情況。
設(shè)計要求動態(tài)顯示圖片,存儲器中存儲的圖片數(shù)據(jù)需要被循環(huán)讀取,實現(xiàn)圖片循環(huán)顯示的目的。模塊設(shè)計了一個循環(huán)語句,依次循環(huán)讀取3個存儲器中的數(shù)據(jù),達到視覺上的動圖效果。為了可以看出是3張圖片的循環(huán),設(shè)計選取了3張顏色分明的圖片,可以清楚地看到圖片的動態(tài)顯示效果。從圖10中可以看出,存儲器選擇控制信號data_s,當(dāng)data_s取值為0時,圖片數(shù)據(jù)data_rgb取存儲器1的數(shù)據(jù)輸出data1; 當(dāng)data_s取值為1時,圖片數(shù)據(jù)data_rgb取存儲器2的數(shù)據(jù)輸出data2;當(dāng)data_s取值為2時,圖片數(shù)據(jù)data_rgb取存儲器3的數(shù)據(jù)輸出data3。通過控制信號data_s的取值,實現(xiàn)控制圖片數(shù)據(jù)輸出的目的。
圖10 選擇控制模塊的時序仿真圖
從存儲器中讀取到的圖片數(shù)據(jù)經(jīng)過選擇控制模塊選擇之后,賦值給數(shù)據(jù)data_rgb,在一定條件下data_rgb再將顏色值賦給信號{R,G,B},得到紅、綠、藍3路數(shù)字信號,這3路數(shù)字信號會傳輸給數(shù)模轉(zhuǎn)換器ADV7123,轉(zhuǎn)換過后的模擬信號才會傳輸給VGA接口。顏色生成器模塊的時序仿真圖如圖11所示,隨著工作時鐘VGA_CLK上升沿的到來,圖片數(shù)據(jù)data_rgb的值賦值給顏色信號{R,G,B}。
圖11 顏色生成器模塊的時序仿真圖
本設(shè)計采用的是mif文件生成器來提取圖片數(shù)據(jù)的,本設(shè)計共使用了3張圖片,分辨率都是128×128,生成的文件數(shù)據(jù)位寬為3位,有8種色彩。其中3位 RGB 數(shù)據(jù)顏色編碼見表1,可以看出只有8種色彩顯示,分別為黑、藍、綠、青、紅、品、黃、白。
表1 3位RGB數(shù)據(jù)顏色編碼
在Quartus II軟件平臺上對整個工程進行引腳的連接與編譯,下載到FPGA板上運行顯示,在與VGA端口相連接的顯示器上可以看到連續(xù)循環(huán)閃動3張圖片,如圖12所示。
圖12 實驗結(jié)果顯示圖
由顯示結(jié)果可知,該設(shè)計實現(xiàn)了3幅不同圖片的循環(huán)顯示。為了實現(xiàn)視覺上圖片動態(tài)顯示的效果,設(shè)計中將3張圖片循環(huán)交替地在VGA屏上顯示。設(shè)計方案中,采用了3個存儲器來存儲3張圖片的顏色數(shù)據(jù),3張圖片的數(shù)據(jù)是在選擇控制模塊的控制選擇下,來決定哪一張的圖片數(shù)據(jù)得以輸出的。在選擇控制模塊中設(shè)計了一個內(nèi)循環(huán),依次選擇輸出的圖片數(shù)據(jù),實現(xiàn)了圖片動態(tài)顯示效果。
FPGA芯片邏輯資源豐富、運算速度快,適合圖像存儲與顯示控制。本文使用Altera( 被Intel(收購))的FPGA系列中的EP2C70F896C6N芯片,在Quartus II 工作平臺下,利用Verilog硬件描述語言,實現(xiàn)了VGA多幅圖片動態(tài)彩色顯示系統(tǒng)的設(shè)計。
[1] 楊海銅, 孫嘉斌, 王慰. FPGA器件設(shè)計技術(shù)發(fā)展綜述[J]. 電子與信息學(xué)報, 2010, 32(3): 714-727.
[2] Carlos Alberto Ramos-Arreguína, Juan Carlos Moya Moralesa,ect. FPGA Open Architecture Design for a VGA Driver[C]//The 2012 Iberoamerican Conference on Electronics Engineering and Computer Science, Procedia Technology 2012(3): 324-333.
[3] Venkatraman Kandadai, Moorthi Sridharan, ect. A Comprehensive Embedded Solution for Data Acquisition and Communication Using FPGA [J]. Journal of Applied Research and Technology, 2017(1): 45-53.
[5] J. Kotyza, V Kasik. Image Processing of Composite Video with FPGA Programmable Logic[J]. IFAC-PapersOnLine, 2016, 49(25): 482-486.
[6] 朱奕丹, 方怡冰. 基于FPGA的圖像采集與VGA顯示系統(tǒng)[J]. 計算機應(yīng)用, 2011, 31(5):1258-1261.
[7] 肖凡, 馬婭婕, 尹首一,等. FPGA串行通信的視頻疊加系統(tǒng)的設(shè)計[J].儀表技術(shù)與傳感器, 2016(2) :72-75.
[8] 陳平平, 楊雷, 張志堅. 基于FPGA的VGA數(shù)據(jù)線測試儀的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù), 2016, 39(14):127-130.
[9] 關(guān)珊珊, 周潔敏. 基于FPGA的圖像顯示技術(shù)研究[D]. 南京: 南京航空航天大學(xué), 2012.
[10] 魏曉輝. 基于FPGA的實時視頻圖像采集與VGA顯示系統(tǒng)設(shè)計研究[D]. 西安: 西安電子科技大學(xué), 2015.
[11] 劉威, 石彥杰, 高博. 基于FPGA的VGA顯示模式識別[J]. 計算機工程與科學(xué), 2008,30(4):152-155.