文獻標識碼: A
文章編號: 0258-7998(2012)02-0131-03
ARM是目前全球最大的嵌入式芯片技術的IP提供商,其所擁有的IP已經成為眾多芯片設計公司采納的一種技術標準和開發(fā)平臺,。所以基于ARM 內核的SoC已經成為嵌入式處理器的開發(fā)重點,,可通過ARM實現LCD控制器來完成對嵌入式LCD屏的控制。如果利用TFT屏支持顯示,,其圖像分辨率存在局限性,,因此通過搭建一個FPGA平臺實現圖像縮放器功能外接LCD顯示器,完成ARM信號的擴展顯示,。同時FPGA也能完成對ARM平臺產生的圖像信號進行驗證和仿真,,以測試其功能和時序的正確性。XGA顯示器因其顯示量大,,輸出形式多樣等特點已經成為目前大多數設計中的常用輸出設備,,因此本文針對ARM產生的VGA信號通過插值算法對其擴展為XGA標準信號。
1 VESA標準中的VGA與XGA時序
視頻電子標準協會(VESA)是非盈利國際組織,,主要制定個人電腦,、工作站以及消費電子類產品在視頻接口標準,因此本文所設計的VGA與XGA的時序均按照VESA標準設計,。
顯示器通常采用逐行掃描的方式,,每一幀圖像按順序一行接著一行連續(xù)掃描而成,,掃描的過程中由水平同步信號HSYNC和垂直同步信號VSYNC來控制掃描。行掃描和場掃描的時序圖如圖1所示,,其行掃描和場掃描的時序要求如表1,、表2所示。
圖1 行掃描時序和場掃描時序
2 系統(tǒng)整體設計
2.1系統(tǒng)框圖
系統(tǒng)設計的數據源是來自ARM9系統(tǒng)板的視頻信號,,其格式為VESA標準的VGA信號,。數據源進入FPGA后先進行圖像縮放的處理,把輸入的有效像素數據利用算法對其進行處理,,期間的處理數據利用FIFO與DDR2進行緩存,,然后把處理后的圖像數據按照XGA時序送入視頻編碼芯片,最后送入顯示器顯示,。其中FPGA內部設計分為時序控制模塊,、時序產生模塊、FIFO模塊,、圖像縮放器模塊以及DDR2 SDRAM控制器模塊,如圖2所示,。
圖2 系統(tǒng)原理框圖
2.2 硬件實現
FPGA采用Altera的EP3C16F484C6芯片,該芯片具有15 408個邏輯單元,,504 KB內存,,56個乘法器和4個PLL鎖相環(huán)內核,最大支持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幀圖像的容量即可滿足本文設計要求[1]。完成轉換后的XGA信號所需的輸出時鐘為65 MHz,,可由FPGA內部鎖相環(huán)產生,。
3 FPGA內部模塊工作原理
3.1輸入時序控制模塊與輸出時序控制模塊
輸入時序控制模塊是根據輸入視頻信號的同步信號和時序要求,確保有效的圖像數據能夠順利寫入FIFO進行緩存,。例如當模塊接收到場同步信號時,,FIFO進入即將寫入的狀態(tài),當模塊接收到使能信號時,, FIFO開始寫入數據,,這樣能確保寫入FIFO的數據是從完整1幀圖像的起始開始寫入。
輸出時序控制模塊的功能是產生輸出圖像所必需的同步信號、場同步信號和行同步信號,,以保證輸出圖像的數據與時序一致,,從而使圖像可以正確地顯示在顯示器上。
輸入輸出時序控制模塊,,按照計數器的方法進行設計[2]。例如VGA信號的1幀圖像的總像素要求為800×525,,其中有效像素為640×480,。對于行掃描來說可設置1~96像素時鐘計數為行同步信號,97~144像素時鐘計數為行消隱后肩,,145~784像素時鐘計數為圖像有效像素顯示,,685~800像素時鐘計數為行消隱前肩。完成一行后,,計數器置0,,等待新的行同步信號到來再重新計數。在圖像有效像素時鐘內,,讓寫入FIFO使能信號處于有效狀態(tài),,而其余時間使能信號處于無效狀態(tài),這樣可保證有效圖像數據能準確寫入FIFO進行緩存,,并等待下一步的處理,。
3.2 圖像縮放器模塊
如圖3所示,圖像縮放器模塊主要完成對輸入圖像數據源進行分辨率的縮放,。根據設計,,輸入的圖像數據為VGA 640×480格式,輸出的圖像數據為XGA 1024×768格式,。由于輸入圖像數據與輸出圖像數據在完整1幀中的每一行像素點和每一列的數量上之比都為5:8,,因此可考慮對輸入的VGA信號作5:8的放大。先對數據在水平方向上進行插值放大,,然后再進行垂直方向上的放大,,設計中水平方向和垂直方向的插值放大均使用分級雙線性插值算法。
圖3 圖像縮放器模塊框圖
3.2.1分級雙線性插值 [3]
在雙線性插值算法中,,插值點的值根據其相鄰的4個已知點計算得出,,如圖4所示。
圖4 雙線性插值算法原理圖
已知a,、b,、c、d為輸入圖像內的相鄰的4個點,,其灰度值表示為f(x),。待插像素f點映射到原圖像后的坐標值小數部分為[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點的權值,。因為是做5:8的轉換,這里取C=N=8,, 將原來為5個像素點的長度區(qū)間劃分為8個區(qū)間,,每個區(qū)間都有m×N與(1-m)N這一對權值組成的整數對。每個區(qū)間內部的待插值點都與該區(qū)間左邊界取同樣的值,。8個區(qū)間的權值對應于(8,0),、(7,1)、(6,2),、(5,3)(4,4),、(3,5)、(2,6)和(1,7),。在確定好了點位置后,,以查找表的方式寫入權值與位置之間的關系,最后可根據內插點與臨近點的相對位置查找對應系數,,并通過計算得出各像素點的灰階值,。
3.2.2具體插值過程
3.2.2.1水平插值
將雙線性插值分解為水平和垂直方向進行,由于是把原圖像作5:8的放大,,所以根據分級雙線性插值,,把原水平方向的5個像素點采用分8級雙線性插值送入水平插值器。水平插值器由計數器與使能信號同時控制,,每間隔5個時鐘,,水平插值器使能端置于計算插值狀態(tài),把進入的5個值進行一次插值變成新的8個像素點,,之后再間隔5個時鐘,,將新的值進入插值器進行插值,直到把1行640個像素點插值為1行1 024個像素點。
3.2.2.2 垂直插值
垂直插值器完成垂直方向5:8的轉換,,即5行數據變?yōu)?行數據的轉換,,插值過程是按垂直方向對原來的5行數據采用分8級雙線性插值,變換為新的8行數據。
完成水平插值的數據流水線型通過FIFO1與FIFO2模塊,,期間將FIFO1與FIFO2的值送入垂直插值器進行插值,,完成垂直插值后的數據送入FIFO3與FIFO4模塊,輸出順序排列在先的送入FIFO3,,而另外一行數據進入FIFO4,。FIFO3與FIFO4之間的數據也是流水線型進入到DDR2 SDRAM模塊中,整個過程通過使用狀態(tài)機對垂直插值進行控制,,使經過垂直插值后的數據能以正確的順序完成插值,,并且送入DDR2 SDRAM模塊,。把對原5行數據經過水平和垂直插值變?yōu)?行數據的時間作為一個周期,直到完成整1幀VGA格式圖像到1幀XGA圖像的放大,。
3.3 DDR2 SDRAM控制器模塊
控制器模塊的具體作用為:當SCALER完成圖像數據處理后,,把圖像數據送進DDR2中儲存,在確保DDR2中存儲有2幀完整圖像時,DDR2的讀出端才開始讀取,,從第一幀圖像地址讀取圖像數據,,然后據根據時序控制從DDR2輸出。當讀完第一幀后,,繼續(xù)讀取第二幀,,此時第三幀繼續(xù)寫入原第一幀地址,之后的讀取寫入都按此過程進行,。
由于DDR2 SDRAM不能同時寫入和讀出,所以需要DDR2 SDRAM控制器加以控制,??筛鶕B接到DDR2 SDRAM模塊寫入端和讀出端的FIFO內部已存數據數量進行讀寫控制。寫入端前的FIFO即為圖3的FIFO3,。連接到DDR2讀出端的FIFO為圖3的FIFO2,,它與輸出時序控制模塊共同完成最終所需XGA圖像的輸出。DDR2 SDRAM每次操作指令時,,以1行數據為單位,,即接受1次讀命令,則讀出1行數據,;同樣,,接受1次寫入命令,則寫入1行數據,,此1行數據同時為XGA格式的1行(1 024個像素點數據),。
4 仿真與功能實現
在設計中,采用Verilog語言對各邏輯模塊進行編寫設計,,在開發(fā)環(huán)境Quartus II 9.1和Modelsim-altera 6.5b下完成對各模塊的時序的仿真和功能的設計和驗證,,如圖5所示為數據進入水平插值器后的仿真結果,水平插值把原5像素插為新8像素的仿真,其中pix為待插值的5個像素,,data為插值后的8個新像素,。
圖5 水平插值5像素插成8像素Modelsim仿真圖
經過對各模塊設計的仿真,并且對各模塊功能驗證正確后,進行系統(tǒng)整體的仿真驗證,,最終將處理完成圖像數據送到LCD上進行顯示,,經過放大后的示例如圖6 所示。仿真驗證表明,,得到的圖像時序和數據與要求的時序一致,,對于圖像數據來說雖然雙線性會對屏幕邊緣存在高頻分量的損失[4],使輪廓稍有模糊,但是從圖像上對人眼觀看的影響很小,。
圖6 經過放大的ARM圖像信號在LCD上的顯示(XGA格式)
介紹了VESA標準中的VGA與XGA時序,通過FPGA平臺設計圖像縮放器,,完成控制信號、時序信號和數據信號的同時輸入和控制,,同時使用插值算法對分辨率進行放大,,達到了對ARM圖像信號的擴展顯示。如要實現更多格式之間的轉換,,可在程序寫入各種圖像格式縮放之間的算法,,如VGA、XGA,、SVGA等格式,。在程序中利用狀態(tài)機實現不同格式之間的轉換和時序的控制,加強縮放的范圍,,擴展其運用,。
參考文獻
[1] 張旭,王彬.一種基于FPGA的實時圖像轉換控制器的設計[J].電子技術應用,,2007,,33(10):66-68.
[2] 陳偉,盧貴主,,鄭靈翔. 基于雙線性算法的定標器及其FPGA實現[J].電子技術應用,2008,34(4):40-43.
[3] 朱艷亮. 實時視頻縮放算法研究及FPGA的實現[D].長沙:中南大學,2009.
[4] 孫紅進.FPGA實現的視頻圖像縮放顯示[J]. 液晶與顯示, 2010,,25(1):130-133.