??? 摘 要: 介紹了XGA標準,設計了一種基于FPGA的XGA標準圖像實時控制器,它將PAL制式的電視信號轉換成XGA格式的信號。重點討論了圖像數(shù)據(jù)的結構轉換過程及控制器的內部結構。
??? 關鍵詞: XGA? FPGA? 雙端口" title="雙端口">雙端口RAM? 圖像轉換控制器
?
??? 可編程邏輯器件FPGA由于具有開發(fā)簡單、靜態(tài)可重復編程和動態(tài)在系統(tǒng)編程的特點,已經成為當今應用最廣泛的可編程專用集成電路(ASIC)。而XGA(eXtended Grophics Adapter)顯示器因其輸出信息量大、輸出形式多樣等特點已經成為目前大多數(shù)設計的常用輸出設備,在FPGA的設計中可以使用很少的資源,就能產生XGA各種控制信號。
1 VGA原理和XGA標準
??? 計算機顯示器的顯示有許多標準,常見的有VGA、SVGA、XGA等。常見的彩色顯示器一般由陰極射線管(CRT)構成,彩色是由R、G、B三基色組成,用逐行掃描的方式進行圖像顯示" title="圖像顯示">圖像顯示。陰極射線槍發(fā)出電子束打在涂有熒光粉的熒光屏上,產生R、G、B三基色,合成一個彩色像素。掃描時從屏幕的左上方開始,從左到右、從上到下進行掃描。每掃完一行,電子束回到屏幕的左邊第一行的起始位置。在這期間,CRT對電子束進行消隱,每行結束時,用行同步信號" title="同步信號">同步信號進行行同步;掃描完所有行,用場同步信號進行場同步,并使行掃描回到屏幕的左上方,同時進行場消隱,預備下一場的掃描。對于普通的VGA(Video Graphics Adapter(Array))顯示器,其引出線共有五種信號:三基色信號(R、G、B);行同步信號(HS);場同步信號(VS)。
??? 對于VGA顯示器的這五種信號的時序驅動要嚴格遵循“VGA工業(yè)標準”,本設計中采用1024×768@60Hz的XGA標準。圖1是XGA行掃描、場掃描的時序圖,表1、表2分別為行掃描、場掃描的時序要求。
??????????????????
??? 設計XGA顯示控制主要注意兩個問題:一個是時序驅動,這是完成設計的關鍵,時序稍有偏差,顯示必然不正常,甚至會損壞彩色顯示器;另一個是XGA信號的電平驅動(XGA信號的驅動電平是模擬信號)。
2 控制器的設計
2.1 控制器原理
??? 本設計的數(shù)據(jù)源是PAL制式的電視信號,數(shù)據(jù)格式為YUV(4:2:2)格式。本設計以FPGA為平臺,將原始的電視信號數(shù)據(jù)轉換為RGB格式的視頻信號,并使圖像的分辨率由720×576提高到1024×768,達到XGA標準。設計可分為FIFO模塊、雙端口RAM控制模塊、圖像結構轉換模塊和色空間轉換模塊。設計選取的雙端口RAM必須能存儲兩幀以上圖像,以保證完成緩沖。當雙端口RAM從一端寫滿一幀圖像數(shù)據(jù)后,在寫滿下一幀數(shù)據(jù)前,開始從另一端讀取第一幀數(shù)據(jù);第二幀寫滿后再讀取第二幀,直到第一幀的數(shù)據(jù)被第三幀數(shù)據(jù)完全覆蓋,不斷重復此過程。圖像結構轉換模塊和色空間轉換模塊將PAL制式(分辨率720×576,場頻50Hz,隔行掃描)的電視信號轉換為XGA(分辨率1024×768,幀頻60Hz,逐行掃描)標準的視頻信號。
2.2 硬件實現(xiàn)
??? 本設計中FPGA采用了Actel公司的APA150芯片。該FPGA芯片具有150 000個系統(tǒng)門,邏輯單元為6144個,內嵌36KB的雙端口SRAM的2個鎖相環(huán)PPL內核,最大支持242個用戶I/O(I/O電壓有3.3V和2.5V兩種可供選擇),支持3.3V、32bit、50MHz的PCI總線,系統(tǒng)時鐘最高為32MHz。雙端口RAM采用賽普拉斯半導體公司(Cypress Semiconductor Corp.)的CYD18S72V雙端口RAM,該芯片容量為256K×72bit,其硬件框圖如圖2所示。
????????????????????????????
2.3 雙端口RAM控制模塊
2.3.1 雙端口RAM簡介
??? 雙端口RAM作為一種特殊類型的RAM,在一些高速數(shù)據(jù)采集與處理系統(tǒng)中得到了廣泛應用。它具有兩個獨立的端口,各自均有一套相應的數(shù)據(jù)總線、地址總線和控制總線,允許兩個端口獨立、異步地對存儲器中的任何存儲單元進行存取操作。當兩個端口同時對存儲器中的同一單元進行存取操作時,可以由其內部仲裁邏輯決定優(yōu)先權。
2.3.2 雙端口RAM的控制
??? 當兩個端口對雙端口RAM存取時,一般存在四種情況:(1)兩個端口同時對不同地址單元讀寫數(shù)據(jù);(2)兩個端口同時對同一地址單元讀出數(shù)據(jù);(3)兩個端口同時對同一地址單元寫入數(shù)據(jù);(4)兩個端口同時讀寫同一地址單元,一個寫入數(shù)據(jù),另一個讀出數(shù)據(jù)。
??? 在(1)、(2)兩種情況下,兩個端口的存取不會出現(xiàn)錯誤,(3)、(4)種情況時會出現(xiàn)競爭現(xiàn)象。為避免因競爭而導致的通信錯誤,可采取“BUSY”功能輸出或通過特殊的軟件處理方法來解決。在本設計中,雙端口RAM僅用來作為數(shù)據(jù)緩沖,一個端口輸入,另一個端口輸出,只要避免出現(xiàn)第四種情況即可。在實現(xiàn)時,將雙端口RAM分成兩個工作區(qū),每個工作區(qū)可以存儲一幀的圖像數(shù)據(jù)。當輸入端口輸入的數(shù)據(jù)寫滿工作區(qū)1后,在寫滿工作區(qū)2前,通過程序控制輸出端口反復從工作區(qū)1中讀取數(shù)據(jù);當工作區(qū)2寫滿后,在輸入端口的數(shù)據(jù)重新寫入工作區(qū)1、工作區(qū)1寫滿前,通過程序控制輸出端口反復從工作區(qū)2中讀取數(shù)據(jù)。多次重復上述過程,可以實現(xiàn)對圖像數(shù)據(jù)的無差錯存取。
??? 在存儲時,要將電視信號的一個奇場和一個偶場的行像素數(shù)據(jù)交錯存儲,這樣就實現(xiàn)了由隔行到逐行掃描的結構轉換。本設計中采用的雙端口RAM為256K×72bit的存儲器,而YUV數(shù)據(jù)格式為每個像素16bit數(shù)據(jù),每行720個有效像素,每行像素占用160個地址,因此每幀圖像占92 160個地址。
2.4 時序產生器模塊
??? 視頻定時產生器產生正確顯示圖像所必需的同步信號——行同步信號、場同步信號。利用FPGA內部時鐘鎖相環(huán)倍頻后的65MHz的主時鐘,來產生符合XGA標準的視頻信號,其分辨率為1024×768、幀頻為60Hz。
????行同步過程的時間以像素節(jié)拍為單位進行測量,用一個計數(shù)器控制。計數(shù)器對輸出的像素進行計數(shù),復位后從0開始,此時圖像顯示處于有效狀態(tài);計到1024時,開始進入行消隱前肩狀態(tài);計數(shù)到1048時,進入行同步狀態(tài);計數(shù)到1148時,進入行消隱后肩狀態(tài);計數(shù)到1343后,在下個像素節(jié)拍到來時計時器清零,重新進入圖像顯示有效狀態(tài)。
??? 場同步過程的時間以行節(jié)拍為單位進行測量,也用一個計數(shù)器控制。計數(shù)器對輸出的行進行計數(shù),復位后從0開始,此時圖像顯示處于有效狀態(tài);計數(shù)到768時,開始進入場消隱前肩狀態(tài);計數(shù)到771時,進入場同步狀態(tài);計數(shù)到777時,進入場消隱后肩狀態(tài);計數(shù)到805后,在下個像素節(jié)拍到來時計時器清零,重新進入圖像顯示有效狀態(tài)。
2.5 FIFO模塊
??? FIFO1(先入先出)是深度為1024、寬度為16位的異步FIFO,寫時鐘為YUV信號的輸入時鐘PCLK,讀時鐘為時鐘發(fā)生器產生的主時鐘MCLK。當輸入的原始數(shù)據(jù)的行、場同步信號都有效時,該FIFO的寫使能有效;當寫地址計數(shù)器數(shù)到一半或計滿時,觸發(fā)讀使能信號,使讀使能信號在后面的360個讀時鐘周期內一直有效。由于讀時鐘頻率大于寫時鐘頻率,所以不會產生數(shù)據(jù)寫滿溢出的現(xiàn)象。
??? FIFO2、FIFO的設計與FIFO1類似,為深度為1024寬度為16位的異步FIFO,寫時鐘為主時鐘。FIFO2、FIFO3在主時鐘的同步下交替按行接收從雙端口RAM中讀出的數(shù)據(jù),當快寫滿時停止從雙端口RAM中讀數(shù)據(jù),同時FIFO的寫使能信號無效,讀使能信號有效。當快讀空時,觸發(fā)寫使能信號,繼續(xù)讀取數(shù)據(jù)。
2.6 圖像結構轉換模塊
??? 該模塊要完成分辨率的轉換,以及幀頻的轉換。
2.6.1 分辨率的轉換
??? 原始信號的分辨率為720×576,目標分辨率為1024×768。轉換的方案是:首先將原始信號做3:4的放大,使像素點數(shù)變?yōu)?60×768,再將每行的兩側各補充32個0,這樣既達到了1024×768的分辨率要求,算法也比較簡單??紤]到一般只注意圖像中間部分,對四周不是很關心,因此,在放大圖像四周補0的做法不會影響圖像的效果。
??? 水平方向插值" title="插值">插值采用三次樣條插值,垂直方向插值采用相鄰兩行內插" title="內插">內插算法,內插函數(shù)采用bisigmoidal[5]函數(shù):
??? ?
式中,a是調節(jié)曲線特性的常數(shù),?駐y是函數(shù)輸入變量。采用臨近兩點y(n+1)和y(n)進行插值的公式如下:
???
式中,K=h(Δy)。
??? 為了避免非線性插值系數(shù)給電路設計帶來的復雜性,將內插系數(shù)存儲于查找表中,根據(jù)內插點與臨近點的相對位置找到對應系數(shù)。
??? 分辨率轉換部分的框圖如圖3所示。
????????????????????????
??? 在插值時,首先將第一行數(shù)據(jù)輸入FIFO2,第二行輸入FIFO3,兩個FIFO交替將數(shù)據(jù)輸入垂直插值器,垂直插值器按行輸出垂直插值后形成的行數(shù)據(jù),輸入到水平插值器。FIFO共輸入3行后,F(xiàn)IFO停止向垂直插值器一個節(jié)拍,垂直插值器將輸出4行像素數(shù)據(jù);水平插值器每讀取3個像素數(shù)據(jù)時停止一個節(jié)拍,從而根據(jù)不同插值系數(shù)和臨近點數(shù)據(jù)插出4個值,從而完成3:4的放大。在輸出放大后的行數(shù)據(jù)時,在行的左端和右端各添加32個零點,這樣就完成了分辨率的轉換。
2.6.2 幀頻的轉換
??? PAL制式每秒奇偶共50場,經過雙端口RAM的存儲后整理為每秒25幀,要轉換為能夠滿足每秒60幀要求的視頻信號,最簡單的辦法就是復制幀。在本設計中,上一小節(jié)中轉換分辨率后的數(shù)據(jù)傳遞給色空間轉換模塊的同時,存入一個存儲器中,在下一幀數(shù)據(jù)處理完成前,將存儲器中的數(shù)據(jù)再次傳輸指定的次數(shù),從而完成幀頻的轉換。幀頻比為5:12,所以每5幀做一次頻率放大,第一幀、第三幀傳輸3次,其余各幀傳輸2次。
2.7 色空間轉換模塊
??? 該模塊接收到的信號是YUV(4:2:2)格式的信號,是16位數(shù)據(jù)線,而要將它轉換成的RGB信號是24根數(shù)據(jù)線,就需要先將每個像素點上丟失的色差信號補回來,即16根數(shù)據(jù)線加寬到24根。格式轉換過程如圖4所示。
????????????????????????
??? 接下來要完成的是由YUV到RGB的色空間轉換,轉換公式如下[6]:
??? ?
??? 在計算時必須把它們都轉換成整數(shù),所以在程序中利用位移寄存器,讓它們左移11位,計算后即可得到RGB數(shù)據(jù)。
??? 采用FPGA技術設計的VGA圖像控制器,大大減少了電路板的尺寸,充分應用了FPGA快速并行處理數(shù)據(jù)的特性(這是其他控制器所不可比擬的),在產生同步信號的同時送出像素數(shù)據(jù),同時增加了系統(tǒng)的可靠性和設計靈活性。解決了嵌入式系統(tǒng)實時圖像顯示的問題,節(jié)約了成本,擴展了應用范圍。
參考文獻
[1] 李國剛,余俊,凌朝東.基于FPGA的VGA圖形控制器的實現(xiàn)方法.信息技術,2006,(7).
[2] 方湘艷,韓威.基于FPGA技術的異步雙端口RAM設計與實現(xiàn).中國集成電路,2005,(1).
[3] 吳蓬勃,張啟民,王朝陽,等.基于FPGA的VGA圖像控制器設計.東北電力大學學報,2006,(8).
[4] 潘松,黃繼業(yè).EDA技術與VHDL.北京:清華大學出版社,2005.
[5] LEE J.Design of a scan format converter using the bisigmoidal interpolation[J].IEEE Trans Consumer Ilectronics,1998,44(3):1115-1120.
[6] Xilinx Inc.Colour space conversion.XAPP637[Z],2002.