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