《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于FPGA的ARM圖像擴展顯示
基于FPGA的ARM圖像擴展顯示
電子技術(shù)應(yīng)用2012年第2期
黃 俊, 劉一清
華東師范大學 信息科學技術(shù)學院, 上海 200241
摘要: ARM處理器在消費電子及儀器設(shè)備等領(lǐng)域得到了廣泛的應(yīng)用,但是在很多情況下ARM系統(tǒng)的圖像分辨率支持偏低,通過使用FPGA實現(xiàn)圖像縮放器的功能來解決這個問題。采用雙線性插值算法將VGA格式的ARM9圖像信號的轉(zhuǎn)換為XGA格式圖像信號,完成對分辨率的擴展。仿真驗證證明,擴展后的圖像在顯示上取得了良好的效果。
關(guān)鍵詞: FPGA ARM 圖像縮放器 雙線性
中圖分類號: TP931;TN911.73
文獻標識碼: A
文章編號: 0258-7998(2012)02-0131-03
The extending display of ARM image based on FPGA
Huang Jun, Liu Yiqing
School of Information Science and Technology, East China Normal University, Shanghai 200241, China
Abstract: ARM processor is widely used in the field of consumer electronics and instrumentation,but the disadvantage of ARM processor is low resolution in image resolution in many cases. We solve the problem by using FPGA to implement scaler, which can transform the VGA standard image provided by ARM to the XGA standard image by use bilinear interpolation. The results show that the expanded image has a good display by simulation and verification.
Key words : ARM; FPGA; scaler; bilinear

    ARM是目前全球最大的嵌入式芯片技術(shù)的IP提供商,其所擁有的IP已經(jīng)成為眾多芯片設(shè)計公司采納的一種技術(shù)標準和開發(fā)平臺。所以基于ARM 內(nèi)核的SoC已經(jīng)成為嵌入式處理器的開發(fā)重點,可通過ARM實現(xiàn)LCD控制器來完成對嵌入式LCD屏的控制。如果利用TFT屏支持顯示,其圖像分辨率存在局限性,因此通過搭建一個FPGA平臺實現(xiàn)圖像縮放器功能外接LCD顯示器,完成ARM信號的擴展顯示。同時FPGA也能完成對ARM平臺產(chǎn)生的圖像信號進行驗證和仿真,以測試其功能和時序的正確性。XGA顯示器因其顯示量大,輸出形式多樣等特點已經(jīng)成為目前大多數(shù)設(shè)計中的常用輸出設(shè)備,因此本文針對ARM產(chǎn)生的VGA信號通過插值算法對其擴展為XGA標準信號。

1 VESA標準中的VGA與XGA時序
       視頻電子標準協(xié)會(VESA)是非盈利國際組織,主要制定個人電腦、工作站以及消費電子類產(chǎn)品在視頻接口標準,因此本文所設(shè)計的VGA與XGA的時序均按照VESA標準設(shè)計。
    顯示器通常采用逐行掃描的方式,每一幀圖像按順序一行接著一行連續(xù)掃描而成,掃描的過程中由水平同步信號HSYNC和垂直同步信號VSYNC來控制掃描。行掃描和場掃描的時序圖如圖1所示,其行掃描和場掃描的時序要求如表1、表2所示。

圖1 行掃描時序和場掃描時序


2 系統(tǒng)整體設(shè)計
2.1系統(tǒng)框圖

     系統(tǒng)設(shè)計的數(shù)據(jù)源是來自ARM9系統(tǒng)板的視頻信號,其格式為VESA標準的VGA信號。數(shù)據(jù)源進入FPGA后先進行圖像縮放的處理,把輸入的有效像素數(shù)據(jù)利用算法對其進行處理,期間的處理數(shù)據(jù)利用FIFO與DDR2進行緩存,然后把處理后的圖像數(shù)據(jù)按照XGA時序送入視頻編碼芯片,最后送入顯示器顯示。其中FPGA內(nèi)部設(shè)計分為時序控制模塊、時序產(chǎn)生模塊、FIFO模塊、圖像縮放器模塊以及DDR2 SDRAM控制器模塊,如圖2所示。

基于FPGA的ARM圖像擴展顯示系統(tǒng)框圖

圖2 系統(tǒng)原理框圖


2.2 硬件實現(xiàn)
     FPGA采用Altera的EP3C16F484C6芯片,該芯片具有15 408個邏輯單元,504 KB內(nèi)存,56個乘法器和4個PLL鎖相環(huán)內(nèi)核,最大支持346個I/O端口,系統(tǒng)時鐘最高為250 MHz。FPGA開發(fā)板采用了專門的視頻解碼編碼芯片,Silicon Image的視頻編碼芯片SI7170支持VGA到UVGA的格式標準,同時也支持HDTV格式的編碼。DDR2 SDRAM采用三星的K4T51163QC芯片, 其頻率支持267 MHz,本文選取為200 MHz。芯片容量為32 MB×16,實際上只要SDRAM滿足存儲2幀圖像的容量即可滿足本文設(shè)計要求[1]。完成轉(zhuǎn)換后的XGA信號所需的輸出時鐘為65 MHz,可由FPGA內(nèi)部鎖相環(huán)產(chǎn)生。
3 FPGA內(nèi)部模塊工作原理
3.1輸入時序控制模塊與輸出時序控制模塊

     輸入時序控制模塊是根據(jù)輸入視頻信號的同步信號和時序要求,確保有效的圖像數(shù)據(jù)能夠順利寫入FIFO進行緩存。例如當模塊接收到場同步信號時,F(xiàn)IFO進入即將寫入的狀態(tài),當模塊接收到使能信號時, FIFO開始寫入數(shù)據(jù),這樣能確保寫入FIFO的數(shù)據(jù)是從完整1幀圖像的起始開始寫入。
    輸出時序控制模塊的功能是產(chǎn)生輸出圖像所必需的同步信號、場同步信號和行同步信號,以保證輸出圖像的數(shù)據(jù)與時序一致,從而使圖像可以正確地顯示在顯示器上。
     輸入輸出時序控制模塊,按照計數(shù)器的方法進行設(shè)計[2]。例如VGA信號的1幀圖像的總像素要求為800×525,其中有效像素為640×480。對于行掃描來說可設(shè)置1~96像素時鐘計數(shù)為行同步信號,97~144像素時鐘計數(shù)為行消隱后肩,145~784像素時鐘計數(shù)為圖像有效像素顯示,685~800像素時鐘計數(shù)為行消隱前肩。完成一行后,計數(shù)器置0,等待新的行同步信號到來再重新計數(shù)。在圖像有效像素時鐘內(nèi),讓寫入FIFO使能信號處于有效狀態(tài),而其余時間使能信號處于無效狀態(tài),這樣可保證有效圖像數(shù)據(jù)能準確寫入FIFO進行緩存,并等待下一步的處理。

3.2 圖像縮放器模塊
    如圖3所示,圖像縮放器模塊主要完成對輸入圖像數(shù)據(jù)源進行分辨率的縮放。根據(jù)設(shè)計,輸入的圖像數(shù)據(jù)為VGA 640×480格式,輸出的圖像數(shù)據(jù)為XGA 1024×768格式。由于輸入圖像數(shù)據(jù)與輸出圖像數(shù)據(jù)在完整1幀中的每一行像素點和每一列的數(shù)量上之比都為5:8,因此可考慮對輸入的VGA信號作5:8的放大。先對數(shù)據(jù)在水平方向上進行插值放大,然后再進行垂直方向上的放大,設(shè)計中水平方向和垂直方向的插值放大均使用分級雙線性插值算法。

圖像縮放器模塊框圖

圖3 圖像縮放器模塊框圖


3.2.1分級雙線性插值 [3]
     在雙線性插值算法中,插值點的值根據(jù)其相鄰的4個已知點計算得出,如圖4所示。

雙線性插值算法原理圖

圖4 雙線性插值算法原理圖


    已知a、b、c、d為輸入圖像內(nèi)的相鄰的4個點,其灰度值表示為f(x)。待插像素f點映射到原圖像后的坐標值小數(shù)部分為[m,n]。計算f點灰度值的過程如式(1)~式(3)所示:
    f[g]=f[a]+m(f(b)-f(a)) (1)
    f[h]=f[c]+m(f(d)-f(c)) (2)
  f[f]=f[g]+m(f(h)-f(g))
    =(1-m)(1-n)f(a)+m(1-n)f(b)+(1-m)nf(c)+mnf(d)  (3)
    分級雙線性插值使用的4個源圖像像素點都是待插值點的直接鄰點。插值的計算過程如下:
    g(x)=(f(a)(m×N)+f(b)×(1-m)N)/N
其中,m與1-m分別是a點與b點的權(quán)值。因為是做5:8的轉(zhuǎn)換,這里取C=N=8, 將原來為5個像素點的長度區(qū)間劃分為8個區(qū)間,每個區(qū)間都有m×N與(1-m)N這一對權(quán)值組成的整數(shù)對。每個區(qū)間內(nèi)部的待插值點都與該區(qū)間左邊界取同樣的值。8個區(qū)間的權(quán)值對應(yīng)于(8,0)、(7,1)、(6,2)、(5,3)(4,4)、(3,5)、(2,6)和(1,7)。在確定好了點位置后,以查找表的方式寫入權(quán)值與位置之間的關(guān)系,最后可根據(jù)內(nèi)插點與臨近點的相對位置查找對應(yīng)系數(shù),并通過計算得出各像素點的灰階值。
3.2.2具體插值過程
3.2.2.1水平插值

  將雙線性插值分解為水平和垂直方向進行,由于是把原圖像作5:8的放大,所以根據(jù)分級雙線性插值,把原水平方向的5個像素點采用分8級雙線性插值送入水平插值器。水平插值器由計數(shù)器與使能信號同時控制,每間隔5個時鐘,水平插值器使能端置于計算插值狀態(tài),把進入的5個值進行一次插值變成新的8個像素點,之后再間隔5個時鐘,將新的值進入插值器進行插值,直到把1行640個像素點插值為1行1 024個像素點。
3.2.2.2 垂直插值

     垂直插值器完成垂直方向5:8的轉(zhuǎn)換,即5行數(shù)據(jù)變?yōu)?行數(shù)據(jù)的轉(zhuǎn)換,插值過程是按垂直方向?qū)υ瓉淼?行數(shù)據(jù)采用分8級雙線性插值,變換為新的8行數(shù)據(jù)。
     完成水平插值的數(shù)據(jù)流水線型通過FIFO1與FIFO2模塊,期間將FIFO1與FIFO2的值送入垂直插值器進行插值,完成垂直插值后的數(shù)據(jù)送入FIFO3與FIFO4模塊,輸出順序排列在先的送入FIFO3,而另外一行數(shù)據(jù)進入FIFO4。FIFO3與FIFO4之間的數(shù)據(jù)也是流水線型進入到DDR2 SDRAM模塊中,整個過程通過使用狀態(tài)機對垂直插值進行控制,使經(jīng)過垂直插值后的數(shù)據(jù)能以正確的順序完成插值,并且送入DDR2 SDRAM模塊。把對原5行數(shù)據(jù)經(jīng)過水平和垂直插值變?yōu)?行數(shù)據(jù)的時間作為一個周期,直到完成整1幀VGA格式圖像到1幀XGA圖像的放大。
3.3 DDR2 SDRAM控制器模塊
    控制器模塊的具體作用為:當SCALER完成圖像數(shù)據(jù)處理后,把圖像數(shù)據(jù)送進DDR2中儲存,在確保DDR2中存儲有2幀完整圖像時,DDR2的讀出端才開始讀取,從第一幀圖像地址讀取圖像數(shù)據(jù),然后據(jù)根據(jù)時序控制從DDR2輸出。當讀完第一幀后,繼續(xù)讀取第二幀,此時第三幀繼續(xù)寫入原第一幀地址,之后的讀取寫入都按此過程進行。
    由于DDR2 SDRAM不能同時寫入和讀出,所以需要DDR2 SDRAM控制器加以控制??筛鶕?jù)連接到DDR2 SDRAM模塊寫入端和讀出端的FIFO內(nèi)部已存數(shù)據(jù)數(shù)量進行讀寫控制。寫入端前的FIFO即為圖3的FIFO3。連接到DDR2讀出端的FIFO為圖3的FIFO2,它與輸出時序控制模塊共同完成最終所需XGA圖像的輸出。DDR2 SDRAM每次操作指令時,以1行數(shù)據(jù)為單位,即接受1次讀命令,則讀出1行數(shù)據(jù);同樣,接受1次寫入命令,則寫入1行數(shù)據(jù),此1行數(shù)據(jù)同時為XGA格式的1行(1 024個像素點數(shù)據(jù))。
4 仿真與功能實現(xiàn)
     在設(shè)計中,采用Verilog語言對各邏輯模塊進行編寫設(shè)計,在開發(fā)環(huán)境Quartus II 9.1和Modelsim-altera 6.5b下完成對各模塊的時序的仿真和功能的設(shè)計和驗證,如圖5所示為數(shù)據(jù)進入水平插值器后的仿真結(jié)果,水平插值把原5像素插為新8像素的仿真,其中pix為待插值的5個像素,data為插值后的8個新像素。

水平插值5像素插成8像素Modelsim仿真圖

圖5 水平插值5像素插成8像素Modelsim仿真圖


    經(jīng)過對各模塊設(shè)計的仿真,并且對各模塊功能驗證正確后,進行系統(tǒng)整體的仿真驗證,最終將處理完成圖像數(shù)據(jù)送到LCD上進行顯示,經(jīng)過放大后的示例如圖6 所示。仿真驗證表明,得到的圖像時序和數(shù)據(jù)與要求的時序一致,對于圖像數(shù)據(jù)來說雖然雙線性會對屏幕邊緣存在高頻分量的損失[4],使輪廓稍有模糊,但是從圖像上對人眼觀看的影響很小。

經(jīng)過放大的ARM圖像信號在LCD上的顯示(XGA格式)

圖6 經(jīng)過放大的ARM圖像信號在LCD上的顯示(XGA格式)


    介紹了VESA標準中的VGA與XGA時序,通過FPGA平臺設(shè)計圖像縮放器,完成控制信號、時序信號和數(shù)據(jù)信號的同時輸入和控制,同時使用插值算法對分辨率進行放大,達到了對ARM圖像信號的擴展顯示。如要實現(xiàn)更多格式之間的轉(zhuǎn)換,可在程序?qū)懭敫鞣N圖像格式縮放之間的算法,如VGA、XGA、SVGA等格式。在程序中利用狀態(tài)機實現(xiàn)不同格式之間的轉(zhuǎn)換和時序的控制,加強縮放的范圍,擴展其運用。
參考文獻
[1] 張旭,王彬.一種基于FPGA的實時圖像轉(zhuǎn)換控制器的設(shè)計[J].電子技術(shù)應(yīng)用,2007,33(10):66-68.
[2] 陳偉,盧貴主,鄭靈翔. 基于雙線性算法的定標器及其FPGA實現(xiàn)[J].電子技術(shù)應(yīng)用,2008,34(4):40-43.
[3] 朱艷亮. 實時視頻縮放算法研究及FPGA的實現(xiàn)[D].長沙:中南大學,2009.
[4] 孫紅進.FPGA實現(xiàn)的視頻圖像縮放顯示[J]. 液晶與顯示, 2010,25(1):130-133.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。